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:
$setI18nto define the internationalization functionality for the validator instance$clearI18nto 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:
| Term | Default 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.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 |
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"
}