###############################################################################
# Copyright (c) 2000, 2005 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################

# ==============================================
# Intro plugin properties file
# ==============================================

# Browser Part
# -------------
Browser_homeButton_tooltip = Home 
Browser_forwardButton_tooltip = Navigate to next topic 
Browser_backwardButton_tooltip = Navigate to previous topic 
Browser_invalidConfig = Invalid configuration; can not set browser content


# Dialogs
# --------
MessageDialog_errorTitle		= Intro Error
MessageDialog_warningTitle		= Intro Warning
MessageDialog_infoTitle			= Intro Information

CustomizableIntroPart_configNotFound = Could not find a valid configuration for \
				Intro Part: {0} \nCheck Error Log View for details.

StandbyPart_returnToIntro = Return to Welcome
StandbyPart_returnTo = Return to

EmptyStandbyContentPart_text = No standby content available.

IntroURL_failedToDecode = Failed to decode message: {0}
IntroURL_badCommand = Invalid Intro URL: {0}
HyperlinkAdapter_urlIs = URL of this link is: 
HTML_embeddedLink = Link to embedded data
OpenBroswer_failedToLaunch = Failed to launch external browser.
StaticHTML_welcome = Welcome...

IntroLaunchBar_commandBase=http://org.eclipse.ui.intro/showPage?id=
IntroLaunchBar_close.label=Close
IntroLaunchBar_close_tooltip=Close
IntroLaunchBar_restore_tooltip=Return to Welcome

# Misc
-------
IntroPart_showContentButton_tooltip = Show Intro Tree 


