################################################################################
# Copyright (c) 2008, 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" property - name of the feature
featureName=MoDisco Xml Feature

# "providerName" property - name of the company that provides the feature
providerName=Eclipse Modeling Project

# "description" property - description of the feature
description=MoDisco is a framework for model driven reverse engineering and \
software modernization. This feature provides components for the XML technology \
(metamodel, model discoverer)

# "updateSiteName" property - label for the update site
ModelingUpdateSiteName=Eclipse Modeling Project Updates
