# NLS_ENCODING=UNICODE
#-------------------------------------------------------------------------------
# Copyright (c) 2000, 2007 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:
#

# Export XML Wizard
exportXMLWizard_title=Export XML

# Select Export Type Wizard Page
selectExportTypePage_desc=Select the type of method library content to export.
exportLibraryRadioButton_text=Export the entire method library
exportPluginsRadioButton_text=Export one or more method plug-ins
exportConfigsRadioButton_text=Export a method configuration

# Select Destination XML File Wizard Page
selectXMLFilePage_title=Specify export file
selectXMLFilePage_desc=Specify a destination XML file to store the exported method library content.
fileLabel_text=XML File:
browseButton_text=Browse...

# Overwrite Confirmation Dialog
overwriteText_msg=''{0}'' already exists.\nDo you want to overwrite it?
overwriteText_msg1=''{0}'' already exists.\nDo you want to overwrite it and its containing folder ''{1}''?

# Progress Messages
exportingXML_text=Export method library content to XML file...

# Error Messages
invalidXMLFile_error=The specified XML file is not valid.
exportXMLWizard_error=IUPM0000E: The Export failed: {0}
exportXMLWizard_reviewLog=Export completed. Please review the log files under the export directory.
exportXMLService_error=Error exporting library: {0}
exportXMLService_feature_error=Error setting feature value:: Element={0}, feature={1}
xmlLibrary_error_load_xml=Unable to load XML source ''{0}''
xmlLibrary_no_plugin=No method plug-in for id {0}
xmlLibrary_no_feature=Unable to get XML feature for {0}_{1}
xmlLibrary_no_class=Unable to get EClass for {0}
xmlLibrary_error_create_element=Error creating element, do not know how to set value for feature {0}
xmlLibrary_error_set_value=Error creating element, cannot set value {0} to container {1}
xmlLibrary_invalid_feature_value=Invalid attribute feature value for feature {0}, with value {1}
xmlLibrary_error_set_value_2=Error setting attribute, Unable to set value for feature={0}, object={1}, value={2}
xmlLibrary_error_set_value_3=Don''t know how to set value for feature={0}, object={1}, value={2}
xmlLibrary_error_set_reference=Error setting reference, Unable to set value for feature={0}, object={1}, value={2}
xmlLibrary_error_process_wrong_container=Process ''{0}'' does not have a valid container. The container is of type ''{1}'', which is not a process package.
xmlLibrary_new_id=Element {0} is assigned with a new id {1} because it does not have a valid one
xmlLibrary_id_not_unique=Element Id ''{0}'' is used by more than one element

export_config_to_temp_location=Export configuration to a temporary location
open_lib_from_temp_exported_location=Open library from the temporary exported location


