# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
#
# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
# Other names may be trademarks of their respective owners.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common
# Development and Distribution License("CDDL") (collectively, the
# "License"). You may not use this file except in compliance with the
# License. You can obtain a copy of the License at
# http://www.netbeans.org/cddl-gplv2.html
# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
# specific language governing permissions and limitations under the
# License.  When distributing the software, include this License Header
# Notice in each file and include the License file at
# nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the GPL Version 2 section of the License file that
# accompanied this code. If applicable, add the following below the
# License Header, with the fields enclosed by brackets [] replaced by
# your own identifying information:
# "Portions Copyrighted [year] [name of copyright owner]"
#
# Contributor(s):
#
#The Original Software is NetBeans. The Initial Developer of the Original
# Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
#Microsystems, Inc. All Rights Reserved.
#
# If you wish your version of this file to be governed by only the CDDL
# or only the GPL Version 2, indicate your decision by adding
# "[Contributor] elects to include this software in this distribution
# under the [CDDL or GPL Version 2] license." If you do not indicate a
# single choice of license, a recipient has the option to distribute
# your version of this file under either the CDDL, the GPL Version 2 or
# to extend the choice of license to its licensees as provided above.
# However, if you add GPL Version 2 code and therefore, elected the GPL
# Version 2 license, then the option applies only if the new code is
# made subject to such option by the copyright holder.


#
# This file contains localized strings used in this package.  The typical
# NetBeans pattern is to use one bundle per-package, called Bundle.properties;
# the openide class NbBundle supports this usage.
#
# Typically, fetch a resource as follows:
# NbBundle.getMessage (MyClass.class, "SOME_Key");
#
# Don't bother caching strings or worse, static references to resource bundles - 
# this may seem like its faster, but it wastes memory and slows things down
# in the long run.
#

MSG_AttrNamedWithJavaPersistenceQLKeyword=Der Spaltenname {0} des Attributs ist ein reserviertes Schl\u00fcsselwort von Java Persistenz QL.
MSG_AttrInvalidPersistenceQLIdentifier=Der Spaltenname des Attributs ist kein g\u00fcltiger Bezeichner  von Java Persistenz QL.
MSG_AttrNamedWithReservedSQLKeyword=Der Spaltenname {0} des Attributs ist ein reserviertes Schl\u00fcsselwort von SQL-99.
MSG_PublicVariable=Eine Instanzvariable f\u00fcr ein persistentes Attribut darf nicht \u00f6ffentlich sein.
MSG_NonPublicAccesor=Die get-Funktion f\u00fcr ein persistentes Attribut mu\u00df \u00f6ffentlich (public) oder gesch\u00fctzt (protected) sein.
MSG_FinalAccesor=Die get-Funktion f\u00fcr ein persistentes Attribut darf nicht 'final' sein.
MSG_TemporalAttrNotAnnotatedProperly=Eine tempor\u00e4res Attribut muss mit @Temporal vermerkt werden.
MSG_ValidBasicType=Grunds\u00e4tzliche Attribute k\u00f6nnen nur von folgenden Typen sein: primitive Java-Typen, Wrapper f\u00fcr primitive Typen, String, java.math.BigInteger, java.math.BigDecimal, java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.TimeStamp, byte[], Byte[], char[], Character[], enums, oder jeder serialisierbare Typ.
MSG_EntityRelationNotDefined=Die Entit\u00e4tsbeziehung ist nicht definiert.
MSG_MVEntityRelationNotDefined=Die Entit\u00e4tsbeziehung mit Mehrfachwerten ist nicht definiert.
MSG_InvalidVersionType=Das Versionsfeld/die Versionseigenschaft wird nicht unterst\u00fctzt. Bitte sicherstellen, da\u00df es einer der folgenden Typen ist: int, Integer, short, Short, long, Long, java.sql.Timestamp.
MSG_GeneratedValueIsId=Die GeneratedValue-Annotation sollte nur f\u00fcr das "Id"-Feld verwendet werden.
MSG_NonPublicMutator=Die set-Methode f\u00fcr ein persistentes Attribut darf nicht 'private' sein.
MSG_FinalMutator=Die set-Methode f\u00fcr ein persistentes Attribut darf nicht 'final' sein.
MSG_PublicIdMutatorDiscouraged=Die set-Methode f\u00fcr das Feld "Id" sollte gesch\u00fctzt (protected) sein.

