View | Details | Raw Unified | Return to bug 22898 | Differences between
and this patch

Collapse All | Expand All

(-)umc/python/updater/de.po (-9 / +9 lines)
 Lines 3-9    Link Here 
3
msgstr ""
3
msgstr ""
4
"Project-Id-Version: univention-management-console-module-updater\n"
4
"Project-Id-Version: univention-management-console-module-updater\n"
5
"Report-Msgid-Bugs-To: packages@univention.de\n"
5
"Report-Msgid-Bugs-To: packages@univention.de\n"
6
"POT-Creation-Date: 2011-10-29 23:07+0200\n"
6
"POT-Creation-Date: 2011-11-25 13:23+0100\n"
7
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
7
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
8
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
8
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
9
"Language-Team: LANGUAGE <LL@li.org>\n"
9
"Language-Team: LANGUAGE <LL@li.org>\n"
 Lines 12-36    Link Here 
12
"Content-Type: text/plain; charset=UTF-8\n"
12
"Content-Type: text/plain; charset=UTF-8\n"
13
"Content-Transfer-Encoding: 8bit\n"
13
"Content-Transfer-Encoding: 8bit\n"
14
14
15
#: umc/python/updater/__init__.py:750
15
#: umc/python/updater/__init__.py:747
16
#, python-format
16
#, python-format
17
msgid "At least one out of %s must be selected."
17
msgid "At least one out of %s must be selected."
18
msgstr "Wenigstens eine der %s Kategorien muß ausgewählt werden."
18
msgstr "Wenigstens eine der %s Kategorien muß ausgewählt werden."
19
19
20
#: umc/python/updater/__init__.py:1262
20
#: umc/python/updater/__init__.py:1267
21
msgid "Component name is not allowed to be empty."
21
msgid "Component name is not allowed to be empty."
22
msgstr "Der Komponentenname muß angegeben werden."
22
msgstr "Der Komponentenname muß angegeben werden."
23
23
24
#: umc/python/updater/__init__.py:756
24
#: umc/python/updater/__init__.py:753
25
#, python-format
25
#, python-format
26
msgid "ERROR: %s"
26
msgid "ERROR: %s"
27
msgstr "FEHLER: %s"
27
msgstr "FEHLER: %s"
28
28
29
#: umc/python/updater/__init__.py:744
29
#: umc/python/updater/__init__.py:741
30
msgid "Empty server name not allowed"
30
msgid "Empty server name not allowed"
31
msgstr "Der Servername muß angegeben werden."
31
msgstr "Der Servername muß angegeben werden."
32
32
33
#: umc/python/updater/__init__.py:1267
33
#: umc/python/updater/__init__.py:1272
34
#, python-format
34
#, python-format
35
msgid "Illegal character(s) in component name: '%s'"
35
msgid "Illegal character(s) in component name: '%s'"
36
msgstr "Unzulässige Zeichen (%s) im Komponentennamen."
36
msgstr "Unzulässige Zeichen (%s) im Komponentennamen."
 Lines 57-70    Link Here 
57
msgid "Perform release update up to version '%s'"
57
msgid "Perform release update up to version '%s'"
58
msgstr "Release auf Version '%s' aktualisieren"
58
msgstr "Release auf Version '%s' aktualisieren"
59
59
60
#: umc/python/updater/__init__.py:1276
60
#: umc/python/updater/__init__.py:1281
61
msgid "There is already a component with this name"
61
msgid "There is already a component with this name"
62
msgstr "Es gibt bereits eine Komponente mit diesem Namen"
62
msgstr "Es gibt bereits eine Komponente mit diesem Namen"
63
63
64
#: umc/python/updater/__init__.py:322
64
#: umc/python/updater/__init__.py:318
65
msgid "latest version"
65
msgid "latest version"
66
msgstr "neueste Version"
66
msgstr "neueste Version"
67
67
68
#: umc/python/updater/__init__.py:512
68
#: umc/python/updater/__init__.py:509
69
msgid "unknown"
69
msgid "unknown"
70
msgstr "unbekannt"
70
msgstr "unbekannt"
(-)umc/python/updater/__init__.py (-30 / +33 lines)
 Lines 39-45    Link Here 
39
39
40
import re
40
import re
41
import string
41
import string
42
from os import stat,listdir,chmod,unlink,path,getpid
42
from os import stat,listdir,chmod,unlink,path,getpid,getppid
43
from locale import nl_langinfo,D_T_FMT
43
from locale import nl_langinfo,D_T_FMT
44
from time import strftime,localtime,sleep,time
44
from time import strftime,localtime,sleep,time
45
from subprocess import Popen
45
from subprocess import Popen
 Lines 222-235    Link Here 
222
			self._unchanged_count = 0
222
			self._unchanged_count = 0
223
			self._last_stamp = max
223
			self._last_stamp = max
224
224
225
		return self._last_returned_stamp
225
		return self._last_returned_stamp		
226
226
227
class Instance(umcm.Base):
227
class Instance(umcm.Base):
228
	def __init__( self ):
228
	def __init__( self ):
229
		umcm.Base.__init__( self )
229
		umcm.Base.__init__( self )
230
230
231
		self.init_called = False
231
		self.init_called = False
232
232
		
233
	def init(self):
233
	def init(self):
234
		try:
234
		try:
235
			if self.init_called:
235
			if self.init_called:
 Lines 238-247    Link Here 
238
			self.init_called = True
238
			self.init_called = True
239
			MODULE.info("Initializing 'updater' module (PID = %d, LANG = '%s')" % (getpid(),self.locale))
239
			MODULE.info("Initializing 'updater' module (PID = %d, LANG = '%s')" % (getpid(),self.locale))
240
240
241
			MODULE.info("(not defining workaround for translation)")
242
#			global _
243
#			_ = umc.Translation('univention-management-console-module-updater',self.locale).translate
244
245
			self.uu = UniventionUpdater(False)
241
			self.uu = UniventionUpdater(False)
246
			self.ucr = univention.config_registry.ConfigRegistry()
242
			self.ucr = univention.config_registry.ConfigRegistry()
247
			self.ucr.load()
243
			self.ucr.load()
 Lines 251-260    Link Here 
251
247
252
			self._serial_file = Watched_File(COMPONENTS_SERIAL_FILE)
248
			self._serial_file = Watched_File(COMPONENTS_SERIAL_FILE)
253
			self._updates_serial = Watched_Files(UPDATE_SERIAL_FILES)
249
			self._updates_serial = Watched_Files(UPDATE_SERIAL_FILES)
254
250
			
255
		except Exception, ex:
251
		except Exception, ex:
256
			MODULE.error("init() ERROR: %s" % str(ex))
252
			MODULE.error("init() ERROR: %s" % str(ex))
257
253
			
258
	def query_components(self,request):
254
	def query_components(self,request):
259
		"""	Returns components list for the grid in the ComponentsPage.
255
		"""	Returns components list for the grid in the ComponentsPage.
260
		"""
256
		"""
 Lines 406-411    Link Here 
406
				MODULE.info("   << %s" % s)
402
				MODULE.info("   << %s" % s)
407
		# -----------------------------------
403
		# -----------------------------------
408
404
405
409
		# umc.widgets.Form wraps the real data into an array:
406
		# umc.widgets.Form wraps the real data into an array:
410
		#
407
		#
411
		#	[
408
		#	[
 Lines 822-830    Link Here 
822
		# -----------------------------------
819
		# -----------------------------------
823
820
824
		result = self.__which_job_is_running()
821
		result = self.__which_job_is_running()
825
		# If we have seen a job before: mark it as finished
826
		if result == '':
827
			self._current_job['running'] = False
828
822
829
		# ----------- DEBUG -----------------
823
		# ----------- DEBUG -----------------
830
		MODULE.info("updater/installer/running returns:")
824
		MODULE.info("updater/installer/running returns:")
 Lines 882-889    Link Here 
882
					result = self._logstamp(fname)
876
					result = self._logstamp(fname)
883
				else:
877
				else:
884
					# don't read complete file if we have an 'ignore' count
878
					# don't read complete file if we have an 'ignore' count
885
					if (count == 0) and (self._current_job['lines']):
879
					if (count == 0) and ('lines' in self._current_job) and (self._current_job['lines']):
886
						count = -self._current_job['lines']
880
						count = -int(self._current_job['lines'])
887
					result = self._logview(fname, count)
881
					result = self._logview(fname, count)
888
882
889
		# again debug, shortened
883
		# again debug, shortened
 Lines 935-941    Link Here 
935
			if 'statusfile' in INSTALLERS[job]:
929
			if 'statusfile' in INSTALLERS[job]:
936
				try:
930
				try:
937
					for line in open(INSTALLERS[job]['statusfile']):
931
					for line in open(INSTALLERS[job]['statusfile']):
938
						fields = line.split('=')
932
						fields = line.strip().split('=')
939
						if len(fields) == 2:
933
						if len(fields) == 2:
940
							result['_%s_' % fields[0]] = fields[1]
934
							result['_%s_' % fields[0]] = fields[1]
941
				except:
935
				except:
 Lines 1036-1041    Link Here 
1036
			MODULE.warn(result['message'])
1030
			MODULE.warn(result['message'])
1037
			self.finished(request.id,result)
1031
			self.finished(request.id,result)
1038
			return
1032
			return
1033
		
1034
		# initial values of current job
1035
		self._current_job = {
1036
			'job':		subject,
1037
			'detail':	detail,
1038
			'logfile':	'',
1039
			'lines':	0
1040
		}
1039
1041
1040
		# We want to limit the amount of logfile data being transferred
1042
		# We want to limit the amount of logfile data being transferred
1041
		# to the frontend. So we remember the line count of the associated
1043
		# to the frontend. So we remember the line count of the associated
 Lines 1052-1057    Link Here 
1052
				if file != None:
1054
				if file != None:
1053
					file.close()
1055
					file.close()
1054
			self._current_job['lines'] = count
1056
			self._current_job['lines'] = count
1057
			self._current_job['logfile'] = fname
1055
1058
1056
		try:
1059
		try:
1057
			# Assemble the command line, now somewhat complicated:
1060
			# Assemble the command line, now somewhat complicated:
 Lines 1062-1068    Link Here 
1062
			#	(4)	if the subject is about 'component' we must get the 'defaultpackages'
1065
			#	(4)	if the subject is about 'component' we must get the 'defaultpackages'
1063
			#		entry from the UCR tuple named by 'detail' and use that.
1066
			#		entry from the UCR tuple named by 'detail' and use that.
1064
			#	(5)	if not, we can format the 'detail' field into the command.
1067
			#	(5)	if not, we can format the 'detail' field into the command.
1068
			#
1065
			# cmd = '%s' % INSTALLERS[subject]['command']		# I need a copy of this string!
1069
			# cmd = '%s' % INSTALLERS[subject]['command']		# I need a copy of this string!
1070
			#
1066
			cmd = INSTALLERS[subject]['command']
1071
			cmd = INSTALLERS[subject]['command']
1067
			if cmd.find('%') != -1:
1072
			if cmd.find('%') != -1:
1068
				if subject == 'component':
1073
				if subject == 'component':
 Lines 1369-1377    Link Here 
1369
			and how long it is running.
1374
			and how long it is running.
1370
		"""
1375
		"""
1371
		started = int(time())
1376
		started = int(time())
1377
		logfile = self._current_job['logfile']
1378
		lines = self._current_job['lines']
1372
		script = '''
1379
		script = '''
1373
#:started: %s
1380
#:started: %s
1374
#:detail: %s
1381
#:detail: %s
1382
#:logfile: %s
1383
#:lines: %s
1375
#:command: %s
1384
#:command: %s
1376
dpkg-statoverride --add root root 0644 /usr/sbin/univention-management-console-web-server
1385
dpkg-statoverride --add root root 0644 /usr/sbin/univention-management-console-web-server
1377
dpkg-statoverride --add root root 0644 /usr/sbin/univention-management-console-server
1386
dpkg-statoverride --add root root 0644 /usr/sbin/univention-management-console-server
 Lines 1382-1388    Link Here 
1382
dpkg-statoverride --remove /usr/sbin/univention-management-console-server
1391
dpkg-statoverride --remove /usr/sbin/univention-management-console-server
1383
dpkg-statoverride --remove /usr/sbin/apache2
1392
dpkg-statoverride --remove /usr/sbin/apache2
1384
chmod +x /usr/sbin/univention-management-console-server /usr/sbin/univention-management-console-web-server /usr/sbin/apache2
1393
chmod +x /usr/sbin/univention-management-console-server /usr/sbin/univention-management-console-web-server /usr/sbin/apache2
1385
''' % (started,detail,command,command)
1394
''' % (started,detail,logfile,lines,command,command)
1386
		p1 = subprocess.Popen( [ 'LC_ALL=C at now', ], stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True )
1395
		p1 = subprocess.Popen( [ 'LC_ALL=C at now', ], stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True )
1387
		(stdout,stderr) = p1.communicate( script )
1396
		(stdout,stderr) = p1.communicate( script )
1388
1397
 Lines 1419-1425    Link Here 
1419
							for line in atout.split("\n"):
1428
							for line in atout.split("\n"):
1420
								match = re.search('^\#\:([a-z]+)\:\s(.*)$',line)
1429
								match = re.search('^\#\:([a-z]+)\:\s(.*)$',line)
1421
								if (match):
1430
								if (match):
1422
									self._current_job[match.group(1)] = match.group(2)
1431
									var = match.group(1)
1432
									val = match.group(2)
1433
									# restore numeric strings into numbers!
1434
									if val.isdigit():
1435
										self._current_job[var] = int(val)
1436
									else:
1437
										self._current_job[var] = val
1423
							return inst
1438
							return inst
1424
		return ''
1439
		return ''
1425
1440
 Lines 1434-1449    Link Here 
1434
				if command in atout:
1449
				if command in atout:
1435
					return True
1450
					return True
1436
		return False
1451
		return False
1437
1452
	
1438
#	def __is_updater_running(self):
1439
#		return self.__is_process_running( 'univention-updater net' )
1440
#
1441
#
1442
#	def __is_errata_update_running(self):
1443
#		return self.__is_process_running( 'univention-errata-update net' )
1444
#
1445
#
1446
#	def __is_dist_upgrade_running(self):
1447
#		return self.__is_process_running( 'univention-updater-umc-dist-upgrade' )
1448
1449
(-)umc/js/updater.js (-2 / +2 lines)
 Lines 121-126    Link Here 
121
		
121
		
122
		// waits for the Progress Page to notify us that a job is finished. This
122
		// waits for the Progress Page to notify us that a job is finished. This
123
		// should immediately refresh the 'Updates' and 'Components' pages.
123
		// should immediately refresh the 'Updates' and 'Components' pages.
124
		// XXX can remain this way
124
		dojo.connect(this._progress,'jobFinished',dojo.hitch(this, function() {
125
		dojo.connect(this._progress,'jobFinished',dojo.hitch(this, function() {
125
			this._updates.refreshPage(true);
126
			this._updates.refreshPage(true);
126
			this._components.refreshPage();
127
			this._components.refreshPage();
 Lines 225-231    Link Here 
225
				confirm:	this._("Do you really want to upgrade your system?")
226
				confirm:	this._("Do you really want to upgrade your system?")
226
			});
227
			});
227
		}));
228
		}));
228
		
229
	},
229
	},
230
	
230
	
231
	// We defer these actions until the UI is readily rendered
231
	// We defer these actions until the UI is readily rendered
 Lines 304-310    Link Here 
304
					 		name:		'cancel'
304
					 		name:		'cancel'
305
					 	},
305
					 	},
306
					 	{
306
					 	{
307
					 		label:		this._('Start!'),
307
					 		label:		this._('Install'),
308
					 		name:		'start',
308
					 		name:		'start',
309
					 		'default':	true
309
					 		'default':	true
310
					 	}
310
					 	}
(-)umc/js/_updater/SettingsPage.js (+6 lines)
 Lines 164-169    Link Here 
164
			maintained:			true,
164
			maintained:			true,
165
			unmaintained:		false
165
			unmaintained:		false
166
    	});
166
    	});
167
    },
168
    
169
    // Let's fetch the current values again directly before we show the form.
170
    onShow: function() {
171
172
    	this._form.load('dummy');		// ID doesn't matter here but must be nonempty
167
    }
173
    }
168
    
174
    
169
});
175
});
(-)umc/js/_updater/ProgressPage.js (-95 / +95 lines)
 Lines 58-79    Link Here 
58
	
58
	
59
	_job_key:		'',			// the key of the currently running job
59
	_job_key:		'',			// the key of the currently running job
60
	
60
	
61
    postMixInProperties: function() {
61
	postMixInProperties: function() {
62
        this.inherited(arguments);
62
		
63
		this.inherited(arguments);
64
		
65
		// If I don't do that -> the page will switch 'show module help description' off
66
		dojo.mixin(this,{
67
			helpText: ' '
68
		});
69
	},
63
70
64
        dojo.mixin(this, {
65
	    	title:			this._("Update in progress"),
66
	        headerText:		this._("Univention Updater is working"),
67
	        helpText:		this._("As long as the Univention Updater is updating your system, you're not allowed to manage settings or components. You may watch the progress, or close the module.")
68
        });
69
    },
70
71
    buildRendering: function() {
71
    buildRendering: function() {
72
		
72
		
73
    	this.inherited(arguments);
73
    	this.inherited(arguments);
74
    	
74
    	
75
    	this._pane = new umc.widgets.ExpandingTitlePane({
75
    	this._pane = new umc.widgets.ExpandingTitlePane({
76
    		title:		this._("Progress information")
76
    		title:		this._("Log file view")
77
    	});
77
    	});
78
    	this.addChild(this._pane);
78
    	this.addChild(this._pane);
79
    	
79
    	
 Lines 99-105    Link Here 
99
    	
99
    	
100
    	// returns to the calling page
100
    	// returns to the calling page
101
    	this._close = new umc.widgets.Button({
101
    	this._close = new umc.widgets.Button({
102
    		label:		this._("back to overview"),
102
    		label:		this._("back"),
103
    		region:		'bottom',
103
    		region:		'bottom',
104
    		onClick:	dojo.hitch(this, function() {
104
    		onClick:	dojo.hitch(this, function() {
105
    			var tab = '';
105
    			var tab = '';
 Lines 110-116    Link Here 
110
    			// logic will revert to the first tab of our tab set.
110
    			// logic will revert to the first tab of our tab set.
111
    			if (this._reboot_required)
111
    			if (this._reboot_required)
112
    			{
112
    			{
113
    				//alert("Resetting return tab to 'Updates'");
114
    				this.last_tab = null;
113
    				this.last_tab = null;
115
    			}
114
    			}
116
    			if (this.last_tab)
115
    			if (this.last_tab)
 Lines 170-175    Link Here 
170
				    	this._allow_close(false);		// close button now invisible.
169
				    	this._allow_close(false);		// close button now invisible.
171
					}
170
					}
172
				}
171
				}
172
				if (data.result != '')				
173
				{
174
					// start the first call for 'update/installer/status' if we got a job name
175
					if ((this._interval) && (! this._timer))
176
					{
177
						this._timer = window.setTimeout(dojo.hitch(this, function() {
178
							this._timer = '';
179
							this._query_job_status();
180
						}),this._interval);
181
					}
182
				}
173
			}
183
			}
174
			else
184
			else
175
			{
185
			{
 Lines 188-271    Link Here 
188
				}
198
				}
189
				msg = msg + "<br/>&nbsp;<br/>";
199
				msg = msg + "<br/>&nbsp;<br/>";
190
				
200
				
191
				msg += this._statusfile_data(data.result);
192
				
201
				
193
				// -------------- DEBUG ------------------
194
//				for (var v in this._last_job)
195
//				{
196
//					msg += ("<br/>&nbsp;&nbsp;&nbsp;" + v + "&nbsp;=&nbsp;'" + this._last_job[v] + "'");
197
//				}
198
				// ---------------------------------------
199
				
200
				this._head.set('content',msg);
202
				this._head.set('content',msg);
201
				
203
				
202
				if (! data.result['running'])
204
				if (! data.result['running'])
203
				{
205
				{
206
				}
207
208
				if (data.result['running'])
209
				{
210
					// reschedule this as long as the job runs.
211
					if ((this._interval) && (! this._timer))
212
					{
213
						this._timer = window.setTimeout(dojo.hitch(this, function() {
214
							this._timer = '';
215
							this._query_job_status();
216
						}),this._interval);
217
					}
218
				}
219
				else
220
				{
204
					this._allow_close(true);		// does the rest.
221
					this._allow_close(true);		// does the rest.
205
				}
222
				}
206
223
207
				this._pane.layout();
224
				this._pane.layout();
225
208
			}
226
			}
209
		}
227
		}
210
228
211
		// establish the next call. Note this will be active as long
212
		// as the module is open.
213
		//
214
		// if this is called from outside (by means of 'startPolling()' we must
215
		// make sure that only one timer is active at any given time.
216
		if ((this._interval) && (! this._timer))
217
		{
218
			this._timer = window.setTimeout(dojo.hitch(this, function() {
219
				this._timer = '';
220
				this._query_job_status();
221
			}),this._interval);
222
		}
223
	},
229
	},
224
	
230
	
225
	// takes a status structure as returned from the 'updater/installer/status' call,
226
	// extracts the fields that came directly from the status file (if any) and
227
	// formats them into a one-liner. Returns an empty string if nothing matches.
228
	//
229
	// FOR TEST: now includes the 'reboot' flag if it is present.
230
	_statusfile_data: function(data) {
231
		
232
		var txt = '';
233
		
234
		for (var f in data)
235
		{
236
			// These fields are wrapped into underscores
237
			if ((f.substr(0,1) == '_') && (f.substr(-1,1) == '_'))
238
			{
239
				if (txt.length) { txt += ','; }
240
				txt += ' ' + f.substr(1,f.length-2) + "=" + data[f];
241
			}
242
		}
243
		
244
		if (data['reboot'])
245
		{
246
			txt += ' [REBOOT] ';
247
			if (! this._reboot_required)		// not set or not true
248
			{
249
				//alert("Setting REBOOT from _statusfile_data");
250
				this._reboot_required = true;
251
			}
252
		}
253
		
254
		if (txt != '')
255
		{
256
			txt = "(" + this._("Current status file content") + ":" + txt + ")<br/>";
257
		}
258
		
259
		return txt;
260
	},
261
	
262
	// queries job status. As long as we know a job key -> ask for full
231
	// queries job status. As long as we know a job key -> ask for full
263
	// details. The handler _process_job_status() handles this gracefully.
232
	// details. The handler _process_job_status() handles this gracefully.
264
	_query_job_status: function() {
233
	_query_job_status: function() {
265
		
234
		
266
		if (this._job_key == '')
235
		if (this._job_key == '')
267
		{
236
		{
268
			umc.tools.umcpCommand('updater/installer/running',{},false).then(
237
			umc.tools.umcpCommand(
238
				'updater/installer/running',{},false).then(
269
				dojo.hitch(this, function(data) {
239
				dojo.hitch(this, function(data) {
270
					this._query_success('updater/installer/running');
240
					this._query_success('updater/installer/running');
271
					this._process_job_status(data);
241
					this._process_job_status(data);
 Lines 314-349    Link Here 
314
					msg = msg + dojo.replace(this._("It took {elapsed} to complete.<br/>"),this._last_job);
284
					msg = msg + dojo.replace(this._("It took {elapsed} to complete.<br/>"),this._last_job);
315
				}
285
				}
316
				msg = msg + this._("You may return to the overview by clicking the 'back' button now.");
286
				msg = msg + this._("You may return to the overview by clicking the 'back' button now.");
317
				msg = msg + "<br/>&nbsp;<br/>";
287
				msg = msg + "<br/>&nbsp;<br/>";				
318
				
288
				
319
				msg += this._statusfile_data(this._last_job);
320
				
321
				// -------------- DEBUG ------------------
322
//				for (var v in this._last_job)
323
//				{
324
//					msg += ("<br/>&nbsp;&nbsp;&nbsp;" + v + "&nbsp;=&nbsp;'" + this._last_job[v] + "'");
325
//				}
326
				// ---------------------------------------
327
				
328
				this._head.set('content',msg);
289
				this._head.set('content',msg);
329
				
290
				
330
				this._log.stopWatching();		// now log is freely scrollable manually
291
				// set headers according to the outcome
331
				
292
				var status = 'success';
332
				//alert("Watching is finished, job is '" + this._job_key + "'");
293
				var lstat = this._last_job['_status_'];
333
				
294
				if ((lstat == undefined) || (lstat != 'DONE'))
334
				if ((this._last_job) && (this._last_job['reboot']))
335
				{
295
				{
336
					var reb = this._last_job['reboot'];
296
					status = 'failed';
337
					if (typeof(reb) == 'string')
338
					{
339
						reb = (reb == 'true');
340
					}
341
					if ((! this._reboot_required) || (reb != this._reboot_required))
342
					{
343
						//alert("setting REBOOT from _allow_close()");
344
						this._reboot_required = reb;
345
					}
346
				}
297
				}
298
				this._switch_headings(status);
299
				this._log.scrollToBottom();		// jump to bottom a very last time
300
				this._log.stopWatching();		// now log is freely scrollable manually
347
				
301
				
348
				this._last_job = null;	// can be deleted, but this._job_key should be retained!
302
				this._last_job = null;	// can be deleted, but this._job_key should be retained!
349
			}
303
			}
 Lines 393-398    Link Here 
393
		
347
		
394
		this.inherited(arguments);
348
		this.inherited(arguments);
395
		this._interval = 0;
349
		this._interval = 0;
350
	},
351
	
352
	// on switch to this page: set initial headings, and fetch
353
	// the 'job running' status at least once.
354
	onShow: function() {
355
		this._switch_headings('running');
356
		this._query_job_status();
357
	},
358
	
359
	// internal function that switches any heading variables of
360
	// our current page, according to the retrieved job status
361
	_switch_headings: function(status) {
362
		
363
		// avoid doing that repeatedly
364
		if (status == this._last_heading_status)
365
		{
366
			return;
367
		}
368
		
369
		this._last_heading_status = status;
370
371
		var headings = {
372
			'running': {
373
		    	title:			this._("Update in progress"),
374
		        headerText:		this._("Univention Updater is working"),
375
		        helpText:		this._("As long as the Univention Updater is updating your system, you're not allowed to manage settings or components. You may watch the progress, or close the module.")
376
			},
377
			'success': {
378
				title:			this._("Update finished"),
379
				headerText:		this._("Univention Updater job completed"),
380
				helpText:		this._("Univention Updater has successfully finished the current job. You may read through the log file. If you're finished you may press the 'back to overview' button to close this view.")
381
			},
382
			'failed': {
383
				title:			this._("Update failed"),
384
				headerText:		this._("Univention Updater job failed"),
385
				helpText:		this._("Univention Updater could not successfully complete the current job. The log file should show the cause of the failure. If you're finished examining the log file you may press the 'back to overview' button to close this view.")
386
			}
387
		};
388
		
389
		var info = headings[status];
390
		for (var v in info)
391
		{
392
			this.set(v,info[v]);
393
		}
394
		// this.layout();
395
				
396
	}
396
	}
397
397
398
});
398
});
(-)umc/js/_updater/ComponentsPage.js (-7 / +19 lines)
 Lines 229-241    Link Here 
229
			moduleStore:	umc.store.getModuleStore('name','updater/components'),
229
			moduleStore:	umc.store.getModuleStore('name','updater/components'),
230
			actions:		actions,
230
			actions:		actions,
231
			columns:		columns,
231
			columns:		columns,
232
			polling:	{
232
//			polling:	{
233
				interval:	5000,
233
//				interval:	5000,
234
				query:		'updater/components/serial',
234
//				query:		'updater/components/serial',
235
				callback:	dojo.hitch(this, function() {
235
//				callback:	dojo.hitch(this, function() {
236
					this.refresh(true);
236
//					this.refresh(true);
237
				})
237
//				})
238
			}
238
//			}
239
    	});
239
    	});
240
    	
240
    	
241
    	this.addChild(this._grid);
241
    	this.addChild(this._grid);
 Lines 313-318    Link Here 
313
	// removes a component
313
	// removes a component
314
	_delete_components: function(ids) {
314
	_delete_components: function(ids) {
315
315
316
		// multiAction callback is fired even if nothing
317
		// is selected?
318
		if (! ids.length)
319
		{
320
			return;
321
		}
316
		var msg = dojo.replace(this._("Are you sure you want to delete the following components: [{ids}]"),{ids: ids});
322
		var msg = dojo.replace(this._("Are you sure you want to delete the following components: [{ids}]"),{ids: ids});
317
		umc.dialog.confirm(msg,
323
		umc.dialog.confirm(msg,
318
		[
324
		[
 Lines 341-346    Link Here 
341
		]);
347
		]);
342
	},
348
	},
343
	
349
	
350
	onShow: function() {
351
		
352
		this.inherited(arguments);
353
		this.refresh();
354
	},
355
	
344
	// gives a means to restart polling after reauthentication
356
	// gives a means to restart polling after reauthentication
345
	startPolling: function() {
357
	startPolling: function() {
346
		this._grid.startPolling();
358
		this._grid.startPolling();
(-)umc/js/_updater/DetailsPage.js (-7 / +12 lines)
 Lines 69-76    Link Here 
69
    	            'default':	true,
69
    	            'default':	true,
70
    	            label:		this._("Apply changes"),
70
    	            label:		this._("Apply changes"),
71
    	            onClick: dojo.hitch(this, function() {
71
    	            onClick: dojo.hitch(this, function() {
72
    	            	this.standby(true);
72
    	            	this._form.onSubmit();
73
                        this._form.save(this._save_options);
74
    	            })
73
    	            })
75
            	}
74
            	}
76
    		]		        	
75
    		]		        	
 Lines 131-137    Link Here 
131
	    		type:			'TextBox',
130
	    		type:			'TextBox',
132
	    		name:			'version',
131
	    		name:			'version',
133
	    		label:			this._("Version"),
132
	    		label:			this._("Version"),
134
	    		regExp:			'^((([0-9]+\.[0-9]+|current),)*([0-9]+\.[0-9]+|current))?$'
133
	    		regExp:			'^((([0-9]+\\.[0-9]+|current),)*([0-9]+\\.[0-9]+|current))?$'
135
	    	}
134
	    	}
136
    	];
135
    	];
137
    
136
    
 Lines 161-167    Link Here 
161
    		widgets:		widgets,
160
    		widgets:		widgets,
162
    		layout:			layout,
161
    		layout:			layout,
163
    		//buttons:		buttons,
162
    		//buttons:		buttons,
164
    		moduleStore:	umc.store.getModuleStore('name','updater/components')
163
    		moduleStore:	umc.store.getModuleStore('name','updater/components'),
164
    		// This is (a) the submit handler of the form, but
165
    		// also (b) the onClick handler of the 'Apply' button
166
    		onSubmit: dojo.hitch(this,function() {
167
    	    	this._form.standby(true);
168
    	        this._form.save(this._save_options);
169
    		})	
165
    	});
170
    	});
166
    	this.addChild(this._form);
171
    	this.addChild(this._form);
167
    	
172
    	
 Lines 197-202    Link Here 
197
			this.set('helpText',this._("Please enter the details for the new component."));
202
			this.set('helpText',this._("Please enter the details for the new component."));
198
			
203
			
199
			this._form.setFormValues(data);
204
			this._form.setFormValues(data);
205
			this._form.standby(false);
200
206
201
			// Component name editable and focused?
207
			// Component name editable and focused?
202
			var nam = this._form.getWidget('name');
208
			var nam = this._form.getWidget('name');
 Lines 219-225    Link Here 
219
			this.set('headerText',dojo.replace(this._("Edit component details [{component}]"),{component:data}));
225
			this.set('headerText',dojo.replace(this._("Edit component details [{component}]"),{component:data}));
220
			this.set('helpText',this._("You're editing the details of the component definition."));
226
			this.set('helpText',this._("You're editing the details of the component definition."));
221
			
227
			
222
			this._form.load(data);
228
			this._form.load(data).then(dojo.hitch(this,function() { this._form.standby(false); }));
223
			
229
			
224
			// If we're in EDIT mode: don't allow changes to the component name.
230
			// If we're in EDIT mode: don't allow changes to the component name.
225
			this._form.getWidget('name').setDisabled(true);
231
			this._form.getWidget('name').setDisabled(true);
 Lines 233-239    Link Here 
233
	
239
	
234
	// return to grid view
240
	// return to grid view
235
	closeDetail: function() {
241
	closeDetail: function() {
236
	}
242
	}	
237
	
238
243
239
});
244
});
(-)umc/js/_updater/UpdatesPage.js (-20 / +47 lines)
 Lines 117-122    Link Here 
117
		 		// FIXME Manual placement: should be done by the layout framework some day.
117
		 		// FIXME Manual placement: should be done by the layout framework some day.
118
		 		style:			'width:300px;',
118
		 		style:			'width:300px;',
119
		 		onValuesLoaded:	dojo.hitch(this, function(values) {
119
		 		onValuesLoaded:	dojo.hitch(this, function(values) {
120
		 			// TODO check updater/installer/running, don't do anything if something IS running
120
		 			try
121
		 			try
121
		 			{
122
		 			{
122
		 				this._query_success('updater/updates/query');
123
		 				this._query_success('updater/updates/query');
 Lines 250-255    Link Here 
250
		 		callback:	dojo.hitch(this,function() {
251
		 		callback:	dojo.hitch(this,function() {
251
		 			var element = this._form.getWidget('releases');
252
		 			var element = this._form.getWidget('releases');
252
		 			var release = element.get('value');
253
		 			var release = element.get('value');
254
		 			// TODO check updater/installer/running, don't do action if a job is running
253
		 			this.runReleaseUpdate(release);
255
		 			this.runReleaseUpdate(release);
254
		 		}),
256
		 		}),
255
		 		visible:	false
257
		 		visible:	false
 Lines 258-263    Link Here 
258
   	            name:		'run_errata_update',
260
   	            name:		'run_errata_update',
259
     			label:		this._('Install errata update'),
261
     			label:		this._('Install errata update'),
260
     			callback:	dojo.hitch(this, function() {
262
     			callback:	dojo.hitch(this, function() {
263
		 			// TODO check updater/installer/running, don't do action if a job is running
261
     				this.runErrataUpdate();
264
     				this.runErrataUpdate();
262
     			}),
265
     			}),
263
		 		visible:	false
266
		 		visible:	false
 Lines 269-275    Link Here 
269
   	            	this._check_dist_upgrade();
272
   	            	this._check_dist_upgrade();
270
   	            })
273
   	            })
271
           	},
274
           	},
272
           	// to test the refresh code
275
           	// If refresh isn't automatic anymore... should we show a "Refresh" button?
273
//           	{
276
//           	{
274
//           		name:		'refresh',
277
//           		name:		'refresh',
275
//           		label:		this._("Refresh"),
278
//           		label:		this._("Refresh"),
 Lines 288-293    Link Here 
288
           		name:		'easy_upgrade',
291
           		name:		'easy_upgrade',
289
           		label:		this._("Start Upgrade"),		// FIXME Label not correct
292
           		label:		this._("Start Upgrade"),		// FIXME Label not correct
290
           		callback:	dojo.hitch(this, function() {
293
           		callback:	dojo.hitch(this, function() {
294
		 			// TODO check updater/installer/running, don't do action if a job is running
291
           			this.runEasyUpgrade();
295
           			this.runEasyUpgrade();
292
           		})
296
           		})
293
           	}
297
           	}
 Lines 343-356    Link Here 
343
       		widgets:		widgets,
347
       		widgets:		widgets,
344
       		layout:			layout,
348
       		layout:			layout,
345
       		buttons:		buttons,
349
       		buttons:		buttons,
346
       		moduleStore:	umc.store.getModuleStore(null,'updater/updates'),
350
       		moduleStore:	umc.store.getModuleStore(null,'updater/updates')
347
			polling:	{
351
//			polling:	{
348
				interval:	5000,
352
//				interval:	5000,
349
				query:		'updater/updates/serial',
353
//				query:		'updater/updates/serial',
350
				callback:	dojo.hitch(this, function() {
354
//				callback:	dojo.hitch(this, function() {
351
					this.refreshPage();
355
//					this.refreshPage();
352
				})
356
//				})
353
			}
357
//			}
354
       	});
358
       	});
355
       	
359
       	
356
       	// Before we attach the form to our page, just switch off all title panes.
360
       	// Before we attach the form to our page, just switch off all title panes.
 Lines 461-467    Link Here 
461
		}
465
		}
462
		catch(error)
466
		catch(error)
463
		{
467
		{
464
			console.error("set_upates_button: " + error.message);
468
			console.error("set_updates_button: " + error.message);
465
		}
469
		}
466
	},
470
	},
467
	
471
	
 Lines 541-547    Link Here 
541
		// pop a message up whenever the 'on' value changes
545
		// pop a message up whenever the 'on' value changes
542
		if (on != this._last_reboot)
546
		if (on != this._last_reboot)
543
		{
547
		{
544
			//alert("Reboot affordance changed to " + on);
545
			this._last_reboot = on;
548
			this._last_reboot = on;
546
		}
549
		}
547
		
550
		
 Lines 564-580    Link Here 
564
	},
567
	},
565
	
568
	
566
	// called when the 'reboot' button is pressed.
569
	// called when the 'reboot' button is pressed.
570
	// now with confirmation that doesn't depend on the 'confirmations' setting.
567
	_reboot: function() {
571
	_reboot: function() {
568
		
572
		
569
		this.standby(true);
573
		umc.dialog.confirm(
570
		umc.tools.umcpCommand('updater/installer/reboot').then(dojo.hitch(this, function() {
574
			this._("Do you really want to reboot the machine?"),
571
			this.standby(false);
575
			[
572
			this._show_reboot_pane(true,true);
576
			 	{
573
		}),
577
			 		label:		this._("Cancel"),
574
		dojo.hitch(this, function() {
578
			 		'default':	true
575
			this.standby(false);
579
			 	},
576
		})
580
			 	{
581
			 		label:		this._("Reboot"),
582
			 		callback:	dojo.hitch(this, function() {
583
			 			this.standby(true);
584
			 			umc.tools.umcpCommand('updater/installer/reboot').then(dojo.hitch(this, function() {
585
			 				this.standby(false);
586
			 				this._show_reboot_pane(true,true);
587
			 			}),
588
			 			dojo.hitch(this, function() {
589
			 				this.standby(false);
590
			 			})
591
			 			);
592
			 		})
593
			 	}
594
			]
577
		);
595
		);
596
578
	},
597
	},
579
	
598
	
580
	// First page refresh doesn't work properly when invoked in 'buildRendering()' so
599
	// First page refresh doesn't work properly when invoked in 'buildRendering()' so
 Lines 587-592    Link Here 
587
		
606
		
588
	},
607
	},
589
	
608
	
609
	// ensures refresh whenever we're returning from any action.
610
	onShow: function() {
611
		
612
		this.inherited(arguments);
613
		this.refreshPage(true);
614
	},
615
	
590
	// should refresh any data contained here. (can be called from outside when needed)
616
	// should refresh any data contained here. (can be called from outside when needed)
591
	// with 'force=true' the caller can request that even the affordance to 'check
617
	// with 'force=true' the caller can request that even the affordance to 'check
592
	// update availability' is reset to 'not yet checked'.
618
	// update availability' is reset to 'not yet checked'.
 Lines 601-607    Link Here 
601
	
627
	
602
	// gives a means to restart polling after reauthentication
628
	// gives a means to restart polling after reauthentication
603
	startPolling: function() {
629
	startPolling: function() {
604
		this._form.startPolling();
630
		// not needed anymore.
631
		// this._form.startPolling();
605
	},
632
	},
606
	
633
	
607
	// These functions are stubs that the 'updater' Module is listening to,
634
	// These functions are stubs that the 'updater' Module is listening to,
(-)umc/js/_updater/_LogViewer.js (-3 / +20 lines)
 Lines 148-158    Link Here 
148
		try
148
		try
149
		{
149
		{
150
			var oldpos = this._get_positions();
150
			var oldpos = this._get_positions();
151
			this._text.set('content',content);
151
			
152
			// check if we should scroll to bottom. We avoid that if the current position
153
			// is not at the end, indicating that the user has moved the pane manually.
154
			//
152
			// our height measure doesn't strictly reflect what we need, so we add a little tolerance:
155
			// our height measure doesn't strictly reflect what we need, so we add a little tolerance:
153
			// regard the positon 'at bottom' if its plus/minus 20px around zero
156
			// regard the positon 'at bottom' if its plus/minus 20px around zero
154
			if ( (this._first_call > 0) || ((oldpos['d_bottom'] > -20) && (oldpos['d_bottom'] < 20)))
157
			var to_scroll = false;
158
			if ( (this._first_call > 0) || ( /* (oldpos['d_bottom'] > -20) && */ (oldpos['d_bottom'] < 20)))
155
			{
159
			{
160
				to_scroll = true;
161
			}
162
163
			this._text.set('content',content);
164
			if (to_scroll)
165
			{
156
				this.scrollToBottom();
166
				this.scrollToBottom();
157
				if (this._first_call > 0)
167
				if (this._first_call > 0)
158
				{
168
				{
 Lines 184-189    Link Here 
184
	//	-	in the 'content' setter if the position is roughly at the bottom
194
	//	-	in the 'content' setter if the position is roughly at the bottom
185
	//
195
	//
186
	scrollToBottom: function() {
196
	scrollToBottom: function() {
197
		
198
		// we ignore any calls to 'scrollToBottom()' if we're not currently
199
		// watching. This makes the pane free movable at the 'return to overview'
200
		// prompt when a job is finished.
201
		if (this._check_interval == 0)
202
		{
203
			return;
204
		}
187
		var newpos = this._get_positions();
205
		var newpos = this._get_positions();
188
		var todo = true;
206
		var todo = true;
189
		var node = this._text.contentNode.parentNode;
207
		var node = this._text.contentNode.parentNode;
 Lines 228-234    Link Here 
228
	// A seperate function that is called by the 'ProgressPage' when the key of the
246
	// A seperate function that is called by the 'ProgressPage' when the key of the
229
	// current job has become known.
247
	// current job has become known.
230
	setJobKey: function(job) {
248
	setJobKey: function(job) {
231
		//alert("LogViewer::setJobKey('" + job + "')");
232
		this._current_job = job;
249
		this._current_job = job;
233
	},
250
	},
234
	
251
	
(-)umc/js/_updater/Form.js (+2 lines)
 Lines 31-36    Link Here 
31
dojo.provide("umc.modules._updater.Form");
31
dojo.provide("umc.modules._updater.Form");
32
32
33
dojo.require("umc.widgets.Form");
33
dojo.require("umc.widgets.Form");
34
dojo.require("umc.widgets.StandbyMixin");
34
dojo.require("umc.modules._updater._PollingMixin");
35
dojo.require("umc.modules._updater._PollingMixin");
35
36
36
// Form with some useful additions:
37
// Form with some useful additions:
 Lines 45-50    Link Here 
45
//
46
//
46
dojo.declare("umc.modules._updater.Form", [
47
dojo.declare("umc.modules._updater.Form", [
47
    umc.widgets.Form,
48
    umc.widgets.Form,
49
    umc.widgets.StandbyMixin,
48
    umc.modules._updater._PollingMixin
50
    umc.modules._updater._PollingMixin
49
	],
51
	],
50
{
52
{
(-)umc/js/de.po (-112 / +142 lines)
 Lines 3-9    Link Here 
3
msgstr ""
3
msgstr ""
4
"Project-Id-Version: univention-management-console-module-updater\n"
4
"Project-Id-Version: univention-management-console-module-updater\n"
5
"Report-Msgid-Bugs-To: packages@univention.de\n"
5
"Report-Msgid-Bugs-To: packages@univention.de\n"
6
"POT-Creation-Date: 2011-11-16 04:14+0100\n"
6
"POT-Creation-Date: 2011-11-28 11:09+0100\n"
7
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
7
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
8
"Last-Translator: Frank Greif <fg@it25.de>\n"
8
"Last-Translator: Frank Greif <fg@it25.de>\n"
9
"Language-Team: LANGUAGE <LL@li.org>\n"
9
"Language-Team: LANGUAGE <LL@li.org>\n"
 Lines 12-27    Link Here 
12
"Content-Type: text/plain; charset=UTF-8\n"
12
"Content-Type: text/plain; charset=UTF-8\n"
13
"Content-Transfer-Encoding: 8bit\n"
13
"Content-Transfer-Encoding: 8bit\n"
14
14
15
#: umc/js/_updater/UpdatesPage.js:195 umc/js/_updater/UpdatesPage.js:216
15
#: umc/js/_updater/UpdatesPage.js:196 umc/js/_updater/UpdatesPage.js:217
16
msgid "... loading data ..."
16
msgid "... loading data ..."
17
msgstr "... Daten werden geladen ..."
17
msgstr "... Daten werden geladen ..."
18
18
19
#: umc/js/_updater/ProgressPage.js:374
19
#: umc/js/_updater/ProgressPage.js:328
20
msgid "... loading job data ..."
20
msgid "... loading job data ..."
21
msgstr "... Daten werden geladen ..."
21
msgstr "... Daten werden geladen ..."
22
22
23
#: umc/js/_updater/_LogViewer.js:88 umc/js/_updater/_LogViewer.js:219
23
#: umc/js/_updater/_LogViewer.js:88 umc/js/_updater/_LogViewer.js:237
24
#: umc/js/_updater/_LogViewer.js:245
24
#: umc/js/_updater/_LogViewer.js:262
25
msgid "... loading log file ..."
25
msgid "... loading log file ..."
26
msgstr "... Protokolldatei wird geladen ..."
26
msgstr "... Protokolldatei wird geladen ..."
27
27
 Lines 33-39    Link Here 
33
msgid "Add"
33
msgid "Add"
34
msgstr "Neu"
34
msgstr "Neu"
35
35
36
#: umc/js/_updater/DetailsPage.js:196
36
#: umc/js/_updater/DetailsPage.js:201
37
msgid "Add a new component"
37
msgid "Add a new component"
38
msgstr "Neue Komponente hinzufügen"
38
msgstr "Neue Komponente hinzufügen"
39
39
 Lines 45-51    Link Here 
45
msgid "Additional components"
45
msgid "Additional components"
46
msgstr "Zusätzliche Komponenten"
46
msgstr "Zusätzliche Komponenten"
47
47
48
#: umc/js/_updater/DetailsPage.js:150
48
#: umc/js/_updater/DetailsPage.js:149
49
msgid "Advanced settings"
49
msgid "Advanced settings"
50
msgstr "Weitere Einstellungen"
50
msgstr "Weitere Einstellungen"
51
51
 Lines 61-71    Link Here 
61
msgid "Apply changes"
61
msgid "Apply changes"
62
msgstr "Änderungen anwenden"
62
msgstr "Änderungen anwenden"
63
63
64
#: umc/js/_updater/ComponentsPage.js:316
64
#: umc/js/_updater/ComponentsPage.js:322
65
msgid "Are you sure you want to delete the following components: [{ids}]"
65
msgid "Are you sure you want to delete the following components: [{ids}]"
66
msgstr "Möchten Sie die folgenden Komponenten wirklich löschen: [{ids}]"
66
msgstr "Möchten Sie die folgenden Komponenten wirklich löschen: [{ids}]"
67
67
68
#: umc/js/_updater/ProgressPage.js:67
68
#: umc/js/_updater/ProgressPage.js:375
69
msgid ""
69
msgid ""
70
"As long as the Univention Updater is updating your system, you're not "
70
"As long as the Univention Updater is updating your system, you're not "
71
"allowed to manage settings or components. You may watch the progress, or "
71
"allowed to manage settings or components. You may watch the progress, or "
 Lines 87-106    Link Here 
87
msgid "Available system updates"
87
msgid "Available system updates"
88
msgstr "Verfügbare System-Updates"
88
msgstr "Verfügbare System-Updates"
89
89
90
#: umc/js/_updater/DetailsPage.js:141
90
#: umc/js/_updater/DetailsPage.js:140
91
msgid "Basic settings"
91
msgid "Basic settings"
92
msgstr "Allgemeine Einstellungen"
92
msgstr "Allgemeine Einstellungen"
93
93
94
#: umc/js/updater.js:303 umc/js/updater.js:380
94
#: umc/js/updater.js:303 umc/js/updater.js:380
95
#: umc/js/_updater/ComponentsPage.js:322
95
#: umc/js/_updater/UpdatesPage.js:577 umc/js/_updater/ComponentsPage.js:328
96
msgid "Cancel"
96
msgid "Cancel"
97
msgstr "Abbrechen"
97
msgstr "Abbrechen"
98
98
99
#: umc/js/_updater/UpdatesPage.js:267 umc/js/_updater/UpdatesPage.js:459
99
#: umc/js/_updater/UpdatesPage.js:270 umc/js/_updater/UpdatesPage.js:463
100
msgid "Check for package updates"
100
msgid "Check for package updates"
101
msgstr "Paket-Aktualisierungen prüfen"
101
msgstr "Paket-Aktualisierungen prüfen"
102
102
103
#: umc/js/_updater/DetailsPage.js:93 umc/js/_updater/ComponentsPage.js:183
103
#: umc/js/_updater/DetailsPage.js:92 umc/js/_updater/ComponentsPage.js:183
104
msgid "Component Name"
104
msgid "Component Name"
105
msgstr "Name der Komponente"
105
msgstr "Name der Komponente"
106
106
 Lines 118-127    Link Here 
118
"Die Verbindung zum Server wurde unterbrochen. Ein erneuter Verbindungsaufbau "
118
"Die Verbindung zum Server wurde unterbrochen. Ein erneuter Verbindungsaufbau "
119
"wird gestartet."
119
"wird gestartet."
120
120
121
#: umc/js/_updater/ProgressPage.js:256
122
msgid "Current status file content"
123
msgstr "Inhalt der Statusdatei"
124
125
#: umc/js/_updater/ComponentsPage.js:167
121
#: umc/js/_updater/ComponentsPage.js:167
126
msgid "Delete"
122
msgid "Delete"
127
msgstr "Löschen"
123
msgstr "Löschen"
 Lines 130-140    Link Here 
130
msgid "Delete the selected component definition"
126
msgid "Delete the selected component definition"
131
msgstr "Diese Komponente löschen"
127
msgstr "Diese Komponente löschen"
132
128
133
#: umc/js/_updater/ComponentsPage.js:325
129
#: umc/js/_updater/ComponentsPage.js:331
134
msgid "Delete!"
130
msgid "Delete!"
135
msgstr "Löschen!"
131
msgstr "Löschen!"
136
132
137
#: umc/js/_updater/DetailsPage.js:98
133
#: umc/js/_updater/DetailsPage.js:97
138
msgid "Description"
134
msgid "Description"
139
msgstr "Beschreibung"
135
msgstr "Beschreibung"
140
136
 Lines 146-163    Link Here 
146
msgid "Disabled"
142
msgid "Disabled"
147
msgstr "Deaktiviert"
143
msgstr "Deaktiviert"
148
144
149
#: umc/js/updater.js:212
145
#: umc/js/updater.js:213
150
msgid "Do you really want to install all available errata updates?"
146
msgid "Do you really want to install all available errata updates?"
151
msgstr ""
147
msgstr ""
152
"Möchten Sie wirklich alle verfügbaren Errata-Aktualisierungen installieren?"
148
"Möchten Sie wirklich alle verfügbaren Errata-Aktualisierungen installieren?"
153
149
154
#: umc/js/updater.js:204
150
#: umc/js/updater.js:205
155
msgid "Do you really want to install release updates up to version {release}?"
151
msgid "Do you really want to install release updates up to version {release}?"
156
msgstr ""
152
msgstr ""
157
"Möchten Sie wirklich alle Release-Aktualisierungen bis zur Version "
153
"Möchten Sie wirklich alle Release-Aktualisierungen bis zur Version "
158
"'{release}' installieren?"
154
"'{release}' installieren?"
159
155
160
#: umc/js/updater.js:195
156
#: umc/js/updater.js:196
161
msgid "Do you really want to install the '{name}' component?"
157
msgid "Do you really want to install the '{name}' component?"
162
msgstr "Möchten Sie wirklich die Komponente '{name}' installieren?"
158
msgstr "Möchten Sie wirklich die Komponente '{name}' installieren?"
163
159
 Lines 169-175    Link Here 
169
"Möchten Sie wirklich die genannten Pakete aktualisieren, installieren bzw. "
165
"Möchten Sie wirklich die genannten Pakete aktualisieren, installieren bzw. "
170
"entfernen?"
166
"entfernen?"
171
167
172
#: umc/js/updater.js:225
168
#: umc/js/_updater/UpdatesPage.js:574
169
msgid "Do you really want to reboot the machine?"
170
msgstr "Möchten Sie die Maschine jetzt neu starten?"
171
172
#: umc/js/updater.js:226
173
msgid "Do you really want to upgrade your system?"
173
msgid "Do you really want to upgrade your system?"
174
msgstr "Möchten Sie Ihr System jetzt aktualisieren?"
174
msgstr "Möchten Sie Ihr System jetzt aktualisieren?"
175
175
 Lines 193-199    Link Here 
193
msgid "Edit"
193
msgid "Edit"
194
msgstr "Bearbeiten"
194
msgstr "Bearbeiten"
195
195
196
#: umc/js/_updater/DetailsPage.js:219
196
#: umc/js/_updater/DetailsPage.js:225
197
msgid "Edit component details [{component}]"
197
msgid "Edit component details [{component}]"
198
msgstr "Komponenten-Details [{component}] bearbeiten"
198
msgstr "Komponenten-Details [{component}] bearbeiten"
199
199
 Lines 205-211    Link Here 
205
msgid "Enable"
205
msgid "Enable"
206
msgstr "Aktivieren"
206
msgstr "Aktivieren"
207
207
208
#: umc/js/_updater/DetailsPage.js:88
208
#: umc/js/_updater/DetailsPage.js:87
209
msgid "Enable this component"
209
msgid "Enable this component"
210
msgstr "Diese Komponente aktivieren"
210
msgstr "Diese Komponente aktivieren"
211
211
 Lines 213-219    Link Here 
213
msgid "Enable/disable this component"
213
msgid "Enable/disable this component"
214
msgstr "Diese Komponente aktivieren"
214
msgstr "Diese Komponente aktivieren"
215
215
216
#: umc/js/_updater/UpdatesPage.js:325
216
#: umc/js/_updater/UpdatesPage.js:329
217
msgid "Errata updates"
217
msgid "Errata updates"
218
msgstr "Errata-Aktualisierungen"
218
msgstr "Errata-Aktualisierungen"
219
219
 Lines 233-251    Link Here 
233
"Um die kürzlich ausgeführte Installer-Aktion fertigzustellen, ist es "
233
"Um die kürzlich ausgeführte Installer-Aktion fertigzustellen, ist es "
234
"erforderlich, die Maschine neu zu starten."
234
"erforderlich, die Maschine neu zu starten."
235
235
236
#: umc/js/_updater/ComponentsPage.js:128
236
#: umc/js/updater.js:307 umc/js/_updater/ComponentsPage.js:128
237
msgid "Install"
237
msgid "Install"
238
msgstr "Installieren"
238
msgstr "Installieren"
239
239
240
#: umc/js/_updater/UpdatesPage.js:259
240
#: umc/js/_updater/UpdatesPage.js:261
241
msgid "Install errata update"
241
msgid "Install errata update"
242
msgstr "Errata-Aktualisierungen installieren"
242
msgstr "Errata-Aktualisierungen installieren"
243
243
244
#: umc/js/_updater/UpdatesPage.js:458
244
#: umc/js/_updater/UpdatesPage.js:462
245
msgid "Install package updates"
245
msgid "Install package updates"
246
msgstr "Paket-Aktualisierungen installieren"
246
msgstr "Paket-Aktualisierungen installieren"
247
247
248
#: umc/js/_updater/UpdatesPage.js:249
248
#: umc/js/_updater/UpdatesPage.js:250
249
msgid "Install release update"
249
msgid "Install release update"
250
msgstr "Release-Aktualisierungen installieren"
250
msgstr "Release-Aktualisierungen installieren"
251
251
 Lines 273-292    Link Here 
273
"Tests in einer Testumgebung und die Erstellung einer Sicherung des Systems "
273
"Tests in einer Testumgebung und die Erstellung einer Sicherung des Systems "
274
"werden ebenfalls empfohlen."
274
"werden ebenfalls empfohlen."
275
275
276
#: umc/js/_updater/ProgressPage.js:314
276
#: umc/js/_updater/ProgressPage.js:284
277
msgid "It took {elapsed} to complete.<br/>"
277
msgid "It took {elapsed} to complete.<br/>"
278
msgstr "Er hat {elapsed} benötigt.<br/>"
278
msgstr "Er hat {elapsed} benötigt.<br/>"
279
279
280
#: umc/js/_updater/ProgressPage.js:76
281
msgid "Log file view"
282
msgstr "Protokoll"
283
280
#: umc/js/updater.js:361
284
#: umc/js/updater.js:361
281
msgid "Logfiles can be found in the directory /var/log/univention/."
285
msgid "Logfiles can be found in the directory /var/log/univention/."
282
msgstr "Logdateien können im Verzeichnis /var/log/univention/ gefunden werden."
286
msgstr "Logdateien können im Verzeichnis /var/log/univention/ gefunden werden."
283
287
284
#: umc/js/_updater/UpdatesPage.js:413
288
#: umc/js/_updater/UpdatesPage.js:417
285
msgid "No errata updates for the current version are installed."
289
msgid "No errata updates for the current version are installed."
286
msgstr ""
290
msgstr ""
287
"Für die aktuelle Version sind keine Errata-Aktualisierungen installiert."
291
"Für die aktuelle Version sind keine Errata-Aktualisierungen installiert."
288
292
289
#: umc/js/_updater/UpdatesPage.js:435
293
#: umc/js/_updater/UpdatesPage.js:439
290
msgid "None of them are currently enabled."
294
msgid "None of them are currently enabled."
291
msgstr "Davon sind momentan keine aktiviert."
295
msgstr "Davon sind momentan keine aktiviert."
292
296
 Lines 295-302    Link Here 
295
"Nonetheless, the update proceeds and the update can be monitored from a new "
299
"Nonetheless, the update proceeds and the update can be monitored from a new "
296
"UMC session. "
300
"UMC session. "
297
msgstr ""
301
msgstr ""
298
"Das Update wird trotzdem weiter durchgeführt, der Vorgang kann in einer neuen "
302
"Das Update wird trotzdem weiter durchgeführt, der Vorgang kann in einer "
299
"UMC-Sitzung weiter beobachtet werden. "
303
"neuen UMC-Sitzung weiter beobachtet werden. "
300
304
301
#: umc/js/_updater/ComponentsPage.js:216
305
#: umc/js/_updater/ComponentsPage.js:216
302
msgid "Not found"
306
msgid "Not found"
 Lines 307-316    Link Here 
307
"On this page, you find all additional components defined for this system. "
311
"On this page, you find all additional components defined for this system. "
308
"You can enable/disable/edit/delete them, and you can add new ones here."
312
"You can enable/disable/edit/delete them, and you can add new ones here."
309
msgstr ""
313
msgstr ""
310
"Auf dieser Seite sehen Sie alle Komponenten, die für "
314
"Auf dieser Seite sehen Sie alle Komponenten, die für dieses System definiert "
311
"dieses System definiert sind, Die Komponenten können aktiviert oder "
315
"sind, Die Komponenten können aktiviert oder deaktiviert werden, Details "
312
"deaktiviert werden, Details einer Komponente können geändert, Komponenten "
316
"einer Komponente können geändert, Komponenten gelöscht oder unter bestimmten "
313
"gelöscht oder unter bestimmten Umständen installiert werden."
317
"Umständen installiert werden."
314
318
315
#: umc/js/_updater/ComponentsPage.js:90
319
#: umc/js/_updater/ComponentsPage.js:90
316
msgid "On/Off"
320
msgid "On/Off"
 Lines 321-335    Link Here 
321
msgstr ""
325
msgstr ""
322
"Überblick über Software-Aktualisierungen, die das Gesamtsystem betreffen"
326
"Überblick über Software-Aktualisierungen, die das Gesamtsystem betreffen"
323
327
324
#: umc/js/_updater/UpdatesPage.js:145 umc/js/_updater/UpdatesPage.js:237
328
#: umc/js/_updater/UpdatesPage.js:146 umc/js/_updater/UpdatesPage.js:238
325
msgid "Package update status not yet checked"
329
msgid "Package update status not yet checked"
326
msgstr "Der Paket-Aktualisierungsstatus wurde noch nicht geprüft."
330
msgstr "Der Paket-Aktualisierungsstatus wurde noch nicht geprüft."
327
331
328
#: umc/js/_updater/UpdatesPage.js:333
332
#: umc/js/_updater/UpdatesPage.js:337
329
msgid "Package updates"
333
msgid "Package updates"
330
msgstr "Paketaktualisierungen"
334
msgstr "Paketaktualisierungen"
331
335
332
#: umc/js/_updater/DetailsPage.js:128
336
#: umc/js/_updater/UpdatesPage.js:490
337
msgid "Package updates are available."
338
msgstr "Es sind Paket-Aktualisierungen verfügbar."
339
340
#: umc/js/_updater/DetailsPage.js:127
333
msgid "Password"
341
msgid "Password"
334
msgstr "Passwort"
342
msgstr "Passwort"
335
343
 Lines 346-368    Link Here 
346
"jeweiligen Update in dem <a href='http://forum.univention.de'>Univention "
354
"jeweiligen Update in dem <a href='http://forum.univention.de'>Univention "
347
"Forum</a>."
355
"Forum</a>."
348
356
349
#: umc/js/_updater/DetailsPage.js:197
357
#: umc/js/_updater/DetailsPage.js:202
350
msgid "Please enter the details for the new component."
358
msgid "Please enter the details for the new component."
351
msgstr "Bitte geben Sie die Details für die neue Komponente ein."
359
msgstr "Bitte geben Sie die Details für die neue Komponente ein."
352
360
353
#: umc/js/_updater/ProgressPage.js:76
361
#: umc/js/_updater/UpdatesPage.js:285 umc/js/_updater/UpdatesPage.js:581
354
msgid "Progress information"
355
msgstr "Aktueller Vorgang"
356
357
#: umc/js/_updater/UpdatesPage.js:282
358
msgid "Reboot"
362
msgid "Reboot"
359
msgstr "Neu starten"
363
msgstr "Neu starten"
360
364
361
#: umc/js/_updater/UpdatesPage.js:299
365
#: umc/js/_updater/UpdatesPage.js:303
362
msgid "Reboot required"
366
msgid "Reboot required"
363
msgstr "Neustart erforderlich"
367
msgstr "Neustart erforderlich"
364
368
365
#: umc/js/_updater/UpdatesPage.js:275 umc/js/_updater/ComponentsPage.js:75
369
#: umc/js/_updater/UpdatesPage.js:278 umc/js/_updater/ComponentsPage.js:75
366
msgid "Refresh"
370
msgid "Refresh"
367
msgstr "Aktualisieren"
371
msgstr "Aktualisieren"
368
372
 Lines 370-399    Link Here 
370
msgid "Refresh display to see current values"
374
msgid "Refresh display to see current values"
371
msgstr "Anzeige aktualisieren"
375
msgstr "Anzeige aktualisieren"
372
376
373
#: umc/js/_updater/UpdatesPage.js:307
377
#: umc/js/_updater/UpdatesPage.js:311
374
msgid "Release information"
378
msgid "Release information"
375
msgstr "Aktueller Status"
379
msgstr "Aktueller Status"
376
380
377
#: umc/js/_updater/UpdatesPage.js:315
381
#: umc/js/_updater/UpdatesPage.js:319
378
msgid "Release updates"
382
msgid "Release updates"
379
msgstr "Release-Aktualisierungen"
383
msgstr "Release-Aktualisierungen"
380
384
381
#: umc/js/_updater/DetailsPage.js:108
385
#: umc/js/_updater/SettingsPage.js:86 umc/js/_updater/DetailsPage.js:107
382
msgid "Repository prefix"
386
msgid "Repository prefix"
383
msgstr "Repository-Prefix"
387
msgstr "Repository prefix"
384
388
385
#: umc/js/_updater/DetailsPage.js:103
389
#: umc/js/_updater/SettingsPage.js:81 umc/js/_updater/DetailsPage.js:102
386
msgid "Repository server"
390
msgid "Repository server"
387
msgstr "Repository-Server"
391
msgstr "Repository server"
388
392
389
#: umc/js/_updater/SettingsPage.js:86
390
msgid "Repository prefix"
391
msgstr "Repository-Prefix"
392
393
#: umc/js/_updater/SettingsPage.js:81
394
msgid "Repository server"
395
msgstr "Repository-Server"
396
397
#: umc/js/_updater/SettingsPage.js:54
393
#: umc/js/_updater/SettingsPage.js:54
398
msgid "Reset"
394
msgid "Reset"
399
msgstr "Zurücksetzen"
395
msgstr "Zurücksetzen"
 Lines 406-416    Link Here 
406
msgid "Settings for online updates"
402
msgid "Settings for online updates"
407
msgstr "Einstellungen für Online-Aktualisierung"
403
msgstr "Einstellungen für Online-Aktualisierung"
408
404
409
#: umc/js/_updater/UpdatesPage.js:486
405
#: umc/js/_updater/UpdatesPage.js:292
410
msgid "Package updates are available."
411
msgstr "Es sind Paket-Aktualisierungen verfügbar."
412
413
#: umc/js/_updater/UpdatesPage.js:289
414
msgid "Start Upgrade"
406
msgid "Start Upgrade"
415
msgstr "Aktualisierung starten"
407
msgstr "Aktualisierung starten"
416
408
 Lines 418-424    Link Here 
418
msgid "Start Upgrade?"
410
msgid "Start Upgrade?"
419
msgstr "Aktualisierung starten?"
411
msgstr "Aktualisierung starten?"
420
412
421
#: umc/js/updater.js:307 umc/js/updater.js:383
413
#: umc/js/updater.js:383
422
msgid "Start!"
414
msgid "Start!"
423
msgstr "Start!"
415
msgstr "Start!"
424
416
 Lines 426-500    Link Here 
426
msgid "Status"
418
msgid "Status"
427
msgstr "Status"
419
msgstr "Status"
428
420
421
#: umc/js/updater.js:408
422
msgid ""
423
"The Univention Updater action could not be started [Error {status}]: "
424
"{message}"
425
msgstr ""
426
"Der Univention Updater konnte nicht gestartet werden [Fehler {status}]: "
427
"{message}"
428
429
#: umc/js/_updater/UpdatesPage.js:71
430
msgid "The computer is now rebooting. "
431
msgstr "Der Computer wird jetzt neu gestartet. "
432
429
#: umc/js/updater.js:555
433
#: umc/js/updater.js:555
430
msgid ""
434
msgid ""
431
"The connection to the server was lost, trying to reconnect. You may need to "
435
"The connection to the server was lost, trying to reconnect. You may need to "
432
"re-authenticate when the connection is restored."
436
"re-authenticate when the connection is restored."
433
msgstr ""
437
msgstr ""
434
"Die Verbindung zum Server ist unterbrochen. Es wird versucht, die "
438
"Die Verbindung zum Server ist unterbrochen. Es wird versucht, die Verbindung "
435
"Verbindung wieder aufzunehmen. Wahrscheinlich müssen Sie sich neu anmelden, "
439
"wieder aufzunehmen. Wahrscheinlich müssen Sie sich neu anmelden, wenn die "
436
"wenn die Verbindung wieder hergestellt ist."
440
"Verbindung wieder hergestellt ist."
437
441
438
#: umc/js/_updater/ProgressPage.js:311
442
#: umc/js/_updater/ProgressPage.js:281
439
msgid "The current job (<b>{label}</b>) is now finished.<br/>"
443
msgid "The current job (<b>{label}</b>) is now finished.<br/>"
440
msgstr "Der aktuelle Vorgang (<b>{label}</b>) ist jetzt beendet.<br/>"
444
msgstr "Der aktuelle Vorgang (<b>{label}</b>) ist jetzt beendet.<br/>"
441
445
442
#: umc/js/_updater/UpdatesPage.js:388
446
#: umc/js/_updater/UpdatesPage.js:392
443
msgid "The currently installed release version is {ucs_version}"
447
msgid "The currently installed release version is {ucs_version}"
444
msgstr "Die momentan installierte Version ist {ucs_version}"
448
msgstr "Die momentan installierte Version ist {ucs_version}"
445
449
446
#: umc/js/_updater/UpdatesPage.js:395
450
#: umc/js/_updater/UpdatesPage.js:399
447
msgid ""
451
msgid ""
448
"The currently installed release version is {ucs_version} errata{erratalevel}"
452
"The currently installed release version is {ucs_version} errata{erratalevel}"
449
msgstr ""
453
msgstr ""
450
"Die momentan installierte Version ist {ucs_version} errata{erratalevel}"
454
"Die momentan installierte Version ist {ucs_version} errata{erratalevel}"
451
455
452
#: umc/js/updater.js:408
456
#: umc/js/_updater/ProgressPage.js:193
453
msgid "The Univention Updater action could not be started [Error {status}]: {message}"
454
msgstr ""
455
"Der Univention Updater konnte nicht gestartet werden [Fehler {status}]: "
456
"{message}"
457
458
#: umc/js/_updater/ProgressPage.js:183
459
msgid "The job <b>{label}</b> (started {elapsed} ago) is currently running."
457
msgid "The job <b>{label}</b> (started {elapsed} ago) is currently running."
460
msgstr ""
458
msgstr ""
461
"Momentan läuft der Aktualisierungsauftrag <b>{label}</b> (gestartet vor "
459
"Momentan läuft der Aktualisierungsauftrag <b>{label}</b> (gestartet vor "
462
"{elapsed})"
460
"{elapsed})"
463
461
464
#: umc/js/_updater/UpdatesPage.js:71
462
#: umc/js/_updater/UpdatesPage.js:420
465
msgid "The computer is now rebooting. "
466
msgstr "Der Computer wird jetzt neu gestartet. "
467
468
#: umc/js/_updater/UpdatesPage.js:416
469
msgid "The most recent errata update is {latest_errata_update}."
463
msgid "The most recent errata update is {latest_errata_update}."
470
msgstr ""
464
msgstr ""
471
"Die neueste verfügbare Errata-Aktualisierung ist {latest_errata_update}."
465
"Die neueste verfügbare Errata-Aktualisierung ist {latest_errata_update}."
472
466
473
#: umc/js/_updater/UpdatesPage.js:433
467
#: umc/js/_updater/UpdatesPage.js:437
474
msgid "The system knows about {components} components."
468
msgid "The system knows about {components} components."
475
msgstr "Dem System sind {components} Komponenten bekannt."
469
msgstr "Dem System sind {components} Komponenten bekannt."
476
470
477
#: umc/js/_updater/UpdatesPage.js:429
471
#: umc/js/_updater/UpdatesPage.js:433
478
msgid "There are no components configured for this system."
472
msgid "There are no components configured for this system."
479
msgstr "Momentan sind keine Komponenten konfiguriert."
473
msgstr "Momentan sind keine Komponenten konfiguriert."
480
474
481
#: umc/js/_updater/UpdatesPage.js:417
475
#: umc/js/_updater/UpdatesPage.js:421
482
msgid "There are no errata updates available for the current release."
476
msgid "There are no errata updates available for the current release."
483
msgstr "Es sind keine Errata-Aktualisierungen für das aktuelle Release verfügbar."
477
msgstr ""
478
"Es sind keine Errata-Aktualisierungen für das aktuelle Release verfügbar."
484
479
485
#: umc/js/_updater/UpdatesPage.js:487
480
#: umc/js/_updater/UpdatesPage.js:491
486
msgid "There are no package updates available."
481
msgid "There are no package updates available."
487
msgstr "Es sind keine Paket-Aktualisierungen verfügbar."
482
msgstr "Es sind keine Paket-Aktualisierungen verfügbar."
488
483
489
#: umc/js/_updater/UpdatesPage.js:201
484
#: umc/js/_updater/UpdatesPage.js:202
490
msgid "There are no release updates available."
485
msgid "There are no release updates available."
491
msgstr "Es sind keine Release-Aktualisierungen verfügbar."
486
msgstr "Es sind keine Release-Aktualisierungen verfügbar."
492
487
493
#: umc/js/_updater/UpdatesPage.js:404
488
#: umc/js/_updater/UpdatesPage.js:408
494
msgid "There are no updates available."
489
msgid "There are no updates available."
495
msgstr "Es sind keine Aktualisierungen verfügbar."
490
msgstr "Es sind keine Aktualisierungen verfügbar."
496
491
497
#: umc/js/_updater/UpdatesPage.js:403
492
#: umc/js/_updater/UpdatesPage.js:407
498
msgid "There are updates available."
493
msgid "There are updates available."
499
msgstr "Es sind Aktualisierungen verfügbar."
494
msgstr "Es sind Aktualisierungen verfügbar."
500
495
 Lines 514-532    Link Here 
514
msgid "Thus, updates shouldn't be installed on a live system. "
509
msgid "Thus, updates shouldn't be installed on a live system. "
515
msgstr "Deshalb sollten Sie das Update nicht im laufenden Betrieb einspielen. "
510
msgstr "Deshalb sollten Sie das Update nicht im laufenden Betrieb einspielen. "
516
511
517
#: umc/js/_updater/ProgressPage.js:66
512
#: umc/js/_updater/ProgressPage.js:385
513
msgid ""
514
"Univention Updater could not successfully complete the current job. The log "
515
"file should show the cause of the failure. If you're finished examining the "
516
"log file you may press the 'back to overview' button to close this view."
517
msgstr ""
518
"Univention Updater konnte den aktuellen Auftrag nicht erfolgreich "
519
"abschließen. Im Protokoll sollten Sie die Ursache des Fehlschlages sehen "
520
"können. Der Knopf 'zurück zur Übersicht' schließt die aktuelle Ansicht."
521
522
#: umc/js/_updater/ProgressPage.js:380
523
msgid ""
524
"Univention Updater has successfully finished the current job. You may read "
525
"through the log file. If you're finished you may press the 'back to "
526
"overview' button to close this view."
527
msgstr ""
528
"Univention Updater hat den aktuellen Auftrag erfolgreich abgeschlossen. "
529
530
#: umc/js/_updater/ProgressPage.js:374
518
msgid "Univention Updater is working"
531
msgid "Univention Updater is working"
519
msgstr "Univention Updater ist gerade aktiv"
532
msgstr "Univention Updater ist gerade aktiv"
520
533
534
#: umc/js/_updater/ProgressPage.js:379
535
msgid "Univention Updater job completed"
536
msgstr "Univention Updater Auftrag abgeschlossen"
537
538
#: umc/js/_updater/ProgressPage.js:384
539
msgid "Univention Updater job failed"
540
msgstr "Univention Updater Auftrag ist fehlgeschlagen"
541
521
#: umc/js/_updater/ComponentsPage.js:218
542
#: umc/js/_updater/ComponentsPage.js:218
522
msgid "Unknown"
543
msgid "Unknown"
523
msgstr "Unbekannt"
544
msgstr "Unbekannt"
524
545
525
#: umc/js/_updater/UpdatesPage.js:491
546
#: umc/js/_updater/UpdatesPage.js:495
526
msgid "Update availability could not be checked."
547
msgid "Update availability could not be checked."
527
msgstr "Verfügbarkeit von Aktualisierungen konnte nicht geprüft werden."
548
msgstr "Verfügbarkeit von Aktualisierungen konnte nicht geprüft werden."
528
549
529
#: umc/js/_updater/ProgressPage.js:65
550
#: umc/js/_updater/ProgressPage.js:383
551
msgid "Update failed"
552
msgstr "Aktualisierung fehlgeschlagen"
553
554
#: umc/js/_updater/ProgressPage.js:378
555
msgid "Update finished"
556
msgstr "Aktualisierung abgeschlossen"
557
558
#: umc/js/_updater/ProgressPage.js:373
530
msgid "Update in progress"
559
msgid "Update in progress"
531
msgstr "Aktualisierung läuft"
560
msgstr "Aktualisierung läuft"
532
561
 Lines 542-560    Link Here 
542
msgid "Updates"
571
msgid "Updates"
543
msgstr "Aktualisierungen"
572
msgstr "Aktualisierungen"
544
573
545
#: umc/js/_updater/SettingsPage.js:91 umc/js/_updater/DetailsPage.js:113
574
#: umc/js/_updater/SettingsPage.js:91 umc/js/_updater/DetailsPage.js:112
546
msgid "Use maintained repositories"
575
msgid "Use maintained repositories"
547
msgstr "'Maintained' Repositories benutzen"
576
msgstr "'Maintained' Repositories benutzen"
548
577
549
#: umc/js/_updater/SettingsPage.js:96 umc/js/_updater/DetailsPage.js:118
578
#: umc/js/_updater/SettingsPage.js:96 umc/js/_updater/DetailsPage.js:117
550
msgid "Use unmaintained repositories"
579
msgid "Use unmaintained repositories"
551
msgstr "'Unmaintained' Repositories benutzen"
580
msgstr "'Unmaintained' Repositories benutzen"
552
581
553
#: umc/js/_updater/DetailsPage.js:123
582
#: umc/js/_updater/DetailsPage.js:122
554
msgid "Username"
583
msgid "Username"
555
msgstr "Benutzername"
584
msgstr "Benutzername"
556
585
557
#: umc/js/_updater/DetailsPage.js:133
586
#: umc/js/_updater/DetailsPage.js:132
558
msgid "Version"
587
msgid "Version"
559
msgstr "Version"
588
msgstr "Version"
560
589
 Lines 566-582    Link Here 
566
"Wenn die Verbindung wieder hergestellt ist, werden Sie aufgefordert, sich "
595
"Wenn die Verbindung wieder hergestellt ist, werden Sie aufgefordert, sich "
567
"noch einmal neu anzumelden."
596
"noch einmal neu anzumelden."
568
597
569
#: umc/js/_updater/ProgressPage.js:316
598
#: umc/js/_updater/ProgressPage.js:286
570
msgid "You may return to the overview by clicking the 'back' button now."
599
msgid "You may return to the overview by clicking the 'back' button now."
571
msgstr ""
600
msgstr ""
572
"Sie können jetzt zur Übersicht zurückkehren, indem Sie den 'Zurück'-Knopf "
601
"Sie können jetzt zur Übersicht zurückkehren, indem Sie den 'Zurück'-Knopf "
573
"drücken."
602
"drücken."
574
603
575
#: umc/js/_updater/ProgressPage.js:187
604
#: umc/js/_updater/ProgressPage.js:197
576
msgid "You're currently watching its log file <b>{logfile}</b>"
605
msgid "You're currently watching its log file <b>{logfile}</b>"
577
msgstr "Sie sehen die Protokolldatei <b>{logfile}</b>"
606
msgstr "Sie sehen die Protokolldatei <b>{logfile}</b>"
578
607
579
#: umc/js/_updater/DetailsPage.js:220
608
#: umc/js/_updater/DetailsPage.js:226
580
msgid "You're editing the details of the component definition."
609
msgid "You're editing the details of the component definition."
581
msgstr "Sie bearbeiten die Details der Komponenten-Definition."
610
msgstr "Sie bearbeiten die Details der Komponenten-Definition."
582
611
 Lines 588-598    Link Here 
588
"Ihre aktuelle Sitzung ist abgelaufen, oder die Verbindung zum Server war "
617
"Ihre aktuelle Sitzung ist abgelaufen, oder die Verbindung zum Server war "
589
"verlorengegangen. Sie müssen sich noch einmal neu anmelden."
618
"verlorengegangen. Sie müssen sich noch einmal neu anmelden."
590
619
591
#: umc/js/_updater/UpdatesPage.js:412
620
#: umc/js/_updater/UpdatesPage.js:416
592
msgid "Your system is at errata level {erratalevel}."
621
msgid "Your system is at errata level {erratalevel}."
593
msgstr "Ihr System ist auf dem Errata-Level {erratalevel}."
622
msgstr "Ihr System ist auf dem Errata-Level {erratalevel}."
594
623
595
#: umc/js/_updater/DetailsPage.js:55 umc/js/_updater/ProgressPage.js:102
624
#: umc/js/_updater/ProgressPage.js:102
625
msgid "back"
626
msgstr "Zurück"
627
628
#: umc/js/_updater/DetailsPage.js:55
596
msgid "back to overview"
629
msgid "back to overview"
597
msgstr "zurück zur Übersicht"
630
msgstr "zurück zur Übersicht"
598
631
 Lines 608-616    Link Here 
608
msgid "{count} packages to be updated"
641
msgid "{count} packages to be updated"
609
msgstr "{count} Pakete werden aktualisiert"
642
msgstr "{count} Pakete werden aktualisiert"
610
643
611
#: umc/js/_updater/UpdatesPage.js:436
644
#: umc/js/_updater/UpdatesPage.js:440
612
msgid "{enabled} of them are currently enabled."
645
msgid "{enabled} of them are currently enabled."
613
msgstr "Davon sind {enabled} Komponenten aktiviert."
646
msgstr "Davon sind {enabled} Komponenten aktiviert."
614
615
#~ msgid "Use hotfix repositories"
616
#~ msgstr "'Hotfix' Repositories benutzen"

Return to bug 22898