# Copyright (c) 2004 - 2008 Eike Stepper, Germany.
# 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:
#    Eike Stepper - initial API and implementation
   
# NLS_MESSAGEFORMAT_VAR

# ==============================================================================
# Do not change the properties between this line and the last line containing:
# %%% END OF TRANSLATED PROPERTIES %%%
# Instead, either redefine an existing property, or create a new property,
# append it to the end of the file, and change the code to use the new name.
# ==============================================================================

pluginName = CDO Model Repository Tests Model3 Edit Support
providerName = Eclipse.org

_UI_CreateChild_text = {0}
_UI_CreateChild_text2 = {1} {0}
_UI_CreateChild_text3 = {1}
_UI_CreateChild_tooltip = Create New {0} Under {1} Feature
_UI_CreateChild_description = Create a new child of type {0} for the {1} feature of the selected {2}.
_UI_CreateSibling_description = Create a new sibling of type {0} for the selected {2}, under the {1} feature of their parent.

_UI_PropertyDescriptor_description = The {0} of the {1}

_UI_Class1_type = Class1
_UI_Class2_type = Class2
_UI_Unknown_type = Object

_UI_Unknown_datatype= Value

_UI_Class1_class2_feature = Class2
_UI_Class2_class1_feature = Class1
_UI_Unknown_feature = Unspecified

# ==============================================================================
# %%% END OF TRANSLATED PROPERTIES %%%
# The above properties have been shipped for translation.
# ==============================================================================
_UI_MetaRef_type = Meta Ref
_UI_MetaRef_ePackageRef_feature = EPackage Ref
