# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

# The properties listed below are resolved by the default message resolver.

# standard
javax.validation.constraints.Null.message=muss "null" sein
javax.validation.constraints.NotNull.message=darf nicht "null" sein
javax.validation.constraints.AssertTrue.message=muss "true" sein
javax.validation.constraints.AssertFalse.message=muss "false" sein
javax.validation.constraints.Min.message=muss gr\u00F6\u00DFer oder gleich {value} sein
javax.validation.constraints.Max.message=muss kleiner oder gleich {value} sein
javax.validation.constraints.Size.message=Gr\u00F6\u00DFe muss zwischen {min} und {max} liegen
javax.validation.constraints.Digits.message=numerischer Wert au\u00DFerhalb des G\u00FCltigkeitsbereiches (erwarte: <{integer} digits>.<{fraction} digits>)
javax.validation.constraints.Past.message=muss Datum in der Vergangenheit sein
javax.validation.constraints.Future.message=muss Datum in der Zukunft sein
javax.validation.constraints.Pattern.message=Muss mit regul\u00E4rem Ausdruck \u00FCbereinstimmen: {regexp}
javax.validation.constraints.DecimalMax.message=muss kleiner oder gleich {value} sein
javax.validation.constraints.DecimalMin.message=muss gr\u00F6\u00DFer oder gleich {value} sein

# additional built-ins
org.apache.bval.constraints.NotEmpty.message=darf nicht leer sein
org.apache.bval.constraints.Email.message=muss g\u00FCltiges Format einer EMail-Adresse sein
