

###### F1 on F1.
f1Shell			=	Context-sensitive "infopop" help is provided for many \
				interfaces, including views, wizards, fields, checkboxes, \
				buttons, and menu items. To access this help, bring focus \
				to the item by clicking it or using the tab key, and then \
				press F1.\n\n\
				Some infopops include links to topics within the online \
				help where you can find more information about \
				the item.\n\n\
				This infopop opened because you pressed F1 while an infopop \
				was already open.



###### not used, but picked up by most contexts.
embeddedHelpView	=	Navigate to the desired topic in the left-hand frame. \
				Topics will be displayed in the right-hand frame. To search, \
				click the <b>Search</b> tab at the bottom of the navigation frame.




###### Works on Linux, not Windows.
browser			=	Displays the content of the topic selected in the navigation \
				frame, or linked from other topics.\n\n\
				Click the <b>Show/Hide navigation</b> button above to show or \
				hide the navigation frame.




###### Information Set drop-down list; inherited by things on the left-hand side.
navigationViewer	=	Select an information set from the drop down list, and choose the \
				navigation View you prefer from the tabs at the bottom.\n\n\
				All navigation views contain links to the same information set, \
				but they are organized in different ways to help you find the right \
				information. The search engine searches only the current information \
				set.




###### Navigation trees 
topicsViewer		=	Expand the topic tree to the desired topic and click on the topic \
				to select it. To print a topic and all its child topics, \
				right-click the topic and select <b>Print topics tree</b>.\n\n\
				To select another navigation view, click a tab at the bottom of the \
				navigation frame. All navigation views contain links to the same \
				information set, but they are organized in different ways to help \
				you find the right information.



###### Advanced Search window options
advancedSearch		=	Enable <b>Search headings only</b> to return topics that contain \
				the search terms in their headings.\n\n\
				Enable <b>Search within results</b> to refine your last search by \
				searching only within the current result set. Remember to clear this \
				option after you complete the search, or else future searches will \
				continue to refine the current search.\n\n\
				Enable topic groups under <b>Enable filtering by</b> to limit the search \
				to only those topic groups.



###### Search field, Go button, Advanced button 
searchPage		=	Type a search term or terms in the field, and then click <b>Go</b>. \
				This will return all topics that contain all the search terms, \
				in a ranked, expandable and collapsible list.\n\n\
				You can use OR and NOT qualifiers between terms. Also, if you put \
				double-quotation marks around a phrase, search will return \
				only results that contain the exact phrase.\n\n\
				Click <b>Advanced</b> to see the advanced search settings, including \
				searching headings only, refining the current search, and additional \
				filtering.




###### Search results tree; inherits searchPage, topicsViewer, embeddedHelpView 
resultsViewer		=	Shows the results of the last-run search. If there are more than \
				fifteen topics, they are grouped in expandable and collapsible folders. \
				Select a topic to see its content in the right-hand frame. \
				Click <b>Advanced</b> to search only within headings, narrow the \
				most recent search by searching again within the current result set, \
				or filter out certain groups of information.





###### Help page in preferences dialog, Default and Apply buttons 
prefPage		=	This page sets advanced help configuration options, including installing \
				documentation on a server, logging errors for trouble shooting, and \
				configuring the internal help server. Select one of the options and press \
				F1 for more information.\n\n\
				Click <b>Default</b> to load the default product settings. Click \
				<b>Apply</b> to apply changes you have made without closing the dialog box.






# Doc location group, including browser path 
installOptions		=	Lets you specify whether the documentation is installed locally \
				or remotely. If you select <b>Remotely on a server</b>, provide \
				a URL for the server (for example, http://docserver.company.com/). \
				Talk to your system administrator to ensure the server is \
				configured correctly and the documentation is installed on it.





# not used 
browserPath		=	Specify the path to the browser that you want to use for displaying \
				the online documentation (for example, /usr/bin/netscape).





# Logging options group 
loggingOptions		=	Specify the level of information reported in the help log file. \
				The errors, warnings, and other information (depending on the \
				level you select) are logged in the file \
				.metadata\\.plugins\\org.eclipse.help.ui\\.log, where .metadata \
				is the product's working directory. If the documentation is \
				installed remotely, there will be a log file on the server as well.





# Help server config group 
localServerConfig	=	Allows you to override the network address that the help system will use \
				internally. Use the <b>Manual</b> option only when the help system is not working \
				because the port it is trying to use is taken, or because your IP \
				address has changed.\n\n\
				Under normal circumstances, use the <b>Automatic</b> setting.





###### not used 
synchronizeAction	=	Synchronizes the navigation with the current topic in the content frame.
copyAction		=	Copies the selected text into the clipboard.
printAction		=	Displays a print dialog box, which lets you print the current topic.
backAction		=	Navigates to the last-viewed topic.
forwardAction		=	Navigates to the topic that you were viewing before you clicked the <b>Back</b> button.
homeAction		=	Opens the home page for the information set.
showHideAction		=	Hides or shows navigation frame on the left-hand side of the help view.


