[{"data":1,"prerenderedAt":3366},["ShallowReactive",2],{"navigation_docs":3,"-ai-integration-i18n":132,"-ai-integration-i18n-surround":3361},[4,27,69,91,127],{"title":5,"icon":6,"redirect":7,"path":8,"stem":9,"children":10,"page":26},"Introduction","i-lucide-rocket","\u002Fintroduction\u002Fabout-ts-runtypes","\u002Fintroduction","1.introduction",[11,14,18,22],{"title":12,"path":7,"stem":13},"About RunTypes","1.introduction\u002F1.about-ts-runtypes",{"title":15,"path":16,"stem":17},"Built on typescript-go","\u002Fintroduction\u002Fbuilt-on-typescript-go","1.introduction\u002F2.built-on-typescript-go",{"title":19,"path":20,"stem":21},"Quick Start","\u002Fintroduction\u002Fquick-start","1.introduction\u002F3.quick-start",{"title":23,"path":24,"stem":25},"Configuration","\u002Fintroduction\u002Fconfiguration","1.introduction\u002F4.configuration",false,{"title":28,"icon":29,"redirect":30,"path":31,"stem":32,"children":33,"page":26},"Guide","i-lucide-book-open","\u002Fguide\u002Ftypes-vs-schemas","\u002Fguide","2.guide",[34,37,41,45,49,53,57,61,65],{"title":35,"path":30,"stem":36},"Types vs Schemas","2.guide\u002F1.types-vs-schemas",{"title":38,"path":39,"stem":40},"Type Formats","\u002Fguide\u002Ftype-formats","2.guide\u002F2.type-formats",{"title":42,"path":43,"stem":44},"Reflection","\u002Fguide\u002Freflection","2.guide\u002F3.reflection",{"title":46,"path":47,"stem":48},"Serialization","\u002Fguide\u002Fserialization","2.guide\u002F4.serialization",{"title":50,"path":51,"stem":52},"Validation","\u002Fguide\u002Fvalidation","2.guide\u002F5.validation",{"title":54,"path":55,"stem":56},"Data Mocking","\u002Fguide\u002Fmocking","2.guide\u002F6.mocking",{"title":58,"path":59,"stem":60},"Compiler Markers","\u002Fguide\u002Fcompiler-markers","2.guide\u002F7.compiler-markers",{"title":62,"path":63,"stem":64},"Pure Functions","\u002Fguide\u002Fpure-functions","2.guide\u002F8.pure-functions",{"title":66,"path":67,"stem":68},"Linting","\u002Fguide\u002Flinting","2.guide\u002F9.linting",{"title":70,"icon":71,"redirect":72,"path":73,"stem":74,"children":75,"page":26},"AI Integration","i-lucide-sparkles","\u002Fai-integration\u002Fworkflow-and-commands","\u002Fai-integration","3.ai-integration",[76,79,83,87],{"title":77,"path":72,"stem":78},"AI Workflow","3.ai-integration\u002F1.workflow-and-commands",{"title":80,"path":81,"stem":82},"FriendlyText","\u002Fai-integration\u002Ffriendly-type","3.ai-integration\u002F2.friendly-type",{"title":84,"path":85,"stem":86},"MockData","\u002Fai-integration\u002Fmock-data","3.ai-integration\u002F3.mock-data",{"title":88,"path":89,"stem":90},"Translations (i18n)","\u002Fai-integration\u002Fi18n","3.ai-integration\u002F4.i18n",{"title":92,"icon":93,"redirect":94,"path":95,"stem":96,"children":97,"page":26},"Benchmarks","i-lucide-gauge","\u002Fbenchmarks\u002Fvalidation","\u002Fbenchmarks","7.benchmarks",[98,100,104,108,112,115,119,123],{"title":50,"path":94,"stem":99},"7.benchmarks\u002F1.validation",{"title":101,"path":102,"stem":103},"Validation Formats","\u002Fbenchmarks\u002Fvalidation-formats","7.benchmarks\u002F2.validation-formats",{"title":105,"path":106,"stem":107},"Validation Errors","\u002Fbenchmarks\u002Fgetvalidationerrors","7.benchmarks\u002F3.getvalidationerrors",{"title":109,"path":110,"stem":111},"Validation Error Formats","\u002Fbenchmarks\u002Fgetvalidationerrors-formats","7.benchmarks\u002F4.getvalidationerrors-formats",{"title":46,"path":113,"stem":114},"\u002Fbenchmarks\u002Fserialization","7.benchmarks\u002F5.serialization",{"title":116,"path":117,"stem":118},"Serialization Formats","\u002Fbenchmarks\u002Fserialization-formats","7.benchmarks\u002F6.serialization-formats",{"title":120,"path":121,"stem":122},"Compile Time","\u002Fbenchmarks\u002Fcompiletime","7.benchmarks\u002F7.compiletime",{"title":124,"path":125,"stem":126},"Correctness","\u002Fbenchmarks\u002Fcorrectness","7.benchmarks\u002F8.correctness",{"title":128,"path":129,"stem":130,"icon":131},"Diagnostics","\u002Fdiagnostics","8.diagnostics","i-lucide-triangle-alert",{"id":133,"title":88,"body":134,"description":3355,"extension":3356,"links":3357,"meta":3358,"navigation":402,"path":89,"seo":3359,"stem":90,"__hash__":3360},"docs\u002F3.ai-integration\u002F4.i18n.md",{"type":135,"value":136},"minimark",[137,154,157,162,169,365,372,490,504,508,515,523,538,1383,1386,2119,2135,2146,2150,2153,2200,2254,2264,2279,2285,2289,2308,2603,2606,2624,2831,2840,2850,2859,2863,2869,2872,2952,2959,3339,3342,3348,3351],[138,139,140,141,148,149,153],"p",{},"Your ",[142,143,144],"a",{"href":81},[145,146,147],"code",{},"FriendlyText\u003CT>"," map already holds every label and error message for a type, written in one language. Translations start from that fact: ",[150,151,152],"strong",{},"the friendly map you wrote is the source language",". There is no separate message catalog to maintain.",[138,155,156],{},"A translation is an optional file with the exact same shape, one per locale. Every string in it is optional too: anything left blank falls back to the source text, string by string. A half-translated app never breaks and never shows a raw key; the untranslated pieces simply render in the source language until someone fills them in.",[158,159,161],"h2",{"id":160},"the-workflow","The workflow",[138,163,164,165,168],{},"List your locales once, in the same tsconfig plugin entry that holds the rest of your ",[142,166,167],{"href":24},"configuration",":",[170,171,176],"pre",{"className":172,"code":173,"language":174,"meta":175,"style":175},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"compilerOptions\": {\n    \"plugins\": [\n      {\n        \"name\": \"ts-runtypes\",\n        \"i18n\": {\n          \"sourceLocale\": \"en\",\n          \"locales\": [\"es\", \"pl\", \"pt-BR\"]\n        }\n      }\n    ]\n  }\n}\n","json","",[145,177,178,187,205,222,228,254,268,291,335,341,347,353,359],{"__ignoreMap":175},[179,180,183],"span",{"class":181,"line":182},"line",1,[179,184,186],{"class":185},"sMK4o","{\n",[179,188,190,193,197,200,202],{"class":181,"line":189},2,[179,191,192],{"class":185},"  \"",[179,194,196],{"class":195},"spNyl","compilerOptions",[179,198,199],{"class":185},"\"",[179,201,168],{"class":185},[179,203,204],{"class":185}," {\n",[179,206,208,211,215,217,219],{"class":181,"line":207},3,[179,209,210],{"class":185},"    \"",[179,212,214],{"class":213},"sBMFI","plugins",[179,216,199],{"class":185},[179,218,168],{"class":185},[179,220,221],{"class":185}," [\n",[179,223,225],{"class":181,"line":224},4,[179,226,227],{"class":185},"      {\n",[179,229,231,234,238,240,242,245,249,251],{"class":181,"line":230},5,[179,232,233],{"class":185},"        \"",[179,235,237],{"class":236},"sbssI","name",[179,239,199],{"class":185},[179,241,168],{"class":185},[179,243,244],{"class":185}," \"",[179,246,248],{"class":247},"sfazB","ts-runtypes",[179,250,199],{"class":185},[179,252,253],{"class":185},",\n",[179,255,257,259,262,264,266],{"class":181,"line":256},6,[179,258,233],{"class":185},[179,260,261],{"class":236},"i18n",[179,263,199],{"class":185},[179,265,168],{"class":185},[179,267,204],{"class":185},[179,269,271,274,278,280,282,284,287,289],{"class":181,"line":270},7,[179,272,273],{"class":185},"          \"",[179,275,277],{"class":276},"swJcz","sourceLocale",[179,279,199],{"class":185},[179,281,168],{"class":185},[179,283,244],{"class":185},[179,285,286],{"class":247},"en",[179,288,199],{"class":185},[179,290,253],{"class":185},[179,292,294,296,299,301,303,306,308,311,313,316,318,321,323,325,327,330,332],{"class":181,"line":293},8,[179,295,273],{"class":185},[179,297,298],{"class":276},"locales",[179,300,199],{"class":185},[179,302,168],{"class":185},[179,304,305],{"class":185}," [",[179,307,199],{"class":185},[179,309,310],{"class":247},"es",[179,312,199],{"class":185},[179,314,315],{"class":185},",",[179,317,244],{"class":185},[179,319,320],{"class":247},"pl",[179,322,199],{"class":185},[179,324,315],{"class":185},[179,326,244],{"class":185},[179,328,329],{"class":247},"pt-BR",[179,331,199],{"class":185},[179,333,334],{"class":185},"]\n",[179,336,338],{"class":181,"line":337},9,[179,339,340],{"class":185},"        }\n",[179,342,344],{"class":181,"line":343},10,[179,345,346],{"class":185},"      }\n",[179,348,350],{"class":181,"line":349},11,[179,351,352],{"class":185},"    ]\n",[179,354,356],{"class":181,"line":355},12,[179,357,358],{"class":185},"  }\n",[179,360,362],{"class":181,"line":361},13,[179,363,364],{"class":185},"}\n",[138,366,367,368,371],{},"From there it is the same loop as the rest of the ",[142,369,370],{"href":72},"enrichment workflow",": scaffold a locale, fill the blanks (yourself, or the agent), and keep it in sync as things change:",[170,373,377],{"className":374,"code":375,"language":376,"meta":175,"style":175},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# scaffold the Polish translation files (create-only, existing files are left alone)\nts-runtypes enrich --i18n pl\n\n# after a type or the source text changes: re-sync, keeping everything you wrote\nts-runtypes enrich --i18n pl --update\n\n# every configured locale in one go\nts-runtypes enrich --i18n all --update\n\n# CI gate: fail if any translation is missing, untranslated, or out of date\nts-runtypes enrich --i18n all --require-complete\n\n# clear parked comments left behind by removed fields\nts-runtypes enrich --i18n pl --prune\n","bash",[145,378,379,385,398,404,409,423,427,432,445,449,454,467,471,476],{"__ignoreMap":175},[179,380,381],{"class":181,"line":182},[179,382,384],{"class":383},"sHwdD","# scaffold the Polish translation files (create-only, existing files are left alone)\n",[179,386,387,389,392,395],{"class":181,"line":189},[179,388,248],{"class":213},[179,390,391],{"class":247}," enrich",[179,393,394],{"class":247}," --i18n",[179,396,397],{"class":247}," pl\n",[179,399,400],{"class":181,"line":207},[179,401,403],{"emptyLinePlaceholder":402},true,"\n",[179,405,406],{"class":181,"line":224},[179,407,408],{"class":383},"# after a type or the source text changes: re-sync, keeping everything you wrote\n",[179,410,411,413,415,417,420],{"class":181,"line":230},[179,412,248],{"class":213},[179,414,391],{"class":247},[179,416,394],{"class":247},[179,418,419],{"class":247}," pl",[179,421,422],{"class":247}," --update\n",[179,424,425],{"class":181,"line":256},[179,426,403],{"emptyLinePlaceholder":402},[179,428,429],{"class":181,"line":270},[179,430,431],{"class":383},"# every configured locale in one go\n",[179,433,434,436,438,440,443],{"class":181,"line":293},[179,435,248],{"class":213},[179,437,391],{"class":247},[179,439,394],{"class":247},[179,441,442],{"class":247}," all",[179,444,422],{"class":247},[179,446,447],{"class":181,"line":337},[179,448,403],{"emptyLinePlaceholder":402},[179,450,451],{"class":181,"line":343},[179,452,453],{"class":383},"# CI gate: fail if any translation is missing, untranslated, or out of date\n",[179,455,456,458,460,462,464],{"class":181,"line":349},[179,457,248],{"class":213},[179,459,391],{"class":247},[179,461,394],{"class":247},[179,463,442],{"class":247},[179,465,466],{"class":247}," --require-complete\n",[179,468,469],{"class":181,"line":355},[179,470,403],{"emptyLinePlaceholder":402},[179,472,473],{"class":181,"line":361},[179,474,475],{"class":383},"# clear parked comments left behind by removed fields\n",[179,477,479,481,483,485,487],{"class":181,"line":478},14,[179,480,248],{"class":213},[179,482,391],{"class":247},[179,484,394],{"class":247},[179,486,419],{"class":247},[179,488,489],{"class":247}," --prune\n",[138,491,492,495,496,499,500,503],{},[145,493,494],{},"enrich --i18n --no-emit"," reports a missing translation file, unfilled blanks, a translation that is out of date against its source map, and parked leftovers awaiting a prune. By default the unfinished ones are warnings and the command still succeeds, so a routine check does not block on translations you have not gotten to yet. To make them fail CI, either add ",[145,497,498],{},"--require-complete"," for that one run or set ",[145,501,502],{},"i18n.strict: true"," to make it the default for the project. Rendering at runtime stays lenient either way.",[158,505,507],{"id":506},"what-a-translation-file-looks-like","What a translation file looks like",[138,509,510,511,514],{},"Translations live under ",[145,512,513],{},"\u003CgenDir>\u002Fenriched\u002Fi18n\u002F\u003Clocale>\u002F",", mirroring your source tree the same way the friendly files do. The locale is a folder name, so a regional tag like pt-BR works as-is:",[170,516,521],{"className":517,"code":519,"language":520},[518],"language-text","src\u002F__runtypes\u002Fenriched\u002F\n  friendly\u002Fmodels\u002Fuser.ts      friendlyUser (the source language)\n  mock\u002Fmodels\u002Fuser.ts          mockUser (mock data is never translated)\n  i18n\u002Fpl\u002Fmodels\u002Fuser.ts       pl_friendlyUser (Polish)\n  i18n\u002Fpt-BR\u002Fmodels\u002Fuser.ts    pt_BR_friendlyUser (Brazilian Portuguese)\n","text",[145,522,519],{"__ignoreMap":175},[138,524,525,526,528,529,533,534,537],{},"Each file exports one const per type, prefixed with the locale and typed ",[145,527,147],{},", exactly like the source map. There is no separate translation type: a locale file ",[530,531,532],"em",{},"is"," a friendly map, written in another language. Every file is generated from your type directly, so a scaffold arrives with every string blank and marked ",[145,535,536],{},"@todo",". It never copies your source text in as if it were already translated:",[170,539,543],{"className":540,"code":541,"language":542,"meta":175,"style":175},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type {FriendlyText} from '@ts-runtypes\u002Fcore';\nimport type {User} from '.\u002Fuser';\n\n\u002F\u002F src\u002F__runtypes\u002Fenriched\u002Fi18n\u002Fpl\u002Fmodels\u002Fuser.ts — scaffolded by `enrich --i18n pl`:\n\u002F\u002F the same tree as the source map, every leaf blank, plural arms in POLISH form.\nexport const pl_friendlyUser: FriendlyText\u003CUser> = {\n  rt$label: '', \u002F\u002F @todo\n  rt$errors: {type: ''}, \u002F\u002F @todo\n  name: {\n    rt$label: '', \u002F\u002F @todo\n    rt$errors: {\n      type: '', \u002F\u002F @todo\n      minLength: {one: '', few: '', many: '', other: ''}, \u002F\u002F @todo\n      maxLength: {one: '', few: '', many: '', other: ''}, \u002F\u002F @todo\n    },\n  },\n  age: {\n    rt$label: '', \u002F\u002F @todo\n    rt$errors: {type: '', min: {one: '', few: '', many: '', other: ''}, max: {one: '', few: '', many: '', other: ''}}, \u002F\u002F @todo\n  },\n  isActive: {rt$label: '', rt$errors: {type: ''}}, \u002F\u002F @todo\n  tags: {rt$label: '', rt$errors: {type: ''}, rt$items: {rt$label: '', rt$errors: {type: ''}}}, \u002F\u002F @todo\n  profile: {\n    rt$label: '', \u002F\u002F @todo\n    rt$errors: {type: ''}, \u002F\u002F @todo\n    email: {\n      rt$label: '',\n      rt$errors: {\n        type: '',\n        minLength: {one: '', few: '', many: '', other: ''},\n        maxLength: {one: '', few: '', many: '', other: ''},\n        pattern: '',\n      },\n    }, \u002F\u002F @todo\n    score: {\n      rt$label: '',\n      rt$errors: {type: '', min: {one: '', few: '', many: '', other: ''}, max: {one: '', few: '', many: '', other: ''}},\n    }, \u002F\u002F @todo\n  },\n};\n","ts",[145,544,545,578,602,606,611,616,645,660,681,690,703,712,725,772,815,821,827,837,850,948,953,989,1053,1063,1076,1095,1105,1117,1127,1139,1182,1224,1236,1242,1250,1260,1271,1365,1372,1377],{"__ignoreMap":175},[179,546,547,551,554,557,560,563,566,569,572,575],{"class":181,"line":182},[179,548,550],{"class":549},"s7zQu","import",[179,552,553],{"class":549}," type",[179,555,556],{"class":185}," {",[179,558,80],{"class":559},"sTEyZ",[179,561,562],{"class":185},"}",[179,564,565],{"class":549}," from",[179,567,568],{"class":185}," '",[179,570,571],{"class":247},"@ts-runtypes\u002Fcore",[179,573,574],{"class":185},"'",[179,576,577],{"class":185},";\n",[179,579,580,582,584,586,589,591,593,595,598,600],{"class":181,"line":189},[179,581,550],{"class":549},[179,583,553],{"class":549},[179,585,556],{"class":185},[179,587,588],{"class":559},"User",[179,590,562],{"class":185},[179,592,565],{"class":549},[179,594,568],{"class":185},[179,596,597],{"class":247},".\u002Fuser",[179,599,574],{"class":185},[179,601,577],{"class":185},[179,603,604],{"class":181,"line":207},[179,605,403],{"emptyLinePlaceholder":402},[179,607,608],{"class":181,"line":224},[179,609,610],{"class":383},"\u002F\u002F src\u002F__runtypes\u002Fenriched\u002Fi18n\u002Fpl\u002Fmodels\u002Fuser.ts — scaffolded by `enrich --i18n pl`:\n",[179,612,613],{"class":181,"line":230},[179,614,615],{"class":383},"\u002F\u002F the same tree as the source map, every leaf blank, plural arms in POLISH form.\n",[179,617,618,621,624,627,629,632,635,637,640,643],{"class":181,"line":256},[179,619,620],{"class":549},"export",[179,622,623],{"class":195}," const",[179,625,626],{"class":559}," pl_friendlyUser",[179,628,168],{"class":185},[179,630,631],{"class":213}," FriendlyText",[179,633,634],{"class":185},"\u003C",[179,636,588],{"class":213},[179,638,639],{"class":185},">",[179,641,642],{"class":185}," =",[179,644,204],{"class":185},[179,646,647,650,652,655,657],{"class":181,"line":270},[179,648,649],{"class":276},"  rt$label",[179,651,168],{"class":185},[179,653,654],{"class":185}," ''",[179,656,315],{"class":185},[179,658,659],{"class":383}," \u002F\u002F @todo\n",[179,661,662,665,667,669,672,674,676,679],{"class":181,"line":293},[179,663,664],{"class":276},"  rt$errors",[179,666,168],{"class":185},[179,668,556],{"class":185},[179,670,671],{"class":276},"type",[179,673,168],{"class":185},[179,675,654],{"class":185},[179,677,678],{"class":185},"},",[179,680,659],{"class":383},[179,682,683,686,688],{"class":181,"line":337},[179,684,685],{"class":276},"  name",[179,687,168],{"class":185},[179,689,204],{"class":185},[179,691,692,695,697,699,701],{"class":181,"line":343},[179,693,694],{"class":276},"    rt$label",[179,696,168],{"class":185},[179,698,654],{"class":185},[179,700,315],{"class":185},[179,702,659],{"class":383},[179,704,705,708,710],{"class":181,"line":349},[179,706,707],{"class":276},"    rt$errors",[179,709,168],{"class":185},[179,711,204],{"class":185},[179,713,714,717,719,721,723],{"class":181,"line":355},[179,715,716],{"class":276},"      type",[179,718,168],{"class":185},[179,720,654],{"class":185},[179,722,315],{"class":185},[179,724,659],{"class":383},[179,726,727,730,732,734,737,739,741,743,746,748,750,752,755,757,759,761,764,766,768,770],{"class":181,"line":361},[179,728,729],{"class":276},"      minLength",[179,731,168],{"class":185},[179,733,556],{"class":185},[179,735,736],{"class":276},"one",[179,738,168],{"class":185},[179,740,654],{"class":185},[179,742,315],{"class":185},[179,744,745],{"class":276}," few",[179,747,168],{"class":185},[179,749,654],{"class":185},[179,751,315],{"class":185},[179,753,754],{"class":276}," many",[179,756,168],{"class":185},[179,758,654],{"class":185},[179,760,315],{"class":185},[179,762,763],{"class":276}," other",[179,765,168],{"class":185},[179,767,654],{"class":185},[179,769,678],{"class":185},[179,771,659],{"class":383},[179,773,774,777,779,781,783,785,787,789,791,793,795,797,799,801,803,805,807,809,811,813],{"class":181,"line":478},[179,775,776],{"class":276},"      maxLength",[179,778,168],{"class":185},[179,780,556],{"class":185},[179,782,736],{"class":276},[179,784,168],{"class":185},[179,786,654],{"class":185},[179,788,315],{"class":185},[179,790,745],{"class":276},[179,792,168],{"class":185},[179,794,654],{"class":185},[179,796,315],{"class":185},[179,798,754],{"class":276},[179,800,168],{"class":185},[179,802,654],{"class":185},[179,804,315],{"class":185},[179,806,763],{"class":276},[179,808,168],{"class":185},[179,810,654],{"class":185},[179,812,678],{"class":185},[179,814,659],{"class":383},[179,816,818],{"class":181,"line":817},15,[179,819,820],{"class":185},"    },\n",[179,822,824],{"class":181,"line":823},16,[179,825,826],{"class":185},"  },\n",[179,828,830,833,835],{"class":181,"line":829},17,[179,831,832],{"class":276},"  age",[179,834,168],{"class":185},[179,836,204],{"class":185},[179,838,840,842,844,846,848],{"class":181,"line":839},18,[179,841,694],{"class":276},[179,843,168],{"class":185},[179,845,654],{"class":185},[179,847,315],{"class":185},[179,849,659],{"class":383},[179,851,853,855,857,859,861,863,865,867,870,872,874,876,878,880,882,884,886,888,890,892,894,896,898,900,902,904,906,909,911,913,915,917,919,921,923,925,927,929,931,933,935,937,939,941,943,946],{"class":181,"line":852},19,[179,854,707],{"class":276},[179,856,168],{"class":185},[179,858,556],{"class":185},[179,860,671],{"class":276},[179,862,168],{"class":185},[179,864,654],{"class":185},[179,866,315],{"class":185},[179,868,869],{"class":276}," min",[179,871,168],{"class":185},[179,873,556],{"class":185},[179,875,736],{"class":276},[179,877,168],{"class":185},[179,879,654],{"class":185},[179,881,315],{"class":185},[179,883,745],{"class":276},[179,885,168],{"class":185},[179,887,654],{"class":185},[179,889,315],{"class":185},[179,891,754],{"class":276},[179,893,168],{"class":185},[179,895,654],{"class":185},[179,897,315],{"class":185},[179,899,763],{"class":276},[179,901,168],{"class":185},[179,903,654],{"class":185},[179,905,678],{"class":185},[179,907,908],{"class":276}," max",[179,910,168],{"class":185},[179,912,556],{"class":185},[179,914,736],{"class":276},[179,916,168],{"class":185},[179,918,654],{"class":185},[179,920,315],{"class":185},[179,922,745],{"class":276},[179,924,168],{"class":185},[179,926,654],{"class":185},[179,928,315],{"class":185},[179,930,754],{"class":276},[179,932,168],{"class":185},[179,934,654],{"class":185},[179,936,315],{"class":185},[179,938,763],{"class":276},[179,940,168],{"class":185},[179,942,654],{"class":185},[179,944,945],{"class":185},"}},",[179,947,659],{"class":383},[179,949,951],{"class":181,"line":950},20,[179,952,826],{"class":185},[179,954,956,959,961,963,966,968,970,972,975,977,979,981,983,985,987],{"class":181,"line":955},21,[179,957,958],{"class":276},"  isActive",[179,960,168],{"class":185},[179,962,556],{"class":185},[179,964,965],{"class":276},"rt$label",[179,967,168],{"class":185},[179,969,654],{"class":185},[179,971,315],{"class":185},[179,973,974],{"class":276}," rt$errors",[179,976,168],{"class":185},[179,978,556],{"class":185},[179,980,671],{"class":276},[179,982,168],{"class":185},[179,984,654],{"class":185},[179,986,945],{"class":185},[179,988,659],{"class":383},[179,990,992,995,997,999,1001,1003,1005,1007,1009,1011,1013,1015,1017,1019,1021,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1046,1048,1051],{"class":181,"line":991},22,[179,993,994],{"class":276},"  tags",[179,996,168],{"class":185},[179,998,556],{"class":185},[179,1000,965],{"class":276},[179,1002,168],{"class":185},[179,1004,654],{"class":185},[179,1006,315],{"class":185},[179,1008,974],{"class":276},[179,1010,168],{"class":185},[179,1012,556],{"class":185},[179,1014,671],{"class":276},[179,1016,168],{"class":185},[179,1018,654],{"class":185},[179,1020,678],{"class":185},[179,1022,1023],{"class":276}," rt$items",[179,1025,168],{"class":185},[179,1027,556],{"class":185},[179,1029,965],{"class":276},[179,1031,168],{"class":185},[179,1033,654],{"class":185},[179,1035,315],{"class":185},[179,1037,974],{"class":276},[179,1039,168],{"class":185},[179,1041,556],{"class":185},[179,1043,671],{"class":276},[179,1045,168],{"class":185},[179,1047,654],{"class":185},[179,1049,1050],{"class":185},"}}},",[179,1052,659],{"class":383},[179,1054,1056,1059,1061],{"class":181,"line":1055},23,[179,1057,1058],{"class":276},"  profile",[179,1060,168],{"class":185},[179,1062,204],{"class":185},[179,1064,1066,1068,1070,1072,1074],{"class":181,"line":1065},24,[179,1067,694],{"class":276},[179,1069,168],{"class":185},[179,1071,654],{"class":185},[179,1073,315],{"class":185},[179,1075,659],{"class":383},[179,1077,1079,1081,1083,1085,1087,1089,1091,1093],{"class":181,"line":1078},25,[179,1080,707],{"class":276},[179,1082,168],{"class":185},[179,1084,556],{"class":185},[179,1086,671],{"class":276},[179,1088,168],{"class":185},[179,1090,654],{"class":185},[179,1092,678],{"class":185},[179,1094,659],{"class":383},[179,1096,1098,1101,1103],{"class":181,"line":1097},26,[179,1099,1100],{"class":276},"    email",[179,1102,168],{"class":185},[179,1104,204],{"class":185},[179,1106,1108,1111,1113,1115],{"class":181,"line":1107},27,[179,1109,1110],{"class":276},"      rt$label",[179,1112,168],{"class":185},[179,1114,654],{"class":185},[179,1116,253],{"class":185},[179,1118,1120,1123,1125],{"class":181,"line":1119},28,[179,1121,1122],{"class":276},"      rt$errors",[179,1124,168],{"class":185},[179,1126,204],{"class":185},[179,1128,1130,1133,1135,1137],{"class":181,"line":1129},29,[179,1131,1132],{"class":276},"        type",[179,1134,168],{"class":185},[179,1136,654],{"class":185},[179,1138,253],{"class":185},[179,1140,1142,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179],{"class":181,"line":1141},30,[179,1143,1144],{"class":276},"        minLength",[179,1146,168],{"class":185},[179,1148,556],{"class":185},[179,1150,736],{"class":276},[179,1152,168],{"class":185},[179,1154,654],{"class":185},[179,1156,315],{"class":185},[179,1158,745],{"class":276},[179,1160,168],{"class":185},[179,1162,654],{"class":185},[179,1164,315],{"class":185},[179,1166,754],{"class":276},[179,1168,168],{"class":185},[179,1170,654],{"class":185},[179,1172,315],{"class":185},[179,1174,763],{"class":276},[179,1176,168],{"class":185},[179,1178,654],{"class":185},[179,1180,1181],{"class":185},"},\n",[179,1183,1185,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222],{"class":181,"line":1184},31,[179,1186,1187],{"class":276},"        maxLength",[179,1189,168],{"class":185},[179,1191,556],{"class":185},[179,1193,736],{"class":276},[179,1195,168],{"class":185},[179,1197,654],{"class":185},[179,1199,315],{"class":185},[179,1201,745],{"class":276},[179,1203,168],{"class":185},[179,1205,654],{"class":185},[179,1207,315],{"class":185},[179,1209,754],{"class":276},[179,1211,168],{"class":185},[179,1213,654],{"class":185},[179,1215,315],{"class":185},[179,1217,763],{"class":276},[179,1219,168],{"class":185},[179,1221,654],{"class":185},[179,1223,1181],{"class":185},[179,1225,1227,1230,1232,1234],{"class":181,"line":1226},32,[179,1228,1229],{"class":276},"        pattern",[179,1231,168],{"class":185},[179,1233,654],{"class":185},[179,1235,253],{"class":185},[179,1237,1239],{"class":181,"line":1238},33,[179,1240,1241],{"class":185},"      },\n",[179,1243,1245,1248],{"class":181,"line":1244},34,[179,1246,1247],{"class":185},"    },",[179,1249,659],{"class":383},[179,1251,1253,1256,1258],{"class":181,"line":1252},35,[179,1254,1255],{"class":276},"    score",[179,1257,168],{"class":185},[179,1259,204],{"class":185},[179,1261,1263,1265,1267,1269],{"class":181,"line":1262},36,[179,1264,1110],{"class":276},[179,1266,168],{"class":185},[179,1268,654],{"class":185},[179,1270,253],{"class":185},[179,1272,1274,1276,1278,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362],{"class":181,"line":1273},37,[179,1275,1122],{"class":276},[179,1277,168],{"class":185},[179,1279,556],{"class":185},[179,1281,671],{"class":276},[179,1283,168],{"class":185},[179,1285,654],{"class":185},[179,1287,315],{"class":185},[179,1289,869],{"class":276},[179,1291,168],{"class":185},[179,1293,556],{"class":185},[179,1295,736],{"class":276},[179,1297,168],{"class":185},[179,1299,654],{"class":185},[179,1301,315],{"class":185},[179,1303,745],{"class":276},[179,1305,168],{"class":185},[179,1307,654],{"class":185},[179,1309,315],{"class":185},[179,1311,754],{"class":276},[179,1313,168],{"class":185},[179,1315,654],{"class":185},[179,1317,315],{"class":185},[179,1319,763],{"class":276},[179,1321,168],{"class":185},[179,1323,654],{"class":185},[179,1325,678],{"class":185},[179,1327,908],{"class":276},[179,1329,168],{"class":185},[179,1331,556],{"class":185},[179,1333,736],{"class":276},[179,1335,168],{"class":185},[179,1337,654],{"class":185},[179,1339,315],{"class":185},[179,1341,745],{"class":276},[179,1343,168],{"class":185},[179,1345,654],{"class":185},[179,1347,315],{"class":185},[179,1349,754],{"class":276},[179,1351,168],{"class":185},[179,1353,654],{"class":185},[179,1355,315],{"class":185},[179,1357,763],{"class":276},[179,1359,168],{"class":185},[179,1361,654],{"class":185},[179,1363,1364],{"class":185},"}},\n",[179,1366,1368,1370],{"class":181,"line":1367},38,[179,1369,1247],{"class":185},[179,1371,659],{"class":383},[179,1373,1375],{"class":181,"line":1374},39,[179,1376,826],{"class":185},[179,1378,1380],{"class":181,"line":1379},40,[179,1381,1382],{"class":185},"};\n",[138,1384,1385],{},"Fill what you can, leave the rest blank:",[170,1387,1389],{"className":540,"code":1388,"language":542,"meta":175,"style":175},"import type {FriendlyText} from '@ts-runtypes\u002Fcore';\nimport type {User} from '.\u002Fuser';\n\n\u002F\u002F Fill what you can, leave the rest blank — a blank leaf keeps rendering in\n\u002F\u002F the source language.\nexport const pl_friendlyUser: FriendlyText\u003CUser> = {\n  rt$label: 'Konto użytkownika',\n  rt$errors: {type: ''},\n  name: {\n    rt$label: 'Imię i nazwisko',\n    rt$errors: {\n      type: '', \u002F\u002F still blank: this one keeps rendering in the source language\n      minLength: {\n        one: '$[label] musi mieć co najmniej $[val] znak',\n        few: '$[label] musi mieć co najmniej $[val] znaki',\n        many: '$[label] musi mieć co najmniej $[val] znaków',\n        other: '$[label] musi mieć co najmniej $[val] znaku',\n      },\n      maxLength: {one: '', few: '', many: '', other: ''},\n    },\n  },\n  age: {\n    rt$label: 'Wiek',\n    rt$errors: {type: '', min: {one: '', few: '', many: '', other: ''}, max: {one: '', few: '', many: '', other: ''}},\n  },\n  isActive: {rt$label: '', rt$errors: {type: ''}},\n  tags: {rt$label: 'Tagi', rt$errors: {type: ''}, rt$items: {rt$label: '', rt$errors: {type: ''}}},\n  profile: {\n    rt$label: 'Profil',\n    rt$errors: {type: ''},\n    email: {\n      rt$label: 'Adres e-mail',\n      rt$errors: {type: '', minLength: '', maxLength: '', pattern: 'Podaj prawidłowy adres e-mail'},\n    },\n    score: {\n      rt$label: '',\n      rt$errors: {type: '', min: {one: '', few: '', many: '', other: ''}, max: {one: '', few: '', many: '', other: ''}},\n    },\n  },\n};\n",[145,1390,1391,1413,1435,1439,1444,1449,1471,1486,1502,1510,1525,1533,1546,1554,1570,1586,1602,1618,1622,1662,1666,1670,1678,1693,1785,1789,1819,1883,1891,1906,1922,1930,1945,1993,1997,2005,2015,2107,2111,2115],{"__ignoreMap":175},[179,1392,1393,1395,1397,1399,1401,1403,1405,1407,1409,1411],{"class":181,"line":182},[179,1394,550],{"class":549},[179,1396,553],{"class":549},[179,1398,556],{"class":185},[179,1400,80],{"class":559},[179,1402,562],{"class":185},[179,1404,565],{"class":549},[179,1406,568],{"class":185},[179,1408,571],{"class":247},[179,1410,574],{"class":185},[179,1412,577],{"class":185},[179,1414,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433],{"class":181,"line":189},[179,1416,550],{"class":549},[179,1418,553],{"class":549},[179,1420,556],{"class":185},[179,1422,588],{"class":559},[179,1424,562],{"class":185},[179,1426,565],{"class":549},[179,1428,568],{"class":185},[179,1430,597],{"class":247},[179,1432,574],{"class":185},[179,1434,577],{"class":185},[179,1436,1437],{"class":181,"line":207},[179,1438,403],{"emptyLinePlaceholder":402},[179,1440,1441],{"class":181,"line":224},[179,1442,1443],{"class":383},"\u002F\u002F Fill what you can, leave the rest blank — a blank leaf keeps rendering in\n",[179,1445,1446],{"class":181,"line":230},[179,1447,1448],{"class":383},"\u002F\u002F the source language.\n",[179,1450,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469],{"class":181,"line":256},[179,1452,620],{"class":549},[179,1454,623],{"class":195},[179,1456,626],{"class":559},[179,1458,168],{"class":185},[179,1460,631],{"class":213},[179,1462,634],{"class":185},[179,1464,588],{"class":213},[179,1466,639],{"class":185},[179,1468,642],{"class":185},[179,1470,204],{"class":185},[179,1472,1473,1475,1477,1479,1482,1484],{"class":181,"line":270},[179,1474,649],{"class":276},[179,1476,168],{"class":185},[179,1478,568],{"class":185},[179,1480,1481],{"class":247},"Konto użytkownika",[179,1483,574],{"class":185},[179,1485,253],{"class":185},[179,1487,1488,1490,1492,1494,1496,1498,1500],{"class":181,"line":293},[179,1489,664],{"class":276},[179,1491,168],{"class":185},[179,1493,556],{"class":185},[179,1495,671],{"class":276},[179,1497,168],{"class":185},[179,1499,654],{"class":185},[179,1501,1181],{"class":185},[179,1503,1504,1506,1508],{"class":181,"line":337},[179,1505,685],{"class":276},[179,1507,168],{"class":185},[179,1509,204],{"class":185},[179,1511,1512,1514,1516,1518,1521,1523],{"class":181,"line":343},[179,1513,694],{"class":276},[179,1515,168],{"class":185},[179,1517,568],{"class":185},[179,1519,1520],{"class":247},"Imię i nazwisko",[179,1522,574],{"class":185},[179,1524,253],{"class":185},[179,1526,1527,1529,1531],{"class":181,"line":349},[179,1528,707],{"class":276},[179,1530,168],{"class":185},[179,1532,204],{"class":185},[179,1534,1535,1537,1539,1541,1543],{"class":181,"line":355},[179,1536,716],{"class":276},[179,1538,168],{"class":185},[179,1540,654],{"class":185},[179,1542,315],{"class":185},[179,1544,1545],{"class":383}," \u002F\u002F still blank: this one keeps rendering in the source language\n",[179,1547,1548,1550,1552],{"class":181,"line":361},[179,1549,729],{"class":276},[179,1551,168],{"class":185},[179,1553,204],{"class":185},[179,1555,1556,1559,1561,1563,1566,1568],{"class":181,"line":478},[179,1557,1558],{"class":276},"        one",[179,1560,168],{"class":185},[179,1562,568],{"class":185},[179,1564,1565],{"class":247},"$[label] musi mieć co najmniej $[val] znak",[179,1567,574],{"class":185},[179,1569,253],{"class":185},[179,1571,1572,1575,1577,1579,1582,1584],{"class":181,"line":817},[179,1573,1574],{"class":276},"        few",[179,1576,168],{"class":185},[179,1578,568],{"class":185},[179,1580,1581],{"class":247},"$[label] musi mieć co najmniej $[val] znaki",[179,1583,574],{"class":185},[179,1585,253],{"class":185},[179,1587,1588,1591,1593,1595,1598,1600],{"class":181,"line":823},[179,1589,1590],{"class":276},"        many",[179,1592,168],{"class":185},[179,1594,568],{"class":185},[179,1596,1597],{"class":247},"$[label] musi mieć co najmniej $[val] znaków",[179,1599,574],{"class":185},[179,1601,253],{"class":185},[179,1603,1604,1607,1609,1611,1614,1616],{"class":181,"line":829},[179,1605,1606],{"class":276},"        other",[179,1608,168],{"class":185},[179,1610,568],{"class":185},[179,1612,1613],{"class":247},"$[label] musi mieć co najmniej $[val] znaku",[179,1615,574],{"class":185},[179,1617,253],{"class":185},[179,1619,1620],{"class":181,"line":839},[179,1621,1241],{"class":185},[179,1623,1624,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652,1654,1656,1658,1660],{"class":181,"line":852},[179,1625,776],{"class":276},[179,1627,168],{"class":185},[179,1629,556],{"class":185},[179,1631,736],{"class":276},[179,1633,168],{"class":185},[179,1635,654],{"class":185},[179,1637,315],{"class":185},[179,1639,745],{"class":276},[179,1641,168],{"class":185},[179,1643,654],{"class":185},[179,1645,315],{"class":185},[179,1647,754],{"class":276},[179,1649,168],{"class":185},[179,1651,654],{"class":185},[179,1653,315],{"class":185},[179,1655,763],{"class":276},[179,1657,168],{"class":185},[179,1659,654],{"class":185},[179,1661,1181],{"class":185},[179,1663,1664],{"class":181,"line":950},[179,1665,820],{"class":185},[179,1667,1668],{"class":181,"line":955},[179,1669,826],{"class":185},[179,1671,1672,1674,1676],{"class":181,"line":991},[179,1673,832],{"class":276},[179,1675,168],{"class":185},[179,1677,204],{"class":185},[179,1679,1680,1682,1684,1686,1689,1691],{"class":181,"line":1055},[179,1681,694],{"class":276},[179,1683,168],{"class":185},[179,1685,568],{"class":185},[179,1687,1688],{"class":247},"Wiek",[179,1690,574],{"class":185},[179,1692,253],{"class":185},[179,1694,1695,1697,1699,1701,1703,1705,1707,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729,1731,1733,1735,1737,1739,1741,1743,1745,1747,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1773,1775,1777,1779,1781,1783],{"class":181,"line":1065},[179,1696,707],{"class":276},[179,1698,168],{"class":185},[179,1700,556],{"class":185},[179,1702,671],{"class":276},[179,1704,168],{"class":185},[179,1706,654],{"class":185},[179,1708,315],{"class":185},[179,1710,869],{"class":276},[179,1712,168],{"class":185},[179,1714,556],{"class":185},[179,1716,736],{"class":276},[179,1718,168],{"class":185},[179,1720,654],{"class":185},[179,1722,315],{"class":185},[179,1724,745],{"class":276},[179,1726,168],{"class":185},[179,1728,654],{"class":185},[179,1730,315],{"class":185},[179,1732,754],{"class":276},[179,1734,168],{"class":185},[179,1736,654],{"class":185},[179,1738,315],{"class":185},[179,1740,763],{"class":276},[179,1742,168],{"class":185},[179,1744,654],{"class":185},[179,1746,678],{"class":185},[179,1748,908],{"class":276},[179,1750,168],{"class":185},[179,1752,556],{"class":185},[179,1754,736],{"class":276},[179,1756,168],{"class":185},[179,1758,654],{"class":185},[179,1760,315],{"class":185},[179,1762,745],{"class":276},[179,1764,168],{"class":185},[179,1766,654],{"class":185},[179,1768,315],{"class":185},[179,1770,754],{"class":276},[179,1772,168],{"class":185},[179,1774,654],{"class":185},[179,1776,315],{"class":185},[179,1778,763],{"class":276},[179,1780,168],{"class":185},[179,1782,654],{"class":185},[179,1784,1364],{"class":185},[179,1786,1787],{"class":181,"line":1078},[179,1788,826],{"class":185},[179,1790,1791,1793,1795,1797,1799,1801,1803,1805,1807,1809,1811,1813,1815,1817],{"class":181,"line":1097},[179,1792,958],{"class":276},[179,1794,168],{"class":185},[179,1796,556],{"class":185},[179,1798,965],{"class":276},[179,1800,168],{"class":185},[179,1802,654],{"class":185},[179,1804,315],{"class":185},[179,1806,974],{"class":276},[179,1808,168],{"class":185},[179,1810,556],{"class":185},[179,1812,671],{"class":276},[179,1814,168],{"class":185},[179,1816,654],{"class":185},[179,1818,1364],{"class":185},[179,1820,1821,1823,1825,1827,1829,1831,1833,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880],{"class":181,"line":1107},[179,1822,994],{"class":276},[179,1824,168],{"class":185},[179,1826,556],{"class":185},[179,1828,965],{"class":276},[179,1830,168],{"class":185},[179,1832,568],{"class":185},[179,1834,1835],{"class":247},"Tagi",[179,1837,574],{"class":185},[179,1839,315],{"class":185},[179,1841,974],{"class":276},[179,1843,168],{"class":185},[179,1845,556],{"class":185},[179,1847,671],{"class":276},[179,1849,168],{"class":185},[179,1851,654],{"class":185},[179,1853,678],{"class":185},[179,1855,1023],{"class":276},[179,1857,168],{"class":185},[179,1859,556],{"class":185},[179,1861,965],{"class":276},[179,1863,168],{"class":185},[179,1865,654],{"class":185},[179,1867,315],{"class":185},[179,1869,974],{"class":276},[179,1871,168],{"class":185},[179,1873,556],{"class":185},[179,1875,671],{"class":276},[179,1877,168],{"class":185},[179,1879,654],{"class":185},[179,1881,1882],{"class":185},"}}},\n",[179,1884,1885,1887,1889],{"class":181,"line":1119},[179,1886,1058],{"class":276},[179,1888,168],{"class":185},[179,1890,204],{"class":185},[179,1892,1893,1895,1897,1899,1902,1904],{"class":181,"line":1129},[179,1894,694],{"class":276},[179,1896,168],{"class":185},[179,1898,568],{"class":185},[179,1900,1901],{"class":247},"Profil",[179,1903,574],{"class":185},[179,1905,253],{"class":185},[179,1907,1908,1910,1912,1914,1916,1918,1920],{"class":181,"line":1141},[179,1909,707],{"class":276},[179,1911,168],{"class":185},[179,1913,556],{"class":185},[179,1915,671],{"class":276},[179,1917,168],{"class":185},[179,1919,654],{"class":185},[179,1921,1181],{"class":185},[179,1923,1924,1926,1928],{"class":181,"line":1184},[179,1925,1100],{"class":276},[179,1927,168],{"class":185},[179,1929,204],{"class":185},[179,1931,1932,1934,1936,1938,1941,1943],{"class":181,"line":1226},[179,1933,1110],{"class":276},[179,1935,168],{"class":185},[179,1937,568],{"class":185},[179,1939,1940],{"class":247},"Adres e-mail",[179,1942,574],{"class":185},[179,1944,253],{"class":185},[179,1946,1947,1949,1951,1953,1955,1957,1959,1961,1964,1966,1968,1970,1973,1975,1977,1979,1982,1984,1986,1989,1991],{"class":181,"line":1238},[179,1948,1122],{"class":276},[179,1950,168],{"class":185},[179,1952,556],{"class":185},[179,1954,671],{"class":276},[179,1956,168],{"class":185},[179,1958,654],{"class":185},[179,1960,315],{"class":185},[179,1962,1963],{"class":276}," minLength",[179,1965,168],{"class":185},[179,1967,654],{"class":185},[179,1969,315],{"class":185},[179,1971,1972],{"class":276}," maxLength",[179,1974,168],{"class":185},[179,1976,654],{"class":185},[179,1978,315],{"class":185},[179,1980,1981],{"class":276}," pattern",[179,1983,168],{"class":185},[179,1985,568],{"class":185},[179,1987,1988],{"class":247},"Podaj prawidłowy adres e-mail",[179,1990,574],{"class":185},[179,1992,1181],{"class":185},[179,1994,1995],{"class":181,"line":1244},[179,1996,820],{"class":185},[179,1998,1999,2001,2003],{"class":181,"line":1252},[179,2000,1255],{"class":276},[179,2002,168],{"class":185},[179,2004,204],{"class":185},[179,2006,2007,2009,2011,2013],{"class":181,"line":1262},[179,2008,1110],{"class":276},[179,2010,168],{"class":185},[179,2012,654],{"class":185},[179,2014,253],{"class":185},[179,2016,2017,2019,2021,2023,2025,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057,2059,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105],{"class":181,"line":1273},[179,2018,1122],{"class":276},[179,2020,168],{"class":185},[179,2022,556],{"class":185},[179,2024,671],{"class":276},[179,2026,168],{"class":185},[179,2028,654],{"class":185},[179,2030,315],{"class":185},[179,2032,869],{"class":276},[179,2034,168],{"class":185},[179,2036,556],{"class":185},[179,2038,736],{"class":276},[179,2040,168],{"class":185},[179,2042,654],{"class":185},[179,2044,315],{"class":185},[179,2046,745],{"class":276},[179,2048,168],{"class":185},[179,2050,654],{"class":185},[179,2052,315],{"class":185},[179,2054,754],{"class":276},[179,2056,168],{"class":185},[179,2058,654],{"class":185},[179,2060,315],{"class":185},[179,2062,763],{"class":276},[179,2064,168],{"class":185},[179,2066,654],{"class":185},[179,2068,678],{"class":185},[179,2070,908],{"class":276},[179,2072,168],{"class":185},[179,2074,556],{"class":185},[179,2076,736],{"class":276},[179,2078,168],{"class":185},[179,2080,654],{"class":185},[179,2082,315],{"class":185},[179,2084,745],{"class":276},[179,2086,168],{"class":185},[179,2088,654],{"class":185},[179,2090,315],{"class":185},[179,2092,754],{"class":276},[179,2094,168],{"class":185},[179,2096,654],{"class":185},[179,2098,315],{"class":185},[179,2100,763],{"class":276},[179,2102,168],{"class":185},[179,2104,654],{"class":185},[179,2106,1364],{"class":185},[179,2108,2109],{"class":181,"line":1367},[179,2110,820],{"class":185},[179,2112,2113],{"class":181,"line":1374},[179,2114,826],{"class":185},[179,2116,2117],{"class":181,"line":1379},[179,2118,1382],{"class":185},[138,2120,2121,2122,2126,2127,2134],{},"All the ",[142,2123,2125],{"href":2124},"\u002Fai-integration\u002Ffriendly-type#the-placeholder-dsl","placeholder tokens"," work exactly as they do in the source map, and a field that uses the ",[142,2128,2130,2133],{"href":2129},"\u002Fai-integration\u002Ffriendly-type#rtdefault-one-message-for-the-whole-field",[145,2131,2132],{},"rt$default"," mode"," has exactly one string to translate.",[138,2136,2137,2138,2141,2142,2145],{},"Translations stay in sync the same way the source maps do, because they sync from the same place: your type. The friendly map and every locale file are each generated straight from the source type, so no generated file ever feeds another and a stale friendly map can never mislead a translation. Run ",[145,2139,2140],{},"enrich --i18n pl --update"," after a change: a new message arrives as a fresh blank, a removed one is parked as a comment (cleared by ",[145,2143,2144],{},"--prune","), and nothing you wrote is ever lost. Renaming a type in your code renames its consts across every locale too.",[158,2147,2149],{"id":2148},"plurals","Plurals",[138,2151,2152],{},"A message that carries a count often needs different wording at different counts. English gets away with two forms (1 character, 3 characters); Polish needs four, Arabic six. You should not have to know any of that, so the generator handles it.",[138,2154,2155,2156,2159,2160,2159,2163,2159,2166,2159,2169,2159,2172,2175,2176,2178,2179,2182,2183,2159,2185,2159,2188,2178,2191,2193,2194,2159,2196,2199],{},"Every count-carrying rule (",[145,2157,2158],{},"minLength",", ",[145,2161,2162],{},"maxLength",[145,2164,2165],{},"min",[145,2167,2168],{},"max",[145,2170,2171],{},"lt",[145,2173,2174],{},"gt",") is scaffolded as a small object with exactly the plural forms that file's language uses, and you only fill in strings. An English map gets ",[145,2177,736],{}," and ",[145,2180,2181],{},"other","; the Polish translation of the same rule gets ",[145,2184,736],{},[145,2186,2187],{},"few",[145,2189,2190],{},"many",[145,2192,2181],{},", as in the example above. Every other rule (",[145,2195,671],{},[145,2197,2198],{},"pattern",", and the rest) stays a single string:",[170,2201,2203],{"className":540,"code":2202,"language":542,"meta":175,"style":175},"\u002F\u002F in the English source map\nminLength: {\n  one: '$[label] needs at least $[val] character',\n  other: '$[label] needs at least $[val] characters',\n},\n",[145,2204,2205,2210,2218,2234,2250],{"__ignoreMap":175},[179,2206,2207],{"class":181,"line":182},[179,2208,2209],{"class":383},"\u002F\u002F in the English source map\n",[179,2211,2212,2214,2216],{"class":181,"line":189},[179,2213,2158],{"class":213},[179,2215,168],{"class":185},[179,2217,204],{"class":185},[179,2219,2220,2223,2225,2227,2230,2232],{"class":181,"line":207},[179,2221,2222],{"class":213},"  one",[179,2224,168],{"class":185},[179,2226,568],{"class":185},[179,2228,2229],{"class":247},"$[label] needs at least $[val] character",[179,2231,574],{"class":185},[179,2233,253],{"class":185},[179,2235,2236,2239,2241,2243,2246,2248],{"class":181,"line":224},[179,2237,2238],{"class":213},"  other",[179,2240,168],{"class":185},[179,2242,568],{"class":185},[179,2244,2245],{"class":247},"$[label] needs at least $[val] characters",[179,2247,574],{"class":185},[179,2249,253],{"class":185},[179,2251,2252],{"class":181,"line":230},[179,2253,1181],{"class":185},[138,2255,2256,2257,2260,2261,2263],{},"At render time the right form is picked with the browser's own plural rules (",[145,2258,2259],{},"Intl.PluralRules","), per locale. ",[145,2262,2181],{}," is the one required form and covers any form you leave out; unused forms can be pruned, and a plain string is still fine on a count-carrying rule when one wording covers every count.",[2265,2266,2267,2270,2271,2274,2275,2278],"warning",{},[150,2268,2269],{},"The count is the rule's limit, not what the user typed."," For a field with minLength 3, the plural form (and ",[145,2272,2273],{},"$[val]",") follow the 3, never the length of the received text. That way \"needs at least $",[179,2276,2277],{},"val"," characters\" always agrees with its own number. Write each form for the limit it will display.",[138,2280,2281,2282,2284],{},"One more subtlety handled for you: a plural is translated as a whole. A half-filled translated plural degrades to its own ",[145,2283,2181],{}," form first, and only a fully blank one falls back to the source; the renderer never mixes one language's forms with another's inside a single message.",[158,2286,2288],{"id":2287},"rendering-translated-messages","Rendering translated messages",[138,2290,2291,2294,2295,2300,2301,2178,2304,2307],{},[145,2292,2293],{},"createFriendlyTextI18n"," is the locale-aware version of ",[142,2296,2297],{"href":81},[145,2298,2299],{},"createFriendlyText",". Hand it the source map plus the translations you want to bundle, and it returns the same renderer, with the same ",[145,2302,2303],{},"label",[145,2305,2306],{},"errors"," methods:",[170,2309,2311],{"className":540,"code":2310,"language":542,"meta":175,"style":175},"import {createFriendlyTextI18n, createGetValidationErrorsFn} from '@ts-runtypes\u002Fcore';\nimport type {User} from '.\u002Fuser';\nimport {friendlyUser} from '.\u002Ffriendly-user';\nimport {es_friendlyUser} from '.\u002Fi18n-es';\nimport {pl_friendlyUser} from '.\u002Fi18n-pl';\n\nconst getUserErrors = createGetValidationErrorsFn\u003CUser>();\n\nconst friendly = createFriendlyTextI18n\u003CUser>(friendlyUser, {\n  locale: 'pl',\n  translations: {es: es_friendlyUser, pl: pl_friendlyUser},\n});\n\nconst badInput: unknown = {name: 'A', age: 200};\nfriendly.errors(getUserErrors(badInput));\n\u002F\u002F → Polish messages, falling back to your source text wherever a blank was left\n",[145,2312,2313,2338,2360,2382,2404,2426,2430,2455,2459,2484,2499,2525,2534,2538,2577,2598],{"__ignoreMap":175},[179,2314,2315,2317,2319,2321,2323,2326,2328,2330,2332,2334,2336],{"class":181,"line":182},[179,2316,550],{"class":549},[179,2318,556],{"class":185},[179,2320,2293],{"class":559},[179,2322,315],{"class":185},[179,2324,2325],{"class":559}," createGetValidationErrorsFn",[179,2327,562],{"class":185},[179,2329,565],{"class":549},[179,2331,568],{"class":185},[179,2333,571],{"class":247},[179,2335,574],{"class":185},[179,2337,577],{"class":185},[179,2339,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358],{"class":181,"line":189},[179,2341,550],{"class":549},[179,2343,553],{"class":549},[179,2345,556],{"class":185},[179,2347,588],{"class":559},[179,2349,562],{"class":185},[179,2351,565],{"class":549},[179,2353,568],{"class":185},[179,2355,597],{"class":247},[179,2357,574],{"class":185},[179,2359,577],{"class":185},[179,2361,2362,2364,2366,2369,2371,2373,2375,2378,2380],{"class":181,"line":207},[179,2363,550],{"class":549},[179,2365,556],{"class":185},[179,2367,2368],{"class":559},"friendlyUser",[179,2370,562],{"class":185},[179,2372,565],{"class":549},[179,2374,568],{"class":185},[179,2376,2377],{"class":247},".\u002Ffriendly-user",[179,2379,574],{"class":185},[179,2381,577],{"class":185},[179,2383,2384,2386,2388,2391,2393,2395,2397,2400,2402],{"class":181,"line":224},[179,2385,550],{"class":549},[179,2387,556],{"class":185},[179,2389,2390],{"class":559},"es_friendlyUser",[179,2392,562],{"class":185},[179,2394,565],{"class":549},[179,2396,568],{"class":185},[179,2398,2399],{"class":247},".\u002Fi18n-es",[179,2401,574],{"class":185},[179,2403,577],{"class":185},[179,2405,2406,2408,2410,2413,2415,2417,2419,2422,2424],{"class":181,"line":230},[179,2407,550],{"class":549},[179,2409,556],{"class":185},[179,2411,2412],{"class":559},"pl_friendlyUser",[179,2414,562],{"class":185},[179,2416,565],{"class":549},[179,2418,568],{"class":185},[179,2420,2421],{"class":247},".\u002Fi18n-pl",[179,2423,574],{"class":185},[179,2425,577],{"class":185},[179,2427,2428],{"class":181,"line":256},[179,2429,403],{"emptyLinePlaceholder":402},[179,2431,2432,2435,2438,2441,2444,2446,2448,2450,2453],{"class":181,"line":270},[179,2433,2434],{"class":195},"const",[179,2436,2437],{"class":559}," getUserErrors ",[179,2439,2440],{"class":185},"=",[179,2442,2325],{"class":2443},"s2Zo4",[179,2445,634],{"class":185},[179,2447,588],{"class":213},[179,2449,639],{"class":185},[179,2451,2452],{"class":559},"()",[179,2454,577],{"class":185},[179,2456,2457],{"class":181,"line":293},[179,2458,403],{"emptyLinePlaceholder":402},[179,2460,2461,2463,2466,2468,2471,2473,2475,2477,2480,2482],{"class":181,"line":337},[179,2462,2434],{"class":195},[179,2464,2465],{"class":559}," friendly ",[179,2467,2440],{"class":185},[179,2469,2470],{"class":2443}," createFriendlyTextI18n",[179,2472,634],{"class":185},[179,2474,588],{"class":213},[179,2476,639],{"class":185},[179,2478,2479],{"class":559},"(friendlyUser",[179,2481,315],{"class":185},[179,2483,204],{"class":185},[179,2485,2486,2489,2491,2493,2495,2497],{"class":181,"line":343},[179,2487,2488],{"class":276},"  locale",[179,2490,168],{"class":185},[179,2492,568],{"class":185},[179,2494,320],{"class":247},[179,2496,574],{"class":185},[179,2498,253],{"class":185},[179,2500,2501,2504,2506,2508,2510,2512,2515,2517,2519,2521,2523],{"class":181,"line":349},[179,2502,2503],{"class":276},"  translations",[179,2505,168],{"class":185},[179,2507,556],{"class":185},[179,2509,310],{"class":276},[179,2511,168],{"class":185},[179,2513,2514],{"class":559}," es_friendlyUser",[179,2516,315],{"class":185},[179,2518,419],{"class":276},[179,2520,168],{"class":185},[179,2522,626],{"class":559},[179,2524,1181],{"class":185},[179,2526,2527,2529,2532],{"class":181,"line":355},[179,2528,562],{"class":185},[179,2530,2531],{"class":559},")",[179,2533,577],{"class":185},[179,2535,2536],{"class":181,"line":361},[179,2537,403],{"emptyLinePlaceholder":402},[179,2539,2540,2542,2545,2547,2550,2552,2554,2556,2558,2560,2563,2565,2567,2570,2572,2575],{"class":181,"line":478},[179,2541,2434],{"class":195},[179,2543,2544],{"class":559}," badInput",[179,2546,168],{"class":185},[179,2548,2549],{"class":213}," unknown",[179,2551,642],{"class":185},[179,2553,556],{"class":185},[179,2555,237],{"class":276},[179,2557,168],{"class":185},[179,2559,568],{"class":185},[179,2561,2562],{"class":247},"A",[179,2564,574],{"class":185},[179,2566,315],{"class":185},[179,2568,2569],{"class":276}," age",[179,2571,168],{"class":185},[179,2573,2574],{"class":236}," 200",[179,2576,1382],{"class":185},[179,2578,2579,2582,2585,2587,2590,2593,2596],{"class":181,"line":817},[179,2580,2581],{"class":559},"friendly",[179,2583,2584],{"class":185},".",[179,2586,2306],{"class":2443},[179,2588,2589],{"class":559},"(",[179,2591,2592],{"class":2443},"getUserErrors",[179,2594,2595],{"class":559},"(badInput))",[179,2597,577],{"class":185},[179,2599,2600],{"class":181,"line":823},[179,2601,2602],{"class":383},"\u002F\u002F → Polish messages, falling back to your source text wherever a blank was left\n",[138,2604,2605],{},"Translations are plain imports, so only the locales you import end up in your bundle. Two details worth knowing:",[138,2607,2608,2611,2612,2615,2616,2619,2620,2623],{},[150,2609,2610],{},"Live locale switching."," ",[145,2613,2614],{},"locale"," also accepts any object with a string ",[145,2617,2618],{},"value"," property, such as a Vue ref. It is read again on every render, so flipping it changes the language of the next ",[145,2621,2622],{},"errors()"," call with nothing to rebuild:",[170,2625,2627],{"className":540,"code":2626,"language":542,"meta":175,"style":175},"import {createFriendlyTextI18n} from '@ts-runtypes\u002Fcore';\nimport type {User} from '.\u002Fuser';\nimport {friendlyUser} from '.\u002Ffriendly-user';\nimport {pl_friendlyUser} from '.\u002Fi18n-pl';\n\n\u002F\u002F any {value} ref works — a plain object here, a Vue ref in a Vue app\nconst locale = {value: 'en'};\n\nexport const friendly = createFriendlyTextI18n\u003CUser>(friendlyUser, {\n  locale, \u002F\u002F read again on every render\n  translations: {pl: pl_friendlyUser},\n});\n\nlocale.value = 'pl'; \u002F\u002F the next errors() call renders in Polish\n",[145,2628,2629,2649,2671,2691,2711,2715,2720,2743,2747,2771,2780,2796,2804,2808],{"__ignoreMap":175},[179,2630,2631,2633,2635,2637,2639,2641,2643,2645,2647],{"class":181,"line":182},[179,2632,550],{"class":549},[179,2634,556],{"class":185},[179,2636,2293],{"class":559},[179,2638,562],{"class":185},[179,2640,565],{"class":549},[179,2642,568],{"class":185},[179,2644,571],{"class":247},[179,2646,574],{"class":185},[179,2648,577],{"class":185},[179,2650,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669],{"class":181,"line":189},[179,2652,550],{"class":549},[179,2654,553],{"class":549},[179,2656,556],{"class":185},[179,2658,588],{"class":559},[179,2660,562],{"class":185},[179,2662,565],{"class":549},[179,2664,568],{"class":185},[179,2666,597],{"class":247},[179,2668,574],{"class":185},[179,2670,577],{"class":185},[179,2672,2673,2675,2677,2679,2681,2683,2685,2687,2689],{"class":181,"line":207},[179,2674,550],{"class":549},[179,2676,556],{"class":185},[179,2678,2368],{"class":559},[179,2680,562],{"class":185},[179,2682,565],{"class":549},[179,2684,568],{"class":185},[179,2686,2377],{"class":247},[179,2688,574],{"class":185},[179,2690,577],{"class":185},[179,2692,2693,2695,2697,2699,2701,2703,2705,2707,2709],{"class":181,"line":224},[179,2694,550],{"class":549},[179,2696,556],{"class":185},[179,2698,2412],{"class":559},[179,2700,562],{"class":185},[179,2702,565],{"class":549},[179,2704,568],{"class":185},[179,2706,2421],{"class":247},[179,2708,574],{"class":185},[179,2710,577],{"class":185},[179,2712,2713],{"class":181,"line":230},[179,2714,403],{"emptyLinePlaceholder":402},[179,2716,2717],{"class":181,"line":256},[179,2718,2719],{"class":383},"\u002F\u002F any {value} ref works — a plain object here, a Vue ref in a Vue app\n",[179,2721,2722,2724,2727,2729,2731,2733,2735,2737,2739,2741],{"class":181,"line":270},[179,2723,2434],{"class":195},[179,2725,2726],{"class":559}," locale ",[179,2728,2440],{"class":185},[179,2730,556],{"class":185},[179,2732,2618],{"class":276},[179,2734,168],{"class":185},[179,2736,568],{"class":185},[179,2738,286],{"class":247},[179,2740,574],{"class":185},[179,2742,1382],{"class":185},[179,2744,2745],{"class":181,"line":293},[179,2746,403],{"emptyLinePlaceholder":402},[179,2748,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769],{"class":181,"line":337},[179,2750,620],{"class":549},[179,2752,623],{"class":195},[179,2754,2465],{"class":559},[179,2756,2440],{"class":185},[179,2758,2470],{"class":2443},[179,2760,634],{"class":185},[179,2762,588],{"class":213},[179,2764,639],{"class":185},[179,2766,2479],{"class":559},[179,2768,315],{"class":185},[179,2770,204],{"class":185},[179,2772,2773,2775,2777],{"class":181,"line":343},[179,2774,2488],{"class":559},[179,2776,315],{"class":185},[179,2778,2779],{"class":383}," \u002F\u002F read again on every render\n",[179,2781,2782,2784,2786,2788,2790,2792,2794],{"class":181,"line":349},[179,2783,2503],{"class":276},[179,2785,168],{"class":185},[179,2787,556],{"class":185},[179,2789,320],{"class":276},[179,2791,168],{"class":185},[179,2793,626],{"class":559},[179,2795,1181],{"class":185},[179,2797,2798,2800,2802],{"class":181,"line":355},[179,2799,562],{"class":185},[179,2801,2531],{"class":559},[179,2803,577],{"class":185},[179,2805,2806],{"class":181,"line":361},[179,2807,403],{"emptyLinePlaceholder":402},[179,2809,2810,2812,2814,2817,2819,2821,2823,2825,2828],{"class":181,"line":478},[179,2811,2614],{"class":559},[179,2813,2584],{"class":185},[179,2815,2816],{"class":559},"value ",[179,2818,2440],{"class":185},[179,2820,568],{"class":185},[179,2822,320],{"class":247},[179,2824,574],{"class":185},[179,2826,2827],{"class":185},";",[179,2829,2830],{"class":383}," \u002F\u002F the next errors() call renders in Polish\n",[138,2832,2833,2834,2836,2837,2584],{},"The renderer itself is not reactive: call ",[145,2835,2622],{}," per render, or wrap the call in a ",[145,2838,2839],{},"computed()",[138,2841,2842,2845,2846,2849],{},[150,2843,2844],{},"Locale matching."," The active locale does not need an exact match. Ask for pt-BR with only a pt translation on hand and the pt file is used; the renderer tries the exact tag first, then trims it toward the base language, and falls back to the source map when nothing matches. The same logic is exported as ",[145,2847,2848],{},"resolveLocale(locale, translations)"," if you want to reuse it. A missing translation never throws.",[138,2851,2852,2853,2855,2856,2858],{},"If your source maps are not written in English, pass ",[145,2854,277],{}," (default ",[145,2857,286],{},", matching the tsconfig default) so plurals rendered from the source map use the right rules.",[158,2860,2862],{"id":2861},"money-and-dates-in-messages","Money and dates in messages",[138,2864,2865,2866,2868],{},"A limit shown in a message is sometimes money or a date. You never mark that in the template: the type already says what the value is, and ",[145,2867,2273],{}," renders it correctly for the active locale.",[138,2870,2871],{},"For monetary amounts, declare the field with the Currency format instead of a plain number:",[170,2873,2875],{"className":540,"code":2874,"language":542,"meta":175,"style":175},"import type * as TF from '@ts-runtypes\u002Fcore\u002Fformats';\n\nexport interface Order {\n  total: TF.Currency\u003C{max: 10000}>;\n}\n",[145,2876,2877,2904,2908,2920,2948],{"__ignoreMap":175},[179,2878,2879,2881,2883,2886,2889,2892,2895,2897,2900,2902],{"class":181,"line":182},[179,2880,550],{"class":549},[179,2882,553],{"class":549},[179,2884,2885],{"class":185}," *",[179,2887,2888],{"class":549}," as",[179,2890,2891],{"class":559}," TF ",[179,2893,2894],{"class":549},"from",[179,2896,568],{"class":185},[179,2898,2899],{"class":247},"@ts-runtypes\u002Fcore\u002Fformats",[179,2901,574],{"class":185},[179,2903,577],{"class":185},[179,2905,2906],{"class":181,"line":189},[179,2907,403],{"emptyLinePlaceholder":402},[179,2909,2910,2912,2915,2918],{"class":181,"line":207},[179,2911,620],{"class":549},[179,2913,2914],{"class":195}," interface",[179,2916,2917],{"class":213}," Order",[179,2919,204],{"class":185},[179,2921,2922,2925,2927,2930,2932,2935,2938,2940,2942,2945],{"class":181,"line":224},[179,2923,2924],{"class":276},"  total",[179,2926,168],{"class":185},[179,2928,2929],{"class":213}," TF",[179,2931,2584],{"class":185},[179,2933,2934],{"class":213},"Currency",[179,2936,2937],{"class":185},"\u003C{",[179,2939,2168],{"class":276},[179,2941,168],{"class":185},[179,2943,2944],{"class":236}," 10000",[179,2946,2947],{"class":185},"}>;\n",[179,2949,2950],{"class":181,"line":230},[179,2951,364],{"class":185},[138,2953,2954,2955,2958],{},"Then tell the renderer which currency your app uses. Any ISO code works (EUR, USD, PLN), and like the locale it can be a ",[145,2956,2957],{},"{value}"," ref you switch at runtime:",[170,2960,2962],{"className":540,"code":2961,"language":542,"meta":175,"style":175},"import type {FriendlyText} from '@ts-runtypes\u002Fcore';\nimport {createFriendlyTextI18n} from '@ts-runtypes\u002Fcore';\nimport type {Order} from '.\u002Fi18n-currency-type';\n\nconst friendlyOrder: FriendlyText\u003COrder> = {\n  rt$label: 'Order',\n  rt$errors: {type: ''},\n  total: {rt$label: 'Total', rt$errors: {type: '', max: 'at most $[val]'}},\n};\nconst de_friendlyOrder: FriendlyText\u003COrder> = {\n  rt$label: 'Bestellung',\n  rt$errors: {type: ''},\n  total: {rt$label: 'Summe', rt$errors: {type: '', max: 'höchstens $[val]'}},\n};\n\nexport const friendly = createFriendlyTextI18n\u003COrder>(friendlyOrder, {\n  locale: 'de',\n  translations: {de: de_friendlyOrder},\n  currency: 'EUR',\n});\n\n\u002F\u002F a violated max renders as \"10.000,00 €\" in German and \"$10,000.00\" in English:\n\u002F\u002F symbol, separators and decimals all follow the locale and the currency\n",[145,2963,2964,2986,3006,3030,3034,3055,3069,3085,3133,3137,3158,3173,3189,3237,3241,3245,3270,3285,3301,3317,3325,3329,3334],{"__ignoreMap":175},[179,2965,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984],{"class":181,"line":182},[179,2967,550],{"class":549},[179,2969,553],{"class":549},[179,2971,556],{"class":185},[179,2973,80],{"class":559},[179,2975,562],{"class":185},[179,2977,565],{"class":549},[179,2979,568],{"class":185},[179,2981,571],{"class":247},[179,2983,574],{"class":185},[179,2985,577],{"class":185},[179,2987,2988,2990,2992,2994,2996,2998,3000,3002,3004],{"class":181,"line":189},[179,2989,550],{"class":549},[179,2991,556],{"class":185},[179,2993,2293],{"class":559},[179,2995,562],{"class":185},[179,2997,565],{"class":549},[179,2999,568],{"class":185},[179,3001,571],{"class":247},[179,3003,574],{"class":185},[179,3005,577],{"class":185},[179,3007,3008,3010,3012,3014,3017,3019,3021,3023,3026,3028],{"class":181,"line":207},[179,3009,550],{"class":549},[179,3011,553],{"class":549},[179,3013,556],{"class":185},[179,3015,3016],{"class":559},"Order",[179,3018,562],{"class":185},[179,3020,565],{"class":549},[179,3022,568],{"class":185},[179,3024,3025],{"class":247},".\u002Fi18n-currency-type",[179,3027,574],{"class":185},[179,3029,577],{"class":185},[179,3031,3032],{"class":181,"line":224},[179,3033,403],{"emptyLinePlaceholder":402},[179,3035,3036,3038,3041,3043,3045,3047,3049,3051,3053],{"class":181,"line":230},[179,3037,2434],{"class":195},[179,3039,3040],{"class":559}," friendlyOrder",[179,3042,168],{"class":185},[179,3044,631],{"class":213},[179,3046,634],{"class":185},[179,3048,3016],{"class":213},[179,3050,639],{"class":185},[179,3052,642],{"class":185},[179,3054,204],{"class":185},[179,3056,3057,3059,3061,3063,3065,3067],{"class":181,"line":256},[179,3058,649],{"class":276},[179,3060,168],{"class":185},[179,3062,568],{"class":185},[179,3064,3016],{"class":247},[179,3066,574],{"class":185},[179,3068,253],{"class":185},[179,3070,3071,3073,3075,3077,3079,3081,3083],{"class":181,"line":270},[179,3072,664],{"class":276},[179,3074,168],{"class":185},[179,3076,556],{"class":185},[179,3078,671],{"class":276},[179,3080,168],{"class":185},[179,3082,654],{"class":185},[179,3084,1181],{"class":185},[179,3086,3087,3089,3091,3093,3095,3097,3099,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3129,3131],{"class":181,"line":293},[179,3088,2924],{"class":276},[179,3090,168],{"class":185},[179,3092,556],{"class":185},[179,3094,965],{"class":276},[179,3096,168],{"class":185},[179,3098,568],{"class":185},[179,3100,3101],{"class":247},"Total",[179,3103,574],{"class":185},[179,3105,315],{"class":185},[179,3107,974],{"class":276},[179,3109,168],{"class":185},[179,3111,556],{"class":185},[179,3113,671],{"class":276},[179,3115,168],{"class":185},[179,3117,654],{"class":185},[179,3119,315],{"class":185},[179,3121,908],{"class":276},[179,3123,168],{"class":185},[179,3125,568],{"class":185},[179,3127,3128],{"class":247},"at most $[val]",[179,3130,574],{"class":185},[179,3132,1364],{"class":185},[179,3134,3135],{"class":181,"line":337},[179,3136,1382],{"class":185},[179,3138,3139,3141,3144,3146,3148,3150,3152,3154,3156],{"class":181,"line":343},[179,3140,2434],{"class":195},[179,3142,3143],{"class":559}," de_friendlyOrder",[179,3145,168],{"class":185},[179,3147,631],{"class":213},[179,3149,634],{"class":185},[179,3151,3016],{"class":213},[179,3153,639],{"class":185},[179,3155,642],{"class":185},[179,3157,204],{"class":185},[179,3159,3160,3162,3164,3166,3169,3171],{"class":181,"line":349},[179,3161,649],{"class":276},[179,3163,168],{"class":185},[179,3165,568],{"class":185},[179,3167,3168],{"class":247},"Bestellung",[179,3170,574],{"class":185},[179,3172,253],{"class":185},[179,3174,3175,3177,3179,3181,3183,3185,3187],{"class":181,"line":355},[179,3176,664],{"class":276},[179,3178,168],{"class":185},[179,3180,556],{"class":185},[179,3182,671],{"class":276},[179,3184,168],{"class":185},[179,3186,654],{"class":185},[179,3188,1181],{"class":185},[179,3190,3191,3193,3195,3197,3199,3201,3203,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230,3233,3235],{"class":181,"line":361},[179,3192,2924],{"class":276},[179,3194,168],{"class":185},[179,3196,556],{"class":185},[179,3198,965],{"class":276},[179,3200,168],{"class":185},[179,3202,568],{"class":185},[179,3204,3205],{"class":247},"Summe",[179,3207,574],{"class":185},[179,3209,315],{"class":185},[179,3211,974],{"class":276},[179,3213,168],{"class":185},[179,3215,556],{"class":185},[179,3217,671],{"class":276},[179,3219,168],{"class":185},[179,3221,654],{"class":185},[179,3223,315],{"class":185},[179,3225,908],{"class":276},[179,3227,168],{"class":185},[179,3229,568],{"class":185},[179,3231,3232],{"class":247},"höchstens $[val]",[179,3234,574],{"class":185},[179,3236,1364],{"class":185},[179,3238,3239],{"class":181,"line":478},[179,3240,1382],{"class":185},[179,3242,3243],{"class":181,"line":817},[179,3244,403],{"emptyLinePlaceholder":402},[179,3246,3247,3249,3251,3253,3255,3257,3259,3261,3263,3266,3268],{"class":181,"line":823},[179,3248,620],{"class":549},[179,3250,623],{"class":195},[179,3252,2465],{"class":559},[179,3254,2440],{"class":185},[179,3256,2470],{"class":2443},[179,3258,634],{"class":185},[179,3260,3016],{"class":213},[179,3262,639],{"class":185},[179,3264,3265],{"class":559},"(friendlyOrder",[179,3267,315],{"class":185},[179,3269,204],{"class":185},[179,3271,3272,3274,3276,3278,3281,3283],{"class":181,"line":829},[179,3273,2488],{"class":276},[179,3275,168],{"class":185},[179,3277,568],{"class":185},[179,3279,3280],{"class":247},"de",[179,3282,574],{"class":185},[179,3284,253],{"class":185},[179,3286,3287,3289,3291,3293,3295,3297,3299],{"class":181,"line":839},[179,3288,2503],{"class":276},[179,3290,168],{"class":185},[179,3292,556],{"class":185},[179,3294,3280],{"class":276},[179,3296,168],{"class":185},[179,3298,3143],{"class":559},[179,3300,1181],{"class":185},[179,3302,3303,3306,3308,3310,3313,3315],{"class":181,"line":852},[179,3304,3305],{"class":276},"  currency",[179,3307,168],{"class":185},[179,3309,568],{"class":185},[179,3311,3312],{"class":247},"EUR",[179,3314,574],{"class":185},[179,3316,253],{"class":185},[179,3318,3319,3321,3323],{"class":181,"line":950},[179,3320,562],{"class":185},[179,3322,2531],{"class":559},[179,3324,577],{"class":185},[179,3326,3327],{"class":181,"line":955},[179,3328,403],{"emptyLinePlaceholder":402},[179,3330,3331],{"class":181,"line":991},[179,3332,3333],{"class":383},"\u002F\u002F a violated max renders as \"10.000,00 €\" in German and \"$10,000.00\" in English:\n",[179,3335,3336],{"class":181,"line":1055},[179,3337,3338],{"class":383},"\u002F\u002F symbol, separators and decimals all follow the locale and the currency\n",[138,3340,3341],{},"Which currency a value is in is data your app owns, so it lives in this one renderer option, never in the type and never in the template. If you do not pass one, the limit renders as a plain localized number and a symbol is never guessed. An app with a single fixed currency can also simply write the symbol into its templates and keep a plain number type; the Currency format is for when you want the browser to place symbols and decimals correctly per language.",[138,3343,3344,3345,3347],{},"Date limits need no setup at all. A field typed with any of the date formats (a date string, a native Date bound, a Temporal type) renders its ",[145,3346,2273],{}," as a real date in the active locale. A relative limit like now-P1D stays as written, since it is not a fixed point in time.",[138,3349,3350],{},"There is nothing else to configure: no format tables and no extra template syntax. The type says what the value is; the reader's locale says how to write it.",[3352,3353,3354],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}","Translate friendly labels and messages per locale, with the source text as fallback.","md",null,{"toc":26},{"title":88,"description":3355},"Zn0CLTcv0AbSaIMrt2XrnuGNX5QOhH6b9L2T0jrStEM",[3362,3364],{"title":84,"path":85,"stem":86,"description":3363,"children":-1},"Realistic sample data for a type, checked against its fields at build time.",{"title":50,"path":94,"stem":99,"description":3365,"children":-1},"How fast each library runs validate, the fast boolean check that a value matches its type.",1785369664460]