#-------------------------------------------------------------------------------
# Copyright (c) 2005, 2006 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 implementation.
#-------------------------------------------------------------------------------
# NLS_MESSAGEFORMAT_VAR
#
# Message ID Range: IUPE0200E - IUPE0299E
#

# Import Library Configuration Wizard
importConfigWizard_title=Import Library Configuration
selectConfigDirWizardPage_title=Specify import directory
selectConfigDirWizardPage_text=Specify the directory containing the library configuration to import.
reviewChangesWizardPage_title=Review library changes
reviewChangesWizardPage_text=Review the changes that will be made to the current method library.
selectConfigSpecsWizardPage_title=Select configuration specifications
selectConfigSpecsWizardPage_text=Select one or more configuration specifications to import.

# Import Method Plug-ins Wizard
importPluginsWizard_title=Import Method Plug-ins
selectPluginsDirWizardPage_title=Specify import directory
selectPluginsDirWizardPage_text=Specify the directory containing the method plug-ins to import.
selectPluginsWizardPage_title=Select method plug-ins
selectPluginsWizardPage_text=Select one or more method plug-ins to import. If a selected plug-n already exists in the current method library, verify the version differences.
importPluginsWizard_ERR_Import_plugin=Import plugin failed

ConfigurationImportService_MSG0=Validating selected library configuration...
ConfigurationImportService_MSG1=The specified directory does not contain a valid configuration.
ConfigurationImportService_MSG3=Importing method configuration...
ConfigurationImportService_MSG2=Cannot import the currently opened library into itself.
ImportConfigurationWizard_MSG1=Importing method configuration...
ImportConfigurationWizard_ERR_Import_configuration=Import configuration failed

FileModifyChecker_Checkout_failed_title=Checkout failed
FileModifyChecker_Checkout_failed_msg=Some files are not checked out, do you want to try again?

ImportConfigReportPage_title=Importing Configuration Report
ImportPluginWizard_readonly=IUPE0201E: Library is read-only.
ImportPluginWizard_MSG1=Importing method plug-in...
ImportPluginWizard_error=Error
ImportPluginWizard_warn_existing_plugins=IUPE0200E: The following selected plugin(s) already exist and re-importing the same plugin(s) will overwrite the existing one(s):\n\n {0} \n\nAre you sure you want to continue?
ImportPluginWizard_confirm_continue=\n\nAre you sure you want to continue?
ImportPluginWizard_warn_circular_plugins=Circular references detected among the following plugins

SelectConfigsToImport_label1=The following elements will be imported:
ImportConfigurationWizard_error=Error
SelectImportConfigurationSource_MSG1=Analyzing
SelectConfigSpecsToImportPage_title2=Select configuration specifications to import
SelectImportPluginSource_not_used=not_used
SelectImportPluginSource_no_path=The specified directory does not exist.
SelectImportPluginSource_no_dir=No directory specified
SelectPluginsToImport_label_plugins=Available plug-ins in the import directory:
SelectPluginsToImport_label_author=Author:
SelectPluginsToImport_label_version=Version:
SelectPluginsToImport_label_desc=Brief description:
ImportConfigurationWizard_readonly=IUPE0201E: Library is read-only.
PluginImportingService_MSG0=Validating selected plug-ins...
PluginImportingService_MSG1=The specified path does not contain a valid method plug-in.
PluginImportingService_MSG3=Importing method plug-in...
PluginImportingService_MSG5=The selected method plug-in cannot be imported. Its dependent plug-in ''{0}'' cannot be found in the current method library.
PluginImportingService_MSG6=The selected method plug-in cannot be imported. A dependent plug-in cannot be found in the current method library.
DiffReportViewer_content=Content
DiffReportViewer_in_import=In Import
SelectPluginsToImport_MSG1=Analyzing files...
DiffReportLabelProvider_yes=Yes
SelectPluginsToImport_error=Error
DiffReportViewer_in_lib=In Library
DiffReportViewer_status=Status
SelectPluginsToImport_libraryPluginExists=Selected plug-in found in the current library
SelectPluginsToImport_libraryPluginNotExists=Selected plug-in not found in the current library
SelectConfigSpecsToImportPage_libraryConfigSpecExists=Configuration found in the current library
SelectConfigSpecsToImportPage_configSpecNoSelection=No configuration specification selected.
SelectConfigSpecsToImportPage_configSpecDataLabel=Selected configuration in the import directory
SelectConfigSpecsToImportPage_label_configs=Available configuration specifications in the import directory:
SelectImportConfigurationSource_not_used=not_used
SelectConfigSpecsToImportPage_label_desc=Brief description:
SelectImportConfigurationSource_no_path=The specified path does not exist.
SelectPluginsToImport_pluginNoSelection=No plug-in selected.
SelectImportConfigurationSource_no_dir=No directory specified
SelectImportConfigurationSource_plugin_readonly=Plugin {0} is readonly\n
SelectImportConfigurationSource_plugin_locked=IUPE0203E: Plugin {0} is locked\n
SelectImportConfigurationSource_error_not_updatable=Some of the plugin(s) in the library are either locked or readonly.\n Please unlock the plugins and make sure the files are updatable.
SelectPluginsToImport_pluginDataLabel=Selected plug-in in the import directory
DiffReportViewer_type=Content Type
SelectConfigSpecsToImportPage_libraryConfigSpecNotExists=Selected configuration not found in the current library.
versionMismatch_oldData=IUPE0204E: The specified files were exported by a previous version ({0}) of {1}. The files must be exported using the current version of {1}.
versionMismatch_oldData_unknown=IUPE0205E: The specified files were exported by a previous version of {0}. The files must be exported using the current version of {0}.
versionMismatch_oldTool=IUPE0206E: The specified files were exported by a newer version ({0}) of {1}. You must upgrade {1} in order to import the files.  
versionMismatch_oldTool_unknown=IUPE0207E: The specified files cannot be opened. You must upgrade {0} in order to import the files.  
