Skip to content

Internationalization

The @nhtio/validation library patches internationalization functionality into the standard Joi validation schema, allowing you to automatically hook into your application's internationalization functionality.

To define your application's internationalization functionality, you can use:

  • $setI18n to define the internationalization functionality for the validator instance
  • $clearI18n to clear the internationalization functionality and return to default English messages

For example:

typescript
// Set up Spanish translations
validator.$setI18n((term: string) => {
  const translations = {
    'string.base': 'debe ser una cadena de texto',
    'string.min': 'debe tener al menos {{#limit}} caracteres',
    'number.base': 'debe ser un número',
    'any.required': 'es requerido'
  }
  return translations[term] || term
})

// All schemas created from this validator will now use Spanish
const userSchema = validator.object({
  name: validator.string().min(3).required(),
  age: validator.number().required()
})

// Individual schemas inherit the i18n callback
const stringSchema = validator.string().min(5)
const phoneSchema = validator.phone().country('ES')

// You can clear the i18n functionality to return to English
validator.$clearI18n()

// Now new schemas will use default English messages
const englishSchema = validator.string().required()

Terms for Translation

The following is a list of terms which can be translated:

TermDefault Message
alternatives.all{{#label}} does not match all of the required types
alternatives.any{{#label}} does not match any of the allowed types
alternatives.match{{#label}} does not match any of the allowed types
alternatives.one{{#label}} matches more than one allowed type
alternatives.types{{#label}} must be one of {{#types}}
any.custom{{#label}} failed custom validation because {{#error.message}}
any.default{{#label}} threw an error when running default method
any.failover{{#label}} threw an error when running failover method
any.invalid{{#label}} contains an invalid value
any.only{{#label}} must be {if(#valids.length == 1, "", "one of ")}{{#valids}}
any.ref{{#label}} {{#arg}} references {{:#ref}} which {{#reason}}
any.required{{#label}} is required
any.unknown{{#label}} is not allowed
array.base{{#label}} must be an array
array.excludes{{#label}} contains an excluded value
array.hasKnown{{#label}} does not contain at least one required match for type {:#patternLabel}
array.hasUnknown{{#label}} does not contain at least one required match
array.includes{{#label}} does not match any of the allowed types
array.includesRequiredBoth{{#label}} does not contain {{#knownMisses}} and {{#unknownMisses}} other required value(s)
array.includesRequiredKnowns{{#label}} does not contain {{#knownMisses}}
array.includesRequiredUnknowns{{#label}} does not contain {{#unknownMisses}} required value(s)
array.length{{#label}} must contain {{#limit}} items
array.max{{#label}} must contain less than or equal to {{#limit}} items
array.min{{#label}} must contain at least {{#limit}} items
array.orderedLength{{#label}} must contain at most {{#limit}} items
array.sort{{#label}} must be sorted in {#order} order by {{#by}}
array.sort.mismatching{{#label}} cannot be sorted due to mismatching types
array.sort.unsupported{{#label}} cannot be sorted due to unsupported type {#type}
array.sparse{{#label}} must not be a sparse array item
array.unique{{#label}} contains a duplicate value
boolean.base{{#label}} must be a boolean
date.base{{#label}} must be a valid date
date.format{{#label}} must be in {msg("date.format." + #format) || #format} format
date.greater{{#label}} must be greater than {{:#limit}}
date.less{{#label}} must be less than {{:#limit}}
date.max{{#label}} must be less than or equal to {{:#limit}}
date.min{{#label}} must be greater than or equal to {{:#limit}}
date.format.isoISO 8601 date
date.format.javascripttimestamp or number of milliseconds
date.format.unixtimestamp or number of seconds
function.arity{{#label}} must have an arity of {{#n}}
function.class{{#label}} must be a class
function.maxArity{{#label}} must have an arity lesser or equal to {{#n}}
function.minArity{{#label}} must have an arity greater or equal to {{#n}}
number.base{{#label}} must be a number
number.greater{{#label}} must be greater than {{#limit}}
number.infinity{{#label}} cannot be infinity
number.integer{{#label}} must be an integer
number.less{{#label}} must be less than {{#limit}}
number.max{{#label}} must be less than or equal to {{#limit}}
number.min{{#label}} must be greater than or equal to {{#limit}}
number.multiple{{#label}} must be a multiple of {{#multiple}}
number.negative{{#label}} must be a negative number
number.port{{#label}} must be a valid port
number.positive{{#label}} must be a positive number
number.precision{{#label}} must have no more than {{#limit}} decimal places
number.unsafe{{#label}} must be a safe number
object.and{{#label}} contains {{#presentWithLabels}} without its required peers {{#missingWithLabels}}
object.assert{{#label}} is invalid because {if(#subject.key, `"` + #subject.key + `" failed to ` + (#message || "pass the assertion test"), #message || "the assertion failed")}
object.base{{#label}} must be of type {{#type}}
object.instance{{#label}} must be an instance of {{:#type}}
object.length{{#label}} must have {{#limit}} key{if(#limit == 1, "", "s")}
object.max{{#label}} must have less than or equal to {{#limit}} key{if(#limit == 1, "", "s")}
object.min{{#label}} must have at least {{#limit}} key{if(#limit == 1, "", "s")}
object.missing{{#label}} must contain at least one of {{#peersWithLabels}}
object.nand{{:#mainWithLabel}} must not exist simultaneously with {{#peersWithLabels}}
object.oxor{{#label}} contains a conflict between optional exclusive peers {{#peersWithLabels}}
object.pattern.match{{#label}} keys failed to match pattern requirements
object.refType{{#label}} must be a Joi reference
object.regex{{#label}} must be a RegExp object
object.rename.multiple{{#label}} cannot rename {{:#from}} because multiple renames are disabled and another key was already renamed to {{:#to}}
object.rename.override{{#label}} cannot rename {{:#from}} because override is disabled and target {{:#to}} exists
object.schema{{#label}} must be a Joi schema of {{#type}} type
object.unknown{{#label}} is not allowed
object.with{{:#mainWithLabel}} missing required peer {{:#peerWithLabel}}
object.without{{:#mainWithLabel}} conflict with forbidden peer {{:#peerWithLabel}}
object.xor{{#label}} contains a conflict between exclusive peers {{#peersWithLabels}}
string.alphanum{{#label}} must only contain alpha-numeric characters
string.base{{#label}} must be a string
string.base64{{#label}} must be a valid base64 string
string.creditCard{{#label}} must be a credit card
string.dataUri{{#label}} must be a valid dataUri string
string.domain{{#label}} must contain a valid domain name
string.email{{#label}} must be a valid email
string.empty{{#label}} is not allowed to be empty
string.guid{{#label}} must be a valid GUID
string.hex{{#label}} must only contain hexadecimal characters
string.hexAlign{{#label}} hex decoded representation must be byte aligned
string.hostname{{#label}} must be a valid hostname
string.ip{{#label}} must be a valid ip address with a {{#cidr}} CIDR
string.ipVersion{{#label}} must be a valid ip address of one of the following versions {{#version}} with a {{#cidr}} CIDR
string.isoDate{{#label}} must be in iso format
string.isoDuration{{#label}} must be a valid ISO 8601 duration
string.length{{#label}} length must be {{#limit}} characters long
string.lowercase{{#label}} must only contain lowercase characters
string.max{{#label}} length must be less than or equal to {{#limit}} characters long
string.min{{#label}} length must be at least {{#limit}} characters long
string.normalize{{#label}} must be unicode normalized in the {{#form}} form
string.token{{#label}} must only contain alpha-numeric and underscore characters
string.pattern.base{{#label}} with value {:[.]} fails to match the required pattern: {{#regex}}
string.pattern.name{{#label}} with value {:[.]} fails to match the {{#name}} pattern
string.pattern.invert.base{{#label}} with value {:[.]} matches the inverted pattern: {{#regex}}
string.pattern.invert.name{{#label}} with value {:[.]} matches the inverted {{#name}} pattern
string.trim{{#label}} must not have leading or trailing whitespace
string.uri{{#label}} must be a valid uri
string.uriCustomScheme{{#label}} must be a valid uri with a scheme matching the {{#scheme}} pattern
string.uriRelativeOnly{{#label}} must be a valid relative uri
string.uppercase{{#label}} must only contain uppercase characters
symbol.base{{#label}} must be a symbol
symbol.map{{#label}} must be one of {{#map}}
binary.base{{#label}} must be a buffer or a string
binary.length{{#label}} must be {{#limit}} bytes
binary.max{{#label}} must be less than or equal to {{#limit}} bytes
binary.min{{#label}} must be at least {{#limit}} bytes
bigint.base"{{#label}}" must be a valid bigint
bigint.greater"{{#label}}" must be greater than {{#limit}}
bigint.less"{{#label}}" must be less than {{#limit}}
bigint.max"{{#label}}" must be less than or equal to {{#limit}}
bigint.min"{{#label}}" must be greater than or equal to {{#limit}}
bigint.multiple"{{#label}}" must be a multiple of {{#limit}}
bigint.negative"{{#label}}" must be a negative bigint
bigint.positive"{{#label}}" must be a positive bigint
datetime.base{{#label}} must be a datetime value
datetime.exactly{{#label}} must be a datetime exactly equal to {{#limit}}
datetime.equals{{#label}} must be a datetime equal to {{#limit}}
datetime.after{{#label}} must be a datetime after {{#limit}}
datetime.greater{{#label}} must be a datetime after {{#limit}}
datetime.before{{#label}} must be a datetime before {{#limit}}
datetime.less{{#label}} must be a datetime before {{#limit}}
datetime.afterOrEqual{{#label}} must be a datetime after or equal to {{#limit}}
datetime.min{{#label}} must be a datetime after or equal to {{#limit}}
datetime.beforeOrEqual{{#label}} must be a datetime before or equal to {{#limit}}
datetime.max{{#label}} must be a datetime before or equal to {{#limit}}
datetime.weekend{{#label}} is not a weekend
datetime.weekday{{#label}} is not a weekday
phone.base{{#label}} must be a phone number
phone.invalid{{#label}} must be a valid phone number for {{#country}}
phone.fixedLine{{#label}} must be a fixed line number for {{#country}}
phone.mobile{{#label}} must be a mobile number for {{#country}}
phone.strictFixedLine{{#label}} is not a fixed line number for {{#country}}
phone.strictMobile{{#label}} is not a mobile number for {{#country}}
phone.fixedLineOrMobile{{#label}} must be a fixed line or mobile number for {{#country}}
phone.tollFree{{#label}} must be a toll-free number for {{#country}}
phone.premiumRate{{#label}} must be a premium rate number for {{#country}}
phone.sharedCost{{#label}} must be a shared cost number for {{#country}}
phone.voip{{#label}} must be a VoIP number for {{#country}}
phone.personalNumber{{#label}} must be a personal number for {{#country}}
phone.pager{{#label}} must be a pager number for {{#country}}
phone.uan{{#label}} must be a UAN number for {{#country}}
phone.voicemail{{#label}} must be a voicemail number for {{#country}}
phone.unknown{{#label}} must be an unknown type number for {{#country}}
phone.types{{#label}} must be one of the specified phone types for {{#country}}
country.ADAndorra
country.AEUnited Arab Emirates
country.AFAfghanistan
country.AGAntigua and Barbuda
country.AIAnguilla
country.ALAlbania
country.AMArmenia
country.AOAngola
country.AQAntarctica
country.ARArgentina
country.ASAmerican Samoa
country.ATAustria
country.AUAustralia
country.AWAruba
country.AXAland Islands
country.AZAzerbaijan
country.BABosnia and Herzegovina
country.BBBarbados
country.BDBangladesh
country.BEBelgium
country.BFBurkina Faso
country.BGBulgaria
country.BHBahrain
country.BIBurundi
country.BJBenin
country.BLSaint Barthelemy
country.BMBermuda
country.BNBrunei
country.BOBolivia
country.BQBonaire, Saint Eustatius and Saba
country.BRBrazil
country.BSBahamas
country.BTBhutan
country.BVBouvet Island
country.BWBotswana
country.BYBelarus
country.BZBelize
country.CACanada
country.CCCocos Islands
country.CDDemocratic Republic of the Congo
country.CFCentral African Republic
country.CGRepublic of the Congo
country.CHSwitzerland
country.CIIvory Coast
country.CKCook Islands
country.CLChile
country.CMCameroon
country.CNChina
country.COColombia
country.CRCosta Rica
country.CUCuba
country.CVCape Verde
country.CWCuracao
country.CXChristmas Island
country.CYCyprus
country.CZCzech Republic
country.DEGermany
country.DJDjibouti
country.DKDenmark
country.DMDominica
country.DODominican Republic
country.DZAlgeria
country.ECEcuador
country.EEEstonia
country.EGEgypt
country.EHWestern Sahara
country.EREritrea
country.ESSpain
country.ETEthiopia
country.FIFinland
country.FJFiji
country.FKFalkland Islands
country.FMMicronesia
country.FOFaroe Islands
country.FRFrance
country.GAGabon
country.GBUnited Kingdom
country.GDGrenada
country.GEGeorgia
country.GFFrench Guiana
country.GGGuernsey
country.GHGhana
country.GIGibraltar
country.GLGreenland
country.GMGambia
country.GNGuinea
country.GPGuadeloupe
country.GQEquatorial Guinea
country.GRGreece
country.GSSouth Georgia and the South Sandwich Islands
country.GTGuatemala
country.GUGuam
country.GWGuinea-Bissau
country.GYGuyana
country.HKHong Kong
country.HMHeard Island and McDonald Islands
country.HNHonduras
country.HRCroatia
country.HTHaiti
country.HUHungary
country.IDIndonesia
country.IEIreland
country.ILIsrael
country.IMIsle of Man
country.INIndia
country.IOBritish Indian Ocean Territory
country.IQIraq
country.IRIran
country.ISIceland
country.ITItaly
country.JEJersey
country.JMJamaica
country.JOJordan
country.JPJapan
country.KEKenya
country.KGKyrgyzstan
country.KHCambodia
country.KIKiribati
country.KMComoros
country.KNSaint Kitts and Nevis
country.KPNorth Korea
country.KRSouth Korea
country.KWKuwait
country.KYCayman Islands
country.KZKazakhstan
country.LALaos
country.LBLebanon
country.LCSaint Lucia
country.LILiechtenstein
country.LKSri Lanka
country.LRLiberia
country.LSLesotho
country.LTLithuania
country.LULuxembourg
country.LVLatvia
country.LYLibya
country.MAMorocco
country.MCMonaco
country.MDMoldova
country.MEMontenegro
country.MFSaint Martin
country.MGMadagascar
country.MHMarshall Islands
country.MKMacedonia
country.MLMali
country.MMMyanmar
country.MNMongolia
country.MOMacao
country.MPNorthern Mariana Islands
country.MQMartinique
country.MRMauritania
country.MSMontserrat
country.MTMalta
country.MUMauritius
country.MVMaldives
country.MWMalawi
country.MXMexico
country.MYMalaysia
country.MZMozambique
country.NANamibia
country.NCNew Caledonia
country.NENiger
country.NFNorfolk Island
country.NGNigeria
country.NINicaragua
country.NLNetherlands
country.NONorway
country.NPNepal
country.NRNauru
country.NUNiue
country.NZNew Zealand
country.OMOman
country.PAPanama
country.PEPeru
country.PFFrench Polynesia
country.PGPapua New Guinea
country.PHPhilippines
country.PKPakistan
country.PLPoland
country.PMSaint Pierre and Miquelon
country.PNPitcairn
country.PRPuerto Rico
country.PSPalestinian Territory
country.PTPortugal
country.PWPalau
country.PYParaguay
country.QAQatar
country.REReunion
country.RORomania
country.RSSerbia
country.RURussia
country.RWRwanda
country.SASaudi Arabia
country.SBSolomon Islands
country.SCSeychelles
country.SDSudan
country.SESweden
country.SGSingapore
country.SHSaint Helena
country.SISlovenia
country.SJSvalbard and Jan Mayen
country.SKSlovakia
country.SLSierra Leone
country.SMSan Marino
country.SNSenegal
country.SOSomalia
country.SRSuriname
country.SSSouth Sudan
country.STSao Tome and Principe
country.SVEl Salvador
country.SXSint Maarten
country.SYSyria
country.SZSwaziland
country.TCTurks and Caicos Islands
country.TDChad
country.TFFrench Southern Territories
country.TGTogo
country.THThailand
country.TJTajikistan
country.TKTokelau
country.TLEast Timor
country.TMTurkmenistan
country.TNTunisia
country.TOTonga
country.TRTurkey
country.TTTrinidad and Tobago
country.TVTuvalu
country.TWTaiwan
country.TZTanzania
country.UAUkraine
country.UGUganda
country.UMUnited States Minor Outlying Islands
country.USUnited States
country.UYUruguay
country.UZUzbekistan
country.VAVatican
country.VCSaint Vincent and the Grenadines
country.VEVenezuela
country.VGBritish Virgin Islands
country.VIU.S. Virgin Islands
country.VNVietnam
country.VUVanuatu
country.WFWallis and Futuna
country.WSSamoa
country.XKKosovo
country.YEYemen
country.YTMayotte
country.ZASouth Africa
country.ZMZambia
country.ZWZimbabwe

As JSON

json
{
  "alternatives.all": "{{#label}} does not match all of the required types",
  "alternatives.any": "{{#label}} does not match any of the allowed types",
  "alternatives.match": "{{#label}} does not match any of the allowed types",
  "alternatives.one": "{{#label}} matches more than one allowed type",
  "alternatives.types": "{{#label}} must be one of {{#types}}",
  "any.custom": "{{#label}} failed custom validation because {{#error.message}}",
  "any.default": "{{#label}} threw an error when running default method",
  "any.failover": "{{#label}} threw an error when running failover method",
  "any.invalid": "{{#label}} contains an invalid value",
  "any.only": "{{#label}} must be {if(#valids.length == 1, \"\", \"one of \")}{{#valids}}",
  "any.ref": "{{#label}} {{#arg}} references {{:#ref}} which {{#reason}}",
  "any.required": "{{#label}} is required",
  "any.unknown": "{{#label}} is not allowed",
  "array.base": "{{#label}} must be an array",
  "array.excludes": "{{#label}} contains an excluded value",
  "array.hasKnown": "{{#label}} does not contain at least one required match for type {:#patternLabel}",
  "array.hasUnknown": "{{#label}} does not contain at least one required match",
  "array.includes": "{{#label}} does not match any of the allowed types",
  "array.includesRequiredBoth": "{{#label}} does not contain {{#knownMisses}} and {{#unknownMisses}} other required value(s)",
  "array.includesRequiredKnowns": "{{#label}} does not contain {{#knownMisses}}",
  "array.includesRequiredUnknowns": "{{#label}} does not contain {{#unknownMisses}} required value(s)",
  "array.length": "{{#label}} must contain {{#limit}} items",
  "array.max": "{{#label}} must contain less than or equal to {{#limit}} items",
  "array.min": "{{#label}} must contain at least {{#limit}} items",
  "array.orderedLength": "{{#label}} must contain at most {{#limit}} items",
  "array.sort": "{{#label}} must be sorted in {#order} order by {{#by}}",
  "array.sort.mismatching": "{{#label}} cannot be sorted due to mismatching types",
  "array.sort.unsupported": "{{#label}} cannot be sorted due to unsupported type {#type}",
  "array.sparse": "{{#label}} must not be a sparse array item",
  "array.unique": "{{#label}} contains a duplicate value",
  "boolean.base": "{{#label}} must be a boolean",
  "date.base": "{{#label}} must be a valid date",
  "date.format": "{{#label}} must be in {msg(\"date.format.\" + #format) || #format} format",
  "date.greater": "{{#label}} must be greater than {{:#limit}}",
  "date.less": "{{#label}} must be less than {{:#limit}}",
  "date.max": "{{#label}} must be less than or equal to {{:#limit}}",
  "date.min": "{{#label}} must be greater than or equal to {{:#limit}}",
  "date.format.iso": "ISO 8601 date",
  "date.format.javascript": "timestamp or number of milliseconds",
  "date.format.unix": "timestamp or number of seconds",
  "function.arity": "{{#label}} must have an arity of {{#n}}",
  "function.class": "{{#label}} must be a class",
  "function.maxArity": "{{#label}} must have an arity lesser or equal to {{#n}}",
  "function.minArity": "{{#label}} must have an arity greater or equal to {{#n}}",
  "number.base": "{{#label}} must be a number",
  "number.greater": "{{#label}} must be greater than {{#limit}}",
  "number.infinity": "{{#label}} cannot be infinity",
  "number.integer": "{{#label}} must be an integer",
  "number.less": "{{#label}} must be less than {{#limit}}",
  "number.max": "{{#label}} must be less than or equal to {{#limit}}",
  "number.min": "{{#label}} must be greater than or equal to {{#limit}}",
  "number.multiple": "{{#label}} must be a multiple of {{#multiple}}",
  "number.negative": "{{#label}} must be a negative number",
  "number.port": "{{#label}} must be a valid port",
  "number.positive": "{{#label}} must be a positive number",
  "number.precision": "{{#label}} must have no more than {{#limit}} decimal places",
  "number.unsafe": "{{#label}} must be a safe number",
  "object.and": "{{#label}} contains {{#presentWithLabels}} without its required peers {{#missingWithLabels}}",
  "object.assert": "{{#label}} is invalid because {if(#subject.key, `\"` + #subject.key + `\" failed to ` + (#message || \"pass the assertion test\"), #message || \"the assertion failed\")}",
  "object.base": "{{#label}} must be of type {{#type}}",
  "object.instance": "{{#label}} must be an instance of {{:#type}}",
  "object.length": "{{#label}} must have {{#limit}} key{if(#limit == 1, \"\", \"s\")}",
  "object.max": "{{#label}} must have less than or equal to {{#limit}} key{if(#limit == 1, \"\", \"s\")}",
  "object.min": "{{#label}} must have at least {{#limit}} key{if(#limit == 1, \"\", \"s\")}",
  "object.missing": "{{#label}} must contain at least one of {{#peersWithLabels}}",
  "object.nand": "{{:#mainWithLabel}} must not exist simultaneously with {{#peersWithLabels}}",
  "object.oxor": "{{#label}} contains a conflict between optional exclusive peers {{#peersWithLabels}}",
  "object.pattern.match": "{{#label}} keys failed to match pattern requirements",
  "object.refType": "{{#label}} must be a Joi reference",
  "object.regex": "{{#label}} must be a RegExp object",
  "object.rename.multiple": "{{#label}} cannot rename {{:#from}} because multiple renames are disabled and another key was already renamed to {{:#to}}",
  "object.rename.override": "{{#label}} cannot rename {{:#from}} because override is disabled and target {{:#to}} exists",
  "object.schema": "{{#label}} must be a Joi schema of {{#type}} type",
  "object.unknown": "{{#label}} is not allowed",
  "object.with": "{{:#mainWithLabel}} missing required peer {{:#peerWithLabel}}",
  "object.without": "{{:#mainWithLabel}} conflict with forbidden peer {{:#peerWithLabel}}",
  "object.xor": "{{#label}} contains a conflict between exclusive peers {{#peersWithLabels}}",
  "string.alphanum": "{{#label}} must only contain alpha-numeric characters",
  "string.base": "{{#label}} must be a string",
  "string.base64": "{{#label}} must be a valid base64 string",
  "string.creditCard": "{{#label}} must be a credit card",
  "string.dataUri": "{{#label}} must be a valid dataUri string",
  "string.domain": "{{#label}} must contain a valid domain name",
  "string.email": "{{#label}} must be a valid email",
  "string.empty": "{{#label}} is not allowed to be empty",
  "string.guid": "{{#label}} must be a valid GUID",
  "string.hex": "{{#label}} must only contain hexadecimal characters",
  "string.hexAlign": "{{#label}} hex decoded representation must be byte aligned",
  "string.hostname": "{{#label}} must be a valid hostname",
  "string.ip": "{{#label}} must be a valid ip address with a {{#cidr}} CIDR",
  "string.ipVersion": "{{#label}} must be a valid ip address of one of the following versions {{#version}} with a {{#cidr}} CIDR",
  "string.isoDate": "{{#label}} must be in iso format",
  "string.isoDuration": "{{#label}} must be a valid ISO 8601 duration",
  "string.length": "{{#label}} length must be {{#limit}} characters long",
  "string.lowercase": "{{#label}} must only contain lowercase characters",
  "string.max": "{{#label}} length must be less than or equal to {{#limit}} characters long",
  "string.min": "{{#label}} length must be at least {{#limit}} characters long",
  "string.normalize": "{{#label}} must be unicode normalized in the {{#form}} form",
  "string.token": "{{#label}} must only contain alpha-numeric and underscore characters",
  "string.pattern.base": "{{#label}} with value {:[.]} fails to match the required pattern: {{#regex}}",
  "string.pattern.name": "{{#label}} with value {:[.]} fails to match the {{#name}} pattern",
  "string.pattern.invert.base": "{{#label}} with value {:[.]} matches the inverted pattern: {{#regex}}",
  "string.pattern.invert.name": "{{#label}} with value {:[.]} matches the inverted {{#name}} pattern",
  "string.trim": "{{#label}} must not have leading or trailing whitespace",
  "string.uri": "{{#label}} must be a valid uri",
  "string.uriCustomScheme": "{{#label}} must be a valid uri with a scheme matching the {{#scheme}} pattern",
  "string.uriRelativeOnly": "{{#label}} must be a valid relative uri",
  "string.uppercase": "{{#label}} must only contain uppercase characters",
  "symbol.base": "{{#label}} must be a symbol",
  "symbol.map": "{{#label}} must be one of {{#map}}",
  "binary.base": "{{#label}} must be a buffer or a string",
  "binary.length": "{{#label}} must be {{#limit}} bytes",
  "binary.max": "{{#label}} must be less than or equal to {{#limit}} bytes",
  "binary.min": "{{#label}} must be at least {{#limit}} bytes",
  "bigint.base": "\"{{#label}}\" must be a valid bigint",
  "bigint.greater": "\"{{#label}}\" must be greater than {{#limit}}",
  "bigint.less": "\"{{#label}}\" must be less than {{#limit}}",
  "bigint.max": "\"{{#label}}\" must be less than or equal to {{#limit}}",
  "bigint.min": "\"{{#label}}\" must be greater than or equal to {{#limit}}",
  "bigint.multiple": "\"{{#label}}\" must be a multiple of {{#limit}}",
  "bigint.negative": "\"{{#label}}\" must be a negative bigint",
  "bigint.positive": "\"{{#label}}\" must be a positive bigint",
  "datetime.base": "{{#label}} must be a datetime value",
  "datetime.exactly": "{{#label}} must be a datetime exactly equal to {{#limit}}",
  "datetime.equals": "{{#label}} must be a datetime equal to {{#limit}}",
  "datetime.after": "{{#label}} must be a datetime after {{#limit}}",
  "datetime.greater": "{{#label}} must be a datetime after {{#limit}}",
  "datetime.before": "{{#label}} must be a datetime before {{#limit}}",
  "datetime.less": "{{#label}} must be a datetime before {{#limit}}",
  "datetime.afterOrEqual": "{{#label}} must be a datetime after or equal to {{#limit}}",
  "datetime.min": "{{#label}} must be a datetime after or equal to {{#limit}}",
  "datetime.beforeOrEqual": "{{#label}} must be a datetime before or equal to {{#limit}}",
  "datetime.max": "{{#label}} must be a datetime before or equal to {{#limit}}",
  "datetime.weekend": "{{#label}} is not a weekend",
  "datetime.weekday": "{{#label}} is not a weekday",
  "phone.base": "{{#label}} must be a phone number",
  "phone.invalid": "{{#label}} must be a valid phone number for {{#country}}",
  "phone.fixedLine": "{{#label}} must be a fixed line number for {{#country}}",
  "phone.mobile": "{{#label}} must be a mobile number for {{#country}}",
  "phone.strictFixedLine": "{{#label}} is not a fixed line number for {{#country}}",
  "phone.strictMobile": "{{#label}} is not a mobile number for {{#country}}",
  "phone.fixedLineOrMobile": "{{#label}} must be a fixed line or mobile number for {{#country}}",
  "phone.tollFree": "{{#label}} must be a toll-free number for {{#country}}",
  "phone.premiumRate": "{{#label}} must be a premium rate number for {{#country}}",
  "phone.sharedCost": "{{#label}} must be a shared cost number for {{#country}}",
  "phone.voip": "{{#label}} must be a VoIP number for {{#country}}",
  "phone.personalNumber": "{{#label}} must be a personal number for {{#country}}",
  "phone.pager": "{{#label}} must be a pager number for {{#country}}",
  "phone.uan": "{{#label}} must be a UAN number for {{#country}}",
  "phone.voicemail": "{{#label}} must be a voicemail number for {{#country}}",
  "phone.unknown": "{{#label}} must be an unknown type number for {{#country}}",
  "phone.types": "{{#label}} must be one of the specified phone types for {{#country}}",
  "country.AD": "Andorra",
  "country.AE": "United Arab Emirates",
  "country.AF": "Afghanistan",
  "country.AG": "Antigua and Barbuda",
  "country.AI": "Anguilla",
  "country.AL": "Albania",
  "country.AM": "Armenia",
  "country.AO": "Angola",
  "country.AQ": "Antarctica",
  "country.AR": "Argentina",
  "country.AS": "American Samoa",
  "country.AT": "Austria",
  "country.AU": "Australia",
  "country.AW": "Aruba",
  "country.AX": "Aland Islands",
  "country.AZ": "Azerbaijan",
  "country.BA": "Bosnia and Herzegovina",
  "country.BB": "Barbados",
  "country.BD": "Bangladesh",
  "country.BE": "Belgium",
  "country.BF": "Burkina Faso",
  "country.BG": "Bulgaria",
  "country.BH": "Bahrain",
  "country.BI": "Burundi",
  "country.BJ": "Benin",
  "country.BL": "Saint Barthelemy",
  "country.BM": "Bermuda",
  "country.BN": "Brunei",
  "country.BO": "Bolivia",
  "country.BQ": "Bonaire, Saint Eustatius and Saba",
  "country.BR": "Brazil",
  "country.BS": "Bahamas",
  "country.BT": "Bhutan",
  "country.BV": "Bouvet Island",
  "country.BW": "Botswana",
  "country.BY": "Belarus",
  "country.BZ": "Belize",
  "country.CA": "Canada",
  "country.CC": "Cocos Islands",
  "country.CD": "Democratic Republic of the Congo",
  "country.CF": "Central African Republic",
  "country.CG": "Republic of the Congo",
  "country.CH": "Switzerland",
  "country.CI": "Ivory Coast",
  "country.CK": "Cook Islands",
  "country.CL": "Chile",
  "country.CM": "Cameroon",
  "country.CN": "China",
  "country.CO": "Colombia",
  "country.CR": "Costa Rica",
  "country.CU": "Cuba",
  "country.CV": "Cape Verde",
  "country.CW": "Curacao",
  "country.CX": "Christmas Island",
  "country.CY": "Cyprus",
  "country.CZ": "Czech Republic",
  "country.DE": "Germany",
  "country.DJ": "Djibouti",
  "country.DK": "Denmark",
  "country.DM": "Dominica",
  "country.DO": "Dominican Republic",
  "country.DZ": "Algeria",
  "country.EC": "Ecuador",
  "country.EE": "Estonia",
  "country.EG": "Egypt",
  "country.EH": "Western Sahara",
  "country.ER": "Eritrea",
  "country.ES": "Spain",
  "country.ET": "Ethiopia",
  "country.FI": "Finland",
  "country.FJ": "Fiji",
  "country.FK": "Falkland Islands",
  "country.FM": "Micronesia",
  "country.FO": "Faroe Islands",
  "country.FR": "France",
  "country.GA": "Gabon",
  "country.GB": "United Kingdom",
  "country.GD": "Grenada",
  "country.GE": "Georgia",
  "country.GF": "French Guiana",
  "country.GG": "Guernsey",
  "country.GH": "Ghana",
  "country.GI": "Gibraltar",
  "country.GL": "Greenland",
  "country.GM": "Gambia",
  "country.GN": "Guinea",
  "country.GP": "Guadeloupe",
  "country.GQ": "Equatorial Guinea",
  "country.GR": "Greece",
  "country.GS": "South Georgia and the South Sandwich Islands",
  "country.GT": "Guatemala",
  "country.GU": "Guam",
  "country.GW": "Guinea-Bissau",
  "country.GY": "Guyana",
  "country.HK": "Hong Kong",
  "country.HM": "Heard Island and McDonald Islands",
  "country.HN": "Honduras",
  "country.HR": "Croatia",
  "country.HT": "Haiti",
  "country.HU": "Hungary",
  "country.ID": "Indonesia",
  "country.IE": "Ireland",
  "country.IL": "Israel",
  "country.IM": "Isle of Man",
  "country.IN": "India",
  "country.IO": "British Indian Ocean Territory",
  "country.IQ": "Iraq",
  "country.IR": "Iran",
  "country.IS": "Iceland",
  "country.IT": "Italy",
  "country.JE": "Jersey",
  "country.JM": "Jamaica",
  "country.JO": "Jordan",
  "country.JP": "Japan",
  "country.KE": "Kenya",
  "country.KG": "Kyrgyzstan",
  "country.KH": "Cambodia",
  "country.KI": "Kiribati",
  "country.KM": "Comoros",
  "country.KN": "Saint Kitts and Nevis",
  "country.KP": "North Korea",
  "country.KR": "South Korea",
  "country.KW": "Kuwait",
  "country.KY": "Cayman Islands",
  "country.KZ": "Kazakhstan",
  "country.LA": "Laos",
  "country.LB": "Lebanon",
  "country.LC": "Saint Lucia",
  "country.LI": "Liechtenstein",
  "country.LK": "Sri Lanka",
  "country.LR": "Liberia",
  "country.LS": "Lesotho",
  "country.LT": "Lithuania",
  "country.LU": "Luxembourg",
  "country.LV": "Latvia",
  "country.LY": "Libya",
  "country.MA": "Morocco",
  "country.MC": "Monaco",
  "country.MD": "Moldova",
  "country.ME": "Montenegro",
  "country.MF": "Saint Martin",
  "country.MG": "Madagascar",
  "country.MH": "Marshall Islands",
  "country.MK": "Macedonia",
  "country.ML": "Mali",
  "country.MM": "Myanmar",
  "country.MN": "Mongolia",
  "country.MO": "Macao",
  "country.MP": "Northern Mariana Islands",
  "country.MQ": "Martinique",
  "country.MR": "Mauritania",
  "country.MS": "Montserrat",
  "country.MT": "Malta",
  "country.MU": "Mauritius",
  "country.MV": "Maldives",
  "country.MW": "Malawi",
  "country.MX": "Mexico",
  "country.MY": "Malaysia",
  "country.MZ": "Mozambique",
  "country.NA": "Namibia",
  "country.NC": "New Caledonia",
  "country.NE": "Niger",
  "country.NF": "Norfolk Island",
  "country.NG": "Nigeria",
  "country.NI": "Nicaragua",
  "country.NL": "Netherlands",
  "country.NO": "Norway",
  "country.NP": "Nepal",
  "country.NR": "Nauru",
  "country.NU": "Niue",
  "country.NZ": "New Zealand",
  "country.OM": "Oman",
  "country.PA": "Panama",
  "country.PE": "Peru",
  "country.PF": "French Polynesia",
  "country.PG": "Papua New Guinea",
  "country.PH": "Philippines",
  "country.PK": "Pakistan",
  "country.PL": "Poland",
  "country.PM": "Saint Pierre and Miquelon",
  "country.PN": "Pitcairn",
  "country.PR": "Puerto Rico",
  "country.PS": "Palestinian Territory",
  "country.PT": "Portugal",
  "country.PW": "Palau",
  "country.PY": "Paraguay",
  "country.QA": "Qatar",
  "country.RE": "Reunion",
  "country.RO": "Romania",
  "country.RS": "Serbia",
  "country.RU": "Russia",
  "country.RW": "Rwanda",
  "country.SA": "Saudi Arabia",
  "country.SB": "Solomon Islands",
  "country.SC": "Seychelles",
  "country.SD": "Sudan",
  "country.SE": "Sweden",
  "country.SG": "Singapore",
  "country.SH": "Saint Helena",
  "country.SI": "Slovenia",
  "country.SJ": "Svalbard and Jan Mayen",
  "country.SK": "Slovakia",
  "country.SL": "Sierra Leone",
  "country.SM": "San Marino",
  "country.SN": "Senegal",
  "country.SO": "Somalia",
  "country.SR": "Suriname",
  "country.SS": "South Sudan",
  "country.ST": "Sao Tome and Principe",
  "country.SV": "El Salvador",
  "country.SX": "Sint Maarten",
  "country.SY": "Syria",
  "country.SZ": "Swaziland",
  "country.TC": "Turks and Caicos Islands",
  "country.TD": "Chad",
  "country.TF": "French Southern Territories",
  "country.TG": "Togo",
  "country.TH": "Thailand",
  "country.TJ": "Tajikistan",
  "country.TK": "Tokelau",
  "country.TL": "East Timor",
  "country.TM": "Turkmenistan",
  "country.TN": "Tunisia",
  "country.TO": "Tonga",
  "country.TR": "Turkey",
  "country.TT": "Trinidad and Tobago",
  "country.TV": "Tuvalu",
  "country.TW": "Taiwan",
  "country.TZ": "Tanzania",
  "country.UA": "Ukraine",
  "country.UG": "Uganda",
  "country.UM": "United States Minor Outlying Islands",
  "country.US": "United States",
  "country.UY": "Uruguay",
  "country.UZ": "Uzbekistan",
  "country.VA": "Vatican",
  "country.VC": "Saint Vincent and the Grenadines",
  "country.VE": "Venezuela",
  "country.VG": "British Virgin Islands",
  "country.VI": "U.S. Virgin Islands",
  "country.VN": "Vietnam",
  "country.VU": "Vanuatu",
  "country.WF": "Wallis and Futuna",
  "country.WS": "Samoa",
  "country.XK": "Kosovo",
  "country.YE": "Yemen",
  "country.YT": "Mayotte",
  "country.ZA": "South Africa",
  "country.ZM": "Zambia",
  "country.ZW": "Zimbabwe"
}

For vue-i18n

json
{
  "alternatives.all": "{'{#label'}} does not match all of the required types",
  "alternatives.any": "{'{#label'}} does not match any of the allowed types",
  "alternatives.match": "{'{#label'}} does not match any of the allowed types",
  "alternatives.one": "{'{#label'}} matches more than one allowed type",
  "alternatives.types": "{'{#label'}} must be one of {'{#types'}}",
  "any.custom": "{'{#label'}} failed custom validation because {'{#error.message'}}",
  "any.default": "{'{#label'}} threw an error when running default method",
  "any.failover": "{'{#label'}} threw an error when running failover method",
  "any.invalid": "{'{#label'}} contains an invalid value",
  "any.only": "{'{#label'}} must be {'if(#valids.length == 1, \"\", \"one of \")'}{'{#valids'}}",
  "any.ref": "{'{#label'}} {'{#arg'}} references {'{:#ref'}} which {'{#reason'}}",
  "any.required": "{'{#label'}} is required",
  "any.unknown": "{'{#label'}} is not allowed",
  "array.base": "{'{#label'}} must be an array",
  "array.excludes": "{'{#label'}} contains an excluded value",
  "array.hasKnown": "{'{#label'}} does not contain at least one required match for type {':#patternLabel'}",
  "array.hasUnknown": "{'{#label'}} does not contain at least one required match",
  "array.includes": "{'{#label'}} does not match any of the allowed types",
  "array.includesRequiredBoth": "{'{#label'}} does not contain {'{#knownMisses'}} and {'{#unknownMisses'}} other required value(s)",
  "array.includesRequiredKnowns": "{'{#label'}} does not contain {'{#knownMisses'}}",
  "array.includesRequiredUnknowns": "{'{#label'}} does not contain {'{#unknownMisses'}} required value(s)",
  "array.length": "{'{#label'}} must contain {'{#limit'}} items",
  "array.max": "{'{#label'}} must contain less than or equal to {'{#limit'}} items",
  "array.min": "{'{#label'}} must contain at least {'{#limit'}} items",
  "array.orderedLength": "{'{#label'}} must contain at most {'{#limit'}} items",
  "array.sort": "{'{#label'}} must be sorted in {'#order'} order by {'{#by'}}",
  "array.sort.mismatching": "{'{#label'}} cannot be sorted due to mismatching types",
  "array.sort.unsupported": "{'{#label'}} cannot be sorted due to unsupported type {'#type'}",
  "array.sparse": "{'{#label'}} must not be a sparse array item",
  "array.unique": "{'{#label'}} contains a duplicate value",
  "boolean.base": "{'{#label'}} must be a boolean",
  "date.base": "{'{#label'}} must be a valid date",
  "date.format": "{'{#label'}} must be in {'msg(\"date.format.\" + #format) || #format'} format",
  "date.greater": "{'{#label'}} must be greater than {'{:#limit'}}",
  "date.less": "{'{#label'}} must be less than {'{:#limit'}}",
  "date.max": "{'{#label'}} must be less than or equal to {'{:#limit'}}",
  "date.min": "{'{#label'}} must be greater than or equal to {'{:#limit'}}",
  "date.format.iso": "ISO 8601 date",
  "date.format.javascript": "timestamp or number of milliseconds",
  "date.format.unix": "timestamp or number of seconds",
  "function.arity": "{'{#label'}} must have an arity of {'{#n'}}",
  "function.class": "{'{#label'}} must be a class",
  "function.maxArity": "{'{#label'}} must have an arity lesser or equal to {'{#n'}}",
  "function.minArity": "{'{#label'}} must have an arity greater or equal to {'{#n'}}",
  "number.base": "{'{#label'}} must be a number",
  "number.greater": "{'{#label'}} must be greater than {'{#limit'}}",
  "number.infinity": "{'{#label'}} cannot be infinity",
  "number.integer": "{'{#label'}} must be an integer",
  "number.less": "{'{#label'}} must be less than {'{#limit'}}",
  "number.max": "{'{#label'}} must be less than or equal to {'{#limit'}}",
  "number.min": "{'{#label'}} must be greater than or equal to {'{#limit'}}",
  "number.multiple": "{'{#label'}} must be a multiple of {'{#multiple'}}",
  "number.negative": "{'{#label'}} must be a negative number",
  "number.port": "{'{#label'}} must be a valid port",
  "number.positive": "{'{#label'}} must be a positive number",
  "number.precision": "{'{#label'}} must have no more than {'{#limit'}} decimal places",
  "number.unsafe": "{'{#label'}} must be a safe number",
  "object.and": "{'{#label'}} contains {'{#presentWithLabels'}} without its required peers {'{#missingWithLabels'}}",
  "object.assert": "{'{#label'}} is invalid because {'if(#subject.key, `\"` + #subject.key + `\" failed to ` + (#message || \"pass the assertion test\"), #message || \"the assertion failed\")'}",
  "object.base": "{'{#label'}} must be of type {'{#type'}}",
  "object.instance": "{'{#label'}} must be an instance of {'{:#type'}}",
  "object.length": "{'{#label'}} must have {'{#limit'}} key{'if(#limit == 1, \"\", \"s\")'}",
  "object.max": "{'{#label'}} must have less than or equal to {'{#limit'}} key{'if(#limit == 1, \"\", \"s\")'}",
  "object.min": "{'{#label'}} must have at least {'{#limit'}} key{'if(#limit == 1, \"\", \"s\")'}",
  "object.missing": "{'{#label'}} must contain at least one of {'{#peersWithLabels'}}",
  "object.nand": "{'{:#mainWithLabel'}} must not exist simultaneously with {'{#peersWithLabels'}}",
  "object.oxor": "{'{#label'}} contains a conflict between optional exclusive peers {'{#peersWithLabels'}}",
  "object.pattern.match": "{'{#label'}} keys failed to match pattern requirements",
  "object.refType": "{'{#label'}} must be a Joi reference",
  "object.regex": "{'{#label'}} must be a RegExp object",
  "object.rename.multiple": "{'{#label'}} cannot rename {'{:#from'}} because multiple renames are disabled and another key was already renamed to {'{:#to'}}",
  "object.rename.override": "{'{#label'}} cannot rename {'{:#from'}} because override is disabled and target {'{:#to'}} exists",
  "object.schema": "{'{#label'}} must be a Joi schema of {'{#type'}} type",
  "object.unknown": "{'{#label'}} is not allowed",
  "object.with": "{'{:#mainWithLabel'}} missing required peer {'{:#peerWithLabel'}}",
  "object.without": "{'{:#mainWithLabel'}} conflict with forbidden peer {'{:#peerWithLabel'}}",
  "object.xor": "{'{#label'}} contains a conflict between exclusive peers {'{#peersWithLabels'}}",
  "string.alphanum": "{'{#label'}} must only contain alpha-numeric characters",
  "string.base": "{'{#label'}} must be a string",
  "string.base64": "{'{#label'}} must be a valid base64 string",
  "string.creditCard": "{'{#label'}} must be a credit card",
  "string.dataUri": "{'{#label'}} must be a valid dataUri string",
  "string.domain": "{'{#label'}} must contain a valid domain name",
  "string.email": "{'{#label'}} must be a valid email",
  "string.empty": "{'{#label'}} is not allowed to be empty",
  "string.guid": "{'{#label'}} must be a valid GUID",
  "string.hex": "{'{#label'}} must only contain hexadecimal characters",
  "string.hexAlign": "{'{#label'}} hex decoded representation must be byte aligned",
  "string.hostname": "{'{#label'}} must be a valid hostname",
  "string.ip": "{'{#label'}} must be a valid ip address with a {'{#cidr'}} CIDR",
  "string.ipVersion": "{'{#label'}} must be a valid ip address of one of the following versions {'{#version'}} with a {'{#cidr'}} CIDR",
  "string.isoDate": "{'{#label'}} must be in iso format",
  "string.isoDuration": "{'{#label'}} must be a valid ISO 8601 duration",
  "string.length": "{'{#label'}} length must be {'{#limit'}} characters long",
  "string.lowercase": "{'{#label'}} must only contain lowercase characters",
  "string.max": "{'{#label'}} length must be less than or equal to {'{#limit'}} characters long",
  "string.min": "{'{#label'}} length must be at least {'{#limit'}} characters long",
  "string.normalize": "{'{#label'}} must be unicode normalized in the {'{#form'}} form",
  "string.token": "{'{#label'}} must only contain alpha-numeric and underscore characters",
  "string.pattern.base": "{'{#label'}} with value {':[.]'} fails to match the required pattern: {'{#regex'}}",
  "string.pattern.name": "{'{#label'}} with value {':[.]'} fails to match the {'{#name'}} pattern",
  "string.pattern.invert.base": "{'{#label'}} with value {':[.]'} matches the inverted pattern: {'{#regex'}}",
  "string.pattern.invert.name": "{'{#label'}} with value {':[.]'} matches the inverted {'{#name'}} pattern",
  "string.trim": "{'{#label'}} must not have leading or trailing whitespace",
  "string.uri": "{'{#label'}} must be a valid uri",
  "string.uriCustomScheme": "{'{#label'}} must be a valid uri with a scheme matching the {'{#scheme'}} pattern",
  "string.uriRelativeOnly": "{'{#label'}} must be a valid relative uri",
  "string.uppercase": "{'{#label'}} must only contain uppercase characters",
  "symbol.base": "{'{#label'}} must be a symbol",
  "symbol.map": "{'{#label'}} must be one of {'{#map'}}",
  "binary.base": "{'{#label'}} must be a buffer or a string",
  "binary.length": "{'{#label'}} must be {'{#limit'}} bytes",
  "binary.max": "{'{#label'}} must be less than or equal to {'{#limit'}} bytes",
  "binary.min": "{'{#label'}} must be at least {'{#limit'}} bytes",
  "bigint.base": "\"{'{#label'}}\" must be a valid bigint",
  "bigint.greater": "\"{'{#label'}}\" must be greater than {'{#limit'}}",
  "bigint.less": "\"{'{#label'}}\" must be less than {'{#limit'}}",
  "bigint.max": "\"{'{#label'}}\" must be less than or equal to {'{#limit'}}",
  "bigint.min": "\"{'{#label'}}\" must be greater than or equal to {'{#limit'}}",
  "bigint.multiple": "\"{'{#label'}}\" must be a multiple of {'{#limit'}}",
  "bigint.negative": "\"{'{#label'}}\" must be a negative bigint",
  "bigint.positive": "\"{'{#label'}}\" must be a positive bigint",
  "datetime.base": "{'{#label'}} must be a datetime value",
  "datetime.exactly": "{'{#label'}} must be a datetime exactly equal to {'{#limit'}}",
  "datetime.equals": "{'{#label'}} must be a datetime equal to {'{#limit'}}",
  "datetime.after": "{'{#label'}} must be a datetime after {'{#limit'}}",
  "datetime.greater": "{'{#label'}} must be a datetime after {'{#limit'}}",
  "datetime.before": "{'{#label'}} must be a datetime before {'{#limit'}}",
  "datetime.less": "{'{#label'}} must be a datetime before {'{#limit'}}",
  "datetime.afterOrEqual": "{'{#label'}} must be a datetime after or equal to {'{#limit'}}",
  "datetime.min": "{'{#label'}} must be a datetime after or equal to {'{#limit'}}",
  "datetime.beforeOrEqual": "{'{#label'}} must be a datetime before or equal to {'{#limit'}}",
  "datetime.max": "{'{#label'}} must be a datetime before or equal to {'{#limit'}}",
  "datetime.weekend": "{'{#label'}} is not a weekend",
  "datetime.weekday": "{'{#label'}} is not a weekday",
  "phone.base": "{'{#label'}} must be a phone number",
  "phone.invalid": "{'{#label'}} must be a valid phone number for {'{#country'}}",
  "phone.fixedLine": "{'{#label'}} must be a fixed line number for {'{#country'}}",
  "phone.mobile": "{'{#label'}} must be a mobile number for {'{#country'}}",
  "phone.strictFixedLine": "{'{#label'}} is not a fixed line number for {'{#country'}}",
  "phone.strictMobile": "{'{#label'}} is not a mobile number for {'{#country'}}",
  "phone.fixedLineOrMobile": "{'{#label'}} must be a fixed line or mobile number for {'{#country'}}",
  "phone.tollFree": "{'{#label'}} must be a toll-free number for {'{#country'}}",
  "phone.premiumRate": "{'{#label'}} must be a premium rate number for {'{#country'}}",
  "phone.sharedCost": "{'{#label'}} must be a shared cost number for {'{#country'}}",
  "phone.voip": "{'{#label'}} must be a VoIP number for {'{#country'}}",
  "phone.personalNumber": "{'{#label'}} must be a personal number for {'{#country'}}",
  "phone.pager": "{'{#label'}} must be a pager number for {'{#country'}}",
  "phone.uan": "{'{#label'}} must be a UAN number for {'{#country'}}",
  "phone.voicemail": "{'{#label'}} must be a voicemail number for {'{#country'}}",
  "phone.unknown": "{'{#label'}} must be an unknown type number for {'{#country'}}",
  "phone.types": "{'{#label'}} must be one of the specified phone types for {'{#country'}}",
  "country.AD": "Andorra",
  "country.AE": "United Arab Emirates",
  "country.AF": "Afghanistan",
  "country.AG": "Antigua and Barbuda",
  "country.AI": "Anguilla",
  "country.AL": "Albania",
  "country.AM": "Armenia",
  "country.AO": "Angola",
  "country.AQ": "Antarctica",
  "country.AR": "Argentina",
  "country.AS": "American Samoa",
  "country.AT": "Austria",
  "country.AU": "Australia",
  "country.AW": "Aruba",
  "country.AX": "Aland Islands",
  "country.AZ": "Azerbaijan",
  "country.BA": "Bosnia and Herzegovina",
  "country.BB": "Barbados",
  "country.BD": "Bangladesh",
  "country.BE": "Belgium",
  "country.BF": "Burkina Faso",
  "country.BG": "Bulgaria",
  "country.BH": "Bahrain",
  "country.BI": "Burundi",
  "country.BJ": "Benin",
  "country.BL": "Saint Barthelemy",
  "country.BM": "Bermuda",
  "country.BN": "Brunei",
  "country.BO": "Bolivia",
  "country.BQ": "Bonaire, Saint Eustatius and Saba",
  "country.BR": "Brazil",
  "country.BS": "Bahamas",
  "country.BT": "Bhutan",
  "country.BV": "Bouvet Island",
  "country.BW": "Botswana",
  "country.BY": "Belarus",
  "country.BZ": "Belize",
  "country.CA": "Canada",
  "country.CC": "Cocos Islands",
  "country.CD": "Democratic Republic of the Congo",
  "country.CF": "Central African Republic",
  "country.CG": "Republic of the Congo",
  "country.CH": "Switzerland",
  "country.CI": "Ivory Coast",
  "country.CK": "Cook Islands",
  "country.CL": "Chile",
  "country.CM": "Cameroon",
  "country.CN": "China",
  "country.CO": "Colombia",
  "country.CR": "Costa Rica",
  "country.CU": "Cuba",
  "country.CV": "Cape Verde",
  "country.CW": "Curacao",
  "country.CX": "Christmas Island",
  "country.CY": "Cyprus",
  "country.CZ": "Czech Republic",
  "country.DE": "Germany",
  "country.DJ": "Djibouti",
  "country.DK": "Denmark",
  "country.DM": "Dominica",
  "country.DO": "Dominican Republic",
  "country.DZ": "Algeria",
  "country.EC": "Ecuador",
  "country.EE": "Estonia",
  "country.EG": "Egypt",
  "country.EH": "Western Sahara",
  "country.ER": "Eritrea",
  "country.ES": "Spain",
  "country.ET": "Ethiopia",
  "country.FI": "Finland",
  "country.FJ": "Fiji",
  "country.FK": "Falkland Islands",
  "country.FM": "Micronesia",
  "country.FO": "Faroe Islands",
  "country.FR": "France",
  "country.GA": "Gabon",
  "country.GB": "United Kingdom",
  "country.GD": "Grenada",
  "country.GE": "Georgia",
  "country.GF": "French Guiana",
  "country.GG": "Guernsey",
  "country.GH": "Ghana",
  "country.GI": "Gibraltar",
  "country.GL": "Greenland",
  "country.GM": "Gambia",
  "country.GN": "Guinea",
  "country.GP": "Guadeloupe",
  "country.GQ": "Equatorial Guinea",
  "country.GR": "Greece",
  "country.GS": "South Georgia and the South Sandwich Islands",
  "country.GT": "Guatemala",
  "country.GU": "Guam",
  "country.GW": "Guinea-Bissau",
  "country.GY": "Guyana",
  "country.HK": "Hong Kong",
  "country.HM": "Heard Island and McDonald Islands",
  "country.HN": "Honduras",
  "country.HR": "Croatia",
  "country.HT": "Haiti",
  "country.HU": "Hungary",
  "country.ID": "Indonesia",
  "country.IE": "Ireland",
  "country.IL": "Israel",
  "country.IM": "Isle of Man",
  "country.IN": "India",
  "country.IO": "British Indian Ocean Territory",
  "country.IQ": "Iraq",
  "country.IR": "Iran",
  "country.IS": "Iceland",
  "country.IT": "Italy",
  "country.JE": "Jersey",
  "country.JM": "Jamaica",
  "country.JO": "Jordan",
  "country.JP": "Japan",
  "country.KE": "Kenya",
  "country.KG": "Kyrgyzstan",
  "country.KH": "Cambodia",
  "country.KI": "Kiribati",
  "country.KM": "Comoros",
  "country.KN": "Saint Kitts and Nevis",
  "country.KP": "North Korea",
  "country.KR": "South Korea",
  "country.KW": "Kuwait",
  "country.KY": "Cayman Islands",
  "country.KZ": "Kazakhstan",
  "country.LA": "Laos",
  "country.LB": "Lebanon",
  "country.LC": "Saint Lucia",
  "country.LI": "Liechtenstein",
  "country.LK": "Sri Lanka",
  "country.LR": "Liberia",
  "country.LS": "Lesotho",
  "country.LT": "Lithuania",
  "country.LU": "Luxembourg",
  "country.LV": "Latvia",
  "country.LY": "Libya",
  "country.MA": "Morocco",
  "country.MC": "Monaco",
  "country.MD": "Moldova",
  "country.ME": "Montenegro",
  "country.MF": "Saint Martin",
  "country.MG": "Madagascar",
  "country.MH": "Marshall Islands",
  "country.MK": "Macedonia",
  "country.ML": "Mali",
  "country.MM": "Myanmar",
  "country.MN": "Mongolia",
  "country.MO": "Macao",
  "country.MP": "Northern Mariana Islands",
  "country.MQ": "Martinique",
  "country.MR": "Mauritania",
  "country.MS": "Montserrat",
  "country.MT": "Malta",
  "country.MU": "Mauritius",
  "country.MV": "Maldives",
  "country.MW": "Malawi",
  "country.MX": "Mexico",
  "country.MY": "Malaysia",
  "country.MZ": "Mozambique",
  "country.NA": "Namibia",
  "country.NC": "New Caledonia",
  "country.NE": "Niger",
  "country.NF": "Norfolk Island",
  "country.NG": "Nigeria",
  "country.NI": "Nicaragua",
  "country.NL": "Netherlands",
  "country.NO": "Norway",
  "country.NP": "Nepal",
  "country.NR": "Nauru",
  "country.NU": "Niue",
  "country.NZ": "New Zealand",
  "country.OM": "Oman",
  "country.PA": "Panama",
  "country.PE": "Peru",
  "country.PF": "French Polynesia",
  "country.PG": "Papua New Guinea",
  "country.PH": "Philippines",
  "country.PK": "Pakistan",
  "country.PL": "Poland",
  "country.PM": "Saint Pierre and Miquelon",
  "country.PN": "Pitcairn",
  "country.PR": "Puerto Rico",
  "country.PS": "Palestinian Territory",
  "country.PT": "Portugal",
  "country.PW": "Palau",
  "country.PY": "Paraguay",
  "country.QA": "Qatar",
  "country.RE": "Reunion",
  "country.RO": "Romania",
  "country.RS": "Serbia",
  "country.RU": "Russia",
  "country.RW": "Rwanda",
  "country.SA": "Saudi Arabia",
  "country.SB": "Solomon Islands",
  "country.SC": "Seychelles",
  "country.SD": "Sudan",
  "country.SE": "Sweden",
  "country.SG": "Singapore",
  "country.SH": "Saint Helena",
  "country.SI": "Slovenia",
  "country.SJ": "Svalbard and Jan Mayen",
  "country.SK": "Slovakia",
  "country.SL": "Sierra Leone",
  "country.SM": "San Marino",
  "country.SN": "Senegal",
  "country.SO": "Somalia",
  "country.SR": "Suriname",
  "country.SS": "South Sudan",
  "country.ST": "Sao Tome and Principe",
  "country.SV": "El Salvador",
  "country.SX": "Sint Maarten",
  "country.SY": "Syria",
  "country.SZ": "Swaziland",
  "country.TC": "Turks and Caicos Islands",
  "country.TD": "Chad",
  "country.TF": "French Southern Territories",
  "country.TG": "Togo",
  "country.TH": "Thailand",
  "country.TJ": "Tajikistan",
  "country.TK": "Tokelau",
  "country.TL": "East Timor",
  "country.TM": "Turkmenistan",
  "country.TN": "Tunisia",
  "country.TO": "Tonga",
  "country.TR": "Turkey",
  "country.TT": "Trinidad and Tobago",
  "country.TV": "Tuvalu",
  "country.TW": "Taiwan",
  "country.TZ": "Tanzania",
  "country.UA": "Ukraine",
  "country.UG": "Uganda",
  "country.UM": "United States Minor Outlying Islands",
  "country.US": "United States",
  "country.UY": "Uruguay",
  "country.UZ": "Uzbekistan",
  "country.VA": "Vatican",
  "country.VC": "Saint Vincent and the Grenadines",
  "country.VE": "Venezuela",
  "country.VG": "British Virgin Islands",
  "country.VI": "U.S. Virgin Islands",
  "country.VN": "Vietnam",
  "country.VU": "Vanuatu",
  "country.WF": "Wallis and Futuna",
  "country.WS": "Samoa",
  "country.XK": "Kosovo",
  "country.YE": "Yemen",
  "country.YT": "Mayotte",
  "country.ZA": "South Africa",
  "country.ZM": "Zambia",
  "country.ZW": "Zimbabwe"
}