################################################################################
# Copyright (c) 2012 Mia-Software.
# 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:
#     Nicolas Bros (Mia-Software)
################################################################################
# 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 Chart Utilities

# "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 utilities for Birt charts.

# "updateSiteName" property - label for the update site
ModelingUpdateSiteName=Eclipse Modeling Project Updates
