################################################################################
# Copyright (c) 2010, 2019 Mia-Software 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:
#     Mia-Software - source plugin
################################################################################
# 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=MoDisco CDO server with Derby
# "providerName" property - name of the company that provides the feature
providerName=Eclipse Modeling Project

description=MoDisco is a framework for model driven reverse engineering and \
software modernization. This feature is here to isolate dependencies on CDO Derby.

# "updateSiteName" property - label for the update site
ModelingUpdateSiteName=Eclipse Modeling Project Updates
