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

# Symbols

# CreditCardValidator
creditCardValidatorAllowedFormatChars=\ -

# Currency/Number Validator
allowNegative=true
decimalSeparator=,
maxValue=NaN
minValue=NaN
thousandsSeparator=\u0020
groupingSeparator=,

# CurrencyValidator
currencyValidatorPrecision=2

# DateValidator
dateValidatorAllowedFormatChars=/- \\.
validateAsString=true

# NumberValidator
numberValidatorDomain=verklig
numberValidatorPrecision=-1

# PhoneNumberValidator
phoneNumberValidatorAllowedFormatChars=-()+ .

# SocialSecurityValidator
socialSecurityValidatorAllowedFormatChars=\ -

# ZipCodeValidator
zipCodeValidatorAllowedFormatChars=\ -
zipCodeValidatorDomain=Enbart USA


# Tooltip errors

# CurrencyValidator, NumberValidator

decimalPointCountError=Decimalavgränsaren kan bara förekomma en gång.
invalidCharError=Indata innehåller ogiltiga tecken.
invalidFormatCharsError=En av formatparametrarna är ogiltig
lowerThanMinError=Det angivna beloppet är för litet.
negativeError=Beloppet får inte vara negativt.
negativeNumberFormatError=Indatatalets negativa format är felaktigt.
negativeCurrencyFormatError=Indatavalutans negativa format är felaktigt.
positiveCurrencyFormatError=Indatavalutans positiva format är felaktigt.
parseError=Indatasträngen gick inte att tolka.
negativeSymbolError=Den negativa symbolen är en upprepning eller finns inte på rätt plats.
precisionError=Det angivna beloppet har för många siffror efter decimaltecknet.
fractionalDigitsError=Det angivna beloppet har för många siffror efter decimaltecknet.
separationError=Tusentalsavgränsaren måste följas av tre siffror.
currencyStringError=Valutans namn är antingen felaktigt eller förekommer flera gånger.
localeUndefinedError=Språkinställning har inte angetts.

# CreditCardValidator

invalidCharErrorCCV=Ogiltiga tecken i ditt kreditkortsnummer. (Ange enbart siffror.)
invalidNumberError=Kreditkortsnumret är ogiltigt.
noNumError=Du har inte angett något kreditkortsnummer.
noTypeError=Inget kreditkortsnummer har angetts eller så är typen inte giltig.
wrongLengthErrorCCV=Ditt kreditkortsnummer innehåller fel antal siffror.
wrongTypeError=Du har angett fel korttyp.

# CurrencyValidator

currencySymbolError=Valutasymbolen förekommer på ett ogiltigt ställe.
exceedsMaxErrorCV=Det angivna beloppet är för stort.

# DateValidator

wrongLengthErrorDV=Skriv datum i formatet.
invalidCharErrorDV=Datumet innehåller ogiltiga tecken.
wrongMonthError=Ange en månad mellan 1 och 12.
wrongDayError=Ange en giltig dag i månaden.
wrongYearError=Ange ett år mellan 0 och 9999.
formatError=Konfigurationsfel: Felaktig formatsträng.

# EmailValidator

invalidCharErrorEV=Din e-postadress innehåller ogiltiga tecken.
invalidDomainErrorEV=Domänen i din e-postadress är felformaterad.
invalidIPDomainError=IP-domänen i din e-postadress är felformaterad.
invalidPeriodsInDomainError=Domänen i din e-postadress har flera punkter.
missingAtSignError=At-tecknet (@) i din e-postadress saknas.
missingPeriodInDomainError=Domänen i din e-postadress saknar en punkt.
missingUsernameError=Användarnamnet i din e-postadress saknas.
tooManyAtSignsError=Din e-postadress innehåller för många @-tecken.

# NumberValidator

exceedsMaxErrorNV=Det angivna talet är för stort.
integerError=Talet måste vara ett heltal.

# PhoneNumberValidator

invalidCharErrorPNV=Ditt telefonnummer innehåller ogiltiga tecken.
minDigitsPNV=10
wrongLengthErrorPNV=Ditt telefonnummer måste åtminstone innehålla {0} siffror.

# RegExValidator

noMatchError=Fältet är inte ogiltigt.
noExpressionError=Uttrycket saknas.

# SocialSecurityValidator

invalidCharErrorSSV=Du har angett ogiltiga tecken i ditt personnummer.
wrongFormatError=Personnummret måste innehålla 10 siffror i formatet NNNNNN-NNNN.
zeroStartError=Ogiltigt personnummer. Numret kan inte börja med 000.

# StringValidator

tooLongError=Den här strängen är längre än tillåtet. Den måste vara kortare än {0} tecken.
tooShortError=Den här strängen är kortare än tillåtet. Den måste vara längre än {0} tecken.
minLength=NaN
maxLength=NaN

# Validator

requiredFieldError=Detta fält är obligatoriskt.

# ZipCodeValidator

invalidCharErrorZCV=Postnumret innehåller ogiltiga tecken.
invalidDomainErrorZCV=Domänparametern är ogiltig. Det måste vara "US Only", "Canada Only" eller "US or Canada"
wrongCAFormatError=Det kanadensiska postnumret måste formateras 'A1B 2C3'.
wrongLengthErrorZCV=Postnumret måste innehålla 5 siffror.
wrongUSFormatError=ZIP+4-koden måste formateras '12345-6789'.
invalidFormatCharsZCV=Parametern allowedFormatChars är ogiltig Alfanumeriska tecken är inte tillåtna (a-z A-Z 0-9).


# Developer RTE Section

# Shared

invalidFormatChars=Parametern allowedFormatChars är ogiltig Den får inte innehålla några siffror.

# CreditCardValidator

missingCardType=Det validerade värdet innehåller inte egenskapen cardType.
missingCardNumber=Det validerade värdet innehåller inte egenskapen cardNumber.
CNSAttribute=Attributet cardNumberSource, '{0}', får inte vara av typen String.
CTSAttribute=Attributet cardTypeSource , '{0}', får inte vara av typen String.

# DateValidator

DSAttribute=Attributet daySource, '{0}', får inte vara av typen String.
MSAttribute=Attributet monthSource, '{0}', får inte vara av typen String.
YSAttribute=Attributet yearSource , '{0}', får inte vara av typen String.

# Validator

fieldNotFound=Det går inte att hitta fältet'{0}'.
SAttribute=Källattributet, '{0}', får inte vara av typen String.
SAttributeMissing=Källattributet måste anges när egenskapsattributet har angetts.
PAttributeMissing=Egenskapsattributet måste anges när källattributet har angetts.
