#/*
# * Copyright (c) 2003, 2004 IBM Corporation and others.
# * All rights reserved.   This program and the accompanying materials
# * are made available under the terms of the Common Public License v1.0
# * which accompanies this distribution, and is available at
# * http://www.eclipse.org/legal/cpl-v10.html
# * 
# * Contributors: 
# *   IBM - Initial API and implementation
# *
# * $Id: plugin.properties,v 1.7 2004/05/07 17:56:35 khussey Exp $
# */

# ====================================================================
# Do NOT change the properties between this line and the
# "%%% END OF TRANSLATED PROPERTIES %%%" line.
# Make a new property name, append to the end of the file and change
# the code to use the new property.
# ====================================================================

pluginName = UML2
providerName = Eclipse.org

_UI_Classifier_NoCyclesInGeneralization_diagnostic = Classifier ''{0}'' is both a transitively general and transitively specific classifier of the same classifier.
_UI_Classifier_SpecializeType_diagnostic = Classifier ''{0}'' specializes classifier ''{1}'' of invalid type.
_UI_Classifier_InheritedMember_diagnostic = The inherited members of classifier ''{0}'' are not derived by inheriting the inheritable members of its parents.
_UI_Classifier_GeneralEqualsParents_diagnostic = The general classifiers of classifier ''{0}'' are not the classifiers referenced by its generalization relationships.
_UI_Constraint_NotApplyToSelf_diagnostic = Constraint ''{0}'' is applied to itself.
_UI_Element_NotOwnSelf_diagnostic = Element ''{0}'' directly or indirectly owns itself.
_UI_Element_HasOwner_diagnostic = Element ''{0}'' must be owned, but it has no owner.
_UI_ElementImport_VisibilityPublicOrPrivate_diagnostic = The visibility of element import ''{0}'' is neither public nor private.
_UI_ElementImport_ImportedElementIsPublic_diagnostic = Imported element ''{0}'' has non-public visibility.
_UI_InstanceSpecification_SlotsAreDefined_diagnostic = The defining feature of slot ''{0}'' is not a structural feature (directly or inherited) of a classifier of instance specification ''{1}''.
_UI_InstanceSpecification_NoDuplicateSlots_diagnostic = Structural feature ''{0}'' is the defining feature of more than one slot in instance specification ''{1}''.
_UI_MultiplicityElement_UpperGT0_diagnostic = Multiplicity element ''{0}'' does not define at least one valid cardinality that is greater than zero.
_UI_MultiplicityElement_LowerGE0_diagnostic = The lower bound of multiplicity element ''{0}'' is not a non-negative integer literal.
_UI_MultiplicityElement_UpperGELower_diagnostic = The upper bound of multiplicity element ''{0}'' is not greater than or equal to its lower bound.
_UI_MultiplicityElement_LowerEQLowerBound_diagnostic = The derived lower attribute of multiplicity element ''{0}'' is not equal to its lower bound.
_UI_MultiplicityElement_UpperEQUpperBound_diagnostic = The derived upper attribute of multiplicity element ''{0}'' is not equal to its upper bound.
_UI_NamedElement_NoName_diagnostic = Named element ''{0}'' has no name, or one of its containing namespaces has no name, but it has a qualified name.
_UI_NamedElement_QualifiedName_diagnostic = Named element ''{0}'' has a name, and all of its containing namespaces have a name, but its qualified name is not constructed from the names of its containing namespaces.
_UI_NamedElement_VisibilityNeedsOwnership_diagnostic = Named element ''{0}'' is not owned by a namespace, but it has visibility.
_UI_Namespace_MembersAreDistinguishable_diagnostic = Not all the members of namespace ''{0}'' are distinguishable within it.
_UI_Namespace_ImportedMemberDerived_diagnostic = The imported members of namespace ''{0}'' are not derived from its element imports and its package imports.
_UI_Operation_TypeOfResult_diagnostic = The type of operation ''{0}'' is not the value of the type for its single return result, or undefined.
_UI_Operation_OnlyBodyForQuery_diagnostic = A body condition is specified for operation ''{0}'', but it is not a query.
_UI_PackageImport_PublicOrPrivate_diagnostic = The visibility of package import ''{0}'' is neither public nor private.
_UI_Package_ElementsPublicOrPrivate_diagnostic = Element ''{0}'', owned by package ''{1}'', has visibility that is neither public nor private.
_UI_Property_OppositeIsOtherEnd_diagnostic = Navigable property ''{0}'' is associated with a binary association, but the other (navigable) end of the association is not its opposite.
_UI_Property_MultiplicityOfComposite_diagnostic = The multiplicity of composite aggregation ''{0}'' has an upper bound greater than 1.
_UI_Property_SubsettingContext_diagnostic = The context of the subsetting property ''{0}'' does not conform to the context of subsetted property ''{1}''.
_UI_Property_NavigablePropertyRedefinition_diagnostic = Navigable property ''{0}'' is redefined or subsetted by non-navigable property ''{1}''.
_UI_Property_SubsettingRules_diagnostic = Subsetting property ''{0}'' either weakens the type of subsetted property ''{1}'', or its upper bound is greater.
_UI_Property_NavigableReadOnly_diagnostic = Non-navigable property ''{0}'' is marked as read-only.
_UI_Property_DerivedUnionIsDerived_diagnostic = Derived union ''{0}'' is not derived.
_UI_RedefinableElement_RedefinitionConsistent_diagnostic = Redefining element ''{0}'' is not consistent with redefined element ''{1}''.
_UI_RedefinableElement_RedefinitionContextValid_diagnostic = None of the redefinition contexts of redefining element ''{0}'' is a specialization of at least one of the redefinition contexts for redefined element ''{1}''.

# ==============================================================================
# %%% END OF TRANSLATED PROPERTIES %%%
# The above properties have been shipped for translation.
# ==============================================================================
