###############################################################################
# Copyright (c) 2008, 2015 Eclipse Modeling Project 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:
#     E.D.Willink - 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=QVT Declarative Examples (Incubation)
providerName=Eclipse Modeling Project

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

QVT_category=QVT (Query/View/Transformation Language) Projects

EmptyQVTc_name=Empty QVTc Project
EmptyQVTc_description=Create an Empty QVT Core project

QVTc_UML2RDBMS_name=QVTc UML2RDBMS Project
QVTc_UML2RDBMS_description=Create the UML2RDBMS QVT Core example project

EmptyQVTr_name=Empty QVTr Project
EmptyQVTr_description=Create an Empty QVT Relation project

ModelMorf_name=ModelMorf distribution Examples
ModelMorf_description=Create a project containing Examples from the ModelMorf distribution

RelToCore_name=Relations To Core Example
RelToCore_description=Create a project containing the Relations To Core Example
