###############################################################################
# Copyright (c) 2007, 2014 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v2.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v20.html
#
# Contributors:
#     IBM Corporation - initial API and implementation
#     Zeligsoft - Bug 254297
#     Adolfo Sanchez-Barbudo Herrera (Open Canarias) - Bug 336491, 345115
###############################################################################

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

# This file contains externalized strings for feature.xml
# "%foo" in feature.xml corresponds to the key "foo" in this file
# java.io.Properties file (ISO 8859-1 with "\" escapes)
# This file should be translated.

# "featureName" property - name of the feature
featureName=OCL Classic SDK: Ecore/UML Parsers,Evaluator,Edit

# "providerName" property - name of the company that provides the feature
providerName=Eclipse OCL

# "updateSiteName" property - label for the update site
updateSiteName=Eclipse Modeling Project Updates

# "description" property - description of the feature
description=Provides the Parser, Evaluator and Edit support for OCL using Ecore or UML APIs.\n\
\n\
Install this if you plan to develop OCL-based applications.  This SDK \
contains runtimes, EMF edit support, documentation, and source code for OCL.

copyright=(c) Copyright Eclipse contributors and others 2003, 2014.  All rights reserved.
