# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: joseph.lee22590@gmail.com-20130413020512-\
#   au69dt13jbqwddyn
# target_branch: http://bzr.nvaccess.org/nvda/main/
# testament_sha1: 46bb15b71d50475643847422488992329d07536c
# timestamp: 2013-04-12 19:24:03 -0700
# base_revision_id: jamie@jantrid.net-20130412111619-d3xecxcewwyniy18
# 
# Begin patch
=== modified file 'source/appModules/explorer.py'
--- source/appModules/explorer.py	2013-02-15 21:23:36 +0000
+++ source/appModules/explorer.py	2013-03-14 13:25:35 +0000
@@ -40,7 +40,7 @@
 
 class ClassicStartMenu(Window):
 	# Override the name, as Windows names this the "Application" menu contrary to all documentation.
-	# Translators: The title of the Start menu/screen in your language (only the word start).
+	# Translators: The title of Start menu/screen in your language (only the word start).
 	name = _("Start")
 
 	def event_gainFocus(self):

=== modified file 'source/appModules/outlook.py'
--- source/appModules/outlook.py	2013-02-15 21:23:36 +0000
+++ source/appModules/outlook.py	2013-03-14 13:25:35 +0000
@@ -25,7 +25,7 @@
 	nameList.append(obj.senderName)
 	# Translators: This is presented in outlook or live mail, email subject
 	nameList.append(_("subject: %s")%obj.subject)
-	# Translators: This is presented in outlook or live mail, email received date/time.
+	# Translators: This is presented in outlook or live mail, email received time
 	nameList.append(_("received: %s")%obj.receivedTime)
 
 	text=", ".join(nameList)
@@ -40,7 +40,7 @@
 	nameList=[]
 	nameList.append(obj.to)
 	nameList.append(_("subject: %s")%obj.subject)
-	# Translators: This is presented in outlook or live mail, email sent date/time.
+	# Translators: This is presented in outlook or live mail, email sent date
 	nameList.append(_("sent: %s")%obj.sentOn)
 	return ", ".join(nameList)
 

=== modified file 'source/brailleDisplayDrivers/freedomScientific.py'
--- source/brailleDisplayDrivers/freedomScientific.py	2013-01-11 18:54:20 +0000
+++ source/brailleDisplayDrivers/freedomScientific.py	2013-03-14 13:25:35 +0000
@@ -135,7 +135,7 @@
 	wizWheelActions=[
 		# Translators: The name of a key on a braille display, that scrolls the display to show previous/next part of a long line.
 		(_("display scroll"),("globalCommands","GlobalCommands","braille_scrollBack"),("globalCommands","GlobalCommands","braille_scrollForward")),
-		# Translators: The name of a key on a braille display, that scrolls the display to show the next/previous line..
+		# Translators: The name of a key on a braille display, that scrolls the display to show the next/previous line.
 		(_("line scroll"),("globalCommands","GlobalCommands","braille_previousLine"),("globalCommands","GlobalCommands","braille_nextLine")),
 	]
 

=== modified file 'source/brailleDisplayDrivers/papenmeier.py'
--- source/brailleDisplayDrivers/papenmeier.py	2013-03-04 08:41:15 +0000
+++ source/brailleDisplayDrivers/papenmeier.py	2013-03-14 13:25:35 +0000
@@ -13,7 +13,6 @@
 from logHandler import log
 
 import inputCore
-import brailleInput
 import ftdi2
 import struct
 
@@ -88,16 +87,16 @@
 
 def brl_poll(dev):
 	"""read sequence from braille display"""
-	if dev.inWaiting() > 3:
-		status = []
-		status.append(dev.read(4))
-		if(ord(status[0][0])==STX):#first char must be an STX
-			if status[0][1] == 'K' or status[0][1] == 'L': l = (2*(((ord(status[0][2]) - 0x50) << 4) + (ord(status[0][3]) - 0x50)) +1)
-			else: l=6
-			status.append(dev.read(l))
-		if ord(status[-1][-1]) == ETX:
-			return "".join(status)[1:-1] # strip STX and ETX
-	return ""
+	q = dev.inWaiting()
+	status = []
+	if(q>0):
+		d=dev.read(1)
+		if(ord(d[0])==STX):#first char must be an STX
+			d=dev.read(1)
+			while(ord(d[0])!=ETX): #read until ETX
+				status.append(d[0])
+				d=dev.read(1)
+	return "".join(status)
 
 def brl_decode_trio(keys):
 	"""decode routing keys on Trio"""
@@ -192,7 +191,7 @@
 	"""papenmeier braille display driver.
 	"""
 	name = "papenmeier"
-	# Translators: Names of braille displays.
+# Translators: Names of braille displays.
 	description = _("Papenmeier BRAILLEX newer models")
 
 	@classmethod
@@ -229,7 +228,6 @@
 							self._dev = serial.Serial(port, baudrate = 57600,timeout = BLUETOOTH_TIMEOUT, writeTimeout = BLUETOOTH_TIMEOUT)
 							self.numCells = 40
 							self._proto = 'B'
-							self._voffset = 0
 							log.info("connectBluetooth success")
 						except:
 							log.debugWarning("connectBluetooth failed")
@@ -258,6 +256,7 @@
 		self._proto = None
 		self.connectBrxCom()
 		if(self._baud == 1): return #brxcom is running, skip bluetooth and USB
+		self._modstate = 0
 
 		#try to connect to usb device,
 		#if no usb device is found there may be a bluetooth device
@@ -394,8 +393,6 @@
 			self._keynamesrepeat = {16: 'left2', 17: 'right2', 18: 'left', 19: 'right', 20: 'dn2', 21: 'dn', 22: 'up', 23: 'up2'}
 			x = self.numCells * 2
 			self._keynames = {16: 'left2', 17: 'right2', 18: 'left', 19: 'right', 20: 'dn2', 21: 'dn', 22: 'up', 23: 'up2', x+38: 'r2', x+39: 'r1', 30: 'l2', 31: 'l1'}
-			self._dotNames={32: 'd6', 1: 'd1', 2: 'd2', 4: 'd3', 8: 'd4', 64: 'd7', 128: 'd8', 16: 'd5'}
-			self._thumbs = {1:"rt", 2:"space", 4:"lt"}
 
 	def terminate(self):
 		"""free resources used by this driver"""
@@ -424,7 +421,7 @@
 	def executeGesture(self,gesture):
 		"""executes a gesture"""
 		if(gesture.id == 'r1'):  gesture.id = next(self._r1next)
-		if gesture.id or (gesture.dots or gesture.space): inputCore.manager.executeGesture(gesture)
+		if gesture.id: inputCore.manager.executeGesture(gesture)
 
 	def _handleKeyPresses(self):
 		"""handles key presses and performs a gesture"""
@@ -482,17 +479,6 @@
 
 			"title": ("br(papenmeier):l1,up",),
 			"reportStatusLine": ("br(papenmeier):l2,dn",),
-			"kb:enter": ("br(papenmeier):d8",),
-			"kb:backspace": ("br(papenmeier):d7",),
-			"kb:alt": ("br(papenmeier):lt+d3",),
-			"kb:control": ("br(papenmeier):lt+d2",),
-			"kb:escape": ("br(papenmeier):space+d7",),
-			"kb:control+escape": ("br(papenmeier):lt+d1+d2+d3+d4+d5+d6",),
-			"kb:tab": ("br(papenmeier):space+d3+d7",),
-			"kb:upArrow": ("br(papenmeier):space+d2",),
-			"kb:downArrow": ("br(papenmeier):space+d5",),
-			"kb:leftArrow": ("br(papenmeier):space+d1",),
-			"kb:rightArrow": ("br(papenmeier):space+d4",),
 		}
 	})
 
@@ -500,11 +486,12 @@
 	 "br(papenmeier):upperRouting": "upperRouting",
 	}
 
-class InputGesture(braille.BrailleDisplayGesture, brailleInput.BrailleInputGesture):
+class InputGesture(braille.BrailleDisplayGesture):
 	"""Input gesture for papenmeier displays"""
+
 	source = BrailleDisplayDriver.name
 
-	def __init__(self, keys, driver):
+	def __init__(self, keys,driver):
 		"""create an input gesture and decode keys"""
 		super(InputGesture, self).__init__()
 		self.id=''
@@ -513,29 +500,6 @@
 			self.id=brl_join_keys(brl_decode_key_names_repeat(driver))
 			return
 
-		if keys[0] == 'L' and driver._baud!=1:
-			#get dots
-			z  = ord('0')
-			b = ord(keys[4])-z
-			c = ord(keys[5])-z
-			d = ord(keys[6])-z
-			dots = c << 4 | d
-			thumbs = b&7
-			if thumbs and dots: 
-				names = set()
-				names.update(driver._thumbs[1 << i] for i in xrange(3) if (1 << i) & thumbs)
-				names.update(driver._dotNames[1 << i] for i in xrange(8)if (1 << i) & dots)
-				self.id = "+".join(names)
-				self.space = True
-				self.dots = dots
-			elif dots == 64:
-				self.id = "d7"
-			elif dots == 128:
-				self.id = "d8"
-			elif thumbs == 2: self.space = True
-			else:self.dots = dots
-			return
-
 		if(driver._baud==1):#brxcom
 			if(keys>255 and keys<512):
 				self.routingIndex = keys-256-driver._voffset

=== modified file 'source/controlTypes.py'
--- source/controlTypes.py	2013-02-14 08:49:17 +0000
+++ source/controlTypes.py	2013-04-08 07:50:25 +0000
@@ -187,7 +187,7 @@
 roleLabels={
 	# Translators: The word for an unknown control type.
 	ROLE_UNKNOWN:_("unknown"),
-	# Translators: The word for window of a program suchas document window.
+	# Translators: The word for window of a program such as document window.
 	ROLE_WINDOW:_("window"),
 	# Translators: Used to identify title bar of a program.
 	ROLE_TITLEBAR:_("title bar"),
@@ -303,14 +303,19 @@
 	ROLE_GROUPING:_("grouping"),
 	# Translators: Identifies a property page such as drive properties dialog.
 	ROLE_PROPERTYPAGE:_("property page"),
+	# Translators: Identifies a canvas element on webpages (a box with some background color with some text drawn on the box, like a canvas).
 	ROLE_CANVAS:_("canvas"),
+	# Translators: Identifies a caption (usually a short text identifying a picture or a graphic on websites).
 	ROLE_CAPTION:_("caption"),
+	# Translators: Identifies a check menu item (a menu item with a checkmark as part of the menu item's name).
 	ROLE_CHECKMENUITEM:_("check menu item"),
+	# Translators: Identifies a data edit field.
 	ROLE_DATEEDITOR:_("date edit"),
 	# Translators: Identifies an icon.
 	ROLE_ICON:_("icon"),
+	# Translators: Identifies a directory pane.
 	ROLE_DIRECTORYPANE:_("directory pane"),
-	# Translators: Identifies an embedded object such as flash content.
+	# Translators: Identifies an embedded object such as flash content on webpages.
 	ROLE_EMBEDDEDOBJECT:_("embedded object"),
 	ROLE_ENDNOTE:_("end note"),
 	ROLE_FOOTER:_("footer"),
@@ -338,6 +343,7 @@
 	ROLE_EDITBAR:_("edit bar"),
 	# Translators: Identifies a terminal window such as command prompt.
 	ROLE_TERMINAL:_("terminal"),
+	# Translators: Identifies a rich edit box (an edit box which allows entering formatting commands in addition to text; encountered on webpages and NvDA log viewer).
 	ROLE_RICHEDIT:_("rich edit"),
 	ROLE_RULER:_("ruler"),
 	# Translators: Identifies a scroll pane.
@@ -356,6 +362,7 @@
 	# but which can be undocked from or torn off the menu system
 	# to exist as a separate window.
 	ROLE_TEAROFFMENU:_("tear off menu"),
+	# Translators: Identifies a text frame (a frame window which contains text).
 	ROLE_TEXTFRAME:_("text frame"),
 	# Translators: Identifies a toggle button (a button used to toggle something).
 	ROLE_TOGGLEBUTTON:_("toggle button"),
@@ -389,7 +396,7 @@
 	ROLE_IPADDRESS:_("IP address"),
 	# Translators: Identifies a desktop icon (the icons on the desktop such as computer and various shortcuts for programs).
 	ROLE_DESKTOPICON:_("desktop icon"),
-	# Translators: Identifies an alert message.
+	# Translators: Identifies an alert message such as file download alert in Internet explorer 9 and above.
 	ROLE_ALERT:_("alert"),
 	ROLE_INTERNALFRAME:_("IFrame"),
 	# Translators: Identifies desktop pane (the desktop window).

=== modified file 'source/globalCommands.py'
--- source/globalCommands.py	2013-03-20 07:31:28 +0000
+++ source/globalCommands.py	2013-04-11 04:03:20 +0000
@@ -48,6 +48,7 @@
 		stateOff = _("input help off")
 		state = stateOn if inputCore.manager.isInputHelpActive else stateOff
 		ui.message(state)
+	# Translators: Input help mode message for toggle input help command.
 	script_toggleInputHelp.__doc__=_("Turns input help on or off. When on, any input such as pressing a key on the keyboard will tell you what script is associated with that input, if any.")
 
 	def script_toggleCurrentAppSleepMode(self,gesture):
@@ -63,6 +64,7 @@
 			curApp.sleepMode=True
 			# Translators: This is presented when sleep mode is activated, the focused application is self voicing, such as klango or openbook.
 			ui.message(_("Sleep mode on"))
+	# Translators: Input help mode message for toggle sleep mode command.
 	script_toggleCurrentAppSleepMode.__doc__=_("Toggles  sleep mode on and off for  the active application.")
 	script_toggleCurrentAppSleepMode.allowInSleepMode=True
 
@@ -80,6 +82,7 @@
 			speech.speakTextInfo(info,unit=textInfos.UNIT_LINE,reason=controlTypes.REASON_CARET)
 		else:
 			speech.speakSpelling(info.text)
+	# Translators: Input help mode message for report current line command.
 	script_reportCurrentLine.__doc__=_("Reports the current line under the application cursor. Pressing this key twice will spell the current line")
 
 	def script_leftMouseClick(self,gesture):
@@ -87,6 +90,7 @@
 		ui.message(_("left click"))
 		winUser.mouse_event(winUser.MOUSEEVENTF_LEFTDOWN,0,0,None,None)
 		winUser.mouse_event(winUser.MOUSEEVENTF_LEFTUP,0,0,None,None)
+	# Translators: Input help mode message for left mouse click command.
 	script_leftMouseClick.__doc__=_("Clicks the left mouse button once at the current mouse position")
 
 	def script_rightMouseClick(self,gesture):
@@ -94,6 +98,7 @@
 		ui.message(_("right click"))
 		winUser.mouse_event(winUser.MOUSEEVENTF_RIGHTDOWN,0,0,None,None)
 		winUser.mouse_event(winUser.MOUSEEVENTF_RIGHTUP,0,0,None,None)
+	# Translators: Input help mode message for right mouse click command.
 	script_rightMouseClick.__doc__=_("Clicks the right mouse button once at the current mouse position")
 
 	def script_toggleLeftMouseButton(self,gesture):
@@ -105,6 +110,7 @@
 			# Translators: This is presented when the left mouse button is locked down (used for drag and drop).
 			ui.message(_("left mouse button lock"))
 			winUser.mouse_event(winUser.MOUSEEVENTF_LEFTDOWN,0,0,None,None)
+	# Translators: Input help mode message for left mouse lock/unlock toggle command.
 	script_toggleLeftMouseButton.__doc__=_("Locks or unlocks the left mouse button")
 
 	def script_toggleRightMouseButton(self,gesture):
@@ -116,6 +122,7 @@
 			# Translators: This is presented when the right mouse button is locked down (used for drag and drop).
 			ui.message(_("right mouse button lock"))
 			winUser.mouse_event(winUser.MOUSEEVENTF_RIGHTDOWN,0,0,None,None)
+	# Translators: Input help mode message for right mouse lock/unlock command.
 	script_toggleRightMouseButton.__doc__=_("Locks or unlocks the right mouse button")
 
 	def script_reportCurrentSelection(self,gesture):
@@ -131,6 +138,7 @@
 			speech.speakMessage(_("no selection"))
 		else:
 			speech.speakMessage(_("selected %s")%info.text)
+	# Translators: Input help mode message for report current selection command.
 	script_reportCurrentSelection.__doc__=_("Announces the current selection in edit controls and documents. If there is no selection it says so.")
 
 	def script_dateTime(self,gesture):
@@ -139,6 +147,7 @@
 		else:
 			text=winKernel.GetDateFormat(winKernel.LOCALE_USER_DEFAULT, winKernel.DATE_LONGDATE, None, None)
 		ui.message(text)
+	# Translators: Input help mode message for report date and time command.
 	script_dateTime.__doc__=_("If pressed once, reports the current time. If pressed twice, reports the current date")
 
 	def script_increaseSynthSetting(self,gesture):
@@ -149,6 +158,7 @@
 			return
 		settingValue=globalVars.settingsRing.increase()
 		ui.message("%s %s" % (settingName,settingValue))
+	# Translators: Input help mode message for increase synth setting value command.
 	script_increaseSynthSetting.__doc__=_("Increases the currently active setting in the synth settings ring")
 
 	def script_decreaseSynthSetting(self,gesture):
@@ -158,6 +168,7 @@
 			return
 		settingValue=globalVars.settingsRing.decrease()
 		ui.message("%s %s" % (settingName,settingValue))
+	# Translators: Input help mode message for decrease synth setting value command.
 	script_decreaseSynthSetting.__doc__=_("Decreases the currently active setting in the synth settings ring")
 
 	def script_nextSynthSetting(self,gesture):
@@ -167,6 +178,7 @@
 			return
 		nextSettingValue=globalVars.settingsRing.currentSettingValue
 		ui.message("%s %s"%(nextSettingName,nextSettingValue))
+	# Translators: Input help mode message for next synth setting command.
 	script_nextSynthSetting.__doc__=_("Moves to the next available setting in the synth settings ring")
 
 	def script_previousSynthSetting(self,gesture):
@@ -176,6 +188,7 @@
 			return
 		previousSettingValue=globalVars.settingsRing.currentSettingValue
 		ui.message("%s %s"%(previousSettingName,previousSettingValue))
+	# Translators: Input help mode message for previous synth setting command.
 	script_previousSynthSetting.__doc__=_("Moves to the previous available setting in the synth settings ring")
 
 	def script_toggleSpeakTypedCharacters(self,gesture):
@@ -188,6 +201,7 @@
 			state = _("speak typed characters on")
 			config.conf["keyboard"]["speakTypedCharacters"]=True
 		ui.message(state)
+	# Translators: Input help mode message for toggle speaked typed characters command.
 	script_toggleSpeakTypedCharacters.__doc__=_("Toggles on and off the speaking of typed characters")
 
 	def script_toggleSpeakTypedWords(self,gesture):
@@ -200,6 +214,7 @@
 			state = _("speak typed words on")
 			config.conf["keyboard"]["speakTypedWords"]=True
 		ui.message(state)
+	# Translators: Input help mode message for toggle speak typed words command.
 	script_toggleSpeakTypedWords.__doc__=_("Toggles on and off the speaking of typed words")
 
 	def script_toggleSpeakCommandKeys(self,gesture):
@@ -212,6 +227,7 @@
 			state = _("speak command keys on")
 			config.conf["keyboard"]["speakCommandKeys"]=True
 		ui.message(state)
+	# Translators: Input help mode message for toggle speak command keys command.
 	script_toggleSpeakCommandKeys.__doc__=_("Toggles on and off the speaking of typed keys, that are not specifically characters")
 
 	def script_cycleSpeechSymbolLevel(self,gesture):
@@ -227,6 +243,7 @@
 		# which determine what symbols are spoken.
 		# %s will be replaced with the symbol level; e.g. none, some, most and all.
 		ui.message(_("symbol level %s") % name)
+	# Translators: Input help mode message for cycle speech symbol level command.
 	script_cycleSpeechSymbolLevel.__doc__=_("Cycles through speech symbol levels which determine what symbols are spoken")
 
 	def script_moveMouseToNavigatorObject(self,gesture):
@@ -249,6 +266,7 @@
 			y=top+(height/2)
 		winUser.setCursorPos(x,y)
 		mouseHandler.executeMouseMoveEvent(x,y)
+	# Translators: Input help mode message for move mouse to navigator object command.
 	script_moveMouseToNavigatorObject.__doc__=_("Moves the mouse pointer to the current navigator object")
 
 	def script_moveNavigatorObjectToMouse(self,gesture):
@@ -257,6 +275,7 @@
 		obj=api.getMouseObject()
 		api.setNavigatorObject(obj)
 		speech.speakObject(obj)
+	# Translators: Input help mode message for move navigator object to mouse command.
 	script_moveNavigatorObjectToMouse.__doc__=_("Sets the navigator object to the current object under the mouse pointer and speaks it")
 
 	def script_navigatorObject_moveToFlatReviewAtObjectPosition(self,gesture):
@@ -272,6 +291,7 @@
 		else:
 			# Translators: reported when object does not support flat review (example: some graphic window).
 			speech.speakMessage(_("No flat review for this object"))
+	# Translators: Input help mode message for move to flat review command.
 	script_navigatorObject_moveToFlatReviewAtObjectPosition.__doc__=_("Moves to flat review for the screen (or document if currently inside one) and positions the review cursor at the location of the current object")
 
 	def script_navigatorObject_moveToObjectAtFlatReviewPosition(self,gesture):
@@ -286,6 +306,7 @@
 		else:
 			# Translators: Reported when there is no object at flat review position.
 			speech.speakMessage(_("No object at flat review position"))
+	# Translators: Input help mode message for flat review to object command.
 	script_navigatorObject_moveToObjectAtFlatReviewPosition.__doc__=_("Moves navigator object to the object represented by the text at the position of the review cursor within flat review")
 
 	def script_navigatorObject_current(self,gesture):
@@ -323,6 +344,7 @@
 						speech.speakMessage(_("%s copied to clipboard")%text)
 		else:
 			speech.speakObject(curObject,reason=controlTypes.REASON_QUERY)
+	# Translators: Input help mode message for report current navigator object command.
 	script_navigatorObject_current.__doc__=_("Reports the current navigator object. Pressing twice spells this information,and pressing three times Copies name and value of this  object to the clipboard")
 
 	def script_navigatorObject_currentDimensions(self,gesture):
@@ -345,6 +367,7 @@
 		percentHeight=(float(height)/deskHeight)*100
 		# Translators: Reports navigator object's dimensions (example output: object edges positioned 20 per cent from left edge of screen, 10 per cent from top edge of screen, width is 40 per cent of screen, height is 50 per cent of screen).
 		ui.message(_("Object edges positioned {left:.1f} per cent from left edge of screen, {top:.1f} per cent from top edge of screen, width is {width:.1f} per cent of screen, height is {height:.1f} per cent of screen").format(left=percentFromLeft,top=percentFromTop,width=percentWidth,height=percentHeight))
+	# Translators: Input help mode message for report object dimensions command.
 	script_navigatorObject_currentDimensions.__doc__=_("Reports the hight, width and position of the current navigator object")
 
 	def script_navigatorObject_toFocus(self,gesture):
@@ -357,6 +380,7 @@
 		# Translators: Reported when attempting to move the navigator object to focus.
 		speech.speakMessage(_("move to focus"))
 		speech.speakObject(obj,reason=controlTypes.REASON_FOCUS)
+	# Translators: Input help mode message for move navigator object to current focus command.
 	script_navigatorObject_toFocus.__doc__=_("Sets the navigator object to the current focus, and the review cursor to the position of the caret inside it, if possible.")
 
 	def script_navigatorObject_moveFocus(self,gesture):
@@ -381,6 +405,7 @@
 			info=review.copy()
 			info.expand(textInfos.UNIT_LINE)
 			speech.speakTextInfo(info,reason=controlTypes.REASON_CARET)
+	# Translators: Input help mode message for move focus to current navigator object command.
 	script_navigatorObject_moveFocus.__doc__=_("Pressed once Sets the keyboard focus to the navigator object, pressed twice sets the system caret to the position of the review cursor")
 
 	def script_navigatorObject_parent(self,gesture):
@@ -396,6 +421,7 @@
 		else:
 			# Translators: Reported when there is no containing (parent) object such as when focused on desktop.
 			speech.speakMessage(_("No containing object"))
+	# Translators: Input help mode message for move to parent object command.
 	script_navigatorObject_parent.__doc__=_("Moves the navigator object to the object containing it")
 
 	def script_navigatorObject_next(self,gesture):
@@ -411,6 +437,7 @@
 		else:
 			# Translators: Reported when there is no next object (current object is the last object).
 			speech.speakMessage(_("No next"))
+	# Translators: Input help mode message for move to next object command.
 	script_navigatorObject_next.__doc__=_("Moves the navigator object to the next object")
 
 	def script_navigatorObject_previous(self,gesture):
@@ -426,6 +453,7 @@
 		else:
 			# Translators: Reported when there is no previous object (current object is the first object).
 			speech.speakMessage(_("No previous"))
+	# Translators: Input help mode message for move to previous object command.
 	script_navigatorObject_previous.__doc__=_("Moves the navigator object to the previous object")
 
 	def script_navigatorObject_firstChild(self,gesture):
@@ -441,6 +469,7 @@
 		else:
 			# Translators: Reported when there is no contained (first child) object such as inside a document.
 			speech.speakMessage(_("No objects inside"))
+	# Translators: Input help mode message for move to first child object command.
 	script_navigatorObject_firstChild.__doc__=_("Moves the navigator object to the first object inside it")
 
 	def script_review_activate(self,gesture):
@@ -473,6 +502,7 @@
 			obj=obj.parent
 		# Translators: the message reported when there is no action to perform on the review position or navigator object.
 		ui.message(_("No action"))
+	# Translators: Input help mode message for activate current object command.
 	script_review_activate.__doc__=_("Performs the default action on the current navigator object (example: presses it if it is a button).")
 
 	def script_review_top(self,gesture):
@@ -481,6 +511,7 @@
 		info.expand(textInfos.UNIT_LINE)
 		speech.speakMessage(_("top"))
 		speech.speakTextInfo(info,unit=textInfos.UNIT_LINE,reason=controlTypes.REASON_CARET)
+	# Translators: Input help mode message for move review cursor to top line command.
 	script_review_top.__doc__=_("Moves the review cursor to the top line of the current navigator object and speaks it")
 
 	def script_review_previousLine(self,gesture):
@@ -493,6 +524,7 @@
 		if res==0:
 			speech.speakMessage(_("top"))
 		speech.speakTextInfo(info,unit=textInfos.UNIT_LINE,reason=controlTypes.REASON_CARET)
+	# Translators: Input help mode message for move review cursor to previous line command.
 	script_review_previousLine.__doc__=_("Moves the review cursor to the previous line of the current navigator object and speaks it")
 
 	def script_review_currentLine(self,gesture):
@@ -503,6 +535,7 @@
 			speech.speakTextInfo(info,unit=textInfos.UNIT_LINE,reason=controlTypes.REASON_CARET)
 		else:
 			speech.spellTextInfo(info,useCharacterDescriptions=scriptCount>1)
+	# Translators: Input help mode message for read current line under review cursor command.
 	script_review_currentLine.__doc__=_("Reports the line of the current navigator object where the review cursor is situated. If this key is pressed twice, the current line will be spelled. Pressing three times will spell the line using character descriptions.")
  
 	def script_review_nextLine(self,gesture):
@@ -515,6 +548,7 @@
 		if res==0:
 			speech.speakMessage(_("bottom"))
 		speech.speakTextInfo(info,unit=textInfos.UNIT_LINE,reason=controlTypes.REASON_CARET)
+	# Translators: Input help mode message for move review cursor to next line command.
 	script_review_nextLine.__doc__=_("Moves the review cursor to the next line of the current navigator object and speaks it")
 
 	def script_review_bottom(self,gesture):
@@ -523,6 +557,7 @@
 		info.expand(textInfos.UNIT_LINE)
 		speech.speakMessage(_("bottom"))
 		speech.speakTextInfo(info,unit=textInfos.UNIT_LINE,reason=controlTypes.REASON_CARET)
+	# Translators: Input help mode message for move review cursor to bottom line command.
 	script_review_bottom.__doc__=_("Moves the review cursor to the bottom line of the current navigator object and speaks it")
 
 	def script_review_previousWord(self,gesture):
@@ -535,6 +570,7 @@
 		if res==0:
 			speech.speakMessage(_("top"))
 		speech.speakTextInfo(info,reason=controlTypes.REASON_CARET,unit=textInfos.UNIT_WORD)
+	# Translators: Input help mode message for move review cursor to previous word command.
 	script_review_previousWord.__doc__=_("Moves the review cursor to the previous word of the current navigator object and speaks it")
 
 	def script_review_currentWord(self,gesture):
@@ -545,6 +581,7 @@
 			speech.speakTextInfo(info,reason=controlTypes.REASON_CARET,unit=textInfos.UNIT_WORD)
 		else:
 			speech.spellTextInfo(info,useCharacterDescriptions=scriptCount>1)
+	# Translators: Input help mode message for report current word under review cursor command.
 	script_review_currentWord.__doc__=_("Speaks the word of the current navigator object where the review cursor is situated. Pressing twice spells the word. Pressing three times spells the word using character descriptions")
 
 	def script_review_nextWord(self,gesture):
@@ -557,6 +594,7 @@
 		if res==0:
 			speech.speakMessage(_("bottom"))
 		speech.speakTextInfo(info,reason=controlTypes.REASON_CARET,unit=textInfos.UNIT_WORD)
+	# Translators: Input help mode message for move review cursor to next word command.
 	script_review_nextWord.__doc__=_("Moves the review cursor to the next word of the current navigator object and speaks it")
 
 	def script_review_startOfLine(self,gesture):
@@ -567,6 +605,7 @@
 		info.expand(textInfos.UNIT_CHARACTER)
 		speech.speakMessage(_("left"))
 		speech.speakTextInfo(info,unit=textInfos.UNIT_CHARACTER,reason=controlTypes.REASON_CARET)
+	# Translators: Input help mode message for move review cursor to start of current line command.
 	script_review_startOfLine.__doc__=_("Moves the review cursor to the first character of the line where it is situated in the current navigator object and speaks it")
 
 	def script_review_previousCharacter(self,gesture):
@@ -585,6 +624,7 @@
 			api.setReviewPosition(charInfo.copy())
 			charInfo.expand(textInfos.UNIT_CHARACTER)
 			speech.speakTextInfo(charInfo,unit=textInfos.UNIT_CHARACTER,reason=controlTypes.REASON_CARET)
+	# Translators: Input help mode message for move review cursor to previous character command.
 	script_review_previousCharacter.__doc__=_("Moves the review cursor to the previous character of the current navigator object and speaks it")
 
 	def script_review_currentCharacter(self,gesture):
@@ -602,6 +642,7 @@
 				speech.speakSpelling(hex(c))
 			except:
 				speech.speakTextInfo(info,unit=textInfos.UNIT_CHARACTER,reason=controlTypes.REASON_CARET)
+	# Translators: Input help mode message for report current character under review cursor command.
 	script_review_currentCharacter.__doc__=_("Reports the character of the current navigator object where the review cursor is situated. Pressing twice reports a description or example of that character. Pressing three times reports the numeric value of the character in decimal and hexadecimal")
 
 	def script_review_nextCharacter(self,gesture):
@@ -620,6 +661,7 @@
 			api.setReviewPosition(charInfo.copy())
 			charInfo.expand(textInfos.UNIT_CHARACTER)
 			speech.speakTextInfo(charInfo,unit=textInfos.UNIT_CHARACTER,reason=controlTypes.REASON_CARET)
+	# Translators: Input help mode message for move review cursor to next character command.
 	script_review_nextCharacter.__doc__=_("Moves the review cursor to the next character of the current navigator object and speaks it")
 
 	def script_review_endOfLine(self,gesture):
@@ -631,6 +673,7 @@
 		info.expand(textInfos.UNIT_CHARACTER)
 		speech.speakMessage(_("right"))
 		speech.speakTextInfo(info,unit=textInfos.UNIT_CHARACTER,reason=controlTypes.REASON_CARET)
+	# Translators: Input help mode message for move review cursor to end of current line command.
 	script_review_endOfLine.__doc__=_("Moves the review cursor to the last character of the line where it is situated in the current navigator object and speaks it")
 
 	def script_speechMode(self,gesture):
@@ -649,6 +692,7 @@
 		speech.cancelSpeech()
 		ui.message(name)
 		speech.speechMode=newMode
+	# Translators: Input help mode message for toggle speech mode command.
 	script_speechMode.__doc__=_("Toggles between the speech modes of off, beep and talk. When set to off NVDA will not speak anything. If beeps then NVDA will simply beep each time it its supposed to speak something. If talk then NVDA wil just speak normally.")
 
 	def script_moveToParentTreeInterceptor(self,gesture):
@@ -666,6 +710,7 @@
 			import eventHandler
 			import wx
 			wx.CallLater(50,eventHandler.executeEvent,"gainFocus",parent.treeInterceptor.rootNVDAObject)
+	# Translators: Input help mode message for move to next document with focus command, mostly used in web browsing to move from embedded object to the webpage document.
 	script_moveToParentTreeInterceptor.__doc__=_("Moves the focus to the next closest document that contains the focus")
 
 	def script_toggleVirtualBufferPassThrough(self,gesture):
@@ -678,22 +723,27 @@
 		# If we're disabling pass-through, re-enable auto-pass-through.
 		vbuf.disableAutoPassThrough = vbuf.passThrough
 		virtualBuffers.reportPassThrough(vbuf)
+	# Translators: Input help mode message for toggle focus and browse mode command in web browsing and other situations.
 	script_toggleVirtualBufferPassThrough.__doc__=_("Toggles between browse mode and focus mode. When in focus mode, keys will pass straight through to the application, allowing you to interact directly with a control. When in browse mode, you can navigate the document with the cursor, quick navigation keys, etc.")
 
 	def script_quit(self,gesture):
 		gui.quit()
+	# Translators: Input help mode message for quit NVDA command.
 	script_quit.__doc__=_("Quits NVDA!")
 
 	def script_showGui(self,gesture):
 		gui.showGui()
+	# Translators: Input help mode message for show NVDA menu command.
 	script_showGui.__doc__=_("Shows the NVDA menu")
 
 	def script_review_sayAll(self,gesture):
 		sayAllHandler.readText(sayAllHandler.CURSOR_REVIEW)
+	# Translators: Input help mode message for say all in review cursor command.
 	script_review_sayAll.__doc__ = _("reads from the review cursor  up to end of current text, moving the review cursor as it goes")
 
 	def script_sayAll(self,gesture):
 		sayAllHandler.readText(sayAllHandler.CURSOR_CARET)
+	# Translators: Input help mode message for say all with system caret command.
 	script_sayAll.__doc__ = _("reads from the system caret up to the end of the text, moving the caret as it goes")
 
 	def script_reportFormatting(self,gesture):
@@ -730,6 +780,7 @@
 			return
 
 		ui.message(" ".join(textList))
+	# Translators: Input help mode message for report formatting command.
 	script_reportFormatting.__doc__ = _("Reports formatting info for the current review cursor position within a document")
 
 	def script_reportCurrentFocus(self,gesture):
@@ -741,6 +792,7 @@
 				speech.speakSpelling(focusObject.name)
 		else:
 			speech.speakMessage(_("no focus"))
+	# Translators: Input help mode message for report current focus command.
 	script_reportCurrentFocus.__doc__ = _("reports the object with focus")
 
 	def script_reportStatusLine(self,gesture):
@@ -768,6 +820,7 @@
 			ui.message(text)
 		else:
 			speech.speakSpelling(text)
+	# Translators: Input help mode message for report status line text command.
 	script_reportStatusLine.__doc__ = _("reads the current application status bar and moves the navigator to it")
 
 	def script_toggleMouseTracking(self,gesture):
@@ -780,6 +833,7 @@
 			state = _("Mouse tracking on")
 			config.conf["mouse"]["enableMouseTracking"]=True
 		ui.message(state)
+	# Translators: Input help mode message for toggle mouse tracking command.
 	script_toggleMouseTracking.__doc__=_("Toggles the reporting of information as the mouse moves")
 
 	def script_title(self,gesture):
@@ -798,12 +852,14 @@
 		else:
 			if api.copyToClip(title):
 				ui.message(_("%s copied to clipboard")%title)
+	# Translators: Input help mode message for report title bar command.
 	script_title.__doc__=_("Reports the title of the current application or foreground window. If pressed twice, spells the title. If pressed three times, copies the title to the clipboard")
 
 	def script_speakForeground(self,gesture):
 		obj=api.getForegroundObject()
 		if obj:
 			sayAllHandler.readObjects(obj)
+	# Translators: Input help mode message for read foreground object command (usually the foreground window).
 	script_speakForeground.__doc__ = _("speaks the current foreground object")
 
 	def script_test_navigatorDisplayModelText(self,gesture):
@@ -815,6 +871,7 @@
 	def script_navigatorObject_devInfo(self,gesture):
 		obj=api.getNavigatorObject()
 		log.info("Developer info for navigator object:\n%s" % "\n".join(obj.devInfo), activateLogViewer=True)
+	# Translators: Input help mode message for developer info for current navigator object command, used by developers to examine technical info on navigator object. This command also serves as a shortcut to open NVDA log viewer.
 	script_navigatorObject_devInfo.__doc__ = _("Logs information about the current navigator object which is useful to developers and activates the log viewer so the information can be examined.")
 
 	def script_toggleProgressBarOutput(self,gesture):
@@ -836,6 +893,7 @@
 			# Translators: A mode where both speech and beeps will indicate progress bar updates.
 			ui.message(_("beep and speak progress bar updates"))
 		config.conf["presentation"]["progressBarUpdates"]["progressBarOutputMode"]=outputMode
+	# Translators: Input help mode message for toggle progress bar output command.
 	script_toggleProgressBarOutput.__doc__=_("Toggles between beeps, speech, beeps and speech, and off, for reporting progress bar updates")
 
 	def script_toggleReportDynamicContentChanges(self,gesture):
@@ -848,6 +906,7 @@
 			state = _("report dynamic content changes on")
 			config.conf["presentation"]["reportDynamicContentChanges"]=True
 		ui.message(state)
+	# Translators: Input help mode message for toggle dynamic content changes command.
 	script_toggleReportDynamicContentChanges.__doc__=_("Toggles on and off the reporting of dynamic content changes, such as new text in dos console windows")
 
 	def script_toggleCaretMovesReviewCursor(self,gesture):
@@ -860,6 +919,7 @@
 			state = _("caret moves review cursor on")
 			config.conf["reviewCursor"]["followCaret"]=True
 		ui.message(state)
+	# Translators: Input help mode message for toggle caret moves review cursor command.
 	script_toggleCaretMovesReviewCursor.__doc__=_("Toggles on and off the movement of the review cursor due to the caret moving.")
 
 	def script_toggleFocusMovesNavigatorObject(self,gesture):
@@ -872,6 +932,7 @@
 			state = _("focus moves navigator object on")
 			config.conf["reviewCursor"]["followFocus"]=True
 		ui.message(state)
+	# Translators: Input help mode message for toggle focus moves navigator object command.
 	script_toggleFocusMovesNavigatorObject.__doc__=_("Toggles on and off the movement of the navigator object due to focus changes") 
 
 	#added by Rui Batista<ruiandrebatista@gmail.com> to implement a battery status script
@@ -895,12 +956,14 @@
 			# Translators: This is the estimated remaining runtime of the laptop battery.
 			text += _("{hours:d} hours and {minutes:d} minutes remaining") .format(hours=sps.BatteryLifeTime / 3600, minutes=(sps.BatteryLifeTime % 3600) / 60)
 		ui.message(text)
+	# Translators: Input help mode message for report battery status command.
 	script_say_battery_status.__doc__ = _("reports battery status and time remaining if AC is not plugged in")
 
 	def script_passNextKeyThrough(self,gesture):
 		keyboardHandler.passNextKeyThrough()
 		# Translators: Spoken to indicate that the next key press will be sent straight to the current program as though NVDA is not running.
 		ui.message(_("Pass next key through"))
+	# Translators: Input help mode message for pass next key through command.
 	script_passNextKeyThrough.__doc__=_("The next key that is pressed will not be handled at all by NVDA, it will be passed directly through to Windows.")
 
 	def script_reportAppModuleInfo(self,gesture):
@@ -917,42 +980,52 @@
 			# This message will not be presented if there is no module for the current program.
 			message += _(" and currently loaded module is %s") % mod.appModuleName.split(".")[0]
 		ui.message(message)
+	# Translators: Input help mode message for report current program name and app module name command.
 	script_reportAppModuleInfo.__doc__ = _("Speaks the filename of the active application along with the name of the currently loaded appModule")
 
 	def script_activateGeneralSettingsDialog(self, gesture):
 		wx.CallAfter(gui.mainFrame.onGeneralSettingsCommand, None)
+	# Translators: Input help mode message for go to general settings dialog command.
 	script_activateGeneralSettingsDialog.__doc__ = _("Shows the NVDA general settings dialog")
 
 	def script_activateSynthesizerDialog(self, gesture):
 		wx.CallAfter(gui.mainFrame.onSynthesizerCommand, None)
+	# Translators: Input help mode message for go to synthesizer dialog command.
 	script_activateSynthesizerDialog.__doc__ = _("Shows the NVDA synthesizer dialog")
 
 	def script_activateVoiceDialog(self, gesture):
 		wx.CallAfter(gui.mainFrame.onVoiceCommand, None)
+	# Translators: Input help mode message for go to voice settings dialog command.
 	script_activateVoiceDialog.__doc__ = _("Shows the NVDA voice settings dialog")
 
 	def script_activateKeyboardSettingsDialog(self, gesture):
 		wx.CallAfter(gui.mainFrame.onKeyboardSettingsCommand, None)
+	# Translators: Input help mode message for go to keyboard settings dialog command.
 	script_activateKeyboardSettingsDialog.__doc__ = _("Shows the NVDA keyboard settings dialog")
 
 	def script_activateMouseSettingsDialog(self, gesture):
 		wx.CallAfter(gui.mainFrame.onMouseSettingsCommand, None)
+	# Translators: Input help mode message for go to mouse settings dialog command.
 	script_activateMouseSettingsDialog.__doc__ = _("Shows the NVDA mouse settings dialog")
 
 	def script_activateObjectPresentationDialog(self, gesture):
 		wx.CallAfter(gui.mainFrame. onObjectPresentationCommand, None)
+	# Translators: Input help mode message for go to object presentation dialog command.
 	script_activateObjectPresentationDialog.__doc__ = _("Shows the NVDA object presentation settings dialog")
 
 	def script_activateBrowseModeDialog(self, gesture):
 		wx.CallAfter(gui.mainFrame.onBrowseModeCommand, None)
+	# Translators: Input help mode message for go to browse mode dialog command.
 	script_activateBrowseModeDialog.__doc__ = _("Shows the NVDA browse mode settings dialog")
 
 	def script_activateDocumentFormattingDialog(self, gesture):
 		wx.CallAfter(gui.mainFrame.onDocumentFormattingCommand, None)
+	# Translators: Input help mode message for go to document formatting dialog command.
 	script_activateDocumentFormattingDialog.__doc__ = _("Shows the NVDA document formatting settings dialog")
 
 	def script_saveConfiguration(self,gesture):
 		wx.CallAfter(gui.mainFrame.onSaveConfigurationCommand, None)
+	# Translators: Input help mode message for save current configuration command.
 	script_saveConfiguration.__doc__ = _("Saves the current NVDA configuration")
 
 	def script_revertConfiguration(self,gesture):
@@ -961,6 +1034,7 @@
 			gui.mainFrame.onRevertToSavedConfigurationCommand(None)
 		elif scriptCount==2:
 			gui.mainFrame.onRevertToDefaultConfigurationCommand(None)
+	# Translators: Input help mode message for apply last saved or default settings command.
 	script_revertConfiguration.__doc__ = _("Pressing once reverts the current configuration to the most recently saved state. Pressing three times reverts to factory defaults.")
 
 	def script_activatePythonConsole(self,gesture):
@@ -971,6 +1045,7 @@
 			pythonConsole.initialize()
 		pythonConsole.consoleUI.console.updateNamespaceSnapshotVars()
 		pythonConsole.activate()
+	# Translators: Input help mode message for activate python console command.
 	script_activatePythonConsole.__doc__ = _("Activates the NVDA Python Console, primarily useful for development")
 
 	def script_braille_toggleTether(self, gesture):
@@ -982,6 +1057,7 @@
 			tetherMsg = _("focus")
 		# Translators: Reports which position braille is tethered to (braille can be tethered to either focus or review position).
 		ui.message(_("Braille tethered to %s") % tetherMsg)
+	# Translators: Input help mode message for toggle braille tether to command (tethered means connected to or follows).
 	script_braille_toggleTether.__doc__ = _("Toggle tethering of braille between the focus and the review position")
 
 	def script_reportClipboardText(self,gesture):
@@ -999,12 +1075,14 @@
 			# Translators: If the number of characters on the clipboard is greater than about 1000, it reports this message and gives number of characters on the clipboard.
 			# Example output: The clipboard contains a large portion of text. It is 2300 characters long.
 			ui.message(_("The clipboard contains a large portion of text. It is %s characters long") % len(text))
+	# Translators: Input help mode message for report clipboard text command.
 	script_reportClipboardText.__doc__ = _("Reports the text on the Windows clipboard")
 
 	def script_review_markStartForCopy(self, gesture):
 		self._copyStartMarker = api.getReviewPosition().copy()
 		# Translators: Indicates start of review cursor text to be copied to clipboard.
 		ui.message(_("Start marked"))
+	# Translators: Input help mode message for mark review cursor position for copy command (that is, marks the current review cursor position as the starting point for text to be copied).
 	script_review_markStartForCopy.__doc__ = _("Marks the current position of the review cursor as the start of text to be copied")
 
 	def script_review_copy(self, gesture):
@@ -1027,34 +1105,41 @@
 			ui.message(_("No text to copy"))
 			return
 		self._copyStartMarker = None
+	# Translators: Input help mode message for copy selected review cursor text to clipboard command.
 	script_review_copy.__doc__ = _("Retrieves the text from the previously set start marker up to and including the current position of the review cursor and copies it to the clipboard")
 
 	def script_braille_scrollBack(self, gesture):
 		braille.handler.scrollBack()
+	# Translators: Input help mode message for a braille command.
 	script_braille_scrollBack.__doc__ = _("Scrolls the braille display back")
 	script_braille_scrollBack.bypassInputHelp = True
 
 	def script_braille_scrollForward(self, gesture):
 		braille.handler.scrollForward()
+	# Translators: Input help mode message for a braille command.
 	script_braille_scrollForward.__doc__ = _("Scrolls the braille display forward")
 	script_braille_scrollForward.bypassInputHelp = True
 
 	def script_braille_routeTo(self, gesture):
 		braille.handler.routeTo(gesture.routingIndex)
+	# Translators: Input help mode message for a braille command.
 	script_braille_routeTo.__doc__ = _("Routes the cursor to or activates the object under this braille cell")
 
 	def script_braille_previousLine(self, gesture):
 		if braille.handler.buffer.regions: 
 			braille.handler.buffer.regions[-1].previousLine(start=True)
+	# Translators: Input help mode message for a braille command.
 	script_braille_previousLine.__doc__ = _("Moves the braille display to the previous line")
 
 	def script_braille_nextLine(self, gesture):
 		if braille.handler.buffer.regions: 
 			braille.handler.buffer.regions[-1].nextLine()
+	# Translators: Input help mode message for a braille command.
 	script_braille_nextLine.__doc__ = _("Moves the braille display to the next line")
 
 	def script_braille_dots(self, gesture):
 		brailleInput.handler.input(gesture.dots)
+	# Translators: Input help mode message for a braille command.
 	script_braille_dots.__doc__= _("Inputs braille dots via the braille keyboard")
 
 	def script_reloadPlugins(self, gesture):
@@ -1064,6 +1149,7 @@
 		NVDAObject.clearDynamicClassCache()
 		# Translators: Presented when plugins (app modules and global plugins) are reloaded.
 		ui.message(_("Plugins reloaded"))
+	# Translators: Input help mode message for reload plugins command.
 	script_reloadPlugins.__doc__=_("Reloads app modules and global plugins without restarting NVDA, which can be Useful for developers")
 
 	def script_navigatorObject_nextInFlow(self,gesture):
@@ -1085,7 +1171,7 @@
 		else:
 			# Translators: a message when there is no next object when navigating
 			ui.message(_("no next"))
-	script_navigatorObject_nextInFlow.__doc__=_("Moves to the next object in a flattened view of the object navigation hyrarchi")
+	script_navigatorObject_nextInFlow.__doc__=_("Moves to the next object in a flattened view of the object navigation hierarchy")
 
 	def script_navigatorObject_previousInFlow(self,gesture):
 		curObject=api.getNavigatorObject()
@@ -1101,7 +1187,7 @@
 		else:
 			# Translators: a message when there is no next object when navigating
 			ui.message(_("no next"))
-	script_navigatorObject_previousInFlow.__doc__=_("Moves to the previous object in a flattened view of the object navigation hyrarchi")
+	script_navigatorObject_previousInFlow.__doc__=_("Moves to the previous object in a flattened view of the object navigation hierarchy")
 
 	def script_touch_changeMode(self,gesture):
 		mode=touchHandler.handler._curTouchMode

=== modified file 'source/gui/__init__.py'
--- source/gui/__init__.py	2012-09-14 00:14:35 +0000
+++ source/gui/__init__.py	2013-02-08 13:39:56 +0000
@@ -131,20 +131,25 @@
 
 	def onRevertToSavedConfigurationCommand(self,evt):
 		queueHandler.queueFunction(queueHandler.eventQueue,core.resetConfiguration)
+		# Translators: Reported when last saved configuration has been applied by using revert to saved configuration option in NVDA menu.
 		queueHandler.queueFunction(queueHandler.eventQueue,ui.message,_("Configuration applied"))
 
 	def onRevertToDefaultConfigurationCommand(self,evt):
 		queueHandler.queueFunction(queueHandler.eventQueue,core.resetConfiguration,factoryDefaults=True)
+		# Translators: Reported when configuration has been restored to defaults by using restore configuration to factory defaults item in NVDA menu.
 		queueHandler.queueFunction(queueHandler.eventQueue,ui.message,_("Configuration restored to factory defaults"))
 
 	def onSaveConfigurationCommand(self,evt):
 		if globalVars.appArgs.secure:
+			# Translators: Reported when current configuration cannot be saved while NVDA is running in secure mode such as in Windows login screen.
 			queueHandler.queueFunction(queueHandler.eventQueue,ui.message,_("Cannot save configuration - NVDA in secure mode"))
 			return
 		try:
 			config.save()
+			# Translators: Reported when current configuration has been saved.
 			queueHandler.queueFunction(queueHandler.eventQueue,ui.message,_("Configuration saved"))
 		except:
+			# Translators: Message shown when current configuration cannot be saved such as when running NVDA from a CD.
 			messageBox(_("Could not save configuration - probably read only file system"),_("Error"),wx.OK | wx.ICON_ERROR)
 
 	def _popupSettingsDialog(self, dialog, *args, **kwargs):
@@ -154,6 +159,7 @@
 		try:
 			dialog(self, *args, **kwargs).Show()
 		except SettingsDialog.MultiInstanceError:
+			# Translators: Message shown when attempting to open another NVDA settings dialog when one is already open (example: when trying to open keyboard settings when general settings dialog is open).
 			messageBox(_("Please close the other NVDA settings dialog first"),_("Error"),style=wx.OK | wx.ICON_ERROR)
 		self.postPopup()
 
@@ -171,6 +177,7 @@
 		if config.conf["general"]["askToExit"]:
 			if isInMessageBox:
 				return
+			# Translators: Message shown to ask if user really wishes to quit NVDA.
 			if messageBox(_("Are you sure you want to quit NVDA?"), _("Exit NVDA"), wx.YES_NO|wx.ICON_WARNING) == wx.YES:
 				canExit=True
 		else:
@@ -468,14 +475,17 @@
 	)
 
 	def __init__(self, parent):
+		# Translators: The title of the Welcome dialog when user starts NVDA for the first time.
 		super(WelcomeDialog, self).__init__(parent, wx.ID_ANY, _("Welcome to NVDA"))
 		mainSizer=wx.BoxSizer(wx.VERTICAL)
 		welcomeText = wx.StaticText(self, wx.ID_ANY, self.WELCOME_MESSAGE)
 		mainSizer.Add(welcomeText,border=20,flag=wx.LEFT|wx.RIGHT|wx.TOP)
+		# Translators: The name of a group of options in NVDA welcome dialog.
 		optionsSizer = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, _("Options")), wx.HORIZONTAL)
 		self.capsAsNVDAModifierCheckBox = wx.CheckBox(self, wx.ID_ANY, _("Use CapsLock as an NVDA modifier key"))
 		self.capsAsNVDAModifierCheckBox.SetValue(config.conf["keyboard"]["useCapsLockAsNVDAModifierKey"])
 		optionsSizer.Add(self.capsAsNVDAModifierCheckBox,flag=wx.TOP|wx.RIGHT,border=10)
+		# Translators: This is a label for a checkbox in welcome dialog to show welcome dialog at startup.
 		self.showWelcomeDialogAtStartupCheckBox = wx.CheckBox(self, wx.ID_ANY, _("Show this dialog when NVDA starts"))
 		self.showWelcomeDialogAtStartupCheckBox.SetValue(config.conf["general"]["showWelcomeDialogAtStartup"])
 		optionsSizer.Add(self.showWelcomeDialogAtStartupCheckBox,flag=wx.TOP|wx.LEFT,border=10)
@@ -517,6 +527,7 @@
 """)
 
 	def __init__(self, parent):
+		# Translators: The title of the dialog to tell users that there are erros in the configuration file.
 		super(ConfigFileErrorDialog, self).__init__(parent, wx.ID_ANY, _("Configuration File Error"))
 		mainSizer=wx.BoxSizer(wx.VERTICAL)
 		messageText = wx.StaticText(self, wx.ID_ANY, self.MESSAGE)
@@ -551,10 +562,12 @@
 		super(LauncherDialog, self).__init__(parent, title=versionInfo.name)
 		mainSizer = wx.BoxSizer(wx.VERTICAL)
 
+		# Translators: The label of the license text which will be shown when NVDA installation program starts.
 		sizer = wx.StaticBoxSizer(wx.StaticBox(self, label=_("License Agreement")), wx.VERTICAL)
 		ctrl = wx.TextCtrl(self, size=(500, 400), style=wx.TE_MULTILINE | wx.TE_READONLY | wx.TE_RICH)
 		ctrl.Value = codecs.open(getDocFilePath("copying.txt", False), "r", encoding="UTF-8").read()
 		sizer.Add(ctrl)
+		# Translators: The label for a checkbox in NvDA installation program to agree to the license agreement.
 		ctrl = self.licenseAgreeCheckbox = wx.CheckBox(self, label=_("I &agree"))
 		ctrl.Value = False
 		sizer.Add(ctrl)
@@ -563,14 +576,17 @@
 
 		sizer = wx.GridSizer(rows=2, cols=2)
 		self.actionButtons = []
+		# Translators: The label of the button in NVDA installation program to install NvDA on the user's computer.
 		ctrl = wx.Button(self, label=_("&Install NVDA on this computer"))
 		sizer.Add(ctrl)
 		ctrl.Bind(wx.EVT_BUTTON, lambda evt: self.onAction(evt, mainFrame.onInstallCommand))
 		self.actionButtons.append(ctrl)
+		# Translators: The label of the button in NVDA installation program to create a portable version of NVDA.
 		ctrl = wx.Button(self, label=_("Create &portable copy"))
 		sizer.Add(ctrl)
 		ctrl.Bind(wx.EVT_BUTTON, lambda evt: self.onAction(evt, mainFrame.onCreatePortableCopyCommand))
 		self.actionButtons.append(ctrl)
+		# Translators: The label of the button in NVDA installation program to continue using the installation program as a temporary copy of NVDA.
 		ctrl = wx.Button(self, label=_("&Continue running"))
 		sizer.Add(ctrl)
 		ctrl.Bind(wx.EVT_BUTTON, self.onContinueRunning)

=== modified file 'source/gui/addonGui.py'
--- source/gui/addonGui.py	2012-08-23 11:39:11 +0000
+++ source/gui/addonGui.py	2013-02-08 14:56:51 +0000
@@ -29,21 +29,30 @@
 		entriesLabel=wx.StaticText(self,-1,label=_("Installed Add-ons"))
 		entriesSizer.Add(entriesLabel)
 		self.addonsList=wx.ListCtrl(self,-1,style=wx.LC_REPORT|wx.LC_SINGLE_SEL,size=(550,350))
+		# Translators: The label for a column in add-ons list used to identify add-on package name (example: package is OCR).
 		self.addonsList.InsertColumn(0,_("Package"),width=150)
+		# Translators: The label for a column in add-ons list used to identify add-on's running status (example: status is running).
 		self.addonsList.InsertColumn(1,_("Status"),width=50)
+		# Translators: The label for a column in add-ons list used to identify add-on's version (example: version is 0.3).
 		self.addonsList.InsertColumn(2,_("Version"),width=50)
+		# Translators: The label for a column in add-ons list used to identify add-on's author (example: author is NV Access).
 		self.addonsList.InsertColumn(3,_("Author"),width=300)
 		self.addonsList.Bind(wx.EVT_LIST_ITEM_FOCUSED, self.onListItemSelected)
 		entriesSizer.Add(self.addonsList,proportion=8)
 		settingsSizer.Add(entriesSizer)
 		entryButtonsSizer=wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for a button in Add-ons Manager dialog to show information about the selected add-on.
 		self.aboutButton=wx.Button(self,label=_("&About add-on..."))
 		self.aboutButton.Disable()
 		self.aboutButton.Bind(wx.EVT_BUTTON,self.onAbout)
 		entryButtonsSizer.Add(self.aboutButton)
+		# Translators: The label for a button in Add-ons Manager dialog to install an add-on.
 		self.addButton=wx.Button(self,label=_("&Install..."))
 		self.addButton.Bind(wx.EVT_BUTTON,self.OnAddClick)
 		entryButtonsSizer.Add(self.addButton)
+		# Translators: The label for a button to remove either:
+		# Remove the selected add-on in Add-ons Manager dialog.
+		# Remove a speech dictionary entry.
 		self.removeButton=wx.Button(self,label=_("&Remove"))
 		self.removeButton.Disable()
 		self.removeButton.Bind(wx.EVT_BUTTON,self.OnRemoveClick)

=== modified file 'source/gui/installerGui.py'
--- source/gui/installerGui.py	2012-08-05 01:39:37 +0000
+++ source/gui/installerGui.py	2013-02-08 13:39:56 +0000
@@ -63,7 +63,7 @@
 		# Translators: The message displayed to the user after NVDA is installed
 		# and the installed copy is about to be started.
 		gui.messageBox(msg+_("Please press OK to start the installed copy."),
-			# Translators: The title of a dialolg presented to indicate a successful operation.
+			# Translators: The title of a dialog presented to indicate a successful operation.
 			_("Success"))
 	shellapi.ShellExecute(None, None,
 		os.path.join(installer.defaultInstallPath,'nvda.exe'),

=== modified file 'source/gui/logViewer.py'
--- source/gui/logViewer.py	2011-06-02 04:47:23 +0000
+++ source/gui/logViewer.py	2013-02-08 13:39:56 +0000
@@ -14,6 +14,7 @@
 	"""
 
 	def __init__(self, parent):
+		# Translators: The title of the NVDA log viewer window.
 		super(LogViewer, self).__init__(parent, wx.ID_ANY, _("NVDA Log Viewer"))
 		self.Bind(wx.EVT_ACTIVATE, self.onActivate)
 		self.Bind(wx.EVT_CLOSE, self.onClose)
@@ -26,6 +27,7 @@
 
 		menuBar = wx.MenuBar()
 		menu = wx.Menu()
+		# Translators: The label for a menu item in NVDA log viewer to refresh log messages.
 		item = menu.Append(wx.ID_ANY, _("Refresh	F5"))
 		self.Bind(wx.EVT_MENU, self.refresh, item)
 		item = menu.Append(wx.ID_SAVEAS)

=== modified file 'source/gui/settingsDialogs.py'
--- source/gui/settingsDialogs.py	2013-01-28 19:28:35 +0000
+++ source/gui/settingsDialogs.py	2013-02-08 14:56:51 +0000
@@ -112,18 +112,24 @@
 	# Translators: This is the label for the general settings dialog.
 	title = _("General Settings")
 	LOG_LEVELS = (
+		# Translators: One of the log levels of NVDA (the info mode shows info as NVDA runs).
 		(log.INFO, _("info")),
+		# Translators: One of the log levels of NVDA (the debug warning shows debugging messages and warnings as NVDA runs).
 		(log.DEBUGWARNING, _("debug warning")),
+		# Translators: One of the log levels of NVDA (the input/output shows keyboard commands and/or braille commands as well as speech and/or braille output of NVDA).
 		(log.IO, _("input/output")),
+		# Translators: One of the log levels of NVDA (the debug mode shows debug messages as NVDA runs).
 		(log.DEBUG, _("debug"))
 	)
 
 	def makeSettings(self, settingsSizer):
 		languageSizer=wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for a setting in general settings to select NVDA's interface language (once selected, NVDA must be restarted; the option user default means the user's Windows language will be used).
 		languageLabel=wx.StaticText(self,-1,label=_("&Language (requires restart to fully take effect):"))
 		languageSizer.Add(languageLabel)
 		languageListID=wx.NewId()
 		self.languageNames=languageHandler.getAvailableLanguages()
+		# Translators: The list of languages for NVDA.
 		self.languageList=wx.Choice(self,languageListID,name=_("Language"),choices=[x[1] for x in self.languageNames])
 		self.languageList.SetToolTip(wx.ToolTip("Choose the language NVDA's messages and user interface should be presented in."))
 		try:
@@ -136,18 +142,22 @@
 		if globalVars.appArgs.secure:
 			self.languageList.Disable()
 		settingsSizer.Add(languageSizer,border=10,flag=wx.BOTTOM)
+		# Translators: The label for a setting in general settings to save current configuration when NVDA exits (if it is not checked, user needs to save configuration before quitting NVDA).
 		self.saveOnExitCheckBox=wx.CheckBox(self,wx.NewId(),label=_("&Save configuration on exit"))
 		self.saveOnExitCheckBox.SetValue(config.conf["general"]["saveConfigurationOnExit"])
 		if globalVars.appArgs.secure:
 			self.saveOnExitCheckBox.Disable()
 		settingsSizer.Add(self.saveOnExitCheckBox,border=10,flag=wx.BOTTOM)
+		# Translators: The label for a setting in general settings to ask before quitting NVDA (if not checked, NVDA will exit without asking the user for confirmation).
 		self.askToExitCheckBox=wx.CheckBox(self,wx.NewId(),label=_("&Warn before exiting NVDA"))
 		self.askToExitCheckBox.SetValue(config.conf["general"]["askToExit"])
 		settingsSizer.Add(self.askToExitCheckBox,border=10,flag=wx.BOTTOM)
 		logLevelSizer=wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for a setting in general settings to select logging level of NVDA as it runs (available options and what they are logged are found under comments for the logging level messages themselves).
 		logLevelLabel=wx.StaticText(self,-1,label=_("L&ogging level:"))
 		logLevelSizer.Add(logLevelLabel)
 		logLevelListID=wx.NewId()
+		# Translators: A combo box to choose log level (possible options are info, debug warning, input/output and debug).
 		self.logLevelList=wx.Choice(self,logLevelListID,name=_("Log level"),choices=[name for level, name in self.LOG_LEVELS])
 		curLevel = log.getEffectiveLevel()
 		for index, (level, name) in enumerate(self.LOG_LEVELS):
@@ -158,23 +168,26 @@
 			log.debugWarning("Could not set log level list to current log level") 
 		logLevelSizer.Add(self.logLevelList)
 		settingsSizer.Add(logLevelSizer,border=10,flag=wx.BOTTOM)
+		# Translators: The label for a setting in general settings to allow NVDA to start after logging onto Windows (if checked, NvDA will start automatically after loggin into Windows; if not, user must start NVDA by pressing the shortcut key (CTRL+Alt+N by default).
 		self.startAfterLogonCheckBox = wx.CheckBox(self, wx.ID_ANY, label=_("&Automatically start NVDA after I log on to Windows"))
 		self.startAfterLogonCheckBox.SetValue(config.getStartAfterLogon())
 		if globalVars.appArgs.secure or not config.isInstalledCopy():
 			self.startAfterLogonCheckBox.Disable()
 		settingsSizer.Add(self.startAfterLogonCheckBox)
+		# Translators: The label for a setting in general settings to allow NVDA to come up in Windows login screen (useful if user needs to enter passwords or if multiple user accounts are present to allow user to choose the correct account).
 		self.startOnLogonScreenCheckBox = wx.CheckBox(self, wx.ID_ANY, label=_("Use NVDA on the Windows logon screen (requires administrator privileges)"))
 		self.startOnLogonScreenCheckBox.SetValue(config.getStartOnLogonScreen())
 		if globalVars.appArgs.secure or not config.isServiceInstalled():
 			self.startOnLogonScreenCheckBox.Disable()
 		settingsSizer.Add(self.startOnLogonScreenCheckBox)
+		# Translators: The label for a button in general settings to copy current user settings to system settings (to allow current settings to be used in secure screens such as User Account Control (UAC) dialog).
 		self.copySettingsButton= wx.Button(self, wx.ID_ANY, label=_("Use currently saved settings on the logon and other secure screens (requires administrator privileges)"))
 		self.copySettingsButton.Bind(wx.EVT_BUTTON,self.onCopySettings)
 		if globalVars.appArgs.secure or not config.isServiceInstalled():
 			self.copySettingsButton.Disable()
 		settingsSizer.Add(self.copySettingsButton)
 		if updateCheck:
-			# Translators: The label of a checkbox to toggle automatic checking for updated versions of NVDA.
+			# Translators: The label of a checkbox in general settings to toggle automatic checking for updated versions of NVDA (if not checked, user must check for updates manually).
 			item=self.autoCheckForUpdatesCheckBox=wx.CheckBox(self,label=_("Automatically check for &updates to NVDA"))
 			item.Value=config.conf["update"]["autoCheck"]
 			if globalVars.appArgs.secure:
@@ -188,7 +201,9 @@
 		for packageType in ('addons','appModules','globalPlugins','brailleDisplayDrivers','synthDrivers'):
 			if len(os.listdir(os.path.join(globalVars.appArgs.configPath,packageType)))>0:
 				if gui.messageBox(
+					# Translators: A message to warn the user when attempting to copy current settings to system settings.
 					_("Custom plugins were detected in your user settings directory. Copying these to the system profile could be a security risk. Do you still wish to copy your settings?"),
+					# Translators: The title of the warning dialog displayed when trying to copy settings for use in secure screens.
 					_("Warning"),wx.YES|wx.NO|wx.ICON_WARNING,self
 				)==wx.NO:
 					return
@@ -220,8 +235,10 @@
 		progressDialog.done()
 		del progressDialog
 		if not res:
+			# Translators: The message displayed when errors were found while trying to copy current configuration to system settings.
 			gui.messageBox(_("Error copying NVDA user settings"),_("Error"),wx.OK|wx.ICON_ERROR,self)
 		else:
+			# Translators: The message displayed when copying configuration to system settings was successful.
 			gui.messageBox(_("Successfully copied NVDA user settings"),_("Success"),wx.OK|wx.ICON_INFORMATION,self)
 
 	def onOk(self,evt):
@@ -252,7 +269,9 @@
 			updateCheck.initialize()
 		if self.oldLanguage!=newLanguage:
 			if gui.messageBox(
+				# Translators: The message displayed after NVDA interface language has been changed.
 				_("For the new language to take effect, the configuration must be saved and NVDA must be restarted. Press enter to save and restart NVDA, or cancel to manually save and exit at a later time."),
+				# Translators: The title of the dialog which appears when the user changed NVDA's interface language.
 				_("Language Configuration Change"),wx.OK|wx.CANCEL|wx.ICON_WARNING,self
 			)==wx.OK:
 				config.save()
@@ -444,18 +463,18 @@
 		#Create controls for Synth Settings
 		self.updateVoiceSettings()
 		# Translators: This is the label for a checkbox in the
-		# voice settings dialog.
+		# voice settings dialog (if checked, text will be read using the voice for the language of the text).
 		self.autoLanguageSwitchingCheckbox=wx.CheckBox(self,wx.NewId(),label=_("Automatic language switching (when supported)"))
 		self.autoLanguageSwitchingCheckbox.SetValue(config.conf["speech"]["autoLanguageSwitching"])
 		settingsSizer.Add(self.autoLanguageSwitchingCheckbox,border=10,flag=wx.BOTTOM)
 		# Translators: This is the label for a checkbox in the
-		# voice settings dialog.
+		# voice settings dialog (if checked, different voices for dialects will be used to read text in that dialect).
 		self.autoDialectSwitchingCheckbox=wx.CheckBox(self,wx.NewId(),label=_("Automatic dialect switching (when supported)"))
 		self.autoDialectSwitchingCheckbox.SetValue(config.conf["speech"]["autoDialectSwitching"])
 		settingsSizer.Add(self.autoDialectSwitchingCheckbox,border=10,flag=wx.BOTTOM)
 		sizer=wx.BoxSizer(wx.HORIZONTAL)
 		# Translators: This is the label for a combobox in the
-		# voice settings dialog.
+		# voice settings dialog (possible choices are none, some, most and all).
 		sizer.Add(wx.StaticText(self,wx.ID_ANY,label=_("Punctuation/symbol &level:")))
 		symbolLevelLabels=characterProcessing.SPEECH_SYMBOL_LEVEL_LABELS
 		self.symbolLevelList=wx.Choice(self,wx.ID_ANY,choices=[symbolLevelLabels[level] for level in characterProcessing.CONFIGURABLE_SPEECH_SYMBOL_LEVELS])
@@ -463,6 +482,7 @@
 		self.symbolLevelList.SetSelection(characterProcessing.CONFIGURABLE_SPEECH_SYMBOL_LEVELS.index(curLevel))
 		sizer.Add(self.symbolLevelList)
 		settingsSizer.Add(sizer,border=10,flag=wx.BOTTOM)
+		# Translators: This is a label for a setting in voice settings (an edit box to change voice pitch for capital letters; the higher the value, the pitch will be higher).
 		capPitchChangeLabel=wx.StaticText(self,-1,label=_("Capital pitch change percentage"))
 		settingsSizer.Add(capPitchChangeLabel)
 		self.capPitchChangeEdit=wx.TextCtrl(self,wx.NewId())
@@ -1093,17 +1113,22 @@
 		super(DictionaryEntryDialog,self).__init__(parent,title=title)
 		mainSizer=wx.BoxSizer(wx.VERTICAL)
 		settingsSizer=wx.BoxSizer(wx.VERTICAL)
+		# Translators: This is a label for an edit field in add dictionary entry dialog.
 		settingsSizer.Add(wx.StaticText(self,-1,label=_("&Pattern")))
 		self.patternTextCtrl=wx.TextCtrl(self,wx.NewId())
 		settingsSizer.Add(self.patternTextCtrl)
+		# Translators: This is a label for an edit field in add dictionary entry dialog and in punctuation/symbol pronunciation dialog.
 		settingsSizer.Add(wx.StaticText(self,-1,label=_("&Replacement")))
 		self.replacementTextCtrl=wx.TextCtrl(self,wx.NewId())
 		settingsSizer.Add(self.replacementTextCtrl)
+		# Translators: This is a label for an edit field in add dictionary entry dialog.
 		settingsSizer.Add(wx.StaticText(self,-1,label=_("&Comment")))
 		self.commentTextCtrl=wx.TextCtrl(self,wx.NewId())
 		settingsSizer.Add(self.commentTextCtrl)
+		# Translators: This is a label for a checkbox in add dictionary entry dialog.
 		self.caseSensitiveCheckBox=wx.CheckBox(self,wx.NewId(),label=_("Case &sensitive"))
 		settingsSizer.Add(self.caseSensitiveCheckBox)
+		# Translators: This is a label for a checkbox in add dictionary entry dialog.
 		self.regexpCheckBox=wx.CheckBox(self,wx.NewId(),label=_("Regular &expression"))
 		settingsSizer.Add(self.regexpCheckBox)
 		mainSizer.Add(settingsSizer,border=20,flag=wx.LEFT|wx.RIGHT|wx.TOP)
@@ -1126,13 +1151,19 @@
 	def makeSettings(self, settingsSizer):
 		dictListID=wx.NewId()
 		entriesSizer=wx.BoxSizer(wx.VERTICAL)
+		# Translators: The label for the combo box of dictionary entries in speech dictionary dialog.
 		entriesLabel=wx.StaticText(self,-1,label=_("&Dictionary entries"))
 		entriesSizer.Add(entriesLabel)
 		self.dictList=wx.ListCtrl(self,dictListID,style=wx.LC_REPORT|wx.LC_SINGLE_SEL,size=(550,350))
+		# Translators: The label for a column in dictionary entries list used to identify comments for the entry.
 		self.dictList.InsertColumn(0,_("Comment"),width=150)
+		# Translators: The label for a column in dictionary entries list used to identify pattern (original word or a pattern).
 		self.dictList.InsertColumn(1,_("Pattern"),width=150)
+		# Translators: The label for a column in dictionary entries list and in a list of symbols from symbol pronunciation dialog used to identify replacement for a pattern or a symbol
 		self.dictList.InsertColumn(2,_("Replacement"),width=150)
+		# Translators: The label for a column in dictionary entries list used to identify whether the entry is case sensitive or not.
 		self.dictList.InsertColumn(3,_("case"),width=50)
+		# Translators: The label for a column in dictionary entries list used to identify whether the entry is a regular expression or not.
 		self.dictList.InsertColumn(4,_("Regexp"),width=50)
 		self.offOn = (_("off"),_("on"))
 		for entry in self.tempSpeechDict:
@@ -1142,9 +1173,11 @@
 		settingsSizer.Add(entriesSizer)
 		entryButtonsSizer=wx.BoxSizer(wx.HORIZONTAL)
 		addButtonID=wx.NewId()
+		# Translators: The label for a button in speech dictionaries dialog to add new entries.
 		addButton=wx.Button(self,addButtonID,_("&Add"),wx.DefaultPosition)
 		entryButtonsSizer.Add(addButton)
 		editButtonID=wx.NewId()
+		# Translators: The label for a button in speech dictionaries dialog to edit existing entries.
 		editButton=wx.Button(self,editButtonID,_("&Edit"),wx.DefaultPosition)
 		entryButtonsSizer.Add(editButton)
 		removeButtonID=wx.NewId()
@@ -1222,6 +1255,7 @@
 
 	def makeSettings(self, settingsSizer):
 		sizer = wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for a setting in braille settings to choose a braille display.
 		label = wx.StaticText(self, wx.ID_ANY, label=_("Braille &display:"))
 		driverList = braille.getDisplayList()
 		self.displayNames = [driver[0] for driver in driverList]
@@ -1237,6 +1271,7 @@
 		settingsSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
 		sizer = wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for a setting in braille settings to choose the connection port (if the selected braille display supports port selection).
 		label = wx.StaticText(self, wx.ID_ANY, label=_("&Port:"))
 		self.portsList = wx.Choice(self, wx.ID_ANY, choices=[])
 		sizer.Add(label)
@@ -1245,6 +1280,7 @@
 		self.updatePossiblePorts()
 
 		sizer = wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for a setting in braille settings to select the output table (the braille table used to read braille text on the braille display).
 		label = wx.StaticText(self, wx.ID_ANY, label=_("&Output table:"))
 		self.tableNames = [table[0] for table in braille.TABLES]
 		self.tableList = wx.Choice(self, wx.ID_ANY, choices=[table[1] for table in braille.TABLES])
@@ -1258,6 +1294,7 @@
 		settingsSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
 		sizer = wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for a setting in braille settings to select the input table (the braille table used to type braille characters on a braille keyboard).
 		label = wx.StaticText(self, wx.ID_ANY, label=_("&Input table:"))
 		self.inputTableNames = [table[0] for table in braille.INPUT_TABLES]
 		self.inputTableList = wx.Choice(self, wx.ID_ANY, choices=[table[1] for table in braille.INPUT_TABLES])
@@ -1270,11 +1307,13 @@
 		sizer.Add(self.inputTableList)
 		settingsSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
+		# Translators: The label for a setting in braille settings to expand the current word under cursor to computer braille.
 		self.expandAtCursorCheckBox = wx.CheckBox(self, wx.ID_ANY, label=_("E&xpand to computer braille for the word at the cursor"))
 		self.expandAtCursorCheckBox.SetValue(config.conf["braille"]["expandAtCursor"])
 		settingsSizer.Add(self.expandAtCursorCheckBox, border=10, flag=wx.BOTTOM)
 
 		sizer = wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for a setting in braille settings to change cursor blink rate in milliseconds (1 second is 1000 milliseconds).
 		label = wx.StaticText(self, wx.ID_ANY, label=_("Cursor blink rate (ms)"))
 		sizer.Add(label)
 		self.cursorBlinkRateEdit = wx.TextCtrl(self, wx.ID_ANY)
@@ -1283,6 +1322,7 @@
 		settingsSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
 		sizer = wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for a setting in braille settings to change how long a message stays on the braille display (in seconds).
 		label = wx.StaticText(self, wx.ID_ANY, label=_("Message timeout (sec)"))
 		sizer.Add(label)
 		self.messageTimeoutEdit = wx.TextCtrl(self, wx.ID_ANY)
@@ -1291,6 +1331,7 @@
 		settingsSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
 		sizer = wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for a setting in braille settings to set whether braille should be tethered to focus or review cursor.
 		label = wx.StaticText(self, wx.ID_ANY, label=_("Braille tethered to:"))
 		self.tetherValues=[("focus",_("focus")),("review",_("review"))]
 		self.tetherList = wx.Choice(self, wx.ID_ANY, choices=[x[1] for x in self.tetherValues])
@@ -1304,10 +1345,12 @@
 		sizer.Add(self.tetherList)
 		settingsSizer.Add(sizer, border=10, flag=wx.BOTTOM)
 
+		# Translators: The label for a setting in braille settings to read by paragraph (if it is checked, the commands to move the display by lines moves the display by paragraphs instead).
 		item = self.readByParagraphCheckBox = wx.CheckBox(self, label=_("Read by &paragraph"))
 		item.Value = config.conf["braille"]["readByParagraph"]
 		settingsSizer.Add(item, border=10, flag=wx.BOTTOM)
 
+		# Translators: The label for a setting in braille settings to enable word wrap (try to avoid spliting words at the end of the braille display).
 		item = self.wordWrapCheckBox = wx.CheckBox(self, label=_("Avoid splitting &words when possible"))
 		item.Value = config.conf["braille"]["wordWrap"]
 		settingsSizer.Add(item, border=10, flag=wx.BOTTOM)
@@ -1383,10 +1426,13 @@
 		symbols = self.symbols = [copy.copy(symbol) for symbol in self.symbolProcessor.computedSymbols.itervalues()]
 
 		sizer = wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for symbols list in symbol pronunciation dialog.
 		sizer.Add(wx.StaticText(self, wx.ID_ANY, _("&Symbols")))
 		self.symbolsList = wx.ListCtrl(self, wx.ID_ANY, style=wx.LC_REPORT | wx.LC_SINGLE_SEL, size=(360, 350))
+		# Translators: The label for a column in symbols list used to identify a symbol.
 		self.symbolsList.InsertColumn(0, _("Symbol"), width=150)
 		self.symbolsList.InsertColumn(1, _("Replacement"), width=150)
+		# Translators: The label for a column in symbols list used to identify a symbol's speech level (either none, some, most, all or character).
 		self.symbolsList.InsertColumn(2, _("Level"), width=60)
 		for symbol in symbols:
 			item = self.symbolsList.Append((symbol.displayName,))
@@ -1396,6 +1442,7 @@
 		sizer.Add(self.symbolsList)
 		settingsSizer.Add(sizer)
 
+		# Translators: The label for the edit field in symbol pronunciation dialog to change the pronunciation of a symbol.
 		changeSizer = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, _("Change symbol")), wx.VERTICAL)
 		sizer = wx.BoxSizer(wx.HORIZONTAL)
 		sizer.Add(wx.StaticText(self, wx.ID_ANY, _("&Replacement")))
@@ -1404,6 +1451,7 @@
 		sizer.Add(self.replacementEdit)
 		changeSizer.Add(sizer)
 		sizer = wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for the combo box in symbol pronunciation dialog to change the speech level of a symbol.
 		sizer.Add(wx.StaticText(self, wx.ID_ANY, _("&Level")))
 		symbolLevelLabels = characterProcessing.SPEECH_SYMBOL_LEVEL_LABELS
 		self.levelList = wx.Choice(self, wx.ID_ANY,choices=[

=== modified file 'source/virtualBuffers/__init__.py'
--- source/virtualBuffers/__init__.py	2013-04-12 11:16:19 +0000
+++ source/virtualBuffers/__init__.py	2013-04-13 02:05:12 +0000
@@ -1322,7 +1322,7 @@
 			tableID, origRow, origCol, origRowSpan, origColSpan = self._getTableCellCoords(self.selection)
 		except LookupError:
 			# Translators: The message reported when a user attempts to use a table movement command
-			# when the cursor is not withnin a table.
+			# when the cursor is not within a table.
 			ui.message(_("Not in a table cell"))
 			return
 
@@ -1467,7 +1467,9 @@
 		container.collapse(end=True)
 		if container._startOffset>=container._getStoryLength():
 			container.move(textInfos.UNIT_CHARACTER,-1)
-			# Translators: a message reported when landing at the end of a browse mode document when trying to jump to the end of the current container. 
+			# Translators: a message reported when:
+			# Review cursor is at the bottom line of the current navigator object.
+			# Landing at the end of a browse mode document when trying to jump to the end of the current container. 
 			ui.message(_("bottom"))
 		self._set_selection(container, reason=self.REASON_QUICKNAV)
 		container.expand(textInfos.UNIT_LINE)
@@ -1510,141 +1512,245 @@
 # Add quick navigation scripts.
 qn = VirtualBuffer.addQuickNav
 qn("heading", key="h",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next heading"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next heading"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous heading"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous heading"))
 qn("heading1", key="1",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next heading at level 1"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next heading at level 1"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous heading at level 1"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous heading at level 1"))
 qn("heading2", key="2",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next heading at level 2"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next heading at level 2"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous heading at level 2"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous heading at level 2"))
 qn("heading3", key="3",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next heading at level 3"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next heading at level 3"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous heading at level 3"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous heading at level 3"))
 qn("heading4", key="4",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next heading at level 4"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next heading at level 4"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous heading at level 4"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous heading at level 4"))
 qn("heading5", key="5",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next heading at level 5"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next heading at level 5"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous heading at level 5"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous heading at level 5"))
 qn("heading6", key="6",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next heading at level 6"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next heading at level 6"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous heading at level 6"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous heading at level 6"))
 qn("table", key="t",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next table"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next table"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous table"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous table"),
 	readUnit=textInfos.UNIT_LINE)
 qn("link", key="k",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next link"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next link"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous link"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous link"))
 qn("visitedLink", key="v",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next visited link"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next visited link"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous visited link"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous visited link"))
 qn("unvisitedLink", key="u",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next unvisited link"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next unvisited link"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous unvisited link"), 
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous unvisited link"))
 qn("formField", key="f",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next form field"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next form field"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous form field"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous form field"),
 	readUnit=textInfos.UNIT_LINE)
 qn("list", key="l",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next list"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next list"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous list"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous list"),
 	readUnit=textInfos.UNIT_LINE)
 qn("listItem", key="i",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next list item"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next list item"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous list item"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous list item"))
 qn("button", key="b",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next button"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next button"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous button"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous button"))
 qn("edit", key="e",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next edit field"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next edit field"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous edit field"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous edit field"),
 	readUnit=textInfos.UNIT_LINE)
 qn("frame", key="m",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next frame"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next frame"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous frame"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous frame"),
 	readUnit=textInfos.UNIT_LINE)
 qn("separator", key="s",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next separator"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next separator"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous separator"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous separator"))
 qn("radioButton", key="r",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next radio button"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next radio button"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous radio button"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous radio button"))
 qn("comboBox", key="c",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next combo box"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next combo box"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous combo box"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous combo box"))
 qn("checkBox", key="x",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next check box"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next check box"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous check box"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous check box"))
 qn("graphic", key="g",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next graphic"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next graphic"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous graphic"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous graphic"))
 qn("blockQuote", key="q",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next block quote"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next block quote"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous block quote"), 
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous block quote"))
 qn("notLinkBlock", key="n",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("skips forward past a block of links"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no more text after a block of links"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("skips backward past a block of links"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no more text before a block of links"),
 	readUnit=textInfos.UNIT_LINE)
 qn("landmark", key="d",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next landmark"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next landmark"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous landmark"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous landmark"),
 	readUnit=textInfos.UNIT_LINE)
 qn("embeddedObject", key="o",
+	# Translators: Input help message for a quick navigation command in browse mode.
 	nextDoc=_("moves to the next embedded object"),
+	# Translators: Message presented when the browse mode element is not found.
 	nextError=_("no next embedded object"),
+	# Translators: Input help message for a quick navigation command in browse mode.
 	prevDoc=_("moves to the previous embedded object"),
+	# Translators: Message presented when the browse mode element is not found.
 	prevError=_("no previous embedded object"))
 del qn
 

# Begin bundle
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
LKfg
