# Copyright (c) 2003, 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 - initial API and implementation
#
# $Id: plugin.properties,v 1.14 2006/03/28 21:16:24 khussey Exp $

# NLS_MESSAGEFORMAT_VAR

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

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

pluginName = UML2 Examples UI
providerName = Eclipse.org

_UI_editorActions_label = UML2 Examples UI Editor Actions

_UI_ElementMenu_label = &Element
_UI_PackageMenu_label = P&ackage
_UI_ProfileMenu_label = Pr&ofile
_UI_StereotypeMenu_label = &Stereotype

_UI_ApplyStereotypeAction_label = &Apply Stereotype...
_UI_DestroyElementAction_label = &Destroy
_UI_UnapplyStereotypeAction_label = &Unapply Stereotype...

_UI_ApplyProfileAction_label = &Apply Profile...
_UI_ImportPrimitiveTypeAction_label = &Import Primitive Type...
_UI_UnapplyProfileAction_label = &Unapply Profile...

_UI_CreateExtensionAction_label = &Create Extension...

_UI_DefineProfileAction_label = &Define
_UI_ReferenceMetaclassAction_label = &Reference Metaclass...

_UI_ApplyStereotypeActionCommand_label = Apply Stereotype(s)
_UI_DestroyElementActionCommand_label = Destroy Element ''{0}''
_UI_UnapplyStereotypeActionCommand_label = Unapply Stereotype(s)

_UI_ApplyProfileActionCommand_label = Apply Profile(s)
_UI_ImportPrimitiveTypeActionCommand_label = Import Primitive Type(s)
_UI_UnapplyProfileActionCommand_label = Unapply Profile(s)

_UI_DefineProfileActionCommand_label = Define Profile ''{0}''
_UI_ReferenceMetaclassActionCommand_label = Reference Metaclass(es)

_UI_CreateExtensionActionCommand_label = Create Extension(s)

_UI_DiagnosticOK_message = The operation was successful.
_UI_DiagnosticProblems_message = Problems were ecountered.

_UI_OptionsDialog_message = Please choose options.

_UI_MergePackageAction_label = &Merge...
_UI_MergePackageActionCommand_label = Merge Package ''{0}''
_UI_MergingPackage_message = Merging package ''{0}''...

_UI_ConvertToEcoreAction_label = &Convert to Ecore...
_UI_ConvertToEcoreActionCommand_label = Convert Package ''{0}'' to Ecore
_UI_ConvertingToEcore_message = Converting package ''{0}'' to Ecore...

_UI_ConvertFromEcoreAction_label = &Convert to UML2...
_UI_ConvertFromEcoreActionCommand_label = Convert Ecore Package ''{0}'' to UML2
_UI_ConvertingFromEcore_message = Converting Ecore package ''{0}'' to UML2...

_UI_ModelMenu_label = &Model
_UI_GenerateMenu_label = &Generate

_UI_ConvertToMetamodelAction_label = Convert to &Metamodel
_UI_ConvertToMetamodelActionCommand_label = Convert Model {0} to a Metamodel
_UI_ConvertToModelLibraryAction_label = Convert to Model &Library
_UI_ConvertToModelLibraryActionCommand_label = Convert Model {0} to a Model Library

_UI_GenerateEcorePrimitiveTypesAction_label = &Ecore Primitive Types
_UI_GenerateEcorePrimitiveTypesActionCommand_label = Generate Ecore Primitive Types into Model {0}
_UI_GenerateJavaPrimitiveTypesAction_label = &Java Primitive Types
_UI_GenerateJavaPrimitiveTypesActionCommand_label = Generate Java Primitive Types into Model {0}
_UI_GenerateUML2PrimitiveTypesAction_label = &UML2 Primitive Types
_UI_GenerateUML2PrimitiveTypesActionCommand_label = Generate UML2 Primitive Types into Model {0}

_UI_ExternalizeLabelsAction_label = &Externalize Labels

_UI_ExternalizeKeywordsAction_label = &Externalize Keywords

_UI_GenerateBasicStereotypesAction_label = &Basic Stereotypes
_UI_GenerateBasicStereotypesActionCommand_label = Generate Basic Stereotypes into Profile {0}
_UI_GenerateIntermediateStereotypesAction_label = &Intermediate Stereotypes
_UI_GenerateIntermediateStereotypesActionCommand_label = Generate Intermediate Stereotypes into Profile {0}
_UI_GenerateCompleteStereotypesAction_label = &Complete Stereotypes
_UI_GenerateCompleteStereotypesActionCommand_label = Generate Complete Stereotypes into Profile {0}
_UI_GenerateEcoreStereotypesAction_label = &Ecore Stereotypes
_UI_GenerateEcoreStereotypesActionCommand_label = Generate Ecore Stereotypes into Profile {0}
