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