#-------------------------------------------------------------------------------
# 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

unknown_text=Unknown

# Error Reasons
emptyLibraryPathError_reason=The method library path is empty.
missingLibraryFileError_reason=The method library model file is missing.
unresolvedProxyError_reason=The selected method library contains unresolved element references. This is usually caused by missing or displaced XMI files in the library folder.\n\nClose this dialog and bring up the Problems view to help identify the unresolved references. To avoid corrupting the library, it is highly recommended that you resolve these references first before adding more changes to the library.

# Warning Messages
configClosureWarning_msg1=IUPL0007W: One or more child elements contain missing references
configClosureWarning_msg2=IUPL0008W: This element should be selected to resolve one or more missing references
configClosureWarning_msg3=IUPL0009W: This element references one or more elements in an unselected package

ElementError_missing_element=''{0}'' references unselected element ''{1}''
ElementError_contributor_missing_base=''{0}'' contributes to unselected element ''{1}''
ElementError_extender_missing_base=''{0}'' extends unselected element ''{1}''
ElementError_replacer_missing_base=''{0}'' replaces unselected element ''{1}''
ElementError_missing_primary_performer=''{0}'' missing primary performer ''{1}''
ElementError_missing_mandatory_input=''{0}'' missing mandatory input ''{1}''
ElementError_missing_output=''{0}'' missing output ''{1}''


# Error Messages
loadResourcesError_msg=IUPL0000E: The method library has been loaded but some errors have been detected.
unsupportedGuidanceTypeError_msg=IUPL0001E: This guidance cannot be converted to another type.
convertGuidanceError_msg=IUPL0002E: This guidance cannot be converted to the target type.
saveConvertedGuidanceError_msg=IUPL0003E: The converted guidance ''{0}'' cannot be saved.

# Convert activity
convertActivityError_title=Convert Activity Type Error
convertActivityError_msg=IUPL0006E: This activity cannot be converted to the target type.
saveConvertedActivityError_msg=IUPL0007E: The converted activity ''{0}'' cannot be saved.

# Error Reasons
error_reason=IUPL0004E: An error has occurred. Click OK for more information.
unsupportedGuidanceTypeError_reason=There is no compatible guidance type for {0}.
invalidLibraryPathError_reason=Invalid library path. The .project file could not be created.
couldNotLockLibrary_reason=Could not lock library.

# Progress Messages
copyingAttachmentsTask_name=Copying attachments...

# Convert Guidance Dialog
convertGuidanceDialog_title=Convert Guidance Type
convertGuidanceDialog_text=Select the target guidance type.

# Guidance type names for Convert Guidance Dialog - should be refactored into library.ui
checklist_text=Checklist
concept_text=Concept
example_text=Example
guideline_text=Guideline
estimate_text=Estimate
estimatingMetric_text=Estimating Metric
estimationConsiderations_text=Estimation Considerations
report_text=Report
template_text=Template
supportingMaterial_text=Supporting Material
toolMentor_text=Tool Mentor
whitepaper_text=Whitepaper
termDefinition_text=Term Definition
practice_text=Practice
reusableAsset_text=Reusable Asset

#activity breakdown info strings
ActivityLayout_primaryTasks_text=Performs as Owner
ActivityLayout_additionalTasks_text=Performs as Additional


# Convert Guidance Error Messages
convertGuidanceError_title=Convert Guidance Type Error

# Load Resources Error Dialog
loadResourcesError_title=Open Method Library Error
loadResourcesError_reason=Some library resources could not be loaded.\n\nClick Details to review the errors and resolve them before adding more changes to the library.

# Role Diagrams
roleDiagramPerforms_text=performs
roleDiagramResponsibleFor_text=responsible for

DefaultContentValidator_MSG0=Referenced element: {0}
DefaultContentValidator_MSG1=Info: {0}
DefaultContentValidator_MSG4=Warning: {0}
DefaultContentValidator_MSG7=Error: {0}
DefaultContentValidator_MSG10=Missing referenced element {0}
DefaultContentValidator_MSG11=Unable to find element for guid {0}
DefaultContentValidator_MSG12=File ''{0}'' references missing resource ''{1}''
DefaultContentValidator_MSG15=missing resource file ''{0}''
DefaultContentValidator_MSG17=Unable to connect to url ''{0}''
DefaultContentValidator_MSG19=Unable to connect to url ''{0}'': {1}
ImportExportUtil_MSG8=Could not find file ''{0}''.
ImportExportUtil_MSG9=Could not create temp directory ''{0}''.
unknownGuidance_text=Unknown

CopyAttachmentsToNewLocation_log_noContentPath=CopyAttachmentsToNewLocation.HandleAttachmentsPlugin: no contentPath for {0}
LibraryModificationHelper_cannotUpdate=IUPL0006W: Cannot update {0} {1}
warningDlg_title=Warning
errorDlg_title=Error
errorDlg_saveError=IUPL0005E: Error saving changes to file ''{0}''

# activity diagram names
activityDiagramName=Activity diagram: {0}
activityDetailDiagramName=Activity detail diagram: {0}
wpDependencyDiagramName=Workpruduct dependency diagram: {0}

# localize the value based on locale.  for example, 
# for English, the value is ". "
#colon_with_space=: 
# for french, the value is " . ", you need to use a \ to preserve the leading space
#colon_with_space=\ : 
# for chinese, the colon should be double bytes
# Dont trim the spaces after the colon.
colon_with_space=: 

################################################################################
# THE FOLLOWING PROPERTIES SHOULD NOT BE TRANSLATED!!!
################################################################################

# Role diagram fonts and layout
roleDiagramFont_name=Arial
roleDiagramFont_name_win32=Arial
roleDiagramFont_size=10
roleDiagramFont_size_win32=10
roleDiagram_xMargin=200
roleDiagram_xSpacing=70
roleDiagram_ySpacing=30


oldToolVersion_err_msg=This version of {0} is not compatible with your library file ''{2}''. You must upgrade {0} to version {1} or higher in order to open it.
toolVersionMismatch_err_msg=This version of {0} is not compatible with your library file ''{2}''. You must upgrade {0} to a higher version in order to open it.
libUpgradeRequired_err_msg=The specified library needs to be upgraded to the new library structure. Open the library to upgrade it and try again.
