[{"data":1,"prerenderedAt":709},["ShallowReactive",2],{"content-\u002Fcomponents\u002Fconfig-provider":3,"content-en-fallback-\u002Fcomponents\u002Fconfig-provider":708},{"id":4,"title":5,"body":6,"description":700,"extension":701,"meta":702,"nav":703,"navigation":146,"path":704,"seo":705,"stem":706,"__hash__":707},"content\u002Fcomponents\u002Fconfig-provider.md","Config Provider 本地化",{"type":7,"value":8,"toc":692},"minimark",[9,14,44,69,73,290,293,296,374,378,388,481,495,498,561,589,593,659,662,688],[10,11,13],"h1",{"id":12},"config-provider-本地化i18n","Config Provider 本地化（i18n）",[15,16,17,18,22,23,27,28,31,32,35,36,39,40,43],"p",{},"组件库把",[19,20,21],"strong",{},"内建的可访问名 \u002F 缺省文案","集中到每个组件目录下的 ",[24,25,26],"code",{},"locale.ts"," 切片（如\n",[24,29,30],{},"input\u002Flocale.ts","、",[24,33,34],{},"infobar\u002Flocale.ts","）。这些文案默认跟随内置缺省语种 ",[19,37,38],{},"zh-Hans","。\n",[24,41,42],{},"FluereConfigProvider"," 是它们的 locale 注入点：把它包在任何组件之上，即可切换整棵\n子树的内建文案，或按 locale × scope 覆盖个别措辞。",[45,46,47],"blockquote",{},[15,48,49,50,52,53,56,57,60,61,64,65,68],{},"一期语言：",[24,51,38],{},"（默认，兼容 ",[24,54,55],{},"zh-CN"," \u002F ",[24,58,59],{},"zh","）与 ",[24,62,63],{},"en","；日期 \u002F 数字格式化走\n",[24,66,67],{},"Intl","，不受本 Provider 影响（数字框的 locale prop 见 NumberBox）。",[70,71,72],"h2",{"id":72},"基础用法",[74,75,80],"pre",{"className":76,"code":77,"language":78,"meta":79,"style":79},"language-vue shiki shiki-themes github-light github-dark","\u003Cscript setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { FluereConfigProvider } from '@fluere-vue\u002Fui'\n\n\u002F\u002F 随应用当前语言切换即可；缺省 zh-Hans，切 'en' 整体转英文内建文案\nconst locale = ref\u003C'zh-Hans' | 'en'>('en')\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CFluereConfigProvider :locale=\"locale\">\n    \u003CFluereNumberBox spin-button-placement-mode=\"inline\" \u002F>\n    \u003CFluereProgressRing \u002F>\n  \u003C\u002FFluereConfigProvider>\n\u003C\u002Ftemplate>\n","vue","",[24,81,82,112,128,141,148,155,191,201,206,216,241,261,271,281],{"__ignoreMap":79},[83,84,87,91,95,99,102,105,109],"span",{"class":85,"line":86},"line",1,[83,88,90],{"class":89},"sVt8B","\u003C",[83,92,94],{"class":93},"s9eBZ","script",[83,96,98],{"class":97},"sScJk"," setup",[83,100,101],{"class":97}," lang",[83,103,104],{"class":89},"=",[83,106,108],{"class":107},"sZZnC","\"ts\"",[83,110,111],{"class":89},">\n",[83,113,115,119,122,125],{"class":85,"line":114},2,[83,116,118],{"class":117},"szBVR","import",[83,120,121],{"class":89}," { ref } ",[83,123,124],{"class":117},"from",[83,126,127],{"class":107}," 'vue'\n",[83,129,131,133,136,138],{"class":85,"line":130},3,[83,132,118],{"class":117},[83,134,135],{"class":89}," { FluereConfigProvider } ",[83,137,124],{"class":117},[83,139,140],{"class":107}," '@fluere-vue\u002Fui'\n",[83,142,144],{"class":85,"line":143},4,[83,145,147],{"emptyLinePlaceholder":146},true,"\n",[83,149,151],{"class":85,"line":150},5,[83,152,154],{"class":153},"sJ8bj","\u002F\u002F 随应用当前语言切换即可；缺省 zh-Hans，切 'en' 整体转英文内建文案\n",[83,156,158,161,165,168,171,173,176,179,182,185,188],{"class":85,"line":157},6,[83,159,160],{"class":117},"const",[83,162,164],{"class":163},"sj4cs"," locale",[83,166,167],{"class":117}," =",[83,169,170],{"class":97}," ref",[83,172,90],{"class":89},[83,174,175],{"class":107},"'zh-Hans'",[83,177,178],{"class":117}," |",[83,180,181],{"class":107}," 'en'",[83,183,184],{"class":89},">(",[83,186,187],{"class":107},"'en'",[83,189,190],{"class":89},")\n",[83,192,194,197,199],{"class":85,"line":193},7,[83,195,196],{"class":89},"\u003C\u002F",[83,198,94],{"class":93},[83,200,111],{"class":89},[83,202,204],{"class":85,"line":203},8,[83,205,147],{"emptyLinePlaceholder":146},[83,207,209,211,214],{"class":85,"line":208},9,[83,210,90],{"class":89},[83,212,213],{"class":93},"template",[83,215,111],{"class":89},[83,217,219,222,224,227,230,232,235,237,239],{"class":85,"line":218},10,[83,220,221],{"class":89},"  \u003C",[83,223,42],{"class":93},[83,225,226],{"class":89}," :",[83,228,229],{"class":97},"locale",[83,231,104],{"class":89},[83,233,234],{"class":107},"\"",[83,236,229],{"class":89},[83,238,234],{"class":107},[83,240,111],{"class":89},[83,242,244,247,250,253,255,258],{"class":85,"line":243},11,[83,245,246],{"class":89},"    \u003C",[83,248,249],{"class":93},"FluereNumberBox",[83,251,252],{"class":97}," spin-button-placement-mode",[83,254,104],{"class":89},[83,256,257],{"class":107},"\"inline\"",[83,259,260],{"class":89}," \u002F>\n",[83,262,264,266,269],{"class":85,"line":263},12,[83,265,246],{"class":89},[83,267,268],{"class":93},"FluereProgressRing",[83,270,260],{"class":89},[83,272,274,277,279],{"class":85,"line":273},13,[83,275,276],{"class":89},"  \u003C\u002F",[83,278,42],{"class":93},[83,280,111],{"class":89},[83,282,284,286,288],{"class":85,"line":283},14,[83,285,196],{"class":89},[83,287,213],{"class":93},[83,289,111],{"class":89},[15,291,292],{},"无需 Provider 时组件仍可用：自动回落内置缺省 zh-Hans，不会抛错。",[70,294,295],{"id":295},"解析优先级",[297,298,299,312],"table",{},[300,301,302],"thead",{},[303,304,305,309],"tr",{},[306,307,308],"th",{},"层级",[306,310,311],{},"说明",[313,314,315,340,351,363],"tbody",{},[303,316,317,321],{},[318,319,320],"td",{},"显式文案 prop",[318,322,323,324,31,327,56,330,31,333,31,336,339],{},"如 ",[24,325,326],{},"revealButtonLabel",[24,328,329],{},"increaseLabel",[24,331,332],{},"decreaseLabel",[24,334,335],{},"closeButtonLabel",[24,337,338],{},"label","，最高优先",[303,341,342,348],{},[318,343,344,345,347],{},"组件 ",[24,346,229],{}," prop",[318,349,350],{},"只改单个组件的内建文案，压过 Provider",[303,352,353,360],{},[318,354,355,357,358],{},[24,356,42],{}," ",[24,359,229],{},[318,361,362],{},"子树级切换",[303,364,365,368],{},[318,366,367],{},"内置缺省",[318,369,370,371],{},"zh-Hans；缺 key 回退链 ",[24,372,373],{},"zh-Hans → zh → en",[70,375,377],{"id":376},"覆盖个别措辞无需改源码","覆盖个别措辞（无需改源码）",[15,379,380,383,384,387],{},[24,381,382],{},"messages"," 按 ",[24,385,386],{},"locale → scope → key"," 深合并进各组件内置切片，只覆盖列出的项：",[74,389,391],{"className":76,"code":390,"language":78,"meta":79,"style":79},"\u003Ctemplate>\n  \u003CFluereConfigProvider :messages=\"{ 'zh-Hans': { input: { showPassword: '显示明文' } } }\">\n    \u003CFluereInput\n      type=\"password\"\n      placeholder=\"密码\"\n    \u002F>\n  \u003C\u002FFluereConfigProvider>\n\u003C\u002Ftemplate>\n",[24,392,393,401,433,440,450,460,465,473],{"__ignoreMap":79},[83,394,395,397,399],{"class":85,"line":86},[83,396,90],{"class":89},[83,398,213],{"class":93},[83,400,111],{"class":89},[83,402,403,405,407,409,411,413,415,418,420,423,426,429,431],{"class":85,"line":114},[83,404,221],{"class":89},[83,406,42],{"class":93},[83,408,226],{"class":89},[83,410,382],{"class":97},[83,412,104],{"class":89},[83,414,234],{"class":107},[83,416,417],{"class":89},"{ ",[83,419,175],{"class":107},[83,421,422],{"class":89},": { input: { showPassword: ",[83,424,425],{"class":107},"'显示明文'",[83,427,428],{"class":89}," } } }",[83,430,234],{"class":107},[83,432,111],{"class":89},[83,434,435,437],{"class":85,"line":130},[83,436,246],{"class":89},[83,438,439],{"class":93},"FluereInput\n",[83,441,442,445,447],{"class":85,"line":143},[83,443,444],{"class":97},"      type",[83,446,104],{"class":89},[83,448,449],{"class":107},"\"password\"\n",[83,451,452,455,457],{"class":85,"line":150},[83,453,454],{"class":97},"      placeholder",[83,456,104],{"class":89},[83,458,459],{"class":107},"\"密码\"\n",[83,461,462],{"class":85,"line":157},[83,463,464],{"class":89},"    \u002F>\n",[83,466,467,469,471],{"class":85,"line":193},[83,468,276],{"class":89},[83,470,42],{"class":93},[83,472,111],{"class":89},[83,474,475,477,479],{"class":85,"line":203},[83,476,196],{"class":89},[83,478,213],{"class":93},[83,480,111],{"class":89},[15,482,483,486,487,490,491,494],{},[24,484,485],{},"scope"," 与各切片里的 ",[24,488,489],{},"key"," 见各组件文档或 ",[24,492,493],{},"packages\u002Fui\u002Fsrc\u002F\u003Ccomponent>\u002Flocale.ts","。",[70,496,497],{"id":497},"首批覆盖的内建文案",[499,500,501,512,524,540,549],"ul",{},[502,503,504,507,508,511],"li",{},[24,505,506],{},"input","：显示按钮可访问名（",[24,509,510],{},"showPassword","）",[502,513,514,517,518,56,521,511],{},[24,515,516],{},"number-box","：增减按钮可访问名（",[24,519,520],{},"increase",[24,522,523],{},"decrease",[502,525,526,529,530,533,534,56,537,511],{},[24,527,528],{},"scroll-view","：辐射两端步进与滚动条拇指可访问名（",[24,531,532],{},"scrollUp"," … \u002F ",[24,535,536],{},"horizontalScrollBar",[24,538,539],{},"verticalScrollBar",[502,541,542,545,546,511],{},[24,543,544],{},"infobar","：关闭按钮可访问名（",[24,547,548],{},"close",[502,550,551,56,554,557,558,511],{},[24,552,553],{},"progress-ring",[24,555,556],{},"progress-bar","：不确定态「加载中」（",[24,559,560],{},"loading",[45,562,563],{},[15,564,565,566,569,570,573,574,577,578,581,582,56,585,588],{},"组件库不引入 ",[24,567,568],{},"vue-i18n"," 运行时；消息编译 \u002F 解析 \u002F 回退复用 ",[24,571,572],{},"@intlify\u002Fcore-base","\n（见 ",[24,575,576],{},"packages\u002Fhooks"," 的 ",[24,579,580],{},"use-locale","）。语言包子路径导出\n",[24,583,584],{},"@fluere-vue\u002Fui\u002Flocales\u002Fzh-Hans",[24,586,587],{},"\u002Fen"," 随 0.3 目标 3 构建落地。",[70,590,592],{"id":591},"api","API",[297,594,595,610],{},[300,596,597],{},[303,598,599,602,605,608],{},[306,600,601],{},"属性（Props）",[306,603,604],{},"类型",[306,606,607],{},"默认",[306,609,311],{},[313,611,612,637],{},[303,613,614,618,623,627],{},[318,615,616],{},[24,617,229],{},[318,619,620],{},[24,621,622],{},"FluereLocale | string",[318,624,625],{},[24,626,175],{},[318,628,629,630,56,632,634,635],{},"子树内建文案的 locale；",[24,631,55],{},[24,633,59],{}," 归一为 ",[24,636,38],{},[303,638,639,643,648,653],{},[318,640,641],{},[24,642,382],{},[318,644,645],{},[24,646,647],{},"ProviderMessages",[318,649,650],{},[24,651,652],{},"—",[318,654,655,656,658],{},"按 ",[24,657,386],{}," 覆盖个别文案",[70,660,661],{"id":661},"无障碍与回退",[499,663,664,670,676],{},[502,665,666,667,669],{},"内建文案主要为 AT 用的可访问名（loading \u002F close \u002F scroll 等），不是可见文本；\n可见文案依旧由消费方（常经 ",[24,668,338],{}," \u002F header \u002F 插槽）提供。",[502,671,672,673,675],{},"开发环境缺 key 会告警并回退到 ",[24,674,63],{},"；生产静默回退，不刷屏。",[502,677,678,679,682,683,56,685,687],{},"SSR 安全：Provider 的 locale \u002F messages 均为实例级（provide\u002Finject），\n并发渲染互不串语言；",[24,680,681],{},"packages\u002Fui\u002Fsrc\u002F__tests__\u002Fssr-smoke.test.ts"," 覆盖了\n",[24,684,38],{},[24,686,63],{}," 两种 locale 下各组件与并发隔离。",[689,690,691],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}",{"title":79,"searchDepth":114,"depth":114,"links":693},[694,695,696,697,698,699],{"id":72,"depth":114,"text":72},{"id":295,"depth":114,"text":295},{"id":376,"depth":114,"text":377},{"id":497,"depth":114,"text":497},{"id":591,"depth":114,"text":592},{"id":661,"depth":114,"text":661},"组件库内建文案的 locale 注入点（i18n），用于切换语言与覆盖个别措辞。","md",{},{"title":5},"\u002Fcomponents\u002Fconfig-provider",{"title":5,"description":700},"components\u002Fconfig-provider","fYylmjgQEIFiqI8boN6VJIftTzYgl1vmkqSYisGLsgI",null,1791802960541]