###############################################################################
# Copyright (c) 2006 Oracle.
# 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:
#     Oracle. - initial API and implementation
###############################################################################
# ====================================================================
# To code developer:
#   Do NOT change the properties between this line and the
#   "%%% END OF TRANSLATED PROPERTIES %%%" line.
#   Make a new property name, append to the end of the file and change
#   the code to use the new property.
# ====================================================================

# ====================================================================
# %%% END OF TRANSLATED PROPERTIES %%%
# ====================================================================

pluginName = Java Persistence API Tools - Core
providerName = Eclipse.org

JPA_PLATFORM=JPA Platform
JPA_RESOURCE_MODEL_PROVIDERS=JPA Resource Model Providers
JPA_PROBLEM_MARKER=JPA Problem Marker
JPA_FILE_CONTENT=JPA File Content

GENERIC_PLATFORM_LABEL=Generic

JPA_FACET_LABEL=Java Persistence
JPA_FACET_DESCRIPTION=Adds support for writing persistent meta-data using Java Persistence Architecture.
JPA_PRESET_LABEL=Utility JPA project with Java 5.0
JPA_TEMPLATE_LABEL=JPA Project
JPA_VALIDATOR=JPA Validator

BASE_JPA_CONTENT = Base JPA Content
ORM_XML_CONTENT = ORM XML Content
PERSISTENCE_XML_CONTENT = Persistence XML Content
