# /**
#  * <copyright>
#  *
#  * Copyright (c) 2002-2004 IBM Corporation and others.
#  * All rights reserved.   This program and the accompanying materials
#  * are made available under the terms of the Common Public License v1.0
#  * which accompanies this distribution, and is available at
#  * http://www.eclipse.org/legal/cpl-v10.html
#  *
#  * Contributors:
#  *   IBM - Initial API and implementation
#  *
#  * </copyright>
#  *
#  * $Id: about.properties,v 1.4 2004/12/28 22:18:33 marcelop Exp $
#  */

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

# about.properties
# contains externalized strings for about.ini
# java.io.Properties file (ISO 8859-1 with "\" escapes)
# fill-ins are supplied by about.mappings
# This file should be translated.

featureName=XML Schema Infoset Model (XSD) Documentation

featureText=XML Schema Infoset Model (XSD) Documentation\n\
Version: {featureVersion}\n\
Build id: {0}\n\
\n\
(c) Copyright Eclipse contributors and others. 2002, 2004.  All rights reserved.\n\
Visit http://www.eclipse.org/xsd

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