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 "Configuració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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWVWr/N0?IS@^ޙ=hTM'2uȝǞ!0siBݠW Cx> g"_+.3b)3%(Y/5&(=R3l?N/5N#5%P)n=2֪  <9kv777R99ĬTRS 3٭ H5f" ٵD|9ж3)!6KPӷ0"ظ!C4x@ϹiPK-4%Z"=`r{f6I3\-M- F:&t3K1-:Kh--%69:Y(+ ! ;H)d>77 Q#\]5<8)JBt$ '0X3gI UEMV5kAd>HBGh<C*CX w)F S<sS*./^(.?W&;-'0U$,@1 K4UA  $>#MCq%%%$1--. 5V-rxQ](O.-N|-E!-(CVD8>36r4:Ax[1,&(e YBv$M<-DE! _,!!!8R?kAB :L 4#!>0S,+.# J1|?1&"I3Ykvnngdj07h25 4+4`$6YtKPJ c\ W > WW : H ^3 J F H$ `m I Y Qr = U>X2K.GE8HaJq7P9E@XCV]5MG8>W?7WP:#+6b!"9C2.$Gl:AB ?Lo?BQdvx |9" # 7  I S "## &#o0#c\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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ónConfiguració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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWVUp,@ <-5jJ9@-d<ϛ~'+Coj@^aRLTP H$m$y%#Iey΢ 0ե!%'> f9#"/8Og5&4ݧ%78(pQL8&H4o {-Ca x EnկD$^&'+ҰJIX(?-T/ʲ۲j#w})#Cg5 LYp(1 3=Pq5¹R<KV2P9)7U;B+~#μҼ%"o` (1 @K!e$0/!*JQlz14yNnR =$* O Ye} %. .&'1N(&:X1=)G.:iy(K1.},W 1#<A`( ,)&Ip+ ($!1F\ p |>$]"6 (+/$[nTyDa$i)G&>/e895> Ye/t68;&Pw"'9a>?Vi1Ax#}#D )4I \i:76>Tj C.EZ o|#.'V0JNeBKi*x:&N<]VP@PL%/U/q2 ,,@ m'JcZeLe Ts;T>YIID,5q9RM4RY4/Ud84R(;{/27_Rf/MIM=[#S9/ M=*<YTM2K9![jz-  #}*)}xPx$Bg+#*.8C-|:(*<Oacgn /%-  N c\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWV6<ؘ<R"$̚yTΛ5c7qR~ğhC%Ң)EG@D{1kiթY"o2[NeMmMsMOj_5ʯH)I+s1[Ѱ-! +BMnD+O-K}ɸ2azD+T./}ۻwYѼ{QͽQEWDWOJ<)+-E98O<BL\,yc G!AiE#VliZXm_JD>P+K?\-#/> JK{M~`N,.;[1KtHQz%NA81j4oX!p!;ZZz87T'||ZVrM*)A2kchhk,df+T:a5+S>/.0bGy$ z|j2:tm@#b=d" 8 H B ,L Oy 2 v Bs  d X@ ^ M F:da5!7YbuNK';sBgOZ\g 395,,%YLsG@ AYV!%U#^{$%G%J6&&.&0&L&$A'f() )*K+(L+9u++?+h,<x,P,p-]w-h->.]..[/T/a900E)1 o1k4^4U[56'9<=4ABOCxD _GjGG;HrH=I9XI1I/I"I'J)?JiJL KLWKJK/K/L3OL1L;LLqM= NKNN1O OBO%PC?P/PP8P#Q*Q#RRSi SfsS_S`:TTM#U[qU=UB V'NV.vVV&WW:XyXw7YZY> ZEIZPZ/Z1[XB[Y[B[G8\\C]7^^_B`q`DarasZbbttcclddeffb+ggk*hMh~hDci}iZ&jkjjlkYkQlZll7mmmBnnn]o}ophppiqUqUrVr3s Ss-ts"sCt7 vAv1^vv3vvcw/x2y-z0|*:eV<uxoxk01JQ{TЄׄ!% 36=SC$%ӅD<>{ r!""Dgzc\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWV+.˘+&GB=RJ"ۚTS~FyE  34{e:H;D9ɡ#|â7@.x,;#h/+<%"=`p8ͥ?+>C.?ͩ! ?/%o?8ժ'AGU?߫@@`AAN%Et !ȭ.(;;Z q~o#'.%7#]2ķ]!f #͸,  8&_vKE#,<F d $ɾQi'%4-<4/q-<&/->](2)"#%7IL(  3@!ZC|<< NYxH0L/q.=*9Ba!z 16XT\eJ{@g]oA%G:V@3BN,#%!:CR&YP7h0}*9# 0)>6h, 5 *@k/t/" 'A&V5}# g,t$&"Lr ~ /!J&l+:' 259h:0>&Ce?86"TY?96 %3l'vM^$MT,VG8XX>?0Mk!Xh>"YP$u '!)#+&O*v)., CM,E/$4YyXa[|U\.V( 2(6[1D!>.`fuel?NAa@OB4 >w I = R> M \ L< U 9 6 EP 8 7 F 9N 4 , = L(<uAPCE:I9FH0?RASP@9'Ha87< #BQx;S.?@n@V@GE 1BDH*Lw# !!! !f!c\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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 \7xy$*0HE*%k$D84: 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@1Hw151/1A&2.h2,2>2+3/3 83B3^3363(,4U43t4<484G5f5 i5u5y5"}5555Wk88%:(:(:K;P;@i;M;";6<R<3%=2Y=K=P= )>4>+L>)x>">(>>? ?0?B?&U?)|?,?2?@a@ @/@6@ @@ A#A!5A#WA!{A-A1AFA)DBnBB3B BB B#BC#C6C*KC2vCGC0CE"D/hDDD-MEC{E'E*EFF92FlF FF:FF4F %G./G^GgG6{GG'G<G!*HLH$eHH?HLH5I8SII&I;I J-&J)TJ~J(JJ'J8J/KKKcK$tK9KKK LLL& M^3M MMM#MM$ N;0NlN'N)N+ND ONO=gO=OFO1*P?\P=PDP;Q[QKyQQQQR(R=RXRJrR4R2R%S@SXSmSS?S@S(T?FT6T T TTUU&7U(^UUU:U)U>V2FVyVVVVVhVVTW_W) X5X/RX(XXX&XFY6MYKY5Y*ZA1Z)sZ0Z1Z.[_/[=[7[N\7T\?\T\>!];`]P]E]73^Lk^6^^_%_@__:`@P``,`?`>aHTaaaa a*aabb[dgw'9;F=2Z.7jX bd|v4+iythL D8zG%$I*S]c`HJV[\(q:n)oWQRK~>f1AY @T0 P"m-se<O& rk{ a/U!NBE^3#5?uMCp6x},_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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWVZu.L7FQ]>\KkfҚN69.-/џ{E[URBGMpb"Ӣi-`/>R/),5N%g2ͥWcX6ة&67O$J'?;_>˫j >u6:8&9_IM1A0`J%$6P WHb1#K(o09ɷRVt&,/#\#=@ M\ٻMa0N9$ڿ.7K,3xL0*96O*3z/H&',N%{";`y( 4 ER W cp*E65J $+IuyQ*cE!-)Mw6J?\ eq>Bk8tC W!pyQ2<Ko, .4cIxEJ$)o-.H*AY7n+- (!:J* 5A2Po '@'F* '5*(($+K*jvOo6/-5c.yG%.BE@A 2&4YH65iD<3-,%d\&Sx_Ch>EHWoM/'1W"8EQ;>* <.Ix)-0O0-Ky.~J-DF:$ !9oN}v<ml!l+'2A>t 44&'[1n{$kO h\ M C \W A N gE L K RF k P ]V X ; YI<6M3e;:Wph`6:Tq3G`BDF8/QhKJcQJ<S=9+ApG+S$,FDB= (@FeH/ ; N d     t#|## #x#c\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWV&C3(\Os9ÙWUsrKm7. ;+#ChAK^iOVL]b)E0H¤? -K/y9# 4E/^8LǨ21"d5ժM#CCg4"AH\ODS:9Sȭ_U|Ү+= OU] # Ni%(5F0|3U7F0 :"X{5 ƺӺ0׺޻`lm3~7Ϳ % 6:1\l5W:Wp:\:5UW4-&Fm'qGs*$ <H d 4 A M1n@2E' m"x *Y5| r!|D! $$%I oAlRRhH;4_pG9/iR|tQD)K( 5"Ux.DB/^r/7w9$F#/ShD+G(9;b/120Du)K (lj(7`vh"aL %(6 _ m%O^/ $'9a%rG$?@EDD&:79r6@B$Dg&0%X]|bJJm85QV !<Uj}]++FZp(9Z(r81 >+j&,0 :;#>"b22T<@1} HMeIPLNH' 0&3W4:$0/U^ceGi L{ = _ Bf K m Pc j N Nn S ^ \p < ^ Ai4V979q7Ln0Q;]-@HjM<3 U?iAcAF>`+C  Bf1Ep`9%T>zITAX$R8 : I g z |  4    ! !)!;!C!## $ $Y)$c\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWVp$<˘*3?H0HQl 5*˛ԝ%n$u]/9NǟD8[KL b(u3"*V$/¢ ,>Q+gq)æ*$<A~3'Χ )YG/.Ѩ0012b95ϩ.4 cqV 4 >@Le #'%K*q<ٲ#ͳ+ '4,8 essG/w!/3sc׸ %չ%*κ<!63X G,Z>%Ƽ'9 N*o#ý* \3  rs #1(#)L va*'sY 0' ?MUn .<$082iR6&0=n<N5 "B4e#6*a2yN%(!PJ 0 %42%g-+/)4^&f6 ",0K|Cge   )!<^U]E0#8\!z%7 +*2V4746E5|7;Y&7(W$Rl{Z;RL W&#J6O2C$8K \i}D*)*?Si}3@20.c )"5)I'sP"j#B#56*lMRRINH>S"%$=bz$' N`gM4FK3-?,40aB/:2@Ds1A<,+i=*$6##Z/~'/A.H-w?,6HI5.&86W/A.,/>\+  "*:Ax[6 M`c(~3;<68sG( + 9 GSUY"]    W c\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWV+ӘA/AqQ=ؙTkjB@5˝/Q3xBG^cb:ơh.o('/PC0U.1<$>Ugz3RťVo5(35MU!@Ū@G^>yh7!3Y55ì7[1@έ$=D,SrG͵q)8ʶ0:4VoƷڷ!ܸDJ]>dOP5/A8z*c '׿u+5Q'ICq&.J,F/sK('@`cIfuB, 0 DQ,q6==& d)ox-)W1'@Hh ' >/H8xLA>[kCJIhXu%R/L)k# 1%L6 AY8@<y]*qF#<.(k/#)51H z%? )=V(fD!..(& $&BiUeoi0q,)E("n-<=<:w58EMHRh7R24/gq&Dk^B|LCSL+AUf~^.0)ZxDMF$M=E [3h'2/GwJ&c" K)EF3"& 0vH}\=zNed$8;@#|14 0>docUJf Pk > Z =V L h KJ G N j- M X T? ? [ ?05pQ4E-;sSo?s5P4:Ao]@=P4PI4^c49,Tf;  #4  @f?n !<:^6DE[]wM")+2*6a} """"l"c\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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$*0Hf*~%C$iD8  %(Fo$+)*.'YY. 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+n00 0006J1(1131G1E2H2L2"P2s2W5q57S2777=77@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)ALZA2AAA9BTB67C+nCC#CBC DD -DM8DD6D D)D EE20EcE)uEDE%E F%F"BFVeFQF<G8KGG.GIG*H5BH;xH+H9HI;+IgI I+IFI'J/J.K$?K$dK8KpK 3L%>LdL*LL+LFL'3M2[M6M2MKMDN/^N/NBN1O>3O+rOIO9O"P\BPPPPPQQ)Q]=Q&Q&QQR%R=R#WRI{RSRS@9SAzS S+SST/T.CT/rTT TT1TLU8aU,U!UUVVl2VbViW'lW!W6W&W$X9X*UXaX>XY!Y@{Y0YKY29ZDlZDZBZP9[3[N[5 \GC\b\I\38]Nl]5]]^^4^<^&_F_7b_S____6`>`\Mcp'!Q/a[:u(f#k Pm".wb+B@r$o}c,*N-ER&vt0nUl?~A^{DXH Ld39O=T\5 yJSC4j`YqIW 1h)7<gie%KV> M s8zx6G|2_;]ZF%(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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWVa|>Kؘ:$_bwGڙX"{ZD:8'y*̟WSGUcI9 X #dW--<;ڣ-.D-s@)*C\;z["56Q*:̩(F0'wD,",=OYI>1Kp?IYFT'.0 _SiV%: Q[2qDU1q7:۶Tk}?3H|;Ƹ?\m*κTa3ѻ)/'2Zm*ue->3R5O/ I<32L3/5cN4/&Mt&wG*1\ r};t +:K+5w :/8rH(B%=cu}&FOS&z CDO-?}:>)Xh=(C(&l") A!#c=P32J}P5pO3*C;X--!-C@- 4I";"^ -F*Bm+%-+YR(Nw;!#)M V"w2K}yC *.3b.zH+,>KAK769nE=B,Xo43/#_ds>TFs~IHBK9Vg^%:` ~$ 3K364 %%25X+5,L/'Go+r*0*C%9i' @$LeK[CZA/"73>k#'?B6'y1l@bK+fwOH.cwLB( ]k 5 V EV _ I ZF Y G aC K 6 P( 9y A < M2z_<[V?F/NvJ?:PUHF*_qI?Y[E$&K  #NtPl*,)WJBRNb PC ESi1*3Rkt["a"v" "~"c\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWV>:< ]\]3L# &1lX^ş$J\ߤ<>yax$!ߩJƪSeO2:=McI!>ϭ#2)RP|}ͮK#FRj(&c 8qs$^C@0m,?AaoaSy/w+GEJػw@i>+&:z9=*wJ>L,{y(0OD`82#`5! `$J;-pVE,r7,$d5{R/ENd}Q1J"Or'SJN!@I@1r8ue 4 B=M% H-3'+.:Vih!)dKUVp%2W^.}#|<o=M#1%/Hd_V 's\xg!d$gfx.iD7<6#!Z:|%V74zlWiL#0c1wLR0`77VT+Lk955' "9 \ 2t e 3 A  S N9\?.Q(0.]w.5C$(h3?g2HSWU\$ I/ Iy  TG!a!!A""1%2&OP&'v*-HP.G12Kq3O4 7o7k737$8 8/8)8,"9O9 n9$99PG:K:=:&";"I;'l;+;5;|;ys<5<p#=^=&= ><'>)d>8>+>>A ?:O?b?#@&A8AB=A=AWATBgkBcBG7C5C(C#C&D|)DD3EE{GFFVJG3GLGT"H3wH'HfH\:IFIVI5JJwKh"LLeM^MM[hNhN-OmO5PrP)QwQySSi9TCTxTJ`UVUXVd[VV^_WYWX`XlYpYh Z}uZOZ~C[y[d<\\k3]Y]]`^^^L_d_z`1aa3a b1!bSbqKccdekh jkhl2mtGmsms0nqno6o$Pouo}oo pp+p!Epgplpup<p"pp#p<#q#`qq qqvv$vvvc\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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// ////+0402$3):3d33*33<343;4'o444)4Y4/B5.r50505269665p666.6 779== = =@=e*>>>#>%>*?<9?v??!@#*@N@j@@+@ @@,@ AAAsXBGBC!C/CsDtEEEEEjFG&G%5G*[G<G!G3G H:HLHH,H>I%SI'yI9I I*I#'JKJPJ*mJJJ\L M>M NMYMMsN O "O.O#IO1mOO(O)O P P,P2PFP]PP*QQ:RsR ZSdS0SS SSSST 1T.?TnTU<dVVVV0V2VR)W6|WW0WW< XNJX5X"X4X'YCY[YrY#YY6YY2ZN9Z%Z(ZPZ (\6\0U\\\ \4\%\-]H]+e]/])]]&]6^Q^m^^^ ^^0^ _!__`qaXb>ccde MfZf wffff!ffU|g]g0hh#hh!i)i%:i7`ii+i2i4j7Kjj4j6j5 k7?k;wkYk7 lEl(m$ n2nQnzKpZq!rsLtt&uv6v2wDwC\wwwww wwxDx*`x)xxxxxyy31y@eyy2y.yz /z)+&R [eŋ̋x6_Mw( 23Q;<879NaiGk Ē Ғޒ" "2D^o0 6 COWVWr/G:BZUF^VisݚC]='ߜ#/ǟ0(p <3\po͡>= |b!c%.-=4)->K)ҥ;"]^d!:=)x=#S)rL@*"EGhh=<W>=ӭ?TQQ& @2 s%ַ Oa(0)7Z>\ѹ.I5T!tH IZjAV1ڿ< I%Y!gx09W3OQ4 !:X759W4X.&'Wf{+ : NZ*tE?A: |49K-3P.Bq, 1 W?X >)ChcDUIlPmK-J(Mv (KJ@jK890j43Qh/70O/".;/> n;xH$"A$W|2O-B!""A!d\}*(!"<2_lMJ 1I+g 'E"/1EaHE6:S<JKLbn:Y7S4 p-TU?JA<~E$@Qj\4:$Sx<D2w?= +18j"53HB &\  0 $ U 12 Nd < ,  = T e S} _ \1 Z V T@ / " 7 > #_8@&8>swt|UsGVEcXFNkROSQbnR#cveL@jM<FZ=I=fjk@^DANk4OF<7ZtSO#lsPC1auD.'Bj(   ! $!#1!U!N!:""#-%6&&4')'?(EB(6(G() )))A)G)TI)) ))))))1)*-*@**W*****--- -j-c\qKp%Bg(<wo3t$\c 2GL~uD"{1x,Zt/F9Xsi a'_&LaT?1%R6 POkND!bIgnJl8MS<_eY"Ti U?OrEf0K(:8`46R +sYN *y`|=SzB4WF#U}mAH/rnzm|5)]h![M+]CQ)j=^Z ;X5I237k-0vbf: H{#P@ CdG>9~V7j->,EJ[W$lq *;dw&}@Vou.ve Ax^h'Qy.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>asBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/ IDATxy|ՕVuk,ɛdy 66 aI$$,o/}&2C>$›1cdayȒZղZ Ͽϧ>jUߺUw=sϠ@\,`1jJ9rg!q 49iG(}#c Ĺ@_0+J`"D3JW)m; 6KxxF8ڟ{r0߂ HxvHh!C:J0f,F3D54kjB&#H{V+wؖ= V ^Q4nE'R8z455~e#|t8e)P <-7 ac|q^`TK() «pAM C.)"d08u 8S[˙8r%kO%P+XE vEgܹ r++-$0iYJMB)eY&2L'`%-{iXSN eP ^{ Wxnq]ϧ:w.SdtL'#!쟸gErNJڬ4#ģBBsiذSFͳ vۛ?X7*xPV~RSr G[Ζ )jk"?ڞJq# #G\"t(f9h&$䅟N0_Sh99Tt#nGr i"RRԤ}H}NjDh? Hyw_u\wW0x‡4[BYL%wv>J)hBRM8vSnWOHuz)!Ӧ1)+K6TXF˰%h~: tH@4? ]C)E^i>_0܀; L~+,roi28%gN"|̓sԆ =×HI7xj9BreSC0  ܏B YaW_ `R!hedNiZ 44=i:7}#A&O,BA3-LSbiҴaify%'?q!#-!%5Gs`rh\**FR`0 x%B*+я?|gcy4]4]?<_MZjOi&~Ӵ [ai&ҰL&15Id8ˇRQܶfʦNea='T+s`:{_XqxVq.w@3UL t4߱ Rp.BjLL2%Ҵf ,YGّ XYS͵Wj %t_  !11݆e(MiDGF5z \nJ{ WJW^3 uА@C&RJL*|WxDETي"d>D׃ 4^^ KACսƘ"jޞ3ME4MU\J ';52o']u05]C3%Қ0_>29Yp-l"Q_O#W\Zn G+R*W.d([%4͘#;,w q`!4 Ou5E!3df O`Wp,kT꥗` p3V@f ~ 6s#h1-7-`}O dj It lKbw: ]m*L=H :)%{ ƛJ'XpwSOowQ 0wCeszP|Os: tm@;0F* fh.-0 3ab&fpfH {ۿ=ۼ9z;X΄@uҺ$3GqϞٳqOi3Kg  8g9@}il۶!BpCؽ4-eb|G ,a@ѣ X _h^_{>#`Ȕ)T/X ?T=s]Ẃ$pI4:78z( p8Lqq1yyy^w?:Y)DR'T=(Eau5V,F ɹx7u[_)c2fb-Qjگ~@O##N źS^^>(uGHt3uK+ %t hS3g} 6=~aBqz4Urf-hW]``M~:Ou³~ki7g:.Ez`[5_OnY 0uٽ"D7܀% KhzznO!  D{J~q5D+Fi*YL߂@ݓ?pٳ);~M̂[%%>&|?|ASS---aRP__atYPP@e]!n:VXk)((`Ȑ!VXytiR At(rCĢ蹹 GT!db &J/BQTS9s];ph{-: _w͝BB32Ȁvw`5,4`a!ʲ0 ]yoJ7f z:^XXo{T@ HK2q^/|ۿͣ8s',TN6VY A Kĉ:YKOu{]4Yo_>+GRu;m:d7CIń ݡV~ZJZ#@&ј$6:U5O/)t3gtx7nԨQL:O4cհD^M×ZkW5]?+B؎iSZN~JIIiiiqκWBx~f*f8S{h55蹹܌X W gȘ1),'nx¬Bwh0qQvu3f`ȑv߳*! M, WvXff*3#R)5~k*Bn` 뽥&S޷vKbkFB ATVVinQl7Mc&G6ɛ{{~;:::۟غu+ǏwkbqYMs YXD"`Hukf%I/|ܵBe]f{؍oeդXW^yʘ5kրAHoi ot%9QN{ȑnp- >_ZGêƌG$H}`:4MbPh@W_rŋ5C: f& M2iqa2*m)Ej+aI("qUi˴7^@$~@v ٴiS׍;׃>-&I̸ʓ_G(`_Lc8 lO:!%Ȫ[h&RUVuېRx>0 vɮ]޲ K椆5~VA4+.F .])V@vF vW& S(e1TgpEAAAV!mmmg 8}݇]y},N$?K.SRSSO`!EeeްqNko;Ή܅΂SAsGHs_&E|YY}i8lYuΆ_~H$u-]/~ &N5drBHMep'7p:($NcǽaoyGYhs{(**">/cOf֭^7ydƏU*3gΪY񣤤K.n|@VH$6lؐU.\q`j̛7ӧ/2vnwKxJU^Fp()a[ihY1/((h˹y:Mg0w{݈#>}zw'N={vVbPQQc=֭[{K2}T:Lƹˑu!lUP9fJӟtDɓyꩧIlDN]mmmVq0X,#<¤IXlYz@{ww}{W3dQiX ʲ*դL hѢ^رcu]̛7͛7w &L:ONMM 2e _{h"~m~Q4'?([*-;)#\s"ibW $Pb {^'dx7={6'9qDV]A)E]]]:v 7?z 0qDyVZ_ܫ2Hj|:쿭l2H@:ӄ2o }{:կf˲̈́ xGzАO>|/:ȄT9) <4 8#B(*)g'N/ /"SLUG0{7G!:W{<|⪫_'`ذa*#;8rr-oҤP xi`yy).ROψn۷(ILx7Xd ?MMM]^F9v,~M,_'x"e~'bٲelܸٳgd;{d'D.H Mw^!vj_݇ gCNaoA {v.oӟNj?,k׮峟,g:]N=x<Ά X~}#?7^[Ŏq= fxdOy@RNZ@XB+"aO07H 7&%-Zn}©|n{[m۶q}e57ƍ=̙J)jkky4|-1cg-狽mNA_XUG$q8CNjW{'( kطsg̘ʟ笆F3|_K_N?¿yx$|C}x_POt^tIFN+ݹ쟦A+.3.-Ry>Ν;Yt)*c˖-|3瞣Çg\sMp{뾸`~63{<㮾+"/|N|L3R))qփ%p1 ))!}yw}}=_y'@ =÷f r70st8Xx>ݻNZ-ib)uF@%)`~!n՞ UUU<}{lٲe}m.{ -YRD,A"[*F=z! 4+-\!ے(%¹Jʐ e>|kҤI Gm{~`0ȃ>;>ȵ;2s}p4͖1A)vdm@=ܩ0˷{ eeeg?cڵL6͛u {n~~w  ; FiDh ph (NN!Ԥ s󩭭#G0eʔ^:Opw5W>+M=Eq'тeIDAT~-71)&a)2E*̙r3ŖzrC8sn,owrl0p= _ᗓg |m' uc8BКP NoM]204B+\譆D"vO@ݍe:X[LLˑ@܏HA7q{jo -[oxiL;=yݩ7AR0@,1gNep*SJ˧=M0 UO/)bV~@G=qu!K-8f9r3O9Mj9~~7O-hW,hhkjFpƤ 8wˠrZt1mΊg[ xFhX$4rvnCb73M,t>_({QKg$ݾiģQL2fg 5CHunf$`뿀t>ı#荧FRX𤿜, *儉弽+` ,:杻oHQTyoMCII8Q_ Ȕ-)3 b簾absq;e`s8kBb8޿NF; a7֥0eqaxxPH{fu6M h(Bhrs(e%nC PK aKmԙO+0߳d߲iDhnvnN02FG ޿߶@z)pxe4L97GM~goH-k~4 ܊jmI`o*nP {⧣Sܡ ‰@þ}i _;W$Ho poxJf7i4C{߻*K,U'NnnFh= BSПpMpHfqMDQuoiqW-tf2 8^[ nYֻtT0a\ך$01J7EHsIz!jס۬` J$-{4(]#~/|33XS"3$$L l aҎm݊sXm2> jt gM#1wmw*YS Na,yoI{MIOɻiTWwl! WwW9ceo7R*n`/ XOF $pM%ِuByX*.)%iu/=)^R7`7x?#E NJe *^[I0@ʕDZZ\޳GU? p=B$B!,àtX4@ok!T5Ee}o ˴Z߉M@?oAӾ}k|rY'): vd$LxXu2e)t>R${sC˴XOO??cfg@֧ A] 6BJZкunf sqv姠.-Br 55䔔fo)wҡv!|?sI{{_5^g+q_;cM)45ܴojl_{J)D==G4;)ط+$xD<7HGjJLHKxP^D>{.0g;Acbnb'-Q@"a3FE]-e~|}`VOF)س|9P Fxu5!iK wÌǑR2|f4,O~?0& L|'O`h(L`Ov` iZڏ/"MM7a^ޢ_;ዠV)կhغՎ#H-&R C| 6QʎIvb`/lj`̮7) Mߦ xJM~سгlY`JZi%h9p ZNÏ'7Ωѓrnn!ݵ4Lai&R!pOʴX]c9![ T4l r8L(;Y>W/`/4]  R_Aqrff'?IAUeMLW O%4#c3)3Pq}CMƍuQ7X +JF0p^Z WoyV"ԦMLN (h e#i tD̀ X{{n})"{/>IY7DLsuWAi)5C $}ivJÇ+:o!Ǧ|Q]Ǹ[oEcDI*;i,y0/%R]"nykp7vs`Z&ho/[R}73k l+àag$4M^+ 3 ~R_6ȌUp\ӹeeLN]q8b Isa9#9} RinӷO C)$Y֩iV pR Su:VU)mo 2M;vp¿n58Y+Zݿ+i~e%.kzr8SPFKq9F0/ȴ?Es 32d%7SLa,R-[8stsshypy区ϙC AGNyE 1L}r|LM-tXpEv_"ʩ7/vVɛb- p)I]3>gCNM `79t+"rTSS|P ,XHhvt+uҌ9m'7li./O_\Kvq^_l<*g̠K2e zH @.q=H\ZSjY4Ќe'8D#NKpF$B4nF֭( }SR'; hpuO 4}r!%S:i%]DqZ'#:Ze>m _mo~b*5_<{{{p}z ?p?{@? :}[}[-/uw,YVXJ(x wۅxB{썟`]@3ϣ{=ÖK6_+Er~|V=g߫1cELk~?g<^9nw߾都VCO/xl/Z6;t3/G`۟??yΙ2{/[.f~)d? dwC`~|.{8wb1.7\vo8+ܓb>S|:7)>^/M8"LnUΊ1?%VbbJ)Z9Sιd\/ĒJ.Jƚjjo00J9QXw^~GyQG}>34,6+,`bUV]m RλX;ēN>Nϫ?S\5^}J9$ xh/9mHE&YNÅq;廿<ۓo#܃oR汛>ߵ?vyp΁=+iYx8#m<ר{hTԒړ:KۧruBkgKxr|/pXb@EάK;ť1^s!s7Ijn[xlk yHi1NC?yITCˋ {ݫ}}s%pv3\uҞ|uxC#Fh#^^w;+\u&ti5f{AOC`Kb=Lg0f++<0⬳ $n_C׬ upiz\OaX ߽\{nx\5YpQl6m{&0ye:GOܠǞ̄}'P)pUV:i#2` Zj$_X')cczn,,,dZ){܋*/L\Q)M/(Lq2nc:PLSl~׳"ZY-O({ϓip<  q@`KIĔeLS$ߪG/(C9zsOϐ>gE%QZ?KVL99VR̒vmz-|HXs̰Ts/ϹM[ʹ\$B<$>l|{"32d)ZAIkIX@\ulHypu+jt9(6'!;'&AoOē*хv88 Ӆ`X!zV$0uOB.a>s_0^&$j VVA9AnNF,LrA` +Zʺ*@q; ެcZJu_~ c8.'S9*P*g/c=Xa1)4!edALɔ\l?nJh OE^MNAJЋKfCZc}ddn߿]gtYNUX̑c쐥LPMWS/e( ~pg8_RH)AWo'tXgث,83AZv/z kbCj4ĤHqI9pDPؠ1EXA|/ZA&8"QMx<_8-c|{^]vi087>8%ge^VT).B"bK(l<2 C8 e5%!I-h΀CrޏN$%4P,=>khLem%qX-  JrPolj~0}r?|_|C@Xũ6z/O5 Y ׸x4;UabNVъ XkxouhLۗQ"%tx(Sկ 棘uX 8^zbrՌ~KSRs*DIZ~C@F8-9tΒ]SD$^C]tJHtTiˤBR!6Se\K*ZC]5wB)`ԊfL./ZPbgHrXLs95Ԇ:,S™,%Ex81;s @^(&3ld> "E_ REra}#vW琌'tƣd1dѩs%Ym C!N_6eZ6@pal@2zEX&^D֠:J8E<,h75J7yG Q}C넽HET泏}f͹$0}੩ß"DLv߆ԧ 9W;G%lgƉ r@`Rk1+(&L{7t@R!3GCqu]g6]JuLHㆦ$qRCIFب0\y{jz%Idw Ta|HT7<5oq>Լ&t#'ƽʇёR/7'5 S=pOM #GwQ- '$2TYYƩ#|~fx1 ~sS9 (G"ǯr`Y]joNxmV^Na2'8>T̨ܭV2nSVdkfz [D})mU$ͩYV#  \ӘK%pn]jB@*pLi+X&*sWZ0c\NE8ߡh*[hsmqC4u"mː @Lum"Uvf%2E^|2 P%9~NUӫ|m. Z2ό; b߫UB@oH)@NI݄:9uR#p6ڑdU5,Fm(B?JnnB}XxB (=QBmMf[RSۧ8 QulG-nEq,4{FH}bT5#)$8oHH " _ /ŬRNTxԋ:YmvEIPs3ڱ\WTt?umZZjٌ*k1zj;,2(lQn⃘/ƴ aߌ,*f5eqBjcW~r~_~2$e;HqZ$ t q0w]-Qڞ %6{(})7Jzfn+fMލc$qH!D }<H RvEYʴ.]P(|YhTY57~h1,zJN>B~RQ,o8zZ%ԛD&Juѱ8f(H003WN=v%}\0(`s; k?- I2@Ae/~FJiq›JX6GR3⽵κtQ2^%}C}N--v{VsomScZ|Yum-! cUy5i NtMbnn6.mLK~)߮y[B lYmÕ HT$fl[RM?R,z'ZgVpW"@Em'JynGרm bT#@5-?_:zET#iNX65ަWЋK˗lm8}~E9ڲ GDW_Y5j#t4Jlw$ Օΰtx7~@_5ʁo Do44 j(Hu1o]Q<zw WkD+ ϣe3v9zz#_a9=(HBsmgFSˮDc%@3m QF5݅ևJ5@2 . ABF5BU~fڄ!<N6P[;.@ ;;^feL|!hB0 8 CI#yQ3Z *Ur5W-r}DEuʟAPuRӆnx'A#W7v?  mSɈGj/Eش2ФE׾b@r}oKՠXkZz⿍BI6t>i˦xiwʑMx( 4ն '0 10BU)V+YV1=TI\ ͤ!0CWɝKN [KkCBxZp}ىdX2{ hJ!`vtD9jSq$r x Qa8vjmX J Cʏb+Ǝgj5_|f-]0,Cys.9fo}yj*ˣKҝ/80MmWZCS-bv=y"΂!pZ[>LwR$$?w j0f !})YgA\ R|/Z rU ӈ >}NE6RGW+`۶n@#4:ZK]7R$@(,6xwGwgZZ $o[v^\`˥k:?s4ڦ*mc7޳sAK-Qظ'oCKjS9TTBl{L JH/6䎆 X Gޙ6-/C^"2C+"ӆ֩#ylTAp#@ڪY TH17SR 嬡?XoHPjS`^U)ԠU`=]XWuI>>5?l'vR!=/MPC@ .xMK-1v9Pݜz~ m+,v1R${ צ/8Zԡrs@j/ @e3\,Ƹ:bDCڡ?TZ/Y7ym{}h})m%3Ǡ*聦EMw2rmrP`;4-H5LdG! oԽ_!$ם ]׶ƕdqHUߵ4R`DZ7̄@7`u5v >5cdEȼQ݂u5{轖R߶Qފ*kpiY@7-k%7j0;¼(j6M}mHʔi~LصȱE-޺̊lli`v}Ծxz\:lw nE?]qؤNWxBr9hV ĭa":jN :5g7?Q ^\5ұII, ^q5{DN!Wu]44m"Š n6:X"PQEQ̪k8̅ ﵖqݞ/{wnK˭YSLj PF{CH m:x_Kap56tXwWk[.Y@N{Ud\cA: { ڭ' ^#5ِA"mHÌ{c|vqߴ&扉NC*eF"^9D: oN×ݴ=ۍڮ}AqLk>!'H]fB*RB`>bj&Q'G(Q8'9eKɅWN&2KJJ_`A '@n5O R=CzQSj欕a5س?!I "wBG_xߦCm>hc(EkH=w]-Oy LFnEC9ѮFdI|m>!FM+r>9ޱC4ySj+K]e c=F)iƎJmӳ(&oSX}ЫIAj:0hw0oO\GFE`*R($깨)pq[ZnlqMsr%Z~%"nY+ вpD$3E!ıKR,9H$%b6n2Iρ:;OBnMpE? `n1y%$s PtUSQUEUxAJ'<븸>#Q%zxmۺS|)l KJ.pMLDKF3PRjZ(i@Ͳ96)Az'}7ű5d=B~W+mիIܾN D~b}WWO+Ko▔"&&& Z$ =eBќ3\2nhhjhhi(Ga9T(P%;t2h34?کp5( 3~2JL!_Li|af*( B9&pZT!UHIK-1Óh/.@/܊;èQNO3ݫ@Pud"}jy^㳰oqI Φ(e¾gGdxJ$b1\qRKl=ϣ{bfӵԢi%YD(; +daS3gVU1p^ l߷¨zDQz{QF^ld7cY|yت #eQJIEQ4͚S_0cp_RY]Mry4ٙ RtttpȑL]  8SIb*Ѳ.!."]'~!2 # ds1/dti4]MEA("s^B< G QJK1"Fj0O8 chhh%/';H#] ETs%%%KKK5B]R]gf6uܴ>˲<#$6ly' N3m&Nn%&!r3PPnnann.%s1BAt6NgޓZhiv6CՆum筇 H+LcT g S(.oz{{ywƏϔ)SN=34Nɡ`XjxfeaϞdtq-@NNN*EQ91z뭴XB… GTA)%GMBAk.#7;!Ĺ ܜUT";U];m-**ʘܩÇgϞٳgSYYygYd p twwQK4]Ǚ2 !%YEEH)bqV~>^vhfhgمB K3"^{-ýΙ3g߷rꫯfxTΠUWp˫=F+PVU URm$wޡ9㻂 =޽;#ȹ+PUV1i$~_esϋVLEA(Ajꈫ_Nuu5=XZiZFgYXl86mJ+.. .Hc,+3կeiY='o8T!PTUHt TU _:ݻw}L65k֤"<4-]M}xZߢER۷oZ2~%%%^uQVV:EYUU ma `"`iHO"+PToȺ٠Kh"mۆ"-zٺukZ_uu5&Mȑ#?g æŏ< \L*(D+xٹ蚆)b*ny%@VZgo6555G?P(4bА'/c?HnV'"Rjo(W\YVq~EQinn7?8<'4ߙM7IJeˆ3f_gժUs9TA#( r4 P YX ԶթVyƌ/~ Yx'? /fӦMض& {n֭[/Kmۖ1V$O?/QoɢhB.شr=OÂP5c W޾(֬Y] 6bŊ,˗3g.*++ioo'HٵkuuuÊ:C=ĝwѣ~8Mr"p]5#KI\ˡDӅm0.Y9sr=dX͛7yfnF*++ikkW^Ctu3f}Gz{xWIueSҷ9:!wr&6+VF\O*577+V`ɓ8>'i;gs@_$!0d +5 דڢFh! =gI&NO<֭[7o)=:ؾ};W]uiUc9k!oDO7*:tAz}lQMM ׯ^䄿{ٿ?wu ^gZZ1O|:<َ:x1)]IpK?f`͛yG7ng<[J!O4ٶ"%ng^n8,0D,Z>*.a# .2CbnQW˶?qykOf̘qR~u]YI +aOkjDh|b[c͸̄|z"~K$6!|!m)3Rv< :•ab,^8|섷 f41I&nW7ﬧu.zvહg]볪(6c*"c%p)@U3>ȼ[S }o#ġ @[ja'H)ۺu PM(IbH3~lkCg<́栉Q]̖E<)[kNXEp}-T8=K$b 8f>Gkoe;xޅk<{`nO>W3uI898n9؆M nz*N鹞gCeZ [k?@-}:&['ֶW^yС\D?TbKpa"?kj ɀI JX8i7Fl+5A_HyG-HiZ/nÁݻ`ϞKIsRAwQ%RqWf[cJpmNjHE5Ӯ͹A3T 9=nG֭^-_{ ģZ$R:fR̜RTB_^ y88>J8bWT3y2Yc*)ASU@vovw?t&LGk2٤/i0W,Sb image/svg+xml timekpr-next/resource/icons/timekpr-64.png000664 001750 001750 00000031427 13716566163 022574 0ustar00bezvfedubezvfedu000000 000000 PNG  IHDR@@iqQzTXtRaw profile type exifxڭivdc ,9^~_HRRIU-Vdfd;/Rrm'd۟yy}x)=~zg} s_7zr"y=J\?Rgx%߯e~w?*VڙNۻ?򷏉9b~1O/z-F7|?=8~(zm;_F{ݍThD݆ '&Wվ:_'N>|/ !ka%/Cc;6|q.oOޞKf7/wlӾmźespe3OPM\&3768bf#9r]B&ٙc?5=vl8h@nLS]r(A/M8"Bn5J)?55bhSι䚛=K*R@nXS^:ZlVZm6z ̽[}kpfiYfm9ʫk&vu8⤓O9ϸڍ7|˭~Ƿ>^x-t]Zn'Y>c!y<^:gO)yN>{z )r`Yqc0߾o.o<swk{EP6}" >~dszŨ˾};Sܰdb;ݳ]j~0yQx9˝_zͫ4k>m~ӟwN$۪'&3y9p]yctw}p=k={`ֵ:F]hYyukF,g>η{f+zlPm(J ɎZv}WZM<{==N=]lmy '2!h8|*M1zS8s?\{> 7ƙ7}3S *+)~Xǭ{vZn3Yȓ/-XP) zɶ,"(9V/qsIOqI;! taySwe{[#Xzx s }g=Yͷ2]{0֎,R-ޟ!ҀFдwGB@HfazwHm2N&5ypaXYS1cNLxa@D^#4j*qm=㜽)b.ZF6ki NJoR^ {gqorcg0Vo>]\{L7~h{zOHcc9f^ɒ[xyh1A~46S01XggQ.$W䦻3I4$%at\Mbx]YnB/ӂR !txfE# L{~=\i}>7jQZǹqE4v$BJbpDMNFuG\I;'?kK+d*v5{[8*HLB0ϖ MԋY %{ѺDPH)w HS>zB-:y ֐zzht.8a[_2^{{E3: 0&)ٵJ<^H2~~E l&wH㕄p%ɽzJ@@>2!Ą;qj,O 7s) r@",F2Y#aQP}+2Y@;7d=o}&&GF䂆0Hlޝ;E5WH?}2YiD9$I%יEֶ)8r~㷸2-?[j!đjNF!Z&&UV5OpTNJGZ z ߼Q=ju-%I2 f dg<3(r-GR]S{> 79zT?,<s6j WbEӶ|Hye-Y$2H^CFIzbzGx:R)I{{i][h=&C=VPdHe6?KLAgӕ :~ElƅcOIhMıߝ@pnj]KS SM@? %(xvdO~)Zf&Glmv5 |{^RD ؑת\G.-ሾy7ouu)2Tĝ5dAΒY o5`npQw 5r2&+L$9\W6-A7Ioqb~U}|DYZՀN5t?hx{D_:p9 Ԗ0tN`C4*( N:eUvÑHêD֗$¬l)qgѽY঺jFϷoo bU_mjdbdӷ#'L(n,G"#E9} )j v<+`o~P t4VKTs'+$MBNߥ޲X3bӿzi!DXRSڊKIlkMlQY3:R>^UJ4ymеM"Ólj*% 6Dq\fx>yW6q42VL4Sm LLq\C)ݡ5z-:zKӖRD67*`m2 m4vbj $ޫ;5>pZm8iZI7 V 95[^VVC\gK)_p&NL <ŬV[Ҩj:]GSu L} (R!ZL:RTJ$BپlmM\w)}T7gE`@ 11c@lʫHCYVK[BEYFL608!Mmgci0Bʌ 0Y!>&jr]5tyDVt]FX4YVxe3zϯ›}xؑ$>ڬ7cWUVy"`腭YDMap0KQF2x~ILݏ(#Iy,:%(yð>Dv)ȩN@Ex&cӉw`u@*bw wB @4iz#Pٟ: bhru* a4!CdTuG+/-*"cOqE1iɱv5m׿`MiܴmFih h܇ 5U-ƦR+ͫ`F8Z!@M*= !,SG8T:)ЎmiBB~- Z#Top}dv+QG.j8))e$cy~Y^#r|_zV`z`s@OQM-V ?j0uGS:ׂQp4P(" U AK]P6I#5L\R+SXt%نTs_+iГ & 6o'%eDήW/57oȯP3E$e0m`{(։@N #\aojHn-' ZZ/}ZqCF'dQ;׺Rڋ$@P;hj i"Oz󧒠 QgJ%+)7m2[O IkTՅ("m:WG<"a1YQp!N%#@\QgL9<:)90v~d^pQ 5R!qs X2'y jԪGNE, >ٮI&-1jwh:(mD'M3k1\ڟ$S!R[?y9ToO%#H$uYդ?:*QBT.T&oZSZ叞*J=gtt]c!Dz@Ȉ[z> r~d;a{/s#]' Uٿ,N=reŅQ8{"k|nʹ@TItH a4PH%I}邮iHyԸZ:am yhT P m쀜 9aIU$)X2=A>Rڋ|!_G)qfp\۫`vx<>BFeW_c92tACDvֽiA<("mIT {Z`VfeA:Ӄ/}876QCњM `SA3H5zí!hޤ8Ts\r,Ɖ3Q¨ǿ}Ovl@yTR_>C[L[bFogQC=U*;X%Qj-(5Ma ]xЩ Ο\ߴTd]$04EFzW":0;VcK2~d ɚOC_hU6NQL"6f6)ɃϫC?ꭋ{Tڃ^ ,EB:Q-uT4:1юB񤛿{| G}Ppb(8:pᘐ,rb}41ul}I{6kWIbD#غ΍GW8k9rƾWw?!uQ772q|}uX=wChZم^sCņyp:$LxҋQءO8!ĥžmTsx'8Uk` ^a4e)pEݴiLs(`cd5UK*iCCPICC profilex}=H@_["U;8dh;Yq*BZu0 4$).kŪ "%/)=Ff8jN&lnU" L}NS_.γ9@Pimm=|Ͻ{{7?vwwv<ȑ# dҥ]5r!ܽ{|Ϳ=tPο[&`Z2;;(Q! ɰrJ( (HӔǏcǎgyÇ?200`~5\g??߸q}hnǏ396F2Gj R@Z ̄4/[Uh]k-f۶m/?w``,===,Yzst~f1ĵ*qd9%X) ZKI[&C1%h.bhioRd/+j9|x`'?kr8vCsLU8491y=zZ8-@ k,>bۖ\Ԍ9Çitr777oWJ`O}SdYz-dTeZoxtddľs|Mn[Х'#px8ټgϞݻ:|3ys皛>hy豏?S.8q K^IUٓTbEbŊlRadd{SSS/|W^-O:ŋO?};ߘ山{8|(o8nTfժUhx]Pxp 9/`;:W/+o1“(KC)ֆR9yӿl6}Soouxe_?oտr/?287wk#Ǐ1B/<l>+c 333811q8+:w/f3&''!Ľk׮m9vuu}8~͚5AX$cKb׃۷)JW^y%RʭW\I.\.o<d 133n0|bR9N< sW!^6Ƥ(Xb֭[z^(y$IBEyr4I455j*W (Ac iL6fimmh:H)C)%BgyH) b"y R )%|eR ¼9^HBξf*F.Ԑ+oB}VXk/gw8Cb8nk~P h)i+5].s Ӱ᜝tpXp8pZ f %$B4U"Ay(Vtq@v֋oåKܽkMC78̫/F LfAǼbΒV*D跎x>~GP)fj =>XFnrV"B1/@y % ^VJ1H;~釋b^v^'9qx^ґY\L R$'NtꁏJ-RgQZ%18~:#|Hd"ur9®.2_Dsbr"Z\㘠pTK3Dr9#C 1Rf7%Zy)%?vgucC(^^K0OccdEL`J]]xK⵷!K%%Q{50zq< / IS ,"1IaY.ߣb%C=y'ظq#;w$A6HߏriJH| d=xΡe+sY_ 6ˣ>Joo/7Zg8fٲeڵkR(xGٱcV`1ָ4mP2V~p,BSZڐJR(|rݻwK&K_7oG?j(axxo~w}DQWU{esO.̋!vfzT%W.v.p4):#=kj_l:|rAu ~l#<׿u/n:>sN w͗e⊅5G8ο|7iXZ< ud-ƏkCGNDF糏|]xfX}k}|+_ᩧtwwe˖"șrENoE!Z81ր]dÐ@I<6BN`;c۶ml۶UVo}ݻwuw ^qI5D&4EJbq5<A=cUf1md 5wwLPz81X7ĥ)5EՀ8M$H!$7|z5W(M)ZN6l\ӱ19l$$ L5R&+?'ċsH9GRC=J<4HS)h \qcd Ed-hQjj9BZZRdu!M5 %9lultABX11֡!|GOg"T!yl\[\<}#B!"|8K[Gtv>VxzH:$z5VȍSif}CJ`+F:Ł164F#t'h!\48Ųk7:K0ԂeQq;XcIW)' N< dZ8!n8#'5Zto㑭g-9̼3l4D`+(&3n܈߲JK6H jfaNūz b$R!|o pR"[6mT*r,FYN1"¸3Z!K%D!6*F8cBJɐkipU_ɱRHR Rrf!GMwwwg<ϳ9;00` ^$IPV 4M0 <Hc^'c1zB3$DIBSbIFHW,ֺۮ xJ(Ez>Yϣd(fW.τ4!Yp:%њ)$IRʤ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丒sqsg6]%cpdVm61[ΖbwݿOx_|Que_o|?n>7 d7"~{orR»YVyĂV⃂;`YAxWۅu64xWk臑?ߙ߭oy͖ .û"W|||V=g?OcƢkl L2 %/OON\촃?51.;n߯MOj(c [ ~tO^Kfw/79S&r~يuy5ː7Ww^kϟ[(T#̕v<p.I!gzob\6\vx_ÎuVɍ\J~HC_>wgM8"LnUΊ1?%VbbJ)I-r)\@PbI%RjiPcM5Rkm7ZnZt>s ?ˆ#<ʨ> gyYg}0*vf;.!N8O9ӿz kzJו/SSNp3:-Wj:}Fͧv28`ZuO"g9t_*a[z#\}D 83\CRI;66K>C^iG\/3S~ι)֙]-o —Gu瞹nrt{fb.{ki rF؋8 ]f mݡ0^neVy,SR/\jsO/,gqSƊNr?vʚNǦ{b789qChgsrj\<AHǶXupkB'uQᵥՆhR wXz={n=^  +7+P䆔LҘXT% 1Db;/,tjX۝I0*#1QIY#Zt^#T\ l,,<A\ zvh'ɕ5rFB-;E|3s#Ʃ]\ ;`ǹ3p< rn~MyyR2$CM n)H".6\al.`#6Fcp3:?ɓn9E'5dvBv;oP'*RV a#ov#0PS6w|yX,#5jVk0A((Tz5dZ=o?q l*qq??*\%J| Ú(8.me'uDL $FM %b Ȱ) A`,d)K ub7KSȔ.HpWvI!cc 7%"T0>jS*VΛI2 [uRtr8@ pS€@ԉ Q3u;"XSR%[/Z7WNy0d| _&1] Ť0YG¯ nɀB>|.1;;>0V8Tƅ(dwC(dn9%7D'P/oawp [] " ~pw:5P VDuO ]tVʈ#!S0&lYPFj2&1#<Z/n<.5'\"aP A 0I =H8IA&H2D6G⳥'1NQpTM$DgM0^?fI_Bc^oj*rR'^d!1x)IWp0 0ú]4V%gR[R3k1READjPuvڢQe6gEϯ(Kh.N:ضo\@^Y7*DXxihi *Jii 5 ɧ"V  b?~ 'L h0Qoz)V%٬ɣŐ&<Gb ʹFG #i,*WFFd5Tɔ1% D,%< ulV]?pV ]`p@.鱠%=~Ug hBޑD.KH."ds"AdIz/!=f0J%*)$TDa]_wȁpjD}) }E4d{; M{FRK'݄&*)(]fS7&Fɾp  T[(fvII+xYjMEi! 67e ,XeHM!s>jQnt g;8HIԓk̳ŊʻRpk7]Y^!U )!6AuXP2RI2p "2< >p̃;jF|86o!oo?MRUǞȡIAJ"Q:Kc]XdzAAX*J.V࢐AI—IuWD(d?Ow::M 1T=v['^Z$mnJy_7JЕ8HB(u#_I-/x*bt Ț|6-uYjf uڣ>-#aA]3>&2O! -*1VP#S .R0(P(lG-iԔbDMTe*4E})*%S(&\?8gRK݃{=Ou`d MY<]ȣ{L`Xe9x1rfLW=6K] Z`<)} T@>P2ϐIJͽ' =|CvOnlW7XPa<Ty 1LY?}"Oٜg޶7j`m~z#7T f%^)y|6HE{.x^C=4%3/7O3oVr#6 ;$CX @R'"t`}p|(u$vYa؍jR7$vwѕ#cz5^p4g,Fwߠl(?ށ5S0W"b"RIvX.H/k̾V`~?~ubn[wwwGvC>߮9$ѣq_2yvw(Ys,RTޣ}ًIk^vt=̉+˽>]i7\5}_[TxU1<󘙗/_x&5}]S}P]Xx)| ^`^!. j}esfB.BnG!6 dЂ% jEi->DQwǓ[pA/74uH ")Ud i{ yk5;xyB= 56 ZRb"nufd 1*{QGwCs7R-0(c!QœɵQEìɹd@0Xed#e1APV5ѹ8T* C JO(7XU,=5RfgŠD 2}ťs#akHۦ*X֕y"H8PF?sRX.(~P#Pfc},yy-dAVs䠇ڡg2FG8ţ5TXtUd{7P(чχ!gy$$-wB߷zqK" VLg#75T RhQip܋Pa򬓫QIB ̧_T Ͳ,?H wnaeg+w$3#ҜCZ aM#“ގ$g"uZOkTڡJ8!yŎ)x#wI.(]TQ'Q0ցD2lH,.%nnNr}HTg|!Wi[&vͼZȏA,hp ("WvSDꁟFI-O .CfR<<@gc? 40+ QHr+L$QdN"2!t64DWKWNr.jV\AzAp2Ċ?7WyMص#&[, 8% XD;MJiKd1qIJzU;ՃgX}yM*%9rO% rgb-~kHfC̱lŠGjCa-eW{I[MeY"+kxO[qFr8HjMuHE$hE$} πZ3إ4`jQ-#C^luQ6;t+THWVT67rxړ2Yب6 Hk}bn\4pvӸՎvA6[屮QQT Ik@okD_ZFIEA(Z4 ;A}g%g T.;D[{X:3̿o?fQ-eۉ% ځJ4+f@5ʝ4%= G\4bv  E!f(S뎑_ ^ 2^oMڠHdIrBu*tY32<5ڲ%5ŃC,jxY/,T6@/`r>tneJ^Q9\VK&4QT& `yxb -ٹ٨cb98ys\aR>)9%'6 9%I`YJ2@N?(8EsUm[b%O6Φ,dfJS\ >0XUՀuHO^4?^Ҷհݐ_L\K`DL͢2v1\/r]W4'T{,i|r _s}1;TQ𵃟0,G.m7Qa:59 }2όZT FcJMrjCa0#V[%ץR o TF>A/&Tݼ$QEB36Ig1iE`Ak(U0A; v5JJH5W[6q%{GILTg'j`'0x" KU݃[gOSAgp.H1BXx4P*(A~9!afi,lhI #ir8 ZT2Վ׼#O~7Js=`$9$ڟD|_TCe}H`Rd]ͨ#'}AR]-8r.(Oz ֆ'(_Y;24C]q*ڀ b56!fvP?k$x,$Lm\Qgd#!Xg5%h~R5EtŖ#`(sіY(it$בCJB:HW@Lq9N[b/*5Ϥb3ՏV| M&ءx7aAGzJ aj].:2=j$ えe> ِڤ64ڵ=?(\ڈdy'\d ڒO $RO8G.)Z`+N.ehwB¾ l5vyD_!CGI} [uxoC`8h$\+ H %7Zƙ" dS-)fک6pqyt͘kW׆%J]ixX Z+:OY<ߍ}-_+0[!{Tq$3qch\#7:s¾f*@bSݑDS-̋0sY&"D.NV v!ɦoI\e%E,fj`K[jX vCB-DW9x *B!O< .u"!y*Pp֜y[O^u@4 m8ꭹK{/I;Fuͧ={b'W~KRAh>Fzu5@p{l9\Ǭ0;^c'L4=cWHR0Nj4(L` ,ـ@J:-_T_[5„ RH;V*|,QqhK;A,31aNFKf/+;&}Ke. %'X !Zތ)B'r0Hm^f "D]+ީ95f|OCi56w*G 4PnkhBca4j66sn5[d(ildmC 4ֺ`lGV:9h&e?HūXϤ!NHW0ச a!أ "cD1XܣB&#x:$8t 5C#{uRbᐊ>C; rԂ"^'ȡ$[6:vQ:³BðYPp$lE<4o f̀,t nU {$3w-=W"@k"*{ b.)"t Ol;q&jP𪥍V/F6ۢSg&ze=iY&qyH\,FmQM?_[ M@RzEBJ}w36? q(QiumV#]UNAWrBeg0&VNQ!dAe*#REq1Bly9hfV ލZM'F^)؍ ];*gӬXrƬ 'u`~ǯYs|Xy v5G zS!&ꈊ{ס"CdznOpݡ%.nC`@XUs;(2ڇz1qȑu&1!S @=?r[X"luM2$G|NpΈQvkbS&I.lhM[J?q_7ĿׄQH٪!;R񮧇u#1B{:W F>q/Xw$G<ùGPpŹ V]ڇONN; RG&~+S"E R :+ZP5̹]~ m;4TzpbY4M= B1j*=a%&7\@YM]g ͳ4 *VJW4_#'cwȡ隀jVɑ; (~/GN(Gw$Je]5He*m'o;9~@oH{̍{-pm]"8@HԖ /Fwlhx{`Ǫ?}Zn+lEo!/SVTrfmtM;ЖEL1Ρ^FIbMjT^'2|"tֻY,othȏxx [0iaښj}SW>M;QS|.+>/77s&$cY}64m$USϖ+N*yK]zJGVDtAl_&xҤl܎uD0~̿%Kk@-?RWU#㘝 0]^r -EpKTk9c!wGVд?CE5^1aH`+YV[UZ8%:u\*M^eT!WV(7֠8ZĪC{) By4sGv;3!6bXuu {q!Mm@?$5,C:E#t, `& ^+$XjpZ(nT#+ni(5FW!Վzf5VxloxSE,PGl`A&kg_N~oJ"2O5MD&9+ 5Tpa~NC"59/4lVp ܥ.Ld|t .9 r|C׵v˜ۨÇ73$Gz J*Y-= puM 9$P(\m7C7% ( _%G\Zgq۪JT^K9v9:¤'0L A9h$`8H.|*jmw&ytzDHMt60HQCu~d>JN)5mDNut+~H;Ư~* 'l8>Sj:/ZjK% q''uawi{{R`u.JP3_]d<V7tql&) KceUtz._u0ĺc!+GSABT; Ґj:ԱV^T"*:yğ8JI˺S*N*ΐ MV>޴i.>@#x`V:6n$][鷟!&aj3e4y~$4)b+K(iRG`$/+ϸz:ju'g8jp]N XLhVt{y "q8[6gWNFCFdUm4 VTxt/v)j.Wlһd*ٟ D>5y'G1"*"؄g֙rs^s"Hy0CRo ?| S5ʱ͌#6L9g%H|~'Md*cx(0{^]ա&YU&as s -tyNyBz.BC@ ee%jE~{lⶦdzU_[WIU$GCiUŧנV#A[&Rgcv/9Ey#ApADiCCPICC profilex}=H@_["U;8dh;Yq*BZu0 4$).kŪ "%/)=Ff8jN&lnU" L}NS_.γ9@%%]'OrQ JaIZdǐsQݻW^ymΝ;?Yk-7n7kbW:;޵v'E3n$ɤqFoo}=Ov|^x)v?ﺏ}*<)(../wtr: x1sY,ܾ}9s000 _2?Hplk{GFF?=ٶ J,S'uU:}T`BmƘ뻨ȋ=yXf K,'gۦʹu;,<*J3g.Hqpc6{+;]?l߾I&3fdL}v5|yӦJ@gdr;Z˿TWǮL̢i}}}gʹ33sZZ}vŊ#uuu, _X`˖-cҥ655Q*xunu{q~Sek^mݿRQ9GSS7x.֡/ "lْ]jgP::<ܒrbϞC{{_l{k.اV֭!srA`(F X)JNTAiLנY( "8D>Xc|NRi=H*3c&V*`-[=4Dr0GnG1ʃL½$Vb5e|Nv2slJDXs#g5 E*Ɵ5kpQh%nm80.R !%^u󰎋pd>LpRr2xi$|?iR1aLyzCֲU,IA.N yP 0!L3֒TBJ~z4LD*'iamMhQJ}O:PU\ҿ>ABUcYP} pqy@JQ7( S}/ӆ_OX Lvvv\I]c|kw` N`̄'FE$qDT§[(LE: ~rT*!fr7o-wbEXBN @pބF6IpmEq75 8%fY|gppCUAE<~r͕PWSF$1Z{1^a3.yx(kq%_ٳHeP(fQJaW_E8|C;;VH$DaH(Ð\&,-iww7u]ɽwAT66n{GZI8T*F[KX%)fbcfqPA$"FADl&h^²/ʕ+)Jlذ 6裏fz)/^ڵkWJ:$7~q ??uD9H!AhB` &УeDWs~DMeYoswe;3?ٮXz ޵F> N#µFUB \*g.8oܹ|[bݺu-0F !-c ҂U@%JHT,1rض FqCpUUո5nXP9ywУ蠂cD$zbR)"F"PM-71;@´3H/XcQJ|< *!~&Л{`d<KqwĩB)\b>&1$8dM-)D cIYSʴL2m۶I!XPSTc e0v ©Rlhd) D۱ LzdfJJrBz.|hEG:7\w\~پ};b߾}}:iBZj.!$vpa8!DRJ}"IZkW)3*d<ȑ{{\!'uֱe`5HcLX0At%@$ˉ$[!ظ:ZT+Յ 1ecL8 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$7eZa9Ez>W݃$^U41y;(?_ >riZ=G|a_/}׿}ȷҟl˟s~ߟ?Ls ~|?|RGou} }>k7rcNF)ƛBo }N6 ):4byV&$|:|ɏ9A(<6ſwDg\(s^dV[ٟ,/0BdU 90 >b76>Ƹc∛Ub'X:u,]Nй 4.~qmMQb\Qq0rW }׭.%~i;8\bgl%[ ?)\; 0Eܻ0X_C*bl!0< cNFb7ӂ6X 6%Ur+X r'fI%Rji2ʬZj fK-jkfO=ko#eFcFkM^?Ί+ʪƚy]w}=O<vg.Hq-vw>b_yxUmǪ]%hX+޴tԚrZ9(A;A+byᏵsusG9-s,V維' 5>}b"yϸs׷w~u\8ZHqӊ=FnoYZRke"riiCn}™DFoNro|nX$hs^\!bk\"<#ɸ s+Q6_K^1&@ t+įϽo/5!HnխF"Di )?k(% (1ǹv.-̀MF(/U3aQ 4rq?<A;x ܔ`0Ci\YK^y.W^Q#$X^a)@60 r</@W;x."5]\"a `3}|:zDaUF!o l4%:Fc$ /Hߙi,TJ R&H. K^͙#C&ZW&k3@qk>ry v¥H_J4kq!( K 32N`L;2-paZ ?eƩ#?I3mtg^K02{Eҩ7 PkO9matͣӉktem ]BKA(t|VwBF9jEJYk@,N\&VVW/ bvB0y?IB9*-M F1|6%֢9S=S ?6O3Bow1m#6lbAo$+"a9s9‡4TMX&'pc( m/_ˉ ݑeF"*ҋ4&7ZXτ dC֤OP&;ȐMFԐ#+,0A˰'TT,0!nj*&tf%&AI $-ӔM&f ьX:BdgO/X0jf-i:|$/QMd^vRR^Ac,.-d@}S kDrsL d~/cʭzf5%[h'P$@^SWE"|:_$|'4=3ջjC\0">9!P$ $R[+)1fV'KQ&i01H#/%>&^.S֗S_.BU@p(8Ifц䇝?ځtk<Y*2$baA1# hIĠIf<)幺؞ߏxާ?#*w E/"}V^ 8+]@,lFb`VΈz2 2$AI_5g&D* 8;IRu9hT ED==Ur%1` 'K t$p~[3J[z-oj"Zބ=Hrp!{*>!P@'J-1t"<|&H:2ZG @4NBH:)hpl"pL ljLpJBaHAB@54'@u%( "Y7HɈ$Fld @-tG̀{ʈ{\uH} <G AK#5iG( >Lr6|Ԇ}ݬ'y hD4d` G+9k9@9dLd$ ;bZ>icFL7P  4[l)w$&7̜3 f#`-$Co & b}hԣJDnw> _;ȂbD(z٘'d8KzV(CGYǯ%f08dTp LN?fJkȍ-,'wehD@tp9c$e3i`99.z_ L9 ^k}xSKMRɇK#b__N]IiōxyT"\TLO>X+`$RXIDbFV ζ'f݀4.[  #KBM'},YjRk}vH;c1U0|/H Av ,e SHy|`KKבpPU/AtD  HcAyxU #0 @X d#C=K*5a[ Po"Bp "3 3aU$_h S,Dn'RE:3nY'J2P=D]5U~|6oo=?chF1!a?OT'*dC3>r,}ȭw01兎Nf(QB>; td9Sk=?x$ fX*?nP1ma;I}#5Qu(}YtTѪ=RX!>  q׏_g#tU7/"aVR%̜!i$4ab>D! :Ïx"eBQ\ >(8>^@^É!҂@ҪfEn\9z y>2ՕsPʋ⣡: T~չ ZQN0fiS$E9X[L-kT_D["g1spL22{k67!Gܪ76GĂJp67b{/Nv 8UQ 9FVeLiβ 㰩 -9Ƴ#Ma M˷= @z55DtĥF Dǜk:r86x \11:^p_$DۍmL`dBQ# ~).Xj5l%l nT]'H/N)>'p=0݋dU2]ɬ]DR͒ }wW:ĸp&G4^s31iɸ-Teŝ|U"V?gSzqL5h;{ t_Ezr#ԡ6셤>9>,{cۗ>\"JTG]meDVPg e3M^x^=T Έ=Sq %yb ( U9:UK@duy}30fKx&ݫmY%W_<5l;j5B8I9U#7'1A7f ҌCzq=8$AE-c]1>m=d@kG<ΤzIaE1<Ğ2Kئ9Wų21=hG!$Z/"m.2[]Xd oN8TҖ߬ 33VlUTXp8U5 >Bㆪth AlV )lTj"mRl&'JΩM'1Zne:p9P~S=!l ho=!2@UDzAET«hÝ 1vJS-bJnWCҿ,qVY`ǿ.5_'Dgo!ID 2cu)NU,q/qG F.uLxԠս)u]{7ۈMgK@,B%8hU 5Wӭ] 2 R`n7Qň{C~D!#TIJNí=4T҆ʲ$ee6T|~xdoURj`1qD |h >!9X:p҈5ҭ'ψ"d "gC&b]VdO B0ox@Ĵ6]YA9SWgm͠$2H%t 5ZAS<3dF@I)PDΡm\/8G_D7A1;-3 <=zč%'&mTW`M"6*`EfW%u3s+E a5迀qnԾ*s*γ 02р˸JP D(=T#j3\Ap: _HYk~%3^C'MMj@a aBS.mu z읉VetF֞\?V4'gX,QD]IPT] [;?^E0q6{ (FLթUM <ֻᑒɭ1Οpa`k/ن43]iV]UH< x0BYz..n"I>CƐ YвD[v<DϤ2HDEt_7!\m@Dw'<Ǽ6($ Y2e| J aZaP l!Ŏ`*X>Ԟ@BW"Ep}̠Ba1!!q8_R{@ L#p)W!ItU4^Xmu;c91L3Xm o 8ckֆ2 H_pgVwf*aȖ, cu frc1d+^LvpSYVCLksr MMB ̤d^:2]M2 w^8p`>vujmy(nJĿ+q7erLh )@Lv:Ro:ҠVVtK*.?eio,4C]Zd1`bUvV*sL'q_;/D ʢsT}wP *&z,L{S20.<~9' ޾j^(&54<ۉkð뫔6NjyŗdiT=i%gEkA1/Sld!FY, 5OG!9*yஶ&I4;ZLRC jDѓw mvzBTo/br1wwcLlEX)B%E_e ckr.J>vλ_:辟hU($(K.@ZmYh:3mãڄqϻ{-ԩxqYIKm #M\ثL{ܗȽҏZyݔĈ+D>3A;t4 ,9 KZVKAEj*~jz/SGX,0yWcTnH[eJ?| Oj±ym辊x]M_ Ԁ-;)3"Fos. 壺'|re%DSp j0"ܘ<_MM$iVWpWi:iK5K;FlT [-(sٹTCn-.@hjQ]rEK:u7CC]{=)A0 0D :KΛ8y178>ݫV6Ym b|uPxUxJ(ՃֿT"6~SѡO?mK1='q,,UWhnV,2k!d[938t7OffNMS$U 9mgw]BݟD[hp:ؼ&gQ$T)xtc?1WjǍ:FW7)H6Z؟)p ,WMAzPA] KIGMj H@ EfOә/gԸYD%xVa/XY!}/:ʲ1ոH5aflRhY}+4}ysoO`,ĥcG kytu7ުu s>da#vN?< UG_; _'GEp^]:xI'mMЬYstjCl5N6Z>5vrr|ab!چv_D@83jjfb.ɳ=Tޮz\ts$q_?9K>x7Xx?^_h|" 68v ;?R38\/HrfX*:iuQ6eqWpONU4z_x=;ZhWe&nn-WhBi$`BY.Q #-ߎNP+>jF'd.NT-.YGP߈iU;l[\TLAtANAFp"K-j\ @lnQf9]U}!:Hˮw?L'ľmRbuQu|mzdB0E-bt\_ ZΫǭU'ȴɨցUqdZY:#|/$u/EDТCG/ 4z_li9%I!K#PO~.r2kM-֞Pe:j:G,.{6pϵӾ?WU/I4lJ_]oQViS৩Ez鰄W_29ռ?lԭJXsdFwDsBd ߋ㽞|0*2w ݌bs{..?VXOw6:1*Mof;hrAz x]ŀ"+jzvv oDl4f֪k 0@~tvJ) qM~h$$v1$<&uۛX?VMov Sv%R_8vF#Ztƥ6zT] kFvq__VńQD Np,:n byX&Fzў]z:E8}U>o[RtWG'cX.! U=3v6U*f?EMu"*M}ӞǍNVԹR7Tz'蟜Szu`JJbMq0:p]Nf0IʘٷԈ jU ^Eϩb30K:QE&!KwIҩCPZ ݧ:Zef]R}c{<ѻ1`T1ɩ]"FU e`IpzOpngb禨>znqeo:%]GGB39}[f(fgQ=?*5X^7!:PwwYy`o)Aa\1 T_jH]X^K2ټtݹ^HU ~ q 4JfgZh$%Ϭuaa1 vT'W 偗U.0U]HY{KoiSDɘ"̨cJګ~zgx׊#iCCPICC profilex}=H@_["U;8dh;Yq*BZu0 4$).kŪ "%/)=Ff8jN&lnU" L}NS_.γ9@}ӂqDU%t5Ҏ!1>)N?ar'O6nܑ1 !4|~کSp*k'8$4R(m5Z)Db;9~}hǡMO6s?JS° 8#l kcsf|_3 g\ee0$RJܼe[H@0T"B#:KWعС;BW+_nT\>jbs VOD"&fĴL 0 t?w@!0D!8@ɾDZu L8.Ӽ7/ʗ݌!D"v61MiJ7 .DנA 9nf*C]G+W_]0G-0:^sh*N,ŎGc6V´FEo/ M4a9>vű#8QB\d}(bg?[uc{J恙˖'x$8vFrTɄ~ȑC4s &FJl 4Dta3"JA+t. {~'6B/&O/C WΘE*A"A*b;:WgW'Fu7:R/R@ z'#{zVkxe{iO͹VŨsJROJ`BgMRJq N&JL&[& C!0L3b&8c"^[(n<)Ӱje8T$ʶbppl6ay@!F Tkۜ@^g\iq67-&N%;1TxE:k2|L&CP```K'NqF>̖-[pYTX*N<'ib/f3NVMϫidQ4Ͳ8C6d֯_m!HRDёi+ēQ8G*ȡT-7X"J,Ê|hX,)%axoB\eʕ,h*F4ż&@./͙6؉8DH,2Ԍ{n"|'Q;Ngϥa&asBƚYax2;!1LC_uuuaǣR}dZ3f͛73JCb"DcĤIP;kV5pG`i*p;o>vLz`4$mFk}A㥗^Bbwחv:~86l`Ϟ=E<Q»vI7+LXj Rtz,KFTTTM)8B)@:fܹ#>d2?dr-|䭷B"&2`LtE k4`Vd` ZbF, HM6QH$ʷg0<˗B۩例ðMӶ"&jg U &,5* xf}}}^O}SL8GySNP[[[>( CFha``^x۶<R޽ロEͣkr2iҤL4 9E^bJ) `TL)0,cT~azzzRi&/^L"iH?x 7K b1)1 1J3vX~xmg?YϟOgg'RRp]755O0vX֭[W6 &p]wêUFCbaPgHuڀ0Y`$NӰpB|I6mTVm$_d< RimmEb=mV5wu7n?; m!D&bU[!kkӼ(Dtt9W,n,=7FȲeXj߿vήf„ lذ+H$R#p}vF7{VZS3˛v(s>̆ Xt)l޼y|s; 'l7r vš4&2SA@)fhSg;7:Rq}v}뭷j@Fh0׭[[ZZ{!uw{~zu0c@۶Gj=s9^) VQ~O~R L^wwjpDjq h! 4*S~Yf O6MMM,Y׳e޵i 0hGv-zբMĉ%.\ /}KTTT0f7iՉֻm $M'<4>}t~@(_xE@FJ! K>4 x縸^H E+tY8o[Ђ ^-xoNok[ Ϣ5rY1;=+܂[x897`;BC(xFK{b&wIkn3&mO`>KN^`ln+2%u@fQ ,˺`oEaΓΓFz쉎 xE_>ZuiP{AE*69L3ا2GsL]8[6q];43pnoPޡֶ/2ҵ8bF+D1ϿXMhͿ=Le]ʺK_ 牴s{ɼ 8ۚe4O.h)<;8qP`P/ʱݬh=q _>'7'эNQ9=v ͲbT#^ooz`m ed6 Dwm|@bB[pq Y\@7onoay@ TO#GG!j<=c'ɶޅw(<+88y7i;y;/Q8({k*#5BVA! b& v>f1qƤr"CܼK!ɓ6#{q^e/,^mC`v1߯`={PS< ;F!$] <𝀭Ϧ~8ܼ/I&O![ ):~N':m每v֛ό^~n6p[d_]3i?c']UO!UeaAwߩ>*k+0m *TCUF3\6Љqg.܎*o4~\Tҥ!-eV~+IMR֓le5~,6%BCoA)CBPT)ڳWRT*cۣe}7T5]um)1c*D<0*@岄}!2 >4g %Ob*g:93WP똆iv٨;]XNCh OuG 25ˀ^B!E yUVIENDB`timekpr-next/resource/icons/timekpr-128.png000664 001750 001750 00000034331 13716566163 022652 0ustar00bezvfedubezvfedu000000 000000 PNG  IHDR>asBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlepadlock-clock *tEXtAuthorSavvas RadevicC3ێXtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/ IDATxy_}{ԯ6T%Pi9 A,0&vvI2>IOv:L9ę8NL{=c'Ml Ih_V^--UBdCUΫ{{/C!޸ z 7n\z39 X望Bu`8 BZ?wމBÿ:ضm[5wwK)XbŕXk`vve?_*X~=Z(CCCcv1e1_ -[iP{{=7onڴk˗S*Zcg޽e2J)8j-܂k-f)9s ѣg^zGiӦZb˖-n&zzz@k)%Bc8}4CCC8B<k-9q4>}cǎ{n>|r^ nrS7|ݍR T"cH!=J}+UVRZ[|Nȑ#gs4.#x]!@Gt뭷Q,<1(erb6Ip΁s$`H%8 ŢK)Ρ@ ~SJIP.SbYo/jR#IZ駟_'OO@Z}|Y Ih48wsHub8qB,N) <kQp.Ek))5~PB(P^+ D)8>,Od~ۿ2.{ظq+W++wAZ-;c fgI,ԉf1:0ӚD*OJX!hCuJʀcf5(c{>^ $۴>|/$I8t׾ѣRe7ov_6m*p8^8rb0!i% 30Yo2<;ѩ)&1zkmln:k5:+U|!Q֢x6ܲeD 5\uݵtvv1az!o^xǏ?>3p"ƍo۱c}vW*z{9z 1>Ayp:&ggfޠn\ $BcA48PJUs+1=)[UqUԿZOw[;k5*e$f@G;.]U>y>?qÇ.^%o+OQMx4z`s2ۘe SfBб?=43 oڴiR鞫*_Zk~U"+ڣF\ 0J1zu!(]vgg{n 1g?(-ܲ;z{{[A?8ǎ>M{6h4N53LwOܿw;28xh||Bz 0::<98ӧ?{\)X,SJVt@LF!(˖Q*PJ{yٲe_l mVݸq㣿[j͚5xW,C l"a6NoLJO<g~58JXъ#42S%Y6 R,[ ޽{?c{5pY!5\{nݺ1q{ijMLZLXcO}nM#_Y5>>x ]VthUױBclf#33"mmmDQt 9Kn?[QJaehhcoף$33tE1㣣g?;50ַCC?k.76$|!j8˗/R\.熪wa%w3_u־-!8gϢÐs瘩9lLm5w~YppC};g aJf<@8xm^?<::w)Ǿ;?ܱcJ&''CFzѩ)Z3֝>d%G/~c[U9$Bv?338raƢ( ßx|߾ǖz3Ox%)m R]|gffg[-՘+e`o߶mMyyLOO>k9 ;s0dԘ_۽wr̯7O5";Fua룳7RwI9~;A1xkvdxq1Ð$gK9Kk(e߁4M3;;1 |td߿og__mmm' `ttza2 l R} ?Bk駟hqk+?K,Z,!>@Ec 3gx;p K5<7<###ųZ-$<kw.8 R6l(¹r,ٳ'cJ?Yqpι:t1l2==MEA@ww7]w]mݺ_1. XkZf ]]]". C9p& H<[2Kk l69vqN֮]KGG@-{pKXjEv$a'N?7r_tCZ0cĉZ-(Zyttt~z(X-:n ʌ#E{|5޽|^ B#yrBP.)J^ Pzq l-s@֚R;*9.?CH!}MS:b’Q!_%GxRr ?Rꍉ?".\&d1r`}K\?R"eC~K~77,\&a J2o4/v-&\6y9zxSFE,H泾74 XjTp?K@FEV/&, npjEG7wwY-@T1Qj$"kٴI_`Ypٿ!@Z&LQQeGdg DbZuD @( )&IHT[@b┒̟Fm)BprX]i|rQ*h5[q$" GO4]\p;RJo*+@8gŵ.y3e!3'WMB)Ǐ ;},%|z*!B H =Z̛%{^ۨ =Kt |Bς cJ`bƐ:M %ֆՐ*ZAVJe;<p=6vl1<Ʊ [ұjʷN].UR8kIfgIMZ4ϝ~ =LhPްS{6!A1ymL$f@Xedn`@\ )@J-[P]]8cI&1CC4#&&`GD,s'&xafyj_};vg*W\$B)P*"; *ka"KYO9&yb_#?Bm;qQ"\bQ C#l؄0V yxW/C'xKYZJ~sBk[R{] ka [lbM0 HΞ4`-fwa],2{loy Wuի1BR/(׈:2RpB2k,"lRԘ5ٳ~{UP[.HRAH)ҿUkmk_y%Y)#+h cN<4R8~~#}f)y3v^D?k2Y4YKsϝ52J~ F` Z]+PVH%J!e&90Az8R`:1LD(ma;o~~`2*/ҩR'j.5k]]X|W8m5ƍ##fgr{N-8!2[dRyDHj|91H)Rޙ̜8IkWhJfj݌vu}ўFyE?'>q Y; &1$ qĊLNM^>U±/ÇڰU DTFuvJAFqd>1!H VR [M$Ȭv2B*:BspJcBhQ fU*X ͑X}ݬ|ۈKέǮXW(>Ѿ2$ SR 1֠>V/,֤`20qB%qB%NFR>[~x˿йf kD" Jy)2e?JlH "Rtcaja#!pB D![k1֤;LcŚ';I13g@ںLa ^9T K^^)x3DBΓsؐ q1Q<"cұҶz5Ǿ0b٦M(U UIՓ/|&({R Ši ӥdlMysXgSaИbcp!6( E$QD1ϡzڼwj}!T)@gH}0kD^4k\Fl_?sϱ7cLrZ\N"pI{O8]'y)S:%B !9 T)i%BIDS yNT*lW05WRUGj{\+Tl@cʵ Zj#7݁[M J+Ɵ}a XH!Ps*"*2viR)>O<ӂ~;*ZYp$(3,3yA%mlbq&:H@f$??(e\,f!"8&2 .[)/aLFdl ':˺(ӣVRߟtqT% h)ڙvLw~'i0~ p18cɮ[qBĄQD+Z,E>(Q!p$fQ.dgo}'.Jlmvz#C^o>H)LZ&lgC.᪻fݴ0X LMegRW:Ĥ\< (ˊBNDP (qOMoɛ[S,~9;χ(C\fŊs8p'InV.˘.X71z*di$X˽ٗ 6A.]p $)s6ud$ 6Ipa{f©i@>=[0GW_CP)Ppl6yf&7k.fg/_]^ٺ5O~)@^MsÇ ȡ , Ijʨ^`w#Ik06 ͬdj+V[v2^/@h d8x ǎ;ڝw> CT7$X~c2$I(j ֩勬.so$ABuDB^/_R*yތa>ZK7pwnᒿ#G\/P}}7ѱr%S> [@MIR&:\K=dHZJxZsF[(U*(!L31:(reE$dkKčǎQ[ 4n#C]HyOWzwmݺu~`zz{w^z{{{{^]6oŖ*Ժyq("c(d$ I83i!aqf$#I0QI׍ Q*5[ЕJ{9 uSSSh%ַEεZ_`?l6qO}Y,5:6_G\q(63ɢMc".?pQAi|vvQo-.h;0lBy4)~ii|//hηwuu]rj>yn d]vqM7? wT*Q.F*d6~v|Eݩ;D yO;^+Xx-`^CB͏8&i7Mj ( ["x{)eǎ|#[nZk/s>ONjvmӧO|oݻ/i__拯Blg AP?r\v0' ~&, yYӤA.71& ''z>we7¸^ 8p<~8so{xT-|bjÇ9uyyfO~lڴ/| J)>яr~~{R\*lw@a S cy<=^ }Ok*Fd?`kSlEjU})k/*=p /"cccoOZvu{V^֭[җĦM'>qQUrΝ޽|3,_JaCIDATphgL-u)kdJ󳐰E왟Ӈsz%M@ʗev c gظq#yO:uhժUܹ韾2[~|;MozKQHTDv+P@82RyF!$',4,8G*!la$/ҖRc_aZ/~?y #Gs?svmjcǎO>Ƀ>x6G??bڵ܏"ƦjO\>hPBd& BhSpB{sE ?hXg!1f:.IpZ{C{_kyׄ|C{Sp#?=}/###?~%nlsM7y8)E9 HЖGivOB!D1fR#ajÝT;?_s5|_c{=E{|({[[t4#lai]Tv&c YnI9\ԾGyCg1J9 Zs<]L)dN}jy<ɟ>=?}ɋJK:DT%ΒDDviZ<8QhFYRq!a"lj"S\d$qW*jlXrӟ4> 7x#֭WW9x x;^gs"t{;IEEB$!1 0u.hdqoఙ Ri8 x ITČbj4x o'/.`,#1zr8Ia8+(%8I`I*HMU>Lb-jdoDaHʕh@HwO{xJ8=| C$!jZ-0~ŭVjU."cԑi=M{1qv qgTI338!h[ЄH .ICmn EX@J %.N)ϪqL]]:EQDaLFDh1 V:aFFؙ3Y aHc"G($I؅\pER~&M}~)$W13C}j"օ\#Zq?1ꓓtmTT 2^ Rm@ '%Ši*::ХRfuEdTT:tcq'OMh3Zpɫk Q3G38H >L+)wv=%h jiy_j1&l% q;σj5 ?׬>13?-FH !a#\:/a#$lFa۾{?SNјkT%47 I?c>&pὁQ+8cP&JRP*J]qCYtcfO?u|[@Q%JP^X`UojQ#D{ Cg?V#3 8.dDKQtsPYU0[\$W̪9YԊ /<Wwt0{HR/HS"l$CC(}f!`1Esc2Bi ..JL@sj_^*Neb,ngF']Voќmj"J:g;o|!&z:prgg8u;n"]?aR9eY҅IlRĤNl$ Yl3'/^yuz*T)>Ϡ:sgH٪7 ,{;#5ia I70IbM-iQ,Np!aQDiJËeicKw^a,5V*,/W {/q1&6ELbRzpN#?mӹf!y]` BZ J6,.,^w.¡RiЌē5aBtlۆ [}2ש[O 7 . EZ1DʹBZHX| l0Aު%zynbSl阙`x.lu^.~~ÈkHyb;2?~9th&8[d 7qMV#2kR58)d"k!"s,>|vKBL4#@8Mku3.'Yo-&V!VсN/ mZ!h֛I|C~9Po9|e# ?8|K8!nJ]]EK4 );W4IOV%u^*6Ibs)y7Auip1pɵ<[5rL#s=qvz~;3r_#]bÍ72YbَyB(@J%7/;Xk-Z u YĎ`]qFz'=wMoق )$`E{c59ГOrfvpUWrſymchF S # )@ t#pR 3m^QV`GT%IIysHrse E/T?sx,٭8ġ/}_"˯e]NJM(*+W"]Hw7ȓC\.r޲DYs\g'tvYnB:YdbP~)ې I_{g*EQdSd>mD֡t~8> ˮ9<6lhSJ9+Jvllj]GGݽ{% o.[rٲe$Id[[j*(EdyzYF"QZZIB=h18'4fCh"cCӤDy²dy(Fk]=z=t*POI|𕦤NeQPg`.Ke\$D yԩt-m"%I-Lb˨C !\&C8O|4$ H]947h0^ogܦJezy9yDG%Ҹ]$R 5Mj+W42~q(Ϊ8Zk(RJT*yI$I4(R<眴jkZkB(kv)̐HXkR !sNλSB]G1y>j0oĨ5pJ)]7e !Xk¾o!1$$I"Y\86B+9[ks.Ru։yIQATJͦ)˦݌ sxY$Tؾ}/ΗժXZkET$LD/8ZkN$gJJ0J)9IEJ)VBluPJk-sYCW "~1p.N!_zqN !L:G+4B-֚{ιZkZk$Is.6$Q8RxgN)e[+w)Μ9$9R$I"rdV#$JEc8A Z+s}aιZ~=f cK|QJ q'v 4I@$I2_&;=VJi(J)٢:R /̌Z[{.&o.SLIgYD "C j5'̿nS"_\J3z/~}1O濖2u۵Z-7RJWوy ߹B;SJjjܼE=}~i*tIENDB`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  IHDRfAi1iCCPICC profile(}=H@_SR* v␡:Yq*BZu0 4$).kŪ "%/)=BTkP5H'b6*v"CL}.Js|׻>U&|", xxz9YIRωG #e8xfȤbf%C%"*FBegRc{2i!E,!2j( 1Z5RLi?8drȱ*TH~wk&'ܤP0н 4}l \im|^ok#onkp >!9P(gM9`qd pp){={nErx pHYs.#.#x?vtIME 1{*tEXtCommentCreated with GIMPW IDATxw`EǟvK !!@B (6bkEbga" / EZR$rID1\nwfgyf΢  @߸>I/1 o%/ B|C=~܊G{e{W*"; B6 ?sңʒnG.A=˲qJRڷn.F|Qx˫3^S32t!5U*.'NQޜ/7 {?k]V&qEI JU.'Z. XGA p4D`oiQHLcj$[V$GmT/T#i;g ̐Gv@P$D#g,H9 Dnߟ2I cLt!Ie뉏꯹!^`Euu8EIBCRi?ljGnEU_xBe8(q0S8㐂:h$*`L0!X1b KrIF:@"K>B\ѷ.T[|4z^jݓ&PЛXc GAKvݸp jnTOj_afݎݯ2q̜lcOi$0t^ OFyg/"#?J)HEQr:[ z>eh:Hz5xL X#@b:iE@\3 uy(#$ $ G@C!03A BP()4%4W҈<AV4Id".Aq,N5BP( @%HUqxSJ0@8WLJ #r BP(Y bnx;!(Z֋A΁cq8DLՋ BP("IeQ6VW')0"nybѫ( BP[T6azѵȎA'az BP(s cQl=U `0 KT/R( BNf;$ "AШ<-xA"!_B\o<=(JO fZXyRcfs81,]^BNDIjhlf>_jttJRYYYx(Lei5 {U؁Q0j-= U4IcZ40モZ^1ZG?"pсTJ{E 6rxu2;/0hsj"F1(6c7B!a陥=$?P(p:3Gq!(BxxxFF$'JyHp8uuפgPFVrh30i1&;NR|約M9.~XBZ Hyf ݡ&4HOY?Zs&١bBXl5qJ[5Ӯ{<ĪG+v9*gcc]܏݈d}Td9Y6 rq뛇mX:K5PZz?Vc现`x!Ƹ䋢tT'uJ!tSߐ85%aaFYb )SHc㌹֚uy8;~tATL$$CL%bcy Ml޹g }'؅5zcoPi YT}t؃Rya{Msߞ_苛AݒwY6 rih4 X,@E1*:_jjqqqH=5)aCyF)Pեi"_.iB9@``Xe(a%"UGM!H/LfV8,6HaZMv=l3M'& ǫXEcMS S h7)aBsj&H-Kd6D1˫5vZE4՛MQ`X^4r`&i$˚WEkꭄ>!֗ښ, S(A hj27[ABU4we@No=Uni574ma9!0L8O4)a*u64wK<%xPBhn20,i5)\g*4y~_s߼zѣ51 {鿞bӮ#2ƻ.ƙ+uɏ a7we@׶ oT5qmSgmƺ|Ʋ?媳}nn <`3d7~_ݩ"ӹ'dtEQ[k݊Vk kT5R(b;(l6;YQqvr.oOA19AZdZ}zNFI d\Z-@g_轌ʹ !j FSۈ8v$C̾*46ym֠B |1$t1zMBphxqy{H>v4t{g_u>+wp-P_(s=vx\`߽}a3?dq+͉G<`ez?_>ݵʃOxEC٦??\RbKծ?"eڌ") >;T?;J8Z,'.R -i?Ơmץ-)׿z;zkô ?X?ڌB(W޿u #+p 36mMMBUu0.ٰeIY0mA#X,}g(|iw,jAhduT!kC4==Iuz3pv@=skyQ"C]_T7Oz1xl/L VdP N1;V"F`'쮾4{y4ӭ=;˜~@}w DwPH9gA3lûnhyH~ ^~yVu!CiG;wԙ.YnCV  O2<:?2mxCq] eTv!v꽷5^RO]ȃMǵvVUvV\~)HL?~'_&>kM{V}ݕ fs^ /gyjǫ<;UrnoW'@oû ,v=;{9bU#iP#o&âSs'Աv.~ ^tu+IDBOeD/UpeDS623Ͱbo)iHrީN ̎>]ZdVIuvwBBN~ݡSҠ$}B ltplp[,{u>x:yapb" {W9y͓7"EH xl/U9:pB&._Mǜy \6YnJ)H7`xѮ} GK'uWWnG'(w8ܳ|F pG'Az^ _Gq|l~!{{NX "bYaL|zHҥ Su+mk5h\H;QPjW؎գEA[}nq_o{b(2 Vo=P3,4X8rGpm4u?b;v?o5=> Ւf>m|DٞlrZ6*!51DAF%qՒ{>B}aA+AHHlu}Ԟ2`,/)'i㦌eCojFuQQvgi3uOZǗ !noдNݴ mĽ̌X}1m)Oι6ҏ6Vjf⻭/>Ϗ;0 ?kB'r]k8f`ov9<\=cN'>ToF0_WqGw瀷eEʹsKUu͠yXbO6O~ۚ )Ǔf}]M킵o^ya0^[a=2UZwȿt̚Vb`5y yG[i#HٯV\z ujㆭx}?S^54l/ +jQ8*QeF/.&>lظ귐aqZL^w[5<5 Nn]4s]obM Mݣiw>X5 &?uUУjv5'mS>߮lxf;,dsc<b9 z`MN\%ե5kHNEF}dLԐ+^[}x1y˖%Qߘ3c/|qyu汐^Ļaz⟭vso^^?u,P}FFvy-a$~℥~QVl[,H 1p!!|hLLT&% h/Fl*ݹvjj K퉴Cf\o!"LKu,Ve]t_~WXA0dFHp{P1\ǯ-s0!g JIÊ_}p W>|}Vim’W$D e `/nW/f&&8"%+)C0M|- )5AQ}#4k;=#ʱtW9YqZFۄM4uOC@xjGkΝ߳jv5 W͟mOA{6Å\@̸.܊ov3O >M]ExWOѦ%e_9W1G//i2,CHGų\؉Y?|xe#\fzZvo^ O;T/ӽUc{ݝ1l lڎͿo7ydϛ$R`t:uff@aÄ([&ZzSd>9Wqo9~G5_ŇFѫ|X22CEo9gnܲ᧟6h?zU#"bY!$D 烃:ӱJ%* $Y, bsdr44jk:"Id2aڱ255qt#G2@r:wT" Rkѷ$%P($Cr ؎mCnN6yŸcGW_׮X!54d"Beuɺ~u|<X-R#GLXmG:z; Y!ljF9-kMﶕ6ۈ28.c}w\JS(vV~2.s9iR~ǒwD̸w|,}VB 6n<0aׯG""Roe믧ΚN0&D$Iī'R㲪a1ΠVy (^!J#(MS$U\u<ߩfN$H***qʔW^I5K2{'Mjڼc;ĢOI{tT{Wa[ԽUxWh.?x(b9g[ 1)J ΁Q^^ kB!ULLĉaC"$ ΨC2 $0 bBoWQ/-Ee!L0!fUfmS BÇָ5Ǎ۶\qeW$ICQ"CiJ)RZi>Ϲ~E~Тx=EU}G{嗊׾I/SѮJΫ;T_V&..~dCn~^zH@j~xu vk&SW1.:Ix_|:;t#C Y5`}78.YH|e5F'TłKHlǽr_^ܼI,sxzʫ{s7.x*-_=%u6PEťy$֋V?o!!">uqيUD艃ÿl?pʝpm!vaXb9haV.3:&"%׌CRnw0JMҼ' { V|ҳfͻ׺kk/yoi3 J0n3 r/ZxhɿoX}hHUUͽ^]:Bj[.RDDW*, BOW @< m# eV"AeSN~yDŽx೼R q 1QF U%I\PFh5kO5B#oںzɑwݕ4?4@ w[gڳop/>@aٿ[U{SpH'Wdn*!X(AnJW@۩؏|:YR\w$t^p,?09 *.k/\.[CLWkK">@a<{Ou{oMSKf6ZOV{JE 烺l73rDTYt/*q3,)*T/=녪zPpuASn:%lr֢ZX[˞uc&?w mJ\%_@[փF럑BЪ{@o1WpE_-x+RdOf~n{)c$.ҳ8Xx [4߼-a'hQf`$]~L/a"O[(S0 YyE}L_KD ˲<2ʒsEXel 1!kqa^P -!FpEqcWc%(Ijd$KfYF$VېXVzX[@[W/?rTwk0h+Lxd8cj6Ti285 re1gpIF?޵;N6y oTg{]Y;xc/D= :Qj~-ΒFo{Le }BٹI;p̙pPye)|ڈ,]dq{#Vrs~;-y ltplp[,*!4ۺOBBN~ݡSҠ8}W~1㽫\^&Nf iJTJ^y+x^Yq- 9ayV>x%/(yA! JB[I"qJ\=ܪ kdʺ~Mt4|#7݄m6}*ŮG;pt_ݲGa _0`==Y!,/)'i㦌e:\? " OL :aب8Xz GĴmN*TLt~~\߾qH׿!g@]78?8x`bꊊ:Y;we̾JϾm@Ӻ7n:quQQz~nĴˏ<9K?X5ݥ!!)]x^b^_7P(f͇oټiBпi'ᱍٌy+OOFt ebˍ,0+I0r$,=DFWD( ̻*^~߾OV겳&}-zlzg+:mceօ/._F=1J+&j`~oZ J@up1QdU Ӳ uz =cߩ( sKUu͠i ]1.X; #SU{m]K }&jĕ_ln:뇎&oyP9md)uKoRB/g$뷭ِrqzO_[iƜ6$*mpӹ6VJfʇM._pp |- )5AQ}#4P؈'hӒMKmW3Jw](>oDTY=/ݗlVP$ ?:/[鹄S0G//i2,CHGy)^t6B˃n~6a+h2aP7Ԃ{+ ]PxjGkΝs~Ρ2,XjUm'īg3\ȥ<Čϭf;4]BʴGV,ۅOȽ/#7tHӒFw7!/bL#%B0βwLKK]yDw.{(s<璉<ǹ>ˏK#?=ܢS"z~/I%I¢$XQrJ(Ngb1ءlt"VB-n IDATəV*R7p9OReV+P(#R9,2:kk LbÆos T<DZ< .rlŀð,ò`eXuJiYWu ik :S{"fk؋]qe s|OE8*Ҡa,֮}KGBP(କX0eQCe-aэGJ˳qcYyzM5f&G@%X XڐC$NП(,aW?^0ukY:05E;V^l#ฌ1qe*}ޕBP:x6NLc37mBcD "oI2g8ZA5rl@pEqǏ-ʩy[5!91#7#PwCLĖ)i)$9E)NQtJSU K{bz92BABP(ieT!s L0>zǝ^6, zQ={8T"@n>tPZH9yY jͨOD0&sy˖Y+BP(e޺ҹsWB!\@0&b99xxޥ. <ll6w>e9Spb^97!cla" B kו= BPΈjD+%jʷAIb$$[xih7Spvźn}cqݖw)cVlY>5bF NIA| S( B9ɬ\4+*w:]!DlacXw-p:W -5 jK$ 0NbG^VFBP(g"4Df&640 8n INmP RK,Ɩi\YwUGwؾla I $ptY4X BP(wd cϚoG 'D8qZ%+EU|= BPMhx&""(1H!|eJ)M5.wq1nll<3"EDmA.-/H4z DtqqXPK/9NVRP( rJ=-01d9k `9㸖"\WEA&Z<#(Mxx?ӋFD8֜?JXtn.bYl>ԡ) BkiӦ5k@XZ%>x_l- &^Zn}}GNO?mkppp~̪U/K/`9֑&Mxz:__OS( B9$cT'L3*,XmG.0~8Nmfg^7lٲ._|1$BH֋"[y$BHRXj*VBSP( rH-mG}"$cLs 1}tgX 䴽!y6KgeeuXؖ9v!֬AD@6#qot BP(导@$Hr$sS\;ؽZ1Lpp(w֯_vIĉ[K/² H,G$)8!S*W_nMP( %vn޴ $%1 ;ADr@fiZ455y{7:tց,g֋f4Z{`X6&h'=Գ) B.ϼj;>?{-wK7HЫ (] ( J^P!( *J t$4 $!!\ݖyKrIn/BH~?+;3O3;3| f0]UIbiiui,YXH$ׯ_=IT I$ ͱPuj..HFٍ OKbLuDR5\QQQ\g#˛R~uU@-o$I:1Uj*Z\C0,ТqY_ C8O[;-~-o$H]m΍>V1lh)׷(rOs"ͿTs!&"6m%I uUF@콓SBA}ǽ1:Ē7r(*53OI!wċc_k` cWtj#4c(_Rz̪Uԝ#Ԏ UcSu9k \| lځE _IG\ R櫥#-U.oˁkrӔ{ZS_QzMyڇ/J.8fﮛY@'*Hk )],{O +3{c{]-w,u$$T!fX]EEX{P2#}[M g0YGVy{׊s)C`GwP{} t\Sd΀*5ulc җ4(eT^ L-,a!Unު---333f CY:&&&}1'N|ᇉU9e)S_u"I;Dg̬8;S^nֳgpTUkN ZFh 1v-,FXbf[!UX:~޳͛0aPu"A `i;'2#U"!,B3#VLё+O_xXّ̐z)cIK;zͽ GE"i9>:x5qJHh $4wq,2a$y֭%cRz}I]#4k'e0H-^vfK9eQGO?v❡S+jG O-s|q1& *IP?{}B#jM9\a`&B=M^ z6 '~WT1 YiИ@mE'u͛e1!oj ]ϑhcM5.8U_ԀX/BK 9nmQ5m :' L=1]Lr@7dzޮO`jLs2uLd2XCb!ApJ5ss2?A\gmll"""-pٲeׯfrrr޽V#XIA$"""y>mnd$Q0:#2"1U #llhk7 DzO/ij=f ak,tAip ⷨ%}znU3g!Vtz}| fFa侞Ñ&a5kECu9774C0G8[os,KCkuOC2bu\i 3 0~͐!B6C.H433ZQV4hsΕs4haAټy… )u/\"`} ʊKodKK Pш>! eˠykBc/>~bc~+ ̻=G\^FD[U&+wO&3 eM9%6pRUXwըj4У #XjTQ7|`K 0euWQihk1ΊTF#maKŧLLcuq Jq`qϯFY|YcqT="I5ytLրnPQAkDӄÚX"ѬAUPFZ~Au>00LMMw&rz3QQQ\g ~N:;E33:Ԋ|BGia0b0E_ܔtp'W.d'\u_X fdyDb&}/=8} 3L}:V2BJl%)o<]=~f'%]wꜪI{WgA~b|KwՆ4J)E֯, N Jz Wq 1N=#yXq .F3#1NhE%1;~\\kzm:MmV9e(jcMn5@f^0GӦ; 7{1ݬAk^m,G񕫀BH$`S3]҃)F%%%/JVtqً-һnf.Yp˜OUxʑ/bEX7۩`stǧdYNd=6?!n>֐qTBO ΍~}nFӐ~GVXF JsԶ]B6(QjE)?]zo\D-9)ŷ0P8)ud0_^8 UKtU|w;akn@#Ч~p#)U/ohC?g)>Gp0#achCKcMYC~eF?M۔jy+2nǩꜸg 'XbL&c uz]j]Q˾FGX,o"ID !DڿBD-Ztf|ͺ{HReR) d"5KNN:ۭ[7KKK=(-]r5k gׂD"Yt9s⋈@"@"Fekڅ̛+޶p >w^D }orCb;݌Ro=-[I2oq#$hLw;`b9SO0ɋEqu1&v!c<A9j߰S 8Se@"3UPPrCyjC& 1_wxt($lc_ݣ&»sT]ƨ#RSԬNnÑp)>5̂Ffd:ܐE~u?@d\uEq2"zO8} q_x_o@qZ%paڷC묕osF~5.GD#BHdDѰ$-.Vϣe@=JI+P/s%>{o م8ؐ$-_v$"D$ EP" R x|g_};;;\r„ YJ@0##C>Ŵi\]]@R]/T*F6O(Κ5kɒ%Fοf(Z]: }LfY6=;~ty şHZj`:5*R1˲6vcJ1"h ދ/4hO8G7n܀;_ ~Aݺuo5/VSFJ' IDATb+̲Tσ'VVL%''oܸqϞ=AddK;;P-Rq#6ˈ1'?4p_r B =:ʕfZIUNQKyP-6=` 6,YȘ[\2dȐ#F|u?Ha~~ٳgcccoӗ_~9i$Ԍ kW kTQTuem-D l4y}hǁKqi#bĉt7j\voΛOX4Ypc/R3zG8Ձp}[\f,˼\bS*@bfoҬAnJ=wl}6& 7aXtosV?|iC9cN Pr6lذ[Ϻ3F^,߿8J UQ(]ʨV9ٻi #k' oukŘ: .iܧ)!BEI};xku=S; !{٬#*Ed;wcma}6ڷ:$cnINN7o^DDٳ>R|'^xx~۫W*aCdTgz32"T&JK0QO?ݺu+6IK l*B̙3OP4Z[ac;Sh!# jJjPV, (P$rp wu&O>am{8 VTcja7%`_mZ2}vII"gW[N-vN٤onRQ֡TR`u8xETQFR*mKI:x O]9rWBd1UGZ}\b׻ jpQYKU%6=~?kmz..`c L;!԰ Ӏ=]!;jzBaZI23NP㐩R :98s+MiJyz藤'wkX.|XXPOXM )1caQ|xi??'O^!C<C*=ft+0!">{ y)w]cb2Ƴ+'3 #ov9XFLSW .Ѱţ\7SK7qL^ç}SJD^V"8EcoyxJP;e/͌m{3[p dAft&aQY#gf1fxp);teIdD9K($"D$Dm\իW+b~Y+TZjJ&}٥*Qx0-6zFТ~ނV$!2ooC;w?}1ڵx&_/F$4+\yGo9I7_I-s~5G{QF$I3ƤbW2 Q_:w!y؄aZSx݇IT#vsLϠ1.2]gmommk֟yΣ5w,Xyܞ7r_SƖFJ00ie[ k}޾};--˹ΝlUl%(Ř(-"Ia03;:oen&Z0"^rܔ[paSKp+mzUn5C+: v:sfƦpyʙk~v1zx̏6Gt&Zր 5XpݿN\|MZXL<-5%!iPPɵk*fiF"9ŃtbVSkO,\ְG")QaZAmli\r?]-X bWH h#0GK+;8<[/WC(yO׹*,,D[r_|}eB_bԊݼ~ê7>u56%[A]6"Ģ1I?8akHwp PK:3!mekP7}!mQiy%X̛)!%H!58iK`N-9h};:[Y<-v>ۡHl?ڑ3:[㲄_9IJSЅIqFup8/1!ϲۃ#|*{^jqpr! j[X6W/m2vdÏJd^6ƎladAۥ~TE*7M !(/جW6INL|}}B_v.чvV*<"M8StΌ^VZX-zn;Fhbضn!!Xx4|ka$@sw"]P|fw;WEUZo83Ofs%iNgMrbض2t‘nBQvfM2mO]9҉&L\᷃KG޲Iv1j\YEC=?\G]@bsz**yꯏGMms|9)ei_5\ Q.jm_HJ\BWKPp7N#S4Viya_>g7' Ԙ`{1RJ  hGYƖa"{oERRRi dR<ݣoUdY3񔱞#SE1˲L܋|XTbyB*mQՈ./H84 &5+pT)ps룃W HwYڵE2PRnbpsG?8ȓ@;_\I]o;:b ?ǎ Q5 #k' oukŘ:$@W:Aj˜ƒ]jg$wcma}6ڷq$c!n**zAEj\ZOJbCUX_,D[5xIRV%H ˲ՉF,XA}]*˲ V2*H' T*J}ڨߙ .aLo@'=NTGjE&ˣRƖaj>g,)*Ȓb"9>:'9D,RPa1qa}DEE'w 6J )y:rv~ޙa2nᦖ &4'6./f3$3>oSMM\'+(>UebGe`gTDXۈ{)饓dj6C`X IZB W*EͬhZdڭZ-UȐh UEEHXVG2gv㖜={VVl~~q^ n^Uku#O tjLmz0f@8?֦ۨK1wu&O>am{8:VJ:{cTrAEHlal_{C<8 Lb|@X ru'hHeU_RH:tJ0php9oJ忬`dNc EήdS厾դh%1;~pp\ƑFQ`N/gϋBcC,=q6)){x sȢQ~RyBՎz[a#?\p, @Nu,Sw%n$hF? Kͩ#ͪV]'?L>bpë~9@ĮwO=>}%ˮr TfEήV:/.rT!&E M1=qڅ=L jSW~+ºWK[8•C:}V&6.h'#WUJYWlpswu}7kȸ|`M MtUf$ 6OyU>tK.#o,OYׯ$ ;[.[ppP7K [()v): ۃ?!1}X'wnv{ ;M6ٯ&ZA_Zjv´P)2|qEF8Xwv,KD`ȬQ_pB ?t;M4&،{-k&@87  ddH]H0VȰ TrG*,ռڼjX#_w4~G;r0tש' 1#[9U $23{/[Ro=-[I2oq#D!Fd̛+޶p >w^BM#rܔ1 ǩZHUZ5&hYPbWfpGr Jt(O-u1M]N'6kf3|Թ}P۽;"OPwbP,IB' 'kRQJM(WPkr<8J{yWv u{<>h῁7G̀?HM%~u,0UZXHR9ٚC3 24Кc7U#]"fXaieX\Q.F$YVTDT`;a<."^/m;o'5V -]hNJDj#E?|ְgLkSȲ {0v@r?ceNڐݟΜ-^ݔkpEν;#)PObv'm%GLQGk3MwEe$q14|i͐4M1 M3:Wf%DeE@ѫim_K{$}Sh5L{QT }ȸ>Žg3(O<1e|FDczT HBq C:d'Q C3?O Z'XC94cz/ GEacہlƅM{ P<չ9?~Mk/wI:σt7Q͕og(U p 2i o)qMn9|#9OE*_noͮqt_?Rvkߖ()Y)KgR<ֽ]E9m٘bd2`܄a:ŚGD8?q~6)>g]t tn.ť a' Cw7Yh#]`,Zg*(gݾ^Yx,.+˸}S(߼ːZHTEB@ ֨IjXsFs 峈 [Vhr>HG+3{̻Y/YH ؖ?ms_^g)ew}I1&;=2'$[3[wýq*.>_Ӌ4}MwAEV] VOY܎M;[f, ` 3˭*y} ATtݨYL)@\"Խ{W96s3_سkc:x5qJHA}mOux@_3D%'>D$A|̓2>+8neqqy))^^&Oҥq1E@"H[eYZ3Mt%_>0wH(55} ``[DxVH$L)Q7ضrAJ/ Ma~Ly:7ig?& WN$@R7B|.Wn2Osy& 1hezLC޼KpO>D&rf2"}ժa ylk;ѹ("/$ +kdYVk"MibbP\luD꒒!H(l'#HjJC%ش߭?M$3yv76fF! ,  6D$ &4'6.xcRTs@9*U&ZKt\v/jYcMS4.%)@(YcaajBŹyyTzJ:0gOgwOyeM{7E #]>ӗ>He|Kn0Y"Ww{|&[6P@]tKڻ:'ct jLS<_WYKqQN" ?oKLͮ: q\{'S^ ͊>OT|{q 7#Uu騸7/\Nҳ uYİo:ujC鎃K ü.EfcF_[s2<Zc$띞'11 Kooyc6rADt@Oo6 ˰{goK+~0E]X5ʒS$ SR20_M!'B_8_o6lԂ?lT+le@=mRV hvRo=-[I2oq#@9nJ{ǘ؅UFNP{}̛+޶p >w^\7o8qe@&A|dc/KqzQru/E;ࠓ⼆/̓Ϝ}l`f0*mMɓ#R( 3FŁa@ %P  H!)x:+$5@Ċ'ʭOIpf?[)%E_e99wwdT*@onڡWM_nu Vˆ;~mȯ0σ[ gJ8xHA,)VRӴh5M)6"4Ds2lyaSaGkO5Biu0@*2~^F|>" ^_Pܳ/.qJ=oۘ/s%>{o م@ss;tFVH;PiH(ɉ۱QGq?VcjRSS*[uveXJEQjVQcth$#U`VNع ߹77P>~|k&UQ"IV h/* Ǣ LQj.܈YLi Tͮ<+Y#-M"Dٲ(5v"d2qy-J[U}bOO P{ӦlD9ivQlEEǪSYUGb)L+VVE~Dۛ7kbO#%vq}2((Ȩ#JwoKNq*>^?n A!P]FMdq>Vv`mJJnr_}`֭LtM죕EF< 4EH  : d?c( H)c˜h7vI1Ov5 X[W"BĠ>EF=NqV{g֤˗ jbyt39օJ%Qr|@#qsG%H"FQ+޴VhAv,xѽ). ct:$8ؑ_y~~:;a/E!P] :<KБ˾_1qŋݺtW05uzbJMUڥ[;Qy!FxR08R#BAj-ŢSXҩHEt:4V DQ9~]Ӧց\^f UKL4T#HD%"Njy*cN+PQjFUtNMJ?P|횮B,{tEHBB՛8&p0&$d8eKޭ[W&l[P(jes3ό|@?EÊ&~~} B!ꅍ%/|d,z5e={Ĵ4υ6D+L5MNN~jjAjj^r*..7../- xAb!B;2؋ Vsr3gN}ic1^*A0<-SVR4#/D"Q4Q١y0)w5aڕq8>u6\4"˼}D㫽-I,򶍗N{ !TO"ĴP6񼸈DlVٮ뼹4//…3gr.]ʻA htK~Pli١y\k%Q-Y]jѻ>Uϛ<-^ئrRoPުݤ7?jk~J/2{O\MI-Cwv4fVՆ~ƊEmYlN.xW^͏*xHӦӵ4/t:Q J++Uaaڰ ;S-Ub'̬]|5ϥ=8vKI-xrtrQ)eΦ/R?^k7r5}ߓF*6)翱b~wLaddnnα:7;3L|uЎ%7?tTYiQwҬ[NWk?<ܗ/z!?aC#023wjOMf[ÚAK ?}߹ =|xWo9xotSPc[sѩ-^y͆z-p%h#w%ʬO=hC[wq=&Xwf@+X{#FvQkhґE#3txaVk$ˊ<>kŘՍ=],Z4%I) **/WEel2 6&|-u7h쾅 (5F&^xq=g# dv>\fp $T.OYVwoomiu[U0%5v_ʻ볥-\8PYjDWVtU'L-P\Hc W,"B(5шڵl>#fV<엾lJ,|;2nٴ{VSZY6ݰ0iaL̷ x+ڇ{bۃt9 {@{I7 qgٹlfGrDe ~wP~xUӲ@:;Dfilbϲ/ K}{kEC>9'; <\坔E~YBAFuVҰIC;ݬ w$ { (ecy7~iAGwxP+n+hʗ<{MކV45=&\o\'wvZ'VƧ{1 IDATo+.U)~eǝ2FF3{+.bh2z0s9&FHEÑK OK[*;z+)L޵'/˙/Wۯ:sA 9r091qoC`u͏ nD0wpusկGƼ#'{2\OMѦBg((oRPVӠfOɂhFEs~o-'ݢlwP];~6g췻hx|*5GʷK,+ptss$Tuծ[+MaS lPjDxHZ.:oeTCWPDžRKRd{!UcUfnMNŖ8q:?i(ʘ:"g)W8|^BZ䋜.l|Nt.tCW`KxHm`oxkC ZxV{G?üK Se*+&<|nعoŚ@lgẼ[q?^'c{y̝jn-}[QYsT0c]*[_܍W;д?_f&|g 70#Bv 8{hSRfp l3av?=z #,H뿹Z8}gO=~?כ`%%G.ƌ;YxQs取iWzը4jE(makY}oNw kb]rD_ uɪ^ ڥeT*1o} /s%uY~VΫHZ]h~YZYYX MdT8x{ؗˋ1<Ŝl6.:5:]#oW7Oo'3̡Q~65'NU%xGwW!=*2:JCRDH1)2*CX.\ڽ{ieRRO]CJQYEUsUgUobִs+Es\VthCvVj.+J /7V+YjחZeʼqYGVI"o4^+_ciz!Ro5W*Xjyh f_# { g7Gvs?z(&9G;u-軷#r܌`%#>{voCnD޹٫1)~ v|Úq=z5͍yVf7D8{bXxm% Ǯ܌u;6V4fURTTQ5X>437Httxx]Ú;q,'~}P4%ʯu#QOn,Qٲ$¡"n]={5ev´[~TYRꤲr?[L3ՠ+ڱK_p_cDP'QAl۾ڵg͙i}-+惩{ԣ?<*(,}@s9:^at<_I&M~|7E) jn;h;"!>xOM I̚`t۱kN>68G)r6>B.AF?ըmWT_s5lD.=~!§W[r1E;;wuž\*Y;6l|eYQw^h<Ȼ_ѹv2ZM?a|TRƪ IM*Pb}cgLS>1PG,\p&po44w[m-p B_1qW~G\^:v&q\<8iy-1a *'߇)]L,]:;eʉgl_`װz"P]>X1 3lBD(0/4B!*?O\&u!BBG8Û B IܗB!P(F!B8?##B!,{B!ӏ2bjD!B*W,FB!d^ˈB!02"B!!BFF7B!zJd| B!2FFB!Ԉ2"BF!B)02"BʨZw ܬ\T7cFB+EbeB8+T*0`qBDRF$*YfbJ>}Z @cL]`ffnk@ϣaB!TZ(rӂyE H̕N.7]+MLdXE9b*@!T@P:2dg:<F󼳋[NvTfzT(دBU*2j'W(KSZXbU B_ #HE 0i(6z_!@HE*<^TH)z_!8229@G4ّ_޶\^,/ |# "c/{s' 2`bѻg{~yɑWnlB{gQS6&8){HM-Dܸ۷-X~o?6~[G9;37=ǚa)woѲ-u!* &FF#<{#^sܴLp96や=,]:_7&eN>1ugŏ\M(B9qjk'g[39-[wUc7yQ&[;9;(HnXoԕoZ989YӸ nj %8)E%e_=0u_#J^Az?ت["OoKmxBx5^k7r5-]ܲQ!P%$5?-]͒> ˽%ڄu06#&VrjzJ 2m>TakJ6A\{Zܣ7j҉ň9ny @=nàQ:9q`dj5nw pp#Iї&vƳQ%eż;,?ĺy>c}Ltq"r55 KfrBP~G \j2̌!*L|cFq,0iþKS Sَ.ͻ܌IgJF ,3|G$h$aT<ƣx7-cVv 7G3ٷiۉkgGkdK7$gh1z6PV' 9>m{i歛Du^}OL-t^O'-bq_G/|T"W︑.FSkN_QMV37j dp_[ ڏO J=tUmq,X:ԛg7zlRJz9s 1q鷪K ?}߹ =|xWo>[zͅӻ8W}ZLbZ(}C_<[s,ƞM.ݏM G- '.9#G 2+f=G[!Nװ]YuF[ e?#c?Ҫ²Dp_*\e]*4桭M,܃}w]*=QkhґE#~ZX<+5eE۱0pt@.xg RNm6)!%ߜ: bNOJb##3݇7[R[6})q^NS.gvȬRh\`AqXsu7t+]i}& x2nذc&5[)S;R`uXRhˍƴo[vݳSȲ˺}~KG ]V]3bk?m^~EiN7LJ;; T{;2e1^Ru?m<&!ZxÀc\IIwy Iwn]%8-+Po[vEܴIqﶬyeS([U~.?NڼPW;e5 ?-p@:;Dfie_Q70u_ rqRiw׊Z| &f%G6^s'x> "wg\Hcݛ4m×"M}=%N2Օ{ X65 (1/CJ1u nCPugEkC"X8n( K{~K)'_cA3=w{ k'cKG7wG}ad8֠/} 戉cF<4I~إy_<"n2w&h2z0s9&F77Uڕ ;&72o`*bțh؝|ɯGoN3ԵQH`W"HM87 !0:]h^;歵k[)ZW!p[GA~/j.-=< /e7-J:"g$;3 @HLxHm"ȁslV 9{G{NàvX]`U(SrXzIWl=p1*>S#Q"@cd[a)jwtR$ [Z+N^OǨS6fҴ?_fd {呈Ofe_g/ϨH[sT٪I,է܁/i|kXg[޲3WXQ*GL~ /<;6{=]ev(1#u0+L|×%d% IiLGBU}Xl$DڂX@-((1ksW5yÇ>ptp j7y\( ^v(X;Kiԣh$-w$c,\!x"+!Ts\Mp ^_~U4W+q]G;ǂ$ͪEwRrը#k <0 yP(,Lϫdfy07kQƒג;tutaNJ>Bh2gM=eJ]LG&f \վ= S] pǓIU i`J,;b;yyHӣ"S $&EFeH=k4wpqK+8&$=uPvЮYqI7ZZ)W!/#gό3Hz3# ]G\=zؚRo悙0oZ}KX FФ8t@^\"o6tTۈ5>Z+MlLhNr$oo޷+כibk\9瓍~a^gFӁ!"0ΩY ~maɱ9.njӓs}䝽<$8͝f+ClWQRc~zӍ:agۧ&Gv'amBUɏ%6w7OdP;W{q=G7e&[:CrXsleu=e=Nκ]]r¡le>UF)p!PU#3Γoybw'sWmdBf>t-No3iY[9`jͰL^v֪O;p-2򩠰vmVdR?n޾`Ѵ#HdЮ?1n9kRG[OSs}ޛ/{ל˥_%)*ޣnZz, & K'_{9a @j؈ow!dOkekZGTGӠasfoszʽ`j6y;0-;i<nAu4rnS =NBqVO 8w}ӟs-lB ѺEV~:|f>V.>!ݵ"H}@u_=o4n58c{לTI}l8qx^S&l}`\&(,}<-'Ж/QDac @†\kESAޭ|J}{R0|Z(BoY5RD`~QA͟s*#z`纃u]R7D%go=]u_!mh 2<͎=χbwɍ8czRpp^sV{וQG+x݅zدB'$Ft iY-˔ISbO ޕr q5II`~B2ͪF۠HCn0}󆝝]i)دB*ubcx |&bBN~B졡g!xبaz>!X*25u:Lc=+!!'J22bpD!zII$ށGQ*2$'^~B!rju q)I<R+ttvB!2H' :V"HB!^(H T:!B(V`0ʈB! a] BtbȈc!BQd8ʈB!*ȈB!!B)!BU52p#B!*!BMB!ST32 FO្'#mae"BadD!B/%6W ڲij^lȬw;Хؾ\DlUz>{6t?6%G+X4hj;zew%gAfެ爑}hɯルqNAl˛=6)CS{=ZHxqF} @;9{ͦ~: vB'2cma5``+ocAQ`gČ1֪~ڼbҷe9'; <\坔݉r8O )έeo &f%G6^srrDe1mzۖ?m2x!?nBE;("NG!W#*;zSMɌ& 3'cRn1jTpL]z1qoC` م IDATu͏ MBT^Zx^W & x&ra]Z4|!܊ߙT!-&{B!PHGFK+[?ݦ+:P1留0C:"g`ǩU @|×%d% Ii˿ƒs4oi;yy V!B  h Դ[@ /[YCn=qGpn_opm&U<Ն,d=eSe45'#& ш)t2B)c@!BU"jA4߾{=lhvP{4:C[ Lx1ޚ7%HlC;ޗٻ!FFEZQ5Lڜ Ev8#?ؑB1;;vDDvvvAAAAAZbm 2EBqBlll,-d2YM#QAz2X/HV'BrG---98j}QݻձS. E1OKKennUØS 5{!B/jdQݻk׮fff ϑ?E]B|^^X;D*V+1^(|e}] 8^"z##t:̋/ubqDq/j0`?"(@B~Fƪ!(J<ͥ Ў(}͟{2g[۳y܏(9e͔P'T9t5(#Szƚs `jf0K4TVUu|et] BH˕R*I=ʭax`yO".U|WqE8~u7ԵP9_ZP~V\_޼|ߪO?6H$V[3ݬ *K%6>]~u6|hVM^*FB15 SSIM,z0hC&D;}\4zodH-ohjO,7WmXWu3R Q˾}kXV~ Uoj4DQtU3gԠ ة~vtMХ\ݻe[ToW}GiKRՂұsu#tQ?O3H[AЌGY`շFkd ߵa9e3:Z*̅wBSջ1&RtcIeӸ+_YޒS21zgFNӝ nW+P5-Ku&#m&-Lr'fy n.AjLiKLll ݳ척n^ <[m[=oB@ {'FV.` H8dE71bt[!M%P2ƈ!Ky!gjG30ohmm~'YEs av֜ŋߍx5#9 l~o7 ͉~#c̜HՉn^7j̨ GyNŹYqs vnXh[l;nUæ/h7964u7s& ,XhG ̟?aK^"Tac%Y@sy!o٠yo)@wQLA^ o~[#Ҍ<}/mڼҭ{0O%_+zXm"D[0Q҇7M-)o1IEB$Q&Sf,#тMO2ӷ efyhH ?i%hjޤ'ːsP BܭQh?^Ѷw [`wR #C_}]B_nlm(ӗd-$Vߙ%+Vd_m1}~' ] \ILaāT*eSϛ_jARV 0(iǣ4{Cgi9 )%2 sW7uء=tlȜ}Oa%`2'}<$oS2mm1SB-ĸO 鱬dpEw3uһo|-ZfRrv$?3K ,\@+C}H9 Яh|O.t*{ƈBY27Nn$?9w/1/} *9JdRѨ5> 0 a!dqGG]9t&fwۣ>g)GK %<׷9jsjS99}I j*igΘ-#?o޼s-B(2^V&2R N[Xy]B_{aɡUI l$8Cv~?"LO ̕f!9v>le~tw^dۻŹԤdP ƷeJ01" 'oV@8 T y{J>g<^H-ۢ{o'Nj7â(LJ04"j4ȻHm_@_oiٺsP=޹h1?G#iAl&^8tzy;蒮?V\-^<9'=PץP$PQ\f_koob ۵յsMlx`Y1\^<߇3us!_f<Ώ_kY/4 ,NTmݗjΝO5IM 4y[^VW8_mt:lJ1u_r !@NGgZxt:(379B(7B|yjEKm/eD!T2Ac4a%?Y5lFr~M`fqBW4ᙝgks'+ 9MM7q`l!̠P$C3MF}mҏwY3ʛ$/<ј[8ulS9)ucq~ZzDR{sKw珓'86uO;nkNdC i3UebcRJBB8u3Ba6S>-ZՌy5:cip׿T.^\SFB)3NuM@PJ^03߻wo׮]͟ClT~qAGa4zӄ\q?kޞ}ǺoW۷<<?-VL&>3 01!{z׫㽪u538QyTs4 )U9Ez oT"!E"h8B!FLN333KMMGsj)=))R=/A)Ou:1Bt9ĈB>'\N 2F_'Je9mOͦG$B!tyiHWo# a(/BoX?ǔ*5ǁVqëfFB ռ3vvvvJyr"_`^}(Q1dmmUCǛY7ٴX wٻ !y 俾 c:E&jA$=W#7d!P=ˎ]@ RSSbsrT^'_窙J>K?]XZZ:;;kFP|n4C862/ϾrBSey*`!y 'H\LBO-l1/"/c"TZF".ή.px%R=[*/X;Y4>JBZ HuOL>yӨ.H$ueWW B腁!B##B!ȈB!02"B!!B##B!ǑﻍB!N>!BխȈ!BOBhVIK =bJ==o+C9#T*XKSvKB%5 sViP#RT+'gi>`-1.LJL033w.v vKB&0xܬXu!D"13W::ܸvE071aBQ0 U2v.n9ٙRv} uocO5j'WRb)-,R*Bڈe#dA2@8a'R>J6B=X8X) Tytn".rOB=^w1˼}|P8@1SJjwiveǚ ʃ_eި_)5ܷK11"T#\[ɴcFz{՝R׎z)&"r_䢽u)ojjKr#&=xrzC [G9;37=:+H~3XU+a#ÝE^skB:UehS KtV'<\ڶ%w'go?lI+A>xLoNw c?!}0+A׽YPÕW"G ߟJWrc-CJ#g͝ɞu r9y.w;O*h7hnw~߅\v{_I.Dbwg_߂W-p_/Dhner9Gb|4liSXf\CXWi=88Ha]zx3K?9q֌.=<,m ,jiw><*+@:pT$w­ԭg 8a k׹;%ܯYם!q2V7rI4X8>ח:QbmzjjD 7_nWw1d[ \Ǯ2 ʍ܏Z^Uvܛx IDAT3qOoAŸG|ZD&nt'ræ/:>0JVCª߰Q̚E l$FҦI)*7"K`SlWwFoc凜"=)w[ tjv 1yWdŗyO}e/˻o)*{Jfq[/yx/b|TKiRm_CN)aݿoyWЊ١>~W4nuU\V<ߵGcΕ+/cJ˥.Ta̪՗=&}2P .Bn5ʓcNz [Aˑe"ȃÒeMm H%Ÿp›t Dٹzy{UrT??ƒq|kFٔ'=㱹og"\q}&șK DvzBu%D4O%f17)1%>$hyc2Ƶc H9<޻ o^ˆyZr_{=2'}xϚ-xY>'\oߕ#5޵s =j1 JJS4qŕ=&|I_ s5T\ppmk KNdP$>]{?#ퟥ'd1}|q\p#xcYʒS[gCC-V-S? y5$3V'sHsɒ.ϼ7)>[pvV=kc|n5!ꁣc?yy&oWn5M(=S? 7ooתlk\Qs'n({7L.qTƐ*[1RZ#2%VɟY>OCmr,#_f@,#ezP:*!B-2YI:W'6;12•0}Iu qv59$\\[ sŋV2H1Ҏ{.gh)c`e̞m!LfZDɼO^D {g(^l{U tz1-;9ɅDkkK1#Ef8I(ęRP{qF!v`k:vf[Mc9 I!_!`97(*Ҁ΅N7&:aK{kZBnO &lo4Ss2e1}Sf'Z;ho}}Ko}ă4j?Jrj[Iw?Aq|lAE6/6Du3ryUda5V'Gt}GPtVpL!&.eƞ:w'jgsvytݘDVh5ZYǛ.ǚ#(_UɽW,u#,, D;Q_rHガ\C IS2p);{|d`W-䢾q*MH]}<]ċ"s9;yB|׌6zEEvB&֥G hVTr-MrP}4O_F#?E+f]&͠'& T.dtv6{g"_ʃelE48mOgzodvBFecR nŤ җ;|':Q+o)o7|s}ddI~Â!~x /XprnܬqF(C}m-DzЇ94\ Ԃ]!\=L~<Ȟ\5~ǻW?5 ޲+s̼j=ȣ5ēx@^4"0#k1A~F9g) >}?o9Yleꕶ 4a';ouGmi5x@Nx<؉fi\FŮo퉊K-mg?)^`! ϾCqZ޽o@( qrEA᾵[߁gWXȺKa*kVehܪ)\q́=n} ΃fvA'bQɬ 5xaBFܚW p?~YrU oP8Ry͊M\+ٿˀ-2Bt%Kl?qծ 9Dz3v3%۰򈖣DR[K,ϐQ01+c#&~חvդzN?.k)&3;?mEFA5 |gƭ~Y@=zώr t`_?OKfOS5)O|v >^!p p"im۹\GK흃"!)gϕNJCZI.dg-Z5#Vrz'b~{=>qOrGxuvڰzg%TQ{9K߰ku{̈*&-9r,E2/2tH>O(blY[:z$^:OfZEJ0'/Q?֡]\yXCQaAAA~D箘rם]x~~ <|40C^P d4]q#k<>Gy7wy}ăkZѫὌ78]Bx~4픗Gddo^_RZVTTh0q1&I#," !$B|m;d|aШ FhH2Jy䃟riY8hM)(aYL+{z~͟6m$B$ð6RnfXKGkW8;q!ɢV ^z5,1uvppX,na!Nˣz*LX\K\A΋E4&f;ѿl}\|dQ{:Z\ttcڷs/3q˧.ə3^8ҙ~$) X#S4-Ӈ2ullܝظ7oݸyNl\ll\Yu92$I6TUUih4 ܜO Hsclc,͍ch$?o HY =8 qD"t-7}e!%yRżs7pQ`p2Up{Wp=t^];LabCcm;d-fܼ-NϚlg^Yav'clq˱;[]=vqwvڊ nZڍ72Yppp~l'߸y3--,KD#h4FFFW$f}j(띹 ]p鯟y˓ FR8?z.i.7!Ih܈,j)daPLd|BB -(袻}'m,5 =hZ'Hv$" 3f|}77uN_SõS_{棽9\3u291 R?41-8Cr|o1uJ9q5>kW~6WoشJqK';Ӛ}^s6fT$BH( $BJޒs*h{*JRkhhhTTTVvFi! *`a 0& DYjbeqtH6&&q!VA|0k#lU&ǧA>m:P`uR| 0XE\hg KRV\}&&: -_#&/R2sn #EehhMxz$Mv+w˙QݚٹlZB a A6L:&-> 2^ NϚlgx1e6TOMS2~u!|O$$X_s/{!g;0j;$!i4vҖg9ڝxތ.*SJUѳ猬oz |eg*z)R*Y928\|qw_+@:pT$w­ԭg m066<3hk~ E`4҉ſU |!sRP7zA[i`)կ/YO /[:Q1[)% |xU>O'qq?\M-!O/>;S'+K{ Acš_ \abج$#wy(G>]rͯ3^\ b^32ɘ iK;qKZ$q>WwmV@;ZtuuR3(77BίQ}ھM,(CCoR(L͚[_gK<tjtF.{ЁGD֣lVFG?6s7.=$DQ([DRoɪ !3>ֵ|:R㓱C4?ؗ\q'-j7KZmX-E b̫ i'禐noR$EGz"D9!볯Nrg$m[~g#ע.spQ$3.ǞYr}Ϙ)/iBjHHֻ #`-ff3^miEMqV 9cYQ-Y@t:(yР~ )~,4Dܩs w3K޺/ƣ12QKu (+\qBa#: ّ5IقކԃkV(\ Tt&6$Ъ4;hƲ#CoWlLv?n˳I: `w ,OWQPؤ/IPe^Ke6eeYeYDbD"3 K?DnIv̻xug!)@=*>! ɫ7D 7c@N͟rIP&ʬVKkRP(M"?!Đeɜ-¥hCo&C]|w7M*+;9"SЙz `ƧbTTOH)~4ACx!EyR|0hrWUrݘףe,_G0[CTj4>25Hլ^NBhpQbb4 ȃ\^"=۷mwh2X@ ʚ2 ё^ӧ&&?%4-6֧w=Ux'^ )(Om_ IDATU}5I`H>/A]G07Y#cbRS{p>O \!y!r'jg&mEf?mJkCi`\Ud`'${Q8qHn *Hjcj|*7"*A߉ grX/qsYtzזzmkWg]7w֒ /_^dEQ$-$IIX IZ@p#ܜӈ@$I6 $He T:!N ^|Q=f:clz֨wfXY(G}ӇmS0$eg0&+k_ d;wP5.U61 "4rI* +HJ,9f'V8v R.631I GlN|bcXScJ\*NϞ/p0Rhr.]åA-B)r qљ}3Dj̫i`CtIi?"DP5OM͵v4ЊF``*$Dcf`4i8 3fGb9&3X T }7<@$9:-FVp ؐHⱥ}LNvdf_ ILu)S>\:ѧzNJb XpŜt_7ĝl}VlwDj"Sy.'>ܱKI:bmEHe2ӒVSv1ѲB6;`s* )/Gr:%:=6~YZu J2bR?*iZ ;є(/asqQ)(ZD,\I4Mt:25^o"3 YMM`NDyjK@H+AU=ՐQ#ݽQeQ\TԼgɱԋF`O+JMP8LX}Dlzr& L>/)! K.I{-\X r'M;c^^- bD8 Z$u%SSD*?W(nYp' kJ$h#uDdYn?a^ͬ߶qV5N]ݛf9n-d)LY|EB4ǖs1ȵEױҀ 72$I r;;; oqZi$VT\lvn@H^cJ:XYOčQĢ I\,jmhvf'\j72Ⲥ|2`?Xa6s|︾n)Mw3p_!1%.w!%.=GCuަ2")> C!'<<]k l0o,HdAկ)eyv4ぎXNԴ13%UQrՔS51R8hI5x-N=SQT,.L7@o D<3ɥ idzoبo(^]t;!<SE2O)}H@ aAI!o<7EcoSMXK..Ҭܒ X3֊Y ɉwc">\N.)G+O&\?9l^g_؊U3w"V$f"U/?s'RiSj7$~4.⬌Wmt8`L69 W&%d|f0n^Ҫӳ:UGYnyR2k%JFKHJUINbX (J"k)5+BdZ"]ܝٓ'NK!ҊYHHһCs_; N_/Avw-<:ƭY5'|;b19zR>`"d j0z !$[Kc1dR㓱Ϙ1 -׊ӳ~&ERXX7TV'#7ELjAydrmY ]F0G:8&H D5PE<:XQ"#aĬ1*:&TQOjbَ}KKdAH"=F vg@Q_"_ܥUjV>EN{.獛V|B :2\z%ҪIPaYB[N:IL8tG63nV2r]NJ͝dWfj?] d0[p;\*s,طWeK^ׅ=Fd3lڎ>ӛ VȌ??\Д]$m~Ә>G0~[MofOxd_+F wN-cmMڰeMpyʅ ?C߾9H W~~uMٴUK*b~\zꥃ\F3^-_y~]اA6QWTO_thd1+ŗV DN{9F Pk 4tA [k0cY¿Y}{Ȩ`Xb拧X 3"Iʶ[-< ={o:@g  ]9ۼȈyv}cƽ$;c8V0!X(DX3oe`r|~3.|? o3(Ȫjzmb%n-VF!% *+X&%2J,m8EW!$L?nl0 P#@^ @Vjc05׏B`ez%?{mTnq6bu9dsEO9!H!RWLaQdUi^x윴wR*i6'+ZG$lzdoeizu7[K;Y[B(f) F@f~+ H( hJ?4`aj&)n (ђV$cQOmܚBq(!.:ɫN~{w51Px}a;tGL9Ϥ qe͗E1`s paHwh,{͐`TʱlP!dJZmeBbbph#B!o= #AAs\\ðA$aO"$H HeccL߷ex}}z<y GssssqqV*asID 9p,rҼww{{#mGocl8A^F0<eYV'$:R7W} aER*JIjln;|j?;\߯\09.@'{ڣvfvޏlyю3Looo_ggL͛*ooʻCcs] ]ʼn:X};1cgOQ5NApF0Rzht@~0" HIj pI^kFlޥ{Χj3mX4nZ̋t-].՛yhck4YYٽ{ suuJR5444***+;[tcΦJTvD( %"DQ[cδOP^%l0:#atM6r>Ք[f_/ϮZ$->vTay%;|b'ђ.TEc?Zc"\ᝁut;xxz:Jk7M)U4sN.%{. 7.j;oxP Zq0`9.;;WPPTMhE)J__߬`Q/gȹ}Î3y:sJP6s?]Tg(i\g;0j;$!i4vҖg9ڝڙJ.ky%]BN_Vbu̼7!߆'tm͏"`ԙJ':WY)R7zAk[gݣ jiF+JN }fӾ Pf|057m]Y8eYgK6|qF,t-Hʽ:Ҍ/|~w7_O!K?N !1 p?|Jz^Z"G^"EYu?Fg!3ǝnXy[OL+|nި )CֹJk@3b[ ܢr=H"K:yFjAc܋/?n>ĭ[0q¶$毵[ŧ }W5qwȕRdcԜ@jTSoMҎ~ qtgN6K| Q+)r,J$k$ ƘaX,Ú#gJ.}~ iک mV]IzO*xZ*5eV#V I^9\<׼C,ZtWu+Sp魛7w7YɊ.3ߩڶ|W{+7%Cf*==j򌊉)9o- ?F>=Y[ۭ!?̋h,℀: گ 8XeOA e.ςp)!= >Y=>?sT ./bfo%bsiab]ivpR B5R:^8@"IkA$:C?:D9v~'7'B4i#($$Vg1`&iI` {G%ҫ tCqAu:cl9QW)eʌV蛾^6EE-O]aI=s9 t ^V6j$sB7ҹ _Ou(G|+@b]Hɱ꒿$3=:QEMlSݻ38xeFǤm(w?/ȏlA]/uE.{rlT#kD aN9/Tٷr^ @RW͜{ʗB@H|\ÚfM1@Żw_V?iKmaⲘ>l&Uc&z_|Fo;1P'y'AӴN,ϯzĺNiva \uޑ%tEyg{e;rŌH@эM, p@HBBĀ1_b0DGCfzc)i7j#\PrCFtjIFm[2ʘ{q;gi]!F@?_Q"{+NDs}BF.=SX5ղs%Ο,͕(/`k?v!א@fvJNST=2HPef2N}C 3B'+UgJ]QS<:&^$WGIJwݩ%­SIl Զ·]5|0 /;!}s٭+[7>=;6P8$T IDATn<5rLW{~f1I r;;pVi&::J޾ySm_] D& O"hcKsB{"Xi@:/Sgf1h>#MQ{5k/::n2%]NHUJbQc[2+-NrY )Z Zb=DG]yT|;ݙKo( uqf$qY0 si-aOq }8%fpF" e0W&+@qeo$I9L3BjF7A3{7 Ʌo`Ⱥ<8fZ,V-$64&ȕԥ$yzxHvWm%>mn||""̽ pq̾mg^NjM!pvvJM20eff֋]=<9$ԉ%qUE,u7")%VIR$A8!pDBc5~#(#F Nk u ؆{pFc;p39o<&鹨Vr{iڠ.2XnGԄ:v=G-?}rwoO(Gغ`SU"1`H"zw.zlmڟ͹T+ y-  F1F0U:P0m"bEIH@?؛y\'l"oQlRm*[ m$~@ SkwN:]nn*`'-5cU[/?zCKV!9> ?ϿȤRggWT*\nZ26 j:==Y*4X,YjevUp-$CڪB}и34+ (a+ur}<87W]qqqII)b @W"[!E/DTGxOI5JΦKdB#y_.Hj $r7, r]XO ~[k~췉-  `9E!Qg0FFBF0q$Io eY}2Z)g/{;AKށ]'^B ~^_ߖ(3ȭLw. ~r}u`l佭]7XkFRUDΕk58jGsi.tcQtzwo>[ q7Ϡ g~ϿV G9ya$voEt(sn//038 {\q(zNyIslN,5qa+I޾|?(FcyjjVn}L~A&5>I_Y  u 쿔]XVI>{cLWX?{Uхܲ}7-Hiқ( v"H)M@ҫHoK0t!=!{&1@6H9ΜiiL s \YmR9GK#>Z5%L L!YX,rvv ځ"ISBȢy;W3Nb z ((s=G0B;N @V CEu\~槷8i0n??@uнW t~nQ+bN#ILQ͇nFP_&Lm*1fxix`+'Jo<ghdN;ֵI?d }Ķ~D"ͨa>/ [ EY9{hcE#hc_|k?d+~{A/M^2}͛ڿpK9'N%skӰA;ӑRC985'Mޠ=nx[+.捑45e=뗽]g/|7|8¹9 MɿyjfOkjKeoܼժUKPho Z͈5u{I:ݻ[j3~@3I>(8h!AyDuy)^wZ0|L>\Ϻ _a2RK:jqM!'(:E6i=Ma4xޟIX?ݶӈ?O\$|3?NO߄HVq){@xp-oQǓW)<1.K7<ݵKlM׀V]Ȥĥ`; BN! æ|vpJ죊OPYP܏O`]{H0&45aPX{hCʼ=p0UDkԨX= yv]C~5ܛz/ʱʦTOL5딛K1;+4_)0]w>NvtA!q *6;p\ V  ɱ)9ʋoYcsUm|ᜲ),!RD{/ZUpHٴ0=.?1\ggZ?O+K˂BL` e'u!_/ ZSz#F-1 X^#4݌4Ӽm<|_gMZC"rk$ r6q5zpޮ$ĸ\ %%+-=-w Sjp}%rU e^6j?bmِ:wiI>[ՉOOʤ~<K.I0ƨX{KG7b#"lLLlpp#: |9)V+!gO9__Cˣ.^9>;* jMΕ}|z¹_wHdA@dH^tXI @Y.d5t~EC1&1>I<Uq|#;jdie<fO.<@ B'qtt  Hq>˱ r,1..)vvr24 ~\0; o&Fϻ>75g2ٜv]Ţ(ei$\]\bbbu:Zt,"!,-tJ26n(Ȅ);S6ñS{jt9'+OJɣp+pz;ʼn 2_'͎OTۆY q~=Ǣ}i;=`8ng$mG1{cf!*pi[v./ k`cCyx* (R(چT;+ s%;?%;WzGRB_&pNm}/sh?avHrW%ߡdʬ2d1 @=%x =˪qz؛}m$SƗ LZWEj]QK5:[-O1sgiFP Jr@*B9K!Iʋ)Un!Q@Ir=gzg/0C؛1 嘤#Ŵ ]wǼS0lAd>]\1_rMJnqAi0W9uA l,d^v 1ny[GJerLVe@, p)z VػҠ&6ֈOVE@RY8@I $ e$ޕb"ڿH]gK h\ޑR?́fTVcGD-] MחlS {O*`2 u}n{]ƈt$h?A25jhFWC.zMk+I2)&HPh|P$)U7'%߰wCB.ɺ}LNxp%cwLi-ӧڼiӶ6_[D}OqAVlai1_ ^{Йm@u챻ԀOJYuB7q1ٶ[!̪c-;1MQ s@y]7?Ld1vfOP瀠Dr[7݆IFB<8\!k..9͇넟n3X]M{+[]qV3 RP@ k(l RGMvydpV&v e˾?.z .+Rh.M @}&[B-U9'^!ƪtړW9NH,uگ\ {ZyY)+L$)(B{k3g)U /yQ̿$A6loAi{2n1C.Ǵپ9>> =GOJّLqGSʃ7)"k R?gpiFZ;kKo1{0,-gF}NQg;w,`XMTFBkܰ3~ V&@Mi=䆪+#Cfmqx2z;Ȼ [0S @ ${͗aE\ B=Z6CHNx@9N3}[K3z)5`Jb!!<)vNDY(ܺ5)Ɩb@+Nʾ.N@REh_3 7-bUcH[t7qyDUo݌ĄKr=Hwk0ߞ|c ͟Pǰ,dE57%7^ M${J*oUVs]^~A,.$LUw04bjVDHSNϹsGϤHH:tQ 6;.AeӦ V+JA!96NvtA!q *6~F H*Wb^8xyW[CS? wMK9w P &ƥ"po Ƀ:QGi hMPEpOf'o&&?wJ-,|CA_?)7u).5LO[[4[ٮ/ aX?rzJ ;-+'3/m]LtF)PF;_D*@s`'wR R& m.G0& NӶ"4 ax\@z $cusa/no&NOvJQEeI- (ƝHHDk]Ƅan3 v0'Dd(*s\3.YDw7"YcR(("(R k~BZىڤ]:,ehؽ2+XYy SՈ[߿3NYC*AJpQȚ W=,4AؼX TL>5y'/zʍu;x|d'Xb?4EQV!D$A)U:.V?eX/s"Orn$DlZB1OQi, %><A)\C}5+ بbEE%*sTa $] J3.L+8OHb]_ z|}[v-}ofuiR@$@AhmnEao[~ku 68$DTpjӛOh.e%j q۾uXwH=uu[0OXukKKz;UsjO|QƧwaeڽ{%^cMiF>oۢk;=:sJ[ܧfu[ĀKո=tiPGAR:@R)7Tnc粘8 $F`MԼlhQ5bAHT@O(jZRD}b @IFڰ8hdyǾbb-D)]_L[}Hκ`sW7g Uµyȶ3&cE+2, dq/5{ N^_HG/r)2R$z@}r}E!9>xzXI @Y.U;^'{}UwD&TQCGJ!KGGAinڭN\+6XV  ӝ\SF9V*#c*?Ys+ٷzzdPeD|$Uмos .?DQGw^ ģuۖ~f+dxyRe&mʾ}O _9to' p@\vԵ&GCbfHhfqu{hNm(>.C`yXc t-s 7y ŜV.:%; IDATD'8qFH WE̊,25эa}QCK}X!iB*&]Q.nr{M!-piԠQYFb̕8L<'>j!!>ݻy|.M[:sw2̓6} FK`_BcAwv]~86c32zG!J9h8z-k@0I.>2%$;!%.{ h،;F+,J9N~NDifCi J:v W#;V#ttv^ BB8|>:Ď@DL铮]oYv\C3w ({)^o.k$A?ܣÛ3Gl\rV򽑫*F8Ab5f&ن<#N8hnZbu?`̀< iiKtiim *USs>= HDuK:ǖ3bXS^@8S8;LX R5'aUs-X1h۠@7.:{zi HZ.$#I ŤԘ)$K-aoS>3$s iE$DJ&a@xYSun]d jϋ]{ʪM|2ƴQW`$A;bZ,!0nRVmӶUU!F:RKC&)0qDR⸇઼CSyrQR^K g65rL,.1SdED;BTLHϕ}JŠg`A%DzmCZBߓ/7(҄ZhZ.>&I9a^' hȝ>]}DsOC(y>S:Z=iN/'ۍƚ&ŸEIzyj Bn.^Uhs* ,e6Wyw{3q  ub sJ9, ml3 STX(Ҕdo~;g}*yXJBK> (7i~=l W+%& ZǜG5q< N~~~{H'OwPJ6j }cr9B3aPԭL&Q"l5P;\ŏLSѰ@(Rah39X B$U^yXW\`%Ct?sԆq)pWtuֱ'g ;#+2vk[MI HY5.S=@`+&uB!i4ev+fD a ՂODg *6vtkoHwG}6iu߷ Y&9鼐 *=oӵOUʅ2¹Ƀt!8Ԣ}9Wt^)#sI=wߘo+`N`>Ѫ)f}wmy*m'z^"&: y- b6bHp)5[w|}ۆZ2_idhJ]R2<׷ݹ&iJvl#7,]sZF6)oDU ]LTV<|n&KitҾZs`kcNp#\lǘ_7 $>>i̚hzAo)2KGHXwl`~*ݔ B.Y,6Rja]i+f?:$o;g:|¼mKX< ]Zղ6i#˻~靤u%LחlWtv.k\֐~ooF/[H`F֭\}jL9a{Vjug: *ѬE/pgmcwN ɹin$sV]GOtpau¡˷Җ/ϑ}Wl8~+S-tj+(t刓f) xY׭{כ.?7`oBղvp" s|ܙgَN| w}NbRqO/;YSveY&n_$_^TJpmWfc)x5q֟,l.9<Ox_.C}9p{T&͵ H<26fW۴'GveW7/[1srw{WvEiJ{ihgT~ԑ2"떃&yV nly5~;vZp±v{Qi–gI}T'߶Uۏ#m1QF]\VbI˶ƂjDW88W:ԕY4r#,e$&t:?l3&g$\G.5 |ee+/m5LyeJ/otaد}lF)7fU_/pj^~_NpKY92bx}.;@~ @~Ss#pv  WFx~NL@kyQ_ݡ7˓Op4:$m۹54JɐH{'Mh)zigAQE,Y0N& |\$`1(CU-U@ja1&Lt{檏޻ޒ0) 6nƸ YD8X<,&YQ#,z#srNC'Ny=>&R^98 up_ Rn͊'UMjY gЛf-fߴ-+|9 l:B%_78\Åa(/lr.bNCQEA48BԽl <#X 8umza d/sAۃABg[mϯ|lܫ % '2][84.nuٻ:ZAYe! %'݊ mgnDEFڰ8hdyǾbb-Di}Cm Ke{ s̺pK|赁-{:u5^_MҮӶt2?.[3g`/cɦb6{ֽu@WfҬx4ep\V H;Ґ~w?WITQlKFEv-*6[-s{GJ0@H͖a•dG؋2Fԥ#!:鬄(/͙\.5Ie*"k2N]d(eln H5cU!U rm׎s׏ᒥcIc[C lgV(^E^ӗ{]j4m!j{Ш^uhA!s$ l@yqc|1!#4y];"y,i"u}q@\C~9>߹/eA4 d8vD?Azn)7fţ$rЅtAf)SgaՕ<rHB:9B^HH{GքęC3TWAB|A)Y_j+A\%kWx 6+i!Ñ4edc \i3XS}a5:!,x*3_y&h7QP߶5 =Vgqdu5?O.$ KA֔yiuxḋ']9{TNJ ku˘t^->OMZ yo@oo@h#E[G߈JWohHZ.6F EbB $B iZ(&a9:F5wEAmP^rRni,_+*7,e"'͡Q9 sy%۪}'?IjsK94+MLIzUԩ( #DPL ?I{wߗ51QZ«8`,jg㣰}k8n" fX7#e*&1Od9GJ_ ݤK> ESY]^j.%|S: Hd4.pdM1)TAsX&úz*x׹+7n\\j| .}Gs c⢮߼_ Hepϴ-D7NT$v6z/>!!1FQA9\'+/;1TfFm`YD"Y79bTXkTѐh5d|E+@.vvBrë֟S{C|6-k*?E3mr]t kƟdK?)Ui0A sl..vYo7# =iC==;ͿMXC>I,@YP f5© A)VVz BFSOZ@W\K+3:DOD 08›#4@.,]~9Ʃy5 G_6Y1g d>8]k29 o l%kb֟@a F+gQrXa̹H nR,H[{82 "ĿSaLސ;_=zÔAG f7jOA`y<bcjVZ~땯?oUpV{8oQ#DXxK0U(!B $Oa;~HoE=?~(╙_yldׇNUkbCh}0CH_K;2;=8unp4b@/0$$%8t1w[$R'wGR'w+?7+ܛl )[4W @A{[I+&%iCpepZdq=YG'<O#M+: EGxmCQ R> &6til1Cԃ3\a3|hds&dMũw^\Ȧ_f=!2^ \tZm=N.|^l%(,S!߃a#PfC,p+S0N8t4<)igWY]=JHgهtrCtdM1tF$@}2~v'={*ס7u2N9e(yMH\a2Q3GV>(yU|.f 6^5oWF3A纬\!;D`}L)TC>ئ` ՂODg *6v]AMOu'p\Y i]v YM$]HAXYZq#ϼBMq l? mF/H z<_l>P $º߻W@H&y9;}l~߿^NE4wMYޅKNgm7O$,a*d 򤳻֯u)]KT}kZ+c] tT)\DeqGcr?>#G}sΣܰ~luE&rTcVreW?WV5ߛX5 P(4+ Vuz $R2/5F\ Ӵ':M+6:5cKtnM+Ղ/ɟ!S:[jiKHԢs^5TOY FJnݻp~VKwLiC5AZ[{!?HfxqHϛb% aOg;dŴ-hԷf>7`oBղvp" s|ܙgَN| w}NbRqO/;YSeY&n_$_^T,jV6?YE\\z? Y3F \?,1E ~Rsgh S01/n&އ9GH3oūgݪ,Wo+?iڝ$IZ~mjrqG] J~r;T .o\q`j70xG]v6lbL&_Tګ}s kߦ= êg_[1sU 6`Qw,Z8P-gJ[~Cus'=l@ÿڛz@zw.D``nEi:k(VݍaHޱ$maAQBzh5OP8U^Z.c@3 mr:ʚ /lC{ ba*Οv/9^asE9GwSWgu(oK?k+_xҮӶwm?}cm @BUx/>е1$DڿsmG74Ɯ1\IA=vOrjct\IQZ;ۭ 'cG_*0՘ۯqHu_ %d-.8č=x'Viu&tj{)! nيc>@Q1 16f,y;/#$ tDQ$`VE[_-ڱw{>\tL Lwf1YX?|{ҧѩW(^Aׯ{6;MR6j_uq[k ihtl#l Ee`ecʋk giNceI߭Op6#4#ށށZĠ]>?}3uuv׹K? så'#KR#'el,׎ݾ]*2J\C~9>߹/eAwBU팍͸F#R.2vQoZ9db+\TPv{7]2nٽ)R.).l\~obv2zƈsbHL@$M :AͭQ7ܹ:5Ay)JѴbVRUnvWYD8QO/+V;եG!`Ƥ>ۿZ:lD9>͛6N LhP6;EEQǙr1rGQ21Gq _)jlkaikk!|i"^ڲ?5S^;KmqtM%K~3e6^ \ƍ7i <ߟ`TFVesmX/uhЎ+Zk}ni;s#&+z#lrȱthRʜi!w=-v5QیkJ8+bMA޼_ ȴ~:mOoK2?va f7Q>AKem12EϺ iR 4>qXm+[ LD!miGd\.$avt|ozc?x*=c4΄,5?0|Bn@e1id485;+KK4)̉xNro7xM\j^XPHhf+F\湭g=]*gttqKӴX,.**6.@W-nb)**H$4MË &E}_ 6Kyh77RuJTJN lp߹kp˕EM/7Z ΁c݇t|.jӗjh]QZ޸v]*6/)@/n;gwQTk33[ɦ7RI K b\ r굋{-׎H)0B &ݙ9)d{xgvΔ3y̙'o fܽfORt8t L8(e"m丫Dq8x=z9o? y]ItSg ij$e3l^+7yuKW{s#&-8TD}ϛo>Fj ՝*xQ{֬[_m4~c,]>qGK]SjEBkincQ ]3<( @0唃}˩5.-o ^|a>]s*d]/?r gZJT0FP?vڙNi!sV9h]m_vqq( [g#d6|ࡖ ?~)]Pb}ŹC6|_KuC<ZeY__s5غ^FLߤyq9KꨛKJYq}Ò6]H{#LyF }e, !hL2Ta$rЏ;WT\OuJ`*-b}Fxû5R^}ڝw^p=sKRTP[UC3&MkPF0)9y>>洎_pujOm#UW=ߏn-fE"FRY,ڤN2?y "_,HFpYuW͎ DJ$o8[GTh aJx/`BSDҒ2h菹iRA@>ndHRAkk#6i]$#,2M#gK5} ǯHu(+߿ꦕWTE\Ѐa}fVR`_rB),++|bmEo1zuST_Cr* hOEJy¥Kx8Q4RBAoK ,y2^r j n8q@ b@p SopkNv86HFj:$ ۜ)uIQ .4WBU3 AYk!%WiQc}~OՇnە&-yĿ?칽2`Q테ϴŷsǍ\:t#R y]"PHw Q1ú}S&By]|}y:<,ů)Lc$˓7Nņ o2iBü$*m믍k7g;Psm&Y5kVd938"ܡezO\P߯*9.zkOϷ!ԟ5?(#te<g^-?y, Q цS`QE^ F#q?2"Pm LSMܬGl=k3 * "Ppsh6YnQ)ݯօK5Z xS8iK(!ԏ,MCT|S+-`)8tF;-PJ]<^Ӄ#Q'Q#!o1 #bU'+ϐqSc呯(NqFrz2E/K6?DrW>BWz5RSMU}UH)4 gк4:Gx9F6թW v:Q*:Jቕ Q#kӚcn79ɕ/$K7n $=^'v=PûDE룁ðD=jʐw gp4BN=s6C߹vR )~~}:?'1QpJJ,y]'.(_6knMch\[ BXB@Den?UotmfBW<==r Jda!ֻ+(RJM&h4icaDW^{⼈↿/xtɨebF_rUiGU q{^XZ_]ڐQ,9U^ׄ,s#@Y[᷿5('fFHڝ]<=>yE޸їTɷO/]*^]ﳕ+ _/FZtgE'8_oPoF'ޘ" uH3ʗȐ2{|ào{2c?k =|=Z~'-ϭ`|~Q͸﹇Cm_5ݰjZO_Z݊a⤿([j`Vʆ90eu^L]VJɷ Eϩ9cE^R^\_OełSia#"IpYcYN"W+(ӇOV2 XD`]o/&ڽ.5uAsj5An֣2^,3qRZBhBKRXUvV1[8z,\ huZfm7~/vN9牼8GNge)4,Wu~k_ې2qB $*.2"( V"Dd8:'Ui].7L޿1%<+ev|Y٧~ٞR[ݣuڛN{[BK0~TW/Z#J5;8agY*i"ǓHIDATS YE曺>gZC@`5`"n[h黫jC(QhAQ~=\ ׿q,jԝ$Qkf.*ucy1yQ)SNz.ָ.x񅆕tw ~ ,We>jՓ*-R}HZBЖIkg:E!PdB!!BCFB! Or!BCRuDھ!B1Bs?8ydQ7!B96*cd2FVUR'!#@O.}ZRiZ\ΐV8!B]:DQ4ƺ Bͅ#Dl1PX___QQ9($p($B!ڋDzbJjZ윜ZƱO<1ZbB!teaͭI(Kv&JLG!(U*pك5 hGB!,,ˊICFQ#B+01jQ/ `/#B@k;r7?к WMB  !#ir&eD]6!"?xX[~*@Μ*b\qZViD2eAt̎-f^%J!tq`5"OW$ )93/*Zwl_Z~y$Lm?" 'd܂VD_{]kg'Nj"VO9]Tk=gM7"yG ]]'ЊZc%Pc}kf$j lNQQƌBG֯9lDžЊGO/7DO>6L7BBFB}!/#O ea8o PY[suqQWX0hʮrNjiͼsET$*gMg.<`,|P7XWi9eJFۛylail.RSr4y5:t4c1҆#=i;܋mRF{j8Zr*i}ET-7Bo4r8X!j|Ex'Y!ag+nDe :#FSq`$ /_cfeFLO 4 v$6u3ZQNn$w""yyzxznj60G`DwAҒaNT*UJJ5 witn^|t P߇!bbٜ2}x(xFWe)}( Z_?%v'Ҁ`_Rw@X|}d-jQτGl[֮ݖ^%bg8wƽ(T`3 ( Tlʝ6` |Mi;6R#߉F,L_}t6O#Ɯm(RbZR voNACGQA ?ͯP*t0 VG9n8/%Td+u!aC:l,E̸- #=ġm'On9a9LfM+ fyE%Έ 9̬(OB.CmCFfpOu Bu g XPBȑA\ce'"XSJ(x ٖG-*MKLݽ&{܌R3S2%nrR_c:+Sӻ,ctzw6=!n$ Hu*N4@P/>QdSoF9!\5_FEJyYAAs!m$̭ To2[*Ӷo Ƒ>JEUv D"ah6YDZr_j k qZ`cp\tJ7is2)۴fNYB+Kb2 'u<a%R K "R ״o!#♳gDv>[T6!KKztceYǾKB@sC!S[@G?Qb6Yxcy,HbJiN[|lYh?]m5 `VKVAFvx„UH):<'!#0 `#.&*gȸn>[BEq5= !d=v 7dSKd}_"* "nm!\C> 5jNVc#xۻ%OD+@(J^t:muu5cB!tE]byENu4aOz9S(*R&B!6 B]*舢H)'4LFXWj4Uޞ:ZۄG!Br`ؓGL&j^^'_p7Bb B!"d,@!B ߘF!Bm26$KG_B!BH$mȴ5Zma~>F!B6^,WktQ#ޑR3 !BhH8Fg6u:}Dk/cchV5U/"B L _[S=^F 3 !BciB!AԈeD!B]!Bu2hB!EB!eȈB!!BCFB!!#B!!Bax٢vrG+Bm9W!#m(9zᓓPùxVe>痏^}w~g~̷n^RG4Y͗UpVaB)ɔdNϠΎs'dW-wW(𸺖gy{c pn3+ }z(r\Uߤ[lzxfw__G42Jwo__jDoB+6d$Gou^y"}Yw|公4-HG=Gv m}d rX5/7.3Z<OV+p;xοGye6ŋ[h+pa_g҉?%wJݺ])9e O^tF@珼qWޛВ_xrkoUnkEkCjI-h|c&Ϳ8}c]8lHKvcym]6U5?nU禽Ҝ hů>NKGrXBhilfh,)^a9vm~\ط~o[qsBFfU .lY]{vMx笅ޥMoq K7.{P5_Yr#K{ JO o:El齛Yiļy}z{,d5gS.+R)Y_rJä&"s30 6׶ϽsNZY{p% ^뮄S[!oHk֦4;;y+i ٪%=Q9;HO3NLkr!  Ꙁ`I_ f~ @Lw[QJ"Bt4?qO ְv<6,yǾyE Ru~ωX2VP!2NE\,0ѡm4up{\8w@` ڼ;/|a o'ڿ[ a_*s{ ze[A]i5D6ۡnC*{%*ajMS !b^ʈ !n(Psެxwtxgҏ|ऽ|QnAHELsdO匝r#cI6Q}jUB ϙ z f)>-fT$*IDXLp =}4DM偟~/lۧ g4 iPR>AlMnCɰ>A\yfzjvTuz侃eNXzXt~JKwx-yU]D=t'_~Zٝ{NvEGQvb߇)*kѭu҂]vZ.\SfFp^ζu„}"O%XBh 7h$ʄy Ǥ}zX[|>W9M|*y\۷~W 2ьf׷!{4{¸&?û`pwXb="wPdv_H˪ c"$W%Μs L)IiurXo SH/N<|Y#5jbPvv;:AN+]@S6)'!/;aCwq>)@ViKTئ4٬WԽn!IW6|h?$ʅB)Dl|q%r?,~EiO<.[UՀ6(o&v*b I9;1og#`wVWG]-v1sxD"%}j6 qd7傒M\\Έ#Uy,_痿lLb} EE0 p`@EB)OE3PxC_lX%\uM[8qD]{I:X(/'N2uY#<= ,:zXG\2UPW 7Xb` ۝${)B\[$#]-5onnqpI9~N2ݺ&[xګ&؝J[dgWWdZ=BƋ ލOLSH(KXX H )7vFZP1ktnI͡)}U2UE"pʑUI8xNzPio.Y]pp:H+jA[u^գpQGOM Mtu Ē=*@7);,J؋}]D²(B 7 ]DQ:b[ i8Ze7XOz~v@6\Sbb)C;icC ҦFDRDD5U&|", xxz9YIRωG #e8xfȤbf%C%"*FBegRc{2i!E,!2j( 1Z5RLi?8drȱ*TH~wk&'ܤP0н 4}l \im|^ok#onkp >!9P(gM9`qd pp){={nErx pHYs.#.#x?vtIME 8)vtEXtCommentCreated with GIMPW IDATxw|Tǟ9mn B$tD 6bGQڮb^_˽"XAł([B %$l=ec$$vϞ33g v=` 1PT~F)082֦By ܄IpveNkj5~Y݂SGY'3/ 5F]|NOni~,7BL+A3.Iy3,kVrk'phiT;&,3$G(9M~Y3'g\X#Ps d-ҤOg~@O N}J0B*$x!3Z'e,X R}R*θ-rfEŬ\гnHO E/jFG,J5Ir+BYw43-EU}7yujgYU8"1PF,I9m*5EX3v'k(3kX4¦_E /*Uu-1YZv=ybZYu G0*a`)>.}س Wk g^OYgg7ot- Ayzi+QUBPtVkv~O7ڪUOtWaMl P0m9?W*xQ*ϸ䵀 w*ie x+#€#E`F~B0BcDgVAAJE=yU8 c&0ZNt:Ayr# r1HPAn3B8Ƅ`>'9T.8UdAA ZtoWr`1lQCWZ fa"DDyD?ؾ"q,h*AeU҈HZvgPFF  HBT @%x# ȹ/+5I3$xXF)D1"0(0ƀ1; F}.Gb/ =>DɄ"+9'$w6xN8 \V kzDuPo;QrR(0rKtvB<i)e'K 21uyIKw5ߓ%{8[n={N?"i1FYaiD40,.ctRDDDZZ#G$n1>SSz#yͬfD=|MJFGO$nXXri!(0ʪVR**.ћbȧ[g]6[5g7n6|'5:N:jC3\kXEF3X^q]닾vwF]}vcaũ [JKK}xP?ؚ`j%.)@xQ28 8^o6_)jWvd2N fSI jEQyd 7J*ueh1‹b"y>UQ)ECxIWC=UW%eNj),~ZůqDp:&"#:Bݥe^ FUtݮrW)xVA#gF0K쫎E:sL}}u( !\N^o=zWԹS#k:6ެUFeOJVw){2Gs}o>6H4w빔7_=X_v"7"9.n6rrqζ::-'v?7X%h0|Cû'pꋭ!bw3˞{B-;&D-N.;KBӐzWf&&D8ql/~_bR}UgʝCífrX?ʬnYT)ZMG;1I[Kk޸>OuD^kctT Bݥ};c!+?]ToSKUYPU; !#(6e.?//e}n*?/Lv>IblXbvU@8WJ>UP:UPari4-4wz'S9"e`PShBqOw@3cXAu.Wos1o0т}":CSzu20,gF{NMI~-#rWbWQLSF UUi~-$VTTwLcO-̗xVc/`6MPE=r]nyؕ{#&n%Y#ШTwYʽa< dw_g7  P z͢@CϫzgqK Z^rLQhI:B\[h 0*;C9YI?SO*ys,ԍAZDQ@?=O^@QU5r*)Ւ*ʴrq@-"G^cC3MRՕX_[]IO#H"j XS)@@~1V| p;QE*?o {3𓯬Xs?bhN<0EQb8ޮ Az Rgu.VAam[H^oo9CM|֨ն?KWb0R` 4x=vzI?{=*]X|+m6Q@GZ%  zM4x*PxJJAT.QvThe'zLcOtތwbVAA3VJ>֏gLI5߬{܇7!w[׽Ui'5Y5+Q_߆u>`꬞VA;wBcM~_:ef~N]2Eғˊz|?i/ 'OFGGRz ,[PPh4+%_8ؘ1hy쑩hn'2d @`e ZPKzҰѸFjE+/=fHHE.$)+Z/ߔ|M@pB w|(Go<h_ޓ 'RNu=a`(sfQ`ŧ=6؉~:Y F0KpW&?2oG\ ycSR:o>fHZt KdimGh֨;vʩ<<ǹ8iq1 I2*'u|ǣj(c2#pjiHadψdʇvy3f>NKh8.j +R5E z( y=ebeo=s/'?>AVݫ jPl2n8nI`QIjyҀ5jCeWU!No5<~J V&EeLMu~U@x^t#J厍 5qef)xrlVW'0cxa(#]q99Ts KRM}fU7 ׋ڞ2Ԍ0Uc\fWV#T}8fbf1H2O]E4V}J}֨uzc f`bM4Kmcrb4 Bh{p{`W}.((,-uLBjgB`sQZzN >~tM&}Pk`?h\ Z"H[8,/w8hz< b6 !u9q'GfH0^ׯ\1@ ExxVXFAA <}A`!AABQAG4@/AA.GGA|AAGA䂑||;AAGA’|AB  # E# EJ> \>J>   J>  ( #   J>  g* GAGGABwCADA%A†@оRXܸѓ=pphhm6!$DddLK FDGA.BmwmZxsjO~S\}{klqf ^Ӽ^s.woKlQ`D$y9qGT] 9FcjRjQﲇ;>}A~H:tMI)۽;' ?8i\]X,A %xɒMKKKqb4AoDA'(TKsdȾ}=в\HA/:Qԉ$ BxNԉqj)jȪW(S"bBN=ڶuk]w6on 8ȏ \HFɧ|p}N^}TTiTo.Q'%I/՗DA<<P*ů~Qɲ(8L.Nozo2&z֟qx0v޽yfW}PIo0u&ޤ## ȹA,1 H[v[=s5,̞JtH:>N 8 o.˖-۱c{ou$LzXQkz]yyM vi^~ǟxo#3Ψ{p|@ѣGz'NyI3uΠӺĶӻm{_`qAAPسFed=hΨ :ɨtX{B zevf& v9Ng]It]=V^%AA?CNyG4[|+-$Atz!!!$htYںuɓ'h4=Mԉ:$tAKXYΟ;K &hHE2I'ثW~b*˲j~ڵkL6t\OIZ߁֩SyZ/  ((h>#"|= fX\O/q| lmj9k׮  >\5t2TQh  mV[ş8^78_r+Sq!!! 4tB7ox{ti~To~ A-{C][evJWbf9_l6KҩnT ?i_*w/$J`ӻv  V j9N Wjx3csrr8P5333!!i?CzznѣGAAAJڻ?Oj-^ Җ{<>%߹fltHND^AHӖt=LJiy(:9#G۷o7?^^ 3Lk  m{ xBxג8x^gteʔ)zk~~~ j=ՇPZa=/RjׯZ}_TΝ;?=@x-9My7bAA{DQY&yyzGr`})))/r`G<0p8jmzsFXoݺuz{jg2fΜcǎS!BU:,҃ 4jvN IDAT78(<4Pb:ur=]tYd !$=Ji[VMHHHKK;r }h !&M~' C (n Ty|?tHPqOM7999cƌ+:NOwj2xয়~:==u>}lܸO> vOI>q׼8:Ȱaöm6gΜgy_EEڵknZkN57LLL=6p~!{C7tӌ3>=u>o6K1#<1،ؼcݺu}C=t5p᧍S2JV~)n0 H :'58 P֝4\bccE}۷z'56J)uIh3J> $ EQ$Ф$jTcM<Ə?~LjTըJlEYQ XtAyط@dMT(8m${i6`AMJ_'TMU5U4IL]8}Ai;+y:)])**BqK ^,UYUUUV[˪*+o٤Ȳ 7 z0:KJY[+_Qj|w~QdEկ*~aVgI!5ŔEAi^y%'#n=GUYU|WYvl!e'NDL Җ%< G>Ҽ<Ӗǧ/>Wk1>Y+OQ|aG^X,Q݊AA/fs=>̹+-d\? )Ž-BiQQNN{qu}A% z/1 [7%W~W>!{e + ֘{ !BHHege>+~^V \>鷵Zqa /<[XbA3'rͦ>}n`;,.{~ܾ_xyzO{|~{͇_o/ rsCb+ck9^6~[bak=tOQod{|>_y|>k[7OQ:͙g? +ڿmq/;7o])pKX/'@^9\g]PNn_ޢ}^-;&ۦ# .'ez^3qM[j~?>_.+mUYvݻ;}{,+Em}ޫ0iDu^].y`~҅_-g[o+]Z>8+ݰgGG{y߂}u3z}bhTLȵ!U+xi]SO.XYzr+9wAp~U#2.:-O׻345J#1`1tFOy@-G./4WDmZ??g_3 AYޓ0- sz1vӟ$mV7ŕX̻ RĚ56)EˡGۿ\P7]I:s 3J)T4U'$kɎL<~ǧWDoU=oбc?,VR?U_ۓW,aq}nK4XjfL3 WyXK%kf;k()wydb{ĉC:w/ǿ9}T4$uKuz K]^*;WȱMvV%6cͷ_H[ywe~Ѕ&\r[F$U^3EwNI]ӹys{St}s+lϜ֯˻ݳg%<2!%b'$iYǞO?M81#'2y)F5UUKN*~{oӒҸ]<{w]|| we92.Z).UE#WSEK]|D̾ťd ;~zDDV/HFx?^g6p|_>vf`2,'wl)j?Tسa{ p7 fߧ]"gߙQû vnqf#qMW>]pwu\9?; 7ax]MٓSRحJ~z~zcݳ,n}S:J=Y133nh/8u[a57c%u?;:m˿\ v{MgƜyny͂%'3︿ohS[ \dR'ҜC,)"o[]bg No'$$wWUUE:QDc~EU/ˁ;}NEl^hYAˆ>~?yLVaum;dk~sͥWn8M"|t֤d^U5 ȬI?zlҭ5]!mkMR s{-u2+m {xͱ<yVW~]{wzg '7*$v E[t||Tea?_]yی},ÔX).'A 6Va 5A!i<$my\3$ط454nl==1&Oݻ& ~ߦ^ vOt5W cR3$n/ns<2v叿uG`}ONnOڌ溅nE%]n~k>Ťw~{USTIUQ:Q $ 2M[SW=cC rs/].?,|nݣ?ϐF/G(_c_k&GN=>c~J"8=wy^.Kyvn[Kӫ%{l1npsU)>tLܢ.ԟWw?X0Ņs'θ@KXݿs8of鱈!."?k>G$FMOCm4Y&B^:kS/ٶ.{"u/zk{&]0nْk~sG4{x&1RΆ֟\*OYٺд4{jdt /R^8T&j^ TK+޵pR#&MVAs+]5Ŧ;_<:4wɌW/Y?>{e/<E^]Jmc7c3~ŋ^scj6Ĉ F#x=S**<'ONN8czz-Ǎ3ed`+ _^z_-aPCbq]hnLݺ ;7nfey(Q**[,bX.33bCjm!, : =RwMC+5.7qU7K9 rǡA(||A(Z z W.و  UAA.xGGA , \ت  (   J>  ( #   J>  ( # IAAGGA )' zܔ1Fi_μPR`i(lFH8`4BB 0(!(䯆1 hy-ZK~qaU " W"@3c~Qp"lGF1.hy-Z)q{JKK]қ(RWQktL܎&^rsފ*EsW8q<ϟ~[ظ CEpcZmkՒc_B+̥YY4By¹T>])cV Ҧ%42ڢQ Wrvhy4Cw"\6j*ѲS:=N8,u>n mC!-7TU+ ]/%| pAHo Uw'0.a-zsYb^ELטi)Z?21λq3\ KxlÆkl!4*:6@M4:f Mю,}{᫞ψ34x>3Me?2oW[_װ|3F؍h9z^Pϯim<#g0צw\ :=S#zKX`Zyϭ[mWgޑ=6:XUms{lkO 7VOSbC|7vܽx),CcbLB*7˿]i MFwoԍw m~{BVjm&E/H~h iSc(8g?a={մǯ:1AŵKSge;g'qç?=~=DR6viOi^_'yk-@'?aZOst!1c,Bϩ[my-{gɷ\XIvVW\ Adž-j1ZkߝzIzq^|F;wV:&e_$VgJIN@zA2ΚgS/ ak署do[]/s]=ճ/:\w}lώJ[6_5Pɯ+;J8wWNoIRZO~Sx=ˢo9X,Q>ХaIG{Zu2m#>km&1W |N 2zC?%3ِ9cD>0?o >̝ާƯԱ뻅Vm?$n&L+wn?^XV]h%WOeD=?-UR9KL!nޔn|p*#-(s`L|Uo1Mɦ#ncT.#}鑵.vsNF]23>Ҙ8KLrrge^>uoY#+o7_yC<4fI}& [ 똚H7%O43o[7QkǞ&Mh$mxv IDATǶbo-yjLR= ^%~x t3vvqGWcϊϿ߶cqĽN.-Z/,&g/yy~бZ=LLVb~b..hWgGFVHx)i_/E`us kLcHFV0g<,i仇Iپ? /Mi N鸘ڵ{޲ v̵I)iT'> 1Pwn~G˜ܞ % a:ǎ|N/LIEWP)LW.uw<BOz6u]Tܲj{``R'[o﷒Z9 wK;l/Uz#?u9Aa1rpV7N՗&?D xVvy -rB̫wv[7P#Y`܅^ؼ@ 7>xW_qוo[:t=9Uh<#4w vnqf#gp^"Tk-Qo~ ))}YXbB ݟ7 fߧ]"gfl o\oΙᙻ{֊w $b* |Y}D0E pqmzQYYL޳v}-#;5JZWg_2lhl rIk_:{RLGO[`uز ׿x畱@(+Vl>FICzx׳V Ƅ*7)z' /=i<$my\3$ط45k4#Y]Sӓ}ƺPMez}\1ZJͯ%;Æ؈}|cgN\~,X@)E;tSݺmƶ@'Mř~Klecj.0ª̳uOy׿xFk ֋.,FK\Nzpͯ)XiۊǎzkWxΰ]_kniB3rK3YͿzW,~K ,:)'9Ĕ108{ ۟0"JX}# ucڈ[y< BҠҶ~|Ё},<48.v|/9A1q?൓RDN;-tiG.~'f\DTrRe8&ѫq|B @CV~jy.C~YVe=Stcg8fwppޛ(E{FԠ&vƟhfh%K,aw9?(R|?nvf7bJHڃiQ(]@3=Tmg-l-7_5᳉EYu25#uj\B^mۘ[ 4VMN:%($>,I^$,Ws_ճW q%^[e㰩mPſޫP#^GBMmp ϱjeP8jKE )0,,Qjye9{_Ν8}A;Bi"`izR\HvԁW+- 9s~ $^<9hbJyw$"U3 ʯ}c/BΟ>ysCWC&RzpFFb^Wk{Ȼ'ΣN/^Zl; @跙0}PnUl0a{̠vXMuZ5FȞLTb p]4 IfB@34[ߟJ0 <U][5_X}3oڥ*%1uޯe3; [3]U% 2Lߺ܎x$U>cڝ>[Uf˘*ᚹw3cq̥jVsдDvN/?@rs^EXEI錉E5wuJF$ؿu1Yl-r#3:k=wI[?QWT#6-Z99ԌZîuھei԰( #ѭRu;lX3K3w ZXLaelvģ&>:ҭwgҴcsk]gkk8D[s;wƱ [(l%XYI d}1DփbAؽ Zڟ\u0U^z$zzW᜻}SWk6Pڱ`B߾拎ΊM9|<ŢlfnJZYy'%Db!vih>zCZ/V6|uNXJ1tQvJf \.M<5تD=; d.F"ԴC;gA^Ȱ~PUb_1ޝO,=f# d@g)MZzk|/K1$:ݿгH33Mzo¼NKbn>.z'w |,{ou{[!d&1o8ԷJ/c+! sdլ@WH],As&ݿ۾Xe :j{@Ҿo{n9ԁ¶ChgR6557HѼgrs43ou%3![LcכH'QhŎ6)cG.t#BزKz:f%ɡ$rU~~进 y|kD߈opى)2(=Nz84Fܿ͘ ˇ'Ͻ40ƆQ޾WI,qv Y#] 6N:5GRHc֓&#?Z <&50G {OP;udصoQXF1V}oyuOec57] HO$G@~G19KL ]C$7,b>Hہnit ]}F`E`kyvts Ok{OՎu5yO.5ѻ|a!|waqk k.ݣη?hݣV-\~-sf٬̌‚< ;~ `>P8Jg`lbz(?+3C(wp] `>PT*uZjJVfՔ1j ,,`0 -- 4e+|mU*`0 C5w27Qb0 C``0 ]>`01 4*0 ?Ī˖Fm#BӔfNuLg WK~ yS v :}7c)Q*? \=_rZ|}u̫mW@of 9gl+!#?0Oj/F;~ⱅ\̈́1_N5b5m*'S GwY5)$=*F&qr2˪I0L/&24؆}FAѧ[V'Y}pFoaη-[amlEߝzlS*ѡ'ǥfIb~kﭗp5{2w{9 `su*4ez~ ۶:cUJ )B:yء- B򸨆$`gj:Q7C8Axji⤞|T%nՎɘ26<o48-Wp"ZzlS جs~wz/=8G!U\d< shp@3,'Ua'?'Nz+ƩXֶc T:Q]=;}PU&zܿxe@,g^ፇî}Jz2]zϦFHM:O!Jd,BfsS٩j+cIYwG3dp=kBFla\L*a :\)?wوo\RSG^ ; u|x¨QM-hK5X!MED.gJ}K2_Il!1OSҤiGOm'"&m]+/JXvSϴyoȞ%ʻgۡW4Jk? :!"Za+µ\[aA2LqFmGrBtrT¬ispP(t'=e{ƷyɈ.6hlJ{QT4mQ@YzHZߟ/ۤV\% @'DƳ};!p෺xNz.zE1.,-XmEXkJvnmBTi.;ǻ#O-rooWE_b$)CnPvVV\ B]wˤH$UװO\YitD rts@݇CQ6;m]F*mR\(<\4_˗>ޡVp4l.bƹt2b^R.v1\'ȨO&;>N;h˜/'lf"+Yfˌ#:%:Vi,ְW0 GeY=ٗ dD{x9ё9"WWSfN` bdjJIQ;TUL#C WVxsƦi̔KTЙ!Zvki:-~i[pICR ^;TņDzn,Ja sxvq9|{Sr~ 1WUlx,k,@uvjH#ͧOtק O(N\O^>!15&q1Jj2/O Joө ɬe@㑪?YRIX@+Vܮ*ֲ4[rkK2eXXjJ:^(zYE%~JKaP*mŴ+gYeJ[xAƄ:1"Zaʵⶺ*Ύ'_tJbZk; R|6ǡF-{b}~]7dcv?WN.1s1l@-JQG&]Nm9UkVɑrIs#\uvj*;@ff܂`h-[^H[xC_Xi|$l޽KAĔOfG$vҏn^~n`[ylE@'E*Z;͏$\E'ݐg'j*BtRt¬sBw蔧w^ >eO.ҰWrMm (aK]VlfjmIuG/KYi2o程ṾXȡCMؼLijT{NɎ! x؈0yafRؽkןtMfZ?wAo,Uttu!'ib4Q,b#=+{as#*>&_Z*GhXCeQ^n.*DEeljz{󚁫sf0볠e隡fSA}p/ťYkx SyHOȹ8z=s%۸ȭoP=X5vmY j)˪bsN.9O^ϧ +uz4W̩~t\I:-*FfYxd󩿗1qlr',+S9Q3#Qa_l:k}Y]]>bX `01 ``0 Q|+`0z #":2s,J+}1 ^gWz|c09Wa=|L4 emP~sai|!4GN=b`0q>{Ǡْg)rm^S_{4Si[=a`0oGnr6kgz:s-Lt IDATAc+q'׮M赴 {!xqzvG>&ɑH ,|z^}0mU7,ۧrnj贈snYcZ*+?NU 9ymTeH~?/܁%kZX:q't2'@\de0caGV&5bIXxnݻXϻr%:է-0H?xF9]* Lq3 MW5fUO.jRqIĉ7!'x*쏱Myl\l~;c`˯o8[7 |HKC{7I>2Ǜ:l{'U[w')f=ƌRhuvGo%1b{߾_|͡RH͖$\ݳq9 Rlov0Bl}[?JJ)R!oJiL̼" léD}FnifVG^8Z%z:bkJd/W0N=tqR!ҳ8oҏj0:rAB=kjʯvTQK݅BZ}R|@kÌC_U.eɺ{Ic6.Ȓ~-aM&[^z+7lE4!CDe0Mm`e2dhbg'h\3fCM?2"2% v lqJDdͰ(i܅=w24yvtyY<|mςDݫ,U$kAx0irC=4Ex)_sY/.ݻ4m9Z+DDX:֎*=yp|8/ (>3&7DFJmP$Ħ vIYZjc8 h)!._\pL5a(<[:4MӚ31:.-5u&n<ޥ,aR?\sayÛG+N&{` \SOK $ϕR-aFDݽ]>]G⛹4uw 0^IK.('*2*q@/y?}d;\/#-,bMݚ8֮JM:͚٠=jhj$yR2It\۝V1[HqZcDu‡I%Kw9r{yz&9Dqr2UVײN!3ǓUE7DTѰ :c&ˣV,ᰎqҐe 6A<>_D%`߀c>R)(R_"`-l-Ԉ/gS$(.}=]:7MmuTX\:JkU265&U*,:Ih-#j\k[Dݤ̅M\ pӬW67w6eR~,#?;ZESw%0GW#P G\al?_^GuviIhA`t)D<IˍuFUjEʲVM/߱F>tEf"I 1 [#B̈́9+#+DZ !O<Թ}ρa&euTN/Ҷ*8\.R*{&Im5]{[:* 8wh?>"M@vPIOۛY&>_LmK0J߭ssΫK57 ^1'L[ !ʼn,ӑ28 v6o7^bG|y|0Y{=U>h z)>g(v;6D!4sL5Rջ}c^U'&(bf9ş[+ R;{,SJS"SGaa..@* wQ$eq[Oj$0v&YUL:!B!ՃT#$JԸD4؞4 uH6P|W;Y=71ʘF4ךgM wIks(1Lֳ0eDYC^K+P_J.]i׽o76I4NSfm( zQZWFdy to?!3)zURLQ7o2: [e9>=IC) OHx 9@ f@~|J}Y$U ahD# CMQ,k|^P ѽB;UAYh沠t=LQ>ܕ=7^~?2+ᄩ{0ye0eif<_VIZQW,~HݎAȵ#Gh ZIB-b ݮ$NɤSf!8o)Z--^`~A~pW?HKP%9pn= Ļ]h#VY}NucWV#ȊUƔYϰشh^sV425̙D//ShZƼZ?{r|)7kŭNKSY|H2NYe4VNe0Sꈘ7+[0,BTTTJ>[]rBњEk&[U7J>- o(u0>b9)08/#: RlWE/K6PHG!`](w2|44QyvmŭDaأ^WvجvU\J-e0$ab o2gр¼MVr]¢ -'آ:⋧=J P1M5aXfy_zT}Xe'1B1qIq?Ə:g W~u%YQR*ƿ!`0vCz6ovsA}NA=Iǝ\6ҦV: uR'G"].4.˖?E?>ne]M)" zऋ?4`Ab2N>io 5YXP#,q u򩵫O[Naveʍs#m ]lVtﲝaj.zٴkWr8k:}6`>.c#uɇ4wsw Kc#~9YױyR%蘸uω~ybRhcؾ.e:;7Òo/ xM#ՙWMAz8 0i׭~%U"sN_ LS^ M*y ruY#ŴM3Zd_3V%,Z4І6қf?AH(zׂ-ͧ-Ք_MI%pRg>{)caơj$WdX޾SMRsΝk1v:slv}8&ё#VC{ lqJDdͰ(i܅=w24yvtyY<|mςDݫ,祣NSQ%']C/GzNOe vokkUܑ?8C7AW_$4)53ʮόI   ^al$@<r)"kXiM&dFxؗwkL܊)yYWU5DYAɧ6|;)}Nk?L 2ɳ3c%8\~C9wJ G\;bq/_f\ɸY ӗ<Bz2؝^uyz8Ф$O7ǫ)oq;aעSi'J~ǂ@ 3.]s:>nO:"qiþ+KtLt1mr_g![YuC{6G\_RZ=>sʯ9ii7& JU!q;tjQW{P J]G a`EJ ԗ!B&c$<{1[˃N5YڙcScBZ(eT8y/:5_r4uj\BnB}"lAlTڱ/s`}->pӬfeo2{&ՌUmC|BUR;sF7EN~j|-*{ysTxsw^xOY[73dʕshsZ PЖ^GQC۶\B4lX2t#+&֐F$I9=eeS|:܊߯p6$>"U3 $eK fœ] $^<9hbJyò^[7%_|XHB'BP#=}=JK:ѰeOn?-J{hQ̡mܜSy @ )Wrt7;lC-p .7u) TV 3l@KI;4lu]w^x1mz7!be'׭s-v~zW9?mǎlm׀^ ZAYەiy4(?ճ4cl;RJjVF"IkG<!3)U!ʾ"9 []s4N޼} Z9+0`_Vx B`$F|pCK 7n0cS0q5@.9zZr^a}&>#a`hyy/م``h?k4aϬF cioֲzVΞ7SF:, 1r^j:U._I18׃*ZOOĹ<y,%@䠏]WS5Vi}HOzYc'/&ڸ=H?\?ȩ* m\$ּ}c<|H΢g=u;ɮC{F2M dE6V £!ʌmʼ8#CYJKz}Ѵ. m3o/:T&4ԛji3qa/u;~hnCӯpp`* 6mػi о{frTfܒB^=:88 E DF f~^/(qlw3OfW=|~-&=Uj7hM?8ݹbn)'6^P|+I||Lw'ۮl?6FחTlMR-o_^{RL'?e?^`{18vԱ;pb?eYzp'xMGኍ;"yeٻnn%6>o݇X7Gas³r]/gA/ذkw*gOӂI(uCsYoy ww,Ps,ZO\6a=Y}{藉)Q{˪[ I>uT}XeH^/b0B>+3/mE%@uٓ_Ƭޖm7&hk=I* 7JңAϚ+;c(A 󾡓-#23 ~\>a0 jW. |^U& Bq }?MڠM+}.]|a\5˹pS_v2/Ο7K?@41o~.>ۓDPQG~z){02K5Va/4z-dlIVTR9T+t3g& wovs{cof1t7=P,t踃k&ZԪu鸓W0yOlE\`#htw1z]z]Ѕqϝ("![}2e|@[~b׾ )E_ϑ#tQMes^M]Z~Ί .Ase,|~8JuEV3ȈI =}˿ynLk#ɧ֮>-o8uAڕ+7 bץ,ϯ]q,׹S["#۾ߎocq$v~ʣ_gMGޱof Qʲr1)(.?[ b? `op$n5n:|dޏ7=/ t {:89#O=9඘iFfCL{]zTlĠE*'$mѨj-RE]</6olw :kK53kAyU:OA?Ua* ʊeNPik1v:slv}j- HQewav$(V1^&ё#VC~ |̇[Y`3lx;Jwa s^A7u^F("-_s賠})>;c}&yiZ2w:5oL@egƤQR/[q69 RB\B`.g{xK)ȼc+\>s<|J/83x^_zrG `bR9.(*MӚ01:."ݚ:bb ht֘˫VE^cƾ|F+ pDOJ $ϕRܲY#XPXx6vf죤Tk/[UBF?(dn:a$~ |̇ ⛹4uw 0^IK.('*2*q@/y?}d;5Ֆ%2*[CVp̬M5.T>?vIBAɵ1f@KTתάWnA\dfK;aOmڰʳ&FLYVVkzݐ QW &e/ܕvԢL>uyR>#jyדzmQ>uљ [ϧL^iJ5 @g\^͢ =>s*vm9 .00G"%@K!LzbBeenV#nNFkNiJI MyNIOzIK 5vUNދNWp9M8Z{>-^ hځ}|a۹;l z1:UثWhYFv[6Bo{qWW3"WUsY@|?NxxȖ_PL' +gGedt2Ʌ#Y{_QtrtRZQ_Ӥ%s ^\ݪSn ٶrh:%aQ{жmn&+I9=eLYL=+-ܪD\iw?_{[u߭y$&+I 0BkGϧwQT]?wfv7fwNzR BGTzذt >4A}i"""HQz N)dwgdžn rgݳgf{ @,GRf1VS?ѡI$VĔ?YmlчIB_+Vb?? ux&u.{xDt%\!3Q4–8r bJJPiyX NHanΌ2t҂cK "˪SKq3b=` Br5{QV5SE^ح2 | YnM`hyRbn^KIy_Io=_J@~^HťTt7s=rsəJ0ֻc,־n9S)r9O90B 笿r aJw[qK Lyٶ!ޕ`3rŬ1Eũ'a4[QJ'MȀǴӎ]O;^ڒNW &7!kl|~KUTgd^OA7P{ˮj8)Է)#5w6lD@P晏cnd^qxb%Cgdzޕ{㑥e`GmK:iقS 3n#O6X X„EN\BÁ5*;)wѽ:zzx:˃ehҸc/]tڥ&OM! C<=ĸ$=|۠p7 o.~r~p_EiW}7w,zUQY-₯\eҔW:}7k֮X89ikNQt^Z RiN~b׺%r'_sdX*_;Ild?UΑg 1^^*}{ܱ}?C1v#Bi[!G;KRtc80T'?:`B}_6ȞDҌe31!f9 l!̕f PROD|eG^ v-;sx3JR-MڋbR} $*9Qo{3]gu.ьta{a}:0uPzT{o(9SY;4wNUPiмyO:0q,S 3=Хw٦~/W<ίÄoڧie̚W.dzz}Kpd$U`4q{_?]`txk/Ħ稧.?hX> |2]4on<ֳ{9=v_Ye)BF|0i![y#rT:;}6AI^v50>`HЁb Tc9gޞYqo+NVICF;b֩ʔ-4|a)cc--e+T\9x`wnB&7؅}oYyYbp$uǕS+x=>D|ݡHfOOLZ2%w1=ӓRv;7Hj*v]N~GNJ_yj_HϯEbc@dTOɒ\QLu i9瀡'T&=lclM?|}A{\#unܱ~[KuspFw~P_t~uW޻h O5_˞b^Y[zտ7._`x{7C +b .k+o7i5]G/^?qci#?_?^5o49 Y+C R5_6gKi}z0NA֚n*ENCU$79Lfepܧt{FVȘL?RgYiLCO!M:ܽS4W2ۂM{ mtq!!eǜEq}|<}n ǣ: m>OHlL{gު(gw]e;]YC0R=n~3;ً+sSJQ*5i;[/U\OoNSUgeoϹ| 9t"wO}Ϧ6OxZyYW{ i/3K?qbK'Yn-Ic'j%Եkc|Ceg!ExfD:2tF9ί>e_tDJb*έfA>_Ɯ9Z,g/t^.7A%i9E?8$N+8 H:g;˷5X X,M$H$կV6 bKHwzG_W%*J:5%ZN,4~Y9{g 2+j2}k-0qs*}RȗH_[2Yy͇;ubGOzއu%#mM?T#zG\wAc3TS{[&):zWG6>9fUi7Vz~Ʃ t#*n۹ssZ/V8qp"yC>Pe<ԛwiD9XX]{}Ks^v?ρ}X\)"{OSmpg=AW̾Rqw@:fY%@AG>ҙ9ǐgf/zWA|A%ϋ?| >" c"A1q{AiO0GIձ=~ȿN$]ìo;L @ҏ=xGN:Vgx=y<.?Ns\>6-kڒmx?mܶMu#8eo /O`WA6>G5w;|>6% $V"bӬieo(txOj n^]R^K|ղ̝aoq;=TaI5"̲iPvnu*.Bb9>{]!.skИS IDAT&o_Ǣ 4`r 1qDZ?.}ΉU!qjooڶ*+? [Nmp4 J>-aڻ1gC[#+qwkctVrBdo.}%e'O5Y_9dzsVy_K3eriVF5 DSވƩu?4IM eyqnby|:ܙe jXۖ|w%+͊;(4W?ɧ%Q[pݟܐ`W+2?-> o(v_N*ԙD ;~%aѤuFK,lŸ4yM O6m\ VuߩJ;19,S7]~p'!v{YjJgδ3ZR^"S9GL~0:Q;eX١K߮ViN_O/S_X]_|m;_][F lo7%ɔՔi(3+`T.x'w~P𙳆yMiީ'y9LH{#C/+yrݪ<ۆ>Ҕk(p?_Mj~wv(%j.}ӥy983 2DTUݵٰmCIagH%sƕǤ-kzjZqOȿkW ݕ8 ݯGXBW8+-rtT[|ɸJ""l=:o^M. P{x_cjDr[GGGGmjڙzN_gtZ)rvVqez1ۄlr'wn{!0UE[)TmbSԬBiQu_p!+YB ꊂ1-)z8tcN̼رOMY`<^U [K)m~b\rVI}nprkٵ-kΔMx |6G[u}a|IlUĄ8ZZK .u>+dޱhR/e|vF)HE݇3uD9=dyI<n/*>Gb /]Hzc`rָxt&('WG8p*YS1~d+k>t+??լKcӻԋ|&,3܅+8͇w L'Uy|9e'tUĄ' v`)*(Bc&%e/W[MD-JyJq|FNz~-LONJa*{lWz?|7􍲽7psu~͕|!g@wQo3lz<6,['N#r3'[v֣׳+Mz>R8[|jZRcuȃ8Ǟ=^II#k륵,SM[hz w0]Kp̌TD!CwsmU&RO'Zcݡ s=L:JmfԨ cvF _T9s*!B,_ZQZ^wf#NmXcu`\G/0JyiתuGڸ/|T(z61DF. FlPtuS*A{L}YU&ɻ:sP7^l>ׅ iM 8gp$%pyLȌkB,sO_#zHa˘*h#(kgoǐ|>36p 1!h8p" Ԡ 4[:BJ7q<8~֩o]1OQk,*<p"R @*[532_U=z !KPaRPr"xY@@^OlKʊ/eNb{OL-HStRJ劣{Jsg[|Wzˠ҆ūd W>z߃O4O-=%&)~!+%$COޛ[|"ǿ K'Yg@sۼn/܆eHTkŪ3~<"io˩YЦqņW24@oq){ .BZ)†+mʳKO/y2 $o2e_efVJwm+f((N<= CyߊP?iG<%vz:זwZ5Q]XXlBIrbsZz=NQbT,9|Azfz}Er!Vϭi+З0}ŷxs*\힋+KDk}ظqǏ5WBBXV[vϿs(ob!;tR%JGi[\PS)[os}QN~om"cf.-JI+P<skkF b+GgZkҖ“~87R̽+|[ Vsnq3cf QBʎ/ǵyIY-₯\eսY4|o֬]psל, ,N|հD^Ot k{Y[dѩcѹk[ Ύs:brA,y)[:QN0.zҤC>;TSlGqjueY ^SǓτYԳjNՒsލWz^<ѻW'<fB( Õ*;>ήxx['y7Ν]fN*5^VL rف#QkZHN iIW3d&;;8w3GYJ`=dFm/W [!ŋ2P.⁵Dy_5nՆXba%kK5Z bdk}{F[6![1?j*iϗI{M7ڻ~D,@*#j7݂;ҳk Td]CÂ|| gВLY6kĿ^k. #II 斝9_<%@w2k{MPTP V*De#Ԃ"|oչ^{lN¥3џ.[4a˛Pbf-``K1pbտ[O+8yάq=Ub7;y1ↆz`g-)ZHź&t̓'|jKG`V`$eNϧJ~ud"& p1ڲrF{A^ʘ\cL8tAnfbt)?BR ONrbS [dDVk1׸&c=B|,iyqv4๏f6y0Ej򚢜Z}Ł%M:ܥl/喣 #"|zR.=u~ZsyḟyV Īǀ0ɨb ++"lP{$Le9|#mM#HK޸>Wr̨Ak6M8嵿l7.?4gW?y ǎڰ9suίnJ*DcJ}|y6fo9f^ad7Hy_LgM,d7gr@K|2if/M{d[{Jԟ{4Om/t%Cmu3,]tcߎ/~Ҏ_9#"b,߷RZAvZFo@]Go[ n~^✋F&' G2˽A("_veKgΦy&G!@kK7 _Zt ")e2W}:JsJFr&q>Ҳp`&AgwKuelj!̟O/{3}ۥ W ^xe'`{Qj{ gA'<ؼZ i/3A6@er1#H Cϗ".1s yf}EiyPi>/pE&>AA d XH> 푪c@={0H"H!aw=xG]'GoYB0GA|Ay\$7BAa+Kr%C;U%0G{  5Tc  Z[Aiߪ߀s"NH! HG׉D-W(22PA}VFB4q@/ϵIMNPAiDBamcgg0 ';;`4AA%AAPAAGAC oA)?`:)(  !ʛM>J> HKKJKK+@Bv .9a ! 0 CTTV Dԛ% HVXJ2̌!ǘJ aQj~C7Q'd2/M8w MEQQqQ& 8_!DP( 77cǎڨryU1>> HkgjZ.#-uG875Y>P HB:BhaGTfddp#~7alAZRA[ -0zm5!b*˲fcP?,&ѣ#"%!~`@[]ޯ-+Nr(Nr>)NO̸x"Hldo'_pбXˀp; _^* ) ~%`8SڬO'K|E*MVܕ|\ H2=>xuW*%^WŧTkKr5}{ڲ|iVl d=tO\ٹTaAլCG9+5eH::Y_gzO~yWH;%K>Y4K,w, S EPglGTUܸt7C-ZC(X-VPmjl:lPd_AEjWٯkd23@0Y^u;>9`WKPPqEVa{;wۅeͤRKK &+5]psic[w̽l:{Is>MwA;CedUҴbhh׺w2*7/79j| T(`ǘӆ=5QwX/-)R@/77*]{(xczx:үm_{ _ۘ7̛;" xK7; o%s J*R}ߔl.AfBIQ^Wvb'xVuA!ofgQ}uњ44/-R 6jC!'({*(u\BbAPĽ }*LN72 Kw%1}vK)vqw$gTzyrGۡZ9 FJ(J*Ux `q)9KwNQ}Ġ#<,y;RfD\T*YcMk ֒|b!hNAY^jra7(֔bwX'$fPxG E]|0 m 9H_i)a6@ P&Q{"%SYa+~+J>v)i~Abl)@Ws?ReȜa7߻9{=oC3="QH[)~kg+uDQت9%TeE@Pd 9 Zo:sw%SU썜AeupZFM+lU썬`%N#g߾ nQE%8wx@J4R)3:TgTrf2GZ 9QǞ;QPR @|L_(q9A/tc˜Ox+͕;StjIJk}ZNW.' @>K- #.Mp\ B˺rPiڍk)ebHθvJEf2fBтPz#vST/WY[jSbcAQmYQ\Bir .ƍ5 *]Nܭr^_eiP7g2sVA[^sv> ~A*f_wےBgT˽=ĸb-pWgވ%ɂsHPƦv2 )Sd>lĭ|[[:x>PM8Gs5'BEi~V8ur7K?sBG{̭-2/X3S'ufDgT%)ףbZ[4j!_YW!aSRR\\Fk \>5s=rK n(#w )0go=RfJ!=Is&)c>lK N\сHj! Du6PrRcybfbmS9NbܜescZ%0]!FGmPq;pk\;DOI+°U7NǔbsDM"c.':1rN7gچxX E}3E+Uxءa&x=[=({ب^ցiQ{o-ձR;Ϯ/>ԍ&Pes{]{yb5YWR2BOaYavA z=Oە!vIDATr,@^ZŠŬ 7&+pTWLCݪ z-^(8Tuxb^e|4n%&z{ytJXD*M^UZ]q?S\wP*z]uF&F$DVwuezZȯa U-x^˂PeY9Ty^0H,a91}u>jBXtnpuPU|Rz7~@gUy]LWru|#=1Q CymvKmP+*0v :m@_^X]~DQAG*[(x=G`,:޸Fo}hpA_DPDQX: = xmjPAZ=a%ĺ󨩡5 Hk0 f巠ޓy=q4aΈ63 -\R\X4Q0FT>BbaH B[+)*1 BNT=aCCB> AZN$QK-,$ !aR ҃X(P@yRZT\TZ7@Ci%lT*B_.)y^nL[`T y=0>a{+++''^=#Ri#f`AiŜ1 1F{P>iff>> ҆:I"oѾpAAڹ`?  Xa4A"f԰|T}AiI>!,0z`A}! j= oAAڭ0۲H(* @@)}On} @k4~h1j}eBi_ E/i~_ҘO!-Ofƪn!-} 6-)i`Q [{@y?D"bY!/yؓiiG}#jO~ e:m.!ۤmT{5O1TBC#0@Pw!@ oCFi6&CIMͼrAãFH!0)-+-Xt4-iwK'k_yF]є\3,2.d969CF%҇jReYb2p<[bidp1-52o7}hըA }i @){~u)m#Lg%h~M /$jzI~ U}N7>-'ݝ6i4dMI3Ok^C]͸I+ !lT_İʒDçmB% k"bۢ ?/Fj =OPC͔ͮIENDB`timekpr-next/resource/screenshots/timekpr-next-screenshot-icon-system-notification-area.png000664 001750 001750 00000057307 13716566163 034570 0ustar00bezvfedubezvfedu000000 000000 PNG  IHDR^fU OzTXtRaw profile type exifxڭi# >7qF>?0Uc{&ʖRy?xˢR~>w%wYlw#y! עҪ~7u w5}Yv?(^ZF)ƝB>y+!IRt8oޏΏ/C?IcBv5RKcK W`h ,.rǿss(l+טa'$7^"TAP+~G8ԗ98[Э"s /gA{7Y ֝')~oPi!ҝR}l5үžMg2B6~ͮ\Rxɘ:Oآ^]kd 9L"w"R_2edI,ܳFUm6HVx57=T-պX&nxXuJku)2G,͙AJ"3ڶȢm!uwQQ"wJ{糃Tl.'NDY֓pA8+KxZ$*D>ZjX>3RVl[}[AcwYx֯I!~Xg/iu"VA,pW9P 8$2gjLMRpbޓ5fdV 2+擠!-G9DhuقnZ{a o) -6ee,ZJI D$1H&ۭ9=R/%oO/A@4;[ Aer== Lqk K~_b#^\>=k026GInGize>E*,0T@v3Y-:n9Q@_WX~/Kg\5B0k DBC!@D5f7)ql o5Ն]ϮFABsAZ)SZ=mPe$XT[}G29bzc-edƦD$I"<jbΚw}81ћ$z'z~G*8Rw4s@Ppى2v.@6QdIjE*UD 4J/R+VWS7| \{0Ks&:1I&qb ˮS$sδE\Fm0!CmXHZ/Y4F= O U#tN@b#eHXlj NiS>=M յb)P8A`)Q⻰&-;F SJqHÊP3ދrBk[٩jq[F]z^҉ިlȌ0wBJfICŊ.*r8+)NHBy5Jol3 [ BXDأPŕ8X+slC-"bO}`8bm̤%J(PFJ {JKLwՃY{_Iȓ4 (PN %t]Ѭmڃ}>WMN"[# œV)mS6=1)DMsPZ"Ŀ8_ s4kRFH;HQq90Qrrm\;K}ej2\S{F@-bP`IxmZ7Tٹ,[M.J{S*tO~:A9DNT_GG|85QU)|N+7/ۧS4b4} E2Πb\i -ST4vj Ť.FhFsUdA)Cs =R!3l2Ѵݐt-iG'A.^#]Y KCkNL>+7*ZvccF.j8N3pwM`FGm⺣){0dȦJAB7-п27!0Z5wuv?n+rbKGD pHYs  tIME4mu IDATxwxTU?疙ɤޛt*`ャmuWwWke-@" !=$IfB(>OdιyyW{E9%XR)LGJ#4UڠK)\l_w D2'~zuӊM8bcyh 4> P&M⠃(v{r} ܹ[7&LUU%2ǣ<Um8~?vDVx&=Q{YK†8(|:-vl*؟9S`K/04(N8֜t%pؚJ(fX!t)v0L4QL D%>]oYimi|:!%fpMpiZHA4t].imTM%*ecUU4 'tTmo۲1L qBǔ$O4w!//˗*؞u&zaZz;r؁#a'CO2>k7֭pi[2 jݚ;CQ';@unT1>k~ߓcA<~80L]JzoJ@AQDt:c?v+ٿ;/ bL)!r!C}.p0'p LSR>6yfk2c.b#/1jpv(8 eH\2d9݇Cjئ[1q,˦,K63O/$_Qb)r̐.=K&M`jbl$=kѫj?5Ck+?Jv d𳑅4="*j>CQT~?m49M۶mQtQab&H4χ仱E۶1L#Jf`Vf/P"ߏuM/v,4MlAU~őǹ_BffV]n~M%Kѭ[PTT]=Jc%{7k>P0-8Ntt=zX,p䐫*Mg:VDki @z'$RJ0 wQutU mv% qsS6ެ̟aTll{?OP,A؎S4_+0M88d+o1- USQ[QM.nf[nb ihN(x]v;?wbgӹ@h&UӲAU(@p4!#d3LҝW\E$v֗ҵ^ޙ*AH1 ہΦ{ ~{ #70MDo=m8bEy*#iQaQq=x *QA&~xe:>G R64D#99s|!Ӷj O^_-? !QMo6a ƌπ:>G=&,TUgׯ@ _FvvNW߱bTVTLO'++;vw{߅q׃q†v> Q7bCڈbl~ǡs/A 2S?n@z𰇠޺a:^<y^]$.BRJ,?c>[}+/ą?Ĭwfsc3Nu7|YZŀ=XQptHwo?~@ ]ol'kهL^^ά9^exoR1%׳ұ -́#qq(kDl޹q&VgM;ӷo̭MOQT2r6vV1s7$U[86[lacA~5m$'Gmۊ}MI3\ ?qaAT 3փN>G궴:#AcYTH$Eۅ~Š:6椎bJu1;52d" IeRU {JL`q(j-OkF."'ޞJÒy a~.k׬g 69 AQQ# Ĵt X JE6ˡ|V_r/atz ?쟓YmR>c\ЯY,B;8l.3Ǜt?Pg7Az GQTpgQ՚k q\r#6ܓ˴, ۲AjX1ڿ 0TS`J`>l7BH#%B%j~^IIQ p߲F,!~m>a#P"`@Z2O8%:T=*MGPy$Ji\v(2 VSjuWLhSL2k&ahչGN57_%pIIq'Ubh-3tp,˱-!cZDIӗp8?QeٔEf=|/n ɑC?Gsy>gpmy\M*2yE;3OƇ`h`*=?~vF!뀿? &|#Wqmۼ\OF śy+!-HFzo+H)[Bpq=|ySLgtރI?G"-6HR:2H0l_FqZ:a@?x[A˞rs:ݦ9ԁrdng>Y~4.n~-qW9|R,dž2lL&"N]d9x'׎S˲1EMnâ-~_RY]3_O̝%ݓG20k6K6J"s XasƹCȥ-Όtr wokA\xx.,aݎtw= Wj8ko+M]1snݖ-[6*iI4E!"t{nCӴF_"LWv`-HcRӺS+Ք,A6n3@>r8'B$ DꯩfNHHLNhM92o өh'躆zo$BÇxLt8z~ VhzN4Hڕ>GӃhz`0:tHB ʊttULdNnQ|vݷ}ɬ }doz_>eqA| ,t* 18;qs1z `Ht9b4ܧBEBpU:랆W}[c.)x އiS'b\pm hE)5]àGsf4V:WW ƱmMSLbrc"*~99w'>#dnWʬAfNKL*izЃ=JjH䒻Bĉ#mp5^5H'b%Qň.v_?jnZh(" )%aQ .&e7ȟ.f#*Pw0ՠ[x@r1SޞrYb'=-o#@ᶱ8Ḿn&ՓkEWjJг{;ڵ>8a~{ cPYO(2MaB7TVn$- 3dD]TIޓـ,$@zwx'h*o &Ǜ3qM8YŖo&BIQ3X^GV||B"Vz/Ga^{^?5e5JI覹m[:tM@JLh+O_OKs秸xgy|6PpM7s΀^d9S18id٣?13[!TT1>kleu -3-@U̜߬1)%GsB͘MJ]{ۆgײjS\dvKՑn\Y`ۀ"3S*04U V|2rlrEn`NvzJUUc}imKBf}=up8?b:D0V4~X FQ>-jK:hbeS j`r ,SւJPie. MՄla;Hp*(+s7aҎͯ`sIm[S[ .Jy2jF,ӱjǢt)\EYlC6hdd rlIZP)_ Mʾ}g"_&>WϦCYAneխĶ,w^iM[kG ٜҿ׽27׼1fN㰱Gv $P]]"8{Nyrs?Ii lJw8ه:X#'"g#2o&NPTSVhPjڻU/}ƶc}ɂf|'wjlmtL̜1-ҖJϓz$ȺoN1(r}_ x*Df-ʖM/טh@TCJ;čJRB vLeRAyqm赒Tfđu,G.yHoL.=3(ܴ IJagH b CH1/?9M6*p`ccE&;e] :^u ;TPj2 l`Ǧ8S/OxYh$R-CU$R:8JK@(h>SPrtM*Vɀ0W|7AulY55~q7XMup8u8ݶ}[)pZs|ysQK'HTUôl}]uPJk{]vq<2Z*fO_gWM$;xkUOa/Bk4)-)i+Y_*uMP( N->uz@gFfgOd_0 X}#eک/Me/ yc?)?"m}cB{Xoa@ m9OȚ U0%Qؙ c%3OB`iD䩪Qnp3,47>չEG4BPT%&tDM4۲ٱxdmyƆ`Fդ6 lˎUq=*DzvpzF75Ƙ-B(n|EQl 0lb|$G=3HUvts#.y?bSx,҃9TWiئQ]*|it>f)sQ䪭FݎO83I@%+f0e/ ( NĜ"ׅt>7:^ɽ7Dϫ3NnGoJZ*;ß.A- sX)}T'ʕ8N֍v0w/=`㶛HxMkrrr䲫x_4?`e& wt/oN0t8gs>;vl=IUUUܵ0MM :FKB'z֮5ض*W3ADD\l7☣<:i'qn RNI^@6U'ش%D B7glZ>pFk c΃;9H>Iu(6[:kD77Q~ϯPU˲lpl-<՚ V4Jk۶m Ĵ,֣(AO( `Y+ծ٬/{Ԇi ? 2פy8|D}MXֆ / !ֆd!C`ջ$WuqǝHKT]ޭ IDATOGN4W[n;qonD,H8HGbٮ2BYw y )݃<.*FL%FQ <JSi4Plө>%Ȥ"Zt)ON+Slp$R'g9cEčKc@uJ6]'ayiH;V-g4MIHR4%I RI3,@h~&ZS$Ii]SR!U KX {6$$I.KR$r5Zfôc#vU±I`Jm%SkUs絪į捒HLVS: l MoY ni`N]N #$Ԓ$Pk8d4bq*|4!5T8<`mM:F<=gׂ4$2l϶FAC(WIUS%ǙLRl|%Qhh^C<lj dJnYw(lJۨ/YZ"^7)ħPoE80 `Wqw6ZE5hE}O* 5֧JS%Ը}y?dՄ2h۶5# E~ڶiδݪc ǒ JT!i׭OϬ$qη ><E25u ]IŠ&<[$IyPKv&Yٙ ~`j(ak)Wʈr$#E$m6LLˑ@$JrUO7~}IODem#" 5" %I 4SCxV[oWIDQoxPP$O#%Qi`V]1{`ts 6O-Q.kY!/}#qŹ5nU1n-[TLUŸA{pg]jϏnx eZ_\}-_RY`-=W3oFw)r="~Su꺺A[nr>ڎR|ˌ JTYsި.tm$``7s߬Wn[674ȟ^e*'ڋJF֬\A}y;\cãw 栿õ;gW7:,ڞ'_++LՆy47=^9!?s.w-Ρ7O/J4K߻??{d^#?AmK.#+[b\qwލ Tl`Wy8"r$SȃI$-ଳ>B:gqikU]Dv8I` Mvɠm8URMqI`A)TI&IrUI&jھFmeDQW;/B]c;ȰU;4sϽk۷]7</Q1C.8K9_:B'pyCJ{g-K4mQU{@Dow ج4y6]nX_ +G%h`UVc-$?`;J ܫ5AT0=)8[,1U8u1?Z:G_1}r`y;pN^{Sg=8}T/|_s,q+{޴?`E\ j5biJ#e,.w1sYTg^[-go,Uo]̥ua`M%Z2AYm<Rc<++w":?ȟZ]F&6m2#<SK(M5# 8 >'0j޸D sE0g%_FȃB*ґU_ .)G4@OЃQas$tP#DPR%Z";I`*(CP˲_PvԴ4鎭 2iS+CKR@0 aA@.W G(l_M̽Mf ~Xn@:]*jUs"^FÉrkӖZOuM~V)۷Z7Xz(PsƖЋͬ\^M-ϲ8Cz[+ؿ^~  c\p $hJ3V)ќ:#qcl:߉**zᐶ1a2Y,"xlNJr> ZO}W_/:ή8%q&ONM<$5 ?`|&L#Lֻ4*Z@AKSR͌1(~JeVJƒ#-X!K3%͉QP{ʦF6,ef-! ~W~r0d [zeىu5+ꗃ&-ٿOjZrf(eQ(iuF0_.ښj,YKV;>p>?T@zɔ#:yCə }ׯ["Bk ;QO H LP ʸ2­31O2R#Q/8 w'ħ&V#= Je# f oDUz:vT* (]шZ>/̡'LZUAߖ5̘+Tgr7t8r z&g,bY˙2yޅ#vf7WcHDh ?n'xw]9}?pTT+Sw_._oI' ~uy7t' ёveӘ4d;6nc"lG)|eP9uXvCЮ3)Gu}]#nDmCRmD^k%X31gE4MRH5 P ޲-kOc F`MUI5 *6XSϼj;)V]q>ir ޹*~Ϲ]NѪc, uz@}>g\|v]O#Ǵs|+l=bnng_҅L9'*@E2W`7ڒvdE}%\xMܔeRaﮭ^N?iUYf@d޽+/#R,od7yt8\ͪdkS+Gu_ $Ii`O㐇Xɠ/]EM}\<[.@wu4  L-ɭ˘k xh&өu#ԏ{{ݺ4niWꐩ **!%UM Sxurɒ Vi4Jގk#Ujњ0mfxut6Z}dJS$ۦ? d$00iuPِaE^a=&(lө{҃:As; ~l4$@H[bUct%%Ґ,bk\Ւ_-ȿX0mQ375 vP>WGr"F *dx:O/7ױU}̉a1_9BZqgr>+)͔0GtPEbo l`Xݒ-""$(-G]cٹ;|E%q)zԵk4fvsJg΃_ Κe0:rH1mKb(kF&em8X1B"S%ЂSTR%l˹t1]<%>pBͬ|{klݘ9nx ~f7_3iEA7 $#8COz ]UC[ .XdFDEq)kM4ƶşѴ Aީ~d#sw&?>9N:z,G @, kˏ,56Ӗ1|D:gyo~&,932ٜBi6jwۿ s|b}4!p!%) /-tN /a?2ێj%N] JXgP$:v#9gEO!t;L?~ʟ?ۥ.`1~N1eP3K9{39FknjF1wpa 3K3Z},Ir'L+&l?l $5njGGD#h竢rs!ivot ln.oփ,ɏ2ay"$ lxlK"8&TZh@&Okle6=l**дl&dž[LCXK_- 4 9^t8?]=kuWJr\9b3ky7wr,'GWy#p!sAmtȱV;°0Qz ˙~6D\̺RD.=ڐa?ds9W_ʂ_3m=3Ω, x#;Kټn&D߰tlH=ϋ)WlBmǵ&}hK^iN*;fCd;P\DQ}ȠaQӭ +bбpb,)|#}#Miqӭ ˻VPkOCh?'Xf?ϫKܥ* H#}<;'=B2Kid&op,7AYhw9WNxwDfv RIDATЊVhdw%\<`=+͔B.qh'\݃[XWa:w L8 Ԓ&JWJc9N\ͰsO-:fc껛)ANΘ*̷xwjl@Gwaۚ? a]{@w}vDnŒ9s5LoJ ɧ8jQ&.!Φ/u+@XdSJa^,Z'IyZؾB鏎#,*(ڐϦm`+[ܸ}KJ>eJpD6|xcM~lƈXp5mi:úC85Z.$&"jFx\{I7=gwl3s=T>χ܇L)&NNk<7!#}X3vrd[qގ#8xC4:_%nDCSusDTc{#'QaY $0J1\[f 9:ڿMI (8DE2dm_4(֖X[ 3RN_2 Vmgc~%G8[``ض˹Jv]k;F[oL*8>{gag@aR.,b Qp(c$d& U#$yJ*n1jY1Zqe"TdfeyqY=wt?^FC2r91= 6ܶ G0h) t) (B$oBuLԫe6$oլڞN= ?+nϓnibu=c0PSRoPBoO 5!κ:,Je:,dt,j:p @K!p&RhQ \8ݏQ=5+D*& v=u Z(nƭO|u+zHSۆՀdS  uxq;m8QDX+ZC_JN<x o._$ 6-܃o #^O?C/?ځhGSG數cWZpc+E Vܶq9\z/Gc\CM#yu@@nFq io[n7"~l=-Cl&"Ʒ>0ஐPC e$yӭ? ;8s]@ K"KxA{!ՠ ı7?ć[Sk=g&ds*B y߉U);RI,۵w`.tkqG/VlIzk'~9G?/Cغf'vlHl{_qn{)?{N<-kĎ*zgp jCp.t?WяDXֶKIj8t0eGI1%u9BQ)R: NwhwV0` O})))))Y {M_Z|'&.B)k55xғ4+A6~QNh|uL))))))kBOuL".LaH%2g *V<ڤLf hI+d"HIIIIII]S xC .b^e8NE Ղ@H8 0&Vih UM!V$JIIIIII]#X,-wf/D0O)er\DST衲$JIIIIIIj d{<] 7쟨:m(r* r4@!VfM=U$:Z!0P!S f*nsH=Y:Æicf+1Zʄ`@@!!.VB*(&Vd,CZ ֤HIIIIIRR),T=B_ȼ@`&oq(n-@f\E ͪ+Vl,#%%%%%5K5b_ @01B sLE%=B s54Ƅ )))))Yn4:Ǵ5Q01d`YH(Vq[@!L k"c @`J1\F2kfLD2ĕao8W` mv "F.[ȄnnBq)ULplh0br/LT U [I(z17W:_t?8ݟɼY!n<4ONlQJHBe@ !& +TCCy0so )/y|I8o\7AZK*ׂD".@VXJT&R&yuȞr'i:_U< ^&ՅϐJuÃ_3.tqU^<@"c^9 ՄSMj ɨ"u,ivA`.oB'@fa i-TB %T8l`&F(O}\=m۹HW˜pB`ǠLBwc'd DUU)*:cWtrҶc| +8lRi@ ՐbO2yvi|wk~5%XV_~2se۝g5j]Q)@6 Hi]eܯg;=j[% 'f98$bi;^"p+~=h<~N \V8me~mrcN+Y~fefw s_ۈA5!UԨ*@ !x& =oXO*P 0d&B/1r۪J(qW&!?ɌD̯+;Y("7ff|vb } VB40kO6 zU̻_3$!SEBd] pY WD >@ h뷮  3P[rW $Qikn쯦3@fTN 1!0Z.JɼO% <7IENDB`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))