(()=>{var e,t,n,a,i,o,s,r,l={96254(e,t,n){var a={"./Ai2/components/Color.js":["14920",[72561]],"./AdobeFirefly/components/Mono.js":["47924",[39893]],"./Tencent/components/Color.js":["89203",[25808]],"./Glama/components/Avatar.js":["6106",[66567]],"./OpenChat/components/Avatar.js":["48040",[21041]],"./IBM/components/Text.js":["40210",[90415]],"./Obsidian/components/Combine.js":["79061",[71574]],"./Phind/components/Text.js":["9557",[40406]],"./LiveKit/components/Text.js":["28434",[19983]],"./AzureAI/components/Avatar.js":["81139",[77424]],"./Coqui/components/Combine.js":["35595",[68152]],"./MyShell/components/Avatar.js":["38446",[92643]],"./Replicate/components/Mono.js":["4643",[60160]],"./DotsStudio/components/Combine.js":["51764",[84373]],"./SenseNova/components/Text.js":["28144",[26057]],"./Smithery/components/Combine.js":["58699",[63992]],"./CyberCut/components/Mono.js":["85183",[43508]],"./UnionAlpha/components/Combine.js":["62981",[9542]],"./Vidu/components/Combine.js":["56548",[14053]],"./XiaomiMiMo/components/Mono.js":["13403",[89e3]],"./MetaAI/components/Color.js":["65105",[72138]],"./Udio/components/Avatar.js":["63207",[65215]],"./Lovart/components/Mono.js":["32770",[17119]],"./DeepInfra/components/Color.js":["39520",[12825]],"./OpenWebUI/components/Text.js":["66600",[92977]],"./Unsloth/components/Avatar.js":["18299",[80008]],"./Xpay/components/Avatar.js":["44748",[90813]],"./Inflection/components/Mono.js":["70047",[90964]],"./Dify/components/Combine.js":["91644",[57901]],"./YouMind/components/Mono.js":["76975",[32740]],"./Zapier/components/Text.js":["68729",[41826]],"./LLaVA/components/Avatar.js":["46936",[67585]],"./Infinigence/components/Combine.js":["30647",[90524]],"./Search1API/components/Avatar.js":["71107",[57056]],"./Sync/components/Combine.js":["26119",[49004]],"./RooCode/components/Text.js":["79613",[54382]],"./Unsloth/components/Mono.js":["44141",[38846]],"./Copilot/components/Mono.js":["65380",[13573]],"./AiMass/components/Mono.js":["38930",[47151]],"./NovelAI/components/Mono.js":["17332",[20757]],"./Cursor/components/Combine.js":["13776",[22985]],"./Doubao/components/Avatar.js":["6652",[24557]],"./Notion/components/Mono.js":["87617",[58554]],"./Wandb/components/Text.js":["77568",[9529]],"./Rwkv/components/Avatar.js":["52648",[18801]],"./Moonshot/components/Text.js":["53849",[43010]],"./Minimax/components/Combine.js":["4943",[2404]],"./Unstructured/components/Avatar.js":["9196",[12061]],"./ByteDance/components/Text.js":["93977",[35810]],"./Meta/components/BrandColor.js":["93426",[60175]],"./InternLM/components/Text.js":["49435",[92200]],"./Pi/components/Text.js":["75651",[3392]],"./Kling/components/Combine.js":["7921",[43146]],"./CodeFlicker/components/Mono.js":["57323",[94840]],"./Infermatic/components/Color.js":["19346",[73903]],"./Baseten/components/Mono.js":["23752",[13137]],"./DeepSeek/components/Combine.js":["17080",[24001]],"./Coqui/components/Avatar.js":["9813",[35414]],"./Smithery/components/Mono.js":["95795",[60336]],"./Targon/components/Combine.js":["18369",[50618]],"./Udio/components/Color.js":["44585",[96]],"./KiloCode/components/Text.js":["57796",[76869]],"./CometAPI/components/Combine.js":["32078",[36067]],"./CometAPI/components/Mono.js":["15520",[94297]],"./Clipdrop/components/Mono.js":["82431",[92244]],"./Exa/components/Color.js":["40788",[77397]],"./AntGroup/components/Avatar.js":["81610",[90487]],"./Magic/components/Text.js":["41159",[23116]],"./Minimax/components/Mono.js":["75567",[41220]],"./Wenxin/components/Mono.js":["48861",[35566]],"./Cerebras/components/Color.js":["52891",[20808]],"./Flowith/components/Mono.js":["29695",[42996]],"./BilibiliIndex/components/Text.js":["22944",[90873]],"./Inference/components/Combine.js":["26095",[55492]],"./Pollinations/components/Mono.js":["92372",[85877]],"./RooCode/components/Combine.js":["70305",[86170]],"./Chutes/components/Mono.js":["87790",[45603]],"./Crusoe/components/Combine.js":["24057",[7394]],"./Coqui/components/Text.js":["47851",[97720]],"./AgnesAI/components/Text.js":["64952",[59937]],"./Skywork/components/Mono.js":["95136",[3929]],"./Mistral/components/Combine.js":["60406",[62459]],"./AgentVoice/components/Color.js":["79051",[86936]],"./Straico/components/Mono.js":["19263",[40436]],"./Inflection/components/Avatar.js":["27041",[81114]],"./Claude/components/Mono.js":["15522",[45599]],"./Bing/components/Combine.js":["9736",[75377]],"./Gemini/components/Avatar.js":["90089",[44786]],"./Player2/components/Text.js":["89789",[1198]],"./GithubCopilot/components/Avatar.js":["10547",[57264]],"./XAI/components/Avatar.js":["11008",[75193]],"./SubModel/components/Text.js":["42147",[73312]],"./LobeHub/components/Combine.js":["6243",[28934,88928]],"./Ai2/components/Combine.js":["93206",[17339]],"./ZeroOne/components/Text.js":["64346",[18567]],"./Alibaba/components/Mono.js":["85208",[4897]],"./Qwen/components/Avatar.js":["59945",[86226]],"./Kluster/components/Color.js":["63486",[21715]],"./Goose/components/Avatar.js":["73533",[93902]],"./Tiangong/components/Text.js":["53033",[44722]],"./Kling/components/Text.js":["35501",[47966]],"./Bilibili/components/Color.js":["972",[8381]],"./AiMass/components/Text.js":["35854",[73091]],"./Wenxin/components/Text.js":["60161",[67482]],"./ZenMux/components/Combine.js":["26229",[65238]],"./AionLabs/components/Text.js":["74095",[44580]],"./Fal/components/Text.js":["37631",[72436]],"./GeminiCLI/components/Color.js":["56613",[7974]],"./SubModel/components/Color.js":["94501",[45446]],"./Tencent/components/Avatar.js":["29079",[62524]],"./ChatGLM/components/Text.js":["12640",[74873]],"./GmiCloud/components/Text.js":["7624",[45521]],"./Together/components/Avatar.js":["65164",[92381]],"./Minimax/components/Avatar.js":["6705",[89866]],"./XAI/components/Text.js":["39426",[1215]],"./Sync/components/Avatar.js":["65721",[32130]],"./Poolside/components/Avatar.js":["43791",[452]],"./OpenClaw/components/Combine.js":["63327",[29524]],"./CogView/components/Text.js":["4474",[49159]],"./SearXNG/components/Mono.js":["70570",[29399]],"./Glif/components/Mono.js":["35956",[42261]],"./Hailuo/components/Mono.js":["36306",[51823]],"./Arcee/components/Text.js":["18666",[41975]],"./Kimi/components/Text.js":["13942",[16699]],"./Mistral/components/Text.js":["32728",[82497]],"./Dalle/components/Color.js":["73670",[95499]],"./Tavily/components/Mono.js":["74993",[70698]],"./Groq/components/Avatar.js":["96479",[20436]],"./LlmApi/components/Avatar.js":["59859",[44368]],"./Nextbit/components/Mono.js":["6348",[19229]],"./Poolside/components/Mono.js":["52753",[84330]],"./Ideogram/components/Text.js":["74730",[81207]],"./DeepAI/components/Combine.js":["45966",[35171]],"./CogView/components/Avatar.js":["97064",[91803,97553]],"./Ai2/components/Text.js":["39128",[82401]],"./HuggingFace/components/Color.js":["77090",[46143]],"./HuggingFace/components/Combine.js":["96096",[2617]],"./Langfuse/components/Avatar.js":["90575",[37732]],"./Novita/components/Text.js":["68405",[68886]],"./Morph/components/Combine.js":["75516",[7565]],"./N8n/components/Combine.js":["85950",[87347]],"./LLaVA/components/Text.js":["47594",[19447]],"./Obsidian/components/Text.js":["56321",[19802]],"./PydanticAI/components/Mono.js":["48260",[53317]],"./Skywork/components/Avatar.js":["6574",[40995]],"./ZenMux/components/Mono.js":["55357",[74670]],"./Hyperbolic/components/Text.js":["46431",[62708]],"./CopilotKit/components/Combine.js":["2646",[59835]],"./Flux/components/Combine.js":["14523",[25e3]],"./PixVerse/components/Avatar.js":["54928",[47689]],"./ElevenX/components/Avatar.js":["72061",[69294]],"./Xinference/components/Combine.js":["13547",[19128]],"./N8n/components/Avatar.js":["49726",[94867]],"./Greptile/components/Avatar.js":["74262",[52091]],"./Gradio/components/Text.js":["96292",[25029]],"./Spark/components/Combine.js":["71469",[29854]],"./Yandex/components/Mono.js":["78309",[22726]],"./Pi/components/Combine.js":["95875",[23776]],"./MCP/components/Text.js":["47952",[12425]],"./Yuanbao/components/Color.js":["98659",[7360]],"./ZenMux/components/Text.js":["81057",[62042]],"./Browserless/components/Mono.js":["81541",[47814]],"./Mistral/components/Avatar.js":["25766",[96139]],"./Manus/components/Combine.js":["74870",[24283]],"./YouMind/components/Text.js":["43807",[97108]],"./FishAudio/components/Mono.js":["96016",[19817]],"./LeptonAI/components/Avatar.js":["50226",[7823]],"./Featherless/components/Avatar.js":["26684",[51949]],"./CherryStudio/components/Color.js":["98209",[5434]],"./Huawei/components/Text.js":["38221",[40766]],"./ClaudeCode/components/Mono.js":["41891",[79264]],"./Antigravity/components/Color.js":["21737",[6715]],"./Doubao/components/Color.js":["36394",[38743]],"./HuaweiCloud/components/Mono.js":["56306",[57743]],"./AtlasCloud/components/Combine.js":["92194",[82623]],"./Nextbit/components/Avatar.js":["30170",[64199]],"./Monica/components/Mono.js":["67273",[30002]],"./Obsidian/components/Avatar.js":["52907",[93336]],"./OpenCode/components/Combine.js":["66421",[79574]],"./Suno/components/Mono.js":["68767",[62292]],"./InternLM/components/Color.js":["75373",[64286]],"./ComfyUI/components/Color.js":["98766",[99427]],"./Alibaba/components/Avatar.js":["95526",[68235]],"./Decart/components/Avatar.js":["33571",[45920]],"./DigitalOcean/components/Mono.js":["11282",[66383]],"./OpenAI/components/Text.js":["17606",[59595]],"./Upstage/components/Avatar.js":["38319",[41636]],"./Doc2X/components/Avatar.js":["37750",[71579]],"./Railway/components/Combine.js":["38979",[32416]],"./CommandCode/components/Text.js":["54004",[50837]],"./Mistral/components/Mono.js":["65944",[9697]],"./Liquid/components/Combine.js":["51026",[87887]],"./Nextbit/components/Combine.js":["10274",[31423]],"./Qingyan/components/Combine.js":["7619",[3008]],"./Tavily/components/Combine.js":["25486",[60058]],"./WorkersAI/components/Mono.js":["76909",[25918]],"./Brave/components/Text.js":["26138",[39111]],"./Yuanbao/components/Text.js":["31749",[80294]],"./Baichuan/components/Combine.js":["23309",[18334]],"./Kiro/components/Combine.js":["58983",[45228]],"./LiveKit/components/Color.js":["20574",[98163]],"./PrunaAI/components/Avatar.js":["90812",[26029]],"./Devin/components/Mono.js":["19036",[2861]],"./Poe/components/Combine.js":["10946",[47071]],"./VertexAI/components/Combine.js":["79038",[66579]],"./CodeGeeX/components/Combine.js":["46882",[63839]],"./AirJelly/components/Avatar.js":["86366",[67776]],"./LangGraph/components/Avatar.js":["39974",[58475]],"./Goose/components/Text.js":["25667",[43616]],"./AdobeFirefly/components/Color.js":["89012",[84981]],"./KwaiKAT/components/Mono.js":["64720",[76713]],"./AMDRadeonCloud/components/Mono.js":["33402",[51431]],"./Bailian/components/Text.js":["5872",[40521]],"./EssentialAI/components/Mono.js":["58486",[80059]],"./Together/components/Text.js":["36502",[92795]],"./Xuanyuan/components/Mono.js":["62521",[10114]],"./Runway/components/Text.js":["23604",[27157]],"./AgentVoice/components/Text.js":["59645",[77230]],"./Apple/components/Text.js":["6856",[94193]],"./NanoBanana/components/Combine.js":["24923",[3144]],"./HuggingFace/components/Avatar.js":["98087",[92853]],"./OpenChat/components/Color.js":["23446",[81275]],"./LobeHub/components/Mono.js":["62235",[3400]],"./Runway/components/Mono.js":["53868",[9853]],"./AirJelly/components/Mono.js":["32688",[96745]],"./Tencent/components/TextCn.js":["4876",[62621]],"./AionLabs/components/Avatar.js":["58881",[76314]],"./Junie/components/Color.js":["3489",[6170]],"./VectorizerAI/components/Combine.js":["88697",[4322]],"./Xuanyuan/components/Avatar.js":["95479",[45340]],"./LLaVA/components/Mono.js":["78598",[98763]],"./LmStudio/components/Text.js":["55077",[40902]],"./Junie/components/Avatar.js":["65193",[51314]],"./ModelScope/components/Text.js":["36995",[48480]],"./Baichuan/components/Avatar.js":["17683",[99792]],"./Hyperbolic/components/Combine.js":["94351",[85604]],"./Vllm/components/Combine.js":["37489",[7786]],"./HermesAgent/components/Mono.js":["72359",[91916]],"./Flux/components/Mono.js":["93251",[3904]],"./IBM/components/Mono.js":["31390",[68499]],"./Kling/components/Avatar.js":["63007",[82996]],"./WorkersAI/components/Text.js":["69809",[41898]],"./Stability/components/Mono.js":["26463",[28084]],"./Wafer/components/Avatar.js":["63975",[56236]],"./ZAI/components/Text.js":["95976",[28241]],"./Groq/components/Combine.js":["64145",[40266]],"./Agui/components/Combine.js":["10452",[16629]],"./Infermatic/components/Text.js":["32241",[38387]],"./BaiduCloud/components/Combine.js":["48602",[19783]],"./LangSmith/components/Combine.js":["25983",[90292]],"./Make/components/Text.js":["57734",[36939]],"./Arcee/components/Combine.js":["94236",[6701]],"./Colab/components/Avatar.js":["46927",[19652]],"./Google/components/BrandColor.js":["52620",[2717]],"./Mastra/components/Text.js":["96104",[30801]],"./OpenAI/components/Avatar.js":["75740",[76621]],"./Meta/components/Color.js":["28271",[74692]],"./Junie/components/Combine.js":["50615",[20828]],"./Xuanyuan/components/Combine.js":["6265",[52354]],"./ElevenLabs/components/Mono.js":["2517",[10550]],"./CapCut/components/Avatar.js":["19090",[35951]],"./DocSearch/components/Avatar.js":["68948",[99669]],"./Morph/components/Avatar.js":["60504",[31393]],"./IFlyTekCloud/components/Mono.js":["4121",[1218]],"./Langfuse/components/Combine.js":["10529",[39994]],"./Monica/components/Avatar.js":["4295",[77676]],"./Hailuo/components/Text.js":["3054",[6723]],"./Qoder/components/Color.js":["20909",[69438]],"./GLMV/components/Avatar.js":["39742",[86099]],"./SambaNova/components/Mono.js":["92936",[6097]],"./Poolside/components/Combine.js":["58721",[96954]],"./Smithery/components/Color.js":["24381",[79694]],"./Apple/components/Mono.js":["232",[17617]],"./StreamLake/components/Combine.js":["40935",[79404]],"./Automatic/components/Text.js":["47243",[39192]],"./Kluster/components/Mono.js":["92510",[91955]],"./Perplexity/components/Text.js":["46018",[1100]],"./Sync/components/Text.js":["89143",[29340]],"./SiliconCloud/components/Mono.js":["62090",[24567]],"./CometAPI/components/Avatar.js":["83566",[24291]],"./Apple/components/Avatar.js":["10870",[21467]],"./CelestoAI/components/Color.js":["96945",[19818]],"./FastGPT/components/Color.js":["80353",[31930]],"./Google/components/Color.js":["53937",[5546]],"./Sora/components/Color.js":["47521",[50906]],"./Higress/components/Text.js":["75119",[91076]],"./Phala/components/Color.js":["94964",[32533]],"./SillyTavern/components/Text.js":["28957",[30894]],"./Ace/components/Mono.js":["93295",[54340]],"./TencentCloud/components/Avatar.js":["3228",[17101]],"./TopazLabs/components/Text.js":["38240",[94329]],"./FishAudio/components/Combine.js":["13566",[6803]],"./NousResearch/components/Mono.js":["15174",[37323]],"./AlephAlpha/components/Combine.js":["93230",[79427]],"./CherryStudio/components/Avatar.js":["64457",[41522]],"./Krea/components/Combine.js":["4991",[67604]],"./Ai2/components/Avatar.js":["25081",[28939]],"./OpenCode/components/Mono.js":["88029",[13806]],"./PydanticAI/components/Color.js":["27172",[39301]],"./AlephAlpha/components/Text.js":["69680",[73833]],"./Inception/components/Avatar.js":["15449",[74882]],"./Flora/components/Mono.js":["22646",[27419]],"./Kimi/components/Avatar.js":["57900",[96285]],"./BaiduCloud/components/Mono.js":["43956",[26805]],"./Krea/components/Avatar.js":["35137",[14266]],"./Poe/components/Mono.js":["58764",[13437]],"./Reka/components/Text.js":["51166",[76170]],"./AgnesAI/components/Combine.js":["21110",[80859]],"./AntGroup/components/BrandColor.js":["1279",[54100]],"./Inception/components/Text.js":["53239",[1404]],"./Poe/components/Text.js":["28596",[56821]],"./Reka/components/Avatar.js":["64955",[64360]],"./Unsloth/components/Color.js":["77159",[61996]],"./Volcengine/components/Mono.js":["85648",[64745]],"./Haiper/components/Text.js":["49253",[85510]],"./Zeabur/components/Combine.js":["40405",[63222]],"./Zeabur/components/Mono.js":["61725",[4014]],"./WorkersAI/components/Avatar.js":["32379",[3208]],"./Devin/components/Text.js":["21892",[16677]],"./Kagi/components/Avatar.js":["29238",[11355]],"./GeminiCLI/components/Mono.js":["70299",[98792]],"./Azure/components/Color.js":["30813",[95406]],"./GeminiCLI/components/Avatar.js":["79741",[1550]],"./Infinigence/components/TextCn.js":["53030",[89547]],"./MyShell/components/Text.js":["26448",[14121]],"./Trae/components/Avatar.js":["61890",[48287]],"./DigitalOcean/components/Combine.js":["47776",[31513]],"./Wenxin/components/Combine.js":["21493",[63670]],"./Yi/components/Color.js":["1002",[52535]],"./Grok/components/Text.js":["8087",[41724]],"./Qoder/components/Text.js":["42107",[21384]],"./GithubCopilot/components/Combine.js":["3162",[34942]],"./Targon/components/Avatar.js":["55419",[25576]],"./Crusoe/components/Text.js":["96565",[63446]],"./LobeHub/components/Text.js":["12771",[56480]],"./Fireworks/components/Avatar.js":["58876",[10765]],"./Zapier/components/Color.js":["88255",[54292]],"./AkashChat/components/Mono.js":["84418",[49567]],"./McpSo/components/Text.js":["41990",[21867]],"./DeepCogito/components/Color.js":["14215",[59500]],"./SpeedAI/components/Combine.js":["60877",[85662]],"./Kling/components/Mono.js":["80673",[98938]],"./Perceptron/components/Mono.js":["40890",[70663]],"./BriaAI/components/Color.js":["65508",[41733]],"./ZAI/components/Mono.js":["3464",[11185]],"./Obsidian/components/Color.js":["47959",[30332]],"./Coze/components/Combine.js":["2755",[47232]],"./AMDRadeonCloud/components/Text.js":["66374",[10731]],"./Apertis/components/Text.js":["44050",[4399]],"./Baidu/components/BrandColor.js":["44532",[9365]],"./Dify/components/Mono.js":["31430",[12843]],"./Tripo/components/Mono.js":["4700",[56877]],"./Phind/components/Avatar.js":["24759",[18396]],"./Google/components/Avatar.js":["69945",[37506]],"./BAAI/components/Mono.js":["45787",[17896]],"./Codex/components/Avatar.js":["65735",[55276]],"./Phind/components/Combine.js":["42681",[11970]],"./AionLabs/components/Combine.js":["37599",[418,56564]],"./Lovart/components/Text.js":["86558",[27923]],"./Reve/components/Avatar.js":["36634",[18247]],"./SearchApi/components/Mono.js":["46432",[281]],"./Volcengine/components/Avatar.js":["23102",[7795]],"./EssentialAI/components/Avatar.js":["83336",[33713]],"./WorldRouter/components/Mono.js":["41301",[6358]],"./Anyscale/components/Avatar.js":["58238",[61491]],"./Doubao/components/Text.js":["22054",[51947]],"./Friendli/components/Text.js":["45635",[69024]],"./NPLCloud/components/Color.js":["95913",[8370]],"./Pollinations/components/Combine.js":["74874",[92679]],"./Featherless/components/Mono.js":["90202",[68391]],"./Nova/components/Text.js":["31682",[60575]],"./PixVerse/components/Text.js":["37426",[4143]],"./Tiangong/components/Color.js":["34863",[59236]],"./SenseNova/components/Avatar.js":["43278",[21827]],"./Tiangong/components/Combine.js":["75901",[26094]],"./Coze/components/Text.js":["1667",[96448]],"./Bailian/components/Combine.js":["35694",[94467]],"./DeepL/components/Avatar.js":["85320",[39729]],"./Greptile/components/Combine.js":["9401",[60075]],"./HappyHorse/components/Avatar.js":["78641",[10762]],"./RooCode/components/Mono.js":["38033",[51082]],"./ComfyUI/components/Avatar.js":["67744",[953]],"./CommandA/components/Text.js":["24472",[31361]],"./Ai360/components/Combine.js":["4309",[86198]],"./Dbrx/components/BrandColor.js":["68511",[11732]],"./Chutes/components/Combine.js":["37172",[69429]],"./Firecrawl/components/Mono.js":["44631",[35324]],"./Inception/components/Mono.js":["14327",[3836]],"./Infermatic/components/Combine.js":["85872",[96713]],"./Parasail/components/Avatar.js":["50366",[96714]],"./Minimax/components/Text.js":["79487",[20660]],"./CogView/components/Mono.js":["62230",[91803,3387]],"./Hedra/components/Combine.js":["45546",[30455]],"./Sora/components/Text.js":["75527",[53452]],"./Antigravity/components/Avatar.js":["95624",[82609]],"./Github/components/Combine.js":["63447",[43068]],"./Mastra/components/Combine.js":["59718",[23755]],"./Zencoder/components/Color.js":["59573",[92255]],"./Bedrock/components/Text.js":["41750",[11099]],"./ZeroOne/components/Color.js":["1065",[65339]],"./OpenHands/components/Color.js":["39350",[92155]],"./IoNet/components/Avatar.js":["16253",[38702]],"./Stepfun/components/Combine.js":["32511",[84596]],"./Doc2X/components/Color.js":["47352",[24801]],"./Decart/components/Color.js":["53372",[26212]],"./AntGroup/components/Color.js":["88892",[70573]],"./AssemblyAI/components/Color.js":["97618",[26895]],"./Dify/components/Text.js":["22794",[91255]],"./Brave/components/Color.js":["71510",[85019]],"./LlamaIndex/components/Mono.js":["2619",[57896]],"./Exa/components/Text.js":["9228",[92413]],"./Mastra/components/Mono.js":["87240",[30097]],"./Notion/components/Avatar.js":["81055",[28788]],"./NanoBanana/components/Color.js":["4461",[30366]],"./SophNet/components/Combine.js":["41733",[77670]],"./Civitai/components/Avatar.js":["227",[9376]],"./Pika/components/Mono.js":["87175",[84076]],"./Yi/components/Avatar.js":["4092",[26765]],"./AtlasCloud/components/Avatar.js":["96858",[47303]],"./Arcee/components/Mono.js":["49670",[21291]],"./Volcengine/components/Color.js":["57088",[99385]],"./Arcee/components/Avatar.js":["8152",[10593]],"./ClaudeCode/components/Text.js":["64507",[18216]],"./CogVideo/components/Mono.js":["97066",[64999,32663]],"./Liquid/components/Avatar.js":["58698",[80887]],"./NotebookLM/components/Avatar.js":["23124",[38741]],"./Unstructured/components/Mono.js":["75636",[49666]],"./Dolphin/components/Mono.js":["79268",[86245]],"./Greptile/components/Text.js":["30184",[19857]],"./AlibabaCloud/components/TextCn.js":["7388",[52077]],"./OpenHuman/components/Mono.js":["87505",[15370]],"./Dify/components/TextColor.js":["72075",[19960]],"./Cursor/components/Text.js":["35390",[33043]],"./BaiduCloud/components/Avatar.js":["94114",[40703]],"./Kolors/components/Mono.js":["24956",[84813]],"./LG/components/Mono.js":["83565",[37822]],"./Aya/components/Combine.js":["17849",[78562]],"./MetaAI/components/Text.js":["17015",[11900]],"./OpenWebUI/components/Combine.js":["81926",[76267]],"./Railway/components/Text.js":["38256",[88480]],"./N8n/components/Mono.js":["22000",[40681]],"./StateCloud/components/Combine.js":["89660",[32557]],"./UnionAlpha/components/Avatar.js":["32827",[7624]],"./Wenxin/components/Color.js":["57783",[70684]],"./DreamMachine/components/Combine.js":["62814",[39635]],"./Smithery/components/Avatar.js":["76565",[42166]],"./Adobe/components/Avatar.js":["45761",[63866]],"./Adobe/components/Mono.js":["44255",[5172]],"./N8n/components/Color.js":["69152",[14297]],"./WorldRouter/components/Combine.js":["53533",[67118]],"./UnionAlpha/components/Mono.js":["365",[71806]],"./CodeBuddy/components/Combine.js":["69635",[6656]],"./Railway/components/Avatar.js":["47690",[87182]],"./Tripo/components/Avatar.js":["88170",[72535]],"./Aya/components/Avatar.js":["67799",[56924]],"./Lovable/components/Combine.js":["37429",[51734]],"./MetaGPT/components/Avatar.js":["57512",[48017]],"./Microsoft/components/Combine.js":["5898",[48247]],"./ZeroOne/components/Mono.js":["62134",[76091]],"./DeepInfra/components/Avatar.js":["31902",[86579]],"./Gemma/components/Text.js":["37793",[82010]],"./Vidu/components/Mono.js":["86462",[98515]],"./Aws/components/Mono.js":["31073",[96922]],"./Devin/components/Color.js":["10940",[72237]],"./Baichuan/components/Color.js":["9471",[55476]],"./CopilotKit/components/Mono.js":["52280",[61473]],"./Meta/components/Combine.js":["18461",[86830]],"./Coze/components/Avatar.js":["84893",[8782]],"./Pika/components/Avatar.js":["49366",[44050]],"./Meta/components/Mono.js":["33557",[27318]],"./Codex/components/Text.js":["16075",[28376]],"./Recraft/components/Text.js":["49869",[15742]],"./Slock/components/Combine.js":["84",[80949]],"./Stepfun/components/Mono.js":["16095",[42676]],"./Qiniu/components/Text.js":["42746",[79367]],"./Poe/components/Avatar.js":["35418",[647]],"./Zhipu/components/Avatar.js":["82576",[96873]],"./OpenHuman/components/Combine.js":["3105",[70010]],"./LangGraph/components/Text.js":["48696",[42081]],"./Ai21/components/Text.js":["2059",[73336]],"./GmiCloud/components/Avatar.js":["6710",[13851]],"./Automatic/components/Combine.js":["11691",[17592]],"./Doc2X/components/Combine.js":["60678",[50923]],"./Infinigence/components/Avatar.js":["11977",[89394]],"./KwaiKAT/components/Combine.js":["7294",[91731]],"./McpSo/components/Avatar.js":["27132",[32525]],"./NewAPI/components/Avatar.js":["72808",[27889]],"./DreamMachine/components/Mono.js":["32816",[61833]],"./Qoder/components/Avatar.js":["293",[24742]],"./Apertis/components/Combine.js":["68196",[66309]],"./AssemblyAI/components/Combine.js":["41648",[39849]],"./Stability/components/Avatar.js":["25185",[40922]],"./Ai302/components/Color.js":["54059",[11064]],"./ByteDance/components/BrandColor.js":["22914",[26143]],"./Vercel/components/Mono.js":["24527",[56228]],"./Jimeng/components/Mono.js":["44444",[61773]],"./Aws/components/Color.js":["50875",[89160]],"./AirJelly/components/Combine.js":["31934",[21651]],"./Dify/components/Avatar.js":["74648",[26881]],"./Ai2/components/Mono.js":["88696",[9601]],"./Baidu/components/Color.js":["46457",[14658]],"./CrewAI/components/BrandColor.js":["988",[54509]],"./Exa/components/Combine.js":["22778",[22631]],"./Goose/components/Mono.js":["85083",[86792]],"./Microsoft/components/Avatar.js":["88690",[83791]],"./Pollinations/components/Avatar.js":["62786",[98815]],"./SearXNG/components/Combine.js":["89256",[49649]],"./TuriX/components/Mono.js":["49878",[60731]],"./Zhipu/components/Text.js":["22258",[51951]],"./GeminiCLI/components/Text.js":["44227",[35424]],"./V0/components/Avatar.js":["37512",[28081]],"./Cline/components/Combine.js":["51559",[43756]],"./Cloudflare/components/Combine.js":["14155",[33816]],"./Kiro/components/Text.js":["36215",[73436]],"./RSSHub/components/Combine.js":["96011",[77144]],"./Hunyuan/components/Color.js":["66658",[62175]],"./AiStudio/components/Mono.js":["18936",[77153]],"./Make/components/Avatar.js":["58204",[83341]],"./Windsurf/components/Combine.js":["90484",[48661]],"./Upstage/components/Color.js":["49131",[30552]],"./Browserless/components/Combine.js":["40493",[12414]],"./FastGPT/components/Avatar.js":["73385",[73938]],"./Tavily/components/Color.js":["66155",[81656]],"./Dalle/components/Mono.js":["86726",[62411]],"./Nova/components/Mono.js":["27982",[65091]],"./MetaGPT/components/Mono.js":["82390",[9352]],"./Codex/components/Combine.js":["52107",[36184]],"./NewAPI/components/Combine.js":["66764",[88253]],"./DocSearch/components/Mono.js":["26066",[77935]],"./SambaNova/components/Avatar.js":["18774",[85851]],"./SpeedAI/components/Color.js":["71903",[46676]],"./LangGraph/components/Mono.js":["98264",[85633]],"./Cloudflare/components/Text.js":["97131",[35864]],"./Meshy/components/Color.js":["27032",[35105]],"./IoNet/components/Combine.js":["32675",[13792]],"./Qiniu/components/Combine.js":["5164",[86557]],"./AlibabaCloud/components/Color.js":["27299",[34336]],"./LangSmith/components/Mono.js":["58687",[7220]],"./Recraft/components/Combine.js":["37233",[85578]],"./Junie/components/Mono.js":["29159",[43916]],"./Gemma/components/Mono.js":["12093",[10990]],"./LobeHub/components/Color.js":["51781",[28934]],"./SpeedAI/components/Avatar.js":["61299",[95600]],"./Baseten/components/Combine.js":["46758",[38827]],"./Minimax/components/Color.js":["93065",[61906]],"./Kling/components/Color.js":["69243",[5320]],"./CometAPI/components/Text.js":["33616",[51721]],"./Venice/components/Mono.js":["79476",[16373]],"./Monica/components/Text.js":["71557",[20038]],"./Kagi/components/Combine.js":["1798",[16267]],"./Phala/components/Text.js":["93004",[11581]],"./Stepfun/components/Avatar.js":["93742",[30883]],"./Goose/components/Combine.js":["62915",[61824]],"./Bing/components/Avatar.js":["79404",[99325]],"./Jimeng/components/Color.js":["86204",[67181]],"./Zhipu/components/Color.js":["25054",[93683]],"./LG/components/Color.js":["37511",[10700]],"./Anspire/components/Mono.js":["98586",[43559]],"./Inceptron/components/Avatar.js":["92128",[47641]],"./InternLM/components/Combine.js":["94203",[78152]],"./Amp/components/Mono.js":["64374",[36571]],"./Moxt/components/Text.js":["72036",[78597]],"./OpenHands/components/Avatar.js":["81064",[8625]],"./Lambda/components/Mono.js":["57127",[55596]],"./Sakana/components/Combine.js":["8829",[16142]],"./DigitalOcean/components/Avatar.js":["8935",[44533]],"./Wandb/components/Combine.js":["7038",[79795]],"./Unstructured/components/Color.js":["76404",[6453]],"./AionLabs/components/Mono.js":["9631",[66804]],"./AiMass/components/Avatar.js":["28660",[15989]],"./ElevenLabs/components/Avatar.js":["92611",[84192]],"./Adobe/components/Combine.js":["25151",[47572]],"./Novita/components/Combine.js":["84025",[42306]],"./Bedrock/components/Color.js":["43834",[37447]],"./SiliconCloud/components/Color.js":["45114",[9415]],"./Vercel/components/Combine.js":["11471",[9828]],"./PydanticAI/components/Text.js":["80348",[96845]],"./Inceptron/components/Color.js":["23406",[61859]],"./Wandb/components/Avatar.js":["71998",[4147]],"./Straico/components/Avatar.js":["30657",[72666]],"./OpenWebUI/components/Avatar.js":["96950",[2235]],"./NanoBanana/components/Mono.js":["64163",[43264]],"./GithubCopilot/components/Mono.js":["20869",[42662]],"./Brave/components/Mono.js":["19478",[62043]],"./Aws/components/Combine.js":["64689",[64650]],"./Parasail/components/Combine.js":["16911",[81636]],"./Figma/components/Color.js":["7900",[10234]],"./Dolphin/components/Combine.js":["54186",[86245,11607]],"./CommandA/components/Color.js":["63880",[5329]],"./WorldRouter/components/Text.js":["19465",[5458]],"./DeepInfra/components/Text.js":["68832",[71673]],"./Xpay/components/Mono.js":["69546",[25559]],"./Colab/components/Combine.js":["83950",[72954]],"./CodeFlicker/components/Combine.js":["53011",[68208]],"./Krea/components/Text.js":["13711",[94596]],"./SubModel/components/Combine.js":["9411",[29472]],"./SearXNG/components/Avatar.js":["72076",[62493]],"./Tripo/components/Combine.js":["59026",[65999]],"./Cerebras/components/BrandColor.js":["90054",[32363]],"./Replit/components/Mono.js":["20528",[84329]],"./DeepL/components/Mono.js":["67606",[34779]],"./Unsloth/components/Text.js":["84785",[79914]],"./OpenRouter/components/Mono.js":["20193",[20314]],"./Yi/components/Text.js":["99718",[203]],"./Baidu/components/TextCn.js":["87902",[64883]],"./EssentialAI/components/Color.js":["37238",[94427]],"./Manus/components/Avatar.js":["10918",[81131]],"./OpenClaw/components/Text.js":["66639",[96580]],"./Snowflake/components/Avatar.js":["84810",[99287]],"./AskVerdict/components/Color.js":["47706",[88263]],"./BurnCloud/components/Mono.js":["20002",[78719]],"./Higress/components/Combine.js":["23359",[39060]],"./DeepL/components/Text.js":["69818",[77255]],"./McpSo/components/Mono.js":["16858",[6983]],"./CodeBuddy/components/Mono.js":["56059",[45576]],"./Cohere/components/Text.js":["76588",[85053]],"./CrewAI/components/Mono.js":["81223",[34156]],"./DeepCogito/components/Mono.js":["99917",[14526]],"./Doc2X/components/Text.js":["36712",[17841]],"./GmiCloud/components/Mono.js":["27720",[11921]],"./Midjourney/components/Mono.js":["72838",[41451]],"./Nextbit/components/Text.js":["85748",[59413]],"./NovelAI/components/Avatar.js":["98498",[23327]],"./CapCut/components/Combine.js":["26122",[55415]],"./HuggingFace/components/Text.js":["11726",[18979]],"./SiliconCloud/components/Text.js":["82294",[17147]],"./AMDRadeonCloud/components/Combine.js":["59192",[66497]],"./Adobe/components/Color.js":["77305",[70946]],"./CentML/components/Avatar.js":["70673",[32362]],"./Amp/components/Color.js":["93750",[44251]],"./Cloudflare/components/Avatar.js":["74773",[19638]],"./Kolors/components/Avatar.js":["79114",[2839]],"./KwaiKAT/components/Text.js":["54688",[22841]],"./Novita/components/Color.js":["64403",[52944]],"./Baidu/components/Mono.js":["61439",[74324]],"./PPIO/components/Mono.js":["93756",[90317]],"./Slock/components/Mono.js":["83438",[28995]],"./OpenChat/components/Combine.js":["61196",[82557]],"./PaLM/components/Text.js":["21564",[57837]],"./YouMind/components/Avatar.js":["83153",[49578]],"./Zeabur/components/Text.js":["73025",[29901]],"./OpenHuman/components/Avatar.js":["87247",[66884]],"./SenseNova/components/Color.js":["10480",[37321]],"./Meshy/components/Combine.js":["23046",[20299]],"./LlmApi/components/Text.js":["64057",[62818]],"./Qingyan/components/Avatar.js":["82589",[13646]],"./Anspire/components/Color.js":["99754",[40151]],"./Vllm/components/Avatar.js":["799",[88276]],"./Meta/components/Text.js":["16393",[69074]],"./Antigravity/components/Combine.js":["42508",[91261]],"./Bing/components/Mono.js":["37994",[16375]],"./Qingyan/components/Color.js":["20773",[72774]],"./TopazLabs/components/Combine.js":["31838",[86131]],"./Gradio/components/Mono.js":["93436",[11213]],"./Venice/components/Avatar.js":["43010",[6943]],"./Cline/components/Mono.js":["61303",[20476]],"./Haiper/components/Mono.js":["43657",[29522]],"./KiloCode/components/Mono.js":["7644",[87053]],"./VectorizerAI/components/Mono.js":["76921",[43362]],"./Venice/components/Text.js":["23596",[14525]],"./Voyage/components/Text.js":["78797",[26846]],"./LangSmith/components/Color.js":["32409",[54434]],"./DeepSeek/components/Color.js":["8522",[77796]],"./LmStudio/components/Mono.js":["34441",[34514]],"./Lovart/components/Combine.js":["14672",[17449]],"./Inception/components/Combine.js":["73031",[70092]],"./ByteDance/components/Avatar.js":["67315",[86352]],"./Inflection/components/Combine.js":["71839",[16756]],"./Relace/components/Combine.js":["81012",[61461]],"./Hedra/components/Mono.js":["98020",[83045]],"./Higress/components/TextColor.js":["60356",[94565]],"./Aya/components/Mono.js":["74393",[82594]],"./Wafer/components/Mono.js":["95945",[52594]],"./HermesAgent/components/Combine.js":["30135",[91916,89372]],"./OpenClaw/components/Color.js":["65625",[15618]],"./DocSearch/components/Color.js":["88866",[75071]],"./InternLM/components/Mono.js":["10467",[1664]],"./Zhipu/components/Mono.js":["13438",[30035]],"./Apple/components/Combine.js":["78777",[44427]],"./CodeBuddy/components/Text.js":["46339",[82208]],"./Dolphin/components/Avatar.js":["8850",[86245,58767]],"./EssentialAI/components/Text.js":["730",[9479]],"./CrewAI/components/Brand.js":["89703",[5868]],"./LlamaIndex/components/Color.js":["37477",[68710]],"./Fireworks/components/Mono.js":["37274",[3079]],"./BriaAI/components/Text.js":["56220",[46349]],"./CommandCode/components/Avatar.js":["2394",[19527]],"./Github/components/Avatar.js":["47145",[64146]],"./ElevenLabs/components/Text.js":["26985",[9170]],"./Nova/components/Combine.js":["15924",[39317]],"./Doc2X/components/Mono.js":["27848",[17137]],"./SenseNova/components/Combine.js":["75054",[55747]],"./Azure/components/Avatar.js":["8597",[53238]],"./IoNet/components/Text.js":["20739",[37216]],"./AzureAI/components/Combine.js":["32173",[45086]],"./Clipdrop/components/Combine.js":["88543",[30068]],"./Brave/components/Avatar.js":["68136",[75729]],"./Kiro/components/Color.js":["26641",[62954]],"./Agui/components/Mono.js":["19214",[96547]],"./Apertis/components/Avatar.js":["93936",[58409]],"./HermesAgent/components/Avatar.js":["64521",[91916,30834]],"./PixVerse/components/Combine.js":["57476",[97125]],"./FishAudio/components/Text.js":["85984",[49593]],"./Claude/components/Text.js":["90046",[71475]],"./SearXNG/components/Color.js":["66298",[96903]],"./Sync/components/Mono.js":["76951",[91100]],"./Exa/components/Avatar.js":["5186",[23871]],"./Midjourney/components/Combine.js":["87100",[81069]],"./Yuanbao/components/Mono.js":["88361",[61490]],"./Volcengine/components/Text.js":["91968",[94521]],"./Vllm/components/Text.js":["237",[59486]],"./IoNet/components/Mono.js":["87099",[54216]],"./Smithery/components/Text.js":["17067",[61016]],"./Cloudflare/components/Mono.js":["467",[90672]],"./Fal/components/Mono.js":["12271",[45892]],"./AiHubMix/components/Text.js":["57161",[22482]],"./Ideogram/components/Mono.js":["83366",[2795]],"./Azure/components/Text.js":["36811",[57720]],"./Luma/components/Avatar.js":["51479",[42428]],"./Stability/components/Color.js":["217",[50370]],"./PrunaAI/components/Text.js":["50214",[11275]],"./Liquid/components/Mono.js":["14332",[58093]],"./OpenRouter/components/Color.js":["78587",[48712]],"./Tripo/components/Text.js":["7556",[87045]],"./Zencoder/components/Avatar.js":["80724",[54325]],"./Novita/components/Mono.js":["91993",[43138]],"./Nebius/components/Text.js":["91608",[19425]],"./Zeabur/components/Color.js":["26231",[39484]],"./Obsidian/components/Mono.js":["46973",[32430]],"./ElevenX/components/Combine.js":["38307",[76224]],"./Ollama/components/Text.js":["25290",[471]],"./Perplexity/components/Combine.js":["78196",[59925]],"./Coze/components/Mono.js":["84379",[13448]],"./Zapier/components/Mono.js":["35653",[72742]],"./Firecrawl/components/Combine.js":["13319",[25164]],"./CentML/components/Combine.js":["66398",[53011]],"./IFlyTekCloud/components/Combine.js":["62713",[1378]],"./Lightricks/components/Text.js":["20276",[95669]],"./Moonshot/components/Mono.js":["90117",[6310]],"./Zapier/components/Avatar.js":["76755",[61584]],"./ZenMux/components/Avatar.js":["22155",[24152]],"./ZeroOne/components/Combine.js":["99468",[32477]],"./SubModel/components/Mono.js":["68219",[20328]],"./CrewAI/components/Color.js":["40801",[84730]],"./YouMind/components/Combine.js":["86127",[8452]],"./CogVideo/components/Combine.js":["5608",[64999,61073]],"./CommandCode/components/Combine.js":["81954",[76351]],"./AskVerdict/components/Mono.js":["37354",[96503]],"./Kiro/components/Mono.js":["97303",[75868]],"./Magic/components/Avatar.js":["39689",[62866]],"./SillyTavern/components/Color.js":["34635",[99384]],"./Voyage/components/Mono.js":["91905",[17754]],"./Friendli/components/Mono.js":["28347",[69672]],"./Jimeng/components/Avatar.js":["94570",[21591]],"./Anthropic/components/Text.js":["34436",[78821]],"./Ai21/components/Combine.js":["97835",[40344]],"./Xinference/components/Mono.js":["29587",[11664]],"./OpenClaw/components/Avatar.js":["45921",[11514]],"./LlamaIndex/components/Avatar.js":["78525",[62638]],"./Viggle/components/Text.js":["64700",[3405]],"./Bfl/components/Avatar.js":["37050",[49127]],"./Anspire/components/TextColor.js":["2263",[56476]],"./DeepSeek/components/Avatar.js":["23324",[94317]],"./Nvidia/components/Mono.js":["40067",[89120]],"./Search1API/components/Color.js":["19883",[13112]],"./CommandCode/components/Color.js":["74444",[59677]],"./Inceptron/components/Mono.js":["97070",[30928]],"./Nvidia/components/Text.js":["39931",[99304]],"./Perceptron/components/Combine.js":["23576",[15457]],"./Phala/components/Avatar.js":["8009",[19858]],"./Skywork/components/Combine.js":["71630",[48995]],"./CopilotKit/components/Text.js":["79416",[76801]],"./Aya/components/Color.js":["39667",[66832]],"./Featherless/components/Combine.js":["14104",[64737]],"./AiStudio/components/Avatar.js":["71334",[41515]],"./Codex/components/Color.js":["19677",[11534]],"./OpenCode/components/Text.js":["13729",[1178]],"./Player2/components/Color.js":["93355",[46904]],"./Xpay/components/Combine.js":["17576",[53201]],"./GiteeAI/components/Avatar.js":["79598",[26435]],"./Ace/components/Text.js":["60127",[35060]],"./Cline/components/Avatar.js":["26873",[72290]],"./Luma/components/Text.js":["51413",[53494]],"./ModelScope/components/Avatar.js":["64541",[11022]],"./N8n/components/Text.js":["42720",[1305]],"./Dbrx/components/Mono.js":["40764",[24333]],"./IBM/components/Avatar.js":["32656",[2409]],"./NovelAI/components/Combine.js":["10426",[2311]],"./SambaNova/components/Text.js":["1800",[6801]],"./Search1API/components/Text.js":["80157",[21697]],"./Flowith/components/Combine.js":["85151",[19252]],"./LeptonAI/components/Text.js":["83356",[5069]],"./Colab/components/Mono.js":["71025",[25290]],"./AgentVoice/components/Mono.js":["61649",[83594]],"./Figma/components/Avatar.js":["66506",[60663]],"./Alibaba/components/Text.js":["42552",[6017]],"./Baichuan/components/Mono.js":["22277",[76102]],"./LiveKit/components/Avatar.js":["1936",[83689]],"./ModelScope/components/Color.js":["37893",[21510]],"./CrewAI/components/Text.js":["34663",[48684]],"./Spark/components/Text.js":["2649",[26658]],"./Suno/components/Text.js":["96495",[2116]],"./AzureAI/components/Text.js":["10713",[13602]],"./Browserless/components/Text.js":["50713",[48482]],"./Phidata/components/Color.js":["25217",[186]],"./MCP/components/Mono.js":["15360",[98073]],"./Together/components/Mono.js":["79146",[62980]],"./VertexAI/components/Avatar.js":["18590",[87955]],"./Baidu/components/Text.js":["25903",[35748]],"./Poolside/components/Color.js":["87672",[79096]],"./Baidu/components/Avatar.js":["73121",[15066]],"./HuaweiCloud/components/TextCn.js":["39787",[18392]],"./Targon/components/Color.js":["87851",[79416]],"./Qwen/components/Color.js":["7489",[11450]],"./RSSHub/components/Color.js":["89373",[69262]],"./Anyscale/components/Text.js":["46208",[30137]],"./AgnesAI/components/Avatar.js":["52876",[28637]],"./CentML/components/Mono.js":["87759",[16740]],"./AssemblyAI/components/Text.js":["64478",[33011]],"./Bedrock/components/Combine.js":["99912",[56401]],"./CelestoAI/components/Text.js":["15031",[11612]],"./DeepL/components/Color.js":["82134",[63163]],"./Devin/components/Avatar.js":["83274",[96279]],"./DotsStudio/components/Mono.js":["49198",[48803]],"./Kwaipilot/components/Color.js":["9554",[44655]],"./LiveKit/components/Combine.js":["9828",[81157]],"./AiHubMix/components/Combine.js":["43421",[2958]],"./Tavily/components/Avatar.js":["29967",[30308]],"./TuriX/components/Text.js":["92122",[6503]],"./HuaweiCloud/components/Avatar.js":["33460",[8693]],"./Huawei/components/Mono.js":["51329",[31674]],"./Coqui/components/Mono.js":["42931",[80688]],"./LangChain/components/Text.js":["40397",[74654]],"./Qwen/components/Mono.js":["96199",[46700]],"./AskVerdict/components/Text.js":["11062",[48699]],"./DeepMind/components/Mono.js":["56506",[46311]],"./Dalle/components/Text.js":["55722",[83095]],"./FastGPT/components/Text.js":["28423",[69932]],"./AMDRadeonCloud/components/Color.js":["35018",[2167]],"./BilibiliIndex/components/Mono.js":["2224",[30249]],"./HuaweiCloud/components/Combine.js":["5152",[57945]],"./NPLCloud/components/Text.js":["72927",[39860]],"./Bfl/components/Combine.js":["94018",[5087]],"./Qingyan/components/Mono.js":["57371",[57544]],"./BilibiliIndex/components/Combine.js":["40766",[39923]],"./DeepInfra/components/Mono.js":["48112",[11049]],"./Manus/components/Text.js":["3448",[16737]],"./Snowflake/components/Color.js":["33916",[87853]],"./ChatGLM/components/Mono.js":["69539",[14249]],"./Inference/components/Text.js":["50879",[15988]],"./TII/components/Combine.js":["53400",[68961]],"./Udio/components/Combine.js":["67529",[33298]],"./BurnCloud/components/Text.js":["94526",[4595]],"./Unstructured/components/Combine.js":["17914",[13671]],"./Nova/components/Color.js":["91534",[74339]],"./Vllm/components/Color.js":["90203",[76360]],"./Vidu/components/Color.js":["21790",[89779]],"./WaveSpeed/components/Mono.js":["21008",[67561]],"./Zencoder/components/Mono.js":["82866",[31343]],"./Phidata/components/Text.js":["41255",[14796]],"./McpSo/components/Combine.js":["94680",[51937]],"./UnionAlpha/components/Color.js":["71495",[88044]],"./AdobeFirefly/components/Combine.js":["85434",[39893,9767]],"./GLMV/components/Combine.js":["72638",[65011]],"./Make/components/Color.js":["44874",[77879]],"./Moxt/components/Color.js":["4252",[19565]],"./MyShell/components/Mono.js":["54208",[25945]],"./Pi/components/Mono.js":["25115",[50312]],"./Ai302/components/Mono.js":["43185",[89450]],"./Kluster/components/Combine.js":["54212",[90405]],"./OpenChat/components/Mono.js":["68342",[97627]],"./Cline/components/Text.js":["50199",[22044]],"./Recraft/components/Avatar.js":["3199",[54068]],"./Replicate/components/Avatar.js":["89733",[51910]],"./LlamaIndex/components/Text.js":["19907",[57248]],"./Alibaba/components/BrandColor.js":["85971",[68112]],"./Cohere/components/Color.js":["49780",[42101]],"./Lambda/components/Combine.js":["97975",[57468]],"./Ollama/components/Avatar.js":["51928",[27489]],"./Sora/components/Combine.js":["29207",[91292]],"./DreamMachine/components/Text.js":["53536",[22457]],"./Spark/components/Avatar.js":["67859",[368]],"./Qwen/components/Text.js":["4615",[42956]],"./Mastra/components/Avatar.js":["75702",[86971]],"./VectorizerAI/components/Text.js":["53333",[69110]],"./LobeHub/components/Morden.js":["41185",[92314]],"./Vidu/components/Text.js":["74738",[96284]],"./Luma/components/Color.js":["77523",[32400]],"./Xpay/components/Color.js":["46106",[69575]],"./Stability/components/BrandColor.js":["2260",[15317]],"./Jimeng/components/Text.js":["47300",[91941]],"./Novita/components/Avatar.js":["23063",[84796]],"./Kimi/components/Color.js":["84237",[7047]],"./Ai360/components/Color.js":["9719",[55388]],"./NotebookLM/components/Mono.js":["15730",[87247]],"./Voyage/components/Avatar.js":["54623",[22932]],"./Yandex/components/Avatar.js":["64435",[69456]],"./LLaVA/components/Color.js":["10022",[11371]],"./CelestoAI/components/Avatar.js":["58649",[93154]],"./Skywork/components/Color.js":["39696",[39209]],"./Baseten/components/Avatar.js":["38742",[67067]],"./Lovable/components/Color.js":["99479",[69628]],"./BurnCloud/components/Avatar.js":["50116",[94405]],"./Qoder/components/Mono.js":["19491",[30848]],"./Zhipu/components/Combine.js":["79364",[6181]],"./Fireworks/components/Combine.js":["18008",[25345]],"./Kolors/components/Text.js":["27812",[98629]],"./ClaudeCode/components/Combine.js":["48443",[52456]],"./MetaAI/components/Avatar.js":["81817",[2274]],"./Gemini/components/Color.js":["48161",[31066]],"./MetaAI/components/Mono.js":["78103",[14332]],"./NanoBanana/components/Avatar.js":["4691",[19792]],"./TII/components/Color.js":["41002",[35255]],"./Hailuo/components/Color.js":["79106",[86495]],"./VertexAI/components/Color.js":["4064",[83161]],"./LongCat/components/Text.js":["94222",[71907]],"./Relace/components/Mono.js":["87406",[74467]],"./Unsloth/components/Combine.js":["68197",[49478]],"./VertexAI/components/Text.js":["8064",[36217]],"./ZeroOne/components/Avatar.js":["71144",[11633]],"./Bailian/components/Mono.js":["88320",[11801]],"./WaveSpeed/components/Avatar.js":["89534",[9939]],"./Udio/components/Mono.js":["95721",[6354]],"./Trae/components/Color.js":["72404",[57365]],"./Search1API/components/Combine.js":["29889",[92890]],"./TuriX/components/Combine.js":["55372",[59709]],"./AssemblyAI/components/Mono.js":["89954",[7135]],"./Inference/components/Avatar.js":["92209",[5130]],"./PPIO/components/Combine.js":["63762",[49903]],"./DeepMind/components/Avatar.js":["76188",[68909]],"./Snowflake/components/Text.js":["20452",[53637]],"./Bfl/components/Mono.js":["81164",[27005]],"./AiHubMix/components/Avatar.js":["48251",[20552]],"./Browserless/components/Avatar.js":["93171",[75216]],"./AntGroup/components/Text.js":["86628",[94629]],"./Aws/components/Avatar.js":["30495",[39764]],"./CherryStudio/components/Mono.js":["64839",[22284]],"./BriaAI/components/Avatar.js":["41010",[14799]],"./CodeGeeX/components/Text.js":["35732",[67253]],"./CommandA/components/Mono.js":["74040",[58561]],"./DocSearch/components/Text.js":["92814",[32835]],"./OpenRouter/components/Combine.js":["64273",[82442]],"./Phidata/components/Avatar.js":["41641",[38354]],"./Midjourney/components/Text.js":["62026",[91415]],"./Sora/components/Avatar.js":["30198",[83003]],"./Stability/components/Text.js":["90927",[89508]],"./Bedrock/components/Avatar.js":["70092",[71549]],"./AntGroup/components/Mono.js":["83772",[64461]],"./TopazLabs/components/Avatar.js":["99870",[45299]],"./Pika/components/Combine.js":["43351",[57564]],"./Notion/components/Combine.js":["11953",[88330]],"./Xpay/components/Text.js":["89750",[18139]],"./AMDRadeonCloud/components/Avatar.js":["66140",[74330]],"./AiStudio/components/Text.js":["76280",[78273]],"./DotsStudio/components/Text.js":["83746",[33919]],"./Cursor/components/Mono.js":["81602",[22239]],"./Gemini/components/Text.js":["22535",[99116]],"./Kluster/components/Text.js":["93778",[14415]],"./Anspire/components/Combine.js":["53048",[32929]],"./AtlasCloud/components/Mono.js":["64460",[41853]],"./Anyscale/components/Mono.js":["74064",[95913]],"./CyberCut/components/Combine.js":["32767",[58708]],"./FastGPT/components/Combine.js":["15191",[96956]],"./Huawei/components/TextCn.js":["74388",[22613]],"./ChatGLM/components/Avatar.js":["11102",[57843]],"./LongCat/components/Avatar.js":["30676",[56533]],"./Figma/components/Combine.js":["43474",[46191]],"./Krea/components/Mono.js":["12063",[38516]],"./LongCat/components/Mono.js":["43826",[17007]],"./Inceptron/components/Combine.js":["54964",[7349]],"./Moxt/components/Combine.js":["35346",[8975]],"./Rwkv/components/Combine.js":["6636",[92861]],"./Together/components/Combine.js":["3304",[8817]],"./Trae/components/Combine.js":["35386",[4615]],"./Infinigence/components/Mono.js":["2727",[93516]],"./Menlo/components/Mono.js":["26517",[61174]],"./Aws/components/BrandColor.js":["23814",[19083]],"./CodeGeeX/components/Avatar.js":["94202",[36583]],"./Gradio/components/Avatar.js":["24586",[2903]],"./Nextbit/components/Color.js":["99372",[87453]],"./Cursor/components/Avatar.js":["52740",[73733]],"./LLaVA/components/Combine.js":["67580",[11371,70669]],"./OpenAI/components/Combine.js":["77304",[36513]],"./Ai360/components/Mono.js":["86429",[10542]],"./ElevenX/components/Mono.js":["74107",[1800]],"./Unstructured/components/Text.js":["36108",[25437]],"./Nvidia/components/Avatar.js":["43653",[22214]],"./PPIO/components/Avatar.js":["45533",[97303]],"./Higress/components/Mono.js":["73471",[34996]],"./Sakana/components/Color.js":["10127",[54756]],"./SpeedAI/components/Mono.js":["94853",[35846]],"./Reve/components/Mono.js":["11532",[79421]],"./LangChain/components/Combine.js":["24337",[51434]],"./Windsurf/components/Text.js":["40642",[30623]],"./AdobeFirefly/components/Text.js":["92044",[38045]],"./Kagi/components/Mono.js":["21320",[27537]],"./Azure/components/Mono.js":["40147",[96176]],"./AskVerdict/components/Avatar.js":["22764",[74973]],"./NovelAI/components/Text.js":["61452",[2557]],"./PrunaAI/components/Combine.js":["26712",[66177]],"./InternLM/components/Avatar.js":["78789",[63622]],"./Automatic/components/Avatar.js":["12885",[17174]],"./Bilibili/components/Text.js":["38356",[61013]],"./Agui/components/Avatar.js":["61696",[99161]],"./Chutes/components/Avatar.js":["35168",[1145]],"./PydanticAI/components/Combine.js":["362",[36087]],"./Lambda/components/Avatar.js":["60041",[51474]],"./AlibabaCloud/components/Text.js":["1157",[294]],"./Udio/components/Text.js":["84965",[45990]],"./CherryStudio/components/Combine.js":["40823",[37500]],"./Fireworks/components/Text.js":["53894",[62379]],"./Lightricks/components/Combine.js":["90146",[91103]],"./Make/components/Combine.js":["90584",[97345]],"./Yi/components/Combine.js":["49528",[86657]],"./Moonshot/components/Combine.js":["51469",[38718]],"./Kimi/components/Mono.js":["79882",[73559]],"./Ace/components/Avatar.js":["54577",[56714]],"./Microsoft/components/Text.js":["11996",[30861]],"./Cohere/components/Combine.js":["13018",[44039]],"./LongCat/components/Combine.js":["69344",[12889]],"./Perplexity/components/Mono.js":["55054",[19619]],"./AkashChat/components/Combine.js":["83728",[37577]],"./AlibabaCloud/components/Combine.js":["46729",[31410]],"./DeepMind/components/Color.js":["2506",[8279]],"./OpenRouter/components/Avatar.js":["59903",[20564]],"./SillyTavern/components/Mono.js":["27121",[27498]],"./CherryStudio/components/Text.js":["2471",[49164]],"./BriaAI/components/Mono.js":["64708",[55621]],"./AkashChat/components/Text.js":["21854",[60371]],"./Firecrawl/components/Text.js":["56823",[73564]],"./LangGraph/components/Combine.js":["22742",[17851]],"./Sakana/components/Mono.js":["31669",[20886]],"./NPLCloud/components/Avatar.js":["53169",[87818]],"./OpenHands/components/Text.js":["72474",[11591]],"./Colab/components/Color.js":["89899",[65880]],"./EssentialAI/components/Combine.js":["93612",[18845]],"./LlmApi/components/Combine.js":["15469",[43614]],"./StateCloud/components/Mono.js":["73414",[28011]],"./Aws/components/Text.js":["85901",[29598]],"./Groq/components/Mono.js":["74081",[21466]],"./XAI/components/Mono.js":["21230",[16099]],"./GiteeAI/components/Combine.js":["17870",[62435]],"./DeepMind/components/Text.js":["16102",[18059]],"./DeepCogito/components/Avatar.js":["4283",[82376]],"./BriaAI/components/Combine.js":["10218",[91831]],"./Fal/components/Avatar.js":["28785",[34346]],"./AlephAlpha/components/Mono.js":["37088",[59481]],"./Dalle/components/Combine.js":["43548",[56781]],"./Huawei/components/Avatar.js":["18463",[84436]],"./Microsoft/components/Color.js":["61188",[6885]],"./ByteDance/components/TextCn.js":["20424",[97137]],"./RSSHub/components/Avatar.js":["82453",[1494]],"./Monica/components/Combine.js":["15273",[25234]],"./GoogleCloud/components/Avatar.js":["3466",[14679]],"./AskVerdict/components/Combine.js":["85896",[95889]],"./Friendli/components/Combine.js":["88835",[28032]],"./Gradio/components/Combine.js":["89394",[50255]],"./CodeBuddy/components/Avatar.js":["71421",[71854]],"./CommandA/components/Combine.js":["36406",[94843]],"./AkashChat/components/Color.js":["71314",[3599]],"./Civitai/components/Color.js":["1551",[86276]],"./Flux/components/Avatar.js":["22373",[83942]],"./Glama/components/Text.js":["47476",[46005]],"./Glama/components/Mono.js":["77644",[2621]],"./Grok/components/Combine.js":["74791",[99020]],"./Inflection/components/Text.js":["71695",[47044]],"./LangChain/components/Avatar.js":["99423",[24820]],"./Pika/components/Text.js":["24807",[27308]],"./HuaweiCloud/components/Text.js":["23054",[12643]],"./Brave/components/Combine.js":["15884",[28701]],"./IFlyTekCloud/components/Text.js":["64181",[10614]],"./Luma/components/Combine.js":["2617",[42082]],"./PixVerse/components/Color.js":["4734",[34803]],"./Infinigence/components/Color.js":["54945",[70522]],"./AntGroup/components/TextCn.js":["92601",[95426]],"./Cerebras/components/Avatar.js":["45247",[63124]],"./LmStudio/components/Avatar.js":["27591",[58988]],"./Player2/components/Avatar.js":["73711",[21892]],"./PydanticAI/components/Avatar.js":["21106",[78255]],"./AtlasCloud/components/Text.js":["4116",[82133]],"./CogVideo/components/Avatar.js":["99500",[64999,89981]],"./Fireworks/components/Color.js":["86666",[78551]],"./GLMV/components/Color.js":["5440",[99673]],"./Inference/components/Mono.js":["76655",[7876]],"./FastGPT/components/Mono.js":["4903",[35276]],"./Jimeng/components/Combine.js":["8082",[97871]],"./ByteDance/components/Mono.js":["67333",[82118]],"./Dbrx/components/Avatar.js":["12042",[62455]],"./Civitai/components/Combine.js":["71837",[98510]],"./NousResearch/components/Avatar.js":["81003",[37323,96929]],"./Nvidia/components/Color.js":["33965",[26078]],"./OpenAI/components/Mono.js":["93114",[99495]],"./PaLM/components/Mono.js":["89476",[14309]],"./BurnCloud/components/Color.js":["46821",[37519]],"./RooCode/components/Avatar.js":["20719",[34084]],"./Nebius/components/Avatar.js":["50150",[93483]],"./CogView/components/Combine.js":["57452",[91803,87869]],"./SearchApi/components/Combine.js":["69153",[16355]],"./Suno/components/Avatar.js":["62465",[52282]],"./Tencent/components/Mono.js":["45433",[37186]],"./Kwaipilot/components/Avatar.js":["57252",[86565]],"./Together/components/Color.js":["91802",[30663]],"./Phala/components/Combine.js":["15482",[90727]],"./Civitai/components/Mono.js":["50645",[80310]],"./Amp/components/Avatar.js":["33160",[41681]],"./Dbrx/components/Combine.js":["16530",[72527]],"./GLMV/components/Text.js":["56768",[59225]],"./GLMV/components/Mono.js":["50448",[13097]],"./Lovable/components/Mono.js":["53821",[83950]],"./Monica/components/Color.js":["41635",[44e3]],"./LiveKit/components/Mono.js":["5886",[85811]],"./Bilibili/components/Mono.js":["75308",[43210]],"./Jina/components/Text.js":["35148",[3965]],"./SearXNG/components/Text.js":["90774",[38331]],"./Slock/components/Text.js":["87138",[40831]],"./Reka/components/Combine.js":["28933",[92294]],"./TII/components/Mono.js":["3674",[74343]],"./AiMass/components/Combine.js":["42624",[11545]],"./Dbrx/components/Color.js":["94428",[15085]],"./LangChain/components/Mono.js":["83649",[22298]],"./Make/components/Mono.js":["41114",[61287]],"./WaveSpeed/components/Combine.js":["61950",[74547]],"./MetaGPT/components/Text.js":["24634",[32743]],"./KiloCode/components/Combine.js":["29330",[98831]],"./LongCat/components/Color.js":["27938",[36799]],"./OpenHuman/components/Text.js":["29085",[18670]],"./Windsurf/components/Mono.js":["36942",[35139]],"./Civitai/components/TextColor.js":["78490",[78215]],"./Moonshot/components/Avatar.js":["499",[11856]],"./Xinference/components/Avatar.js":["59701",[77206]],"./Trae/components/Text.js":["50924",[21437]],"./Yuanbao/components/Avatar.js":["61223",[54508]],"./Luma/components/Mono.js":["18073",[3426]],"./Ai302/components/Avatar.js":["69064",[22001]],"./NewAPI/components/Color.js":["28886",[14619]],"./Snowflake/components/Mono.js":["70300",[63821]],"./Kimi/components/Combine.js":["95560",[60145]],"./Zeabur/components/Avatar.js":["41355",[70104]],"./Coqui/components/Color.js":["61085",[12942]],"./SiliconCloud/components/Avatar.js":["84588",[2301]],"./AzureAI/components/Mono.js":["77637",[28166]],"./AiMass/components/Color.js":["97762",[40191]],"./MetaGPT/components/Combine.js":["7916",[5373]],"./Wandb/components/Color.js":["55744",[31929]],"./Kluster/components/Avatar.js":["81968",[86761]],"./Wafer/components/Combine.js":["36169",[96498]],"./Ai302/components/Combine.js":["44321",[88730]],"./SambaNova/components/Color.js":["52664",[5825]],"./CyberCut/components/Text.js":["75727",[9476]],"./Vidu/components/Avatar.js":["54864",[91369]],"./CentML/components/Text.js":["61983",[41204]],"./CodeGeeX/components/Mono.js":["65900",[23869]],"./DeepMind/components/Combine.js":["91672",[8417]],"./Perceptron/components/Avatar.js":["36604",[813]],"./Higress/components/Avatar.js":["50561",[32634]],"./BaiduCloud/components/Text.js":["19596",[35709]],"./SenseNova/components/Mono.js":["79200",[95353]],"./Copilot/components/Color.js":["8964",[741]],"./LangSmith/components/Avatar.js":["93249",[18906]],"./Player2/components/Combine.js":["74465",[64602]],"./CelestoAI/components/Mono.js":["26135",[10044]],"./CogVideo/components/Text.js":["31126",[75803]],"./CommandCode/components/Mono.js":["74604",[10653]],"./Microsoft/components/Mono.js":["96260",[87333]],"./StreamLake/components/Text.js":["9751",[98364]],"./Vercel/components/Text.js":["98751",[64340]],"./AirJelly/components/Text.js":["22656",[42873]],"./IBM/components/Combine.js":["84900",[87493]],"./Menlo/components/Text.js":["50985",[59794]],"./Rwkv/components/Text.js":["39386",[98695]],"./SophNet/components/Text.js":["8017",[40650]],"./Cloudflare/components/Color.js":["25309",[61582]],"./ElevenX/components/Text.js":["31043",[58624]],"./Baseten/components/Text.js":["30376",[6065]],"./Gemma/components/Avatar.js":["48459",[68728]],"./LlmApi/components/Color.js":["92895",[37396]],"./Nova/components/Avatar.js":["54720",[49881]],"./DeepAI/components/Avatar.js":["75278",[92739]],"./Crusoe/components/Avatar.js":["90359",[63132]],"./Dbrx/components/Text.js":["90916",[14149]],"./Codex/components/Mono.js":["63027",[44656]],"./Hyperbolic/components/Avatar.js":["59633",[57802]],"./Qiniu/components/Mono.js":["19734",[85947]],"./SophNet/components/Avatar.js":["36571",[93512]],"./Tiangong/components/Mono.js":["74869",[45622]],"./Skywork/components/Text.js":["12688",[32649]],"./Viggle/components/Combine.js":["98506",[71927]],"./Ideogram/components/Combine.js":["51004",[14573]],"./Windsurf/components/Avatar.js":["68960",[8089]],"./Qwen/components/Combine.js":["17239",[80476]],"./Ai21/components/Mono.js":["13491",[29744]],"./Bing/components/Text.js":["58198",[8955]],"./Menlo/components/Combine.js":["9565",[72110]],"./Xinference/components/Text.js":["98987",[11736]],"./DeepSeek/components/Text.js":["71942",[7723]],"./Magic/components/Combine.js":["25719",[66044]],"./Langfuse/components/Mono.js":["76721",[55690]],"./Google/components/Mono.js":["2327",[93116]],"./Gradio/components/Color.js":["19292",[13549]],"./RSSHub/components/Text.js":["20139",[16280]],"./Ace/components/Combine.js":["93263",[88004]],"./Glama/components/Combine.js":["76866",[57471]],"./Phidata/components/Mono.js":["17735",[80140]],"./LG/components/Avatar.js":["54868",[37365]],"./SillyTavern/components/Avatar.js":["7151",[37540]],"./Meta/components/Avatar.js":["82051",[45632]],"./Tavily/components/Text.js":["72989",[64334]],"./WorkersAI/components/Color.js":["25607",[87596]],"./TencentCloud/components/Combine.js":["17784",[75745]],"./UnionAlpha/components/Text.js":["76913",[71434]],"./LG/components/Text.js":["98846",[53802]],"./Langfuse/components/Text.js":["91069",[49326]],"./Meshy/components/Mono.js":["97192",[9169]],"./BAAI/components/Text.js":["36067",[54528]],"./Civitai/components/Text.js":["75113",[78930]],"./Perceptron/components/Text.js":["486",[26059]],"./Ai360/components/Text.js":["12129",[97914]],"./LmStudio/components/Combine.js":["12937",[6514]],"./HuaweiCloud/components/Color.js":["68674",[39583]],"./Agui/components/Text.js":["45698",[62015]],"./PPIO/components/Text.js":["14692",[97925]],"./Replit/components/Color.js":["60320",[10617]],"./WorldRouter/components/Avatar.js":["73603",[38240]],"./HappyHorse/components/Combine.js":["15375",[46628]],"./Bing/components/Color.js":["53274",[4231]],"./Firecrawl/components/Avatar.js":["66585",[35682]],"./Hunyuan/components/Text.js":["49102",[8547]],"./SpeedAI/components/Text.js":["64025",[20162]],"./Automatic/components/Color.js":["12285",[99694]],"./Moxt/components/Mono.js":["51100",[70989]],"./Recraft/components/Mono.js":["9473",[47034]],"./DeepInfra/components/Combine.js":["77662",[45395]],"./Trae/components/Mono.js":["90452",[23285]],"./Decart/components/Text.js":["66953",[71794]],"./BAAI/components/Avatar.js":["17661",[55694]],"./Qingyan/components/Text.js":["74659",[56896]],"./Venice/components/Combine.js":["94042",[13447]],"./Ai360/components/Avatar.js":["77963",[2232]],"./Firecrawl/components/Color.js":["96145",[85834]],"./Hunyuan/components/Mono.js":["80306",[98735]],"./Reve/components/Combine.js":["80674",[69343]],"./Bocha/components/Combine.js":["1387",[10840]],"./Xuanyuan/components/Color.js":["67187",[94512]],"./Azure/components/Combine.js":["47755",[1016]],"./Phala/components/Mono.js":["17364",[2677]],"./TII/components/Text.js":["28806",[5579]],"./Liquid/components/Text.js":["17188",[88261]],"./NPLCloud/components/Mono.js":["85359",[44068]],"./V0/components/Mono.js":["44022",[77307]],"./Yi/components/Mono.js":["40122",[44807]],"./BAAI/components/Combine.js":["53475",[34432]],"./StateCloud/components/Text.js":["64778",[6423]],"./Sora/components/Mono.js":["52007",[2444]],"./BurnCloud/components/Combine.js":["89808",[54025]],"./Morph/components/Text.js":["45770",[49527]],"./CodeBuddy/components/Color.js":["3397",[99654]],"./Devin/components/Combine.js":["82770",[16623]],"./Junie/components/Text.js":["66791",[70796]],"./Search1API/components/Mono.js":["38577",[40778]],"./Stability/components/Combine.js":["18559",[89140]],"./Clipdrop/components/Avatar.js":["65793",[8122]],"./Gemini/components/Combine.js":["44087",[26460]],"./CelestoAI/components/Combine.js":["72423",[68908]],"./GiteeAI/components/Text.js":["47664",[67113]],"./KwaiKAT/components/TextColor.js":["97789",[97710]],"./Lambda/components/Text.js":["94215",[70124]],"./Friendli/components/Avatar.js":["81834",[94862]],"./Anthropic/components/Mono.js":["31580",[65005]],"./Grok/components/Avatar.js":["9881",[97154]],"./IFlyTekCloud/components/Color.js":["6131",[95696]],"./NPLCloud/components/Combine.js":["19247",[24196]],"./Featherless/components/Text.js":["15334",[99627]],"./Phind/components/Mono.js":["18745",[162]],"./SophNet/components/Color.js":["28999",[80076]],"./IFlyTekCloud/components/Avatar.js":["65815",[63484]],"./Viggle/components/Avatar.js":["94930",[3087]],"./LG/components/Combine.js":["51877",[95014]],"./CogView/components/Color.js":["76918",[91803]],"./SophNet/components/Mono.js":["38413",[19294]],"./Haiper/components/Combine.js":["22377",[35826]],"./Bailian/components/Color.js":["47568",[34889]],"./Spark/components/Mono.js":["69573",[41222]],"./DeepCogito/components/Text.js":["76465",[30506]],"./PrunaAI/components/Mono.js":["25722",[67527]],"./Poolside/components/Text.js":["59549",[78510]],"./Featherless/components/Color.js":["35050",[87543]],"./Tencent/components/Text.js":["36245",[77430]],"./Sakana/components/Text.js":["26185",[36338]],"./Voyage/components/Color.js":["14760",[43432]],"./AlibabaCloud/components/Avatar.js":["97447",[66796]],"./LeptonAI/components/Combine.js":["35210",[32503]],"./Bedrock/components/Mono.js":["82442",[24983]],"./Menlo/components/Avatar.js":["95971",[47104]],"./AgentVoice/components/Avatar.js":["35247",[20420]],"./Straico/components/Combine.js":["8127",[53716]],"./Hedra/components/Avatar.js":["4626",[55375]],"./Nebius/components/Mono.js":["41816",[17761]],"./Amp/components/Text.js":["6618",[65991]],"./Yandex/components/Text.js":["47481",[23394]],"./Ai302/components/Text.js":["49981",[67278]],"./Figma/components/Mono.js":["56092",[58285]],"./Hailuo/components/Avatar.js":["80372",[1013]],"./Bocha/components/Color.js":["75773",[33582]],"./BaiduCloud/components/Color.js":["19092",[81909]],"./HappyHorse/components/Mono.js":["97455",[94084]],"./Huawei/components/Combine.js":["28145",[58058]],"./Meshy/components/Avatar.js":["91990",[31995]],"./Meshy/components/Text.js":["60744",[42769]],"./Ollama/components/Mono.js":["83014",[55467]],"./OpenCode/components/Avatar.js":["267",[64344]],"./NewAPI/components/Text.js":["99898",[66439]],"./Cohere/components/Mono.js":["98292",[70549]],"./SambaNova/components/Combine.js":["74950",[77419]],"./Stepfun/components/Text.js":["17743",[98756]],"./Upstage/components/Mono.js":["90033",[41994]],"./Zencoder/components/Text.js":["79790",[57283]],"./OpenChat/components/Text.js":["91354",[91047]],"./CyberCut/components/Avatar.js":["40897",[35994]],"./Bocha/components/Text.js":["98315",[14808]],"./LangSmith/components/Text.js":["60335",[79652]],"./AgnesAI/components/Mono.js":["98168",[87137]],"./Ai21/components/Brand.js":["18859",[38808]],"./ComfyUI/components/Combine.js":["20628",[17237]],"./Targon/components/Mono.js":["35025",[80714]],"./Lightricks/components/Avatar.js":["69146",[79847]],"./Github/components/Text.js":["12231",[20780]],"./Flowith/components/Avatar.js":["76449",[94426]],"./TuriX/components/Avatar.js":["46952",[95473]],"./SiliconCloud/components/Combine.js":["29064",[40721]],"./Higress/components/Color.js":["43833",[11746]],"./Fal/components/Color.js":["73801",[10802]],"./Github/components/Mono.js":["90951",[77548]],"./Morph/components/Mono.js":["3494",[88171]],"./ComfyUI/components/Text.js":["97442",[90047]],"./KwaiKAT/components/Avatar.js":["88958",[20755]],"./Exa/components/Mono.js":["47284",[77909]],"./Haiper/components/Avatar.js":["36967",[26092]],"./Spark/components/Color.js":["73087",[45396]],"./AssemblyAI/components/Avatar.js":["39492",[62597]],"./Decart/components/Mono.js":["469",[30038]],"./ElevenLabs/components/Combine.js":["46653",[53134]],"./Infermatic/components/Avatar.js":["86500",[6821]],"./Jina/components/Avatar.js":["48962",[31359]],"./Railway/components/Mono.js":["81691",[51752]],"./StateCloud/components/Color.js":["96230",[27595]],"./Flora/components/Combine.js":["95148",[67133]],"./Tencent/components/BrandColor.js":["50014",[82739]],"./ZAI/components/Combine.js":["7622",[34795]],"./CentML/components/BrandColor.js":["54436",[78949]],"./DeepAI/components/Text.js":["14576",[60041]],"./Adobe/components/Text.js":["8719",[66596]],"./Flora/components/Avatar.js":["51144",[38641]],"./RSSHub/components/Mono.js":["23475",[71088]],"./Straico/components/Text.js":["63343",[63908]],"./AlibabaCloud/components/Mono.js":["11913",[44306]],"./Kagi/components/Text.js":["41256",[20465]],"./Alibaba/components/Color.js":["14856",[90513]],"./Venice/components/Color.js":["65492",[38485]],"./Bilibili/components/Combine.js":["27330",[57183]],"./AdobeFirefly/components/Avatar.js":["73154",[39893,98335]],"./Gemma/components/Combine.js":["70805",[51350]],"./Hunyuan/components/Combine.js":["14176",[99513]],"./Wenxin/components/Avatar.js":["88907",[51192]],"./CapCut/components/Mono.js":["67236",[66437]],"./Viggle/components/Mono.js":["73188",[12677]],"./Dalle/components/Avatar.js":["14712",[59905]],"./Runway/components/Combine.js":["47490",[50079]],"./CodeFlicker/components/Avatar.js":["4301",[20414]],"./Suno/components/Combine.js":["4095",[86740]],"./TopazLabs/components/Mono.js":["31920",[48201]],"./FishAudio/components/Avatar.js":["71838",[10675]],"./Apertis/components/Color.js":["4990",[90163]],"./Bocha/components/Mono.js":["9747",[71216]],"./DigitalOcean/components/Text.js":["80078",[76195]],"./Amp/components/Combine.js":["1580",[40029]],"./Glif/components/Text.js":["14252",[56765]],"./GoogleCloud/components/Color.js":["51580",[24813]],"./AirJelly/components/Color.js":["89088",[46297]],"./KiloCode/components/Avatar.js":["84750",[21859]],"./Arcee/components/Color.js":["32550",[72587]],"./BilibiliIndex/components/Avatar.js":["36478",[88755]],"./Cerebras/components/Combine.js":["97502",[3731]],"./AiHubMix/components/Color.js":["65327",[47844]],"./Decart/components/Combine.js":["18749",[45038]],"./AzureAI/components/Color.js":["60031",[58676]],"./AiStudio/components/Combine.js":["31574",[44123]],"./ChatGLM/components/Color.js":["48096",[78585]],"./CopilotKit/components/Avatar.js":["68262",[38648]],"./Lightricks/components/Mono.js":["66796",[52285]],"./Hunyuan/components/Avatar.js":["52852",[27285]],"./DeepL/components/Combine.js":["27564",[4221]],"./LobeHub/components/Avatar.js":["62717",[28934,54446]],"./CrewAI/components/Avatar.js":["43017",[44882]],"./Crusoe/components/Color.js":["97299",[89392]],"./Magic/components/Mono.js":["4071",[24940]],"./OpenClaw/components/Mono.js":["22559",[56756]],"./Perplexity/components/Avatar.js":["64224",[58521]],"./Qoder/components/Combine.js":["55323",[84360]],"./CogVideo/components/Color.js":["49370",[64999]],"./Qiniu/components/Color.js":["11766",[15131]],"./Rwkv/components/Mono.js":["37174",[56219]],"./Slock/components/Avatar.js":["54879",[98132]],"./Ai21/components/BrandColor.js":["50416",[62825]],"./AionLabs/components/Color.js":["38937",[418]],"./Tiangong/components/Avatar.js":["91331",[44256]],"./Upstage/components/Text.js":["8221",[61742]],"./NotebookLM/components/Text.js":["45793",[13411]],"./Dify/components/Color.js":["81062",[67115]],"./MyShell/components/Combine.js":["36718",[65923]],"./Aya/components/Text.js":["26965",[5814]],"./DeepCogito/components/Combine.js":["21381",[18310]],"./Relace/components/Avatar.js":["54176",[44985]],"./Alibaba/components/TextCn.js":["94517",[502]],"./OpenHands/components/Mono.js":["30230",[65819]],"./SearchApi/components/Text.js":["48176",[57705]],"./Lovable/components/Avatar.js":["75851",[51704]],"./Wandb/components/Mono.js":["87600",[63401]],"./NotebookLM/components/Combine.js":["41984",[43289]],"./Flowith/components/Text.js":["14991",[99076]],"./SillyTavern/components/Combine.js":["21473",[63194]],"./TencentCloud/components/Mono.js":["80378",[3975]],"./Wafer/components/Text.js":["85189",[92230]],"./CodeFlicker/components/Color.js":["44309",[56950]],"./GithubCopilot/components/Text.js":["47513",[12706]],"./Lovable/components/Text.js":["79521",[71322]],"./Targon/components/Text.js":["36861",[84110]],"./Rwkv/components/Color.js":["19926",[30491]],"./Ideogram/components/Avatar.js":["84440",[86241]],"./PPIO/components/Color.js":["23580",[89261]],"./PaLM/components/Color.js":["88164",[63749]],"./Copilot/components/Text.js":["26140",[10605]],"./Crusoe/components/Mono.js":["43993",[40226]],"./PixVerse/components/Mono.js":["14878",[53619]],"./Bailian/components/Avatar.js":["2254",[5059]],"./Morph/components/Color.js":["83270",[96075]],"./GmiCloud/components/Combine.js":["4902",[50987]],"./Parasail/components/Mono.js":["66767",[24580]],"./Qiniu/components/Avatar.js":["81896",[65009]],"./Cerebras/components/Mono.js":["9729",[1306]],"./Gemma/components/Simple.js":["92196",[21029]],"./Hedra/components/Text.js":["22108",[24493]],"./Notion/components/Text.js":["28013",[10910]],"./Infermatic/components/Mono.js":["80098",[12511]],"./DeepAI/components/Mono.js":["65632",[45689]],"./Jina/components/Mono.js":["74676",[5813]],"./Ollama/components/Combine.js":["71612",[92717]],"./ChatGLM/components/Combine.js":["9854",[84275]],"./Hyperbolic/components/Mono.js":["95951",[81988]],"./Bfl/components/Text.js":["20820",[67285]],"./CometAPI/components/Color.js":["98384",[1929]],"./Antigravity/components/Text.js":["17466",[16359]],"./Flux/components/Text.js":["15867",[94440]],"./Claude/components/Avatar.js":["43620",[92837]],"./LlamaIndex/components/Combine.js":["78992",[62638,92096]],"./Copilot/components/Combine.js":["27562",[67927]],"./Apertis/components/Mono.js":["21502",[70227]],"./Greptile/components/Color.js":["44696",[1153]],"./Pollinations/components/Text.js":["65836",[66333]],"./Lovart/components/Avatar.js":["87021",[78878]],"./OpenRouter/components/Text.js":["23437",[29406]],"./Relace/components/Text.js":["78370",[17215]],"./Greptile/components/Mono.js":["39912",[26929]],"./SearchApi/components/Avatar.js":["94446",[83747]],"./NewAPI/components/Mono.js":["71606",[40219]],"./TencentCloud/components/Color.js":["21034",[40599]],"./Kwaipilot/components/Text.js":["6142",[44947]],"./VectorizerAI/components/Avatar.js":["91319",[89468]],"./Figma/components/Text.js":["77028",[65893]],"./Volcengine/components/Combine.js":["10686",[97747]],"./Baichuan/components/Text.js":["48921",[46146]],"./WaveSpeed/components/Text.js":["25376",[28185]],"./Anspire/components/Avatar.js":["8060",[30285]],"./Doubao/components/Mono.js":["62458",[80199]],"./Midjourney/components/Avatar.js":["24600",[72897]],"./Manus/components/Mono.js":["53656",[15073]],"./DotsStudio/components/Avatar.js":["5184",[60793]],"./XAI/components/Combine.js":["66164",[79413]],"./Chutes/components/Text.js":["78754",[88351]],"./NanoBanana/components/Text.js":["47675",[53448]],"./OpenHands/components/Combine.js":["68524",[37917]],"./GiteeAI/components/Mono.js":["45920",[9689]],"./ByteDance/components/Color.js":["99135",[21460]],"./Colab/components/Text.js":["77821",[3118]],"./Menlo/components/Color.js":["82415",[65668]],"./Antigravity/components/Mono.js":["75222",[70587]],"./Pi/components/Avatar.js":["73277",[44078]],"./CopilotKit/components/Color.js":["57800",[72593]],"./Moxt/components/Avatar.js":["98218",[74916]],"./CapCut/components/Text.js":["91324",[24237]],"./PrunaAI/components/Color.js":["84586",[28183]],"./AiHubMix/components/Mono.js":["74325",[80726]],"./Claude/components/Combine.js":["71888",[76873]],"./ModelScope/components/Combine.js":["63683",[94560]],"./Replit/components/Combine.js":["17054",[42675]],"./Infinigence/components/Text.js":["42599",[44524]],"./MyShell/components/Color.js":["78704",[16297]],"./Kiro/components/Avatar.js":["88985",[60834]],"./Player2/components/Mono.js":["48209",[97898]],"./Bocha/components/Avatar.js":["84533",[69078]],"./Copilot/components/Avatar.js":["83762",[16527]],"./Fal/components/Combine.js":["19311",[48996]],"./Inceptron/components/Text.js":["15266",[77311]],"./AkashChat/components/Avatar.js":["85412",[27333]],"./MCP/components/Combine.js":["68174",[58531]],"./HappyHorse/components/Text.js":["55327",[18548]],"./PPIO/components/TextCn.js":["65241",[56322]],"./LlmApi/components/Mono.js":["30981",[77382]],"./StateCloud/components/Avatar.js":["18776",[24897]],"./Ai21/components/Avatar.js":["44917",[65526]],"./Gemma/components/Color.js":["10167",[25884]],"./TII/components/Avatar.js":["74396",[91245]],"./Vllm/components/Mono.js":["53505",[54970]],"./OpenWebUI/components/Mono.js":["76328",[49]],"./ClaudeCode/components/Avatar.js":["26802",[34054]],"./Huawei/components/Color.js":["6299",[7272]],"./Perplexity/components/Color.js":["71086",[79555]],"./Sakana/components/Avatar.js":["86851",[93536]],"./LangGraph/components/Color.js":["90952",[48721]],"./McpSo/components/Color.js":["57290",[87991]],"./CommandA/components/Avatar.js":["96582",[72139]],"./Replit/components/Text.js":["88115",[14105]],"./Xinference/components/Color.js":["86685",[36494]],"./Anyscale/components/Color.js":["51712",[39929]],"./DeepSeek/components/Mono.js":["12346",[52327]],"./PaLM/components/Avatar.js":["45554",[56559]],"./Reka/components/Mono.js":["59181",[54814]],"./Snowflake/components/Combine.js":["53362",[27759]],"./NousResearch/components/Combine.js":["41052",[37323,55053]],"./CrewAI/components/Combine.js":["91383",[49948]],"./Kwaipilot/components/Mono.js":["31618",[19071]],"./Replit/components/Avatar.js":["34334",[14163]],"./Grok/components/Mono.js":["12247",[3484]],"./Clipdrop/components/Text.js":["89327",[58212]],"./Anyscale/components/Combine.js":["31614",[17395]],"./CodeFlicker/components/Text.js":["25075",[76080]],"./Upstage/components/Combine.js":["41921",[58458]],"./Flora/components/Text.js":["45658",[4487]],"./ClaudeCode/components/Color.js":["55373",[99134]],"./Xuanyuan/components/Text.js":["31445",[33334]],"./Zapier/components/Combine.js":["32685",[49598]],"./HermesAgent/components/Text.js":["93639",[18796]],"./Phidata/components/Combine.js":["79607",[31420]],"./CodeGeeX/components/Color.js":["10444",[13117]],"./Dolphin/components/Text.js":["54428",[93325]],"./NousResearch/components/Text.js":["57450",[98679]],"./Doubao/components/Combine.js":["47320",[20129]],"./Langfuse/components/Color.js":["51147",[42264]],"./Yuanbao/components/Combine.js":["65993",[4722]],"./ModelScope/components/Mono.js":["80059",[91656]],"./StreamLake/components/Mono.js":["70839",[796]],"./Automatic/components/Mono.js":["50579",[77648]],"./Tripo/components/Color.js":["64956",[77133]],"./DreamMachine/components/Avatar.js":["55070",[71731]],"./PaLM/components/Combine.js":["78666",[90711]],"./SubModel/components/Avatar.js":["17213",[11630]],"./Poe/components/Color.js":["12",[54333]],"./MCP/components/Avatar.js":["25646",[31299]],"./AgentVoice/components/Combine.js":["93217",[48154]],"./Anthropic/components/Avatar.js":["48042",[9783]],"./DocSearch/components/Combine.js":["96128",[98009]],"./Gemini/components/Mono.js":["84903",[72236]],"./Groq/components/Text.js":["77325",[30558]],"./LeptonAI/components/Mono.js":["38948",[8037]],"./LangChain/components/Color.js":["10683",[71144]],"./StreamLake/components/Color.js":["51569",[96394]],"./Anspire/components/Text.js":["58182",[98955]],"./Glif/components/Avatar.js":["69826",[65055]],"./Nvidia/components/Combine.js":["3771",[61928]],"./VertexAI/components/Mono.js":["87344",[75593]],"./Cohere/components/Avatar.js":["69890",[30463]],"./Kolors/components/Color.js":["92892",[68077]],"./Straico/components/Color.js":["32953",[16706]],"./WorkersAI/components/Combine.js":["42213",[3526]],"./XiaomiMiMo/components/Avatar.js":["57693",[15438]],"./XiaomiMiMo/components/Text.js":["70339",[45824]],"./ZAI/components/Avatar.js":["21430",[18523]],"./AlephAlpha/components/Avatar.js":["83790",[40003]],"./SenseNova/components/BrandColor.js":["77435",[10600]],"./StreamLake/components/Avatar.js":["22425",[42786]],"./Zencoder/components/Combine.js":["80960",[74809]],"./Kolors/components/Combine.js":["89330",[91119]],"./Reve/components/Text.js":["90932",[19605]],"./TencentCloud/components/Text.js":["4870",[47723]],"./Vercel/components/Avatar.js":["80593",[90506]],"./LeptonAI/components/Color.js":["3428",[67205]],"./Bilibili/components/Avatar.js":["34746",[81255]],"./Runway/components/Avatar.js":["29690",[68679]],"./Cerebras/components/Text.js":["56461",[5822]],"./HuggingFace/components/Mono.js":["42930",[9167]],"./Kwaipilot/components/Combine.js":["65616",[99561]],"./CentML/components/Color.js":["26217",[97426]],"./MetaAI/components/Combine.js":["423",[88300]],"./Claude/components/Color.js":["36082",[31023]],"./ComfyUI/components/Mono.js":["6478",[47299]],"./Hyperbolic/components/Color.js":["18761",[18162]],"./Mistral/components/Color.js":["15016",[50865]],"./GoogleCloud/components/Mono.js":["62332",[18317]],"./Parasail/components/Text.js":["33599",[88948]],"./Hailuo/components/Combine.js":["13824",[40825]],"./GeminiCLI/components/Combine.js":["82979",[49632]],"./GoogleCloud/components/BrandColor.js":["91935",[59700]]};function i(e){if(!n.o(a,e))return Promise.resolve().then(()=>{var t=Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t});var t=a[e],i=t[0];return Promise.all(t[1].map(function(e){return n.e(e)})).then(()=>n(i))}i.keys=()=>Object.keys(a),i.id=96254,e.exports=i},34293(e,t,n){"use strict";var a=n(72361),i=n(12673),o=n(4895),s=n(43178),r=n(57717),l=n(74401),c=n(23307),d=n(66794),u=n(6702),h=n(72868);function p(e){let{t}=(0,u.Bd)(),n=(0,c.m)();return(0,a.jsxs)(d.N,{value:e.group,dragListener:!1,dragMomentum:!1,dragControls:n,className:"bg-background relative flex min-w-0 items-center gap-2 rounded-lg border p-2",children:[(0,a.jsx)(h.$,{type:"button",variant:"ghost",size:"icon-sm",className:"text-muted-foreground cursor-grab touch-none font-mono active:cursor-grabbing","aria-label":t("Drag {{group}} to reorder",{group:e.group}),title:t("Drag {{group}} to reorder",{group:e.group}),onPointerDown:e=>{n.start(e)},onKeyDown:t=>{"ArrowUp"===t.key&&(t.preventDefault(),e.onMove(e.index,"up")),"ArrowDown"===t.key&&(t.preventDefault(),e.onMove(e.index,"down"))},children:(0,a.jsx)(l.n,{icon:i.A,strokeWidth:2,"aria-hidden":"true"})}),e.leading,(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"min-w-0 truncate text-sm font-medium",title:e.group,children:e.group}),e.children]}),(0,a.jsxs)("div",{className:"flex shrink-0 gap-1",children:[(0,a.jsx)(h.$,{type:"button",variant:"ghost",size:"icon-sm",disabled:0===e.index,"aria-label":t("Move {{group}} up",{group:e.group}),onClick:()=>e.onMove(e.index,"up"),children:(0,a.jsx)(l.n,{icon:o.A,strokeWidth:2,"aria-hidden":"true"})}),(0,a.jsx)(h.$,{type:"button",variant:"ghost",size:"icon-sm",disabled:e.index===e.count-1,"aria-label":t("Move {{group}} down",{group:e.group}),onClick:()=>e.onMove(e.index,"down"),children:(0,a.jsx)(l.n,{icon:s.A,strokeWidth:2,"aria-hidden":"true"})}),(0,a.jsx)(h.$,{type:"button",variant:"ghost",size:"icon-sm","aria-label":t("Remove {{group}}",{group:e.group}),onClick:()=>e.onRemove(e.group),children:(0,a.jsx)(l.n,{icon:r.A,strokeWidth:2,"aria-hidden":"true"})})]})]})}n.d(t,{E:()=>p})},73280(e,t,n){"use strict";var a=n(72361),i=n(6702),o=n(92379),s=n(72868),r=n(56275);function l(e){let{t}=(0,i.Bd)(),{title:n,desc:l,children:c,className:d,confirmText:u,cancelBtnText:h,destructive:p,isLoading:m,disabled:g=!1,handleConfirm:f,...y}=e;return(0,a.jsx)(o.Lt,{...y,children:(0,a.jsxs)(o.EO,{className:(0,r.cn)(d&&d),children:[(0,a.jsxs)(o.wd,{className:"text-start",children:[(0,a.jsx)(o.r7,{children:n}),(0,a.jsx)(o.$v,{render:(0,a.jsx)("div",{}),children:l})]}),c,(0,a.jsxs)(o.ck,{children:[(0,a.jsx)(o.Zr,{disabled:m,children:h??t("Cancel")}),(0,a.jsx)(s.$,{variant:p?"destructive":"default",onClick:f,disabled:g||m,children:u??t("Continue")})]})]})})}n.d(t,{T:()=>l})},18557(e,t,n){"use strict";var a=n(72361),i=n(67834),o=n(99893),s=n(6702),r=n(72868),l=n(47303),c=n(29625),d=n(56275);function u(e){let{value:t,children:n,className:u,iconClassName:h,variant:p="ghost",size:m="icon",tooltip:g,successTooltip:f,"aria-label":y}=e,{t:b}=(0,s.Bd)(),{copiedText:v,copyToClipboard:k}=(0,c.C)({notify:!1}),x=v===t,w=g??b("Copy to clipboard"),C=f??b("Copied!"),A=b("Copied"),S=(0,a.jsxs)(r.$,{variant:p,size:m,className:(0,d.cn)("shrink-0",u),onClick:()=>k(t),"aria-label":x?A:y??w,children:[x?(0,a.jsx)(i.A,{className:(0,d.cn)("text-success",h)}):(0,a.jsx)(o.A,{className:(0,d.cn)(h)}),n]});return g||f?(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{render:S}),(0,a.jsx)(l.ZI,{children:(0,a.jsx)("p",{children:x?C:w})})]}):S}n.d(t,{i:()=>u})},98505(e,t,n){"use strict";var a=n(72361);n(68413);var i=n(56275);function o(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"badge-cell",className:(0,i.cn)("-ml-1.5 flex max-w-full min-w-0 items-center gap-1 overflow-hidden [&_[data-slot=status-badge]]:max-w-full [&_[data-slot=status-badge]]:min-w-0",t),...n})}n.d(t,{a:()=>o})},63643(e,t,n){"use strict";var a=n(72361),i=n(45666),o=n(43641),s=n(4421),r=n(5333),l=n(6702),c=n(72868),d=n(84368),u=n(56275);function h(e){let{column:t,title:n,className:h}=e,{t:p}=(0,l.Bd)();return t.getCanSort()?(0,a.jsx)("div",{className:(0,u.cn)("flex items-center space-x-2",h),children:(0,a.jsxs)(d.rI,{children:[(0,a.jsxs)(d.ty,{render:(0,a.jsx)(c.$,{variant:"ghost",size:"sm",className:"data-popup-open:bg-accent -ms-3 h-8"}),children:[(0,a.jsx)("span",{children:n}),"desc"===t.getIsSorted()?(0,a.jsx)(i.A,{className:"ms-2 h-4 w-4"}):"asc"===t.getIsSorted()?(0,a.jsx)(o.A,{className:"ms-2 h-4 w-4"}):(0,a.jsx)(s.A,{className:"ms-2 h-4 w-4"})]}),(0,a.jsxs)(d.SQ,{align:"start",children:[(0,a.jsxs)(d._2,{onClick:()=>t.toggleSorting(!1),children:[(0,a.jsx)(o.A,{className:"text-muted-foreground/70 size-3.5"}),p("Asc")]}),(0,a.jsxs)(d._2,{onClick:()=>t.toggleSorting(!0),children:[(0,a.jsx)(i.A,{className:"text-muted-foreground/70 size-3.5"}),p("Desc")]}),t.getCanHide()&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(d.mB,{}),(0,a.jsxs)(d._2,{onClick:()=>t.toggleVisibility(!1),children:[(0,a.jsx)(r.A,{className:"text-muted-foreground/70 size-3.5"}),p("Hide")]})]})]})]})}):(0,a.jsx)("div",{className:(0,u.cn)(h),children:n})}n.d(t,{w:()=>h})},43494(e,t,n){"use strict";var a=n(72361),i=n(50947);n(68413);var o=n(72868),s=n(84368),r=n(56275);function l(e){return(0,a.jsxs)(s.rI,{modal:e.modal,onOpenChange:e.onOpenChange,children:[(0,a.jsx)(s.ty,{render:(0,a.jsx)(o.$,{variant:"ghost",size:"icon",className:"data-popup-open:bg-muted","aria-label":e.ariaLabel}),children:(0,a.jsx)(i.A,{"aria-hidden":"true"})}),(0,a.jsx)(s.SQ,{align:"end",className:(0,r.cn)("w-48",e.contentClassName),children:e.children})]})}n.d(t,{C:()=>l})},81532(e,t,n){"use strict";var a=n(72361);n(68413);var i=n(47303),o=n(56275);function s(e){let{children:t,cellClassName:n,className:s,contentClassName:r,side:l="top",tooltipClassName:c,tooltipContent:d,tabIndex:u}=e,h=d??function e(t){return"string"==typeof t||"number"==typeof t?String(t):Array.isArray(t)?t.map(e).join(""):""}(t);return h?(0,a.jsxs)(i.m_,{children:[(0,a.jsx)(i.k$,{render:(0,a.jsx)("div",{tabIndex:u,className:(0,o.cn)("block max-w-full min-w-0 truncate",n,s)}),children:(0,a.jsx)("div",{className:(0,o.cn)("truncate",r),children:t})}),(0,a.jsx)(i.ZI,{side:l,className:(0,o.cn)("max-w-xs break-all",c),children:h})]}):(0,a.jsx)("div",{tabIndex:u,className:(0,o.cn)("block max-w-full min-w-0 truncate",n,s),children:t})}n.d(t,{T:()=>s})},13987(e,t,n){"use strict";n.d(t,{ak:()=>f.a,Yt:()=>x,JM:()=>eE,Z0:()=>eF,Of:()=>F,wZ:()=>g.w,dD:()=>U,cx:()=>eM,Tw:()=>m,J2:()=>Y,CY:()=>ei.C,wk:()=>E,Oz:()=>eo,b7:()=>ej,io:()=>A,nV:()=>ek,hm:()=>_.h,TX:()=>w.T,n$:()=>B.n,uI:()=>eL,_b:()=>eI,bz:()=>eU});var a=n(72361),i=n(24623),o=n(63162),s=n(77768),r=n(29571),l=n(6702),c=n(72868),d=n(88288),u=n(56275);let h=[10,20,30,40,50,100],p=h.map(e=>({value:`${e}`,label:e}));function m(e){let{table:t,compact:n=!1}=e,{t:m}=(0,l.Bd)(),g=t.getState().pagination,f=g.pageIndex+1,y=g.pageSize,b=t.getPageCount(),v=t.getRowCount(),k=(0,u.ml)(f,b),x=k.map((e,t)=>({page:e,key:"..."===e?`gap-after-${k[t-1]}`:String(e)}));return n?(0,a.jsxs)("nav",{"aria-label":m("Page"),className:"flex w-full min-w-0 flex-wrap items-center justify-between gap-2 text-sm",children:[(0,a.jsxs)("span",{className:"text-muted-foreground min-w-0 [overflow-wrap:anywhere]",children:[m("Total:")," ",v.toLocaleString()]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(c.$,{variant:"outline",size:"icon",className:"size-11","aria-label":m("Go to previous page"),onClick:()=>t.previousPage(),disabled:!t.getCanPreviousPage(),children:(0,a.jsx)(i.A,{})}),(0,a.jsxs)("span",{className:"tabular-nums","aria-live":"polite",children:[f," / ",Math.max(1,b)]}),(0,a.jsx)(c.$,{variant:"outline",size:"icon",className:"size-11","aria-label":m("Go to next page"),onClick:()=>t.nextPage(),disabled:!t.getCanNextPage(),children:(0,a.jsx)(o.A,{})})]})]}):(0,a.jsx)("div",{className:(0,u.cn)("@container/pagination flex min-w-0 items-center justify-end overflow-clip"),style:{overflowClipMargin:1},children:(0,a.jsxs)("div",{className:"flex min-w-0 shrink-0 items-center gap-2 @xl/pagination:gap-3",children:[(0,a.jsxs)("div",{className:"flex shrink-0 items-baseline gap-1.5 text-xs font-medium whitespace-nowrap sm:text-sm",children:[(0,a.jsx)("span",{className:"text-muted-foreground/80",children:m("Total:")}),(0,a.jsx)("span",{className:"text-foreground tabular-nums",children:v.toLocaleString()})]}),(0,a.jsxs)("div",{className:"flex shrink-0 items-center gap-1.5 @lg/pagination:gap-2",children:[(0,a.jsx)("p",{className:"text-muted-foreground/80 hidden text-sm font-medium whitespace-nowrap @2xl/pagination:block",children:m("Rows per page")}),(0,a.jsxs)(d.l6,{items:p,value:`${y}`,onValueChange:e=>{t.setPageSize(Number(e))},children:[(0,a.jsx)(d.bq,{className:"text-foreground h-8 w-[64px] font-medium tabular-nums sm:w-[70px]",children:(0,a.jsx)(d.yv,{placeholder:y})}),(0,a.jsx)(d.gC,{side:"top",alignItemWithTrigger:!1,children:(0,a.jsx)(d.s3,{children:h.map(e=>(0,a.jsx)(d.eb,{value:`${e}`,children:e},e))})})]})]}),(0,a.jsxs)("div",{className:"flex min-w-0 shrink-0 items-center gap-1 @lg/pagination:gap-1.5 @xl/pagination:gap-2",children:[(0,a.jsxs)(c.$,{variant:"outline",className:"text-muted-foreground hover:text-foreground disabled:text-muted-foreground/50 size-8 p-0 @max-lg/pagination:hidden",onClick:()=>t.setPageIndex(0),disabled:!t.getCanPreviousPage(),children:[(0,a.jsx)("span",{className:"sr-only",children:m("Go to first page")}),(0,a.jsx)(s.A,{className:"h-4 w-4"})]}),(0,a.jsxs)(c.$,{variant:"outline",className:"text-muted-foreground hover:text-foreground disabled:text-muted-foreground/50 size-8 p-0",onClick:()=>t.previousPage(),disabled:!t.getCanPreviousPage(),children:[(0,a.jsx)("span",{className:"sr-only",children:m("Go to previous page")}),(0,a.jsx)(i.A,{className:"h-4 w-4"})]}),x.map(e=>{let{page:n,key:i}=e;return(0,a.jsx)("div",{className:"flex items-center",children:"..."===n?(0,a.jsx)("span",{className:"text-muted-foreground/60 px-0.5 text-sm @lg/pagination:px-1",children:"..."}):(0,a.jsxs)(c.$,{variant:f===n?"default":"outline",className:(0,u.cn)("h-8 min-w-8 px-2 tabular-nums",f===n?"font-semibold":"text-muted-foreground hover:text-foreground"),onClick:()=>t.setPageIndex(n-1),children:[(0,a.jsx)("span",{className:"sr-only",children:m("Go to page {{page}}",{page:n})}),n]})},i)}),(0,a.jsxs)(c.$,{variant:"outline",className:"text-muted-foreground hover:text-foreground disabled:text-muted-foreground/50 size-8 p-0",onClick:()=>t.nextPage(),disabled:!t.getCanNextPage(),children:[(0,a.jsx)("span",{className:"sr-only",children:m("Go to next page")}),(0,a.jsx)(o.A,{className:"h-4 w-4"})]}),(0,a.jsxs)(c.$,{variant:"outline",className:"text-muted-foreground hover:text-foreground disabled:text-muted-foreground/50 size-8 p-0 @max-lg/pagination:hidden",onClick:()=>t.setPageIndex(t.getPageCount()-1),disabled:!t.getCanNextPage(),children:[(0,a.jsx)("span",{className:"sr-only",children:m("Go to last page")}),(0,a.jsx)(r.A,{className:"h-4 w-4"})]})]})]})})}var g=n(63643),f=n(98505),y=n(68413),b=n(42817),v=n(74501),k=n(47303);function x(e){let{items:t,max:n=2,tooltipClassName:i,expandable:o=!1,expandLabel:s}=e,{t:r}=(0,l.Bd)();if(0===t.length)return(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:"-"});let d=t.length>n;return o&&d?(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-1",children:[(0,a.jsx)(b.M8,{items:t.slice(0,n),max:n,renderItem:e=>e}),(0,a.jsxs)(v.AM,{children:[(0,a.jsxs)(v.Wv,{render:(0,a.jsx)(c.$,{variant:"ghost",size:"sm",className:"h-6 shrink-0 px-1","aria-label":s??r("Show all tags")}),children:["+",t.length-n]}),(0,a.jsx)(v.hl,{className:"max-h-64 overflow-auto",children:(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:t})})]})]}):(0,a.jsx)(k.Bc,{children:(0,a.jsxs)(k.m_,{children:[(0,a.jsx)(k.k$,{render:(0,a.jsx)("div",{className:"-ml-1.5 max-w-full"}),children:(0,a.jsx)(b.M8,{items:t,max:n,renderItem:e=>e})}),d&&(0,a.jsx)(k.ZI,{side:"top",className:i??"border-border bg-popover max-h-48 max-w-[320px] overflow-y-auto p-2",children:(0,a.jsx)("div",{className:"flex flex-wrap gap-1",children:t})})]})})}var w=n(81532),C=n(84368);function A(e){let{table:t}=e,{t:n}=(0,l.Bd)(),i=y.useMemo(()=>t.getAllColumns().filter(e=>void 0!==e.accessorFn&&e.getCanHide()),[t]);return(0,a.jsxs)(C.rI,{modal:!1,children:[(0,a.jsx)(C.ty,{render:(0,a.jsx)(c.$,{variant:"outline",className:"shrink-0","aria-label":n("View")}),children:n("View")}),(0,a.jsx)(C.SQ,{align:"end",className:"w-[150px]",children:(0,a.jsxs)(C.I,{children:[(0,a.jsx)(C.lp,{children:n("Toggle columns")}),i.map(e=>(0,a.jsx)(C.hO,{className:"capitalize",checked:e.getIsVisible(),onCheckedChange:t=>e.toggleVisibility(!!t),children:"string"==typeof e.columnDef.header?e.columnDef.header:e.columnDef.meta?.label??e.id},e.id))]})})]})}var S=n(15762),P=n(55724),T=n(37116),I=n(1738),R=n(88753),N=n(59871),j=n(67834),M=n(90879),D=n(97653),O=n(38939);let L=y.memo(function(e){let{column:t,title:n,options:i,singleSelect:o=!1}=e,{t:s}=(0,l.Bd)(),r=t?.getFacetedUniqueValues(),d=new Set(t?.getFilterValue());return(0,a.jsxs)(v.AM,{children:[(0,a.jsxs)(v.Wv,{render:(0,a.jsx)(c.$,{variant:"outline",size:"sm",className:"h-8 border-dashed"}),children:[(0,a.jsx)(N.A,{className:"size-4"}),n,d?.size>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(O.w,{orientation:"vertical",className:"mx-2 h-4"}),(0,a.jsx)(M.E,{variant:"secondary",className:"rounded-sm px-1 font-normal lg:hidden",children:d.size}),(0,a.jsx)("div",{className:"hidden space-x-1 lg:flex",children:d.size>2?(0,a.jsxs)(M.E,{variant:"secondary",className:"rounded-sm px-1 font-normal",children:[d.size," ",s("selected")]}):i.filter(e=>d.has(e.value)).map(e=>(0,a.jsx)(M.E,{variant:"secondary",className:"rounded-sm px-1 font-normal",children:s(e.label)},e.value))})]})]}),(0,a.jsx)(v.hl,{className:"max-w-[360px] min-w-[200px] p-0",align:"start",children:(0,a.jsxs)(D.uB,{children:[(0,a.jsx)(D.G7,{placeholder:n}),(0,a.jsxs)(D.oI,{children:[(0,a.jsx)(D.xL,{children:s("No results found.")}),(0,a.jsx)(D.L$,{children:i.map(e=>{let n=d.has(e.value);return(0,a.jsxs)(D.h_,{onSelect:()=>{let n;return n=function(e,t,n){if(n)return e.has(t)?[]:[t];let a=new Set(e);return a.has(t)?a.delete(t):a.add(t),Array.from(a)}(d,e.value,o),void t?.setFilterValue(n.length?n:void 0)},children:[(0,a.jsx)("div",{className:(0,u.cn)("border-primary flex size-4 items-center justify-center rounded-sm border",n?"bg-primary text-primary-foreground":"opacity-50 [&_svg]:invisible"),children:(0,a.jsx)(j.A,{className:(0,u.cn)("text-background h-4 w-4")})}),e.iconNode?(0,a.jsx)("span",{className:"text-muted-foreground flex size-4 items-center justify-center",children:e.iconNode}):e.icon?(0,a.jsx)(e.icon,{className:"text-muted-foreground size-4"}):null,(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",title:s(e.label),children:s(e.label)}),"number"==typeof e.count?(0,a.jsx)("span",{className:"text-muted-foreground ms-auto flex h-4 min-w-4 items-center justify-center font-mono text-xs",children:e.count}):r?.get(e.value)?(0,a.jsx)("span",{className:"ms-auto flex h-4 w-4 items-center justify-center font-mono text-xs",children:r.get(e.value)}):null]},e.value)})}),d.size>0&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(D.fx,{}),(0,a.jsx)(D.L$,{children:(0,a.jsx)(D.h_,{onSelect:()=>t?.setFilterValue(void 0),className:"justify-center text-center",children:s("Clear filters")})})]})]})]})})]})});var q=n(6242);function U(e){let{t}=(0,l.Bd)(),[n,i]=(0,y.useState)(!0);return(0,a.jsxs)(q.Nt,{open:n,onOpenChange:i,className:(0,u.cn)("bg-card/50 flex min-w-0 flex-col rounded-lg border p-2.5",n&&(e.compact?"gap-2.5":"gap-2"),e.className),children:[(0,a.jsx)(q.Ke,{children:e.children}),(0,a.jsxs)("div",{className:(0,u.cn)(e.compact?"grid min-w-0 grid-cols-[auto_minmax(0,1fr)] items-start gap-2":"flex items-center justify-end gap-1.5"),children:[(0,a.jsx)(q.R6,{"aria-label":t(n?"Collapse":"Expand"),render:(0,a.jsx)(c.$,{variant:"ghost",size:"icon",className:(0,u.cn)("text-muted-foreground hover:text-foreground",e.compact?"size-9":"mr-auto size-7")}),children:(0,a.jsx)(T.A,{"aria-hidden":"true",className:(0,u.cn)("transition-transform duration-200",e.compact?"size-4":"size-3.5",n&&"rotate-180")})}),(0,a.jsx)("div",{role:"group","aria-label":t("Actions"),className:(0,u.cn)("flex items-center justify-end gap-1.5",e.compact&&"min-w-0 flex-wrap [&>button]:h-auto [&>button]:min-h-9 [&>button]:max-w-full [&>button]:[overflow-wrap:anywhere] [&>button]:whitespace-normal"),children:e.actions})]})]})}function E(e){let{t}=(0,l.Bd)(),[n,i]=(0,y.useState)(!1),[o,s]=(0,y.useState)(!1),r=(0,R.Ub)("(max-width: 640px)"),d=e.filters??[],h=null!=e.expandable,p=null!=e.onSearch,m=e.table.getState().columnFilters.length>0||!!e.table.getState().globalFilter||!!e.hasAdditionalFilters,g=e.searchPlaceholder??t("Filter..."),f=e.searchKey?e.table.getColumn(e.searchKey)?.getFilterValue()??"":e.table.getState().globalFilter??"",[b,v]=(0,y.useState)(null),k=b&&(o||b.baseValue===f)?b:null,x=k?.value??f,w=Math.max(0,e.searchDebounceMs??0),C=(0,R.d7)(x,w),N=y.useCallback(t=>{if(t!==f){if(e.searchKey)return void e.table.getColumn(e.searchKey)?.setFilterValue(t);e.table.setGlobalFilter(t)}},[f,e.searchKey,e.table]);y.useEffect(()=>{w<=0||o||C!==x||N(C)},[N,C,o,w,x]);let j=e=>{w<=0&&N(e)},M=(0,a.jsx)(I.p,{placeholder:g,value:x,onChange:e=>{let t=e.target.value;v({baseValue:f,value:t}),o||j(t)},onCompositionStart:()=>{s(!0)},onCompositionEnd:e=>{s(!1);let t=e.currentTarget.value;v({baseValue:f,value:t}),j(t)},className:"w-full sm:w-[200px] lg:w-[240px]"}),D=y.useMemo(()=>d.map(t=>{let n=e.table.getColumn(t.columnId);return n?(0,a.jsx)(L,{column:n,title:t.title,options:t.options,singleSelect:t.singleSelect},t.columnId):null}),[e.filters,e.table]),O=()=>{s(!1),v(null),e.table.resetColumnFilters(),e.table.setGlobalFilter(""),e.onReset?.()},q=null;p?q=(0,a.jsx)(c.$,{variant:"outline",onClick:O,disabled:!m,children:t("Reset")}):m&&(q=(0,a.jsxs)(c.$,{variant:"ghost",onClick:O,className:"text-muted-foreground hover:text-foreground gap-1 px-2",children:[t("Reset"),(0,a.jsx)(S.A,{})]}));let E=p?(0,a.jsxs)(c.$,{onClick:e.onSearch,disabled:e.searchLoading,children:[e.searchLoading&&(0,a.jsx)(P.A,{className:"animate-spin"}),t("Search")]}):null,F=e.hideViewOptions?null:(0,a.jsx)(A,{table:e.table}),_=e.viewToggle??null,B=h?(0,a.jsxs)(c.$,{variant:"ghost",onClick:()=>i(e=>!e),"aria-expanded":n,className:(0,u.cn)("text-muted-foreground hover:text-foreground gap-1 px-2",e.hasExpandedActiveFilters&&!n&&"text-primary hover:text-primary"),children:[t(n?"Collapse":"Expand"),(0,a.jsx)(T.A,{className:(0,u.cn)("size-3.5 transition-transform duration-200",n&&"rotate-180")})]}):null,G=null!=e.leftActions;return r&&e.collapsibleOnMobile?(0,a.jsx)(U,{compact:!0,className:e.className,actions:(0,a.jsxs)(a.Fragment,{children:[e.leftActions,e.preActions,q,E,_,F]}),children:(0,a.jsxs)("div",{className:"flex min-w-0 flex-wrap items-center gap-2",children:[void 0!==e.customSearch?e.customSearch:M,e.additionalSearch,D,n&&h&&e.expandable,B]})}):G?(0,a.jsxs)("div",{className:(0,u.cn)("flex flex-col gap-2",e.className),children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3",children:[void 0!==e.customSearch?e.customSearch:M,e.additionalSearch,D,(0,a.jsx)("div",{className:"ms-auto flex shrink-0 items-center gap-1.5 sm:gap-2",children:B})]}),n&&h&&(0,a.jsx)("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3",children:e.expandable}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3",children:[e.leftActions,(0,a.jsxs)("div",{className:"ms-auto flex shrink-0 items-center gap-1.5 sm:gap-2",children:[e.preActions,q,E,_,F]})]})]}):(0,a.jsxs)("div",{className:(0,u.cn)("flex flex-wrap items-center gap-2 sm:gap-3",e.className),children:[void 0!==e.customSearch?e.customSearch:M,e.additionalSearch,D,n&&h&&e.expandable,(0,a.jsxs)("div",{className:"ms-auto flex shrink-0 items-center gap-1.5 sm:gap-2",children:[e.preActions,q,E,_,F,B]})]})}function F(e){let{table:t,entityName:n,placement:i="floating",children:o}=e,{t:s}=(0,l.Bd)(),r=t.getFilteredSelectedRowModel().rows.length,d=(0,y.useRef)(null),h=(0,y.useRef)([]),[p,m]=(0,y.useState)("");(0,y.useLayoutEffect)(()=>{h.current=d.current?[...d.current.querySelectorAll("button")]:[]}),(0,y.useEffect)(()=>{if(r>0){m(s("{{count}} records selected. Bulk actions are available.",{count:r}));let e=setTimeout(()=>m(""),3e3);return()=>clearTimeout(e)}},[r,n,s]);let g=()=>{t.resetRowSelection()};return 0===r?null:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{"aria-live":"polite","aria-atomic":"true",className:"sr-only",role:"status",children:p}),(0,a.jsx)("div",{ref:d,role:"toolbar","aria-label":s("Bulk actions for {{count}} selected records",{count:r}),"aria-describedby":"bulk-actions-description",tabIndex:-1,onKeyDown:e=>{let t=h.current;if(0===t.length)return;let n=t.indexOf(document.activeElement);switch(e.key){case"ArrowRight":{e.preventDefault();let a=(n+1)%t.length;t[a]?.focus();break}case"ArrowLeft":{e.preventDefault();let a=0===n?t.length-1:n-1;t[a]?.focus();break}case"Home":e.preventDefault(),t[0]?.focus();break;case"End":e.preventDefault(),t.at(-1)?.focus();break;case"Escape":{let t=e.target,n=document.activeElement,a=t?.getAttribute("data-slot")==="dropdown-menu-trigger"||n?.getAttribute("data-slot")==="dropdown-menu-trigger"||t?.closest('[data-slot="dropdown-menu-trigger"]')||n?.closest('[data-slot="dropdown-menu-trigger"]'),i=n?.closest('[data-slot="dropdown-menu-content"]')||t?.closest('[data-slot="dropdown-menu-content"]');if(a||i)return;e.preventDefault(),g()}}},className:(0,u.cn)("floating"===i?"fixed bottom-6 left-1/2 z-50 w-max max-w-[calc(100vw-2rem)] -translate-x-1/2 rounded-xl transition-all delay-100 duration-300 ease-out hover:scale-105":"shrink-0 rounded-xl","focus-visible:ring-ring/50 focus-visible:ring-2 focus-visible:outline-none"),children:(0,a.jsxs)("div",{className:(0,u.cn)("p-2 shadow-xl","rounded-xl border","bg-background/95 supports-[backdrop-filter]:bg-background/60 backdrop-blur-lg","flex flex-wrap items-center gap-2"),children:[(0,a.jsxs)(k.m_,{children:[(0,a.jsxs)(k.k$,{render:(0,a.jsx)(c.$,{variant:"outline",size:"icon",onClick:g,className:"size-6","aria-label":s("Clear selection"),title:s("Clear selection (Escape)")}),children:[(0,a.jsx)(S.A,{}),(0,a.jsx)("span",{className:"sr-only",children:s("Clear selection")})]}),(0,a.jsx)(k.ZI,{children:(0,a.jsx)("p",{children:s("Clear selection (Escape)")})})]}),(0,a.jsx)(O.w,{className:"h-5",orientation:"vertical","aria-hidden":"true"}),(0,a.jsxs)("div",{className:"flex items-center gap-x-1 text-sm",id:"bulk-actions-description",children:[(0,a.jsx)(M.E,{variant:"default",className:"min-w-8 rounded-lg","aria-label":s("{{count}} selected",{count:r}),children:r})," ",(0,a.jsxs)("span",{className:"hidden sm:inline",children:[n,r>1&&/^[a-z]+$/i.test(n)?"s":""]})," ",s("selected")]}),(0,a.jsx)(O.w,{className:"h-5",orientation:"vertical","aria-hidden":"true"}),o]})})]})}var _=n(32348);n(21505);var B=n(27857),G=n(49302);function V(e){return"actions"===e}function z(e){let{table:t}=e,n=t.getVisibleLeafColumns(),i=n.filter(e=>!V(e.id)).reduce((e,t)=>e+t.getSize(),0);return(0,a.jsx)("colgroup",{children:n.map(e=>{var n,o,s,r;let l=(n=t,o=e.id,s=e.getSize(),r=i,V(o)?"1%":!0===n.options.enableColumnResizing?`${s}px`:r<=0?void 0:`${s/r*100}%`);return(0,a.jsx)("col",{style:{width:l}},e.id)})})}var K=n(55581);function W(e){let{table:t,applyHeaderSize:n,className:i,rowClassName:o,getColumnClassName:s}=e,{t:r}=(0,l.Bd)();return(0,a.jsx)(G.A0,{className:i,children:t.getHeaderGroups().map(e=>(0,a.jsx)(G.Hj,{className:o,children:e.headers.map(e=>{var i,o;return(0,a.jsxs)(G.nd,{colSpan:e.colSpan,"data-column-id":e.column.id,className:(0,u.cn)("relative",s?.(e.column.id,"header")),style:function(e,t){if(!(!t||V(e.column.id)))return{width:e.getSize()}}(e,n),children:[function(e){if(e.isPlaceholder)return null;let{header:t,meta:n}=e.column.columnDef;return"string"==typeof t?(0,a.jsx)(g.w,{column:e.column,title:t}):n?.label?(0,a.jsx)(g.w,{column:e.column,title:n.label}):(0,K.Kv)(t,e.getContext())}(e),(i=t,o=e,!0===i.options.enableColumnResizing&&!o.isPlaceholder&&o.column.getCanResize()&&!V(o.column.id)&&(0,a.jsx)("div",{role:"separator","aria-orientation":"vertical","aria-label":r("Resize column"),"data-column-resizer":!0,tabIndex:0,onDoubleClick:n=>{var a,i,o;return a=n,i=t,o=e,void(a.preventDefault(),J(a.currentTarget,i,o))},onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),onKeyDown:n=>(function(e,t,n){let a=e.shiftKey?50:10;if("ArrowLeft"===e.key){e.preventDefault(),H(t,n,-a);return}if("ArrowRight"===e.key){e.preventDefault(),H(t,n,a);return}("Enter"===e.key||" "===e.key)&&(e.preventDefault(),J(e.currentTarget,t,n))})(n,t,e),className:(0,u.cn)("absolute top-0 right-0 h-full w-2 cursor-col-resize touch-none select-none","after:bg-border hover:after:bg-primary after:absolute after:top-2 after:right-0 after:h-[calc(100%-1rem)] after:w-px after:transition-colors",e.column.getIsResizing()&&"after:bg-primary")}))]},e.id)})},e.id))})}function H(e,t,n){e.setColumnSizing(e=>({...e,[t.column.id]:Q(t,t.column.getSize()+n)}))}function J(e,t,n){let a=function(e,t){var n;let a,i=e.closest("table");if(!i)return;let o=i.querySelectorAll((n=t,a="u">typeof CSS&&"function"==typeof CSS.escape?CSS.escape(n):n.replaceAll("\\","\\\\").replaceAll('"','\\"'),`[data-column-id="${a}"]`));if(0===o.length)return;let s=[...o].reduce((e,t)=>{let n,a;return Math.max(e,((n=t.cloneNode(!0)).querySelectorAll("[data-column-resizer]").forEach(e=>{e.remove()}),n.style.position="absolute",n.style.visibility="hidden",n.style.pointerEvents="none",n.style.left="-10000px",n.style.top="0",n.style.width="max-content",n.style.minWidth="0",n.style.maxWidth="none",n.style.height="auto",n.style.whiteSpace="nowrap",document.body.append(n),a=n.scrollWidth,n.remove(),a))},0);return s>0?Math.ceil(s):void 0}(e,n.column.id);void 0!==a&&t.setColumnSizing(e=>({...e,[n.column.id]:Q(n,a)}))}function Q(e,t){let{minSize:n,maxSize:a}=e.column.columnDef;return"number"==typeof n&&ta?a:t}let $=y.memo(function(e){let{row:t,isSelected:n,className:i,getColumnClassName:o,cellRenderColumns:s,visibleColumnIds:r,...l}=e;return(0,a.jsx)(G.Hj,{"data-sortable-id":t.id,"data-state":n?"selected":void 0,className:i,...l,children:t.getVisibleCells().map(e=>{var t,n;let i,s,r=(t=e,(s="string"==typeof(n=i=(0,K.Kv)(t.column.columnDef.cell,t.getContext()))||"number"==typeof n?String(n):null)?{content:(0,a.jsx)(w.T,{tooltipContent:s,children:i}),isPrimitive:!0}:{content:i,isPrimitive:!1});return(0,a.jsx)(G.nA,{"data-column-id":e.column.id,className:(0,u.cn)("max-w-full min-w-0",r.isPrimitive&&"overflow-hidden",o?.(e.column.id,"cell")),children:r.content},e.id)})})},(e,t)=>e.row===t.row&&e.className===t.className&&e.isSelected===t.isSelected&&e.visibleColumnIds===t.visibleColumnIds&&e.getColumnClassName===t.getColumnClassName&&e.cellRenderColumns===t.cellRenderColumns);function Y(e){let t=e.row.getVisibleCells().map(e=>e.column.id).join("\0");return(0,a.jsx)($,{...e,isSelected:e.row.getIsSelected(),visibleColumnIds:t})}var X=n(11397),Z=n(12393);function ee(e){let{colSpan:t,title:n,description:i,icon:o,children:s}=e,{t:r}=(0,l.Bd)(),c=n??r("No Data"),d=i??r("No records found. Try adjusting your filters.");return(0,a.jsx)(G.Hj,{children:(0,a.jsx)(G.nA,{colSpan:t,className:"h-[400px] p-0",children:(0,a.jsxs)(Z.Sv,{children:[(0,a.jsxs)(Z.FT,{children:[(0,a.jsx)(Z.Kr,{variant:"icon",children:o||(0,a.jsx)(X.A,{className:"size-6"})}),(0,a.jsx)(Z.cz,{children:c}),(0,a.jsx)(Z.Ou,{children:d})]}),s]})})})}var et=n(97785);let en=["75%","60%","85%","50%","70%","90%","55%","80%","65%","45%"];function ea(e){let{table:t,rowCount:n,rowHeight:i="h-[52px]",keyPrefix:o="skeleton"}=e,s=t.getVisibleLeafColumns(),r=n??Math.min(t.getState().pagination?.pageSize||20,20);return(0,a.jsx)(a.Fragment,{children:Array.from({length:r},(e,t)=>(0,a.jsx)(G.Hj,{className:(0,u.cn)(i,"border-b"),children:s.map((e,n)=>{let i="select"===e.id,o=(t*s.length+n)%en.length;return(0,a.jsx)(G.nA,{className:"py-3",children:(0,a.jsx)(et.E,{className:(0,u.cn)("h-4 rounded-sm",i?"size-4":void 0),style:i?void 0:{width:en[o]}})},e.id)})},`${o}-${t}`))})}var ei=n(43494);function eo(e){var t,n,i;let o,s,r=e.rows??e.table.getRowModel().rows,l=y.useMemo(()=>e.table.getVisibleLeafColumns().length,[e.table]),c=(t=e.table,n=e.getColumnClassName,i=e.pinnedColumns,o=y.useMemo(()=>(function(e,t){if(!t.length)return e;if(!e?.length)return t;let n=new Set(e.map(e=>e.columnId));return[...e,...t.filter(e=>!n.has(e.columnId))]})(i,t.getAllColumns().flatMap(e=>{let t=e.columnDef.meta?.pinned;return t?[{columnId:e.id,side:t}]:[]})),[t,i]),s=y.useMemo(()=>(function(e){if(e?.length)return new Map(e.map(e=>[e.columnId,e]))})(o),[o]),y.useMemo(()=>(e,t)=>{var a,i;let o,r=n?.(e,t),l=s?.get(e);return l?(0,u.cn)(r,(a=l,i=t,o="left"===a.side?"shadow-[8px_0_10px_-10px_hsl(var(--foreground))]":"shadow-[-8px_0_10px_-10px_hsl(var(--foreground))]",(0,u.cn)("sticky whitespace-nowrap","left"===a.side?"left-0":"right-0",o,"header"===i?"[background-color:var(--table-header-bg,var(--table-header))] group-hover:[background-color:var(--table-header-hover)] z-30":"bg-background z-10 group-hover:[background-color:color-mix(in_oklch,var(--muted)_50%,var(--background))] group-data-[state=selected]:bg-muted",a.className,"header"===i?a.headerClassName:a.cellClassName))):r},[n,s]));return(0,a.jsx)("div",{className:(0,u.cn)("overflow-hidden rounded-lg border",e.containerClassName),...e.containerProps,children:e.splitHeader?(0,a.jsx)(er,{props:e,rows:r,colSpan:l,getColumnClassName:c}):(0,a.jsx)(es,{props:e,rows:r,colSpan:l,getColumnClassName:c})})}function es(e){let{props:t,rows:n,colSpan:i,getColumnClassName:o}=e,s=el(t);return(0,a.jsx)("div",{className:t.tableContainerClassName,children:(0,a.jsxs)(G.XI,{className:t.tableClassName,style:s.style,children:[s.colgroup,(0,a.jsx)(W,{table:t.table,applyHeaderSize:t.applyHeaderSize,className:t.tableHeaderClassName,rowClassName:t.tableHeaderRowClassName,getColumnClassName:o}),ec(t,n,i,o)]})})}function er(e){let{props:t,rows:n,colSpan:i,getColumnClassName:o}=e,s=el(t);return(0,a.jsx)("div",{className:(0,u.cn)("flex h-full min-h-0 flex-col",t.tableContainerClassName),children:(0,a.jsx)("div",{className:(0,u.cn)("min-h-0 flex-1 overflow-auto","**:data-[slot=table-header]:[--table-header-bg:var(--table-header)]","**:data-[slot=table-header]:bg-(--table-header-bg)",t.splitHeaderScrollClassName,t.bodyContainerClassName),children:(0,a.jsxs)(G.XI,{withContainer:!1,className:t.tableClassName,style:s.style,children:[s.colgroup,(0,a.jsx)(W,{table:t.table,applyHeaderSize:t.applyHeaderSize,className:(0,u.cn)("sticky top-0 z-10",t.tableHeaderClassName),rowClassName:t.tableHeaderRowClassName,getColumnClassName:o}),ec(t,n,i,o)]})})})}function el(e){let t;return e.colgroup?{colgroup:e.colgroup}:e.splitHeader||e.applyHeaderSize?{colgroup:(0,a.jsx)(z,{table:e.table}),style:(t=e.table.getVisibleLeafColumns().filter(e=>!V(e.id)).reduce((e,t)=>e+t.getSize(),0),{minWidth:`max(100%, ${t}px)`,tableLayout:"auto",width:"100%"})}:{}}function ec(e,t,n,i){var o,s,r,l,c,d;return(0,a.jsx)(G.BF,{className:e.tableBodyClassName,children:(o=e,s=t,r=n,l=i,o.isLoading?(0,a.jsx)(ea,{table:o.table,keyPrefix:o.skeletonKeyPrefix,rowHeight:o.skeletonRowHeight}):0===s.length?(c=o,d=r,c.emptyContent?(0,a.jsx)(G.Hj,{children:(0,a.jsx)(G.nA,{colSpan:d,className:c.emptyCellClassName,children:c.emptyContent})}):(0,a.jsx)(ee,{colSpan:d,title:c.emptyTitle,description:c.emptyDescription,icon:c.emptyIcon,children:c.emptyAction})):s.map(e=>{var t,n,i;return o.renderRow?o.renderRow(e,{getCellClassName:(e,t)=>(0,u.cn)(l(e,"cell"),t)}):(t=o,n=e,i=l,(0,a.jsx)(Y,{row:n,className:(0,u.cn)(t.tableBodyRowClassName,t.getRowClassName?.(n)),getColumnClassName:i,cellRenderColumns:t.table.options.columns},n.id))}))})}var ed=n(82655);function eu(e){let{header:t,meta:n}=e.column.columnDef;return"string"==typeof t?t:n?.label?n.label:null}function eh(e){let t=e.column.columnDef.cell;return t?(0,K.Kv)(t,e.getContext()):e.getValue()}function ep(e){return e.getVisibleLeafColumns().some(e=>{let t=e.columnDef.meta;return!!(t?.mobileTitle||t?.mobileBadge)})}function em(e){return[...e].sort((e,t)=>{let n=e.column.columnDef.meta?.mobileOrder,a=t.column.columnDef.meta?.mobileOrder;return null==n&&null==a?0:null==n?1:null==a?-1:n-a})}function eg(e){let{row:t}=e,n=t.getVisibleCells().filter(e=>"select"!==e.column.id),i=y.useMemo(()=>n.map(e=>e.column.columnDef.meta),[n.map(e=>e.id).join(",")]),o=n.find((e,t)=>i[t]?.mobileTitle),s=n.find((e,t)=>i[t]?.mobileBadge),r=n.find(e=>"actions"===e.column.id),l=em(n.filter((e,t)=>e!==o&&e!==s&&e!==r&&!i[t]?.mobileHidden));return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[o&&(0,a.jsx)("div",{className:"min-w-0 flex-1 text-sm font-medium [&_[data-slot=status-badge]]:max-w-full [&_[data-slot=status-badge]]:whitespace-normal",children:eh(o)}),s&&(0,a.jsx)("div",{className:"flex-none [&_[data-slot=status-badge]]:max-w-none",children:eh(s)})]}),l.length>0&&(0,a.jsx)("div",{className:"mt-1.5 grid grid-cols-2 gap-x-3 gap-y-1.5",children:l.map(e=>{let t=eu(e);return(0,a.jsxs)("div",{className:"min-w-0 flex-1 overflow-hidden",children:[t&&(0,a.jsx)("div",{className:"text-muted-foreground mb-0.5 text-[10px] leading-none select-none",children:t}),(0,a.jsx)("div",{className:"min-w-0 overflow-hidden text-xs [&_:is([data-slot=badge-cell],[data-slot=provider-badge],[data-slot=status-badge])]:ml-0",children:(0,a.jsx)(b.lO.Provider,{value:"text",children:eh(e)??"-"})})]},e.id)})}),r&&(0,a.jsx)("div",{className:"mt-1 -mb-0.5 flex justify-end",children:eh(r)})]})}function ef(e){let{row:t}=e,n=t.getVisibleCells().filter(e=>"select"!==e.column.id),i=y.useMemo(()=>n.map(e=>e.column.columnDef.meta),[n.map(e=>e.id).join(",")]),o=n.find(e=>"actions"===e.column.id),s=em(n.filter((e,t)=>"actions"!==e.column.id&&!i[t]?.mobileHidden));return(0,a.jsxs)(a.Fragment,{children:[s.map(e=>{let t=eu(e);return t?(0,a.jsxs)("div",{className:"flex items-start justify-between gap-2 overflow-hidden",children:[(0,a.jsx)("span",{className:"text-muted-foreground shrink-0 text-[10px] font-medium select-none",children:t}),(0,a.jsx)("div",{className:"flex min-w-0 flex-1 items-center justify-end overflow-hidden text-xs [&_:is([data-slot=badge-cell],[data-slot=provider-badge],[data-slot=status-badge])]:ml-0",children:(0,a.jsx)(b.lO.Provider,{value:"text",children:eh(e)??"-"})})]},e.id):(0,a.jsx)("div",{className:"flex justify-end overflow-hidden [&_:is([data-slot=badge-cell],[data-slot=provider-badge],[data-slot=status-badge])]:ml-0",children:(0,a.jsx)(b.lO.Provider,{value:"text",children:eh(e)})},e.id)}),o&&(0,a.jsx)("div",{className:"-mb-0.5 flex justify-end pt-0.5",children:eh(o)})]})}function ey(e){return e.compact?(0,a.jsx)(eg,{row:e.row}):(0,a.jsx)(ef,{row:e.row})}function eb(){return(0,a.jsx)("div",{className:"divide-y overflow-hidden rounded-lg border",children:[1,2,3,4,5].map(e=>(0,a.jsxs)("div",{className:"px-3 py-2.5",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(et.E,{className:"h-4 w-32"}),(0,a.jsx)(et.E,{className:"h-5 w-16 rounded-md"})]}),(0,a.jsxs)("div",{className:"mt-1.5 grid grid-cols-2 gap-2",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)(et.E,{className:"mb-1 h-2 w-8"}),(0,a.jsx)(et.E,{className:"h-4 w-full"})]}),(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)(et.E,{className:"mb-1 h-2 w-8"}),(0,a.jsx)(et.E,{className:"h-4 w-full"})]})]})]},e))})}function ev(){return(0,a.jsx)("div",{className:"divide-y overflow-hidden rounded-lg border",children:[1,2,3,4,5].map(e=>(0,a.jsx)("div",{className:"space-y-1.5 px-3 py-2.5",children:[1,2,3].map(e=>(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(et.E,{className:"h-2.5 w-16"}),(0,a.jsx)(et.E,{className:"h-3.5 w-28"})]},e))},e))})}function ek(e){let{table:t,enableRowSelection:n=!1,isLoading:i=!1,emptyTitle:o,emptyDescription:s,getRowKey:r,getRowClassName:c}=e,{t:d}=(0,l.Bd)(),h=o??d("No Data"),p=s??d("No data available"),m=t.getVisibleLeafColumns(),g=y.useMemo(()=>ep(t),[m]);if(i)return g?(0,a.jsx)(eb,{}):(0,a.jsx)(ev,{});let f=t.getRowModel().rows;return f&&0!==f.length?(0,a.jsxs)("div",{className:"divide-y overflow-hidden rounded-lg border",children:[n&&(0,a.jsxs)("label",{className:"flex items-center gap-2 px-3 py-2 text-xs",children:[(0,a.jsx)(ed.S,{checked:t.getIsAllPageRowsSelected(),indeterminate:t.getIsSomePageRowsSelected(),onCheckedChange:e=>t.toggleAllPageRowsSelected(!!e)}),d("Select all")]}),f.map(e=>{let t=r?r(e):e.id;return(0,a.jsx)("div",{className:(0,u.cn)("[background-color:var(--data-table-card-bg,var(--table-row))] px-3 py-2.5",c?.(e)),children:(0,a.jsxs)("div",{className:"flex min-w-0 items-start gap-2",children:[n&&(0,a.jsx)(ed.S,{className:"mt-0.5",checked:e.getIsSelected(),onCheckedChange:t=>e.toggleSelected(!!t),"aria-label":d("Select row {{number}}",{number:e.index+1})}),(0,a.jsx)("div",{className:"min-w-0 flex-1",children:(0,a.jsx)(ey,{row:e,compact:g})})]})},t)})]}):(0,a.jsx)("div",{className:"rounded-lg border p-6",children:(0,a.jsx)(Z.Sv,{className:"border-none p-0",children:(0,a.jsxs)(Z.FT,{children:[(0,a.jsx)(Z.Kr,{variant:"icon",children:(0,a.jsx)(X.A,{className:"size-6"})}),(0,a.jsx)(Z.cz,{children:h}),(0,a.jsx)(Z.Ou,{children:p})]})})})}let ex="grid grid-cols-1 gap-3 sm:gap-4 md:grid-cols-2 lg:grid-cols-3";function ew(e){let t=e.keyPrefix??"card-skeleton";return(0,a.jsx)("div",{className:e.gridClassName??ex,children:[1,2,3,4,5,6].map(e=>(0,a.jsxs)("div",{className:"space-y-3 rounded-lg border bg-(--table-row) p-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsx)(et.E,{className:"h-4 w-32"}),(0,a.jsx)(et.E,{className:"h-5 w-16 rounded-md"})]}),(0,a.jsx)("div",{className:"grid grid-cols-2 gap-x-3 gap-y-1.5",children:[1,2,3,4].map(e=>(0,a.jsxs)("div",{children:[(0,a.jsx)(et.E,{className:"mb-1 h-2 w-8"}),(0,a.jsx)(et.E,{className:"h-4 w-full"})]},e))})]},`${t}-${e}`))})}function eC(e){let{t}=(0,l.Bd)(),n=e.emptyTitle??t("No Data"),i=e.emptyDescription??t("No data available"),o=e.table.getVisibleLeafColumns(),s=y.useMemo(()=>ep(e.table),[o]);if(e.isLoading)return(0,a.jsx)(ew,{gridClassName:e.gridClassName,keyPrefix:e.skeletonKeyPrefix});let r=e.table.getRowModel().rows;return r&&0!==r.length?(0,a.jsx)("div",{className:e.gridClassName??ex,children:r.map(t=>{let n=e.getRowKey?e.getRowKey(t):t.id,i=t.getIsSelected();return(0,a.jsx)("div",{"data-slot":"data-table-card","data-sortable-id":t.id,"data-state":i?"selected":void 0,className:(0,u.cn)("rounded-lg border bg-(--data-table-card-bg,var(--table-row)) px-3 py-2.5 transition-[background-color,border-color] duration-150 data-[state=selected]:[--data-table-card-bg:color-mix(in_oklch,var(--primary)_7%,var(--table-row))] data-[state=selected]:border-primary/40",e.getRowClassName?.(t)),children:e.renderCard?e.renderCard(t,{compact:s,isSelected:i}):(0,a.jsx)(ey,{row:t,compact:s})},n)})}):(0,a.jsx)("div",{className:"rounded-lg border p-6",children:(0,a.jsx)(Z.Sv,{className:"border-none p-0",children:(0,a.jsxs)(Z.FT,{children:[(0,a.jsx)(Z.Kr,{variant:"icon",children:e.emptyIcon??(0,a.jsx)(X.A,{className:"size-6"})}),(0,a.jsx)(Z.cz,{children:n}),(0,a.jsx)(Z.Ou,{children:i})]})})})}var eA=n(94150);let eS="table",eP="card";function eT(e,t){if(!e||"u"0&&void 0!==arguments[0]?arguments[0]:{},t=e.defaultMode??eS,n=e.storageKey,[a,i]=y.useState(()=>eT(n,t)),o=y.useRef(n);return y.useEffect(()=>{n!==o.current&&(o.current=n,i(eT(n,t)))},[n,t]),[a,y.useCallback(e=>{if(i(e),n&&"u">typeof window)try{window.localStorage.setItem(n,e)}catch{}},[n])]}var eR=n(16333),eN=n(50475);function ej(e){let{t}=(0,l.Bd)(),n=[{value:eP,icon:eR.A,tooltip:t("Card view")},{value:eS,icon:eN.A,tooltip:t("Table view")}];return(0,a.jsx)("div",{role:"group","aria-label":t("View mode"),className:(0,u.cn)("bg-muted/60 inline-flex h-8 items-center rounded-lg border p-0.5",e.className),children:n.map(t=>{let n=t.icon,i=t.value===e.value;return(0,a.jsxs)(k.m_,{children:[(0,a.jsx)(k.k$,{render:(0,a.jsx)(c.$,{type:"button",variant:i?"default":"ghost",size:"icon-sm",onClick:()=>e.onChange(t.value),"aria-label":t.tooltip,"aria-pressed":i,className:"h-full w-7",children:(0,a.jsx)(n,{className:"size-3.5"})})}),(0,a.jsx)(k.ZI,{side:"bottom",className:"text-xs",children:t.tooltip})]},t.value)})})}function eM(e){var t,n;let i=(0,R.Ub)("(max-width: 640px)")&&!e.hideMobile,[o,s]=eI({storageKey:e.viewModeStorageKey,defaultMode:e.defaultViewMode??(e.enableCardView?eP:void 0)}),r=e.viewMode??o,l=e.onViewModeChange??s,c=!!e.enableCardView,d=(t=e,n=c?(0,a.jsx)(ej,{value:r,onChange:l}):void 0,void 0!==t.toolbar?t.toolbar:null===t.toolbarProps?null:t.toolbarProps?(0,a.jsx)(E,{table:t.table,...t.toolbarProps,viewToggle:t.toolbarProps.viewToggle??n}):null),h=function(e,t,n,i){if(!t)return null;let o=e.isFetching&&!e.isLoading,s=e.getRowClassName,r=e.mobileProps?.getRowClassName??(s?e=>s(e,{isMobile:!0}):void 0),l=e.mobile;return void 0===l&&(l=n&&i===eS?(0,a.jsx)(eo,{table:e.table,isLoading:e.isLoading,emptyTitle:e.emptyTitle,emptyDescription:e.emptyDescription,emptyIcon:e.emptyIcon,emptyAction:e.emptyAction,skeletonKeyPrefix:e.skeletonKeyPrefix,renderRow:e.renderRow,applyHeaderSize:e.applyHeaderSize,tableHeaderClassName:(0,u.cn)("[background-color:var(--table-header)]",e.tableHeaderClassName),getColumnClassName:e.getColumnClassName,pinnedColumns:e.pinnedColumns,containerClassName:(0,u.cn)("transition-opacity duration-150",o&&"pointer-events-none opacity-60",e.tableClassName),getRowClassName:t=>e.getRowClassName?.(t,{isMobile:!1})}):n?(0,a.jsx)(eC,{table:e.table,isLoading:e.isLoading,emptyTitle:e.emptyTitle,emptyDescription:e.emptyDescription,emptyIcon:e.emptyIcon,renderCard:e.renderCard,gridClassName:e.cardGridClassName??"grid grid-cols-1 gap-3",skeletonKeyPrefix:e.skeletonKeyPrefix,getRowKey:e.mobileProps?.getRowKey,getRowClassName:r}):(0,a.jsx)(ek,{enableRowSelection:e.mobileProps?.enableRowSelection,table:e.table,isLoading:e.isLoading,emptyTitle:e.emptyTitle,emptyDescription:e.emptyDescription,getRowKey:e.mobileProps?.getRowKey,getRowClassName:r})),(0,a.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:l})}(e,i,c,r),p=function(e,t,n,i){if(t)return null;let o=e.isFetching&&!e.isLoading,s=!1!==e.fixedHeight;return n&&i===eP?(0,a.jsx)("div",{className:(0,u.cn)(s&&"min-h-0 flex-1 overflow-y-auto","transition-opacity duration-150",o&&"pointer-events-none opacity-60"),children:(0,a.jsx)(eC,{table:e.table,isLoading:e.isLoading,emptyTitle:e.emptyTitle,emptyDescription:e.emptyDescription,emptyIcon:e.emptyIcon,renderCard:e.renderCard,gridClassName:e.cardGridClassName,skeletonKeyPrefix:e.skeletonKeyPrefix,getRowClassName:t=>e.getRowClassName?.(t,{isMobile:!1})})}):(0,a.jsx)(eo,{table:e.table,isLoading:e.isLoading,emptyTitle:e.emptyTitle,emptyDescription:e.emptyDescription,emptyIcon:e.emptyIcon,emptyAction:e.emptyAction,skeletonKeyPrefix:e.skeletonKeyPrefix,renderRow:e.renderRow,applyHeaderSize:e.applyHeaderSize,splitHeader:s,tableContainerClassName:s?"h-full min-h-0":void 0,tableHeaderClassName:(0,u.cn)(s&&"[background-color:var(--table-header)]",e.tableHeaderClassName),getColumnClassName:e.getColumnClassName,pinnedColumns:e.pinnedColumns,containerClassName:(0,u.cn)(s&&"min-h-0 flex-1","transition-opacity duration-150",o&&"pointer-events-none opacity-60",e.tableClassName),getRowClassName:t=>e.getRowClassName?.(t,{isMobile:!1})})}(e,i,c,r),g=function(e){if(!1===e.showPagination)return null;let t=(0,a.jsx)(m,{table:e.table,compact:e.compactPagination});return!1!==e.paginationInFooter?(0,a.jsx)(eA.j,{children:t}):(0,a.jsx)("div",{className:"pt-2",children:t})}(e);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:(0,u.cn)(!1!==e.fixedHeight?"flex h-full min-h-0 flex-col gap-2.5 sm:gap-3":"space-y-2.5 sm:space-y-3",e.className),children:[d,h,p,e.afterTable]}),(!i||e.showMobileBulkActions)&&e.bulkActions,g]})}var eD=n(3521);function eO(e,t,n){let[a,i]=y.useState(t);return[e??a,y.useCallback(t=>{void 0===e&&i(e=>"function"==typeof t?t(e):t),n?.(t)},[e,n])]}function eL(e){let{data:t,columns:n,totalCount:a,pageCount:i,ensurePageInRange:o,manualFiltering:s,manualPagination:r,manualSorting:l,initialSorting:c=[],initialColumnVisibility:d={},initialColumnSizing:u={},initialRowSelection:h={},initialExpanded:p={},initialPagination:m={pageIndex:0,pageSize:20},withFilteredRowModel:g=!s,withPaginationRowModel:f=!r,withSortedRowModel:b=!l&&!r,withFacetedRowModel:v=!s,withExpandedRowModel:k=!1}=e,x="string"==typeof e.columnVisibilityStorageKey?e.columnVisibilityStorageKey:void 0,w="string"==typeof e.columnSizingStorageKey?e.columnSizingStorageKey:void 0,C=y.useMemo(()=>({...d,...function(e){if(!e||"u"{let[n,a]=t;return"boolean"==typeof a&&(e[n]=a),e},{})}catch{return{}}}(x)}),[x,d]),A=y.useMemo(()=>(function e(t){return t.reduce((t,n)=>{let a="string"==typeof n.id?n.id:"string"==typeof n.accessorKey?n.accessorKey.replaceAll(".","_"):"number"==typeof n.accessorKey?String(n.accessorKey):void 0;if(a){let e="number"==typeof n.minSize&&Number.isFinite(n.minSize)?n.minSize:void 0,i="number"==typeof n.maxSize&&Number.isFinite(n.maxSize)?n.maxSize:void 0;(void 0!==e||void 0!==i)&&(t[a]={minSize:e,maxSize:i})}return Array.isArray(n.columns)&&Object.assign(t,e(n.columns)),t},{})})(n),[n]),S=y.useMemo(()=>({...u,...function(e,t){if(!e||"u"{let[a,i]=n,o=function(e,t,n){if("number"!=typeof t||!Number.isFinite(t)||t<=0)return;let a=n[e],i=t;return a?.minSize!==void 0&&ia.maxSize&&(i=a.maxSize),i>0?i:void 0}(a,i,t);return void 0!==o&&(e[a]=o),e},{})}catch{return{}}}(w,A)}),[A,w,u]),[P,T]=eO(e.sorting,c,e.onSortingChange),[I,R]=eO(e.columnVisibility,C,e.onColumnVisibilityChange),[N,j]=eO(e.columnSizing,S,e.onColumnSizingChange),M=y.useRef(x),D=y.useRef(w),O=y.useRef(!1),L=y.useRef(!1),q=y.useRef(void 0),[U,E]=eO(e.rowSelection,h,e.onRowSelectionChange),[F,_]=eO(e.expanded,p,e.onExpandedChange),[B,G]=eO(e.pagination,m,e.onPaginationChange),V=i??(void 0!==a?Math.ceil(a/B.pageSize):void 0),z=e.enableSorting??(!r||!!e.sorting||!!e.onSortingChange),W=(0,K.N4)({data:t,columns:n,rowCount:a,pageCount:V,state:{sorting:P,columnVisibility:I,columnSizing:N,rowSelection:U,expanded:F,columnFilters:e.columnFilters,globalFilter:e.globalFilter,pagination:B},enableRowSelection:e.enableRowSelection,enableSorting:z,getRowId:e.getRowId,getSubRows:e.getSubRows,globalFilterFn:e.globalFilterFn,autoResetPageIndex:e.autoResetPageIndex,manualFiltering:s,manualPagination:r,manualSorting:l,enableColumnResizing:e.enableColumnResizing,columnResizeMode:"onChange",onSortingChange:T,onColumnVisibilityChange:R,onColumnSizingChange:j,onRowSelectionChange:E,onExpandedChange:_,onColumnFiltersChange:e.onColumnFiltersChange,onGlobalFilterChange:e.onGlobalFilterChange,onPaginationChange:G,getCoreRowModel:(0,eD.HT)(),getFilteredRowModel:g?(0,eD.hM)():void 0,getPaginationRowModel:f?(0,eD.kW)():void 0,getSortedRowModel:b?(0,eD.h5)():void 0,getFacetedRowModel:v?(0,eD.kQ)():void 0,getFacetedUniqueValues:v?(0,eD.oS)():void 0,getExpandedRowModel:k?(0,eD.D0)():void 0}),H=W.getPageCount();return y.useEffect(()=>{o?.(H)},[H,o]),y.useEffect(()=>{void 0===e.columnVisibility&&x!==M.current&&(M.current=x,O.current=!0,R(()=>C))},[x,R,e.columnVisibility,C]),y.useEffect(()=>{void 0===e.columnSizing&&w!==D.current&&(D.current=w,L.current=!0,j(()=>S))},[w,j,e.columnSizing,S]),y.useEffect(()=>{if(x&&"u">typeof window){if(O.current){O.current=!1;return}try{window.localStorage.setItem(x,JSON.stringify(I))}catch{}}},[I,x]),y.useEffect(()=>{if(w&&"u">typeof window){if(L.current){L.current=!1;return}return void 0!==q.current&&window.clearTimeout(q.current),q.current=window.setTimeout(()=>{try{window.localStorage.setItem(w,JSON.stringify(N))}catch{}finally{q.current=void 0}},250),()=>{void 0!==q.current&&(window.clearTimeout(q.current),q.current=void 0)}}},[N,w]),{table:W}}var eq=n(38088);function eU(e){let{columnFilters:t,columnId:n,onColumnFiltersChange:a,delay:i=500}=e,o=t.find(e=>e.id===n)?.value??"",[s,r]=y.useState(o),[l,c]=y.useState(o),d=y.useRef(!1),u=(0,eq.d)(l,i),h=y.useRef(a);h.current=a,y.useEffect(()=>{d.current||r(o),c(o)},[o]),y.useEffect(()=>{u!==o&&h.current(e=>{let t=e.filter(e=>e.id!==n);return u?[...t,{id:n,value:u}]:t})},[n,u,o]);let p=y.useCallback(e=>{r(e),d.current||c(e)},[]),m=y.useCallback(e=>{p(e.target.value)},[p]);return{value:o,inputValue:s,setInputValue:p,onChange:m,onCompositionStart:y.useCallback(()=>{d.current=!0},[]),onCompositionEnd:y.useCallback(e=>{d.current=!1;let t=e.currentTarget.value;r(t),c(t)},[]),resetInput:y.useCallback(()=>{d.current=!1,r(""),c("")},[])}}let eE="[--data-table-card-bg:var(--table-disabled)] hover:[--data-table-card-bg:var(--table-disabled-hover)] data-[state=selected]:![--data-table-card-bg:var(--table-disabled)] data-[state=selected]:hover:![--data-table-card-bg:var(--table-disabled-hover)] [background-color:var(--table-disabled)] hover:[background-color:var(--table-disabled-hover)] [&>td:first-child]:[border-left-color:var(--table-disabled-border)] [&>td:first-child]:border-l-4 [&>td:first-child]:pl-1",eF="[--data-table-card-bg:var(--table-disabled)] data-[state=selected]:![--data-table-card-bg:var(--table-disabled)] [background-color:var(--table-disabled)]"},27857(e,t,n){"use strict";n.d(t,{},{n:{container:"overflow-hidden rounded-md border",sectionContainer:"border-border/60 rounded-lg",embeddedContainer:"rounded-none border-0",compactTable:"text-sm",compactHeaderRow:"hover:bg-transparent",mutedHeaderRow:"[background-color:var(--table-header)] hover:[background-color:var(--table-header-hover)]",compactHeaderCell:"text-muted-foreground py-2 text-[10px] font-medium tracking-wider uppercase",compactHeaderCellRight:"text-muted-foreground py-2 text-right text-[10px] font-medium tracking-wider uppercase",compactCell:"py-2.5",compactTopCell:"py-2.5 align-top",compactTopNumericCell:"py-2.5 text-right align-top font-mono",compactMutedCell:"text-muted-foreground py-2.5",compactMutedCodeCell:"text-muted-foreground py-2.5 font-mono",compactNumericCell:"py-2.5 text-right font-mono",compactMutedNumericCell:"text-muted-foreground py-2.5 text-right font-mono",topCell:"py-2 align-top",topMutedCell:"text-muted-foreground py-2 align-top",codeCell:"font-mono text-sm",mutedCell:"text-muted-foreground text-sm",mutedCodeCell:"text-muted-foreground font-mono text-sm",topNumericCell:"py-2 text-right font-mono",mediumCell:"font-medium",actionHeaderCell:"w-auto max-w-none text-right",actionCell:"w-auto max-w-none text-right"}})},32348(e,t,n){"use strict";var a=n(72361),i=n(68413),o=n(49302),s=n(56275),r=n(81532),l=n(27857);function c(e){let{className:t,tableClassName:n,containerProps:i,tableProps:r}=e;return(0,a.jsx)("div",{className:(0,s.cn)(l.n.container,t),...i,children:(0,a.jsx)(o.XI,{className:n,...r,children:void 0!==e.columns?(0,a.jsx)(d,{...e}):e.children})})}function d(e){let{columns:t,data:n,getRowKey:i,getRowClassName:s,renderRow:r,empty:l,emptyContent:c,emptyClassName:d,headerRowClassName:p}=e,m=l??(void 0!==n&&0===n.length),g=n.map((e,n)=>(0,a.jsx)(u,{row:e,index:n,columns:t,getRowClassName:s,renderRow:r},i?.(e,n)??n));return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.A0,{children:(0,a.jsx)(o.Hj,{className:p,children:t.map(e=>(0,a.jsx)(o.nd,{className:e.className,children:e.header},e.id))})}),(0,a.jsx)(o.BF,{children:m?(0,a.jsx)(h,{colSpan:t.length,className:d,children:c}):g})]})}function u(e){let{row:t,index:n,columns:l,getRowClassName:c,renderRow:d}=e;return d?(0,a.jsx)(a.Fragment,{children:d(t,n)}):(0,a.jsx)(o.Hj,{className:c?.(t,n),children:l.map(e=>{var l,c,d,u,h,p,m;let g,f;return(0,a.jsx)(o.nA,{className:(0,s.cn)("max-w-full min-w-0 overflow-hidden",(l=e,c=t,d=n,"function"==typeof l.cellClassName?l.cellClassName(c,d):l.cellClassName)),children:(u=e,h=t,p=n,(f="string"==typeof(m=g=u.cell?.(h,p))||"number"==typeof m?String(m):i.isValidElement(m)&&("string"==typeof m.props.children||"number"==typeof m.props.children)?String(m.props.children):null)?(0,a.jsx)(r.T,{tooltipContent:f,children:g}):g)},e.id)})})}function h(e){let{colSpan:t,children:n,className:i}=e;return(0,a.jsx)(o.Hj,{children:(0,a.jsx)(o.nA,{colSpan:t,className:(0,s.cn)("h-24 text-center",i),children:n})})}n.d(t,{h:()=>c})},21505(e,t,n){"use strict";var a=n(72361),i=n(65277),o=n(14653),s=n(72868),r=n(84368),l=n(43494);function c(e){return(0,a.jsxs)("div",{className:"flex justify-end gap-1",children:[(0,a.jsx)(s.$,{variant:"ghost",size:"icon-sm",onClick:e.onEdit,disabled:e.editDisabled,"aria-label":e.editLabel,children:(0,a.jsx)(i.A,{})}),(0,a.jsx)(l.C,{ariaLabel:e.menuLabel,children:(0,a.jsxs)(r._2,{onClick:e.onDelete,disabled:e.deleteDisabled,className:"text-destructive focus:text-destructive",children:[e.deleteLabel,(0,a.jsx)(r.V0,{children:(0,a.jsx)(o.A,{size:16})})]})})]})}n.d(t,{_:()=>c})},8802(e,t,n){"use strict";n.d(t,{K:()=>I});var a=n(72361),i=n(37116),o=n(68413),s=n(30448),r=n(65388),l=n(17163),c=n(50711),d=n(3351),u=n(93220),h=n(96722),p=n(6702),m=n(72868),g=n(70651),f=n(61138),y=n(43178),b=n(74401),v=n(91920),k=n(98246),x=n(56275);function w(e){let{className:t,classNames:n,showOutsideDays:i=!0,captionLayout:o="label",buttonVariant:s="ghost",locale:r,formatters:l,components:c,...d}=e,u=(0,v.a)();return(0,a.jsx)(k.h,{showOutsideDays:i,className:(0,x.cn)("group/calendar bg-background p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent",String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`,String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`,t),captionLayout:o,locale:r,formatters:{formatMonthDropdown:e=>e.toLocaleString(r?.code,{month:"short"}),...l},classNames:{root:(0,x.cn)("w-fit",u.root),months:(0,x.cn)("relative flex flex-col gap-4 md:flex-row",u.months),month:(0,x.cn)("flex w-full flex-col gap-4",u.month),nav:(0,x.cn)("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1",u.nav),button_previous:(0,x.cn)((0,m.r)({variant:s}),"size-(--cell-size) p-0 select-none aria-disabled:opacity-50",u.button_previous),button_next:(0,x.cn)((0,m.r)({variant:s}),"size-(--cell-size) p-0 select-none aria-disabled:opacity-50",u.button_next),month_caption:(0,x.cn)("flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)",u.month_caption),dropdowns:(0,x.cn)("flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium",u.dropdowns),dropdown_root:(0,x.cn)("relative rounded-(--cell-radius)",u.dropdown_root),dropdown:(0,x.cn)("absolute inset-0 bg-popover opacity-0",u.dropdown),caption_label:(0,x.cn)("font-medium select-none","label"===o?"text-sm":"flex items-center gap-1 rounded-(--cell-radius) text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",u.caption_label),month_grid:"w-full border-collapse",weekdays:(0,x.cn)("flex",u.weekdays),weekday:(0,x.cn)("flex-1 rounded-(--cell-radius) text-[0.8rem] font-normal text-muted-foreground select-none",u.weekday),week:(0,x.cn)("mt-2 flex w-full",u.week),week_number_header:(0,x.cn)("w-(--cell-size) select-none",u.week_number_header),week_number:(0,x.cn)("text-[0.8rem] text-muted-foreground select-none",u.week_number),day:(0,x.cn)("group/day relative aspect-square h-full w-full rounded-(--cell-radius) p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)",d.showWeekNumber?"[&:nth-child(2)[data-selected=true]_button]:rounded-l-(--cell-radius)":"[&:first-child[data-selected=true]_button]:rounded-l-(--cell-radius)",u.day),range_start:(0,x.cn)("relative isolate z-0 rounded-l-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:right-0 after:w-4 after:bg-muted",u.range_start),range_middle:(0,x.cn)("rounded-none",u.range_middle),range_end:(0,x.cn)("relative isolate z-0 rounded-r-(--cell-radius) bg-muted after:absolute after:inset-y-0 after:left-0 after:w-4 after:bg-muted",u.range_end),today:(0,x.cn)("rounded-(--cell-radius) bg-muted text-foreground data-[selected=true]:rounded-none",u.today),outside:(0,x.cn)("text-muted-foreground aria-selected:text-muted-foreground",u.outside),disabled:(0,x.cn)("text-muted-foreground opacity-50",u.disabled),hidden:(0,x.cn)("invisible",u.hidden),...n},components:{Root:e=>{let{className:t,rootRef:n,...i}=e;return(0,a.jsx)("div",{"data-slot":"calendar",ref:n,className:(0,x.cn)(t),...i})},Chevron:e=>{let{className:t,orientation:n,...i}=e;return"left"===n?(0,a.jsx)(b.n,{icon:g.A,strokeWidth:2,className:(0,x.cn)("size-4",t),...i}):"right"===n?(0,a.jsx)(b.n,{icon:f.A,strokeWidth:2,className:(0,x.cn)("size-4",t),...i}):(0,a.jsx)(b.n,{icon:y.A,strokeWidth:2,className:(0,x.cn)("size-4",t),...i})},DayButton:e=>{let{...t}=e;return(0,a.jsx)(C,{locale:r,...t})},WeekNumber:e=>{let{children:t,...n}=e;return(0,a.jsx)("td",{...n,children:(0,a.jsx)("div",{className:"flex size-(--cell-size) items-center justify-center text-center",children:t})})},...c},...d})}function C(e){let{className:t,day:n,modifiers:i,locale:s,...r}=e,l=(0,v.a)(),c=o.useRef(null);return o.useEffect(()=>{i.focused&&c.current?.focus()},[i.focused]),(0,a.jsx)(m.$,{variant:"ghost",size:"icon","data-day":n.date.toLocaleDateString(s?.code),"data-selected-single":i.selected&&!i.range_start&&!i.range_end&&!i.range_middle,"data-range-start":i.range_start,"data-range-end":i.range_end,"data-range-middle":i.range_middle,className:(0,x.cn)("group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:bg-muted data-[range-middle=true]:text-foreground data-[range-start=true]:bg-primary data-[range-start=true]:text-primary-foreground data-[selected-single=true]:bg-primary data-[selected-single=true]:text-primary-foreground dark:hover:text-foreground relative isolate z-10 flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 border-0 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-(--cell-radius) data-[range-end=true]:rounded-r-(--cell-radius) data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-(--cell-radius) data-[range-start=true]:rounded-l-(--cell-radius) [&>span]:text-xs [&>span]:opacity-70",l.day,t),...r})}var A=n(1738),S=n(74501),P=n(84935);let T={en:s.c,zhCN:r.g,zhTW:l.G,fr:c.fr,ru:d.ru,ja:u.ja,vi:h.vi};function I(e){let{value:t,onChange:n,placeholder:r,className:l}=e,{t:c,i18n:d}=(0,p.Bd)(),u=r??c("Select date"),h=T[d.language]??s.c,g=new Date().getFullYear(),[f,y]=o.useState(!1),[b,v]=o.useState(t),[k,C]=o.useState(t),[I,R]=o.useState("00:00:00");return o.useEffect(()=>{v(t),C(t),t&&R((0,P.A)(t).format("HH:mm:ss"))},[t]),(0,a.jsxs)("div",{className:(0,x.cn)("flex gap-2",l),children:[(0,a.jsxs)(S.AM,{open:f,onOpenChange:y,children:[(0,a.jsxs)(S.Wv,{render:(0,a.jsx)(m.$,{variant:"outline",className:(0,x.cn)("flex-1 justify-between font-normal",!b&&"text-muted-foreground")}),children:[b?(0,P.A)(b).format("YYYY-MM-DD"):u,(0,a.jsx)(i.A,{className:"h-4 w-4 opacity-50"})]}),(0,a.jsx)(S.hl,{className:"w-auto overflow-hidden p-0",align:"start",children:(0,a.jsx)(w,{mode:"single",selected:b,month:k,onMonthChange:C,captionLayout:"dropdown",onSelect:e=>{if(e){let[t,a,i=0]=I.split(":").map(Number),o=new Date(e);o.setHours(t,a,i,0),v(o),C(o),n?.(o),y(!1)}else v(void 0),C(void 0),n?.(void 0)},locale:h,startMonth:new Date(g-100,0),endMonth:new Date(g+100,11)})})]}),(0,a.jsx)(A.p,{type:"time",step:1,value:I,"aria-label":c("Time"),onChange:e=>{let t=e.target.value;if(t&&(R(t),b)){let[e,a,i=0]=t.split(":").map(Number),o=new Date(b);o.setHours(e,a,i,0),v(o),n?.(o)}},className:"w-32 appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none",disabled:!b}),b&&(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"icon",onClick:()=>{v(void 0),C(void 0),R("00:00:00"),n?.(void 0)},className:"shrink-0","aria-label":"Clear",children:(0,a.jsx)("span",{"aria-hidden":"true",children:"✕"})})]})}},60641(e,t,n){"use strict";var a=n(72361);n(68413);var i=n(54052),o=n(56275);function s(e){let{title:t,description:n,children:s,trigger:r,footer:l,contentHeight:c="auto",contentClassName:d,headerClassName:u,titleClassName:h,descriptionClassName:p,bodyClassName:m,footerClassName:g,initialFocus:f,showCloseButton:y,...b}=e;return(0,a.jsxs)(i.lG,{...b,children:[r?(0,a.jsx)(i.zM,{render:r}):null,(0,a.jsxs)(i.Cf,{className:(0,o.cn)("flex w-full flex-col gap-4 overflow-x-hidden overflow-y-auto p-4 sm:max-w-2xl sm:p-6",d,"data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 duration-100"),initialFocus:f,showCloseButton:y,style:{"--dialog-content-height":c},children:[(0,a.jsxs)(i.c7,{className:(0,o.cn)("flex-shrink-0 text-start",u),children:[(0,a.jsx)(i.L3,{className:h,children:t}),n?(0,a.jsx)(i.rr,{className:p,children:n}):null]}),(0,a.jsx)("div",{className:(0,o.cn)("-mx-1 min-h-0 overflow-x-hidden overflow-y-auto overscroll-contain","h-[var(--dialog-content-height)]"),children:(0,a.jsx)("div",{className:(0,o.cn)("min-w-0 px-1 py-1","[&_form]:overflow-x-visible","[&_[data-slot=scroll-area-viewport]]:px-1 [&_[data-slot=scroll-area-viewport]]:py-1",m),children:s})}),l?(0,a.jsx)(i.Es,{className:(0,o.cn)("flex-shrink-0 gap-2 sm:-mx-6 sm:-mb-6 sm:justify-end sm:p-6",g),children:l}):null]})]})}n.d(t,{l:()=>s})},47029(e,t,n){"use strict";var a=n(68413),i=n(39649),o=n(56275);function s(e){let t;return(0,a.createElement)("section",{className:(t=e.className,(0,o.cn)("border-border/60 flex flex-col gap-4 border-b pb-6 last:border-b-0 last:pb-0",t))},e.children)}function r(e){return(0,a.createElement)("div",{className:(0,o.cn)("flex items-start gap-3",e.className)},e.icon?(0,a.createElement)(i.f,{tone:e.iconTone,size:"md"},e.icon):null,(0,a.createElement)("div",{className:"min-w-0 flex-1"},(0,a.createElement)("h3",{className:"text-sm leading-none font-semibold tracking-tight"},e.title),e.description?(0,a.createElement)("p",{className:"text-muted-foreground mt-1 text-xs leading-5"},e.description):null))}n.d(t,{JP:()=>r,y5:()=>s},{Dt:e=>(0,o.cn)("border-border/70 bg-background/95 border-b px-4 py-3 text-start backdrop-blur supports-[backdrop-filter]:bg-background/80 sm:px-6 sm:py-4",e),Jx:e=>(0,o.cn)("border-border/70 bg-background/95 grid grid-cols-2 gap-2 border-t px-4 py-3 backdrop-blur supports-[backdrop-filter]:bg-background/80 sm:flex sm:flex-row sm:justify-end sm:px-6 sm:py-4",e),e:e=>(0,o.cn)("flex min-h-0 flex-1 flex-col gap-6 overflow-y-auto overscroll-contain px-4 py-4 sm:px-6 sm:py-5",e),fE:e=>(0,o.cn)("border-border/60 flex min-h-16 flex-row items-center justify-between gap-3 border-y py-3",e),jW:e=>(0,o.cn)("bg-background text-foreground flex h-dvh w-full flex-col gap-0 overflow-hidden p-0 shadow-none",e)})},61726(e,t,n){"use strict";var a=n(72361),i=n(11397),o=n(6702),s=n(39130),r=n(12393),l=n(56275);function c(e){let{t}=(0,o.Bd)(),n=e.icon??i.A;return(0,a.jsx)(s._A,{children:(0,a.jsxs)(r.Sv,{className:(0,l.cn)("min-h-[300px]",e.bordered&&"border",e.className),children:[(0,a.jsxs)(r.FT,{children:[(0,a.jsx)(r.Kr,{variant:"icon",children:(0,a.jsx)(n,{className:"size-6"})}),(0,a.jsx)(r.cz,{children:e.title??t("No Data")}),null!=e.description&&(0,a.jsx)(r.Ou,{children:e.description})]}),null!=e.action&&(0,a.jsx)(r.HY,{children:e.action})]})})}n.d(t,{p:()=>c})},24503(e,t,n){"use strict";var a=n(72361),i=n(96855),o=n(6702),s=n(39130),r=n(72868),l=n(12393),c=n(56275);function d(e){let{t}=(0,o.Bd)(),n=e.icon??i.A;return(0,a.jsx)(s._A,{children:(0,a.jsxs)(l.Sv,{className:(0,c.cn)("min-h-[300px]",e.className),children:[(0,a.jsxs)(l.FT,{children:[(0,a.jsx)(l.Kr,{variant:"icon",children:(0,a.jsx)(n,{className:"text-destructive size-6"})}),(0,a.jsx)(l.cz,{children:e.title??t("Oops! Something went wrong")}),null!=e.description&&(0,a.jsx)(l.Ou,{children:e.description})]}),(0,a.jsxs)(l.HY,{children:[null!=e.onRetry&&(0,a.jsx)(r.$,{variant:"outline",size:"sm",onClick:e.onRetry,children:t("Retry")}),e.action]})]})})}n.d(t,{W:()=>d})},91460(e,t,n){"use strict";n.d(t,{B:()=>k});var a=n(72361),i=n(914),o=n(85949),s=n(52671),r=n(99893),l=n(1417),c=n(68413),d=n(6702),u=n(20598),h=n(73474),p=n(60858),m=n(92813),g=n(80042),f=n(21112),y=n(72868),b=n(11768),v=n(56275);function k(e){let{value:t,onChange:n,name:k,onBlur:x,textareaRef:w,disabled:C,heightClassName:A="h-56 min-h-56 max-h-56",placeholder:S,ariaLabel:P,className:T,id:I,"aria-describedby":R,"aria-invalid":N,"data-form-root":j,...M}=e,{t:D}=(0,d.Bd)(),O=(0,c.useRef)(null),L=(0,c.useRef)(null),q=(0,c.useRef)(t),U=(0,c.useRef)(n),E=(0,c.useRef)(x),[F,_]=(0,c.useState)({line:1,column:1}),B=(0,c.useMemo)(()=>(function(e){let t=e.trim();if(!t)return{isValid:!0,messageKey:"JSON"};try{return JSON.parse(t),{isValid:!0,messageKey:"JSON"}}catch{return{isValid:!1,messageKey:"Invalid JSON"}}})(t),[t]),G=(0,c.useMemo)(()=>[(0,m.b)(),(0,g.M)(" "),(e,t)=>{if("keydown"!==t.type||"Enter"!==t.key)return;let n=function(e,t,n){var a,i;let o,s=e.slice(0,t),r=e.slice(n),l=(a=e,i=t,o=a.lastIndexOf("\n",i-1)+1,a.slice(o,i).match(/^\s*/)?.[0]??""),c=s.trimEnd().at(-1),d=r.trimStart().at(0),u="{"===c||"["===c;if(u&&("{"===c&&"}"===d||"["===c&&"]"===d)){let e=`${l} `,n=` ${e} ${l}`,a=t+1+e.length;return{value:`${s}${n}${r}`,selectionStart:a,selectionEnd:a}}if(!l&&!u)return;let h=u?`${l} `:l,p=` ${h}`,m=t+p.length;return{value:`${s}${p}${r}`,selectionStart:m,selectionEnd:m}}(e.value,e.selectionStart,e.selectionEnd);if(n)return t.preventDefault(),n},(0,f.m)({'"':'"',"{":"}","[":"]"})],[]);q.current=t,U.current=n,E.current=x,(0,c.useEffect)(()=>{let e=O.current;if(!e)return;let t=new h.F(e,{value:q.current,lineNumbers:!0,highlighters:[(0,p.a)()],plugins:G,styles:{color:"inherit",fontSize:"0.75rem",lineHeight:"1.25rem",minHeight:"100%",overflow:"hidden",padding:"0.5rem 0.75rem 0.5rem 0.5rem"}});L.current=t;let n=()=>{var e;let n,a,i;_((e=t.value,n=Math.min(Math.max(t.textarea.selectionStart,0),e.length),i=(a=e.slice(0,n).split("\n")).at(-1)??"",{line:a.length,column:i.length+1}))},a=[...e.querySelectorAll("pre")].find(e=>e!==t.pre),i=a?function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window.requestAnimationFrame,a=!1;return{sync:()=>{a||(a=!0,n(()=>{a=!1,t.contentLayer.style.transform=`translate3d(-${e.scrollLeft}px, -${e.scrollTop}px, 0)`,t.lineNumberLayer.style.transform=`translate3d(0, -${e.scrollTop}px, 0)`}))}}}(t.textarea,{contentLayer:t.pre,lineNumberLayer:a}):null,o=()=>i?.sync(),s=()=>E.current?.();return t.onUpdate(e=>{e!==q.current&&U.current(e)}),t.textarea.addEventListener("click",n),t.textarea.addEventListener("input",n),t.textarea.addEventListener("keyup",n),t.textarea.addEventListener("select",n),t.textarea.addEventListener("blur",s),t.textarea.addEventListener("scroll",o,{passive:!0}),t.textarea.classList.add("json-code-editor-textarea"),t.pre.classList.add("json-code-editor-highlight"),t.pre.setAttribute("aria-hidden","true"),a&&(a.classList.add("json-code-editor-lines"),a.setAttribute("aria-hidden","true")),n(),()=>{t.textarea.removeEventListener("click",n),t.textarea.removeEventListener("input",n),t.textarea.removeEventListener("keyup",n),t.textarea.removeEventListener("select",n),t.textarea.removeEventListener("blur",s),t.textarea.removeEventListener("scroll",o),t.destroy(),L.current=null}},[G]),(0,c.useEffect)(()=>{let e=L.current?.textarea??null;return w?.(e),()=>w?.(null)},[w]),(0,c.useEffect)(()=>{let e=L.current;e&&e.value!==t&&e.update({value:t})},[t]),(0,c.useEffect)(()=>{let e=L.current;if(!e)return;let t=N??!B.isValid;e.textarea.disabled=!!C,e.textarea.id=I??"",e.textarea.name=k??"",P?e.textarea.setAttribute("aria-label",P):e.textarea.removeAttribute("aria-label"),j?e.textarea.setAttribute("data-form-root",String(j)):e.textarea.removeAttribute("data-form-root"),S?e.textarea.placeholder=S:e.textarea.removeAttribute("placeholder"),t?e.textarea.setAttribute("aria-invalid",String(t)):e.textarea.removeAttribute("aria-invalid"),R?e.textarea.setAttribute("aria-describedby",R):e.textarea.removeAttribute("aria-describedby")},[R,N,P,C,j,I,B.isValid,k,S]);let V=async()=>{await (0,b.l)(t)?u.oR.success(D("Copied to clipboard")):u.oR.error(D("Failed to copy"))},z=D(B.messageKey),K=`${F.line}:${F.column}`;return(0,a.jsxs)("div",{className:(0,v.cn)("border-input bg-background focus-within:border-ring focus-within:ring-ring/50 overflow-hidden rounded-lg border transition-colors focus-within:ring-3",T),"data-form-root":j,...M,children:[(0,a.jsxs)("div",{className:"bg-muted/30 flex h-8 items-center justify-between border-b px-2",children:[(0,a.jsxs)("div",{className:"text-muted-foreground flex min-w-0 items-center gap-1.5 text-xs font-medium",children:[(0,a.jsx)(i.A,{className:"h-3.5 w-3.5","aria-hidden":"true"}),(0,a.jsx)("span",{children:D("JSON")}),(0,a.jsx)("span",{className:"text-muted-foreground/70 font-mono",children:K})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:(0,v.cn)("flex items-center gap-1 text-xs",B.isValid?"text-emerald-600":"text-destructive"),children:[B.isValid?(0,a.jsx)(o.A,{className:"h-3.5 w-3.5","aria-hidden":"true"}):(0,a.jsx)(s.A,{className:"h-3.5 w-3.5","aria-hidden":"true"}),z]}),(0,a.jsxs)(y.$,{type:"button",variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:V,disabled:C||!t,children:[(0,a.jsx)(r.A,{className:"mr-1 h-3.5 w-3.5","aria-hidden":"true"}),D("Copy")]}),(0,a.jsxs)(y.$,{type:"button",variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:()=>{let e=function(e){let t=e.trim();if(!t)return{didFormat:!1,value:e};try{return{didFormat:!0,value:JSON.stringify(JSON.parse(t),null,2)}}catch{return{didFormat:!1,value:e}}}(t);e.didFormat&&n(e.value)},disabled:C||!B.isValid||!t.trim(),children:[(0,a.jsx)(l.A,{className:"mr-1 h-3.5 w-3.5","aria-hidden":"true"}),D("Format JSON")]})]})]}),(0,a.jsx)("div",{className:(0,v.cn)("bg-background relative overflow-hidden pl-2","has-[textarea:disabled]:bg-input/30 has-[textarea:disabled]:opacity-70",A),children:(0,a.jsx)("div",{ref:O,className:"json-code-editor-yace text-foreground h-full font-mono text-xs leading-5"})})]})}},24877(e,t,n){"use strict";var a=n(72361),i=n(3501),o=n(12798),s=n(14653),r=n(66002),l=n(68413),c=n(6702),d=n(91460),u=n(72868),h=n(1738);function p(e){try{if(!e.trim())return[];let t=JSON.parse(e);if(!t||"object"!=typeof t||Array.isArray(t))return[];return Object.entries(t).map((e,t)=>{let[n,a]=e;return{id:`${Date.now()}-${t}`,key:n,value:"object"==typeof a?JSON.stringify(a):String(a)}})}catch{return[]}}function m(e){let{value:t,onChange:n,disabled:m=!1,keyPlaceholder:g,valuePlaceholder:f,keyLabel:y,valueLabel:b,emptyMessage:v,template:k,valueType:x="string"}=e,{t:w}=(0,c.Bd)(),C=v??w('No mappings configured. Click "Add Row" to get started.'),A=g??w("Key"),S=f??w("Value"),P=y??w("Key"),T=b??w("Value"),[I,R]=(0,l.useState)("visual"),[N,j]=(0,l.useState)(()=>p(t)),[M,D]=(0,l.useState)(t),O=e=>{j(p(e))};(0,l.useEffect)(()=>{t!==M&&(D(t),O(t))},[t]);let L=e=>{if(0===e.length)return"";let t={};return e.forEach(e=>{if(e.key.trim()){let n=e.value.trim();if("number"===x)n=Number(n)||0;else if("any"===x)try{n=JSON.parse(e.value)}catch{n=e.value.trim()}t[e.key.trim()]=n}}),JSON.stringify(t,null,2)},q=(e,t,a)=>{let i=N.map(n=>n.id===e?{...n,[t]:a}:n);j(i);let o=L(i);D(o),n(o)};return(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("div",{className:"flex items-center justify-between",children:(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(u.$,{type:"button",variant:"outline",size:"sm",onClick:()=>{if("visual"===I){let e=L(N);D(e),n(e),R("json")}else O(M),R("visual")},disabled:m,children:"visual"===I?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.A,{className:"mr-2 h-4 w-4"}),w("JSON Mode")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.A,{className:"mr-2 h-4 w-4"}),w("Visual Mode")]})}),k&&(0,a.jsx)(u.$,{type:"button",variant:"link",size:"sm",className:"h-auto p-0",onClick:()=>{if(!k)return;let e=JSON.stringify(k,null,2);D(e),n(e),O(e)},disabled:m,children:w("Fill Template")})]})}),"visual"===I?(0,a.jsxs)("div",{className:"space-y-2",children:[N.length>0?(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("div",{className:"grid grid-cols-[1fr_1fr_auto] gap-2 text-sm font-medium",children:[(0,a.jsx)("div",{children:P}),(0,a.jsx)("div",{children:T}),(0,a.jsx)("div",{className:"w-10"})]}),N.map(e=>(0,a.jsxs)("div",{className:"grid grid-cols-[1fr_1fr_auto] gap-2",children:[(0,a.jsx)(h.p,{value:e.key,onChange:t=>q(e.id,"key",t.target.value),placeholder:A,disabled:m}),(0,a.jsx)(h.p,{value:e.value,onChange:t=>q(e.id,"value",t.target.value),placeholder:S,disabled:m}),(0,a.jsx)(u.$,{type:"button",variant:"ghost",size:"icon","aria-label":"Delete row",onClick:()=>{var t;let a,i;return t=e.id,j(a=N.filter(e=>e.id!==t)),void(D(i=L(a)),n(i))},disabled:m,className:"h-10 w-10",children:(0,a.jsx)(s.A,{className:"h-4 w-4","aria-hidden":"true"})})]},e.id))]}):(0,a.jsx)("div",{className:"text-muted-foreground flex h-24 items-center justify-center rounded-md border border-dashed text-sm",children:C}),(0,a.jsxs)(u.$,{type:"button",variant:"outline",size:"sm",onClick:()=>{j([...N,{id:`${Date.now()}`,key:"",value:""}])},disabled:m,className:"w-full",children:[(0,a.jsx)(r.A,{className:"mr-2 h-4 w-4"}),w("Add Row")]})]}):(0,a.jsx)(d.B,{value:M,onChange:e=>{D(e),n(e),O(e)},placeholder:k?JSON.stringify(k,null,2):'{"key": "value"}',disabled:m,ariaLabel:w("JSON")})]})}n.d(t,{i:()=>m})},94150(e,t,n){"use strict";var a=n(72361),i=n(68413),o=n(60140);let s=(0,i.createContext)(null);function r(e){return(0,a.jsx)(s.Provider,{value:e.container,children:e.children})}function l(e){let t=(0,i.useContext)(s);return t?(0,o.createPortal)(e.children,t):null}n.d(t,{j:()=>l,u:()=>r})},27781(e,t,n){"use strict";var a=n(72361),i=n(5623),o=n(6702),s=n(72868),r=n(74501),l=n(56275);function c(e){let{children:t,contentProps:n,triggerProps:c,...d}=e,{t:u}=(0,o.Bd)();return(0,a.jsxs)(r.AM,{...d,children:[(0,a.jsxs)(r.Wv,{...c,className:(0,l.cn)("size-5",c?.className),render:(0,a.jsx)(s.$,{variant:"outline",size:"icon"}),children:[(0,a.jsx)("span",{className:"sr-only",children:u("Learn more")}),(0,a.jsx)(i.A,{className:"size-4 [&>circle]:hidden"})]}),(0,a.jsx)(r.hl,{side:"top",align:"start",...n,className:(0,l.cn)("text-muted-foreground text-sm",n?.className),children:t})]})}n.d(t,{e:()=>c})},28305(e,t,n){"use strict";var a=n(72361),i=n(55724),o=n(6702),s=n(56275);let r={sm:"size-4",md:"size-6",lg:"size-8"};function l(e){let{t}=(0,o.Bd)(),n=r[e.size??"md"];return e.inline?(0,a.jsxs)("span",{className:(0,s.cn)("inline-flex items-center gap-2",e.className),children:[(0,a.jsx)(i.A,{className:(0,s.cn)(n,"animate-spin")}),null!=e.message&&(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:e.message})]}):(0,a.jsxs)("div",{className:(0,s.cn)("flex min-h-[200px] flex-col items-center justify-center gap-3",e.className),children:[(0,a.jsx)("div",{className:"animate-spin",children:(0,a.jsx)(i.A,{className:n})}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:e.message??t("Loading...")})]})}n.d(t,{G:()=>l})},39130(e,t,n){"use strict";var a=n(72361),i=n(47488),o=n(64798),s=n(98869),r=n(59599),l=n(60770);function c(e){return(0,s.I)()?(0,a.jsx)("div",{className:e.className,children:e.children}):(0,a.jsx)(r.PY1.div,{initial:l.mL.pageEnter.initial,animate:l.mL.pageEnter.animate,transition:l.fI.default,className:e.className,children:e.children})}function d(){let e=(0,s.I)(),t=(0,i.k)({select:e=>e.matches.at(-1)?.routeId??e.location.pathname});return e?(0,a.jsx)("div",{className:"flex min-h-0 flex-1 flex-col",children:(0,a.jsx)(o.s,{})}):(0,a.jsx)(r.PY1.div,{initial:l.mL.pageEnter.initial,animate:l.mL.pageEnter.animate,transition:l.fI.fast,className:"flex min-h-0 flex-1 flex-col",children:(0,a.jsx)(o.s,{})},t)}function u(e){return(0,s.I)()?(0,a.jsx)("div",{className:e.className,children:e.children}):(0,a.jsx)(r.PY1.div,{variants:e.variants??l.j0,initial:"initial",animate:"animate",className:e.className,children:e.children})}function h(e){return(0,a.jsx)(r.PY1.div,{variants:e.variants??l.DX,className:e.className,children:e.children})}function p(e){return(0,s.I)()?(0,a.jsx)("div",{className:e.className,children:e.children}):(0,a.jsx)(r.PY1.div,{variants:l.AK,initial:"initial",animate:"animate",className:e.className,children:e.children})}function m(e){return(0,a.jsx)(r.PY1.div,{variants:l.mz,className:e.className,children:e.children})}function g(e){return(0,s.I)()?(0,a.jsx)("div",{className:e.className,children:e.children}):(0,a.jsx)(r.PY1.div,{initial:l.mL.fadeIn.initial,animate:l.mL.fadeIn.animate,transition:{...l.fI.default,delay:e.delay},className:e.className,children:e.children})}n.d(t,{Hd:()=>m,JX:()=>u,N8:()=>d,Tc:()=>h,Z_:()=>c,_A:()=>g,nD:()=>p})},2530(e,t,n){"use strict";var a=n(72361),i=n(68413);let o={ai:()=>n.e(4744).then(n.bind(n,63227)).then(e=>e),bi:()=>n.e(31127).then(n.bind(n,45962)).then(e=>e),bs:()=>n.e(99353).then(n.bind(n,24320)).then(e=>e),cg:()=>n.e(49884).then(n.bind(n,28119)).then(e=>e),ci:()=>n.e(6314).then(n.bind(n,53649)).then(e=>e),di:()=>n.e(51129).then(n.bind(n,71104)).then(e=>e),fa:()=>n.e(77515).then(n.bind(n,79430)).then(e=>e),fa6:()=>n.e(24151).then(n.bind(n,90122)).then(e=>e),fc:()=>n.e(66709).then(n.bind(n,54452)).then(e=>e),fi:()=>n.e(81923).then(n.bind(n,69326)).then(e=>e),gi:()=>n.e(79926).then(n.bind(n,82357)).then(e=>e),go:()=>n.e(82424).then(n.bind(n,17835)).then(e=>e),gr:()=>n.e(56139).then(n.bind(n,30214)).then(e=>e),hi:()=>n.e(48085).then(n.bind(n,10484)).then(e=>e),hi2:()=>n.e(59309).then(n.bind(n,24124)).then(e=>e),im:()=>n.e(77396).then(n.bind(n,33439)).then(e=>e),io:()=>n.e(89534).then(n.bind(n,82861)).then(e=>e),io5:()=>n.e(46981).then(n.bind(n,73508)).then(e=>e),lia:()=>n.e(240).then(n.bind(n,91827)).then(e=>e),lu:()=>n.e(5229).then(n.bind(n,67836)).then(e=>e),md:()=>n.e(3239).then(n.bind(n,56122)).then(e=>e),pi:()=>n.e(89197).then(n.bind(n,36860)).then(e=>e),ri:()=>n.e(95143).then(n.bind(n,76698)).then(e=>e),rx:()=>n.e(49120).then(n.bind(n,32131)).then(e=>e),si:()=>n.e(63898).then(n.bind(n,6433)).then(e=>e),sl:()=>n.e(89253).then(n.bind(n,35396)).then(e=>e),tb:()=>n.e(18496).then(n.bind(n,43075)).then(e=>e),tfi:()=>n.e(23427).then(n.bind(n,73006)).then(e=>e),ti:()=>n.e(94345).then(n.bind(n,56432)).then(e=>e),vsc:()=>n.e(5430).then(n.bind(n,62133)).then(e=>e),wi:()=>n.e(89126).then(n.bind(n,14917)).then(e=>e)},s=new Map,r=[[/^Ai[A-Z0-9]/,["ai"]],[/^Bi[A-Z0-9]/,["bi"]],[/^Bs[A-Z0-9]/,["bs"]],[/^Cg[A-Z0-9]/,["cg"]],[/^Ci[A-Z0-9]/,["ci"]],[/^Di[A-Z0-9]/,["di"]],[/^Fa[A-Z0-9]/,["fa6","fa"]],[/^Fc[A-Z0-9]/,["fc"]],[/^Fi[A-Z0-9]/,["fi"]],[/^Gi[A-Z0-9]/,["gi"]],[/^Go[A-Z0-9]/,["go"]],[/^Gr[A-Z0-9]/,["gr"]],[/^Hi[A-Z0-9]/,["hi2","hi"]],[/^Im[A-Z0-9]/,["im"]],[/^Io[A-Z0-9]/,["io5","io"]],[/^Lia[A-Z0-9]/,["lia"]],[/^Lu[A-Z0-9]/,["lu"]],[/^Md[A-Z0-9]/,["md"]],[/^Pi[A-Z0-9]/,["pi"]],[/^Ri[A-Z0-9]/,["ri"]],[/^Rx[A-Z0-9]/,["rx"]],[/^Si[A-Z0-9]/,["si"]],[/^Sl[A-Z0-9]/,["sl"]],[/^Tb[A-Z0-9]/,["tb"]],[/^Tfi[A-Z0-9]/,["tfi"]],[/^Ti[A-Z0-9]/,["ti"]],[/^Vsc[A-Z0-9]/,["vsc"]],[/^Wi[A-Z0-9]/,["wi"]]];async function l(e){for(let t of r.find(t=>{let[n]=t;return n.test(e)})?.[1]??[])try{let n=(await function(e){let t=s.get(e);if(t)return t;let n=o[e]();return s.set(e,n),n}(t))[e];if("function"==typeof n)return n}catch{}return null}function c(e){let t,{name:n,...o}=e,s=(t=n?.trim())&&/^[A-Z][A-Za-z0-9]*$/.test(t)?t:null,[r,c]=(0,i.useState)(null);if((0,i.useEffect)(()=>{let e=!1;if(s)return l(s).then(t=>{e||c({iconName:s,Icon:t})}),()=>{e=!0}},[s]),!s||r?.iconName!==s||!r.Icon)return null;let d=r.Icon;return(0,a.jsx)(d,{...o})}n.d(t,{x:()=>c})},42817(e,t,n){"use strict";var a=n(72361),i=n(68413),o=n(29625),s=n(85468),r=n(56275);let l={success:"bg-success",warning:"bg-warning",danger:"bg-destructive",info:"bg-info",neutral:"bg-neutral",purple:"bg-chart-4",amber:"bg-warning",blue:"bg-chart-1",cyan:"bg-chart-2",green:"bg-success",grey:"bg-neutral",indigo:"bg-chart-1","light-blue":"bg-info","light-green":"bg-emerald-400",lime:"bg-chart-3",orange:"bg-warning",pink:"bg-chart-5",red:"bg-destructive",teal:"bg-chart-2",violet:"bg-chart-4",yellow:"bg-warning"},c={success:"text-success",warning:"text-warning",danger:"text-destructive",info:"text-info",neutral:"text-muted-foreground",purple:"text-chart-4",amber:"text-warning",blue:"text-chart-1",cyan:"text-chart-2",green:"text-success",grey:"text-muted-foreground",indigo:"text-chart-1","light-blue":"text-info","light-green":"text-emerald-500 dark:text-emerald-300",lime:"text-chart-3",orange:"text-warning",pink:"text-chart-5",red:"text-destructive",teal:"text-chart-2",violet:"text-chart-4",yellow:"text-warning"},d=i.createContext("badge"),u={sm:"h-5 gap-1 px-1.5 text-sm leading-none",md:"h-5 gap-1 px-1.5 text-sm leading-none",lg:"h-6 gap-1.5 px-2 text-sm leading-none"},h={sm:"gap-1 text-sm leading-none",md:"gap-1 text-sm leading-none",lg:"gap-1.5 text-sm leading-none"};function p(e){let{label:t,children:n,icon:p,variant:m,size:g="sm",pulse:f=!1,showDot:y=!1,copyable:b=!0,copyText:v,autoColor:k,type:x,className:w,onClick:C,...A}=e,{copyToClipboard:S}=(0,o.C)(),P=i.useContext(d),T=x??P,I=k?(0,s.qA)(k):m??"neutral",R=n??(t?(0,a.jsx)("span",{className:"min-w-0 truncate leading-normal",children:t}):null),N=b?`Click to copy: ${v||t||""}`:t||void 0;return(0,a.jsxs)("span",{"data-slot":"status-badge",className:(0,r.cn)("inline-flex w-fit max-w-full min-w-0 shrink items-center font-medium tracking-normal whitespace-nowrap transition-colors","badge"===T?(0,r.cn)("rounded-4xl",u[g??"sm"]):(0,r.cn)(h[g??"sm"],"underline"===T&&"border-b border-current pb-px"),c[I],f&&"animate-pulse",b&&"cursor-copy hover:brightness-95 active:scale-95 dark:hover:brightness-110",w),onClick:e=>{b&&(e.stopPropagation(),S(v||t||"")),C?.(e)},title:N,...A,children:[y&&(0,a.jsx)("span",{className:(0,r.cn)("inline-block size-1.5 shrink-0 rounded-full",l[I]),"aria-hidden":"true"}),p&&(0,a.jsx)(p,{className:"size-3.5 shrink-0"}),R]})}function m(e){let{className:t,empty:n=(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:"-"}),getKey:o,items:s,max:l=2,moreLabel:c,renderItem:d,...u}=e;if(0===s.length)return n;let h=s.slice(0,l),m=s.length-l;return(0,a.jsxs)("div",{className:(0,r.cn)("flex max-w-full min-w-0 items-center gap-1 overflow-hidden",t),...u,children:[h.map((e,t)=>(0,a.jsx)(i.Fragment,{children:d(e,t)},o?.(e,t)??t)),m>0&&(0,a.jsx)(p,{label:c?.(m)??`+${m}`,variant:"neutral",size:"sm",copyable:!1,className:"shrink-0"})]})}n.d(t,{M8:()=>m,Wh:()=>p},{BQ:c,jk:l,lO:d})},61868(e,t,n){"use strict";var a=n(72361),i=n(46222),o=n(49510),s=n(798),r=n(95464),l=n(11895),c=n(43178),d=n(4895),u=n(74401),h=n(56275);function p(e){let{className:t,...n}=e;return(0,a.jsx)(i.X,{"data-slot":"accordion",className:(0,h.cn)("flex w-full flex-col",t),...n})}function m(e){let{className:t,...n}=e;return(0,a.jsx)(o.A,{"data-slot":"accordion-item",className:(0,h.cn)("not-last:border-b",t),...n})}function g(e){let{className:t,children:n,...i}=e;return(0,a.jsx)(s.u,{className:"flex",children:(0,a.jsxs)(r.$,{"data-slot":"accordion-trigger",className:(0,h.cn)("group/accordion-trigger focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:after:border-ring **:data-[slot=accordion-trigger-icon]:text-muted-foreground relative flex flex-1 items-start justify-between rounded-lg border border-transparent py-2.5 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-3 aria-disabled:pointer-events-none aria-disabled:opacity-50 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4",t),...i,children:[n,(0,a.jsx)(u.n,{icon:c.A,strokeWidth:2,"data-slot":"accordion-trigger-icon",className:"pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"}),(0,a.jsx)(u.n,{icon:d.A,strokeWidth:2,"data-slot":"accordion-trigger-icon",className:"pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"})]})})}function f(e){let{className:t,children:n,...i}=e;return(0,a.jsx)(l.v,{"data-slot":"accordion-content",className:"data-open:animate-accordion-down data-closed:animate-accordion-up overflow-hidden text-sm",...i,children:(0,a.jsx)("div",{className:(0,h.cn)("[&_a]:hover:text-foreground h-(--accordion-panel-height) pt-0 pb-2.5 data-ending-style:h-0 data-starting-style:h-0 [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4",t),children:n})})}n.d(t,{$m:()=>g,As:()=>m,nD:()=>p,ub:()=>f})},92379(e,t,n){"use strict";var a=n(72361),i=n(30529),o=n(75707),s=n(35286),r=n(95086),l=n(71162),c=n(55496),d=n(41880),u=n(79228);n(68413);var h=n(72868),p=n(56275);function m(e){let{...t}=e;return(0,a.jsx)(i.V,{"data-slot":"alert-dialog",...t})}function g(e){let{...t}=e;return(0,a.jsx)(o.t,{"data-slot":"alert-dialog-trigger",...t})}function f(e){let{...t}=e;return(0,a.jsx)(s.Z,{"data-slot":"alert-dialog-portal",...t})}function y(e){let{className:t,...n}=e;return(0,a.jsx)(r.X,{"data-slot":"alert-dialog-overlay",className:(0,p.cn)("data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0 fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs",t),...n})}function b(e){let{className:t,size:n="default",...i}=e;return(0,a.jsxs)(f,{children:[(0,a.jsx)(y,{}),(0,a.jsx)(l.h,{"data-slot":"alert-dialog-content","data-size":n,className:(0,p.cn)("group/alert-dialog-content bg-popover text-popover-foreground ring-foreground/10 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 fixed top-[var(--dialog-viewport-center,50dvh)] left-1/2 z-50 grid max-h-[var(--dialog-available-height,calc(100dvh-2rem))] w-full overflow-y-auto overscroll-contain -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl p-4 ring-1 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm",t),...i})]})}function v(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"alert-dialog-header",className:(0,p.cn)("grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr]",t),...n})}function k(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"alert-dialog-footer",className:(0,p.cn)("bg-muted/50 -mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t p-4 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",t),...n})}function x(e){let{className:t,...n}=e;return(0,a.jsx)(c.L,{"data-slot":"alert-dialog-title",className:(0,p.cn)("text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2",t),...n})}function w(e){let{className:t,...n}=e;return(0,a.jsx)(d.r,{"data-slot":"alert-dialog-description",className:(0,p.cn)("text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3",t),...n})}function C(e){let{className:t,...n}=e;return(0,a.jsx)(h.$,{"data-slot":"alert-dialog-action",className:(0,p.cn)(t),...n})}function A(e){let{className:t,variant:n="outline",size:i="default",...o}=e;return(0,a.jsx)(u.H,{"data-slot":"alert-dialog-cancel",className:(0,p.cn)(t),render:(0,a.jsx)(h.$,{variant:n,size:i}),...o})}n.d(t,{$v:()=>w,EO:()=>b,Lt:()=>m,Rx:()=>C,Zr:()=>A,ck:()=>k,r7:()=>x,tv:()=>g,wd:()=>v})},43284(e,t,n){"use strict";var a=n(72361),i=n(65291);n(68413);var o=n(56275);let s=(0,i.F)("group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"}},defaultVariants:{variant:"default"}});function r(e){let{className:t,variant:n,...i}=e;return(0,a.jsx)("div",{"data-slot":"alert",role:"alert",className:(0,o.cn)(s({variant:n}),t),...i})}function l(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"alert-title",className:(0,o.cn)("[&_a]:hover:text-foreground font-medium group-has-[>svg]/alert:col-start-2 [&_a]:underline [&_a]:underline-offset-3",t),...n})}function c(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"alert-description",className:(0,o.cn)("text-muted-foreground [&_a]:hover:text-foreground text-sm text-balance md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4",t),...n})}function d(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"alert-action",className:(0,o.cn)("absolute top-2 right-2",t),...n})}n.d(t,{Fc:()=>r,T2:()=>d,TN:()=>c,XL:()=>l})},90879(e,t,n){"use strict";var a=n(56722),i=n(36198),o=n(65291),s=n(56275);let r=(0,o.F)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",warning:"border-warning/40 bg-warning/10 text-warning focus-visible:ring-warning/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function l(e){let{className:t,variant:n="default",render:o,...l}=e;return(0,i.C)({defaultTagName:"span",props:(0,a.v6)({className:(0,s.cn)(r({variant:n}),t)},l),render:o,state:{slot:"badge",variant:n}})}n.d(t,{E:()=>l})},72868(e,t,n){"use strict";var a=n(72361),i=n(24039),o=n(65291),s=n(68413),r=n(56275);let l=(0,o.F)("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",outline:"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-md px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-7 gap-1 rounded-md px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",lg:"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-8","icon-xs":"size-6 rounded-md in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-7 rounded-md in-data-[slot=button-group]:rounded-lg","icon-lg":"size-9"}},defaultVariants:{variant:"default",size:"default"}});function c(e){let{className:t,variant:n="default",size:o="default",nativeButton:c,render:d,...u}=e;return(0,a.jsx)(i.$,{"data-slot":"button",className:(0,r.cn)(l({variant:n,size:o,className:t})),nativeButton:c??(!(d&&(0,s.isValidElement)(d))||"button"===d.type),render:d,...u})}n.d(t,{$:()=>c},{r:l})},68974(e,t,n){"use strict";var a=n(72361);n(68413);var i=n(56275);function o(e){let{className:t,size:n="default",...o}=e;return(0,a.jsx)("div",{"data-slot":"card","data-size":n,className:(0,i.cn)("group/card bg-card text-card-foreground ring-foreground/10 flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",t),...o})}function s(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-header",className:(0,i.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",t),...n})}function r(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-title",className:(0,i.cn)("text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",t),...n})}function l(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-description",className:(0,i.cn)("text-muted-foreground text-sm",t),...n})}function c(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-action",className:(0,i.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",t),...n})}function d(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-content",className:(0,i.cn)("px-4 group-data-[size=sm]/card:px-3",t),...n})}function u(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"card-footer",className:(0,i.cn)("bg-muted/50 flex items-center rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3",t),...n})}n.d(t,{BT:()=>l,Wu:()=>d,X9:()=>c,ZB:()=>r,Zp:()=>o,aR:()=>s,wL:()=>u})},82655(e,t,n){"use strict";var a=n(72361),i=n(97343),o=n(80006),s=n(43247),r=n(74401),l=n(56275);function c(e){let{className:t,...n}=e;return(0,a.jsx)(i.y,{"data-slot":"checkbox",className:(0,l.cn)("peer border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary relative flex size-4 shrink-0 items-center justify-center rounded-sm border transition-colors outline-none group-has-disabled/field:opacity-50 after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3",t),...n,children:(0,a.jsx)(o.P,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none [&>svg]:size-3.5",children:(0,a.jsx)(r.n,{icon:s.A,strokeWidth:2})})})}n.d(t,{S:()=>c})},6242(e,t,n){"use strict";var a=n(72361),i=n(45194),o=n(18124),s=n(89288);function r(e){let{...t}=e;return(0,a.jsx)(i.N,{"data-slot":"collapsible",...t})}function l(e){let{...t}=e;return(0,a.jsx)(o.R,{"data-slot":"collapsible-trigger",...t})}function c(e){let{...t}=e;return(0,a.jsx)(s.j,{"data-slot":"collapsible-content",...t})}n.d(t,{Ke:()=>c,Nt:()=>r,R6:()=>l})},8150(e,t,n){"use strict";var a=n(72361),i=n(4421),o=n(67834),s=n(68413),r=n(60140),l=n(6702),c=n(1738),d=n(56275);function u(e){let{options:t,value:n="",onValueChange:u,placeholder:h="Select or type...",emptyText:p="No option found.",className:m,popupClassName:g,id:f,allowCustomValue:y=!1,openOnFocus:b=!0,disabled:v=!1,onKeyDown:k,"aria-label":x,"aria-labelledby":w,"aria-invalid":C}=e,{t:A}=(0,l.Bd)(),S=s.useId(),[P,T]=s.useState(!1),[I,R]=s.useState(""),[N,j]=s.useState(!1),[M,D]=s.useState(-1),O=s.useRef(null),L=s.useRef(null),q=s.useRef(null),U=s.useRef(null),[E,F]=s.useState(null),_=s.useRef(!1),B=s.useMemo(()=>t.find(e=>e.value===n),[t,n]),G=P?I:B?.label??n,V=s.useMemo(()=>{if(!N||!I.trim())return t;let e=I.toLowerCase().trim();return t.filter(t=>t.label.toLowerCase().includes(e)||t.value.toLowerCase().includes(e))},[t,I,N]);s.useEffect(()=>{D(-1)},[V]),s.useEffect(()=>{if(!P)return;let e=e=>{let t=e.target;!O.current||O.current.contains(t)||U.current?.contains(t)||(T(!1),R(""))};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[P]),s.useEffect(()=>{if(!P)return void F(null);let e=L.current;if(!e)return;let t=e.closest('[role="dialog"]')??document.body,n=()=>{let n=e.getBoundingClientRect();F({container:t,top:n.bottom+4,left:n.left,width:n.width})};return n(),window.addEventListener("scroll",n,!0),window.addEventListener("resize",n),()=>{window.removeEventListener("scroll",n,!0),window.removeEventListener("resize",n)}},[P]);let z=e=>{u(e),T(!1),R(""),L.current?.focus()};s.useEffect(()=>{if(M<0||!q.current)return;let e=q.current.children[M];e?.scrollIntoView({block:"nearest"})},[M]);let K=P&&!v&&(V.length>0||y&&I.trim());return(0,a.jsxs)("div",{ref:O,className:"relative",children:[(0,a.jsx)(c.p,{ref:L,id:f,type:"text",role:"combobox",disabled:v,"aria-label":x,"aria-labelledby":w,"aria-invalid":C,"aria-expanded":!!K,"aria-controls":K&&V.length>0?S:void 0,"aria-activedescendant":K&&M>=0?`${S}-${M}`:void 0,"aria-haspopup":"listbox","aria-autocomplete":"list",autoComplete:"off",placeholder:h,value:G,onChange:e=>{let t=e.target.value;R(t),j(!0),y&&u(t),P||T(!0)},onPointerDown:()=>{_.current=!0,document.activeElement!==L.current||P||(R(y?n:""),j(!1),T(!0))},onFocus:()=>{R(y?n:""),j(!1),(b||_.current)&&T(!0),_.current=!1},onBlur:()=>{T(!1),R("")},onKeyDown:e=>{(e=>{if(!P&&("ArrowDown"===e.key||"ArrowUp"===e.key)){e.preventDefault(),R(y?n:""),j(!1),T(!0);return}if(P)switch(e.key){case"ArrowDown":e.preventDefault(),D(e=>ee>0?e-1:V.length-1);break;case"Enter":M>=0&&V[M]?(e.preventDefault(),z(V[M].value)):y&&I.trim()?(e.preventDefault(),z(I.trim())):(k||e.preventDefault(),T(!1),R(""));break;case"Escape":e.preventDefault(),e.stopPropagation(),T(!1),R("")}})(e),e.defaultPrevented||k?.(e)},className:(0,d.cn)("pr-9",m)}),(0,a.jsx)(i.A,{className:"pointer-events-none absolute top-1/2 right-3 size-4 shrink-0 -translate-y-1/2 opacity-50"}),K&&E&&(0,r.createPortal)((0,a.jsx)("div",{ref:U,style:{position:"fixed",top:E.top,left:E.left,width:E.width},className:(0,d.cn)("bg-popover text-popover-foreground z-100 rounded-md border shadow-md",g),children:V.length>0?(0,a.jsx)("ul",{ref:q,id:S,role:"listbox",className:"max-h-[200px] overflow-y-auto p-1",children:V.map((e,t)=>(0,a.jsxs)("li",{id:`${S}-${t}`,role:"option","aria-selected":n===e.value,"data-highlighted":t===M,className:(0,d.cn)("relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm select-none",t===M&&"bg-accent text-accent-foreground",n===e.value&&"font-medium"),onMouseEnter:()=>D(t),onMouseDown:t=>{t.preventDefault(),z(e.value)},children:[(0,a.jsx)(o.A,{className:(0,d.cn)("size-4 shrink-0",n===e.value?"opacity-100":"opacity-0")}),e.icon&&(0,a.jsx)("span",{"aria-hidden":!0,children:e.icon}),(0,a.jsx)("span",{className:"truncate",children:e.label})]},e.value))}):(0,a.jsxs)("div",{className:"px-2 py-6 text-center text-sm",children:[A(p),y&&I.trim()&&(0,a.jsx)("div",{className:"text-muted-foreground mt-1 text-xs",children:A('Press Enter to use "{{value}}"',{value:I.trim()})})]})}),E.container)]})}n.d(t,{o:()=>u})},49641(e,t,n){"use strict";var a=n(72361),i=n(83127),o=n(26346),s=n(39794),r=n(27566),l=n(93318),c=n(96834),d=n(57002),u=n(64466),h=n(24746),p=n(40719),m=n(94475),g=n(61635),f=n(90596),y=n(99990),b=n(92922),v=n(5777),k=n(43178),x=n(57717),w=n(43247),C=n(74401),A=n(68413),S=n(6702),P=n(72868),T=n(8150),I=n(6264),R=n(36852),N=n(56275);function j(e){return"options"in e?e.allowCustomValue?(0,a.jsx)(T.o,{id:e.id,"aria-label":e["aria-label"],"aria-labelledby":e["aria-labelledby"],"aria-invalid":e["aria-invalid"],onKeyDown:e.onKeyDown,options:e.options,value:e.value??"",onValueChange:t=>e.onValueChange?.(t),placeholder:e.searchPlaceholder??e.placeholder,emptyText:e.emptyText,className:e.className,popupClassName:e.popupClassName,allowCustomValue:e.allowCustomValue,openOnFocus:e.openOnFocus}):(0,a.jsx)(M,{...e}):(0,a.jsx)(i.i,{...e})}function M(e){let{t}=(0,S.Bd)(),[n,o]=A.useState(!1),[s,r]=A.useState(""),l=K(),c=e.options.find(t=>t.value===e.value),d=c?.label??e.value??"";return(0,a.jsxs)(i.i,{items:e.options,value:c??null,name:e.name,disabled:e.disabled,open:n&&!e.disabled,inputValue:n?s:d,onInputValueChange:(e,t)=>{"input-change"===t.reason&&r(e)},onOpenChange:(e,t)=>{o(e),"input-change"!==t.reason&&r("")},onValueChange:t=>{t&&e.onValueChange?.(t.value)},filter:(e,t)=>{let n=t.trim().toLowerCase();return e.label.toLowerCase().includes(n)||e.value.toLowerCase().includes(n)},isItemEqualToValue:(e,t)=>e.value===t.value,children:[(0,a.jsx)("div",{ref:l,className:(0,N.cn)("min-w-0",e.className),children:(0,a.jsx)(q,{ref:e.ref,id:e.id,disabled:e.disabled,onBlur:e.onBlur,onKeyDown:e.onKeyDown,onFocus:()=>{e.openOnFocus&&o(!0)},"aria-label":e["aria-label"],"aria-labelledby":e["aria-labelledby"],"aria-describedby":e["aria-describedby"],"aria-invalid":e["aria-invalid"],placeholder:e.searchPlaceholder??e.placeholder??t("Search..."),triggerAriaLabel:e["aria-label"]??t("Open"),className:"h-full min-h-8 w-full",children:e.showSelectedIcon&&!n&&c?.icon&&(0,a.jsx)(I.Sq,{align:"inline-start","aria-hidden":"true",children:c.icon})})}),(0,a.jsxs)(U,{anchor:l,className:e.popupClassName,children:[(0,a.jsx)(B,{children:e.emptyText??t("No results found")}),(0,a.jsx)(E,{children:e=>(0,a.jsxs)(F,{value:e,disabled:e.disabled,children:[e.icon&&(0,a.jsx)("span",{"aria-hidden":!0,children:e.icon}),(0,a.jsxs)("span",{className:"min-w-0 break-words",children:[e.label,e.description&&(0,a.jsx)("span",{className:"text-muted-foreground block text-xs break-all",children:e.description})]})]},e.value)})]})]})}function D(e){let{...t}=e;return(0,a.jsx)(o.p,{"data-slot":"combobox-value",...t})}function O(e){let{className:t,children:n,...i}=e;return(0,a.jsxs)(s.M,{"data-slot":"combobox-trigger",className:(0,N.cn)("[&_svg:not([class*='size-'])]:size-4",t),...i,children:[n,(0,a.jsx)(C.n,{icon:k.A,strokeWidth:2,className:"text-muted-foreground pointer-events-none size-4"})]})}function L(e){let{className:t,...n}=e;return(0,a.jsx)(r.V,{"data-slot":"combobox-clear",render:(0,a.jsx)(I.Ik,{variant:"ghost",size:"icon-xs"}),className:(0,N.cn)(t),...n,children:(0,a.jsx)(C.n,{icon:x.A,strokeWidth:2,className:"pointer-events-none"})})}function q(e){let{className:t,children:n,disabled:i=!1,showTrigger:o=!0,showClear:s=!1,triggerAriaLabel:r,...c}=e;return(0,a.jsxs)(I.MG,{className:(0,N.cn)("w-auto",t),children:[(0,a.jsx)(l.o,{render:(0,a.jsx)(I.iV,{disabled:i}),...c}),(0,a.jsxs)(I.Sq,{align:"inline-end",children:[o&&(0,a.jsx)(I.Ik,{size:"icon-xs",variant:"ghost",render:(0,a.jsx)(O,{"aria-label":r}),"data-slot":"input-group-button",className:"group-has-data-[slot=combobox-clear]/input-group:hidden data-pressed:bg-transparent",disabled:i}),s&&(0,a.jsx)(L,{disabled:i})]}),n]})}function U(e){let{className:t,side:n="bottom",sideOffset:i=6,align:o="start",alignOffset:s=0,anchor:r,...l}=e,h=(0,R.P)();return(0,a.jsx)(c.K,{container:h,children:(0,a.jsx)(d.o,{side:n,sideOffset:i,align:o,alignOffset:s,anchor:r,className:"isolate z-50",children:(0,a.jsx)(u.I,{"data-slot":"combobox-content","data-chips":!!r,className:(0,N.cn)("group/combobox-content bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 *:data-[slot=input-group]:border-input/30 *:data-[slot=input-group]:bg-input/30 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 relative max-h-(--available-height) w-(--anchor-width) max-w-(--available-width) min-w-[calc(var(--anchor-width)+--spacing(7))] origin-(--transform-origin) overflow-hidden rounded-lg shadow-md ring-1 duration-100 data-[chips=true]:min-w-(--anchor-width) *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:shadow-none",t),...l})})})}function E(e){let{className:t,...n}=e;return(0,a.jsx)(h.e,{"data-slot":"combobox-list",className:(0,N.cn)("no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto overscroll-contain p-1 data-empty:p-0",t),...n})}function F(e){let{className:t,children:n,...i}=e;return(0,a.jsxs)(p.x,{"data-slot":"combobox-item",className:(0,N.cn)("data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground relative flex w-full cursor-default items-center gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...i,children:[n,(0,a.jsx)(m.Q,{render:(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center"}),children:(0,a.jsx)(C.n,{icon:w.A,strokeWidth:2,className:"pointer-events-none"})})]})}function _(e){let{...t}=e;return(0,a.jsx)(g.u,{"data-slot":"combobox-collection",...t})}function B(e){let{className:t,...n}=e;return(0,a.jsx)(f.$,{"data-slot":"combobox-empty",className:(0,N.cn)("text-muted-foreground hidden w-full justify-center py-2 text-center text-sm group-data-empty/combobox-content:flex",t),...n})}function G(e){let{className:t,...n}=e;return(0,a.jsx)(y.H,{"data-slot":"combobox-chips",className:(0,N.cn)("border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:border-destructive has-aria-invalid:ring-destructive/20 dark:bg-input/30 dark:has-aria-invalid:border-destructive/50 dark:has-aria-invalid:ring-destructive/40 flex min-h-8 flex-wrap items-center gap-1 rounded-lg border bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:ring-3 has-aria-invalid:ring-3 has-data-[slot=combobox-chip]:px-1",t),...n})}function V(e){let{className:t,children:n,showRemove:i=!0,...o}=e;return(0,a.jsxs)(b.e,{"data-slot":"combobox-chip",className:(0,N.cn)("bg-muted text-foreground flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm px-1.5 text-xs font-medium whitespace-nowrap has-disabled:pointer-events-none has-disabled:cursor-not-allowed has-disabled:opacity-50 has-data-[slot=combobox-chip-remove]:pr-0",t),...o,children:[n,i&&(0,a.jsx)(v.a,{render:(0,a.jsx)(P.$,{variant:"ghost",size:"icon-xs"}),className:"-ml-1 opacity-50 hover:opacity-100","data-slot":"combobox-chip-remove",children:(0,a.jsx)(C.n,{icon:x.A,strokeWidth:2,className:"pointer-events-none"})})]})}function z(e){let{className:t,...n}=e;return(0,a.jsx)(l.o,{"data-slot":"combobox-chip-input",className:(0,N.cn)("min-w-16 flex-1 outline-none",t),...n})}function K(){return A.useRef(null)}n.d(t,{$U:()=>B,G3:()=>j,HL:()=>G,I0:()=>K,em:()=>V,ex:()=>E,h5:()=>U,pJ:()=>z,pn:()=>D,uL:()=>_,x4:()=>F})},97653(e,t,n){"use strict";var a=n(72361),i=n(51159),o=n(43247),s=n(74401),r=n(60496);n(68413);var l=n(54052),c=n(6264),d=n(56275);function u(e){let{className:t,...n}=e;return(0,a.jsx)(r.uB,{"data-slot":"command",className:(0,d.cn)("bg-popover text-popover-foreground flex size-full flex-col overflow-hidden rounded-xl! p-1",t),...n})}function h(e){let{title:t="Command Palette",description:n="Search for a command to run...",children:i,className:o,showCloseButton:s=!1,...r}=e;return(0,a.jsxs)(l.lG,{...r,children:[(0,a.jsxs)(l.c7,{className:"sr-only",children:[(0,a.jsx)(l.L3,{children:t}),(0,a.jsx)(l.rr,{children:n})]}),(0,a.jsx)(l.Cf,{className:(0,d.cn)("top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0",o),showCloseButton:s,children:i})]})}function p(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"command-input-wrapper",className:"p-1 pb-0",children:(0,a.jsxs)(c.MG,{className:"border-input/30 bg-input/30 h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!",children:[(0,a.jsx)(r.uB.Input,{"data-slot":"command-input",className:(0,d.cn)("w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",t),...n}),(0,a.jsx)(c.Sq,{children:(0,a.jsx)(s.n,{icon:i.A,strokeWidth:2,className:"size-4 shrink-0 opacity-50"})})]})})}function m(e){let{className:t,...n}=e;return(0,a.jsx)(r.uB.List,{"data-slot":"command-list",className:(0,d.cn)("no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none",t),...n})}function g(e){let{className:t,...n}=e;return(0,a.jsx)(r.uB.Empty,{"data-slot":"command-empty",className:(0,d.cn)("py-6 text-center text-sm",t),...n})}function f(e){let{className:t,...n}=e;return(0,a.jsx)(r.uB.Group,{"data-slot":"command-group",className:(0,d.cn)("text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium",t),...n})}function y(e){let{className:t,...n}=e;return(0,a.jsx)(r.uB.Separator,{"data-slot":"command-separator",className:(0,d.cn)("bg-border -mx-1 h-px",t),...n})}function b(e){let{className:t,children:n,...i}=e;return(0,a.jsxs)(r.uB.Item,{"data-slot":"command-item",className:(0,d.cn)("group/command-item data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...i,children:[n,(0,a.jsx)(s.n,{icon:o.A,strokeWidth:2,className:"ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100"})]})}n.d(t,{G7:()=>p,Gj:()=>h,L$:()=>f,fx:()=>y,h_:()=>b,oI:()=>m,uB:()=>u,xL:()=>g})},54052(e,t,n){"use strict";var a=n(72361),i=n(71470),o=n(26252),s=n(35286),r=n(95086),l=n(71162),c=n(79228),d=n(55496),u=n(41880),h=n(57717),p=n(74401);n(68413);var m=n(72868),g=n(56275);function f(e){let{...t}=e;return(0,a.jsx)(i.D,{"data-slot":"dialog",...t})}function y(e){let{...t}=e;return(0,a.jsx)(o.z,{"data-slot":"dialog-trigger",...t})}function b(e){let{...t}=e;return(0,a.jsx)(s.Z,{"data-slot":"dialog-portal",...t})}function v(e){let{className:t,...n}=e;return(0,a.jsx)(r.X,{"data-slot":"dialog-overlay",className:(0,g.cn)("data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0 fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs",t),...n})}function k(e){let{className:t,children:n,showCloseButton:i=!0,...o}=e;return(0,a.jsxs)(b,{children:[(0,a.jsx)(v,{}),(0,a.jsxs)(l.h,{"data-slot":"dialog-content",className:(0,g.cn)("bg-popover text-popover-foreground ring-foreground/10 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 fixed top-[var(--dialog-viewport-center,50dvh)] left-1/2 z-50 grid max-h-[var(--dialog-available-height,calc(100dvh-2rem))] w-full overflow-y-auto overscroll-contain max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl p-4 text-sm ring-1 duration-100 outline-none sm:max-w-sm",t),...o,children:[n,i&&(0,a.jsxs)(c.H,{"data-slot":"dialog-close",render:(0,a.jsx)(m.$,{variant:"ghost",className:"absolute top-2 right-2",size:"icon-sm"}),children:[(0,a.jsx)(p.n,{icon:h.A,strokeWidth:2}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function x(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"dialog-header",className:(0,g.cn)("flex flex-col gap-2",t),...n})}function w(e){let{className:t,showCloseButton:n=!1,children:i,...o}=e;return(0,a.jsxs)("div",{"data-slot":"dialog-footer",className:(0,g.cn)("bg-muted/50 -mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t p-4 sm:flex-row sm:justify-end",t),...o,children:[i,n&&(0,a.jsx)(c.H,{render:(0,a.jsx)(m.$,{variant:"outline"}),children:"Close"})]})}function C(e){let{className:t,...n}=e;return(0,a.jsx)(d.L,{"data-slot":"dialog-title",className:(0,g.cn)("text-base leading-none font-medium",t),...n})}function A(e){let{className:t,...n}=e;return(0,a.jsx)(u.r,{"data-slot":"dialog-description",className:(0,g.cn)("text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3",t),...n})}n.d(t,{Cf:()=>k,Es:()=>w,L3:()=>C,c7:()=>x,lG:()=>f,rr:()=>A,zM:()=>y})},84368(e,t,n){"use strict";n.d(t,{rI:()=>w,hO:()=>j,SQ:()=>A,I:()=>S,_2:()=>T,lp:()=>P,mB:()=>M,V0:()=>D,lv:()=>I,M5:()=>N,nV:()=>R,ty:()=>C});var a=n(72361),i=n(11046),o=n(88039),s=n(77310),r=n(92322),l=n(27438),c=n(32310),d=n(87443),u=n(64204),h=n(36417),p=n(62003),m=n(74863),g=n(6490),f=n(44929),y=n(61138),b=n(43247),v=n(74401),k=n(68413),x=n(56275);function w(e){let{...t}=e;return(0,a.jsx)(i.i,{"data-slot":"dropdown-menu",...t})}function C(e){let{...t}=e;return(0,a.jsx)(o.c,{"data-slot":"dropdown-menu-trigger",...t})}function A(e){let{align:t="start",alignOffset:n=0,side:i="bottom",sideOffset:o=4,className:c,...d}=e;return(0,a.jsx)(s.g,{children:(0,a.jsx)(r.y,{className:"isolate z-50 outline-none",align:t,alignOffset:n,side:i,sideOffset:o,children:(0,a.jsx)(l._,{"data-slot":"dropdown-menu-content",className:(0,x.cn)("bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg p-1 shadow-md ring-1 duration-100 outline-none data-closed:overflow-hidden",c),...d})})})}function S(e){let{...t}=e;return(0,a.jsx)(c.r,{"data-slot":"dropdown-menu-group",...t})}function P(e){let{className:t,inset:n,...i}=e;return(0,a.jsx)(d.N,{"data-slot":"dropdown-menu-label","data-inset":n,className:(0,x.cn)("text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7",t),...i})}function T(e){let{className:t,inset:n,variant:i="default",onClick:o,onSelect:s,...r}=e,l=k.useCallback(e=>{o?.(e),e.defaultPrevented||s?.(e),e.defaultPrevented&&e.preventBaseUIHandler?.()},[o,s]);return(0,a.jsx)(u.D,{"data-slot":"dropdown-menu-item","data-inset":n,"data-variant":i,className:(0,x.cn)("group/dropdown-menu-item focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:*:[svg]:text-destructive relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),onClick:o||s?l:void 0,...r})}function I(e){let{...t}=e;return(0,a.jsx)(h.h,{"data-slot":"dropdown-menu-sub",...t})}function R(e){let{className:t,inset:n,children:i,...o}=e;return(0,a.jsxs)(p.f,{"data-slot":"dropdown-menu-sub-trigger","data-inset":n,className:(0,x.cn)("focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...o,children:[i,(0,a.jsx)(v.n,{icon:y.A,strokeWidth:2,className:"ml-auto"})]})}function N(e){let{align:t="start",alignOffset:n=-3,side:i="right",sideOffset:o=0,className:s,...r}=e;return(0,a.jsx)(A,{"data-slot":"dropdown-menu-sub-content",className:(0,x.cn)("bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 w-auto min-w-[96px] rounded-lg p-1 shadow-lg ring-1 duration-100",s),align:t,alignOffset:n,side:i,sideOffset:o,...r})}function j(e){let{className:t,children:n,checked:i,inset:o,...s}=e;return(0,a.jsxs)(m.s,{"data-slot":"dropdown-menu-checkbox-item","data-inset":o,className:(0,x.cn)("focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-7 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),checked:i,...s,children:[(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex items-center justify-center","data-slot":"dropdown-menu-checkbox-item-indicator",children:(0,a.jsx)(g.F,{children:(0,a.jsx)(v.n,{icon:b.A,strokeWidth:2})})}),n]})}function M(e){let{className:t,...n}=e;return(0,a.jsx)(f.w,{"data-slot":"dropdown-menu-separator",className:(0,x.cn)("bg-border -mx-1 my-1 h-px",t),...n})}function D(e){let{className:t,...n}=e;return(0,a.jsx)("span",{"data-slot":"dropdown-menu-shortcut",className:(0,x.cn)("text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest",t),...n})}},12393(e,t,n){"use strict";var a=n(72361),i=n(65291),o=n(56275);function s(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"empty",className:(0,o.cn)("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance",t),...n})}function r(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"empty-header",className:(0,o.cn)("flex max-w-sm flex-col items-center gap-2",t),...n})}let l=(0,i.F)("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",{variants:{variant:{default:"bg-transparent",icon:"flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"}},defaultVariants:{variant:"default"}});function c(e){let{className:t,variant:n="default",...i}=e;return(0,a.jsx)("div",{"data-slot":"empty-icon","data-variant":n,className:(0,o.cn)(l({variant:n,className:t})),...i})}function d(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"empty-title",className:(0,o.cn)("text-sm font-medium tracking-tight",t),...n})}function u(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"empty-description",className:(0,o.cn)("text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4",t),...n})}function h(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"empty-content",className:(0,o.cn)("flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance",t),...n})}n.d(t,{FT:()=>r,HY:()=>h,Kr:()=>c,Ou:()=>u,Sv:()=>s,cz:()=>d})},90358(e,t,n){"use strict";var a=n(72361),i=n(65291),o=n(68413),s=n(11728);n(38939);var r=n(56275);function l(e){let{className:t,...n}=e;return(0,a.jsx)("fieldset",{"data-slot":"field-set",className:(0,r.cn)("flex flex-col gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",t),...n})}function c(e){let{className:t,variant:n="legend",...i}=e;return(0,a.jsx)("legend",{"data-slot":"field-legend","data-variant":n,className:(0,r.cn)("mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base",t),...i})}function d(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"field-group",className:(0,r.cn)("group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4",t),...n})}let u=(0,i.F)("group/field flex w-full gap-2 data-[invalid=true]:text-destructive",{variants:{orientation:{vertical:"flex-col *:w-full [&>.sr-only]:w-auto",horizontal:"flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",responsive:"flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"}},defaultVariants:{orientation:"vertical"}});function h(e){let{className:t,orientation:n="vertical",...i}=e;return(0,a.jsx)("div",{role:"group","data-slot":"field","data-orientation":n,className:(0,r.cn)(u({orientation:n}),t),...i})}function p(e){let{className:t,...n}=e;return(0,a.jsx)(s.J,{"data-slot":"field-label",className:(0,r.cn)("group/field-label peer/field-label has-data-checked:border-primary/30 has-data-checked:bg-primary/5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10 flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5","has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col",t),...n})}function m(e){let{className:t,...n}=e;return(0,a.jsx)("p",{"data-slot":"field-description",className:(0,r.cn)("text-muted-foreground text-left text-sm leading-normal font-normal group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5","last:mt-0 nth-last-2:-mt-1","[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",t),...n})}function g(e){let{className:t,children:n,errors:i,...s}=e,l=(0,o.useMemo)(()=>{if(n)return n;if(!i?.length)return null;let e=[...new Map(i.map(e=>[e?.message,e])).values()];return e?.length==1?e[0]?.message:(0,a.jsx)("ul",{className:"ml-4 flex list-disc flex-col gap-1",children:e.map((e,t)=>e?.message&&(0,a.jsx)("li",{children:e.message},t))})},[n,i]);return l?(0,a.jsx)("div",{role:"alert","data-slot":"field-error",className:(0,r.cn)("text-destructive text-sm font-normal",t),...s,children:l}):null}n.d(t,{D0:()=>h,M_:()=>d,Y4:()=>c,bg:()=>g,dh:()=>p,nV:()=>l,ry:()=>m})},36710(e,t,n){"use strict";var a=n(72361),i=n(36198),o=n(68413),s=n(86832),r=n(6702),l=n(11728),c=n(56275);let d=o.createContext(null);function u(e,t){return`[data-form-root="${e}"]${t}`}function h(){let e=o.useContext(d),{control:t}=(0,s.xW)(),{errors:n,submitCount:a}=(0,s.lN)({control:t}),i=o.useRef(0);return o.useEffect(()=>{if(!e||0===a||!("object"==typeof n&&null!==n&&Object.keys(n).length>0)||i.current===a)return;i.current=a;let t=window.requestAnimationFrame(()=>{let t=document.querySelector(u(e.id,'[aria-invalid="true"]')),n=document.querySelector(u(e.id,'[data-slot="form-message"]')),a=t?n&&t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING?n:t:n;if(!a)return;let i=a.closest(u(e.id,'[data-slot="form-item"]')),o=i??a,s=a===t?t:i?.querySelector('[aria-invalid="true"], input, textarea, select, button, [tabindex]:not([tabindex="-1"])')??null;o.scrollIntoView({block:"center",behavior:"smooth"}),s?.focus({preventScroll:!0})});return()=>window.cancelAnimationFrame(t)},[n,e,a]),null}function p(e){let{children:t,...n}=e,i=o.useId(),r=o.useMemo(()=>`form-${i.replaceAll(/[^a-zA-Z0-9_-]/g,"_")}`,[i]);return(0,a.jsx)(d.Provider,{value:{id:r},children:(0,a.jsxs)(s.Op,{...n,children:[(0,a.jsx)(h,{}),t]})})}let m=o.createContext({}),g=()=>{let e=o.useContext(m),t=o.useContext(f),{getFieldState:n}=(0,s.xW)(),a=(0,s.lN)({name:e.name}),i=n(e.name,a);if(!e)throw Error("useFormField should be used within ");let{id:r}=t;return{id:r,name:e.name,formItemId:`${r}-form-item`,formDescriptionId:`${r}-form-item-description`,formMessageId:`${r}-form-item-message`,...i}},f=o.createContext({});function y(e){let{className:t,...n}=e,i=o.useId(),s=o.useContext(d);return(0,a.jsx)(f.Provider,{value:{id:i},children:(0,a.jsx)("div",{"data-slot":"form-item","data-form-root":s?.id,className:(0,c.cn)("grid gap-2",t),...n})})}function b(e){let{className:t,...n}=e,{error:i,formItemId:o}=g();return(0,a.jsx)(l.J,{"data-slot":"form-label","data-error":!!i,className:(0,c.cn)("data-[error=true]:text-destructive",t),htmlFor:o,...n})}function v(e){let{children:t,...n}=e,{error:a,formItemId:s,formDescriptionId:r,formMessageId:l}=g(),c=o.useContext(d);return(0,i.C)({render:t,props:{"data-slot":"form-control","data-form-root":c?.id,id:s,"aria-describedby":a?`${r} ${l}`:`${r}`,"aria-invalid":!!a,...n}})}function k(e){let{className:t,...n}=e,{formDescriptionId:i}=g();return(0,a.jsx)("p",{"data-slot":"form-description",id:i,className:(0,c.cn)("text-muted-foreground text-sm",t),...n})}function x(e){let{className:t,...n}=e,{error:i,formMessageId:s}=g(),l=o.useContext(d),{t:u}=(0,r.Bd)(),h=i?String(i?.message??""):n.children;if(!h)return null;let p="string"==typeof h?u(h):h;return(0,a.jsx)("p",{"data-slot":"form-message","data-form-root":l?.id,id:s,className:(0,c.cn)("text-destructive text-sm",t),...n,children:p})}n.d(t,{C5:()=>x,MJ:()=>v,Rr:()=>k,eI:()=>y,lR:()=>b,lV:()=>p},{zB:e=>{let{...t}=e;return(0,a.jsx)(m.Provider,{value:{name:t.name},children:(0,a.jsx)(s.xI,{...t})})}})},39649(e,t,n){"use strict";var a=n(72361),i=n(65291),o=n(56275);let s=(0,i.F)("flex shrink-0 items-center justify-center [&>svg]:shrink-0",{variants:{tone:{neutral:"bg-muted text-muted-foreground",primary:"bg-primary/10 text-primary",success:"bg-success/10 text-success",warning:"bg-warning/10 text-warning",info:"bg-info/10 text-info",destructive:"bg-destructive/10 text-destructive","chart-1":"bg-chart-1/10 text-chart-1","chart-2":"bg-chart-2/10 text-chart-2","chart-3":"bg-chart-3/10 text-chart-3","chart-4":"bg-chart-4/10 text-chart-4","chart-5":"bg-chart-5/10 text-chart-5"},size:{xs:"size-5 rounded-md [&>svg]:size-3",sm:"size-7 rounded-md [&>svg]:size-3.5",md:"size-8 rounded-lg [&>svg]:size-4",title:"size-8 rounded-lg sm:size-9 [&>svg]:size-4",lg:"size-10 rounded-xl [&>svg]:size-5",stat:"size-5 rounded-md sm:size-7 [&>svg]:size-3 sm:[&>svg]:size-3.5"}},defaultVariants:{tone:"neutral",size:"md"}});function r(e){return(0,a.jsx)("span",{className:(0,o.cn)(s({tone:e.tone,size:e.size}),e.className),"aria-hidden":e.decorative??!0,children:e.children})}n.d(t,{f:()=>r})},6264(e,t,n){"use strict";var a=n(72361),i=n(65291);n(68413);var o=n(72868),s=n(1738),r=n(70954),l=n(56275);function c(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"input-group",role:"group",className:(0,l.cn)("group/input-group border-input has-disabled:bg-input/50 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:bg-input/30 dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 relative flex h-8 w-full min-w-0 items-center rounded-lg border transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5",t),...n})}let d=(0,i.F)("flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-sm [&>svg:not([class*='size-'])]:size-4",{variants:{align:{"inline-start":"order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]","inline-end":"order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]","block-start":"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2","block-end":"order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"}},defaultVariants:{align:"inline-start"}});function u(e){let{className:t,align:n="inline-start",...i}=e;return(0,a.jsx)("div",{role:"group","data-slot":"input-group-addon","data-align":n,className:(0,l.cn)(d({align:n}),t),onClick:e=>{e.target.closest("button")||e.currentTarget.parentElement?.querySelector("input")?.focus()},...i})}let h=(0,i.F)("flex items-center gap-2 text-sm shadow-none",{variants:{size:{xs:"h-6 gap-1 rounded-md px-1.5 [&>svg:not([class*='size-'])]:size-3.5",sm:"","icon-xs":"size-6 rounded-md p-0 has-[>svg]:p-0","icon-sm":"size-8 p-0 has-[>svg]:p-0"}},defaultVariants:{size:"xs"}});function p(e){let{className:t,type:n="button",variant:i="ghost",size:s="xs",...r}=e;return(0,a.jsx)(o.$,{type:n,"data-size":s,variant:i,className:(0,l.cn)(h({size:s}),t),...r})}function m(e){let{className:t,...n}=e;return(0,a.jsx)(s.p,{"data-slot":"input-group-control",className:(0,l.cn)("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent",t),...n})}function g(e){let{className:t,...n}=e;return(0,a.jsx)(r.T,{"data-slot":"input-group-control",className:(0,l.cn)("flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent",t),...n})}n.d(t,{Ik:()=>p,MG:()=>c,Sq:()=>u,iV:()=>m,oR:()=>g})},1738(e,t,n){"use strict";var a=n(72361),i=n(91527);n(68413);var o=n(56275);function s(e){let{className:t,type:n,...s}=e;return(0,a.jsx)(i.p,{type:n,"data-slot":"input",className:(0,o.cn)("border-input file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 disabled:bg-input/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 h-8 w-full min-w-0 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-3 focus-visible:ring-inset disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 aria-invalid:ring-inset md:text-sm",t),...s})}n.d(t,{p:()=>s})},11728(e,t,n){"use strict";var a=n(72361);n(68413);var i=n(56275);function o(e){let{className:t,children:n,required:o=!1,...s}=e;return(0,a.jsx)("label",{"data-slot":"label",className:(0,i.cn)("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...s,children:o?(0,a.jsxs)("span",{children:[n," ",(0,a.jsx)("span",{"data-slot":"required-indicator",className:"text-destructive",children:"*"})]}):n})}n.d(t,{J:()=>o})},83568(e,t,n){"use strict";var a=n(72361),i=n(59329),o=n(74401);n(68413);var s=n(56275);function r(e){let{className:t,size:n="default",...r}=e;return(0,a.jsxs)("div",{className:(0,s.cn)("group/native-select relative w-fit has-[select:disabled]:opacity-50",t),"data-slot":"native-select-wrapper","data-size":n,children:[(0,a.jsx)("select",{"data-slot":"native-select","data-size":n,className:"border-input selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 h-8 w-full min-w-0 appearance-none rounded-lg border bg-transparent py-1 pr-8 pl-2.5 text-sm transition-colors outline-none select-none focus-visible:ring-3 disabled:pointer-events-none disabled:cursor-not-allowed aria-invalid:ring-3 data-[size=sm]:h-7 data-[size=sm]:rounded-md data-[size=sm]:py-0.5",...r}),(0,a.jsx)(o.n,{icon:i.A,strokeWidth:2,className:"text-muted-foreground pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 select-none","aria-hidden":"true","data-slot":"native-select-icon"})]})}function l(e){let{className:t,...n}=e;return(0,a.jsx)("option",{"data-slot":"native-select-option",className:(0,s.cn)("bg-[Canvas] text-[CanvasText]",t),...n})}n.d(t,{$:()=>l,mh:()=>r})},74501(e,t,n){"use strict";var a=n(72361),i=n(82094),o=n(68324),s=n(60160),r=n(3732),l=n(58540),c=n(21136),d=n(11944);n(68413);var u=n(56275);function h(e){let{...t}=e;return(0,a.jsx)(i.y,{"data-slot":"popover",...t})}function p(e){let{...t}=e;return(0,a.jsx)(o.W,{"data-slot":"popover-trigger",...t})}function m(e){let{className:t,align:n="center",alignOffset:i=0,side:o="bottom",sideOffset:c=4,collisionPadding:d,collisionBoundary:h,collisionAvoidance:p,...m}=e;return(0,a.jsx)(s.i,{children:(0,a.jsx)(r.U,{align:n,alignOffset:i,side:o,sideOffset:c,collisionPadding:d,collisionBoundary:h,collisionAvoidance:p,className:"isolate z-50",children:(0,a.jsx)(l.i,{"data-slot":"popover-content",className:(0,u.cn)("bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-50 flex w-72 origin-(--transform-origin) flex-col gap-2.5 rounded-lg p-2.5 text-sm shadow-md ring-1 outline-hidden duration-100",t),...m})})})}function g(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"popover-header",className:(0,u.cn)("flex flex-col gap-0.5 text-sm",t),...n})}function f(e){let{className:t,...n}=e;return(0,a.jsx)(c.e,{"data-slot":"popover-title",className:(0,u.cn)("font-medium",t),...n})}function y(e){let{className:t,...n}=e;return(0,a.jsx)(d.u,{"data-slot":"popover-description",className:(0,u.cn)("text-muted-foreground",t),...n})}n.d(t,{AM:()=>h,DI:()=>g,Wv:()=>p,eO:()=>f,hl:()=>m,ui:()=>y})},36852(e,t,n){"use strict";var a=n(68413);let i=a.createContext(void 0);function o(){return a.useContext(i)}n.d(t,{P:()=>o},{n:i})},47497(e,t,n){"use strict";var a=n(72361),i=n(42426),o=n(69474),s=n(52046),r=n(56275);function l(e){let{className:t,children:n,value:o,...s}=e;return(0,a.jsxs)(i.w,{value:o,"data-slot":"progress",className:(0,r.cn)("flex flex-wrap gap-3",t),...s,children:[n,(0,a.jsx)(c,{children:(0,a.jsx)(d,{})})]})}function c(e){let{className:t,...n}=e;return(0,a.jsx)(o.X,{className:(0,r.cn)("bg-muted relative flex h-1 w-full items-center overflow-x-hidden rounded-full",t),"data-slot":"progress-track",...n})}function d(e){let{className:t,...n}=e;return(0,a.jsx)(s.Z,{"data-slot":"progress-indicator",className:(0,r.cn)("bg-primary h-full transition-all",t),...n})}n.d(t,{ke:()=>l})},67085(e,t,n){"use strict";var a=n(72361),i=n(70332),o=n(96882),s=n(63876),r=n(56275);function l(e){let{className:t,...n}=e;return(0,a.jsx)(s.z,{"data-slot":"radio-group",className:(0,r.cn)("grid w-full gap-2",t),...n})}function c(e){let{className:t,...n}=e;return(0,a.jsx)(i.U,{"data-slot":"radio-group-item",className:(0,r.cn)("group/radio-group-item peer border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary relative flex aspect-square size-4 shrink-0 rounded-full border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3",t),...n,children:(0,a.jsx)(o.T,{"data-slot":"radio-group-indicator",className:"flex size-4 items-center justify-center",children:(0,a.jsx)("span",{className:"bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full"})})})}n.d(t,{C:()=>c,z:()=>l})},88288(e,t,n){"use strict";var a=n(72361),i=n(23584),o=n(24254),s=n(5592),r=n(8140),l=n(38972),c=n(93902),d=n(96596),u=n(90610),h=n(24155),p=n(33728),m=n(68229),g=n(16679),f=n(85916),y=n(59658),b=n(59329),v=n(43247),k=n(4895),x=n(43178),w=n(74401);n(68413);var C=n(36852),A=n(88753),S=n(56275);let P=i.H;function T(e){let{className:t,...n}=e;return(0,a.jsx)(o.s,{"data-slot":"select-group",className:(0,S.cn)("scroll-my-1 p-1",t),...n})}function I(e){let{className:t,...n}=e;return(0,a.jsx)(s.y,{"data-slot":"select-value",className:(0,S.cn)("flex flex-1 text-left",t),...n})}function R(e){let{className:t,size:n="default",children:i,...o}=e;return(0,a.jsxs)(r.b,{"data-slot":"select-trigger","data-size":n,className:(0,S.cn)("border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 flex w-fit items-center justify-between gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-md *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...o,children:[i,(0,a.jsx)(l.w,{render:(0,a.jsx)(w.n,{icon:b.A,strokeWidth:2,className:"text-muted-foreground pointer-events-none size-4"})})]})}function N(e){let{className:t,children:n,side:i="bottom",sideOffset:o=4,align:s="center",alignOffset:r=0,alignItemWithTrigger:l=!0,...p}=e,m=(0,A.Ub)("(max-width: 640px)"),g=(0,C.P)(),f=(0,a.jsx)(c.l,{side:i,sideOffset:o,align:s,alignOffset:r,alignItemWithTrigger:l,className:"isolate z-50",children:(0,a.jsxs)(d.t,{"data-slot":"select-content","data-align-trigger":l,className:(0,S.cn)("bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg shadow-md ring-1 duration-100 data-[align-trigger=true]:animate-none",t),...p,children:[(0,a.jsx)(M,{}),(0,a.jsx)(u.B,{children:n}),(0,a.jsx)(D,{})]})});return m?f:(0,a.jsx)(h.V,{container:g,children:f})}function j(e){let{className:t,children:n,...i}=e;return(0,a.jsxs)(p.e,{"data-slot":"select-item",className:(0,S.cn)("focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...i,children:[(0,a.jsx)(m.h,{"data-slot":"select-item-text",className:"flex flex-1 shrink-0 gap-2 whitespace-nowrap",children:n}),(0,a.jsx)(g.h,{render:(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center"}),children:(0,a.jsx)(w.n,{icon:v.A,strokeWidth:2,className:"pointer-events-none"})})]})}function M(e){let{className:t,...n}=e;return(0,a.jsx)(f.w,{"data-slot":"select-scroll-up-button",className:(0,S.cn)("bg-popover top-0 z-10 flex w-full cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4",t),...n,children:(0,a.jsx)(w.n,{icon:k.A,strokeWidth:2})})}function D(e){let{className:t,...n}=e;return(0,a.jsx)(y.d,{"data-slot":"select-scroll-down-button",className:(0,S.cn)("bg-popover bottom-0 z-10 flex w-full cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4",t),...n,children:(0,a.jsx)(w.n,{icon:x.A,strokeWidth:2})})}n.d(t,{bq:()=>R,eb:()=>j,gC:()=>N,s3:()=>T,yv:()=>I},{l6:P})},38939(e,t,n){"use strict";var a=n(72361),i=n(44929),o=n(56275);function s(e){let{className:t,orientation:n="horizontal",...s}=e;return(0,a.jsx)(i.w,{"data-slot":"separator",orientation:n,className:(0,o.cn)("bg-border shrink-0 data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",t),...s})}n.d(t,{w:()=>s})},74559(e,t,n){"use strict";var a=n(72361),i=n(71470),o=n(26252),s=n(79228),r=n(35286),l=n(95086),c=n(71162),d=n(55496),u=n(41880),h=n(57717),p=n(74401);n(68413);var m=n(72868),g=n(56275);function f(e){let{...t}=e;return(0,a.jsx)(i.D,{"data-slot":"sheet",...t})}function y(e){let{...t}=e;return(0,a.jsx)(o.z,{"data-slot":"sheet-trigger",...t})}function b(e){let{...t}=e;return(0,a.jsx)(s.H,{"data-slot":"sheet-close",...t})}function v(e){let{...t}=e;return(0,a.jsx)(r.Z,{"data-slot":"sheet-portal",...t})}function k(e){let{className:t,...n}=e;return(0,a.jsx)(l.X,{"data-slot":"sheet-overlay",className:(0,g.cn)("fixed inset-0 z-50 bg-black/10 transition-opacity duration-150 data-ending-style:opacity-0 data-starting-style:opacity-0 supports-backdrop-filter:backdrop-blur-xs",t),...n})}function x(e){let{className:t,children:n,side:i="right",showCloseButton:o=!0,...r}=e;return(0,a.jsxs)(v,{children:[(0,a.jsx)(k,{}),(0,a.jsxs)(c.h,{"data-slot":"sheet-content","data-side":i,className:(0,g.cn)("bg-background text-foreground fixed z-50 flex flex-col gap-4 overflow-hidden bg-clip-padding text-sm shadow-none transition duration-200 ease-in-out data-ending-style:opacity-0 data-starting-style:opacity-0","right"===i&&"inset-y-0 right-0 h-full w-3/4 border-l data-ending-style:translate-x-[2.5rem] data-starting-style:translate-x-[2.5rem] sm:max-w-sm","left"===i&&"inset-y-0 left-0 h-full w-3/4 border-r data-ending-style:translate-x-[-2.5rem] data-starting-style:translate-x-[-2.5rem] sm:max-w-sm","top"===i&&"inset-x-0 top-0 h-auto border-b data-ending-style:translate-y-[-2.5rem] data-starting-style:translate-y-[-2.5rem]","bottom"===i&&"inset-x-0 bottom-0 h-auto border-t data-ending-style:translate-y-[2.5rem] data-starting-style:translate-y-[2.5rem]",t),...r,children:[n,o&&(0,a.jsxs)(s.H,{"data-slot":"sheet-close",render:(0,a.jsx)(m.$,{variant:"ghost",className:"absolute top-3 right-3",size:"icon-sm"}),children:[(0,a.jsx)(p.n,{icon:h.A,strokeWidth:2}),(0,a.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})}function w(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"sheet-header",className:(0,g.cn)("flex flex-col gap-0.5 p-4",t),...n})}function C(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"sheet-footer",className:(0,g.cn)("mt-auto flex flex-col gap-2 p-4",t),...n})}function A(e){let{className:t,...n}=e;return(0,a.jsx)(d.L,{"data-slot":"sheet-title",className:(0,g.cn)("text-foreground text-base font-medium",t),...n})}function S(e){let{className:t,...n}=e;return(0,a.jsx)(u.r,{"data-slot":"sheet-description",className:(0,g.cn)("text-muted-foreground text-sm",t),...n})}n.d(t,{CG:()=>y,Fm:()=>w,Qs:()=>S,XW:()=>C,cj:()=>f,h:()=>x,kN:()=>b,qp:()=>A})},97785(e,t,n){"use strict";var a=n(72361),i=n(56275);function o(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-slot":"skeleton",className:(0,i.cn)("bg-muted animate-pulse rounded-md",t),...n})}n.d(t,{E:()=>o})},81825(e,t,n){"use strict";var a=n(72361),i=n(15453),o=n(74401),s=n(56275);function r(e){let{className:t,strokeWidth:n=2,...r}=e;return(0,a.jsx)(o.n,{icon:i.A,strokeWidth:n,role:"status","aria-label":"Loading",className:(0,s.cn)("size-4 animate-spin",t),...r})}n.d(t,{y:()=>r})},87212(e,t,n){"use strict";var a=n(72361),i=n(48338),o=n(38408),s=n(56275);function r(e){let{className:t,size:n="default",...r}=e;return(0,a.jsx)(i.l,{"data-slot":"switch","data-size":n,className:(0,s.cn)("peer group/switch focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:ring-3 aria-invalid:ring-3 data-disabled:cursor-not-allowed data-disabled:opacity-50 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px]",t),...r,children:(0,a.jsx)(o.p,{"data-slot":"switch-thumb",className:"bg-background dark:data-checked:bg-primary-foreground dark:data-unchecked:bg-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0"})})}n.d(t,{d:()=>r})},49302(e,t,n){"use strict";var a=n(72361);n(68413);var i=n(56275);function o(e){let{className:t,withContainer:n=!0,...o}=e,s=(0,a.jsx)("table",{"data-slot":"table",className:(0,i.cn)("w-full caption-bottom text-sm tabular-nums [font-family:var(--font-body)] [&_td]:text-sm [&_td]:font-medium [&_th]:text-sm [&_:is(th,td)_*]:[font-family:inherit] [&_:is(th,td)_*]:[font-size:inherit] [&_:is(th,td)_*]:[font-weight:inherit]","[&_[data-table-text=secondary]]:text-xs [&_[data-table-text=secondary]]:font-normal",t),...o});return n?(0,a.jsx)("div",{"data-slot":"table-container",className:"relative w-full overflow-x-auto overflow-y-hidden",children:s}):s}function s(e){let{className:t,...n}=e;return(0,a.jsx)("thead",{"data-slot":"table-header",className:(0,i.cn)("[&_tr]:border-b",t),...n})}function r(e){let{className:t,...n}=e;return(0,a.jsx)("tbody",{"data-slot":"table-body",className:(0,i.cn)("[&>tr]:h-15 [&_tr:last-child]:border-0",t),...n})}function l(e){let{className:t,...n}=e;return(0,a.jsx)("tr",{"data-slot":"table-row",className:(0,i.cn)("group data-[state=selected]:bg-muted border-b transition-colors hover:[background-color:color-mix(in_oklch,var(--muted)_50%,var(--background))] has-aria-expanded:[background-color:color-mix(in_oklch,var(--muted)_50%,var(--background))]",t),...n})}function c(e){let{className:t,...n}=e;return(0,a.jsx)("th",{"data-slot":"table-head",className:(0,i.cn)("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0",t),...n})}function d(e){let{className:t,...n}=e;return(0,a.jsx)("td",{"data-slot":"table-cell",className:(0,i.cn)("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0",t),...n})}n.d(t,{A0:()=>s,BF:()=>r,Hj:()=>l,XI:()=>o,nA:()=>d,nd:()=>c})},56920(e,t,n){"use strict";var a=n(72361),i=n(94750),o=n(20514),s=n(10496),r=n(27886),l=n(65291),c=n(56275);function d(e){let{className:t,orientation:n="horizontal",...o}=e;return(0,a.jsx)(i.p,{"data-slot":"tabs","data-orientation":n,className:(0,c.cn)("group/tabs flex gap-2 data-horizontal:flex-col",t),...o})}let u=(0,l.F)("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none",{variants:{variant:{default:"bg-muted",line:"gap-1 bg-transparent"}},defaultVariants:{variant:"default"}});function h(e){let{className:t,variant:n="default",...i}=e;return(0,a.jsx)(o.j,{"data-slot":"tabs-list","data-variant":n,className:(0,c.cn)(u({variant:n}),t),...i})}function p(e){let{className:t,...n}=e;return(0,a.jsx)(s.M,{"data-slot":"tabs-trigger",className:(0,c.cn)("text-foreground/60 hover:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent","data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground","after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",t),...n})}function m(e){let{className:t,...n}=e;return(0,a.jsx)(r.R,{"data-slot":"tabs-content",className:(0,c.cn)("flex-1 text-sm outline-none",t),...n})}n.d(t,{Xi:()=>p,av:()=>m,j7:()=>h,tU:()=>d})},70954(e,t,n){"use strict";var a=n(72361);n(68413);var i=n(56275);function o(e){let{className:t,...n}=e;return(0,a.jsx)("textarea",{"data-slot":"textarea",className:(0,i.cn)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 disabled:bg-input/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 flex field-sizing-content max-h-96 min-h-16 w-full overflow-y-auto rounded-lg border bg-transparent px-2.5 py-2 text-base transition-colors outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-3 md:text-sm",t),...n})}n.d(t,{T:()=>o})},47303(e,t,n){"use strict";var a=n(72361),i=n(30180),o=n(32806),s=n(38696),r=n(23175),l=n(69088),c=n(53464),d=n(27034),u=n(56275);function h(e){let{delay:t=0,...n}=e;return(0,a.jsx)(i.B,{"data-slot":"tooltip-provider",delay:t,...n})}function p(e){let{...t}=e;return(0,a.jsx)(o.s,{"data-slot":"tooltip",...t})}function m(e){let{...t}=e;return(0,a.jsx)(s.k,{"data-slot":"tooltip-trigger",...t})}function g(e){let{className:t,side:n="top",sideOffset:i=4,align:o="center",alignOffset:s=0,children:h,...p}=e;return(0,a.jsx)(r.K,{children:(0,a.jsx)(l.o,{align:o,alignOffset:s,side:n,sideOffset:i,className:"isolate z-50",children:(0,a.jsxs)(c.o,{"data-slot":"tooltip-content",className:(0,u.cn)("bg-foreground text-background data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 z-50 inline-flex w-fit max-w-xs origin-(--transform-origin) items-center gap-1.5 rounded-md px-3 py-1.5 text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm",t),...p,children:[h,(0,a.jsx)(d.P,{className:"bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] data-[side=bottom]:top-1 data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2 data-[side=left]:top-1/2! data-[side=left]:-right-1 data-[side=left]:-translate-y-1/2 data-[side=right]:top-1/2! data-[side=right]:-left-1 data-[side=right]:-translate-y-1/2 data-[side=top]:-bottom-2.5"})]})})})}n.d(t,{Bc:()=>h,ZI:()=>g,k$:()=>m,m_:()=>p})},89411(e,t,n){"use strict";var a=n(72361),i=n(28662),o=n(68413),s=n(82033);let r=(0,o.createContext)(null);function l(e){let{children:t}=e,[n,l]=(0,o.useState)(()=>(0,s.Ri)("dir")||"ltr");return(0,o.useEffect)(()=>{document.documentElement.setAttribute("dir",n)},[n]),(0,a.jsx)(r,{value:{defaultDir:"ltr",dir:n,setDir:e=>{l(e),(0,s.TV)("dir",e,31536e3)},resetDir:()=>{l("ltr"),(0,s.zs)("dir")}},children:(0,a.jsx)(i.F,{direction:n,children:t})})}function c(){let e=(0,o.useContext)(r);if(!e)throw Error("useDirection must be used within a DirectionProvider");return e}n.d(t,{F:()=>l,j:()=>c})},46759(e,t,n){"use strict";var a=n(72361),i=n(68413),o=n(86603),s=n(21747);function r(e,t){if("u"{},setFont:()=>{},setRadius:()=>{},setScale:()=>{},setContentLayout:()=>{},resetCustomization:()=>{}},c=(0,i.createContext)(l);function d(e){let[t,n]=(0,i.useState)(()=>(0,s.V$)(s.tm.preset,o.dX,o.oi.preset)),[l,d]=(0,i.useState)(()=>(0,s.V$)(s.tm.font,o.XN,o.oi.font)),[u,h]=(0,i.useState)(()=>(0,s.V$)(s.tm.radius,o.Ev,o.oi.radius)),[p,m]=(0,i.useState)(()=>(0,s.V$)(s.tm.scale,o.oI,o.oi.scale)),[g,f]=(0,i.useState)(()=>(0,s.V$)(s.tm.contentLayout,o.Se,o.oi.contentLayout));(0,i.useEffect)(()=>{r("data-theme-preset",t===o.oi.preset?null:t)},[t]),(0,i.useEffect)(()=>{r("data-theme-font",(0,o.HN)(l,t))},[l,t]),(0,i.useEffect)(()=>{r("data-theme-radius",u===o.oi.radius?null:u)},[u]),(0,i.useEffect)(()=>{r("data-theme-scale",p===o.oi.scale?null:p)},[p]),(0,i.useEffect)(()=>{r("data-theme-content-layout",g)},[g]);let y=(0,i.useCallback)(e=>{n(e),(0,s.qO)(s.tm.preset,e===o.oi.preset?null:e)},[]),b=(0,i.useCallback)(e=>{d(e),(0,s.qO)(s.tm.font,e===o.oi.font?null:e)},[]),v=(0,i.useCallback)(e=>{h(e),(0,s.qO)(s.tm.radius,e===o.oi.radius?null:e)},[]),k=(0,i.useCallback)(e=>{m(e),(0,s.qO)(s.tm.scale,e===o.oi.scale?null:e)},[]),x=(0,i.useCallback)(e=>{f(e),(0,s.qO)(s.tm.contentLayout,e===o.oi.contentLayout?null:e)},[]),w=(0,i.useCallback)(()=>{y(o.oi.preset),b(o.oi.font),v(o.oi.radius),k(o.oi.scale),x(o.oi.contentLayout)},[y,b,v,k,x]),C=(0,i.useMemo)(()=>({defaults:o.oi,customization:{preset:t,font:l,radius:u,scale:p,contentLayout:g},setPreset:y,setFont:b,setRadius:v,setScale:k,setContentLayout:x,resetCustomization:w}),[t,l,u,p,g,y,b,v,k,x,w]);return(0,a.jsx)(c.Provider,{value:C,children:e.children})}function u(){return(0,i.useContext)(c)}n.d(t,{A:()=>u,_:()=>d})},48707(e,t,n){"use strict";var a=n(72361),i=n(68413),o=n(21747);let s="system",r=new Set(["dark","light","system"]),l=(0,i.createContext)({defaultTheme:s,resolvedTheme:"light",theme:s,setTheme:()=>null,resetTheme:()=>null});function c(){return"u"(0,o.V$)(d,r,n)),[m,g]=(0,i.useState)(()=>"system"===h?c():h);(0,i.useEffect)(()=>{let e=window.document.documentElement,t=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>{let t="system"===h?c():h;e.classList.remove("light","dark"),e.classList.add(t),g(t)};return n(),t.addEventListener("change",n),()=>t.removeEventListener("change",n)},[h]);let f=(0,i.useCallback)(e=>{(0,o.qO)(d,e),p(e)},[d]),y=(0,i.useCallback)(()=>{(0,o.qO)(d,null),p(n)},[n,d]),b=(0,i.useMemo)(()=>({defaultTheme:n,resolvedTheme:m,resetTheme:y,theme:h,setTheme:f}),[n,m,y,h,f]);return(0,a.jsx)(l,{value:b,...u,children:t})}n.d(t,{N:()=>d},{D:()=>{let e=(0,i.useContext)(l);if(!e)throw Error("useTheme must be used within a ThemeProvider");return e}})},21798(e,t,n){"use strict";let a=new Set(["http:","https:"]);function i(e){if("string"==typeof e.language)return e.language;if(e.setting&&"object"==typeof e.setting)return"string"==typeof e.setting.language?e.setting.language:void 0;if("string"==typeof e.setting)try{let t=JSON.parse(e.setting);return"string"==typeof t.language?t.language:void 0}catch{return}}function o(e,t){let n,i;if("string"!=typeof e)return null;let o=e.trim();if(!o||o.includes("\\")||o.startsWith("//"))return null;try{n=new URL(t)}catch{return null}if(!a.has(n.protocol))return null;try{i=o.startsWith("/")?new URL(o,n.origin):new URL(o)}catch{return null}return a.has(i.protocol)&&i.origin===n.origin?`${i.pathname}${i.search}${i.hash}`:null}n.d(t,{K:()=>i,r:()=>o})},93870(e,t,n){"use strict";function a(){if("u"typeof window)try{window.localStorage.setItem("aff",e)}catch(e){console.error("Failed to save affiliate code:",e)}}n.d(t,{E:()=>i,L:()=>a})},12257(e,t,n){"use strict";var a=n(42115),i=n(22990),o=n(46006);let s=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{...e,skipBusinessError:!0,skipErrorHandler:!0}};async function r(){let e=await i.FH.get("/api/channel/priority/order",{disableDuplicate:!0});return(0,o.oi)(e.data).data}async function l(e){let t=await i.FH.post("/api/channel/priority/reorder",e);return(0,o.oi)(t.data).data}async function c(e,t,n){let a=await i.FH.get(`/api/channel/${e}/${t}/status`,{signal:n,disableDuplicate:!0});return(0,o.oi)(a.data).data}async function d(){let e=await i.FH.get("/api/task_plugin_options");return(0,o.oi)(e.data).data}async function u(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await i.FH.get("/api/channel",{params:e})).data}async function h(e){return(await i.FH.get("/api/channel/search",{params:e})).data}async function p(e){return(await i.FH.get(`/api/channel/${e}`)).data}async function m(e){return(await i.FH.get("/api/channel/ops",{...s(),params:void 0===e?void 0:{auto_ban:e}})).data}async function g(){let e=await i.FH.get("/api/channel/default_base_urls");return(0,o.oi)(e.data).data}async function f(e){return(await i.FH.post("/api/channel",e,s())).data}async function y(e,t){return(await i.FH.put("/api/channel/",{id:e,...t},s())).data}async function b(e,t){return(await i.FH.post(`/api/channel/${e}/status`,{status:t},s())).data}async function v(e,t){return(await i.FH.post("/api/channel/status/batch",{ids:e,status:t},s())).data}async function k(e){return(await i.FH.delete(`/api/channel/${e}`,s())).data}async function x(e){return(await i.FH.post("/api/channel/batch",e,s())).data}async function w(e){return(await i.FH.post("/api/channel/batch/tag",e,s())).data}async function C(e,t){return(await i.FH.get(`/api/channel/test/${e}`,s({params:t}))).data}async function A(e){return(await i.FH.get(`/api/channel/update_balance/${e}`,s())).data}async function S(e){return(await i.FH.get(`/api/channel/fetch_models/${e}`,s())).data}async function P(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(await i.FH.post(`/api/channel/copy/${e}`,null,s({params:t}))).data}async function T(){return(await i.FH.post("/api/channel/fix",void 0,s())).data}async function I(){return(await i.FH.delete("/api/channel/disabled",s())).data}async function R(e,t,n){return(await i.FH.post(`/api/channel/${e}/key`,void 0,s({headers:{"X-Security-Proof":t},signal:n}))).data}async function N(e){return(await i.FH.post(`/api/channel/${e}/codex/refresh`,{},s())).data}async function j(e){return(await i.FH.get(`/api/channel/${e}/codex/usage`,s({disableDuplicate:!0}))).data}async function M(e){return(await i.FH.get(`/api/channel/${e}/codex/usage/reset-credits`,s({disableDuplicate:!0}))).data}async function D(e){return(await i.FH.post(`/api/channel/${e}/codex/usage/reset`,{},s({disableDuplicate:!0}))).data}async function O(e){return(await i.FH.post("/api/channel/multi_key/manage",e,s())).data}async function L(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:50,a=arguments.length>3?arguments[3]:void 0;return O({channel_id:e,action:"get_key_status",page:t,page_size:n,status:a})}async function q(e,t){return O({channel_id:e,action:"enable_key",key_index:t})}async function U(e,t){return O({channel_id:e,action:"disable_key",key_index:t})}async function E(e,t){return O({channel_id:e,action:"delete_key",key_index:t})}async function F(e){return O({channel_id:e,action:"enable_all_keys"})}async function _(e){return O({channel_id:e,action:"disable_all_keys"})}async function B(e){return O({channel_id:e,action:"delete_disabled_keys"})}async function G(e){return(await i.FH.post("/api/channel/tag/enabled",{tag:e},s())).data}async function V(e){return(await i.FH.post("/api/channel/tag/disabled",{tag:e},s())).data}async function z(e){return(await i.FH.put("/api/channel/tag",e,s())).data}async function K(e){return(await i.FH.get("/api/channel/tag/models",{params:{tag:e}})).data}async function W(e){return(await i.FH.post("/api/channel/fetch_models",e,s())).data}async function H(e){return(await i.FH.delete("/api/channel/ollama/delete",s({data:e}))).data}async function J(){return(await i.FH.get("/api/channel/test",s())).data}async function Q(){return(await i.FH.get("/api/channel/update_balance",s())).data}async function $(){return(await i.FH.get("/api/channel/models")).data}async function Y(){return(await i.FH.get("/api/channel/models_enabled")).data}let X=a.f;async function Z(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"model";return(await i.FH.get("/api/prefill_group",{params:{type:e}})).data}n.d(t,{$3:()=>A,$M:()=>K,AK:()=>D,BF:()=>v,BK:()=>b,BQ:()=>R,C9:()=>q,D3:()=>k,Dh:()=>M,FE:()=>d,Ir:()=>c,Jp:()=>u,KR:()=>I,Kz:()=>Y,Mp:()=>S,No:()=>H,Rx:()=>P,S4:()=>C,SN:()=>E,Tl:()=>j,Ur:()=>g,Vq:()=>Q,ZC:()=>W,bV:()=>L,bc:()=>_,c:()=>p,e1:()=>F,f6:()=>l,fy:()=>y,i2:()=>$,iC:()=>w,jl:()=>h,k:()=>G,kV:()=>J,lK:()=>V,mP:()=>m,oP:()=>f,oR:()=>x,s2:()=>r,uJ:()=>N,vS:()=>z,xF:()=>B,xI:()=>Z,xn:()=>T,zi:()=>U},{f:X})},1258(e,t,n){"use strict";let a=(0,n(38159).h)({sections:[{id:"overview",titleKey:"Overview",build:()=>null},{id:"models",titleKey:"Model Call Analytics",build:()=>null},{id:"flow",titleKey:"Flow",build:()=>null},{id:"users",titleKey:"User Analytics",adminOnly:!0,build:()=>null}],defaultSection:"overview",basePath:"/dashboard",urlStyle:"path"}),i=a.sectionIds,o=a.defaultSection;n.d(t,{},{$F:o,qB:i})},6715(e,t,n){"use strict";var a=n(72361),i=n(82799),o=n(34305),s=n(68413),r=n(6702),l=n(72868),c=n(56275);function d(e){let{className:t,minimal:n=!1,error:d}=e,{t:u}=(0,r.Bd)(),h=(0,i.Z)(),{history:p}=(0,o.r)();(0,s.useEffect)(()=>{if(d instanceof Error&&("ChunkLoadError"===d.name||/^Loading (CSS )?chunk .+ failed\./.test(d.message))){try{let e=`tanstack_router_reload:${d.message}`;if(sessionStorage.getItem(e))return;sessionStorage.setItem(e,"1")}catch{return}window.location.reload()}},[d]);let m=function(e){if("object"!=typeof e||null===e)return;let t=e.response;if("object"!=typeof t||null===t)return;let n=t.status;return"number"==typeof n?n:void 0}(d),g=429===m,f=g?u("Too many requests"):`${u("Oops! Something went wrong")} :')`,y=u(g?"Please wait a moment before trying again.":"Please try again later.");return(0,a.jsx)("div",{className:(0,c.cn)("h-svh w-full",t),children:(0,a.jsxs)("div",{className:"m-auto flex h-full w-full flex-col items-center justify-center gap-2",children:[!n&&void 0!==m&&(0,a.jsx)("h1",{className:"text-[7rem] leading-tight font-bold",children:m}),(0,a.jsx)("span",{className:"font-medium",children:f}),(0,a.jsxs)("p",{className:"text-muted-foreground text-center",children:[u("We apologize for the inconvenience.")," ",(0,a.jsx)("br",{})," ",y]}),!n&&(0,a.jsx)("p",{className:"text-muted-foreground text-center text-sm",children:u("If this keeps happening, please report it on GitHub Issues.")}),!n&&(0,a.jsxs)("div",{className:"mt-6 flex flex-wrap justify-center gap-4",children:[(0,a.jsx)(l.$,{variant:"outline",onClick:()=>p.go(-1),children:u("Go Back")}),(0,a.jsx)(l.$,{variant:"outline",render:(0,a.jsx)("a",{href:"https://github.com/QuantumNous/new-api/issues",target:"_blank",rel:"noopener noreferrer"}),children:u("Report an issue")}),(0,a.jsx)(l.$,{onClick:()=>h({to:"/"}),children:u("Back to Home")})]})]})})}n.d(t,{$:()=>d})},2527(e,t,n){"use strict";var a=n(72361),i=n(82799),o=n(34305),s=n(6702),r=n(72868);function l(){let{t:e}=(0,s.Bd)(),t=(0,i.Z)(),{history:n}=(0,o.r)();return(0,a.jsx)("div",{className:"h-svh",children:(0,a.jsxs)("div",{className:"m-auto flex h-full w-full flex-col items-center justify-center gap-2",children:[(0,a.jsx)("h1",{className:"text-[7rem] leading-tight font-bold",children:"404"}),(0,a.jsx)("span",{className:"font-medium",children:e("Oops! Page Not Found!")}),(0,a.jsxs)("p",{className:"text-muted-foreground text-center",children:[e("It seems like the page you're looking for")," ",(0,a.jsx)("br",{}),e("does not exist or might have been removed.")]}),(0,a.jsxs)("div",{className:"mt-6 flex gap-4",children:[(0,a.jsx)(r.$,{variant:"outline",onClick:()=>n.go(-1),children:e("Go Back")}),(0,a.jsx)(r.$,{onClick:()=>t({to:"/"}),children:e("Back to Home")})]})]})})}n.d(t,{m:()=>l})},64564(e,t,n){"use strict";let a={ENABLED:1,DISABLED:2,EXPIRED:3,EXHAUSTED:4},i={[a.ENABLED]:{label:"Enabled",variant:"success",value:a.ENABLED},[a.DISABLED]:{label:"Disabled",variant:"neutral",value:a.DISABLED},[a.EXPIRED]:{label:"Expired",variant:"warning",value:a.EXPIRED},[a.EXHAUSTED]:{label:"Exhausted",variant:"danger",value:a.EXHAUSTED}},o=Object.values(i).map(e=>({label:e.label,value:String(e.value)}));n.d(t,{},{EG:i,F7:o,PL:{API_KEY_CREATED:"API Key created successfully",API_KEY_UPDATED:"API Key updated successfully",API_KEY_DELETED:"API Key deleted successfully",API_KEY_ENABLED:"API Key enabled successfully",API_KEY_DISABLED:"API Key disabled successfully"},UU:{UNEXPECTED:"An unexpected error occurred",LOAD_FAILED:"Failed to load API keys",SEARCH_FAILED:"Failed to search API keys",CREATE_FAILED:"Failed to create API key",UPDATE_FAILED:"Failed to update API key",DELETE_FAILED:"Failed to delete API key",BATCH_DELETE_FAILED:"Failed to delete API keys",STATUS_UPDATE_FAILED:"Failed to update API key status"},m7:a})},24985(e,t,n){"use strict";var a=n(53540),i=n(96962),o=n(55667),s=n(19376),r=n(38785),l=n(22990),c=n(89795),d=n(46006),u=n(52523),h=n(21735);async function p(e){let t=await l.FH.post("/api/option/model_pricing/convert",e);if(!t.data.success)throw(0,d.ic)(t.data,(0,s.t)("Failed to prepare pricing conversion"));return t.data.data}async function m(e){let t=await l.FH.post("/api/option/model_pricing/preview",e);if(!t.data.success)throw(0,d.ic)(t.data,(0,s.t)("Failed to load model pricing"));return{effective:t.data.data.effective,cacheWriteMode:t.data.data.cache_write_mode,billingDetails:t.data.data.billing_details}}function g(){return(0,u.n)(e=>e.auth.user?.role===c.z7.SUPER_ADMIN)}async function f(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=new URLSearchParams;for(let n of e)t.append("model",n);let n=await l.FH.get("/api/option/model_pricing",{params:t});if(!n.data.success)throw(0,d.ic)(n.data,(0,s.t)("Failed to load model pricing"));return n.data.data}function y(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=!(arguments.length>1)||void 0===arguments[1]||arguments[1],n=g();return(0,a.I)({queryKey:["model-pricing-config",...e],queryFn:()=>f(e),enabled:t&&n,refetchOnWindowFocus:!1})}async function b(e){await Promise.all([e.invalidateQueries({queryKey:["model-pricing-config"]}),e.invalidateQueries({queryKey:["model-pricing-preview"]}),e.invalidateQueries({queryKey:["system-options"]}),e.invalidateQueries({queryKey:["pricing"]}),e.invalidateQueries({queryKey:["models"]})])}async function v(e){if(!e.length)return;let t=await l.FH.patch("/api/option/model_pricing",{changes:e});if(!t.data.success)throw(0,d.ic)(t.data,(0,s.t)("Failed to save model pricing"))}function k(){let e=(0,i.jE)();return(0,o.n)({mutationFn:v,onSuccess:()=>b(e)})}function x(e,t,n){let a=(0,h.nM)(t),i=(0,h.nM)(n),o=new Map(e.entries.map(e=>[e.model_name,e])),s=[];for(let t of new Set([...a.keys(),...i.keys()])){let n=a.get(t)??{},l=i.get(t)??{},c=h.W1.filter(e=>"billing_setting.plugin_billing_expr"===e?!(0,r.zK)(n[e],l[e]):n[e]!==l[e]);if(!c.length)continue;let d=o.get(t),u={...d?.configured};for(let e of c)delete u[e],void 0!==l[e]&&Object.assign(u,{[e]:l[e]});"tiered_expr"===l["billing_setting.billing_mode"]&&(u["billing_setting.billing_mode"]="tiered_expr",u["billing_setting.billing_expr"]=l["billing_setting.billing_expr"]),s.push({model_name:t,expected_version:d?.version??e.empty_version,pricing:u})}return s}n.d(t,{AI:()=>m,FK:()=>v,aH:()=>p,az:()=>f,cf:()=>k,dy:()=>y,fV:()=>b,mc:()=>x,rq:()=>g})},89162(e,t,n){"use strict";var a=n(30991);let i={label:"USD",symbol:"$",exchangeRate:1};function o(e){if("CNY"===e.quotaDisplayType)return{label:"CNY",symbol:"¥",exchangeRate:e.usdExchangeRate};if("CUSTOM"===e.quotaDisplayType){let t=e.customCurrencySymbol?.trim()||"¤";return{label:t,symbol:t,exchangeRate:e.customCurrencyExchangeRate}}return null}function s(e){return null!==e&&Number.isFinite(e.exchangeRate)&&e.exchangeRate>0}function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i;if(""===e)return"";let n=Number(e)*t.exchangeRate;return Number.isFinite(n)?`${t.symbol}${(0,a.j)(n)}`:"—"}n.d(t,{OP:()=>s,ZC:()=>o,yG:()=>r},{GW:i})},21735(e,t,n){"use strict";var a=n(19376),i=n(30077),o=n(38785),s=n(97175);let r=["ModelPrice","ModelRatio","CompletionRatio","CacheRatio","CreateCacheRatio","ImageRatio","AudioRatio","AudioCompletionRatio","billing_setting.billing_mode","billing_setting.billing_expr","billing_setting.plugin_billing_expr"];function l(e){let t=e.effective;return{id:0,model_name:e.model_name,enable_groups:[],quota_type:+(void 0!==t.ModelPrice&&"tiered_expr"!==t["billing_setting.billing_mode"]),model_ratio:Number(t.ModelRatio??NaN),completion_ratio:Number(t.CompletionRatio??NaN),model_price:void 0===t.ModelPrice?void 0:Number(t.ModelPrice),cache_ratio:void 0===t.CacheRatio||1===Number(t.CacheRatio)?void 0:Number(t.CacheRatio),create_cache_ratio:void 0===t.CreateCacheRatio||"standard"!==e.cache_write_mode&&"claude_ttl"!==e.cache_write_mode&&e.configured?.CreateCacheRatio===void 0?void 0:Number(t.CreateCacheRatio),image_ratio:void 0===t.ImageRatio||1===Number(t.ImageRatio)?void 0:Number(t.ImageRatio),audio_ratio:void 0===t.AudioRatio?void 0:Number(t.AudioRatio),audio_completion_ratio:void 0===t.AudioCompletionRatio?void 0:Number(t.AudioCompletionRatio),billing_mode:"string"==typeof t["billing_setting.billing_mode"]?t["billing_setting.billing_mode"]:void 0,billing_expr:"string"==typeof t["billing_setting.billing_expr"]?t["billing_setting.billing_expr"]:void 0,billing_usage_schema:e.usage_schema}}let c={price:"ModelPrice",ratio:"ModelRatio",completionRatio:"CompletionRatio",cacheRatio:"CacheRatio",createCacheRatio:"CreateCacheRatio",imageRatio:"ImageRatio",audioRatio:"AudioRatio",audioCompletionRatio:"AudioCompletionRatio"};function d(e){return Object.fromEntries(r.map(t=>{let n=e[t];return"billing_setting.billing_mode"===t&&(n??=e.BillingMode),"billing_setting.billing_expr"===t&&(n??=e.BillingExpr),"billing_setting.plugin_billing_expr"===t&&(n??=e.PluginBillingExpr),[t,"string"==typeof n?n:"{}"]}))}function u(e,t){var n;let a=(n=Object.fromEntries(r.map(n=>"billing_setting.plugin_billing_expr"===n?[n,JSON.stringify(Object.fromEntries(Object.entries(t[n]??{}).map(t=>{let[n,a]=t;return[`${n}::${e}`,a]})))]:[n,JSON.stringify(void 0===t[n]?{}:{[e]:t[n]})])),(0,s.XD)({modelPrice:n.ModelPrice,modelRatio:n.ModelRatio,completionRatio:n.CompletionRatio,cacheRatio:n.CacheRatio,createCacheRatio:n.CreateCacheRatio,imageRatio:n.ImageRatio,audioRatio:n.AudioRatio,audioCompletionRatio:n.AudioCompletionRatio,billingMode:n["billing_setting.billing_mode"],billingExpr:n["billing_setting.billing_expr"],pluginBillingExpr:n["billing_setting.plugin_billing_expr"]})).find(t=>t.name===e),i="per-token";return a?.billingMode==="tiered_expr"?i="tiered_expr":a?.price&&(i="per-request"),{...a,name:e,billingMode:i,pluginBillingExpr:t["billing_setting.plugin_billing_expr"]}}function h(e){let t={...void 0===e.pluginBillingExpr?{}:{"billing_setting.plugin_billing_expr":e.pluginBillingExpr},"billing_setting.billing_mode":"tiered_expr"===e.billingMode?"tiered_expr":"ratio"};for(let[n,i]of Object.entries(c)){let o=e[n];if(void 0===o||""===o)continue;let s=Number(o);if(!Number.isFinite(s)||s<0)throw Error((0,a.t)("Enter a finite, non-negative price"));("tiered_expr"===e.billingMode||("per-request"===e.billingMode?"ModelPrice"===i:"ModelPrice"!==i))&&(t[i]=s)}return"tiered_expr"===e.billingMode&&(t["billing_setting.billing_expr"]=(0,i.yl)(e.billingExpr||"",e.requestRuleExpr||"")),t}function p(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[t.name],a=h(t);if(1===n.length&&n[0]===t.name)return m(e,a,n);let i={...a};delete i["billing_setting.plugin_billing_expr"];let o=m(e,i,n);return n.includes(t.name)?m(o,a,[t.name]):o}function m(e,t,n){return Object.fromEntries(r.map(a=>{let i=JSON.parse(e[a]??"{}");if("billing_setting.plugin_billing_expr"===a){if(void 0===t[a])return[a,JSON.stringify(i)];for(let e of n){for(let t of Object.keys(i))(0,o.tp)(t)?.[1]===e&&delete i[t];for(let[n,o]of Object.entries(t[a]))i[`${n}::${e}`]=o}return[a,JSON.stringify(i)]}for(let e of n)delete i[e],void 0!==t[a]&&Object.defineProperty(i,e,{value:t[a],enumerable:!0,writable:!0,configurable:!0});return[a,JSON.stringify(i)]}))}function g(e){let t=new Map;for(let n of r){let i=JSON.parse(e[n]??"{}");if(null===i||"object"!=typeof i||Array.isArray(i))throw Error((0,a.t)("Pricing must be a JSON object"));for(let[e,s]of Object.entries(i)){if("number"!=typeof s&&"string"!=typeof s)throw Error((0,a.t)("Invalid pricing value"));if("billing_setting.plugin_billing_expr"===n){let i=(0,o.tp)(e);if(!i||"string"!=typeof s)throw Error((0,a.t)("Invalid pricing value"));let[r,l]=i,c=t.get(l)??{};c[n]={...c[n],[r]:s},t.set(l,c);continue}let i=t.get(e)??{};i[n]=s,t.set(e,i)}}return t}function f(e,t){let n=e;for(let[e,a]of Object.entries(t)){let t={},i="string"==typeof a.billing_expr&&""!==a.billing_expr.trim();if(i)t["billing_setting.billing_mode"]="tiered_expr",t["billing_setting.billing_expr"]=a.billing_expr;else{t["billing_setting.billing_mode"]="ratio";let e=void 0!==a.model_price;for(let[n,i]of Object.entries(a)){if("billing_mode"===n||"billing_expr"===n||e&&"model_price"!==n)continue;let a=n.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join("");r.includes(a)&&"billing_setting.plugin_billing_expr"!==a&&(t[a]=i)}}let o=h(u(e,t));i&&(o["billing_setting.billing_expr"]=a.billing_expr),n=m(n,o,[e])}return n}n.d(t,{E8:()=>p,Pf:()=>d,U8:()=>l,Yf:()=>f,nM:()=>g,rK:()=>u,uu:()=>h},{W1:r})},39987(e,t,n){"use strict";var a=n(22990);async function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(await a.FH.get("/api/models/",{params:e})).data}async function o(e){return(await a.FH.get("/api/models/search",{params:e})).data}async function s(e){return(await a.FH.get(`/api/models/${e}`)).data}async function r(e){return(await a.FH.post("/api/models/",e,{skipBusinessError:!0,skipErrorHandler:!0})).data}async function l(e){return(await a.FH.put("/api/models/",e,{skipBusinessError:!0,skipErrorHandler:!0})).data}async function c(e,t){return(await a.FH.put("/api/models/?status_only=true",{id:e,status:t})).data}async function d(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return(await a.FH.delete(`/api/models/${e}`,{params:{remove_from_channels:t,remove_pricing:n}})).data}async function u(e){return(await a.FH.get("/api/vendors/",{params:e||{page_size:1e3}})).data}async function h(e){return(await a.FH.get("/api/vendors/search",{params:e})).data}async function p(e){return(await a.FH.get(`/api/vendors/${e}`)).data}async function m(e){return(await a.FH.post("/api/vendors/",e)).data}async function g(e){return(await a.FH.put("/api/vendors/",e)).data}async function f(e){return(await a.FH.post("/api/models/sync_upstream",e)).data}async function y(e){let t=new URLSearchParams;e?.locale&&t.set("locale",e.locale),e?.source&&t.set("source",e.source);let n=t.toString(),i=n?`/api/models/sync_upstream/preview?${n}`:"/api/models/sync_upstream/preview";return(await a.FH.get(i)).data}async function b(){return(await a.FH.get("/api/models/missing")).data}async function v(e){return(await a.FH.get("/api/prefill_group",{params:e?{type:e}:void 0})).data}async function k(e){return(await a.FH.post("/api/prefill_group",e)).data}async function x(e){return(await a.FH.put("/api/prefill_group",e)).data}async function w(e){return(await a.FH.delete(`/api/prefill_group/${e}`)).data}async function C(){return(await a.FH.get("/api/deployments/settings")).data}async function A(){return(await a.FH.post("/api/deployments/settings/test-connection",{},{skipErrorHandler:!0})).data}async function S(e){let t="string"==typeof e&&e.trim()?{api_key:e.trim()}:{};return(await a.FH.post("/api/deployments/settings/test-connection",t,{skipErrorHandler:!0})).data}async function P(e){return(await a.FH.get("/api/deployments/",{params:e})).data}async function T(e){return(await a.FH.get("/api/deployments/search",{params:e})).data}async function I(e){return(await a.FH.get(`/api/deployments/${e}`)).data}async function R(e){return(await a.FH.get(`/api/deployments/${e}/containers`)).data}async function N(e){return(await a.FH.delete(`/api/deployments/${e}`)).data}async function j(e,t){return(await a.FH.get(`/api/deployments/${e}/logs`,{params:t})).data}async function M(){return(await a.FH.get("/api/deployments/hardware-types")).data}async function D(e){return(await a.FH.get("/api/deployments/available-replicas",{params:e})).data}async function O(e){let t=(e.location_ids||[]).map(e=>Number(e)).filter(e=>Number.isInteger(e)&&e>0),n=Number(e.hardware_id),i=Number(e.duration_hours),o=Number(e.gpus_per_container),s=Number(e.replica_count),r="string"==typeof e.currency&&e.currency.trim()?e.currency.trim().toLowerCase():"usdc";return(await a.FH.post("/api/deployments/price-estimation",{location_ids:t,hardware_id:n,gpus_per_container:o,duration_hours:i,replica_count:s,currency:r,duration_type:"hour",duration_qty:i,hardware_qty:o})).data}async function L(e){return(await a.FH.post("/api/deployments/",e)).data}async function q(e,t){let n={...t};return null===t.traffic_port&&delete n.traffic_port,(await a.FH.put(`/api/deployments/${e}`,n)).data}async function U(e,t){return(await a.FH.put(`/api/deployments/${e}/name`,{name:t})).data}async function E(e,t){return(await a.FH.post(`/api/deployments/${e}/extend`,{duration_hours:t})).data}async function F(e){return(await a.FH.get("/api/deployments/check-name",{params:{name:e}})).data}async function _(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return(await a.FH.post("/api/models/delete",{model_ids:e,remove_from_channels:t,remove_pricing:n})).data}n.d(t,{$v:()=>y,Ab:()=>U,B1:()=>j,BY:()=>C,De:()=>d,E1:()=>s,GM:()=>_,Jd:()=>D,Jn:()=>P,Kx:()=>k,Lw:()=>x,MG:()=>E,Q5:()=>l,VJ:()=>q,Vq:()=>w,YQ:()=>u,Yy:()=>L,Z7:()=>F,ZZ:()=>f,_d:()=>g,c9:()=>O,cN:()=>M,ck:()=>A,f7:()=>p,i8:()=>I,j6:()=>o,kJ:()=>h,kQ:()=>r,ng:()=>b,r8:()=>T,rP:()=>S,rd:()=>N,sC:()=>R,vo:()=>c,xI:()=>v,zC:()=>m,zr:()=>i})},87558(e,t,n){"use strict";let a=(0,n(38159).h)({sections:[{id:"metadata",titleKey:"Models",build:()=>null},{id:"vendors",titleKey:"Vendors",build:()=>null},{id:"deployments",titleKey:"Deployments",build:()=>null}],defaultSection:"metadata",basePath:"/models",urlStyle:"path"}),i=a.sectionIds,o=a.defaultSection;a.getSectionNavItems,n.d(t,{},{Fi:o,ev:i})},10328(e,t,n){"use strict";let a={NAME:"name",INPUT_PRICE_LOW:"input-price-low",INPUT_PRICE_HIGH:"input-price-high",OUTPUT_PRICE_LOW:"output-price-low",OUTPUT_PRICE_HIGH:"output-price-high",REQUEST_PRICE_LOW:"request-price-low",REQUEST_PRICE_HIGH:"request-price-high"};function i(e){return{[a.NAME]:e("Name"),[a.INPUT_PRICE_LOW]:e("Input Price: Low to High"),[a.INPUT_PRICE_HIGH]:e("Input Price: High to Low"),[a.OUTPUT_PRICE_LOW]:e("Output Price: Low to High"),[a.OUTPUT_PRICE_HIGH]:e("Output Price: High to Low"),[a.REQUEST_PRICE_LOW]:e("Per-request Price: Low to High"),[a.REQUEST_PRICE_HIGH]:e("Per-request Price: High to Low")}}let o={ALL:"all",TOKEN:"token",REQUEST:"request",TASK:"task"};function s(e){return{[o.ALL]:e("All Models"),[o.TOKEN]:e("Token-based"),[o.REQUEST]:e("Per Request"),[o.TASK]:e("Task billing")}}let r={ALL:"all",OPENAI:"openai",OPENAI_RESPONSE:"openai-response",ANTHROPIC:"anthropic",GEMINI:"gemini",JINA_RERANK:"jina-rerank",IMAGE_GENERATION:"image-generation",EMBEDDINGS:"embeddings",OPENAI_VIDEO:"openai-video"};function l(e){return{[r.ALL]:e("All Types"),[r.OPENAI]:"Chat",[r.OPENAI_RESPONSE]:"Response",[r.ANTHROPIC]:"Anthropic",[r.GEMINI]:"Gemini",[r.JINA_RERANK]:"Rerank",[r.IMAGE_GENERATION]:e("Image"),[r.EMBEDDINGS]:e("Embeddings"),[r.OPENAI_VIDEO]:e("Video")}}n.d(t,{SZ:()=>s,WU:()=>i,fb:()=>l},{$P:{M:1,K:1e3},An:["","auto"],LW:{TOKEN:0,REQUEST:1},QB:a,pV:{CARD:"card",TABLE:"table"},s4:r,zH:o})},87957(e,t,n){"use strict";let a;var i=n(68413),o=n(73951),s=n(49503);let r=new Set,l=Date.now();function c(){l=Date.now(),r.forEach(e=>e()),a&&clearTimeout(a),r.size>0&&"hidden"!==document.visibilityState&&(a=setTimeout(c,6e4-Date.now()%6e4))}function d(e){return r.add(e),1===r.size&&(document.addEventListener("visibilitychange",c),c()),()=>{r.delete(e),0===r.size&&(a&&clearTimeout(a),a=void 0,document.removeEventListener("visibilitychange",c))}}function u(){return l}function h(){return()=>{}}function p(){}function m(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1],n=e&&t?(0,o.Z)(e):null,a=n?.status==="ready"&&s.i1.some(e=>n.functions.has(e));return(0,i.useSyncExternalStore)(a?d:h,a?u:p,p)}n.d(t,{K:()=>m})},89347(e,t,n){"use strict";n.d(t,{y:()=>c});var a=n(53540),i=n(68413),o=n(13289),s=n(46006),r=n(22990);async function l(){return(await r.FH.get("/api/pricing")).data}function c(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],{status:t}=(0,o.s)(),{data:n,isLoading:r,error:c,refetch:d}=(0,a.I)({queryKey:["pricing"],queryFn:async()=>(0,s.oi)(await l()),staleTime:3e5,enabled:e}),u=(0,i.useMemo)(()=>Math.max(t?.price??1,.001),[t?.price]),h=(0,i.useMemo)(()=>Math.max(t?.usd_exchange_rate??u,.001),[t?.usd_exchange_rate,u]);return{models:(0,i.useMemo)(()=>{if(!n?.data||!n?.vendors)return[];let e=new Map(n.vendors.map(e=>[e.id,e]));return n.data.map(t=>{let a=t.vendor_id?e.get(t.vendor_id):void 0;return{...t,key:t.model_name,vendor_name:a?.name,vendor_icon:a?.icon,vendor_description:a?.description,group_ratio:n.group_ratio}})},[n]),vendors:n?.vendors??[],groupRatio:n?.group_ratio??{},usableGroup:n?.usable_group??{},endpointMap:n?.supported_endpoint??{},autoGroups:n?.auto_groups??[],isLoading:r,error:c,refetch:d,priceRate:u,usdExchangeRate:h}}},30077(e,t,n){"use strict";n.d(t,{E2:()=>d,s5:()=>c,mq:()=>r,fo:()=>s,NT:()=>f,I2:()=>h,yG:()=>g,Fy:()=>_,yl:()=>j,f_:()=>M,LU:()=>O,qC:()=>D,WH:()=>k,ZT:()=>L,wM:()=>w,Fs:()=>x,oK:()=>v,Vy:()=>T,U8:()=>N,TS:()=>I});var a=n(9016),i=n(73951);function o(e,t){let n=[],a=0,i=0,o="";for(let s=0;s!e.isConditionOnly);s.filter(e=>e.isBase||e.isConditionOnly).map(e=>e.key);let l=Object.fromEntries(r.map(e=>[e.key,e.field])),c=s.filter(e=>!e.isBase&&!e.isConditionOnly),d=c.map(e=>({field:e.tierField,exprVar:e.key})),u="time",h="contains",p="exists",m="range",g=["hour","minute","weekday","month","day"],f=[{value:"Asia/Shanghai",label:"UTC+8 Shanghai (Asia/Shanghai)"},{value:"UTC",label:"UTC"},{value:"America/New_York",label:"UTC-5 New York (America/New_York)"},{value:"America/Los_Angeles",label:"UTC-8 Los Angeles (America/Los_Angeles)"},{value:"America/Chicago",label:"UTC-6 Chicago (America/Chicago)"},{value:"Europe/London",label:"UTC+0 London (Europe/London)"},{value:"Europe/Berlin",label:"UTC+1 Berlin (Europe/Berlin)"},{value:"Asia/Tokyo",label:"UTC+9 Tokyo (Asia/Tokyo)"},{value:"Asia/Singapore",label:"UTC+8 Singapore (Asia/Singapore)"},{value:"Asia/Seoul",label:"UTC+9 Seoul (Asia/Seoul)"},{value:"Australia/Sydney",label:"UTC+10 Sydney (Australia/Sydney)"}],y=/^-?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?$/;function b(e){return{label:e.label,...e.imageCount?{imageCount:!0}:{},conditions:e.conditions,..."request"===e.billingUnit?{billingUnit:e.billingUnit,fixedPrice:e.fixedPrice}:{},...e.conditionText?{conditionText:e.conditionText}:{},...Object.fromEntries(Object.entries(e.prices).map(e=>{let[t,n]=e;return[l[t],n]}))}}function v(e){if(!e)return[];let t=(0,i.Z)(e);if("ready"!==t.status)return[];let n=(0,a.dZ)(t.ast);return n?n.map(b):(0,a.JO)(e)?.tiers.map(b)??[]}function k(e,t){return(0,a.JO)(e,t)?.currentTiers.map(b)??null}function x(e,t){let n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!t||0===Object.keys(t).length)return[];let{billingExpr:o}=N(e),s=(0,i.Z)(o);return"ready"!==s.status?[]:(0,a.L5)(s.ast,t,n)??[]}function w(e){return e?e.replaceAll(/<[==]?|≤|<[==]?/g,"<").replaceAll(/>[==]?|≥|>[==]?/g,">").replaceAll(/\s+/g,"").toLowerCase():""}let C={hour:[0,23],minute:[0,59],weekday:[0,6],month:[1,12],day:[1,31]};function A(e,t){if(!y.test(t))return!1;let n=Number(t);if(!Number.isInteger(n))return!1;let[a,i]=C[e];return n>=a&&n<=i}function S(e){let t=e.match(/^(hour|minute|weekday|month|day)\("([^"]+)"\) >= ([\d.eE+-]+) (?:&&|\|\|) \1\("\2"\) < ([\d.eE+-]+)$/);return(t||(t=e.match(/^\((hour|minute|weekday|month|day)\("([^"]+)"\) >= ([\d.eE+-]+) (?:&&|\|\|) \1\("\2"\) < ([\d.eE+-]+)\)$/)),t)?A(t[1],t[3])&&A(t[1],t[4])?{source:"time",timeFunc:t[1],timezone:t[2],mode:m,value:"",rangeStart:t[3],rangeEnd:t[4]}:null:(t=e.match(/^(hour|minute|weekday|month|day)\("([^"]+)"\) (==|>=|<) ([\d.eE+-]+)$/))?A(t[1],t[4])?{source:"time",timeFunc:t[1],timezone:t[2],mode:({"==":"eq",">=":"gte","<":"lt"})[t[3]]||"eq",value:t[4],rangeStart:"",rangeEnd:""}:null:null}function P(e){let t=S(e.trim());if(t)return[t];let n=o(e,"&&"),a=[];for(let e=0;e|>=|<|<=) ([\d.eE+-]+)$/))&&n[1]===n[2])return{source:"param",path:n[1],mode:({">":"gt",">=":"gte","<":"lt","<=":"lte"})[n[3]],value:n[4]};if(n=e.match(/^(param|header)\("([^"]+)"\) == (.+)$/)){let e=function(e){let t=e.trim();if("true"===t||"false"===t||y.test(t))return t;try{return JSON.parse(t)}catch{return null}}(n[3]);return null===e?null:{source:n[1],path:n[2],mode:"eq",value:String(e)}}return null}(t);if(!s)return null;a.push(s)}return a.length>0?a:null}function T(e){return e.map(e=>{let t=e.cond.trim();return{conditions:P(t)||[],multiplier:String(e.multiplier),conditionText:t,matched:e.matched}})}function I(e){let t=(e||"").trim();if(!t)return[];let n=o(t,"*"),a=[];for(let e of n){let t=function(e){let t=e.match(/^\((.+) \? ([\d.eE+-]+) : 1\)$/s);if(!t)return null;let n=P(t[1]);return n?{conditions:n,multiplier:t[2]}:null}(e);if(!t)return null;a.push(t)}return a}function R(e){return function(e){let t=e.trim();for(;t.startsWith("(")&&t.endsWith(")");){let e=0,n="",a=!1;for(let i=0;i{let t=I(e),n=(0,i.Z)(e),o="ready"===n.status&&n.requestRules.some(e=>e.node===n.ast);t&&t.length>0||o?a.push(e):s.push(e)});let r=s.filter(e=>"image_count"===R(e));return 0===a.length||s.length-r.length!=1?{billingExpr:t,requestRuleExpr:""}:{billingExpr:s.map(R).join(" * "),requestRuleExpr:a.join(" * ")}}function j(e,t){let n=(e||"").trim(),a=(t||"").trim();return n?a?`(${n}) * ${a}`:n:""}function M(){return{source:"param",path:"",mode:"eq",value:""}}function D(){return{source:"time",timeFunc:"hour",timezone:"Asia/Shanghai",mode:"gte",value:"",rangeStart:"",rangeEnd:""}}function O(){return{conditions:[M()],multiplier:""}}function L(e){if(e===u)return[{value:"eq",labelKey:"Equals"},{value:"gte",labelKey:"Greater than or equal"},{value:"lt",labelKey:"Less than"},{value:m,labelKey:"Overnight range"}];let t=[{value:"eq",labelKey:"Equals"},{value:h,labelKey:"Contains"},{value:p,labelKey:"Exists"}];return"header"===e?t:[...t,{value:"gt",labelKey:"Greater than"},{value:"gte",labelKey:"Greater than or equal"},{value:"lt",labelKey:"Less than"},{value:"lte",labelKey:"Less than or equal"}]}function q(e){let t="param";if(e?.source==="time"?t="time":e?.source==="header"&&(t="header"),"time"===t){var n;let t="string"==typeof(n=e?.timeFunc)&&g.includes(n)?e.timeFunc:"hour",a=L(u).some(t=>t.value===e?.mode)?e?.mode:"gte";return{source:"time",timeFunc:t,timezone:e?.timezone||"Asia/Shanghai",mode:a,value:e?.value==null?"":String(e.value),rangeStart:e?.rangeStart==null?"":String(e.rangeStart),rangeEnd:e?.rangeEnd==null?"":String(e.rangeEnd)}}let a=L(t).some(t=>t.value===e?.mode)?e?.mode:"eq";return{source:t,path:e?.path||"",mode:a,value:e?.value==null?"":String(e.value)}}function U(e,t){let n=String(t||"").trim();return e===h?JSON.stringify(n):"true"===n||"false"===n||y.test(n)?n:JSON.stringify(n)}function E(e){if("time"===e.source)return function(e){let t=q(e),{timeFunc:n,timezone:a,mode:i}=t,o=JSON.stringify(a),s=`${n}(${o})`;if(i===m){let e=t.rangeStart.trim(),a=t.rangeEnd.trim();return A(n,e)&&A(n,a)?Number(e)>Number(a)?`${s} >= ${e} || ${s} < ${a}`:`${s} >= ${e} && ${s} < ${a}`:""}let r=t.value.trim();return A(n,r)?`${s} ${({eq:"==",gte:">=",lt:"<"})[i]||"=="} ${r}`:""}(e);let t=q(e),n=t.path.trim();if(!n)return"";let a="header"===t.source?`header(${JSON.stringify(n)})`:`param(${JSON.stringify(n)})`;switch(t.mode){case p:return"header"===t.source?`${a} != ""`:`${a} != nil`;case h:return"header"===t.source?`has(${a}, ${U(t.mode,t.value)})`:`${a} != nil && has(${a}, ${U(t.mode,t.value)})`;case"gt":case"gte":case"lt":case"lte":{let e=String(t.value).trim();if(!y.test(e))return"";return`${a} != nil && ${a} ${({gt:">",gte:">=",lt:"<",lte:"<="})[t.mode]} ${e}`}default:return`${a} == ${U(t.mode,t.value)}`}}function F(e){let t=(e.multiplier||"").trim();if(!y.test(t))return"";let n=(e.conditions||[]).map(E).filter(Boolean);if(0===n.length)return"";let a=1===n.length?n[0]:n.map(e=>e.includes(" || ")?`(${e})`:e).join(" && ");return`(${a} ? ${t} : 1)`}function _(e){return(e||[]).map(F).filter(Boolean).join(" * ")}},92924(e,t,n){"use strict";var a=n(52048),i=n(9016),o=n(73951),s=n(49503);let r={hour:[0,24],minute:[0,60],weekday:[0,7],month:[1,13],day:[1,32]};function l(e){return"binary"===e.kind&&["==",">=",">","<=","<"].includes(e.operator)&&"call"===e.left.kind&&s.i1.includes(e.left.name)&&"literal"===e.left.args[0].kind&&"string"==typeof e.left.args[0].value&&"literal"===e.right.kind&&"number"==typeof e.right.value&&Number.isInteger(e.right.value)?{name:e.left.name,timezone:e.left.args[0].value.trim()||"UTC",operator:e.operator,value:e.right.value}:null}function c(e,t,n){let i,o=e[0],[s,l]=r[o.name];for(let t of e)switch(t.operator){case">=":s=Math.max(s,t.value);break;case">":s=Math.max(s,t.value+1);break;case"<":l=Math.min(l,t.value);break;case"<=":l=Math.min(l,t.value+1);break;case"==":s=Math.max(s,t.value),l=Math.min(l,t.value+1)}if(s>=l)return null;let c="calendar";if("hour"===o.name)c="clock",i=t("{{start}}–{{end}}",{start:`${String(s).padStart(2,"0")}:00`,end:`${String(l).padStart(2,"0")}:00`});else if("weekday"===o.name){let e=new Intl.DateTimeFormat((0,a.Tl)(n),{weekday:"short",timeZone:"UTC"}),o=e.format(new Date(Date.UTC(2026,0,4+s))),r=e.format(new Date(Date.UTC(2026,0,4+l-1)));i=s===l-1?o:t("{{start}}–{{end}}",{start:o,end:r})}else{let e=s===l-1?String(s):t("{{start}}–{{end}}",{start:s,end:l-1});i=`${t({minute:"Minute",month:"Month",day:"Day"}[o.name])}: ${e}`}return{text:i,kind:c,timezone:o.timezone}}function d(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"en",s=(0,o.Z)(e);if("ready"!==s.status)return null;try{let e=(e,n)=>t(e,{...n,interpolation:{escapeValue:!1}}),o=function e(t,n,o){if("unary"===t.kind&&"!"===t.operator){let a=e(t.operand,n,o);return a?{...a,text:n("Outside these times: {{condition}}",{condition:a.text}),kind:"combined"}:null}if("binary"===t.kind&&["<","<=",">",">=","==","!="].includes(t.operator)&&"variable"===t.left.kind&&"literal"===t.right.kind&&"number"==typeof t.right.value){let e={p:"Input",c:"Output",len:"Full input length"}[t.left.name];return e?{text:`${n(e)} ${t.operator} ${t.right.value.toLocaleString((0,a.Tl)(o))}`,kind:"combined",timezone:""}:null}let s=l(t);if(s)return c([s],n,o);if("binary"!==t.kind||!["&&","||"].includes(t.operator))return null;let r=(0,i.eg)(t,t.operator),d=[];if("&&"===t.operator){let t=new Map;for(let a of r){let i=l(a);if(i){let e=`${i.name}:${i.timezone}`,n=t.get(e)??[];n.push(i),t.set(e,n)}else{let t=e(a,n,o);if(!t)return null;d.push(t)}}for(let e of t.values()){let t=c(e,n,o);if(!t)return null;d.push(t)}}else for(let t of r){let a=e(t,n,o);if(!a)return null;d.push(a)}let u=[...new Set(d.map(e=>e.timezone).filter(Boolean))];if(0===d.length||u.length>1)return null;let h=u[0]??"";if(1===d.length)return d[0];let p=d.filter(e=>"calendar"===e.kind),m=d.filter(e=>"clock"===e.kind);if("&&"===t.operator&&2===d.length&&1===p.length&&1===m.length)return{text:`${p[0].text} ${m[0].text}`,kind:"combined",timezone:d[0].timezone};let g="&&"===t.operator?"{{first}} and {{second}}":"{{first}} or {{second}}",f="&&"===t.operator&&d[0].disjunction?`(${d[0].text})`:d[0].text;for(let e of d.slice(1))f=n(g,{first:f,second:"&&"===t.operator&&e.disjunction?`(${e.text})`:e.text});return{text:f,kind:m.length===d.length?"clock":"combined",timezone:h,disjunction:"||"===t.operator}}(s.ast,e,n);if(!o)return null;if(!o.timezone)return o.text;return e("{{condition}} ({{timezone}})",{condition:o.text,timezone:o.timezone})}catch{return null}}n.d(t,{m:()=>d})},9016(e,t,n){"use strict";var a=n(73951),i=n(67558),o=n(49503);function s(e,t){return"binary"!==e.kind||e.operator!==t?[e]:[...s(e.left,t),...s(e.right,t)]}function r(e){return"literal"===e.kind&&"number"==typeof e.value&&e.value>=0?e.value:"unary"===e.kind&&"-"===e.operator&&"literal"===e.operand.kind&&0===e.operand.value?-0:null}function l(e,t){if("call"!==e.kind||"tier"!==e.name||e.args[0]?.kind!=="literal"||"string"!=typeof e.args[0].value)return null;let n={},a=e.args[1];if("call"===a.kind&&"fixed"===a.name&&"literal"===a.args[0].kind&&"number"==typeof a.args[0].value)return{label:e.args[0].value,conditions:t,prices:n,billingUnit:"request",fixedPrice:a.args[0].value};for(let t of s(e.args[1],"+")){let e;if("binary"!==t.kind||"*"!==t.operator)return null;let a=t.left,i=r(t.right);if(null===i){if(null===(i=r(t.left)))return null;a=t.right}if("variable"===a.kind&&"len"!==a.name&&"image_count"!==a.name)e=a.name;else{if("call"!==a.kind||"max"!==a.name||2!==a.args.length)return null;let t=a.args[0];if("literal"===t.kind&&0===t.value)t=a.args[1];else if("literal"!==a.args[1].kind||0!==a.args[1].value)return null;if("binary"!==t.kind||"-"!==t.operator||"variable"!==t.left.kind||"len"!==t.left.name||"variable"!==t.right.kind||"ai"!==t.right.name)return null;e="p"}if(Object.hasOwn(n,e))return null;n[e]=i}return 0===Object.keys(n).length?null:{label:e.args[0].value,conditions:t,prices:n}}function c(e){if("conditional"===e.kind&&"binary"===e.condition.kind&&"||"===e.condition.operator){let t=[e.condition.left,e.condition.right],n=new Set;for(let e of t)"binary"===e.kind&&">"===e.operator&&"variable"===e.left.kind&&("ai"===e.left.name||"ao"===e.left.name)&&"literal"===e.right.kind&&0===e.right.value&&n.add(e.left.name);if(2===n.size){let t=l(e.yes,[]),n=l(e.no,[]);if(t&&n)return[{...t,conditionText:"Audio requests"},{...n,conditionText:"Text-only requests"}]}}if("binary"===e.kind&&"*"===e.operator){for(let[t,n]of[[e.left,e.right],[e.right,e.left]])if("variable"===t.kind&&"image_count"===t.name)return c(n)?.map(e=>({...e,imageCount:!0}))??null}let t=[],n=e;for(;"conditional"===n.kind;){let e=function(e){let t=[];for(let n of s(e,"&&")){if("binary"!==n.kind||!["<","<=",">",">="].includes(n.operator)||"variable"!==n.left.kind||!["p","c","len"].includes(n.left.name)||"literal"!==n.right.kind||"number"!=typeof n.right.value||n.right.value<0)return null;t.push({var:n.left.name,op:n.operator,value:n.right.value})}return t}(n.condition);if(!e)return null;let a=l(n.yes,e);if(!a)return null;t.push(a),n=n.no}let a=l(n,[]);return a?[...t,a]:null}function d(e,t){let n=(0,a.Z)(e);if("ready"!==n.status)return null;let s=function e(t,n,a){var i;let s;if("conditional"===n.kind&&(i=n.condition,0===(s=(0,o.GJ)(i)).variables.size&&[...s.functions].some(e=>o.i1.includes(e))&&[...s.functions].every(e=>[...o.i1,"min","max","abs","ceil","floor"].includes(e)))){let i=e(t,n.yes,[...a,{condition:n.condition,matches:!0}]),o=e(t,n.no,[...a,{condition:n.condition,matches:!1}]);return i&&o?[...i,...o]:null}let r=c(n);if(!r||0===a.length)return null;let l=a.map(e=>{let{condition:n,matches:a}=e,i=t.source.slice(n.start,n.end);return a?`(${i})`:`!(${i})`}).join(" && ");return r.map(e=>({...e,timeConditions:a,conditionText:[l,...e.conditions.map(e=>`${e.var} ${e.op} ${e.value}`)].join(" && ")}))}(n,n.ast,[]);if(!s)return null;let r=t?s.filter(e=>e.timeConditions.every(e=>{let{condition:a,matches:o}=e;return(0,i.gE)(n,a,t)===o})):[];return{tiers:s,currentTiers:r}}function u(e,t,n){if("call"!==e.kind||"tier"!==e.name||"literal"!==e.args[0].kind||"string"!=typeof e.args[0].value)return null;let a=0,i=!1,o={};for(let t of s(e.args[1],"+")){let e=r(t);if(null!==e){if(i)return null;i=!0,a=e;continue}let s="binary"===t.kind&&"/"===t.operator;if(s&&"binary"===t.kind){if("literal"!==t.right.kind||1e6!==t.right.value)return null;t=t.left}if("binary"!==t.kind||"*"!==t.operator||"call"!==t.left.kind||"u"!==t.left.name||"literal"!==t.left.args[0].kind||"string"!=typeof t.left.args[0].value||null===r(t.right))return null;let l=t.left.args[0].value,c=n[l];if(c){if("number"!==c.type||!c.unit||Object.hasOwn(o,l)||"token"===c.unit!==s)return null;o[l]=r(t.right)??0}}return 0===Object.keys(o).length?null:{label:e.args[0].value,conditions:t,constant:a,unitPrices:o}}function h(e,t,n){let a=[],i=e;for(;"conditional"===i.kind;){let e=function(e,t,n){let a=[],i=!0;for(let o of s(e,"&&")){if("binary"!==o.kind||"=="!==o.operator||"call"!==o.left.kind||"u"!==o.left.name||"literal"!==o.left.args[0].kind||"string"!=typeof o.left.args[0].value||"literal"!==o.right.kind)return null;let e=o.left.args[0].value,s=t[e],r=o.right.value;if(!s){if(!0===r)i=!1;else if(!1!==r&&"string"!=typeof r)return null;continue}if("boolean"===s.type){if(!n||"boolean"!=typeof r)return null}else{if("string"!=typeof r||!s.enum)return null;s.enum.includes(r)||(i=!1)}a.push({field:e,value:String(r)})}return i?a:"unreachable"}(i.condition,t,n);if(null===e)return null;if("unreachable"!==e&&!a.some(t=>t.conditions.every(t=>e.some(e=>{let{field:n,value:a}=e;return n===t.field&&a===t.value})))){let n=u(i.yes,e,t);if(!n)return null;if(0===e.length)return[...a,n];a.push(n)}i=i.no}let o=u(i,[],t);return o?[...a,o]:null}n.d(t,{JO:()=>d,L5:()=>h,dZ:()=>c,eg:()=>s})},73951(e,t,n){"use strict";var a=n(49503);let i={"||":1,"&&":2,"==":3,"!=":3,"<":4,"<=":4,">":4,">=":4,"+":5,"-":5,"*":6,"/":6,"%":6};class o{source;cursor=0;count=0;depth=0;current;constructor(e){if(this.source=e,e.length>65536)throw new a.C6({code:"limit",detail:"expression length"});const t=e.match(/^\s*v(\d+):/);if(t&&"1"!==t[1])throw new a.C6({code:"unsupported",detail:t[0]});t&&(this.cursor=t[0].length),this.current=this.next()}next(){if(++this.count>1e4)throw new a.C6({code:"limit",detail:"expression tokens"});for(;/\s/.test(this.source[this.cursor]??"")&&this.cursor=|[+\-*/%<>()!?:,])/);if(!o)throw new a.C6({code:"unsupported",detail:t[0],position:e});return this.cursor+=o[0].length,{kind:"symbol",text:o[0],start:e,end:this.cursor}}take(){let e=this.current;return this.current=this.next(),e}is(e){return this.current.text===e}expect(e){if(this.current.text!==e)throw new a.C6({code:"syntax",detail:`expected ${e}`,position:this.current.start});return this.take()}parse(){let e=this.expression();if("end"!==this.current.kind)throw new a.C6({code:"unsupported",detail:this.current.text,position:this.current.start});return e}expression(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(++this.depth>128)throw new a.C6({code:"limit",detail:"expression depth"});let t=this.primary();for(;Object.hasOwn(i,this.current.text)&&i[this.current.text]>=e;){let e=this.take().text,n=this.expression(i[e]+1);t={kind:"binary",operator:e,left:t,right:n,start:t.start,end:n.end}}if(0===e&&"?"===this.current.text){this.take();let e=this.expression();this.expect(":");let n=this.expression();t={kind:"conditional",condition:t,yes:e,no:n,start:t.start,end:n.end}}return this.depth--,t}primary(){let e=this.take(),t={start:e.start,end:e.end};if("number"===e.kind)return{kind:"literal",value:e.value,integer:e.integer,...t};if("string"===e.kind)return{kind:"literal",value:e.value,...t};if("("===e.text){let t=this.expression(),n=this.expect(")").end;return{...t,start:e.start,end:n}}if(["!","+","-"].includes(e.text)){let t=this.expression(7);return{kind:"unary",operator:e.text,operand:t,start:e.start,end:t.end}}if("name"!==e.kind)throw new a.C6({code:"syntax",detail:e.text,position:e.start});if("nil"===e.text)return{kind:"literal",value:null,...t};if("true"===e.text||"false"===e.text)return{kind:"literal",value:"true"===e.text,...t};if("("!==this.current.text){if(!a.Gl.includes(e.text))throw new a.C6({code:"unsupported",detail:e.text,position:e.start});return{kind:"variable",name:e.text,...t}}if(!Object.hasOwn(a.o,e.text))throw new a.C6({code:"unsupported",detail:e.text,position:e.start});this.take();let n=[];for(;!this.is(")")&&(n.push(this.expression()),this.is(","));)this.take();let i=this.expect(")").end;if(n.length!==a.o[e.text])throw new a.C6({code:"type",detail:e.text,position:e.start});return{kind:"call",name:e.text,args:n,start:e.start,end:i}}}let s=new Map;function r(e){let t=(0,a.GJ)(e).functions;return t.has("tier")||t.has("fixed")}function l(e){let t,n=s.get(e);if(n)return n;try{let n,i=new o(e).parse();n=new Map,(0,a.wM)(i,e=>{let t=(e,t)=>{let i=n.get(e);if(i!==t&&"dynamic"!==i)throw new a.C6({code:"type",detail:`${t} operand`,position:e.start})},i="dynamic";"literal"===e.kind?i=null===e.value?"nil":"number"==typeof e.value?"number":"string"==typeof e.value?"string":"boolean":"variable"===e.kind?i="number":"unary"===e.kind?(i="!"===e.operator?"boolean":"number",t(e.operand,i)):"conditional"===e.kind?(t(e.condition,"boolean"),n.get(e.yes)===n.get(e.no)&&(i=n.get(e.yes)??"dynamic")):"binary"===e.kind?["&&","||"].includes(e.operator)?(t(e.left,"boolean"),t(e.right,"boolean"),i="boolean"):["==","!=","<","<=",">",">="].includes(e.operator)?i="boolean":"+"===e.operator&&"string"===n.get(e.left)&&"string"===n.get(e.right)?i="string":(t(e.left,"number"),t(e.right,"number"),i="number"):"call"===e.kind&&(["param","header","u",...a.i1].includes(e.name)&&t(e.args[0],"string"),"header"===e.name?i="string":"has"===e.name?(t(e.args[1],"string"),i="boolean"):"tier"===e.name?(t(e.args[0],"string"),t(e.args[1],"number"),i="number"):a.i1.includes(e.name)?i="number":["fixed","min","max","abs","ceil","floor"].includes(e.name)&&(e.args.forEach(e=>t(e,"number")),i="number")),n.set(e,i)});let s=(0,a.GJ)(i),l=[];(0,a.wM)(i,t=>{"conditional"!==t.kind||"literal"!==t.yes.kind||"number"!=typeof t.yes.value||"literal"!==t.no.kind||1!==t.no.value||[...(0,a.GJ)(t.condition).functions].some(e=>["param","header",...a.i1].includes(e))&&l.push({node:t,condition:t.condition,multiplier:t.yes.value,cond:e.slice(t.condition.start,t.condition.end)})}),s.functions.has("fixed")&&function e(t,n){if("conditional"===t.kind&&!r(t.condition)){e(t.yes,n),e(t.no,n);return}if("binary"===t.kind&&"*"===t.operator)for(let[a,i]of[[t.right,t.left],[t.left,t.right]]){if("variable"===a.kind&&"image_count"===a.name)return void e(i,n);let t=n.find(e=>e.node===a);if(t&&t.multiplier>=0&&!r(t.condition))return void e(i,n)}if("call"===t.kind&&"tier"===t.name&&!r(t.args[0])){let e=t.args[1];if("call"===e.kind&&"fixed"===e.name){let t=e.args[0];if("literal"===t.kind&&"number"==typeof t.value&&t.value>=0&&Number.isFinite(1e6*t.value))return}else if(!r(e))return}throw new a.C6({code:"type",detail:"Use tier(name, fixed(amount)) with a finite, non-negative numeric literal; combine pricing branches only with conditions and request multipliers.",position:t.start})}(i,l),t={status:"ready",version:1,source:e,ast:i,...s,requestRules:l}}catch(e){t=(0,a.D2)(e)}let i=s.keys().next().value;return s.size>=128&&void 0!==i&&s.delete(i),s.set(e,t),t}n.d(t,{Z:()=>l})},67558(e,t,n){"use strict";var a=n(73951),i=n(49503);class o{compiled;context;requestRules;matchedTier="";billingUnit="token";fixedPrice;now;timeValues=new Map;headers=new Map;depth=0;constructor(e,t){for(const[n,a]of(this.compiled=e,this.context=t,this.now=t.now??new Date,this.requestRules=e.requestRules.map(e=>({cond:e.cond,multiplier:e.multiplier,matched:!1})),Object.entries(t.request?.headers??{}))){if("string"!=typeof a)throw new i.C6({code:"type",detail:"request header"});const e=n.trim().toLowerCase(),t=a.trim();e&&t&&this.headers.set(e,t)}}evaluate(e){if(++this.depth>256)throw new i.C6({code:"limit",detail:"evaluation depth"});try{let t=this.evaluateNode(e);if("number"==typeof t.value){if(!Number.isFinite(t.value))throw new i.C6({code:"number",detail:"non-finite result",position:e.start});if(t.integer&&!Number.isSafeInteger(t.value))throw new i.C6({code:"unsupported",detail:"integer precision",position:e.start})}return t}finally{this.depth--}}evaluateNode(e){if("literal"===e.kind)return{value:e.value,integer:e.integer};if("variable"===e.kind){if("image_count"===e.name){let t=this.context.imageCount??1;if(!Number.isInteger(t)||t<1||t>128)throw new i.C6({code:"number",detail:"image_count must be between 1 and 128",position:e.start});return{value:t}}let t=this.context.tokens?.[e.name];if(void 0===t)throw new i.C6({code:"missing_context",detail:e.name,position:e.start});if("number"!=typeof t||t<0)throw new i.C6({code:"number",detail:e.name,position:e.start});return{value:t}}if("conditional"===e.kind){let t=this.boolean(e.condition),n=this.compiled.requestRules.findIndex(t=>t.node===e);return t&&n>=0&&(this.requestRules[n].matched=!0),this.evaluate(t?e.yes:e.no)}if("unary"===e.kind){if("!"===e.operator)return{value:!this.boolean(e.operand)};let t=this.numeric(e.operand);return{value:"-"===e.operator?-t.value:t.value,integer:t.integer}}return"binary"===e.kind?this.binary(e):this.call(e)}boolean(e){let t=this.evaluate(e).value;if("boolean"!=typeof t)throw new i.C6({code:"type",detail:"boolean condition",position:e.start});return t}numeric(e){let t=this.evaluate(e);if("number"!=typeof t.value)throw new i.C6({code:"type",detail:"numeric operand",position:e.start});return{value:t.value,integer:t.integer}}string(e){let t=this.evaluate(e).value;if("string"!=typeof t)throw new i.C6({code:"type",detail:"string argument",position:e.start});return t}binary(e){if("&&"===e.operator)return{value:this.boolean(e.left)&&this.boolean(e.right)};if("||"===e.operator)return{value:this.boolean(e.left)||this.boolean(e.right)};let t=this.evaluate(e.left),n=this.evaluate(e.right),a=t.value,o=n.value;if("=="===e.operator||"!="===e.operator){if(null!==a&&null!==o&&("object"==typeof a||"object"==typeof o))throw new i.C6({code:"unsupported",detail:"object comparison",position:e.start});let t=a===o;return{value:"=="===e.operator?t:!t}}if("string"==typeof a&&"string"==typeof o&&"+"===e.operator)return{value:a+o};if("number"==typeof a&&"number"==typeof o||"string"==typeof a&&"string"==typeof o)switch(e.operator){case"<":return{value:a":return{value:a>o};case">=":return{value:a>=o}}if("number"!=typeof a||"number"!=typeof o)throw new i.C6({code:"type",detail:e.operator,position:e.start});let s=!!(t.integer&&n.integer);switch(e.operator){case"+":return{value:a+o,integer:s};case"-":return{value:a-o,integer:s};case"*":return{value:a*o,integer:s};case"/":return{value:a/o};case"%":if(!s)throw new i.C6({code:"type",detail:"integer modulo",position:e.start});return{value:a%o,integer:!0};default:throw new i.C6({code:"unsupported",detail:e.operator,position:e.start})}}call(e){let t=e.args;switch(e.name){case"fixed":{let e=this.numeric(t[0]).value;return this.billingUnit="request",this.fixedPrice=e,{value:1e6*e}}case"tier":{let e=this.string(t[0]),n=this.numeric(t[1]).value;return this.matchedTier=e,{value:n}}case"param":{let n=this.string(t[0]);if(!this.context.request)throw new i.C6({code:"missing_context",detail:"request body",position:e.start});return{value:function(e,t){let n=t.trim();if(!n)return null;let a=[],o="";for(let e=0;e=n.length)throw new i.C6({code:"unsupported",detail:n});o+=n[++e]}else if("."===t)a.push(o),o="";else{if("*?[]()|@!".includes(t))throw new i.C6({code:"unsupported",detail:n});o+=t}}a.push(o);let s=e;for(let e=0;e1&&void 0!==arguments[1]?arguments[1]:0;if(n>128)throw new i.C6({code:"limit",detail:"request value depth"});if(null==t)return"";if(Array.isArray(t))return`[${t.map(t=>e(t,n+1)).join(" ")}]`;if("object"==typeof t)return`map[${Object.entries(t).sort((e,t)=>{let[n]=e,[a]=t;return na)}).map(t=>{let[a,i]=t;return`${a}:${e(i,n+1)}`}).join(" ")}]`;if("number"==typeof t){if(!Number.isFinite(t))throw new i.C6({code:"number",detail:"request number"});if(Object.is(t,-0))return"-0";let[e,n]=t.toExponential().split("e");if(Number(n)>=6||-4>Number(n))return`${e}e${0>Number(n)?"-":"+"}${Math.abs(Number(n)).toString().padStart(2,"0")}`}return String(t)})(e).includes(n)}}case"min":return{value:Math.min(this.numeric(t[0]).value,this.numeric(t[1]).value)};case"max":return{value:Math.max(this.numeric(t[0]).value,this.numeric(t[1]).value)};case"abs":return{value:Math.abs(this.numeric(t[0]).value)};case"floor":return{value:Math.floor(this.numeric(t[0]).value)};case"ceil":return{value:Math.ceil(this.numeric(t[0]).value)}}if(!i.i1.includes(e.name))throw new i.C6({code:"unsupported",detail:e.name});let n=this.string(t[0]).trim(),a=this.timeValues.get(n);return a||(a=function(e,t){let n;if(!Number.isFinite(e.getTime()))throw new i.C6({code:"type",detail:"simulation time"});let a=t.trim()||"UTC";if("Local"===a)throw new i.C6({code:"unsupported",detail:"server Local timezone"});try{if(!/^[A-Z][A-Za-z0-9_+-]*(?:\/[A-Z][A-Za-z0-9_+-]*)*$/.test(a))throw RangeError("timezone");let e=(n=new Intl.DateTimeFormat("en-US",{timeZone:a,calendar:"gregory",numberingSystem:"latn",hourCycle:"h23",hour:"numeric",minute:"numeric",weekday:"short",month:"numeric",day:"numeric"})).resolvedOptions().timeZone;if(e.toLowerCase()===a.toLowerCase()&&e!==a)throw RangeError("timezone")}catch{return{hour:e.getUTCHours(),minute:e.getUTCMinutes(),weekday:e.getUTCDay(),month:e.getUTCMonth()+1,day:e.getUTCDate()}}let o=Object.fromEntries(n.formatToParts(e).map(e=>[e.type,e.value]));return{hour:Number(o.hour),minute:Number(o.minute),weekday:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"].indexOf(o.weekday),month:Number(o.month),day:Number(o.day)}}(this.now,n),this.timeValues.set(n,a)),{value:a[e.name],integer:!0}}}function s(e,t,n){try{let a=new o(e,{now:n}).evaluate(t).value;return"boolean"==typeof a?a:null}catch{return null}}function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n="string"==typeof e?(0,a.Z)(e):e;if("ready"!==n.status)return n;try{for(let[e,n]of Object.entries(t.tokens??{}))if("number"!=typeof n||!Number.isFinite(n)||n<0)throw new i.C6({code:"number",detail:e});let e=new o(n,t),a=e.evaluate(n.ast).value;if("number"!=typeof a||!Number.isFinite(a)||a<0)throw new i.C6({code:"number",detail:"billing result"});return{status:"success",cost:a,billingUnit:e.billingUnit,...n.variables.has("image_count")?{imageCount:t.imageCount??1}:{},...void 0!==e.fixedPrice?{fixedPrice:e.fixedPrice}:{},matchedTier:e.matchedTier,requestRules:e.requestRules}}catch(e){return(0,i.D2)(e)}}n.d(t,{gE:()=>s,j8:()=>r})},49503(e,t,n){"use strict";class a extends Error{diagnostic;constructor(e){super(e.detail),this.diagnostic=e}}function i(e){let t=e instanceof a?e.diagnostic:{code:"syntax",detail:e instanceof Error?e.message:String(e)},n="invalid";return"missing_context"===t.code&&(n="missing_context"),("unsupported"===t.code||"limit"===t.code)&&(n="unsupported"),{status:n,diagnostic:t}}function o(e,t){let n=[{node:e,visited:!1,depth:0}];for(;n.length>0;){let e=n.pop();if(!e)break;if(e.depth>256)throw new a({code:"limit",detail:"expression depth"});if(e.visited){t(e.node);continue}n.push({...e,visited:!0});let i=[];for(let t of("call"===e.node.kind&&i.push(...e.node.args),"unary"===e.node.kind&&i.push(e.node.operand),"binary"===e.node.kind&&i.push(e.node.left,e.node.right),"conditional"===e.node.kind&&i.push(e.node.condition,e.node.yes,e.node.no),i.reverse()))n.push({node:t,visited:!1,depth:e.depth+1})}}function s(e){let t=new Set,n=new Set;return o(e,e=>{"variable"===e.kind&&t.add(e.name),"call"===e.kind&&n.add(e.name)}),{variables:t,functions:n}}n.d(t,{C6:()=>a,D2:()=>i,GJ:()=>s,wM:()=>o},{Gl:["p","c","len","cr","cc","cc1h","img","img_cr","img_o","ai","ao","image_count"],i1:["hour","minute","weekday","month","day"],o:{tier:2,fixed:1,param:1,header:1,has:2,u:1,hour:1,minute:1,weekday:1,month:1,day:1,min:2,max:2,abs:1,ceil:1,floor:1}})},79220(e,t,n){"use strict";var a=n(43459),i=n(10328),o=n(30077),s=n(73951),r=n(50956),l=n(38785),c=n(34146),d=n(3030);function u(e){return"second"===e?"s":"token"===e?"token (unit)":"credit"===e?"credit":"unit"}function h(e){return"second"===e?"second":"token"===e?"1M token":"credit"===e?"credit":"unit"}function p(e){return"second"===e.unit?"s":"count"===e.unit?"unit":"credit"===e.unit?"credit":"token"!==e.unit||e.variable?"request"===e.unit?"request":"image"===e.unit?"image":null:"1M token"}let m=new Set(["inputPrice","outputPrice"]);function g(e){return Object.hasOwn(e,"unitPrices")&&"object"==typeof e.unitPrices}function f(e){return e.billing_plugin_variants?.length?e.billing_plugin_variants.some(e=>"ratio"!==e.billing_mode&&!!e.billing_expr):"tiered_expr"===e.billing_mode&&!!e.billing_expr}function y(e){return Object.keys(e.billing_usage_schema??{}).length>0}function b(e){return"tiered_expr"===e.billing_mode&&y(e)}function v(e){return e.billing_plugin_variants?.length?e.billing_plugin_variants.every(t=>"ratio"===t.billing_mode?v((0,l.yW)(e,t)):!t.billing_expr):1!==e.quota_type&&y(e)&&!f(e)}function k(e,t){return(0,r.NO)(e,t)}function x(e,t){var n,i;let o=t.groupRatioMultiplier??1,s=t.priceRate??1,r=t.usdExchangeRate??1,l=(n=e*o,i=t.showRechargePrice??!1,i?n*s/r:n);return(0,a.AM)(l,{showSymbol:t.showCurrencySymbol??!0,digitsLarge:4,digitsSmall:6,abbreviate:!1})}function w(e){if(e.billing_plugin_variants?.length)return e.billing_plugin_variants.flatMap(t=>w((0,l.yW)(e,t)));if(!f(e))return[];let{billingExpr:t}=(0,o.U8)(e.billing_expr||"");return b(e)?(0,d.j)(t,e.billing_usage_schema):(0,o.oK)(t)}function C(e,t){if(!e)return[];if(!g(e)&&"request"===e.billingUnit&&"number"==typeof e.fixedPrice)return[{key:"fixed",field:"fixedPrice",label:e.imageCount?"Price per image":"Price per request",shortLabel:e.imageCount?"Per image":"Per-call",labelKind:"i18n",value:e.fixedPrice,formatted:x(e.fixedPrice,t),unit:e.imageCount?"image":"request"}];if(g(e)&&t.usageSchema){let n=(0,c.Cp)(t.usageSchema).flatMap(n=>{let[a,i]=n,o=Number(e.unitPrices[a]);return Number.isFinite(o)&&!(o<0)&&i.unit?[{key:a,field:a,label:a,shortLabel:a,labelKind:"schema",value:o,formatted:x(o,t),unit:i.unit,unitLabel:i.unitLabel,description:i.description}]:[]});return e.constant>0&&n.push({key:"constant",field:"constant",label:"Additional charge",shortLabel:"Additional charge",labelKind:"i18n",value:e.constant,formatted:x(e.constant,t),unit:"request"}),n}return o.mq.flatMap(n=>{var o,s;let r,l,c,d;if(!n.field)return[];let u=Number(e[n.field]);return!Number.isFinite(u)||u<0||"cr"===n.key&&0!==u&&u===e.inputPrice?[]:[{key:n.key,field:n.field,label:"cc"===n.key&&"number"==typeof e.cacheCreate1hPrice?"Cache Creation (5m)":n.label,shortLabel:"cc"===n.key&&"number"==typeof e.cacheCreate1hPrice?"Cache Write (5m)":n.shortLabel,labelKind:"i18n",value:u,formatted:(r=t.groupRatioMultiplier??1,l=t.priceRate??1,c=t.usdExchangeRate??1,o=u*r/i.$P[t.tokenUnit],s=t.showRechargePrice??!1,d=s?o*l/c:o,(0,a.AM)(d,{showSymbol:t.showCurrencySymbol??!0,digitsLarge:4,digitsSmall:6,abbreviate:!1})),unit:"token",variable:n}]}).sort((e,t)=>{let n=m.has(e.field);return n!==m.has(t.field)?n?-1:1:0})}n.d(t,{Dw:()=>v,LZ:()=>h,OD:()=>p,XY:()=>C,ZP:()=>w,h8:()=>f,hD:()=>u,iR:()=>y,kK:()=>function e(t,n){let a=t.billing_plugin_variants;if(a?.length){let i=a.flatMap(a=>{let i=e((0,l.yW)(t,a),n);return i?[i]:[]}),o=[];1===t.quota_type&&"number"==typeof t.model_price&&a.some(e=>"ratio"===e.billing_mode)&&o.push({key:"modelPrice",field:"modelPrice",label:"Price per request",shortLabel:"Per-call",labelKind:"i18n",value:t.model_price,formatted:x(t.model_price,n),unit:"request"});let s=new Map;for(let e of[...i.map(e=>e.entries),o])for(let t of e){let e=`${t.field}:${t.unit}`,n=s.get(e),a=n?.entry??{...t,key:e};a.unitLabel&&("object"!=typeof a.unitLabel||0!==Object.keys(a.unitLabel).length)||(a.unitLabel=t.unitLabel),s.set(e,{entry:a,min:Math.min(n?.min??1/0,t.minValue??t.value),max:Math.max(n?.max??-1/0,t.maxValue??t.value)})}let r=[...s.values()].map(e=>{let{entry:t,min:a,max:i}=e;return{...t,value:a,minValue:a,maxValue:i,formatted:x(a,n),formattedRange:a===i?void 0:`${x(a,n)} – ${x(i,n)}`}}),c=new Set(i.flatMap(e=>e.primaryEntries.slice(0,1).map(e=>`${e.field}:${e.unit}`))),d=r.filter(e=>"request"!==e.unit&&"image"!==e.unit||"modelPrice"===e.field);d.sort((e,t)=>Number(c.has(t.key))-Number(c.has(e.key)));let u=i.flatMap(e=>e.tiers);return{tiers:u,tier:i[0]?.tier??null,tierCount:u.length,hasRequestRules:i.some(e=>e.hasRequestRules),isSpecialExpression:0===o.length&&i.length>0&&i.every(e=>e.isSpecialExpression),rawExpression:i[0]?.rawExpression??"",entries:r,primaryEntries:d,secondaryEntries:r.filter(e=>("request"===e.unit||"image"===e.unit)&&"modelPrice"!==e.field),isTaskUsage:!0,providerCount:a.length>=2?a.length:void 0,hasUnconfiguredProviders:a.some(e=>"ratio"===e.billing_mode?v((0,l.yW)(t,e)):!e.billing_expr)}}if(!f(t))return null;let i=w(t),r=b(t),d=(0,o.U8)(t.billing_expr||"").billingExpr,u=r?null:(0,o.WH)(d,n.now??new Date),h=u??i,p=r?h.at(-1)??null:h[0]??null,y=C(p,{...n,usageSchema:t.billing_usage_schema}),k=!1;if(!r){let e=h.find(e=>!g(e)&&"request"!==e.billingUnit),t=h.find(e=>!g(e)&&"request"===e.billingUnit);e&&t&&(k=!0,y=[...C(e,n),...C(t,n)])}if(r){let e=new Map;for(let[n]of(0,c.Cp)(t.billing_usage_schema)){let t=1/0,a=-1/0;for(let e of i){if(!g(e))continue;let i=Number(e.unitPrices[n]);Number.isFinite(i)&&!(i<0)&&(t=Math.min(t,i),a=Math.max(a,i))}Number.isFinite(t)&&Number.isFinite(a)&&e.set(n,{min:t,max:a})}y=y.map(t=>{let a=e.get(t.field);return a?{...t,minValue:a.min,maxValue:a.max,formattedRange:a.min===a.max?void 0:`${x(a.min,n)} – ${x(a.max,n)}`}:t})}let A=t.billing_expr||"";return{tiers:i,tier:p,tierCount:i.length,hasRequestRules:function e(t){if(t.billing_plugin_variants?.length)return t.billing_plugin_variants.some(n=>e((0,l.yW)(t,n)));if(!f(t))return!1;let{requestRuleExpr:n}=(0,o.U8)(t.billing_expr||"");if((0,o.TS)(n||"")?.length)return!0;let a=(0,s.Z)(t.billing_expr||"");return"ready"===a.status&&a.requestRules.length>0}(t),isSpecialExpression:A.trim().length>0&&0===i.length,rawExpression:A,entries:y,primaryEntries:r?y.filter(e=>"request"!==e.unit&&"image"!==e.unit):y.filter(e=>"request"===e.unit||"image"===e.unit||m.has(e.field)),secondaryEntries:r?y.filter(e=>"request"===e.unit||"image"===e.unit):y.filter(e=>"request"!==e.unit&&"image"!==e.unit&&!m.has(e.field)),isTaskUsage:r,isTimePricing:null!==u,...k?{isMixedBilling:k}:{}}},kt:()=>k,vN:()=>x,wu:()=>function e(t,n){if(t.billing_plugin_variants?.length){let a=t.billing_plugin_variants.find(e=>e.billing_expr);return a?e((0,l.yW)(t,a),n):null}if(!b(t))return null;let a=t.billing_usage_schema,i=t.billing_usage_examples?.[0];if(!a||!i)return null;let{billingExpr:s}=(0,o.U8)(t.billing_expr||""),r=(0,c.g8)(s,a);if(!r)return null;let d=(0,c.tu)(r,i.facts,a);return d?{label:i.label,total:d.total,formatted:x(d.total,n)}:null}})},50956(e,t,n){"use strict";var a=n(10328);function i(e,t){let n=Array.isArray(e.enable_groups)?e.enable_groups:[];return Object.keys(t).filter(e=>!a.An.includes(e)).filter(e=>n.includes(e))}function o(e,t){let n=e[t];return"number"==typeof n&&Number.isFinite(n)?n:1}function s(e,t){let n=Array.isArray(e.enable_groups)?e.enable_groups:[],a=e.group_ratio||{};if(t&&"all"!==t&&n.includes(t))return o(a,t);if(0===n.length)return 1;let i=1/0;for(let e of n){let t=a[e];"number"==typeof t&&Number.isFinite(t)&&to,NO:()=>s,Oi:()=>r,ow:()=>l,sK:()=>i})},38785(e,t,n){"use strict";var a=n(73951),i=n(49503);function o(e){let t=e.indexOf("::");if(t<1)return null;let n=e.slice(0,t),a=e.slice(t+2);return/^[a-z0-9][a-z0-9_-]{0,29}$/.test(n)&&a.trim()?[n,a]:null}function s(e,t){if(!e.trim())return!1;let n=(0,a.Z)(e);if("ready"!==n.status)return;let o=!n.functions.has("fixed");return(0,i.wM)(n.ast,e=>{if("call"!==e.kind||"u"!==e.name)return;let n=e.args[0];n?.kind!=="literal"||"string"!=typeof n.value||Object.hasOwn(t,n.value)||(o=!1)}),o}function r(e,t){return{...e,quota_type:"ratio"===t.billing_mode?e.quota_type:0,billing_mode:t.billing_mode??"tiered_expr",billing_expr:t.billing_expr,billing_usage_schema:t.billing_usage_schema,billing_usage_examples:t.billing_usage_examples,billing_plugin_variants:void 0}}function l(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=Object.keys(e);return n.length===Object.keys(t).length&&n.every(n=>Object.hasOwn(t,n)&&e[n]===t[n])}function c(e,t){let n=e?.billing_plugin_variants?.find(e=>e.plugin_key===t);return n?.billing_usage_schema??e?.billing_usage_schema}n.d(t,{QX:()=>s,WJ:()=>c,tp:()=>o,yW:()=>r,zK:()=>l})},34146(e,t,n){"use strict";var a=n(30077),i=n(67558);function o(e){return e?Object.entries(e).filter(e=>"number"===e[1].type&&!!e[1].unit).sort((e,t)=>{let[n]=e,[a]=t;return n.localeCompare(a)}):[]}function s(e){return e?Object.entries(e).filter(e=>!!e[1].enum?.length).sort((e,t)=>{let[n]=e,[a]=t;return n.localeCompare(a)}):[]}function r(e){let t=[{}];for(let[n,a]of s(e)){let e=[];for(let i of t)for(let t of a.enum??[])e.push({...i,[n]:t});t=e}return t}function l(e){return{tiers:[{label:"base",conditions:[],constant:0,unitPrices:Object.fromEntries(o(e).map(e=>{let[t]=e;return[t,0]}))}]}}function c(e){let t=Object.fromEntries(o(e).map(e=>{let[t]=e;return[t,0]}));return{rows:r(e).map(e=>({combination:e,constant:0,unitPrices:{...t}}))}}function d(e,t){let n=o(t),a=e.rows[0];return 0!==n.length&&a?e.rows.every(e=>e.constant===a.constant&&n.every(t=>{let[n]=t;return e.unitPrices[n]===a.unitPrices[n]}))?[{label:"base",conditions:[],constant:a.constant,unitPrices:Object.fromEntries(n.map(e=>{let[t]=e;return[t,a.unitPrices[t]??0]}))}]:e.rows.map((t,a)=>{let i;return{label:(i=Object.entries(t.combination).sort((e,t)=>{let[n]=e,[a]=t;return n.localeCompare(a)}).map(e=>{let[,t]=e;return t})).length>0?i.join("·"):"base",conditions:a===e.rows.length-1?[]:Object.entries(t.combination).sort((e,t)=>{let[n]=e,[a]=t;return n.localeCompare(a)}).map(e=>{let[t,n]=e;return{field:t,value:n}}),constant:t.constant,unitPrices:Object.fromEntries(n.map(e=>{let[n]=e;return[n,t.unitPrices[n]??0]}))}}):[]}function u(e,t){if(!e)return null;let n=(0,a.Fs)(e,t);if(0===n.length)return null;let i=o(t),s=r(t),l=n.at(-1);if(!l||0!==l.conditions.length)return null;for(let e of n)if(new Set(e.conditions.map(e=>e.field)).size!==e.conditions.length)return null;return{rows:s.map(e=>{let t=n.find(t=>t.conditions.every(t=>e[t.field]===t.value))??l;return{combination:e,constant:t.constant,unitPrices:Object.fromEntries(i.map(e=>{let[n]=e;return[n,t.unitPrices[n]??0]}))}})}}function h(e,t,n){let a=e.tiers.at(-1);if(!a)return null;let o=a;for(let n of e.tiers.slice(0,-1))if(n.conditions.every(e=>t[e.field]===e.value)){o=n;break}let s=Number(o.constant);if(!Number.isFinite(s)||s<0)return null;let r=[];for(let[e,a]of(s>0&&r.push({kind:"constant",amount:s}),Object.entries(o.unitPrices))){let i=Number(a);if(!Number.isFinite(i)||i<0)return null;if(0===i)continue;let o=Number(t[e]);if(!Number.isFinite(o)||o<0)return null;let s=n?.[e]?.unit==="token"?o*i/1e6:o*i;if(!Number.isFinite(s))return null;r.push({kind:"usage",field:e,amount:s,quantity:o,unitPrice:i})}let l=[String(s)],c={...t};for(let e of r){if("usage"!==e.kind||!e.field)continue;c[e.field]=e.quantity??0;let t=n?.[e.field]?.unit==="token"?" / 1000000":"";l.push(`u(${JSON.stringify(e.field)}) * ${e.unitPrice}${t}`)}let d=(0,i.j8)(`tier(${JSON.stringify(o.label)}, ${l.join(" + ")})`,{usage:c});return"success"!==d.status?null:{tier:o,total:d.cost,parts:r}}function p(e,t,n){if(!e||!t||!n?.length)return[];let{billingExpr:i}=(0,a.U8)(e),o=y(i,t);if(!o)return[];let s=[];for(let e of n){let n=h(o,e.facts,t);n&&s.push({label:e.label,total:n.total})}return s}function m(e,t){if(!e?.tiers?.length)return l(t);let n=new Set(o(t).map(e=>{let[t]=e;return t})),a=new Map(s(t).map(e=>{let[t,n]=e;return[t,n.enum??[]]}));return{tiers:e.tiers.map((e,t)=>{let i=Object.fromEntries([...n].map(t=>{let n=Number(e.unitPrices?.[t]);return[t,Number.isFinite(n)&&n>=0?n:0]})),o=Number(e.constant);return{label:e.label||(0===t?"base":`tier_${t+1}`),conditions:(e.conditions??[]).filter(e=>a.get(e.field)?.includes(e.value)),constant:Number.isFinite(o)&&o>=0?o:0,unitPrices:i}})}}function g(e,t){return`tier(${JSON.stringify(e.label)}, ${function(e,t){let n=[];for(let[a,i]of(e.constant>0&&n.push(String(e.constant)),t)){let t=e.unitPrices[a]??0;if("token"===i.unit){n.push(`u(${JSON.stringify(a)}) * ${t} / 1000000`);continue}n.push(`u(${JSON.stringify(a)}) * ${t}`)}return n.join(" + ")}(e,t)})`}function f(e,t){let n=o(t);if(0===n.length)return"";let a=m(e,t);if(1===a.tiers.length)return g(a.tiers[0],n);let i=[];for(let e=0;e`u(${JSON.stringify(e.field)}) == ${JSON.stringify(e.value)}`).join(" && ");if(!s)return"";i.push(`${s} ? ${o}`)}return i.join(" : ")}function y(e,t){if(!e)return null;let n=(0,a.Fs)(e,t);return 0===n.length?null:m({tiers:n.map(e=>({label:e.label,conditions:e.conditions,constant:e.constant,unitPrices:e.unitPrices}))},t)}n.d(t,{Cp:()=>o,FM:()=>p,Vl:()=>u,XR:()=>d,ZF:()=>r,aJ:()=>s,fp:()=>l,g8:()=>y,gq:()=>f,tu:()=>h,uE:()=>c})},3030(e,t,n){"use strict";n.d(t,{j:()=>s});var a=n(30077),i=n(73951),o=n(49503);function s(e,t){let n=function(e,t){let n=(0,a.Fs)(e||"",t,!0);if(0===n.length&&e&&t){let{billingExpr:n}=(0,a.U8)(e);return function(e,t){let n=(0,i.Z)(e);if("ready"!==n.status)return null;let a=new Set,s=!0;if((0,o.wM)(n.ast,e=>{if("call"!==e.kind||"u"!==e.name)return;let n=e.args[0];if("literal"!==n.kind||"string"!=typeof n.value||!Object.hasOwn(t,n.value)){s=!1;return}a.add(n.value)}),!s)return null;let r=[{}];for(let e of a){let n=t[e];if("number"===n.type)continue;let a="boolean"===n.type?[!1,!0]:n.enum;if(!a?.length||r.length*a.length>128)return null;r=r.flatMap(t=>a.map(n=>({...t,[e]:n})))}let l={source:e,schema:t,facts:{},remaining:2e4},c=[];for(let e of r){l.facts=e;let i=function e(t,n){if(--n.remaining<0)return null;if("literal"===t.kind&&"number"==typeof t.value&&t.value>=0)return[{constant:t.value,prices:{},times:new Map}];if("call"===t.kind&&"u"===t.name&&"literal"===t.args[0].kind&&"string"==typeof t.args[0].value){let e=t.args[0].value;return n.schema[e]?.type==="number"&&n.schema[e].unit?[{constant:0,prices:{[e]:1},times:new Map}]:null}if("call"===t.kind&&"tier"===t.name&&"literal"===t.args[0].kind&&"string"==typeof t.args[0].value){let a=e(t.args[1],n);if(!a||a.some(e=>void 0!==e.label))return null;let i=t.args[0].value;return a.map(e=>({...e,label:i}))}if("conditional"===t.kind){let a=function e(t,n){if(--n.remaining<0)return null;if("literal"===t.kind&&"boolean"==typeof t.value)return t.value;if("unary"===t.kind&&"!"===t.operator){let a=e(t.operand,n);return null===a?null:"boolean"==typeof a?!a:`!(${a})`}if("binary"!==t.kind)return null;if("&&"===t.operator||"||"===t.operator){let a=e(t.left,n),i=e(t.right,n);if(null===a||null===i)return null;let o="||"===t.operator;return a===o||i===o?o:"boolean"==typeof a?i:"boolean"==typeof i?a:`(${a}) ${t.operator} (${i})`}if(["==","!="].includes(t.operator))for(let[e,a]of[[t.left,t.right],[t.right,t.left]]){if("call"!==e.kind||"u"!==e.name||"literal"!==e.args[0].kind||"string"!=typeof e.args[0].value||"literal"!==a.kind)continue;let i=e.args[0].value;if(!Object.hasOwn(n.facts,i))return null;let o=n.schema[i];if("boolean"===o.type){if("boolean"!=typeof a.value)return null}else if("string"!=typeof a.value)return null;else if(!o.enum?.includes(a.value))return"!="===t.operator;let s=n.facts[i]===a.value;return"=="===t.operator?s:!s}return["==","!=","<","<=",">",">="].includes(t.operator)&&[t.left,t.right].some(e=>"call"===e.kind)&&[t.left,t.right].every(e=>"literal"===e.kind&&"number"==typeof e.value||"call"===e.kind&&o.i1.includes(e.name)&&"literal"===e.args[0].kind&&"string"==typeof e.args[0].value&&"Local"!==e.args[0].value.trim())?n.source.slice(t.start,t.end):null}(t.condition,n);if(null===a)return null;if("boolean"==typeof a)return e(a?t.yes:t.no,n);let i=[];for(let o of[!0,!1]){let s=e(o?t.yes:t.no,n);if(!s)return null;for(let e of s)e.times.has(a)&&e.times.get(a)!==o||i.push({...e,times:new Map([[a,o],...e.times])})}return i.length<=128?i:null}if("binary"!==t.kind||!["+","*","/"].includes(t.operator))return null;let a=e(t.left,n),i=e(t.right,n);if(!a||!i||a.length*i.length>128)return null;let s=[];for(let e of a)for(let n of i){let a;if(void 0!==e.label&&void 0!==n.label)return null;if([...e.times].some(e=>{let[t,a]=e;return n.times.has(t)&&n.times.get(t)!==a}))continue;let i=Object.keys(e.prices).length>0,o=Object.keys(n.prices).length>0,r={};if("+"===t.operator)for(let t of(a=e.constant+n.constant,new Set([...Object.keys(e.prices),...Object.keys(n.prices)])))r[t]=(e.prices[t]??0)+(n.prices[t]??0);else{if(i&&o||"/"===t.operator&&(o||n.constant<=0))return null;let s=i?e:n,l=i?n.constant:e.constant;for(let[i,o]of("/"===t.operator&&(l=1/n.constant),a="/"===t.operator?e.constant/n.constant:e.constant*n.constant,Object.entries(s.prices)))r[i]=o*l}if(![a,...Object.values(r)].every(e=>Number.isFinite(e)&&e>=0))return null;s.push({label:e.label??n.label,constant:a,prices:r,times:new Map([...e.times,...n.times])})}return s}(n.ast,l);if(!i||c.length+i.length>128)return null;for(let n of i){if(void 0===n.label)return null;let i={};for(let e of a){let a=t[e];"number"===a.type&&a.unit&&(i[e]=(n.prices[e]??0)*("token"===a.unit?1e6:1))}if(!Object.keys(i).length||!Object.values(i).every(Number.isFinite))return null;let o=[...n.times].map(e=>{let[t,n]=e;return n?`(${t})`:`!(${t})`}).join(" && ");c.push({label:n.label,conditions:Object.entries(e).map(e=>{let[t,n]=e;return{field:t,value:String(n)}}),...o?{conditionText:o}:{},constant:n.constant,unitPrices:i})}}return c}(n,t)??[]}let s=n.at(-1);if(!t||n.length<2||!s)return n;let r=n.slice(0,-1),l=[...new Set(r.flatMap(e=>e.conditions.map(e=>e.field)))].sort(),c=[[]];for(let e of l){let a=t[e],i=a?.type==="boolean"?["false","true"]:a?.enum;if(!i?.length||c.length*i.length>256)return n;c=c.flatMap(t=>i.map(n=>[...t,{field:e,value:n}]))}let d=c.filter(e=>!r.some(t=>t.conditions.every(t=>e.some(e=>e.field===t.field&&e.value===t.value))));return 1!==d.length?n:[...r,{...s,conditions:d[0]}]}(e,t),s=new Set(n.flatMap(e=>Object.keys(e.unitPrices).filter(t=>e.unitPrices[t]>0)));return 0===s.size?n:n.map(e=>({...e,unitPrices:Object.fromEntries(Object.entries(e.unitPrices).filter(e=>{let[t]=e;return s.has(t)}))}))}n(34146)},12363(e,t,n){"use strict";var a=n(68155),i=n(30077),o=n(92924),s=n(73951),r=n(49503),l=n(3030);function c(e,t,n){let i="object"==typeof e&&e?{...e,en:e.en?.trim()||t}:e;return(0,a.z)(i,n)||t}function d(e,t,n){return c(e?.enumLabels?.[t],t,n)}function u(e,t,n){return e?.unit!=="count"?n:(0,a.z)(e.unitLabel,t)||n}function h(e,t,n,a){return e.map(e=>{let{field:i,value:o}=e,s=t?.[i],r=c(s?.description,i,n);if(s?.type==="boolean")return`${r}: ${"true"===o?a("Yes"):a("No")}`;let l=d(s,o,n);return l!==o?l:`${r}: ${l}`}).join(" · ")}function p(e){if(!e.billing_usage_schema||"tiered_expr"!==e.billing_mode||!e.billing_expr)return!1;let t=(0,i.U8)(e.billing_expr);if(t.requestRuleExpr?.trim())return!1;let n=(0,l.j)(t.billingExpr,e.billing_usage_schema);return 1===n.length&&!n[0].conditionText}function m(e,t,n,a){return[h(e.conditions,t,n,a),e.conditionText?(0,o.m)(e.conditionText,a,n)??e.conditionText:""].filter(Boolean).join(" · ")}function g(e,t){let n=(0,s.Z)(e),a=!1;return"ready"===n.status&&(0,r.wM)(n.ast,e=>{if("call"!==e.kind||"u"!==e.name)return;let n=e.args[0];t&&"literal"===n.kind&&"string"==typeof n.value&&Object.hasOwn(t,n.value)||(a=!0)}),a?"Task usage metadata is unavailable. Pricing details cannot be displayed.":"This expression cannot be expanded into a price table. View the original expression below."}n.d(t,{GT:()=>g,Gt:()=>p,P3:()=>d,_d:()=>m,dy:()=>u,s$:()=>h,t:()=>c})},65269(e,t,n){"use strict";var a=n(30077),i=n(73951),o=n(67558);let s="timed",r="generic";function l(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{label:e.label??"",input_unit_cost:Number(e.input_unit_cost)||0,output_unit_cost:Number(e.output_unit_cost)||0,cache_mode:e?.cache_mode===s?s:e?.cache_mode===r?r:Number(e?.cache_create_1h_unit_cost)>0?s:r,conditions:Array.isArray(e.conditions)?e.conditions:[],...e,cache_read_unit_cost:Number(e.cache_read_unit_cost)||0,cache_create_unit_cost:Number(e.cache_create_unit_cost)||0,cache_create_1h_unit_cost:Number(e.cache_create_1h_unit_cost)||0,image_unit_cost:Number(e.image_unit_cost)||0,image_output_unit_cost:Number(e.image_output_unit_cost)||0,audio_input_unit_cost:Number(e.audio_input_unit_cost)||0,audio_output_unit_cost:Number(e.audio_output_unit_cost)||0}}function c(){return{tiers:[l({conditions:[],input_unit_cost:0,output_unit_cost:0,label:"base",cache_mode:r})]}}function d(e){return e&&Array.isArray(e.tiers)&&0!==e.tiers.length?{...e,tiers:e.tiers.map(e=>l(e))}:c()}function u(e){return e&&0!==e.length?e.filter(e=>e.var&&e.op&&null!=e.value&&""!==e.value).map(e=>`${e.var} ${e.op} ${e.value}`).join(" && "):""}function h(e){if("request"===e.billing_unit)return`fixed(${e.fixed_price??""})`;let t=[],n=Number(e.input_unit_cost)||0,i=Number(e.output_unit_cost)||0;for(let o of(t.push(`p * ${n}`),t.push(`c * ${i}`),a.E2)){let n=Number(e[o.field])||0;0!==n&&t.push(`${o.exprVar} * ${n}`)}return t.join(" + ")}function p(e){if(!e||!e.tiers||0===e.tiers.length)return"p * 0 + c * 0";let t=e.tiers;if(1===t.length){let e=t[0],n=e.label||"default",a=`tier("${n}", ${h(e)})`,i=u(e.conditions);return i?`${i} ? ${a} : p * 0 + c * 0`:a}let n=[];for(let e=0;ee.exprVar).map(e=>`(?:\\s*\\+\\s*${e}\\s*\\*\\s*([\\d.eE+-]+))?`).join(""),s=`p\\s*\\*\\s*([\\d.eE+-]+)\\s*\\+\\s*c\\s*\\*\\s*([\\d.eE+-]+)${o}`,r=RegExp(`^tier\\("([^"]*)",\\s*${s}\\)$`),c=n.match(r);if(c){let e={conditions:[],input_unit_cost:Number(c[2]),output_unit_cost:Number(c[3]),label:c[1]};return a.E2.forEach((t,n)=>{let a=c[4+n];null!=a&&(e[t.field]=Number(a))}),d({tiers:[l(e)]})}let u=RegExp(`(?:((?:(?:p|c|len)\\s*(?:<|<=|>|>=)\\s*[\\d.eE+]+)(?:\\s*&&\\s*(?:p|c|len)\\s*(?:<|<=|>|>=)\\s*[\\d.eE+]+)*)\\s*\\?\\s*)?tier\\("([^"]*)",\\s*${s}\\)`,"g"),h=[];for(;null!==(t=u.exec(n));){let e=t[1]||"",n=[];if(e)for(let t of e.split(/\s*&&\s*/)){let e=t.trim().match(/^(p|c|len)\s*(<|<=|>|>=)\s*([\d.eE+]+)$/);e&&n.push({var:e[1],op:e[2],value:Number(e[3])})}let i={conditions:n,input_unit_cost:Number(t[3]),output_unit_cost:Number(t[4]),label:t[2]},o=t;a.E2.forEach((e,t)=>{let n=o[5+t];null!=n&&(i[e.field]=Number(n))}),h.push(l(i))}if(0===h.length)return null;let m=d({tiers:h});if(p(m).replaceAll(/\s+/g,"")!==n.replaceAll(/\s+/g,""))return null;return m}catch{return null}}let g=[{var:"cr",stateKey:"cacheReadTokens"},{var:"cc",stateKey:"cacheCreateTokens"},{var:"cc1h",stateKey:"cacheCreate1hTokens"},{var:"img",stateKey:"imageTokens"},{var:"img_cr",stateKey:"imageCacheTokens"},{var:"img_o",stateKey:"imageOutputTokens"},{var:"ai",stateKey:"audioInputTokens"},{var:"ao",stateKey:"audioOutputTokens"}];function f(e,t,n,a,i){if(!e.trim())return{cost:0,matchedTier:"",error:null};let s=(0,o.j8)(e,{...i,tokens:{...y(t,n,a),...i?.tokens}});return"success"!==s.status?{cost:0,matchedTier:"",error:s.diagnostic.detail}:{cost:s.cost,matchedTier:s.matchedTier,error:null,..."request"===s.billingUnit?{billingUnit:s.billingUnit}:{}}}function y(e,t,n){return{p:e,c:t,len:e+n.cacheReadTokens+n.imageCacheTokens+n.imageTokens+n.audioInputTokens+n.cacheCreateTokens+n.cacheCreate1hTokens,...Object.fromEntries(g.map(e=>[e.var,n[e.stateKey]]))}}function b(e){if(!e)return!1;let t=(0,i.Z)(e);return"ready"===t.status&&g.some(e=>t.variables.has(e.var))}n.d(t,{C6:()=>f,IU:()=>b,MP:()=>c,T1:()=>y,jU:()=>m,xp:()=>p},{RR:r})},29130(e,t,n){"use strict";let a={ENABLED:1,DISABLED:2,USED:3};Object.values(a).map(e=>String(e));let i={[a.ENABLED]:{labelKey:"Unused",variant:"success",value:a.ENABLED},[a.DISABLED]:{labelKey:"Disabled",variant:"neutral",value:a.DISABLED},[a.USED]:{labelKey:"Used",variant:"neutral",value:a.USED}},o="expired",s=[String(a.ENABLED),String(a.DISABLED),String(a.USED),o];function r(e){return[...Object.values(i).map(t=>({label:e(t.labelKey),value:String(t.value)})),{label:e("Expired"),value:o}]}let l={NAME_MIN_LENGTH:1,NAME_MAX_LENGTH:20,COUNT_MIN:1,COUNT_MAX:100},c={UNEXPECTED:"An unexpected error occurred",LOAD_FAILED:"Failed to load redemption codes",SEARCH_FAILED:"Failed to search redemption codes",CREATE_FAILED:"Failed to create redemption code",UPDATE_FAILED:"Failed to update redemption code",DELETE_FAILED:"Failed to delete redemption code",DELETE_INVALID_FAILED:"Failed to delete invalid redemption codes",STATUS_UPDATE_FAILED:"Failed to update redemption code status",NAME_LENGTH_INVALID:"Name must be between {{min}} and {{max}} characters",COUNT_INVALID:"Count must be between {{min}} and {{max}}",EXPIRED_TIME_INVALID:"Expired time cannot be earlier than current time"};function d(e){return{NAME_LENGTH_INVALID:e(c.NAME_LENGTH_INVALID,{min:l.NAME_MIN_LENGTH,max:l.NAME_MAX_LENGTH}),COUNT_INVALID:e(c.COUNT_INVALID,{min:l.COUNT_MIN,max:l.COUNT_MAX}),EXPIRED_TIME_INVALID:e(c.EXPIRED_TIME_INVALID)}}n.d(t,{Wv:()=>d,gg:()=>r},{Dq:a,PL:{REDEMPTION_CREATED:"Redemption code(s) created successfully",REDEMPTION_UPDATED:"Redemption code updated successfully",REDEMPTION_DELETED:"Redemption code deleted successfully",REDEMPTION_ENABLED:"Redemption code enabled successfully",REDEMPTION_DISABLED:"Redemption code disabled successfully",COPY_SUCCESS:"Copied to clipboard"},UU:c,Z0:o,cS:s,oG:l,pz:i})},5742(e,t,n){"use strict";var a=n(22990);async function i(){return(await a.FH.get("/api/setup",{params:{t:Date.now()}})).data}async function o(e){return(await a.FH.post("/api/setup",e)).data}function s(e,t){let{usageMode:n,...a}=e,i={SelfUseModeEnabled:"self"===n,DemoSiteEnabled:"demo"===n};return t?i:{...a,...i}}n.d(t,{OF:()=>o,YA:()=>i,s_:()=>s})},92778(e,t,n){"use strict";var a=n(22990);async function i(){return(await a.FH.get("/api/option/")).data}async function o(e){return(await a.FH.put("/api/option/",e)).data}async function s(e){return(await a.FH.put("/api/option/passkey/domains",e,{validateStatus:e=>e>=200&&e<300||409===e})).data}async function r(){return(await a.FH.post("/api/option/payment_compliance",{confirmed:!0})).data}async function l(e){return(await a.FH.post("/api/system-task/log-cleanup",null,{params:{target_timestamp:e}})).data}async function c(){return(await a.FH.get("/api/system-task/current",{params:{type:"log_cleanup"}})).data}async function d(e){return(await a.FH.get(`/api/system-task/${e}`)).data}async function u(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(await a.FH.get("/api/system-task/list",{params:{limit:e,...t}})).data}async function h(){return(await a.FH.get("/api/ratio_sync/channels")).data}async function p(e){return(await a.FH.post("/api/ratio_sync/fetch",e)).data}n.d(t,{IM:()=>u,R:()=>s,Ss:()=>r,Up:()=>l,b:()=>d,ck:()=>h,hP:()=>c,kw:()=>p,qE:()=>o,y:()=>i})},52409(e,t,n){"use strict";n.d(t,{t0:()=>eN,aj:()=>eR,tQ:()=>eM,rT:()=>eD,xH:()=>ej});var a=n(72361),i=n(38159),o=n(48367),s=n(68413),r=n(86832),l=n(6702),c=n(49256),d=n(36710),u=n(87212),h=n(70954),p=n(43152),m=n(31002),g=n(44724),f=n(12727),y=n(47182);let b=c.Ik({PasswordLoginEnabled:c.zM(),PasswordRegisterEnabled:c.zM(),EmailVerificationEnabled:c.zM(),RegisterEnabled:c.zM(),EmailDomainRestrictionEnabled:c.zM(),EmailAliasRestrictionEnabled:c.zM(),EmailDomainWhitelist:c.Yj()});function v(e){let{defaultValues:t}=e,{t:n}=(0,l.Bd)(),i=(0,y.M)(),c=(0,s.useMemo)(()=>({...t,EmailDomainWhitelist:t.EmailDomainWhitelist.split(",").map(e=>e.trim()).filter(Boolean).join("\n")}),[t]),v=(0,r.mN)({resolver:(0,o.u)(b),defaultValues:c});(0,f.j)(v,c);let k=async e=>{let n=[];for(let a of(Object.entries(e).forEach(e=>{let[a,i]=e;if("EmailDomainWhitelist"===a){if("string"!=typeof i)return;let e=i.split("\n").map(e=>e.trim()).filter(Boolean).join(",");e!==t.EmailDomainWhitelist&&n.push({key:a,value:e})}else i!==t[a]&&n.push({key:a,value:i})}),n))await i.mutateAsync(a)};return(0,a.jsx)(g.X,{title:n("Basic Authentication"),children:(0,a.jsx)(d.lV,{...v,children:(0,a.jsxs)(p.yt,{onSubmit:v.handleSubmit(k),children:[(0,a.jsx)(m.S2,{onSave:v.handleSubmit(k),isSaving:i.isPending}),(0,a.jsx)(d.zB,{control:v.control,name:"PasswordLoginEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Password Login")}),(0,a.jsx)(d.Rr,{children:n("Allow users to log in with password")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"RegisterEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Registration Enabled")}),(0,a.jsx)(d.Rr,{children:n("Allow new users to register")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"PasswordRegisterEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Password Registration")}),(0,a.jsx)(d.Rr,{children:n("Allow registration with password")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"EmailVerificationEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Email Verification")}),(0,a.jsx)(d.Rr,{children:n("Require email verification for new accounts")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"EmailDomainRestrictionEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Email Domain Restriction")}),(0,a.jsx)(d.Rr,{children:n("Only allow specific email domains")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"EmailAliasRestrictionEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Email Alias Restriction")}),(0,a.jsx)(d.Rr,{children:n("Block email aliases (e.g., user+alias@domain.com)")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:v.control,name:"EmailDomainWhitelist",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:n("Email Domain Whitelist")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(h.T,{placeholder:n("example.com company.com"),rows:4,...t})}),(0,a.jsx)(d.Rr,{children:n("One domain per line (only used when domain restriction is enabled)")}),(0,a.jsx)(d.C5,{})]})}})]})})})}var k=n(1738);let x=c.Ik({TurnstileCheckEnabled:c.zM(),TurnstileSiteKey:c.Yj().optional(),TurnstileSecretKey:c.Yj().optional()});function w(e){let{defaultValues:t}=e,{t:n}=(0,l.Bd)(),i=(0,y.M)(),c=(0,r.mN)({resolver:(0,o.u)(x),defaultValues:t});(0,s.useEffect)(()=>{c.reset(t)},[t,c]);let h=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await i.mutateAsync({key:n,value:a??""})};return(0,a.jsx)(g.X,{title:n("Bot Protection"),children:(0,a.jsx)(d.lV,{...c,children:(0,a.jsxs)(p.yt,{onSubmit:c.handleSubmit(h),autoComplete:"off",children:[(0,a.jsx)(m.S2,{onSave:c.handleSubmit(h),isSaving:i.isPending}),(0,a.jsx)(d.zB,{control:c.control,name:"TurnstileCheckEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:n("Enable Turnstile")}),(0,a.jsx)(d.Rr,{children:n("Protect login and registration with Cloudflare Turnstile")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(d.zB,{control:c.control,name:"TurnstileSiteKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:n("Site Key")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:n("Your Turnstile site key"),autoComplete:"off",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:c.control,name:"TurnstileSecretKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:n("Secret Key")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{type:"password",placeholder:n("Your Turnstile secret key"),autoComplete:"new-password",...t})}),(0,a.jsx)(d.C5,{})]})}})]})})})}var C=n(18557),A=n(43284);function S(e,t){return e.trim().replace(/\/+$/,"")||t}function P(e,t,n){let a=S(e,n);return`${a}/oauth/${t.replace(/^\/+/,"")}`}var T=n(60641),I=n(91460),R=n(72868),N=n(88288),j=n(38939),M=n(96962),D=n(55667),O=n(19376),L=n(20598),q=n(26411),U=n(22990);async function E(){return(await U.FH.get("/api/custom-oauth-provider/")).data}async function F(e){return(await U.FH.post("/api/custom-oauth-provider/",e)).data}async function _(e,t){return(await U.FH.put(`/api/custom-oauth-provider/${e}`,t)).data}async function B(e){return(await U.FH.delete(`/api/custom-oauth-provider/${e}`)).data}async function G(e){return(await U.FH.post("/api/custom-oauth-provider/discovery",{well_known_url:e})).data}function V(){let e=(0,M.jE)();return{onSuccess:()=>{e.invalidateQueries({queryKey:["custom-oauth-providers"]}),e.invalidateQueries({queryKey:["status"]})}}}let z=c.Ik({name:c.Yj().min(1,"Name is required"),slug:c.Yj().min(1,"Slug is required").regex(/^[a-z0-9-]+$/,"Slug must only contain lowercase letters, numbers, and hyphens"),icon:c.Yj().optional().default(""),enabled:c.zM().default(!0),client_id:c.Yj().min(1,"Client ID is required"),client_secret:c.Yj().optional().default(""),authorization_endpoint:c.Yj().min(1,"Authorization endpoint is required"),token_endpoint:c.Yj().min(1,"Token endpoint is required"),user_info_endpoint:c.Yj().min(1,"User info endpoint is required"),scopes:c.Yj().optional().default(""),user_id_field:c.Yj().min(1,"User ID field is required"),username_field:c.Yj().optional().default(""),display_name_field:c.Yj().optional().default(""),email_field:c.Yj().optional().default(""),well_known:c.Yj().optional().default(""),auth_style:c.ai().int().min(0).max(2).default(0),access_policy:c.Yj().optional().default(""),access_denied_message:c.Yj().optional().default("")}),K=[{key:"github-enterprise",name:"GitHub Enterprise",icon:"github",authorization_endpoint:"/login/oauth/authorize",token_endpoint:"/login/oauth/access_token",user_info_endpoint:"/api/v3/user",scopes:"user:email",user_id_field:"id",username_field:"login",display_name_field:"name",email_field:"email",needsBaseUrl:!0},{key:"gitlab",name:"GitLab",icon:"gitlab",authorization_endpoint:"/oauth/authorize",token_endpoint:"/oauth/token",user_info_endpoint:"/api/v4/user",scopes:"openid profile email",user_id_field:"id",username_field:"username",display_name_field:"name",email_field:"email",needsBaseUrl:!0},{key:"gitea",name:"Gitea",icon:"gitea",authorization_endpoint:"/login/oauth/authorize",token_endpoint:"/login/oauth/access_token",user_info_endpoint:"/api/v1/user",scopes:"openid profile email",user_id_field:"id",username_field:"login",display_name_field:"full_name",email_field:"email",needsBaseUrl:!0},{key:"nextcloud",name:"Nextcloud",icon:"nextcloud",authorization_endpoint:"/apps/oauth2/authorize",token_endpoint:"/apps/oauth2/api/v1/token",user_info_endpoint:"/ocs/v2.php/cloud/user?format=json",scopes:"openid profile email",user_id_field:"ocs.data.id",username_field:"ocs.data.id",display_name_field:"ocs.data.displayname",email_field:"ocs.data.email",needsBaseUrl:!0},{key:"keycloak",name:"Keycloak",icon:"keycloak",authorization_endpoint:"/realms/{realm}/protocol/openid-connect/auth",token_endpoint:"/realms/{realm}/protocol/openid-connect/token",user_info_endpoint:"/realms/{realm}/protocol/openid-connect/userinfo",scopes:"openid profile email",user_id_field:"sub",username_field:"preferred_username",display_name_field:"name",email_field:"email",needsBaseUrl:!0},{key:"authentik",name:"Authentik",icon:"authentik",authorization_endpoint:"/application/o/authorize/",token_endpoint:"/application/o/token/",user_info_endpoint:"/application/o/userinfo/",scopes:"openid profile email",user_id_field:"sub",username_field:"preferred_username",display_name_field:"name",email_field:"email",needsBaseUrl:!0},{key:"ory",name:"ORY Hydra",icon:"openid",authorization_endpoint:"/oauth2/auth",token_endpoint:"/oauth2/token",user_info_endpoint:"/userinfo",scopes:"openid profile email",user_id_field:"sub",username_field:"preferred_username",display_name_field:"name",email_field:"email",needsBaseUrl:!0}],W=[{value:0,labelKey:"Auto Detect"},{value:1,labelKey:"Params (in body)"},{value:2,labelKey:"Header (Basic Auth)"}],H={levelAndActive:`{ "logic": "and", "conditions": [ { "field": "trust_level", "op": "gte", "value": 2 }, { "field": "active", "op": "eq", "value": true } ] }`,orgOrRole:`{ "logic": "or", "conditions": [ { "field": "org", "op": "eq", "value": "core" }, { "field": "roles", "op": "contains", "value": "admin" } ] }`};var J=n(38766);function Q(e){let{t}=(0,l.Bd)(),n=(0,D.n)({mutationFn:e=>G(e),onSuccess:e=>{e.success?L.oR.success(O.Ay.t("OIDC endpoints discovered successfully")):(0,q.Q)(e)},onError:e=>{(0,q.Q)(e,O.Ay.t("Failed to discover OIDC endpoints"))}}),i=async()=>{let a=e.form.getValues("well_known");if(!a)return void L.oR.error(t("Please enter a Well-Known URL first"));if(!a.startsWith("http://")&&!a.startsWith("https://"))return void L.oR.error(t("Well-Known URL must start with http:// or https://"));let i=await n.mutateAsync(a);if(i.success&&i.data?.discovery){let t=i.data.discovery;if(t.authorization_endpoint&&e.form.setValue("authorization_endpoint",t.authorization_endpoint,{shouldDirty:!0}),t.token_endpoint&&e.form.setValue("token_endpoint",t.token_endpoint,{shouldDirty:!0}),t.userinfo_endpoint&&e.form.setValue("user_info_endpoint",t.userinfo_endpoint,{shouldDirty:!0}),t.scopes_supported&&t.scopes_supported.length>0&&!e.form.getValues("scopes")){let n=t.scopes_supported.filter(e=>["openid","profile","email"].includes(e)).join(" ");n&&e.form.setValue("scopes",n,{shouldDirty:!0})}}};return(0,a.jsxs)(R.$,{type:"button",variant:"outline",size:"sm",onClick:i,disabled:n.isPending,children:[(0,a.jsx)(J.A,{className:"mr-1.5 h-3.5 w-3.5"}),n.isPending?t("Discovering..."):t("Auto-discover")]})}var $=n(49641),Y=n(11728);function X(e){let{t}=(0,l.Bd)(),[n,i]=(0,s.useState)(""),[o,r]=(0,s.useState)(""),c=(t,n)=>{let a=n.replace(/\/+$/,"");e.form.setValue("authorization_endpoint",a+t.authorization_endpoint,{shouldDirty:!0}),e.form.setValue("token_endpoint",a+t.token_endpoint,{shouldDirty:!0}),e.form.setValue("user_info_endpoint",a+t.user_info_endpoint,{shouldDirty:!0})};return(0,a.jsxs)(p.WY,{className:"space-y-3 border-dashed",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:t("Quick Setup from Preset")}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-3 sm:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)(Y.J,{children:t("Preset Template")}),(0,a.jsx)($.G3,{options:K.map(e=>({value:e.key,label:e.name})),value:n,onValueChange:t=>{let n;null!==t&&(i(t),(n=K.find(e=>e.key===t))&&(e.form.setValue("name",n.name,{shouldDirty:!0}),e.form.setValue("slug",t.toLowerCase().replaceAll(/\s+/g,"-"),{shouldDirty:!0}),e.form.setValue("icon",n.icon,{shouldDirty:!0}),e.form.setValue("scopes",n.scopes,{shouldDirty:!0}),e.form.setValue("user_id_field",n.user_id_field,{shouldDirty:!0}),e.form.setValue("username_field",n.username_field,{shouldDirty:!0}),e.form.setValue("display_name_field",n.display_name_field,{shouldDirty:!0}),e.form.setValue("email_field",n.email_field,{shouldDirty:!0}),o&&c(n,o)))},"aria-label":t("Select preset"),placeholder:t("Select preset"),className:"w-full"})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)(Y.J,{children:t("Base URL")}),(0,a.jsx)(k.p,{placeholder:t("https://your-server.example.com"),value:o,onChange:e=>(e=>{if(r(e),!n)return;let t=K.find(e=>e.key===n);t&&c(t,e)})(e.target.value)})]})]})]})}let Z="custom-oauth-provider-form";function ee(e){let t,n,{t:i}=(0,l.Bd)(),c=!!e.provider,h=(t=V(),(0,D.n)({mutationFn:e=>F(e),onSuccess:e=>{e.success?(L.oR.success(O.Ay.t("Provider created successfully")),t.onSuccess()):(0,q.Q)(e)},onError:e=>{(0,q.Q)(e,O.Ay.t("Failed to create provider"))}})),m=(n=V(),(0,D.n)({mutationFn:e=>{let{id:t,data:n}=e;return _(t,n)},onSuccess:e=>{e.success?(L.oR.success(O.Ay.t("Provider updated successfully")),n.onSuccess()):(0,q.Q)(e)},onError:e=>{(0,q.Q)(e,O.Ay.t("Failed to update provider"))}})),g=(0,r.mN)({resolver:(0,o.u)(z),defaultValues:{name:"",slug:"",icon:"",enabled:!0,client_id:"",client_secret:"",authorization_endpoint:"",token_endpoint:"",user_info_endpoint:"",scopes:"",user_id_field:"",username_field:"",display_name_field:"",email_field:"",well_known:"",auth_style:0,access_policy:"",access_denied_message:""}}),f=(0,r.FH)({control:g.control,name:"slug"}),y=f?.trim()||"{slug}",b=P(e.serverAddress,y,i("Site URL"));(0,s.useEffect)(()=>{e.open&&e.provider?g.reset({name:e.provider.name,slug:e.provider.slug,icon:e.provider.icon||"",enabled:e.provider.enabled,client_id:e.provider.client_id,client_secret:e.provider.client_secret||"",authorization_endpoint:e.provider.authorization_endpoint,token_endpoint:e.provider.token_endpoint,user_info_endpoint:e.provider.user_info_endpoint,scopes:e.provider.scopes||"",user_id_field:e.provider.user_id_field,username_field:e.provider.username_field||"",display_name_field:e.provider.display_name_field||"",email_field:e.provider.email_field||"",well_known:e.provider.well_known||"",auth_style:e.provider.auth_style??0,access_policy:e.provider.access_policy||"",access_denied_message:e.provider.access_denied_message||""}):e.open&&!e.provider&&g.reset({name:"",slug:"",icon:"",enabled:!0,client_id:"",client_secret:"",authorization_endpoint:"",token_endpoint:"",user_info_endpoint:"",scopes:"",user_id_field:"",username_field:"",display_name_field:"",email_field:"",well_known:"",auth_style:0,access_policy:"",access_denied_message:""})},[e.open,e.provider,g]);let v=async t=>{c&&e.provider?(await m.mutateAsync({id:e.provider.id,data:t})).success&&e.onOpenChange(!1):(await h.mutateAsync(t)).success&&e.onOpenChange(!1)},x=h.isPending||m.isPending,w=i("Create Provider");return x?w=i("Saving..."):c&&(w=i("Update Provider")),(0,a.jsx)(T.l,{open:e.open,onOpenChange:e.onOpenChange,title:c?i("Edit OAuth Provider"):i("Add OAuth Provider"),description:c?i("Update the configuration for this custom OAuth provider."):i("Configure a new custom OAuth provider for user authentication."),contentClassName:"max-h-[min(85dvh,var(--dialog-available-height))] overflow-y-auto sm:max-w-2xl",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(R.$,{type:"button",variant:"outline",onClick:()=>e.onOpenChange(!1),disabled:x,children:i("Cancel")}),(0,a.jsx)(R.$,{type:"submit",form:Z,disabled:x,children:w})]}),children:(0,a.jsx)(d.lV,{...g,children:(0,a.jsxs)(p.yt,{id:Z,onSubmit:g.handleSubmit(v),children:[!c&&(0,a.jsx)(X,{form:g}),(0,a.jsxs)(A.Fc,{children:[(0,a.jsx)(A.XL,{children:i("OAuth callback URL")}),(0,a.jsxs)(A.TN,{className:"space-y-3 text-sm",children:[(0,a.jsx)("p",{children:i("This callback URL updates from the slug field and is the value to register with your provider.")}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-1.5 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground shrink-0",children:i("Authorization callback URL")}),(0,a.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)("code",{className:"bg-muted text-foreground min-w-0 rounded px-1.5 py-0.5 text-xs break-all",children:b}),(0,a.jsx)(C.i,{value:b,size:"icon",className:"size-7",tooltip:i("Copy callback URL"),"aria-label":i("Copy callback URL")})]})]})]})]}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Basic Info")}),(0,a.jsx)(d.zB,{control:g.control,name:"enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:i("Enabled")}),(0,a.jsx)(d.Rr,{children:i("Allow users to sign in with this provider")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(d.zB,{control:g.control,name:"name",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Provider Name")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:i("e.g. My GitLab"),...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:g.control,name:"slug",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Slug")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:i("e.g. my-gitlab"),...t})}),(0,a.jsx)(d.Rr,{children:i("Used in URLs and API routes")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(d.zB,{control:g.control,name:"icon",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Icon")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:i("Icon identifier (e.g. github, gitlab)"),...t})}),(0,a.jsx)(d.Rr,{children:i("Optional icon identifier for the login button")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(j.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Credentials")}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(d.zB,{control:g.control,name:"client_id",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:i("OAuth Client ID"),autoComplete:"off",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:g.control,name:"client_secret",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{type:"password",placeholder:i("OAuth Client Secret"),autoComplete:"new-password",...t})}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(d.zB,{control:g.control,name:"auth_style",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Auth Style")}),(0,a.jsxs)(N.l6,{items:W.map(e=>({value:String(e.value),label:i(e.labelKey)})),value:String(t.value),onValueChange:e=>t.onChange(Number(e)),children:[(0,a.jsx)(d.MJ,{children:(0,a.jsx)(N.bq,{className:"w-full",children:(0,a.jsx)(N.yv,{})})}),(0,a.jsx)(N.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(N.s3,{children:W.map(e=>(0,a.jsx)(N.eb,{value:String(e.value),children:i(e.labelKey)},e.value))})})]}),(0,a.jsx)(d.Rr,{children:i("How client credentials are sent to the token endpoint")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(j.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Endpoints")}),(0,a.jsx)(Q,{form:g})]}),(0,a.jsx)(d.zB,{control:g.control,name:"well_known",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Well-Known URL")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:i("https://provider.com/.well-known/openid-configuration"),...t})}),(0,a.jsx)(d.Rr,{children:i('OIDC discovery URL. Click "Auto-discover" to fetch endpoints automatically.')}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:g.control,name:"authorization_endpoint",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Authorization Endpoint")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:"https://provider.com/oauth/authorize",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:g.control,name:"token_endpoint",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Token Endpoint")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:"https://provider.com/oauth/token",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:g.control,name:"user_info_endpoint",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("User Info Endpoint")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:"https://provider.com/api/user",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:g.control,name:"scopes",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Scopes")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:i("e.g. openid profile email"),...t})}),(0,a.jsx)(d.Rr,{children:i("Space-separated OAuth scopes")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(j.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Field Mapping")}),(0,a.jsx)(d.Rr,{children:i("Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).")}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 sm:grid-cols-2",children:[(0,a.jsx)(d.zB,{control:g.control,name:"user_id_field",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("User ID Field")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:"id",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:g.control,name:"username_field",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Username Field")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:"login",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:g.control,name:"display_name_field",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Display Name Field")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:"name",...t})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:g.control,name:"email_field",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Email Field")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:"email",...t})}),(0,a.jsx)(d.C5,{})]})}})]})]}),(0,a.jsx)(j.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Advanced")}),(0,a.jsx)(d.zB,{control:g.control,name:"access_policy",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Access Policy (JSON)")}),(0,a.jsx)(d.Rr,{children:i("Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(I.B,{value:t.value||"",onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,placeholder:i("Optional JSON policy to restrict access based on user info fields"),heightClassName:"h-40 min-h-40 max-h-40"})}),(0,a.jsx)(d.Rr,{children:i("Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.")}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)(R.$,{type:"button",variant:"outline",size:"xs",onClick:()=>g.setValue("access_policy",H.levelAndActive,{shouldDirty:!0,shouldValidate:!0}),children:i("Fill template: level and active")}),(0,a.jsx)(R.$,{type:"button",variant:"outline",size:"xs",onClick:()=>g.setValue("access_policy",H.orgOrRole,{shouldDirty:!0,shouldValidate:!0}),children:i("Fill template: organization or role")})]}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:g.control,name:"access_denied_message",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:i("Access Denied Message")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:i("e.g. Requires level {{required}}; your current level is {{current}}"),...t})}),(0,a.jsx)(d.Rr,{children:i("Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.")}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)(R.$,{type:"button",variant:"outline",size:"xs",onClick:()=>g.setValue("access_denied_message","Requires level {{required}}; your current level is {{current}} (field: {{field}}).",{shouldDirty:!0}),children:i("Fill template: level message")}),(0,a.jsx)(R.$,{type:"button",variant:"outline",size:"xs",onClick:()=>g.setValue("access_denied_message","Access is limited to approved organizations or roles. Organization: {{current.org}}; roles: {{current.roles}}.",{shouldDirty:!0}),children:i("Fill template: organization message")})]}),(0,a.jsx)(d.C5,{})]})}})]})]})})})}var et=n(66002),en=n(73280),ea=n(98505),ei=n(32348),eo=n(21505),es=n(42817);function er(e){let t,{t:n}=(0,l.Bd)(),i=(t=V(),(0,D.n)({mutationFn:e=>B(e),onSuccess:e=>{e.success?(L.oR.success(O.Ay.t("Provider deleted successfully")),t.onSuccess()):(0,q.Q)(e)},onError:e=>{(0,q.Q)(e,O.Ay.t("Failed to delete provider"))}})),[o,r]=(0,s.useState)(null),c=async()=>{o&&(await i.mutateAsync(o.id),r(null))};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:n("Manage custom OAuth providers for user authentication")}),(0,a.jsxs)(R.$,{size:"sm",onClick:e.onCreate,children:[(0,a.jsx)(et.A,{className:"mr-1.5 h-4 w-4"}),n("Add Provider")]})]}),(0,a.jsx)(ei.h,{data:e.providers,getRowKey:e=>e.id,emptyClassName:"text-sm",emptyContent:n("No custom OAuth providers configured yet."),columns:[{id:"icon",header:n("Icon"),cell:e=>e.icon?(0,a.jsx)("span",{className:"text-lg",children:e.icon}):(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:"--"})},{id:"name",header:n("Name"),cellClassName:"font-medium",cell:e=>e.name},{id:"slug",header:n("Slug"),cell:e=>(0,a.jsx)(ea.a,{children:(0,a.jsx)(es.Wh,{label:e.slug,variant:"neutral",copyable:!1})})},{id:"status",header:n("Status"),cell:e=>(0,a.jsx)(ea.a,{children:(0,a.jsx)(es.Wh,{label:e.enabled?n("Enabled"):n("Disabled"),variant:e.enabled?"success":"neutral",copyable:!1})})},{id:"client-id",header:n("Client ID"),cellClassName:"text-muted-foreground max-w-[120px] truncate font-mono",cell:e=>e.client_id},{id:"actions",header:n("Actions"),className:"text-right",cellClassName:"text-right",cell:t=>(0,a.jsx)(eo._,{editLabel:n("Edit"),deleteLabel:n("Delete"),menuLabel:n("Open menu"),onEdit:()=>e.onEdit(t),onDelete:()=>r(t)})}]}),(0,a.jsx)(en.T,{open:!!o,onOpenChange:e=>!e&&r(null),title:n("Delete Provider"),desc:n('Are you sure you want to delete "{{name}}"? Users who authenticated with this provider will no longer be able to log in.',{name:o?.name||""}),confirmText:n("Delete"),destructive:!0,handleConfirm:c,isLoading:i.isPending})]})}var el=n(53540),ec=n(46006);function ed(e){let{t}=(0,l.Bd)(),{data:n=[],isLoading:i}=(0,el.I)({queryKey:["custom-oauth-providers"],queryFn:async()=>(0,ec.oi)(await E()).data??[]}),[o,r]=(0,s.useState)(!1),[c,d]=(0,s.useState)(null),u=P(e.serverAddress,"{slug}",t("Site URL"));return i?(0,a.jsx)(g.X,{title:t("Custom OAuth Providers"),children:(0,a.jsx)("div",{className:"text-muted-foreground py-8 text-center text-sm",children:t("Loading...")})}):(0,a.jsxs)(g.X,{title:t("Custom OAuth Providers"),children:[(0,a.jsxs)(A.Fc,{children:[(0,a.jsx)(A.XL,{children:t("Callback URL format")}),(0,a.jsxs)(A.TN,{className:"space-y-3 text-sm",children:[(0,a.jsx)("p",{children:t("Use this callback URL pattern when registering a custom OAuth provider.")}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-1.5 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground shrink-0",children:t("OAuth callback URL")}),(0,a.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)("code",{className:"bg-muted text-foreground min-w-0 rounded px-1.5 py-0.5 text-xs break-all",children:u}),(0,a.jsx)(C.i,{value:u,size:"icon",className:"size-7",tooltip:t("Copy callback URL"),"aria-label":t("Copy callback URL")})]})]})]})]}),(0,a.jsx)(er,{providers:n,onEdit:e=>{d(e),r(!0)},onCreate:()=>{d(null),r(!0)}}),(0,a.jsx)(ee,{open:o,onOpenChange:e=>{r(e),e||d(null)},provider:c,serverAddress:e.serverAddress})]})}var eu=n(25500),eh=n(66552),ep=n(56920),em=n(27784),eg=n(41064);let ef=c.Ik({GitHubOAuthEnabled:c.zM(),GitHubClientId:c.Yj(),GitHubClientSecret:c.Yj(),discord:c.Ik({enabled:c.zM(),client_id:c.Yj(),client_secret:c.Yj()}),oidc:c.Ik({enabled:c.zM(),display_name:c.Yj(),client_id:c.Yj(),client_secret:c.Yj(),well_known:c.Yj(),authorization_endpoint:c.Yj(),token_endpoint:c.Yj(),user_info_endpoint:c.Yj()}),TelegramOAuthEnabled:c.zM(),telegram:c.Ik({client_id:c.Yj(),client_secret:c.Yj()}),LinuxDOOAuthEnabled:c.zM(),LinuxDOClientId:c.Yj(),LinuxDOClientSecret:c.Yj(),LinuxDOMinimumTrustLevel:c.Yj(),WeChatAuthEnabled:c.zM(),WeChatServerAddress:c.Yj(),WeChatServerToken:c.Yj(),WeChatAccountQRCodeImageURL:c.Yj()}),ey="grid min-w-0 gap-x-5 gap-y-6 lg:grid-cols-2 [&>[data-slot=form-item]]:min-w-0 lg:[&>[data-slot=form-item]:has([data-slot=switch])]:col-span-2";function eb(e){return(0,a.jsxs)(A.Fc,{className:"lg:col-span-2",children:[(0,a.jsx)(A.XL,{children:e.title}),(0,a.jsxs)(A.TN,{className:"space-y-3 text-sm",children:[(0,a.jsx)("div",{children:e.description}),(0,a.jsx)("div",{className:"space-y-2",children:e.rows.map(e=>(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-1.5 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("span",{className:"text-muted-foreground shrink-0",children:e.label}),(0,a.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)("code",{className:"bg-muted text-foreground min-w-0 rounded px-1.5 py-0.5 text-xs break-all",children:e.value}),(0,a.jsx)(C.i,{value:e.value,size:"icon",className:"size-7",tooltip:e.copyLabel,"aria-label":e.copyLabel})]})]},`${String(e.label)}-${e.value}`))}),e.children]})]})}let ev=e=>({GitHubOAuthEnabled:e.GitHubOAuthEnabled,GitHubClientId:e.GitHubClientId??"",GitHubClientSecret:e.GitHubClientSecret??"",discord:{enabled:e["discord.enabled"],client_id:e["discord.client_id"]??"",client_secret:e["discord.client_secret"]??""},oidc:{enabled:e["oidc.enabled"],display_name:e["oidc.display_name"]??"",client_id:e["oidc.client_id"]??"",client_secret:e["oidc.client_secret"]??"",well_known:e["oidc.well_known"]??"",authorization_endpoint:e["oidc.authorization_endpoint"]??"",token_endpoint:e["oidc.token_endpoint"]??"",user_info_endpoint:e["oidc.user_info_endpoint"]??""},TelegramOAuthEnabled:e.TelegramOAuthEnabled,telegram:{client_id:e["telegram.client_id"]??"",client_secret:e["telegram.client_secret"]??""},LinuxDOOAuthEnabled:e.LinuxDOOAuthEnabled,LinuxDOClientId:e.LinuxDOClientId??"",LinuxDOClientSecret:e.LinuxDOClientSecret??"",LinuxDOMinimumTrustLevel:e.LinuxDOMinimumTrustLevel??"",WeChatAuthEnabled:e.WeChatAuthEnabled,WeChatServerAddress:e.WeChatServerAddress??"",WeChatServerToken:e.WeChatServerToken??"",WeChatAccountQRCodeImageURL:e.WeChatAccountQRCodeImageURL??""});function ek(e){let{t}=(0,l.Bd)(),n=(0,y.M)(),[i,c]=(0,s.useState)("github"),h=S(e.serverAddress,t("Site URL")),f=P(e.serverAddress,"github",t("Site URL")),b=P(e.serverAddress,"discord",t("Site URL")),v=P(e.serverAddress,"oidc",t("Site URL")),x=P(e.serverAddress,"telegram",t("Site URL")),w=P(e.serverAddress,"linuxdo",t("Site URL")),C=(0,s.useMemo)(()=>ev(e.defaultValues),[e.defaultValues]),A=(0,r.mN)({resolver:(0,o.u)(ef),defaultValues:C}),T=(0,s.useRef)(e.defaultValues),I=(0,s.useRef)(JSON.stringify(e.defaultValues));(0,s.useEffect)(()=>{let t=JSON.stringify(e.defaultValues);t!==I.current&&(T.current=e.defaultValues,I.current=t,A.reset(ev(e.defaultValues)))},[e.defaultValues,A]);let R=async e=>{let a,i=e,o=e.oidc.well_known.trim(),s=o!==(T.current["oidc.well_known"]??"").trim(),r=e.oidc.enabled&&!T.current["oidc.enabled"];if(o&&(s||r)){if(!o.startsWith("http://")&&!o.startsWith("https://")){c("oidc"),A.setError("oidc.well_known",{type:"validate",message:t("Well-Known URL must start with http:// or https://")});return}try{let n=await eu.A.create().get(o),a=n.data.authorization_endpoint||"",s=n.data.token_endpoint||"",r=n.data.userinfo_endpoint||"";i={...e,oidc:{...e.oidc,well_known:o,authorization_endpoint:a,token_endpoint:s,user_info_endpoint:r}},A.setValue("oidc.authorization_endpoint",a),A.setValue("oidc.token_endpoint",s),A.setValue("oidc.user_info_endpoint",r),L.oR.success(t("OIDC configuration fetched successfully"))}catch(e){(0,q.Q)(e,t("Failed to fetch OIDC configuration. Please check the URL and network status"));return}}let l={GitHubOAuthEnabled:(a=i).GitHubOAuthEnabled,GitHubClientId:a.GitHubClientId,GitHubClientSecret:a.GitHubClientSecret,"discord.enabled":a.discord.enabled,"discord.client_id":a.discord.client_id,"discord.client_secret":a.discord.client_secret,"oidc.enabled":a.oidc.enabled,"oidc.display_name":a.oidc.display_name,"oidc.client_id":a.oidc.client_id,"oidc.client_secret":a.oidc.client_secret,"oidc.well_known":a.oidc.well_known,"oidc.authorization_endpoint":a.oidc.authorization_endpoint,"oidc.token_endpoint":a.oidc.token_endpoint,"oidc.user_info_endpoint":a.oidc.user_info_endpoint,"telegram.client_id":a.telegram.client_id,"telegram.client_secret":a.telegram.client_secret,TelegramOAuthEnabled:a.TelegramOAuthEnabled,LinuxDOOAuthEnabled:a.LinuxDOOAuthEnabled,LinuxDOClientId:a.LinuxDOClientId,LinuxDOClientSecret:a.LinuxDOClientSecret,LinuxDOMinimumTrustLevel:a.LinuxDOMinimumTrustLevel,WeChatAuthEnabled:a.WeChatAuthEnabled,WeChatServerAddress:a.WeChatServerAddress,WeChatServerToken:a.WeChatServerToken,WeChatAccountQRCodeImageURL:a.WeChatAccountQRCodeImageURL},d=Object.keys(l).filter(e=>l[e]!==T.current[e]);if(0===d.length)return void L.oR.info(t("No changes to save"));for(let e of d)await n.mutateAsync({key:e,value:l[e]});T.current=l,I.current=JSON.stringify(l),A.reset(ev(l))};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eg.s,{when:A.formState.isDirty}),(0,a.jsx)(g.X,{title:t("OAuth Integrations"),children:(0,a.jsx)(d.lV,{...A,children:(0,a.jsxs)(p.yt,{onSubmit:A.handleSubmit(R),children:[(0,a.jsx)(m.S2,{onSave:A.handleSubmit(R),onReset:()=>{A.reset(ev(T.current)),L.oR.success(t("Form reset to saved values"))},isSaving:A.formState.isSubmitting,isResetDisabled:!A.formState.isDirty}),(0,a.jsx)(em._,{isDirty:A.formState.isDirty}),(0,a.jsxs)(ep.tU,{value:i,onValueChange:c,children:[(0,a.jsxs)(ep.j7,{className:"grid w-full grid-cols-6",children:[(0,a.jsx)(ep.Xi,{value:"github",children:t("GitHub")}),(0,a.jsx)(ep.Xi,{value:"discord",children:t("Discord")}),(0,a.jsx)(ep.Xi,{value:"oidc",children:t("OIDC")}),(0,a.jsx)(ep.Xi,{value:"telegram",children:t("Telegram")}),(0,a.jsx)(ep.Xi,{value:"linuxdo",children:t("LinuxDO")}),(0,a.jsx)(ep.Xi,{value:"wechat",children:t("WeChat")})]}),(0,a.jsxs)(ep.av,{value:"github",className:ey,children:[(0,a.jsx)(eb,{title:t("Setup guide"),description:t("Set these values in the provider application before enabling login."),rows:[{label:t("Homepage URL"),value:h,copyLabel:t("Copy homepage URL")},{label:t("Authorization callback URL"),value:f,copyLabel:t("Copy callback URL")}]}),(0,a.jsx)(d.zB,{control:A.control,name:"GitHubOAuthEnabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable GitHub OAuth")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with GitHub")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"GitHubClientId",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("Your GitHub OAuth Client ID"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"GitHubClientSecret",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{type:"password",placeholder:t("Your GitHub OAuth Client Secret"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsxs)(ep.av,{value:"discord",className:ey,children:[(0,a.jsx)(eb,{title:t("Setup guide"),description:t("Set these values in the provider application before enabling login."),rows:[{label:t("Homepage URL"),value:h,copyLabel:t("Copy homepage URL")},{label:t("Authorization callback URL"),value:b,copyLabel:t("Copy callback URL")}]}),(0,a.jsx)(d.zB,{control:A.control,name:"discord.enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable Discord OAuth")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with Discord")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"discord.client_id",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("Your Discord OAuth Client ID"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"discord.client_secret",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{type:"password",placeholder:t("Your Discord OAuth Client Secret"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsxs)(ep.av,{value:"oidc",className:ey,children:[(0,a.jsx)(eb,{title:t("Setup guide"),description:(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)("p",{children:t("Set these values in the provider application before enabling login.")}),(0,a.jsx)("p",{children:t("OIDC discovery can fill the endpoint fields automatically when the provider supports it.")})]}),rows:[{label:t("Homepage URL"),value:h,copyLabel:t("Copy homepage URL")},{label:t("Redirect URL"),value:v,copyLabel:t("Copy redirect URL")}]}),(0,a.jsx)(d.zB,{control:A.control,name:"oidc.enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable OIDC")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with OpenID Connect")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"oidc.display_name",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("OIDC Display Name")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("e.g. Company SSO"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.Rr,{children:t('Defaults to "OIDC" if left blank')}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"oidc.client_id",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("OIDC Client ID"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"oidc.client_secret",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{type:"password",placeholder:t("OIDC Client Secret"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"oidc.well_known",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Well-Known URL")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("https://provider.com/.well-known/openid-configuration"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.Rr,{children:t("Auto-discovers endpoints from the provider")}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"oidc.authorization_endpoint",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Authorization Endpoint (Optional)")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("Override auto-discovered endpoint"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"oidc.token_endpoint",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Token Endpoint (Optional)")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("Override auto-discovered endpoint"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"oidc.user_info_endpoint",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("User Info Endpoint (Optional)")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("Override auto-discovered endpoint"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsxs)(ep.av,{value:"telegram",className:ey,children:[(0,a.jsx)(eb,{title:t("Setup guide"),description:t("In BotFather, open Login Widget, register this callback URL, and copy the Client ID and Client Secret. Existing Telegram bindings will continue to work after configuration."),rows:[{label:t("Authorization callback URL"),value:x,copyLabel:t("Copy callback URL")}]}),(0,a.jsx)(d.zB,{control:A.control,name:"TelegramOAuthEnabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable Telegram OAuth")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with Telegram")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"telegram.client_secret",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{type:"password",placeholder:t("Telegram OAuth Client Secret from BotFather"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"telegram.client_id",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("Telegram OAuth Client ID from BotFather"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsxs)(ep.av,{value:"linuxdo",className:ey,children:[(0,a.jsx)(eb,{title:t("Setup guide"),description:t("Set these values in the provider application before enabling login."),rows:[{label:t("Authorization callback URL"),value:w,copyLabel:t("Copy callback URL")}],children:(0,a.jsxs)("a",{href:"https://connect.linux.do/",target:"_blank",rel:"noreferrer",className:"text-primary inline-flex w-fit items-center gap-1 underline underline-offset-3 hover:no-underline",children:[t("Manage your LinuxDO OAuth app"),(0,a.jsx)(eh.A,{className:"size-3","aria-hidden":"true"})]})}),(0,a.jsx)(d.zB,{control:A.control,name:"LinuxDOOAuthEnabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable LinuxDO OAuth")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with LinuxDO")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"LinuxDOClientId",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client ID")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("LinuxDO Client ID"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"LinuxDOClientSecret",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Client Secret")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{type:"password",placeholder:t("LinuxDO Client Secret"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"LinuxDOMinimumTrustLevel",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Minimum Trust Level")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:"0",autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.Rr,{children:t("Minimum LinuxDO trust level required")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsxs)(ep.av,{value:"wechat",className:ey,children:[(0,a.jsx)(d.zB,{control:A.control,name:"WeChatAuthEnabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable WeChat Auth")}),(0,a.jsx)(d.Rr,{children:t("Allow users to sign in with WeChat")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"WeChatServerAddress",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Server Address")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("https://wechat-server.example.com"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"WeChatServerToken",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Server Token")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{type:"password",placeholder:t("Server Token"),autoComplete:"new-password",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:A.control,name:"WeChatAccountQRCodeImageURL",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("QR Code Image URL")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("https://example.com/qr-code.png"),autoComplete:"off",value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.C5,{})]})}})]})]})]})})})]})}var ex=n(8927),ew=n(56275);let eC=["passkey.rp_id","passkey.legacy_rp_ids","passkey.origins"],eA=c.Ik({passkey:c.Ik({enabled:c.zM(),rp_display_name:c.Yj(),rp_id:c.Yj(),legacy_rp_ids:c.Yj(),origins:c.Yj(),allow_insecure_origin:c.zM(),user_verification:c.k5(["required","preferred","discouraged"]),attachment_preference:c.k5(["none","platform","cross-platform"])})}),eS=e=>{let t;return{passkey:{enabled:e["passkey.enabled"],rp_display_name:e["passkey.rp_display_name"]??"",rp_id:e["passkey.rp_id"]??"",legacy_rp_ids:(e["passkey.legacy_rp_ids"]??"").split(",").map(e=>e.trim()).filter(Boolean).join("\n"),origins:(e["passkey.origins"]??"").split(",").map(e=>e.trim()).filter(Boolean).join("\n"),allow_insecure_origin:e["passkey.allow_insecure_origin"],user_verification:e["passkey.user_verification"],attachment_preference:""===(t=e["passkey.attachment_preference"])?"none":t}}};function eP(e){let{t}=(0,l.Bd)(),n=(0,s.useId)(),i=(0,y.M)(),c=(0,y._)(),f=i.isPending||c.isPending,[b,v]=(0,s.useState)(!1),[x,w]=(0,s.useState)(null),C=(0,s.useMemo)(()=>eS(e.defaultValues),[e.defaultValues]),S=(0,r.mN)({resolver:(0,o.u)(eA),defaultValues:C}),{data:P,isError:I,isFetching:j}=(0,el.I)({...ex.d6,refetchOnMount:"always"}),M=(0,r.FH)({control:S.control,name:"passkey.rp_id"}),D=(0,r.FH)({control:S.control,name:"passkey.origins"}),O=window.location.hostname,q=window.location.origin,U=("https:"===window.location.protocol||"http:"===window.location.protocol&&"localhost"===O)&&""!==O&&!O.includes(":")&&!/^\d+\.\d+\.\d+\.\d+$/.test(O),E="string"==typeof P?.passkey_rp_id?P.passkey_rp_id.trim():"",F=e.defaultValues["passkey.rp_id"].trim()||E,_=F||O,B=(M.trim()||E).toLowerCase(),G=""!==B&&O!==B&&!O.endsWith(`.${B}`),V=""===B||G,z=""!==D.trim()&&!D.split(/[,\n]/).some(e=>e.trim()===q),K=(0,s.useRef)(e.defaultValues),W=(0,s.useRef)(JSON.stringify(e.defaultValues));(0,s.useEffect)(()=>{let t=JSON.stringify(e.defaultValues);t!==W.current&&(K.current=e.defaultValues,W.current=t,S.reset(eS(e.defaultValues)))},[e.defaultValues,S]);let H=async(e,n)=>{let a=Object.keys(e).filter(t=>(e[t]??"")!==(K.current[t]??""));if(0===a.length)return void L.oR.info(t("No changes to save"));let o={...e};try{if(eC.some(e=>a.includes(e))){let t=await c.mutateAsync({rp_id:e["passkey.rp_id"],legacy_rp_ids:e["passkey.legacy_rp_ids"]??"",origins:e["passkey.origins"],preview:!1,removal_confirmation:n?.removal_confirmation});if(!t.success)return void w({values:e,preview:t.data,notice:(0,ec.VB)(t)});o["passkey.rp_id"]=t.data.rp_id,o["passkey.legacy_rp_ids"]=t.data.legacy_rp_ids,o["passkey.origins"]=t.data.origins,K.current={...K.current,"passkey.rp_id":o["passkey.rp_id"],"passkey.legacy_rp_ids":o["passkey.legacy_rp_ids"],"passkey.origins":o["passkey.origins"]}}for(let t of a)eC.some(e=>e===t)||await i.mutateAsync({key:t,value:e[t]??""})}catch{return}K.current=o,W.current=JSON.stringify(o),S.reset(eS(o)),w(null)},J=async e=>{let t,n={"passkey.enabled":e.passkey.enabled,"passkey.rp_display_name":e.passkey.rp_display_name,"passkey.rp_id":e.passkey.rp_id,"passkey.legacy_rp_ids":[...new Set(e.passkey.legacy_rp_ids.split(/[,\n]/).map(e=>e.trim()).filter(Boolean))].join(","),"passkey.origins":e.passkey.origins.split("\n").map(e=>e.trim()).filter(Boolean).join(","),"passkey.allow_insecure_origin":e.passkey.allow_insecure_origin,"passkey.user_verification":e.passkey.user_verification,"passkey.attachment_preference":"none"===(t=e.passkey.attachment_preference)?"":t};if(!eC.some(e=>(n[e]??"")!==(K.current[e]??"")))return void await H(n);try{let e=(await c.mutateAsync({rp_id:n["passkey.rp_id"],legacy_rp_ids:n["passkey.legacy_rp_ids"]??"",origins:n["passkey.origins"],preview:!0})).data,t=""!==K.current["passkey.rp_id"].trim()&&""===n["passkey.rp_id"].trim();if(e.previous_rp_id!==e.effective_rp_id||t||e.removed_rp_ids.length>0||e.confirmation_required)return void w({values:n,preview:e});await H(n,e)}catch{}},Q=x?.preview.removed_rp_ids??[];return(0,a.jsxs)(g.X,{title:t("Passkey Authentication"),children:[(0,a.jsx)(d.lV,{...S,children:(0,a.jsxs)(p.yt,{onSubmit:S.handleSubmit(J),children:[(0,a.jsx)(m.S2,{onSave:S.handleSubmit(J),isSaving:f}),(0,a.jsx)(d.zB,{control:S.control,name:"passkey.enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Enable Passkey")}),(0,a.jsx)(d.Rr,{children:t("Allow users to register and sign in with Passkey (WebAuthn)")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:S.control,name:"passkey.rp_display_name",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{"data-settings-form-span":"full",className:"max-w-xl",children:[(0,a.jsx)(d.lR,{children:t("Passkey display name")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{placeholder:t("e.g. New API Console"),value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.Rr,{children:t("Human-readable name shown to users during Passkey prompts.")}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsxs)(p.WY,{role:"group","aria-labelledby":n,className:"grid items-start gap-4 space-y-0 p-4 lg:grid-cols-2",children:[(0,a.jsx)("h4",{id:n,className:"text-sm font-medium lg:col-span-2",children:t("Passkey domains")}),(0,a.jsx)(A.Fc,{role:"status",className:(0,ew.cn)("lg:col-span-2",V?"border-warning/40 bg-warning/10 text-amber-800 dark:text-amber-200":"border-info/30 bg-info/10 text-info"),children:(0,a.jsxs)(A.TN,{className:"flex flex-wrap items-center gap-x-2 gap-y-1 text-inherit",children:[(0,a.jsxs)("span",{children:[""===B&&t("Set the website where users will use their Passkeys."),G&&t("This domain does not match the current website. Passkeys may not work here."),!V&&t("New Passkeys use the primary domain. Compatible domains keep existing Passkeys working.")]}),(0,a.jsxs)(T.l,{open:b,onOpenChange:v,title:t("How to set up Passkey domains"),description:t("New Passkeys use the primary domain. Compatible domains keep existing Passkeys working."),contentClassName:"sm:max-w-lg",bodyClassName:"space-y-3 text-sm break-words",trigger:(0,a.jsx)(R.$,{type:"button",variant:"link",size:"sm",className:"h-auto p-0 font-semibold text-inherit underline underline-offset-4",children:t("Why set this?")}),footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(R.$,{type:"button",variant:"outline",onClick:()=>v(!1),children:t("Close")}),(0,a.jsx)(R.$,{type:"button",disabled:!U||j||f,onClick:()=>{S.setValue("passkey.rp_id",_,{shouldDirty:!0}),S.getValues("passkey.origins").trim()||S.setValue("passkey.origins",q,{shouldDirty:!0}),v(!1)},children:F?t("Keep existing domain"):t("Fill in this website")})]}),children:[(0,a.jsxs)("dl",{className:"grid gap-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{className:"font-medium",children:t("Primary Passkey domain")}),(0,a.jsx)("dd",{className:"text-muted-foreground mt-1",children:t("New Passkeys use this domain. Enter a domain without https://, a port or a path. An empty field uses the system website address.")})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{className:"font-medium",children:t("Compatible Passkey domains")}),(0,a.jsx)("dd",{className:"text-muted-foreground mt-1",children:t("Keep the domains used by existing Passkeys, one per line. If the primary domain changed from www.example.com to example.com, enter www.example.com here.")})]})]}),(0,a.jsxs)("div",{className:"bg-muted space-y-2 rounded-lg p-3 break-all",children:[(0,a.jsx)("p",{children:t("Current site: {{origin}}",{origin:q})}),!F&&(0,a.jsx)("p",{className:"font-medium",children:t("For this website, you can enter: {{domain}}",{domain:O})}),E&&!I&&(0,a.jsx)("p",{className:"text-muted-foreground",children:t("The system currently uses: {{domain}}",{domain:E})})]}),I&&(0,a.jsx)("p",{children:t("The current setting could not be loaded. You can still enter the website domain yourself.")}),(0,a.jsx)("p",{children:t("A Passkey created for www.example.com cannot be used on example.com. Keep the old website available so users can still verify there.")}),(0,a.jsx)("p",{children:t("When the primary domain changes, the previous domain is automatically kept in the compatible domains list.")}),!U&&(0,a.jsx)("p",{children:t("Use an HTTPS domain (or localhost for development) to configure Passkey.")}),(0,a.jsx)("p",{className:"text-muted-foreground",children:t("Review the compatible domains and allowed websites, then save changes on the settings page.")})]})]})}),(0,a.jsx)(d.zB,{control:S.control,name:"passkey.rp_id",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Primary Passkey domain")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(k.p,{className:(0,ew.cn)(V&&"border-amber-500 focus-visible:border-amber-500 focus-visible:ring-amber-500/20 dark:border-amber-400 dark:focus-visible:border-amber-400"),placeholder:t("e.g. example.com"),value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsxs)(d.Rr,{"aria-live":"polite",children:[t("Enter a domain such as example.com or localhost, without a protocol, port or path. Put addresses with ports in Allowed Passkey websites.")," ",V&&(0,a.jsxs)("span",{className:"sr-only",children:[""===B&&t("Set the website where users will use their Passkeys."),G&&t("This domain does not match the current website. Passkeys may not work here.")]}),!V&&""===M.trim()&&(0,a.jsx)("span",{className:"mt-1 block",children:t("The system currently uses: {{domain}}",{domain:E})})]}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:S.control,name:"passkey.legacy_rp_ids",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Compatible Passkey domains")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(h.T,{rows:3,placeholder:"www.example.com",...n})}),(0,a.jsx)(d.Rr,{children:t("Enter previous domains, one per line, without a protocol, port or path. Different ports on the same domain do not need compatible domains.")}),(0,a.jsx)(d.C5,{})]})}})]}),(0,a.jsx)(d.zB,{control:S.control,name:"passkey.user_verification",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("User Verification")}),(0,a.jsx)(d.MJ,{children:(0,a.jsxs)(N.l6,{items:[{value:"required",label:t("Required")},{value:"preferred",label:t("Recommended")},{value:"discouraged",label:t("Discouraged")}],value:n.value,onValueChange:n.onChange,children:[(0,a.jsx)(N.bq,{children:(0,a.jsx)(N.yv,{placeholder:t("Select requirement")})}),(0,a.jsx)(N.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(N.s3,{children:[(0,a.jsx)(N.eb,{value:"required",children:t("Required")}),(0,a.jsx)(N.eb,{value:"preferred",children:t("Recommended")}),(0,a.jsx)(N.eb,{value:"discouraged",children:t("Discouraged")})]})})]})}),(0,a.jsx)(d.Rr,{children:t("Controls whether user verification (biometrics/PIN) is required during Passkey flows.")}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:S.control,name:"passkey.attachment_preference",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Device Type Preference")}),(0,a.jsx)(d.MJ,{children:(0,a.jsxs)(N.l6,{items:[{value:"none",label:t("Unlimited")},{value:"platform",label:t("Built-in Device")},{value:"cross-platform",label:t("External Device")}],value:n.value,onValueChange:n.onChange,children:[(0,a.jsx)(N.bq,{children:(0,a.jsx)(N.yv,{placeholder:t("No preference")})}),(0,a.jsx)(N.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(N.s3,{children:[(0,a.jsx)(N.eb,{value:"none",children:t("Unlimited")}),(0,a.jsx)(N.eb,{value:"platform",children:t("Built-in Device")}),(0,a.jsx)(N.eb,{value:"cross-platform",children:t("External Device")})]})})]})}),(0,a.jsx)(d.Rr,{children:t("Built-in: phone fingerprint/face, or Windows Hello; External: USB security key")}),(0,a.jsx)(d.C5,{})]})}}),(0,a.jsx)(d.zB,{control:S.control,name:"passkey.allow_insecure_origin",render:e=>{let{field:n}=e;return(0,a.jsxs)(p.H,{children:[(0,a.jsxs)(p.z$,{children:[(0,a.jsx)(d.lR,{children:t("Allow Insecure Origins")}),(0,a.jsx)(d.Rr,{children:t("Permit Passkey registration on non-HTTPS origins (only recommended for development)")})]}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(u.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(d.zB,{control:S.control,name:"passkey.origins",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.eI,{children:[(0,a.jsx)(d.lR,{children:t("Allowed Passkey websites")}),(0,a.jsx)(d.MJ,{children:(0,a.jsx)(h.T,{rows:4,placeholder:q,value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref})}),(0,a.jsx)(d.Rr,{"aria-live":"polite",className:(0,ew.cn)(z&&"text-amber-700 dark:text-amber-400"),children:z?t("This list does not include the current website. Add {{origin}} if users sign in here.",{origin:q}):t("Enter one website address per line, such as https://example.com. Do not include a page path.")}),(0,a.jsx)(d.C5,{})]})}})]})}),(0,a.jsx)(en.T,{open:null!==x,onOpenChange:e=>{e||f||w(null)},title:Q.length?t("Remove compatible Passkey domains?"):t("Change the Passkey domain?"),desc:Q.length?t("Passkeys for removed domains will stop working. Confirm only if affected users can sign in another way."):t("New Passkeys will use the new primary domain. The previous domain will be kept so existing Passkeys can still verify."),confirmText:Q.length?t("Remove domains"):t("Change domain"),destructive:Q.length>0,isLoading:f,handleConfirm:()=>{x&&H(x.values,x.preview)},children:(0,a.jsxs)("div",{className:"space-y-2 text-sm break-all",children:[x?.notice&&(0,a.jsx)(A.Fc,{role:"alert",children:(0,a.jsx)(A.TN,{children:x.notice})}),Q.length>0&&x&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("p",{children:Q.join(", ")}),(0,a.jsx)("p",{children:t("Passkeys known to use removed domains: {{amount}}",{amount:x.preview.affected_credentials})}),(0,a.jsx)("p",{children:t("Passkeys with an unknown domain that may be affected: {{amount}}",{amount:x.preview.unknown_credentials})})]}),(0,a.jsx)("p",{children:t("Current domain: {{domain}}",{domain:x?.preview.previous_rp_id||t("Unknown")})}),(0,a.jsx)("p",{children:t("New domain: {{domain}}",{domain:x?.preview.effective_rp_id||t("Automatic from system website address")})})]})})]})}let eT=[{id:"basic-auth",titleKey:"Basic Authentication",build:e=>(0,a.jsx)(v,{defaultValues:{PasswordLoginEnabled:e.PasswordLoginEnabled,PasswordRegisterEnabled:e.PasswordRegisterEnabled,EmailVerificationEnabled:e.EmailVerificationEnabled,RegisterEnabled:e.RegisterEnabled,EmailDomainRestrictionEnabled:e.EmailDomainRestrictionEnabled,EmailAliasRestrictionEnabled:e.EmailAliasRestrictionEnabled,EmailDomainWhitelist:e.EmailDomainWhitelist}})},{id:"oauth",titleKey:"OAuth Integrations",build:e=>(0,a.jsx)(ek,{serverAddress:e.ServerAddress,defaultValues:{GitHubOAuthEnabled:e.GitHubOAuthEnabled,GitHubClientId:e.GitHubClientId,GitHubClientSecret:e.GitHubClientSecret,"discord.enabled":e["discord.enabled"],"discord.client_id":e["discord.client_id"],"discord.client_secret":e["discord.client_secret"],"oidc.enabled":e["oidc.enabled"],"oidc.display_name":e["oidc.display_name"],"oidc.client_id":e["oidc.client_id"],"oidc.client_secret":e["oidc.client_secret"],"oidc.well_known":e["oidc.well_known"],"oidc.authorization_endpoint":e["oidc.authorization_endpoint"],"oidc.token_endpoint":e["oidc.token_endpoint"],"oidc.user_info_endpoint":e["oidc.user_info_endpoint"],TelegramOAuthEnabled:e.TelegramOAuthEnabled,"telegram.client_id":e["telegram.client_id"],"telegram.client_secret":e["telegram.client_secret"],LinuxDOOAuthEnabled:e.LinuxDOOAuthEnabled,LinuxDOClientId:e.LinuxDOClientId,LinuxDOClientSecret:e.LinuxDOClientSecret,LinuxDOMinimumTrustLevel:e.LinuxDOMinimumTrustLevel,WeChatAuthEnabled:e.WeChatAuthEnabled,WeChatServerAddress:e.WeChatServerAddress,WeChatServerToken:e.WeChatServerToken,WeChatAccountQRCodeImageURL:e.WeChatAccountQRCodeImageURL}})},{id:"passkey",titleKey:"Passkey Authentication",build:e=>(0,a.jsx)(eP,{defaultValues:{"passkey.enabled":e["passkey.enabled"],"passkey.rp_display_name":e["passkey.rp_display_name"],"passkey.rp_id":e["passkey.rp_id"],"passkey.legacy_rp_ids":e["passkey.legacy_rp_ids"],"passkey.origins":e["passkey.origins"],"passkey.allow_insecure_origin":e["passkey.allow_insecure_origin"],"passkey.user_verification":e["passkey.user_verification"],"passkey.attachment_preference":e["passkey.attachment_preference"]}})},{id:"bot-protection",titleKey:"Bot Protection",build:e=>(0,a.jsx)(w,{defaultValues:{TurnstileCheckEnabled:e.TurnstileCheckEnabled,TurnstileSiteKey:e.TurnstileSiteKey,TurnstileSecretKey:e.TurnstileSecretKey}})},{id:"custom-oauth",titleKey:"Custom OAuth",build:e=>(0,a.jsx)(ed,{serverAddress:e.ServerAddress})}],eI=(0,i.h)({sections:eT,defaultSection:"basic-auth",basePath:"/system-settings/auth",urlStyle:"path"}),eR=eI.sectionIds,eN=eI.defaultSection,ej=eI.getSectionNavItems,eM=eI.getSectionContent,eD=eI.getSectionMeta},24707(e,t,n){"use strict";n.d(t,{Is:()=>t8,dK:()=>t6,qB:()=>t7,gv:()=>ne,Eu:()=>t9});var a=n(72361),i=n(43459),o=n(48367),s=n(86832),r=n(6702),l=n(20598),c=n(49256),d=n(63859),u=n(36710),h=n(1738),p=n(87212),m=n(43152),g=n(31002),f=n(44724),y=n(47182);let b=c.Ik({enabled:c.zM(),minQuota:d.ai().int().min(0),maxQuota:d.ai().int().min(0)});function v(e){let{defaultValues:t}=e,{t:n}=(0,r.Bd)(),i=(0,y.M)(),c=(0,s.mN)({resolver:(0,o.u)(b),defaultValues:{enabled:t.enabled,minQuota:t.minQuota,maxQuota:t.maxQuota}}),{isDirty:d,isSubmitting:v}=c.formState,k=c.watch("enabled");async function x(e){let a=[];if(e.enabled!==t.enabled&&a.push({key:"checkin_setting.enabled",value:String(e.enabled)}),e.minQuota!==t.minQuota&&a.push({key:"checkin_setting.min_quota",value:String(e.minQuota)}),e.maxQuota!==t.maxQuota&&a.push({key:"checkin_setting.max_quota",value:String(e.maxQuota)}),0===a.length)return void l.oR.info(n("No changes to save"));for(let e of a)await i.mutateAsync(e);c.reset(e)}return(0,a.jsx)(f.X,{title:n("Check-in Settings"),children:(0,a.jsx)(u.lV,{...c,children:(0,a.jsxs)(m.yt,{onSubmit:c.handleSubmit(x),autoComplete:"off",children:[(0,a.jsx)(g.S2,{onSave:c.handleSubmit(x),isSaving:i.isPending||v,isSaveDisabled:!d,saveLabel:"Save check-in settings"}),(0,a.jsx)(u.zB,{control:c.control,name:"enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:n("Enable check-in feature")}),(0,a.jsx)(u.Rr,{children:n("Allow users to check in daily for random quota rewards")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange,disabled:i.isPending||v})})]})}}),k&&(0,a.jsxs)("div",{className:"grid gap-6 sm:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:c.control,name:"minQuota",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Minimum check-in quota")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",min:0,placeholder:n("1000"),...t})}),(0,a.jsx)(u.Rr,{children:n("Minimum quota amount awarded for check-in")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:c.control,name:"maxQuota",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Maximum check-in quota")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",min:0,placeholder:n("10000"),...t})}),(0,a.jsx)(u.Rr,{children:n("Maximum quota amount awarded for check-in")}),(0,a.jsx)(u.C5,{})]})}})]})]})})})}var k=n(41128),x=n(88288),w=n(43919),C=n(27784),A=n(41064),S=n(75033),P=n(74750);function T(e){let{defaultValues:t}=e,{t:n}=(0,r.Bd)(),i=(0,y.M)(),s=c.Ik({QuotaPerUnit:d.ai().min(0,n("Value must be at least 0")),USDExchangeRate:d.ai().min(1e-4,n("Exchange rate must be greater than 0")),DisplayInCurrencyEnabled:c.zM(),DisplayTokenStatEnabled:c.zM(),general_setting:c.Ik({quota_display_type:c.k5(["USD","CNY","TOKENS","CUSTOM"]),custom_currency_symbol:c.Yj().max(8).optional(),custom_currency_exchange_rate:d.ai().min(1e-4,n("Exchange rate must be greater than 0")).optional()})}).superRefine((e,t)=>{"CUSTOM"===e.general_setting.quota_display_type&&(e.general_setting.custom_currency_symbol?.trim()||t.addIssue({code:k.eq.custom,path:["general_setting","custom_currency_symbol"],message:n("Custom currency symbol is required")}),null==e.general_setting.custom_currency_exchange_rate&&t.addIssue({code:k.eq.custom,path:["general_setting","custom_currency_exchange_rate"],message:n("Exchange rate is required")}))}),{form:l,handleSubmit:b,handleReset:v,isDirty:T,isSubmitting:I}=(0,S.T)({resolver:(0,o.u)(s),defaultValues:t,onSubmit:async(e,t)=>{for(let[e,n]of Object.entries(t)){if(null==n||"object"==typeof n)continue;let t=n;"boolean"==typeof n?t=String(n):"number"==typeof n&&(t=Number.isFinite(n)?String(n):"0"),await i.mutateAsync({key:e,value:t})}}}),R=l.watch("general_setting.quota_display_type")??"USD",N=l.watch("DisplayInCurrencyEnabled"),j="TOKENS"===R,M="TOKENS"===R||t.QuotaPerUnit!==w.tV.quotaPerUnit;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(A.s,{when:T}),(0,a.jsx)(f.X,{title:n("Pricing & Display"),children:(0,a.jsx)(u.lV,{...l,children:(0,a.jsxs)(m.yt,{onSubmit:b,children:[(0,a.jsx)(g.S2,{onSave:b,onReset:v,isSaving:i.isPending||I,isResetDisabled:!T}),(0,a.jsx)(C._,{isDirty:T}),M&&(0,a.jsx)(u.zB,{control:l.control,name:"QuotaPerUnit",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Quota Per Unit")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",value:t.value,disabled:!0,name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:n("Number of tokens per unit quota")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:l.control,name:"general_setting.quota_display_type",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Display Mode")}),(0,a.jsxs)(x.l6,{items:[{value:"USD",label:n("USD")},{value:"CNY",label:n("CNY")},{value:"CUSTOM",label:n("Custom Currency")},{value:"TOKENS",label:n("Tokens Only")}],value:t.value,onValueChange:t.onChange,children:[(0,a.jsx)(u.MJ,{children:(0,a.jsx)(x.bq,{children:(0,a.jsx)(x.yv,{placeholder:n("Select display mode")})})}),(0,a.jsx)(x.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(x.s3,{children:[(0,a.jsx)(x.eb,{value:"USD",children:n("USD")}),(0,a.jsx)(x.eb,{value:"CNY",children:n("CNY")}),(0,a.jsx)(x.eb,{value:"CUSTOM",children:n("Custom Currency")}),j&&(0,a.jsx)(x.eb,{value:"TOKENS",children:n("Tokens Only")})]})})]}),(0,a.jsx)(u.Rr,{children:n("Choose how quota values are shown to users")}),(0,a.jsx)(u.C5,{})]})}}),"TOKENS"!==R&&(0,a.jsx)(u.zB,{control:l.control,name:"USDExchangeRate",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:"CNY"===R?n("CNY per USD"):n("USD Exchange Rate")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:n("Real exchange rate between USD and your payment gateway currency")}),(0,a.jsx)(u.C5,{})]})}}),"CUSTOM"===R&&(0,a.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:l.control,name:"general_setting.custom_currency_symbol",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Custom Currency Symbol")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"text",value:t.value??"",onChange:t.onChange,name:t.name,onBlur:t.onBlur,ref:t.ref,maxLength:8,placeholder:n("e.g. ¥ or HK$")})}),(0,a.jsx)(u.Rr,{children:n("Prefix used when displaying prices")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:l.control,name:"general_setting.custom_currency_exchange_rate",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:n("Units per USD")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",value:t.value??"",onChange:e=>t.onChange(""===e.target.value?void 0:e.target.valueAsNumber),name:t.name,onBlur:t.onBlur,ref:t.ref,placeholder:n("e.g. 8 means 1 USD = 8 units")})}),(0,a.jsx)(u.Rr,{children:n("Conversion rate from USD to your custom currency")}),(0,a.jsx)(u.C5,{})]})}})]}),!1===N&&(0,a.jsx)(u.zB,{control:l.control,name:"DisplayInCurrencyEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:n("Display in Currency")}),(0,a.jsx)(u.Rr,{children:"TOKENS"===R?n("Tokens-only mode will show raw quota values regardless of this toggle."):n("Show prices in currency instead of quota.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(u.zB,{control:l.control,name:"DisplayTokenStatEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:n("Display Token Statistics")}),(0,a.jsx)(u.Rr,{children:n("Show token usage statistics in the UI")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})})]})}var I=n(19376),R=n(43284),N=n(33271);let j=c.Ik({QuotaForNewUser:d.ai().min(0),QuotaForInviter:d.ai().min(0),QuotaForInvitee:d.ai().min(0),TopUpLink:c.Yj(),quota_setting:c.Ik({enable_free_model_pre_consume:c.zM(),trust_quota_usd:c.vk(e=>""===e?void 0:e,d.ai({error:()=>I.Ay.t("Please enter a valid number")}).min(0,{error:()=>I.Ay.t("Must be greater than or equal to 0")})),pre_consume_multiplier:d.ai({error:()=>I.Ay.t("Please enter a valid number")}).positive({error:()=>I.Ay.t("Must be greater than 0")})})});function M(e){return(0,N.eN)(""===e?0:e)}function D(e){let{defaultValues:t,complianceConfirmed:n=!0}=e,{t:i}=(0,r.Bd)(),s=(0,y.M)(),l=e=>t=>{let n=t.currentTarget.valueAsNumber;e(Number.isNaN(n)?"":n)},{form:c,handleSubmit:d,isDirty:b,isSubmitting:v}=(0,S.T)({resolver:(0,o.u)(j),defaultValues:t,onSubmit:async(e,t)=>{for(let[e,n]of Object.entries(t))await s.mutateAsync({key:e,value:n})}});return(0,a.jsxs)(f.X,{title:i("Quota Settings"),children:[(0,a.jsx)(A.s,{when:b}),n?null:(0,a.jsx)(R.Fc,{variant:"destructive",children:(0,a.jsx)(R.TN,{children:i("Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.")})}),(0,a.jsx)(u.lV,{...c,children:(0,a.jsxs)(m.yt,{onSubmit:d,children:[(0,a.jsx)(g.S2,{onSave:d,isSaving:s.isPending||v}),(0,a.jsx)(C._,{isDirty:b}),(0,a.jsxs)(m.K1,{children:[(0,a.jsx)(u.zB,{control:c.control,name:"QuotaForNewUser",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("New User Quota")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",value:t.value??"",onChange:l(t.onChange),name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:i("Initial quota given to new users ({{formattedQuota}})",{formattedQuota:M(t.value)})}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:c.control,name:"quota_setting.trust_quota_usd",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("Wallet pre-consume bypass threshold (USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",min:0,step:"any",value:t.value??"",onChange:t.onChange,name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:i("Skip pre-consumption when the wallet balance and limited API key balance both exceed this amount. Set to 0 to always pre-consume. Subscriptions and asynchronous tasks always reserve quota.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:c.control,name:"quota_setting.pre_consume_multiplier",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("Input pre-consume multiplier")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",min:0,step:"any",value:t.value??"",onChange:t.onChange,name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:i("Reserve the estimated input cost multiplied by this value, without estimating output tokens. Defaults to 1; positive decimals such as 0.5 and 1.5 are supported. Final charges use actual usage. Per-request and task prices are unaffected.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:c.control,name:"QuotaForInviter",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("Inviter Reward")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",value:t.value??"",onChange:l(t.onChange),name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:i("Quota given to users who invite others ({{formattedQuota}})",{formattedQuota:M(t.value)})}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:c.control,name:"QuotaForInvitee",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("Invitee Reward")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",value:t.value??"",onChange:l(t.onChange),name:t.name,onBlur:t.onBlur,ref:t.ref})}),(0,a.jsx)(u.Rr,{children:i("Quota given to invited users ({{formattedQuota}})",{formattedQuota:M(t.value)})}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(m.vF,{span:"full",children:(0,a.jsx)(u.zB,{control:c.control,name:"quota_setting.enable_free_model_pre_consume",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:i("Pre-Consume for Free Models")}),(0,a.jsx)(u.Rr,{children:i("When enabled, zero-cost models also pre-consume quota before final settlement.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange,disabled:s.isPending})})]})}})}),(0,a.jsx)(u.zB,{control:c.control,name:"TopUpLink",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:i("Top-Up Link")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:i("https://example.com/topup"),...t})}),(0,a.jsx)(u.Rr,{children:i("External link for users to purchase quota")}),(0,a.jsx)(u.C5,{})]})}})]})]})})]})}var O=n(96962),L=n(55667),q=n(18100),U=n(1417),E=n(92429),F=n(68413),_=n(91460),B=n(92379),G=n(72868),V=n(82655),z=n(11728),K=n(70954),W=n(56275);function H(e){return Math.max(1,Math.ceil(Array.from(e).length/42))}function J(e){let{open:t,onOpenChange:n,title:i,description:o,items:s=[],checklist:l=[],requiredText:c="",requiredTextParts:d=[],inputPrompt:u,inputPlaceholder:h,mismatchHint:p,confirmText:m,cancelText:g,destructive:f=!0,isLoading:y=!1,onConfirm:b,className:v}=e,{t:k}=(0,r.Bd)(),[x,w]=(0,F.useState)([]),[C,A]=(0,F.useState)(""),[S,P]=(0,F.useState)([]),T=(0,F.useMemo)(()=>d.reduce((e,t)=>"input"!==t.type?{...e,parts:[...e.parts,t]}:{parts:[...e.parts,{...t,inputIndex:e.inputIndex}],inputIndex:e.inputIndex+1},{parts:[],inputIndex:0}).parts,[d]),I=(0,F.useMemo)(()=>T.filter(e=>"input"===e.type).length,[T]),R=I>0,N=R?T.map(e=>e.text).join(""):c;(0,F.useEffect)(()=>{if(!t)return;let e=window.setTimeout(()=>{w(Array(l.length).fill(!1)),A(""),P(Array(I).fill(""))},0);return()=>window.clearTimeout(e)},[t,l.length,I]);let j=(0,F.useMemo)(()=>0===l.length||x.length===l.length&&x.every(e=>e),[x,l.length]),M=(0,F.useMemo)(()=>R?T.every(e=>"static"===e.type||S[e.inputIndex??0]?.trim()===e.text.trim()):!c||C.trim()===c.trim(),[R,T,c,C,S]),D=R?S.some(e=>""!==e.trim()):C.length>0,O=j&&M&&!y;return(0,a.jsx)(B.Lt,{open:t,onOpenChange:n,children:(0,a.jsxs)(B.EO,{className:(0,W.cn)("flex max-h-[min(88dvh,760px)] w-[calc(100vw-1.5rem)] !max-w-[44rem] grid-rows-none flex-col gap-0 overflow-hidden !p-0 sm:w-[min(44rem,calc(100vw-3rem))]",v),children:[(0,a.jsxs)(B.wd,{className:"shrink-0 px-4 pt-4 pb-3 text-left sm:px-6 sm:pt-6",children:[(0,a.jsx)(B.r7,{children:i}),o?(0,a.jsx)(B.$v,{render:(0,a.jsx)("div",{}),className:"mt-1 text-left leading-5",children:o}):null]}),(0,a.jsxs)("div",{className:"min-h-0 flex-1 space-y-4 overflow-y-auto px-4 pb-4 sm:px-6",children:[s.length>0?(0,a.jsx)("ol",{className:"border-border/70 bg-muted/30 text-foreground list-decimal space-y-2 rounded-lg border px-4 py-3 pl-8 text-sm leading-6 sm:px-5 sm:py-4 sm:pl-9",children:s.map(e=>(0,a.jsx)("li",{children:e},e))}):null,l.length>0?(0,a.jsx)("div",{className:"border-border/70 bg-muted/30 space-y-3 rounded-lg border p-3 sm:p-4",children:l.map((e,t)=>{let n=`risk-acknowledgement-${t}`;return(0,a.jsxs)("div",{className:"flex items-start gap-3",children:[(0,a.jsx)(V.S,{id:n,checked:x[t]??!1,onCheckedChange:e=>{var n;return n=!0===e,void w(e=>{let a=[...e];return a[t]=n,a})},className:"mt-0.5"}),(0,a.jsx)(z.J,{htmlFor:n,className:"text-muted-foreground text-sm leading-5 font-normal",children:e})]},e)})}):null,N?(0,a.jsxs)("div",{className:"border-destructive/30 bg-destructive/5 space-y-3 rounded-lg border p-3 sm:p-4",children:[(0,a.jsx)(z.J,{className:"text-sm font-medium",children:u??k("Please type the following text to confirm:")}),(0,a.jsx)("div",{className:"bg-background border-border rounded-md border px-3 py-2 font-mono text-sm leading-6 break-words whitespace-pre-wrap",children:N}),R?(0,a.jsx)("div",{className:"flex flex-col gap-2",children:T.map((e,n)=>"static"===e.type?(0,a.jsx)("span",{className:"text-muted-foreground bg-background/70 border-border w-fit rounded-md border px-2 py-1.5 font-mono text-sm select-none",children:e.text},`static-${n}`):(0,a.jsx)(K.T,{value:S[e.inputIndex??0]??"",onChange:t=>{var n,a;return n=e.inputIndex??0,a=t.target.value,void P(e=>{let t=[...e];return t[n]=a,t})},placeholder:e.placeholder??e.text??h??k("Type the confirmation text here"),rows:H(e.text),autoFocus:t&&0===e.inputIndex,wrap:"soft","aria-invalid":D&&!M,className:"min-h-10 resize-none overflow-hidden font-mono text-sm leading-6"},`input-${n}`))}):(0,a.jsx)(K.T,{value:C,onChange:e=>A(e.target.value),placeholder:h??k("Type the confirmation text here"),rows:H(c),autoFocus:t,wrap:"soft","aria-invalid":D&&!M,className:"min-h-16 resize-none overflow-hidden font-mono text-sm leading-6"}),D&&!M?(0,a.jsx)("p",{className:"text-destructive text-xs",children:p??k("The entered text does not match the required text.")}):null]}):null]}),(0,a.jsxs)(B.ck,{className:"mx-0 mb-0 shrink-0 rounded-b-xl border-t p-3 sm:p-4",children:[(0,a.jsx)(B.Zr,{disabled:y,children:g??k("Cancel")}),(0,a.jsx)(G.$,{variant:f?"destructive":"default",disabled:!O,onClick:b,children:m??k("Confirm")})]})]})})}var Q=n(56920),$=n(80750),Y=n(26411),X=n(92778),Z=n(66002),ee=n(65277),et=n(14653),en=n(32348),ea=n(21505),ei=n(42817),eo=n(24518),es=n(86358),er=n(60641);let el="amount-discount-form";function ec(e){let{open:t,onOpenChange:n,onSave:i,editData:l}=e,{t:d}=(0,r.Bd)(),p=!!l,m=c.Ik({amount:c.ai().positive(d("Amount must be greater than 0")).int(d("Amount must be a whole number")),discountRate:c.ai().positive(d("Discount rate must be greater than 0")).max(1,d("Discount rate must be ≤ 1"))}),g=(0,s.mN)({resolver:(0,o.u)(m),defaultValues:{amount:0,discountRate:1}}),f=g.watch("discountRate"),y=(0,F.useMemo)(()=>!f||f>=1?0:Math.round((1-f)*100),[f]);return(0,F.useEffect)(()=>{l?g.reset(l):g.reset({amount:0,discountRate:1})},[l,g,t]),(0,a.jsx)(er.l,{open:t,onOpenChange:n,title:p?d("Edit discount tier"):d("Add discount tier"),description:d("Set a discount rate for a specific recharge amount threshold."),contentClassName:"sm:max-w-[500px]",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(G.$,{type:"button",variant:"outline",onClick:()=>n(!1),children:d("Cancel")}),(0,a.jsx)(G.$,{type:"submit",form:el,children:p?d("Update"):d("Add")})]}),children:(0,a.jsx)(u.lV,{...g,children:(0,a.jsxs)("form",{id:el,onSubmit:g.handleSubmit(e=>{i({amount:e.amount,discountRate:e.discountRate}),g.reset(),n(!1)}),className:"space-y-4",children:[(0,a.jsx)(u.zB,{control:g.control,name:"amount",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Recharge Amount (USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"1",min:"1",placeholder:d("e.g., 100"),...t,onChange:e=>t.onChange(parseInt(e.target.value)||0),disabled:p})}),(0,a.jsx)(u.Rr,{children:p?d("Amount cannot be changed when editing."):d("Minimum recharge amount to qualify for this discount.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:g.control,name:"discountRate",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Discount Rate")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:"0.01",max:"1",placeholder:d("e.g., 0.95"),...t,onChange:e=>t.onChange(parseFloat(e.target.value)||0)})}),(0,a.jsxs)(u.Rr,{children:[d("Final price multiplier (0.95 = 5% discount"),y>0&&(0,a.jsxs)("span",{className:"ml-1 font-medium text-green-600 dark:text-green-400",children:["= ",y,d("% off")]}),")"]}),(0,a.jsx)(u.C5,{})]})}})]})})})}function ed(e){let{value:t,onChange:n}=e,{t:i}=(0,r.Bd)(),[o,s]=(0,F.useState)(!1),[l,c]=(0,F.useState)(null),d=(0,F.useMemo)(()=>Object.entries((0,eo.Cz)(t,{fallback:{},validator:es.LK,validatorMessage:"Amount discount must be a JSON object",context:"amount discounts"})).map(e=>{let[t,n]=e;return{amount:Number.parseInt(t,10),discountRate:"number"==typeof n?n:Number.parseFloat(String(n))}}).filter(e=>!isNaN(e.amount)&&!isNaN(e.discountRate)).sort((e,t)=>e.amount-t.amount),[t]),u=e=>{let a=(0,eo.Cz)(t,{fallback:{},validator:es.LK,silent:!0});delete a[e.toString()],n(JSON.stringify(a,null,2))},h=e=>{c(e),s(!0)},p=e=>{if(e>=1)return"0%";let t=Math.round((1-e)*100);return`${t}%`};return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:i("Configure discount rates based on recharge amounts")}),(0,a.jsxs)(G.$,{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),c(null),s(!0)},size:"sm",className:"w-full sm:w-auto",children:[(0,a.jsx)(Z.A,{className:"h-4 w-4 sm:mr-2"}),(0,a.jsx)("span",{className:"sm:inline",children:i("Add discount tier")})]})]}),0===d.length?(0,a.jsx)("div",{className:"text-muted-foreground rounded-lg border border-dashed p-6 text-center text-sm",children:i('No discount tiers configured. Click "Add discount tier" to get started.')}):(0,a.jsxs)("div",{className:"rounded-md border",children:[(0,a.jsx)(en.h,{className:"hidden rounded-none border-0 sm:block",data:d,getRowKey:e=>e.amount,columns:[{id:"amount",header:i("Recharge Amount"),cell:e=>(0,a.jsxs)("span",{className:"font-mono text-sm",children:["$",e.amount]})},{id:"discount-rate",header:i("Discount Rate"),cell:e=>(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-sm",children:e.discountRate.toFixed(2)})},{id:"discount",header:i("Discount"),cell:e=>(0,a.jsxs)(ei.Wh,{variant:e.discountRate<1?"info":"neutral",className:"font-mono",copyable:!1,children:[p(e.discountRate)," ",i("off")]})},{id:"actions",header:i("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)(ea._,{editLabel:i("Edit"),deleteLabel:i("Delete"),menuLabel:i("Open menu"),onEdit:()=>h(e),onDelete:()=>u(e.amount)})}]}),(0,a.jsx)("div",{className:"divide-y sm:hidden",children:d.map(e=>(0,a.jsxs)("div",{className:"p-4",children:[(0,a.jsxs)("div",{className:"mb-3 flex items-start justify-between",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsxs)("div",{className:"mb-2 font-mono text-base font-medium",children:["$",e.amount]}),(0,a.jsxs)(ei.Wh,{variant:e.discountRate<1?"info":"neutral",className:"font-mono",copyable:!1,children:[p(e.discountRate)," ",i("off")]})]}),(0,a.jsxs)("div",{className:"flex gap-1",children:[(0,a.jsx)(G.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),h(e)},children:(0,a.jsx)(ee.A,{className:"h-4 w-4"})}),(0,a.jsx)(G.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),u(e.amount)},children:(0,a.jsx)(et.A,{className:"h-4 w-4"})})]})]}),(0,a.jsxs)("div",{className:"text-sm",children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[i("Discount Rate:")," "]}),(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-xs",children:e.discountRate.toFixed(2)})]})]},e.amount))})]}),(0,a.jsx)(ec,{open:o,onOpenChange:s,onSave:e=>{let a=(0,eo.Cz)(t,{fallback:{},validator:es.LK,silent:!0});l&&l.amount!==e.amount&&delete a[l.amount.toString()],a[e.amount.toString()]=e.discountRate,n(JSON.stringify(a,null,2))},editData:l})]})}var eu=n(15762);function eh(e){let{value:t,onChange:n}=e,{t:i}=(0,r.Bd)(),[o,s]=(0,F.useState)(""),l=(0,F.useMemo)(()=>(0,eo.Cz)(t,{fallback:[],validator:es.cy,validatorMessage:i("Amount options must be a JSON array"),context:"amount options"}).filter(e=>"number"==typeof e||!isNaN(Number(e))).map(Number).sort((e,t)=>e-t),[t,i]),c=()=>{let e=parseFloat(o);if(!isNaN(e)&&!(e<=0))try{let t=[...l,e].filter((e,t,n)=>n.indexOf(e)===t).sort((e,t)=>e-t);n(JSON.stringify(t,null,2)),s("")}catch(e){console.error("Failed to add amount:",e)}};return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-muted-foreground mb-3 text-sm",children:i("Preset recharge amounts displayed to users")}),0===l.length?(0,a.jsx)("div",{className:"text-muted-foreground rounded-lg border border-dashed p-6 text-center text-sm",children:i("No amount options configured. Add amounts below to get started.")}):(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:l.map(e=>(0,a.jsxs)(ei.Wh,{variant:"neutral",className:"text-base",copyable:!1,children:[(0,a.jsxs)("span",{className:"font-mono",children:["$",e]}),(0,a.jsx)(G.$,{type:"button",variant:"ghost",size:"icon-sm",onClick:t=>{t.preventDefault(),t.stopPropagation();try{let t=l.filter(t=>t!==e);n(JSON.stringify(t,null,2))}catch(e){console.error("Failed to remove amount:",e)}},className:"hover:bg-muted-foreground/20 size-auto p-0.5","aria-label":i("Remove ${{amount}}",{amount:e}),children:(0,a.jsx)(eu.A,{className:"h-3.5 w-3.5"})})]},e))})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-end",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)(z.J,{htmlFor:"new-amount",className:"mb-2 block",children:i("Add new amount")}),(0,a.jsx)(h.p,{id:"new-amount",type:"number",step:"0.01",min:"0",placeholder:i("e.g., 100"),value:o,onChange:e=>s(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),c())}})]}),(0,a.jsxs)(G.$,{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),c()},disabled:!o||0>=parseFloat(o),className:"w-full sm:w-auto",children:[(0,a.jsx)(Z.A,{className:"h-4 w-4 sm:mr-2"}),(0,a.jsx)("span",{className:"sm:inline",children:i("Add")})]})]})]})}var ep=n(38766),em=n(15165);let eg=c.Ik({name:c.Yj().min(1,"Product name is required"),productId:c.Yj().min(1,"Product ID is required"),price:c.ai().min(.01,"Price must be greater than 0"),quota:c.ai().min(1,"Quota must be at least 1"),currency:c.k5(["USD","EUR"])}),ef="creem-product-form";function ey(e){let{open:t,onOpenChange:n,onSave:i,editData:l}=e,{t:c}=(0,r.Bd)(),d=!!l,p=(0,s.mN)({resolver:(0,o.u)(eg),defaultValues:{name:"",productId:"",price:0,quota:0,currency:"USD"}});return(0,F.useEffect)(()=>{l?p.reset(l):p.reset({name:"",productId:"",price:0,quota:0,currency:"USD"})},[l,p,t]),(0,a.jsx)(er.l,{open:t,onOpenChange:n,title:d?c("Edit product"):c("Add product"),description:c("Configure a Creem product for user recharge options."),contentClassName:"sm:max-w-[500px]",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(G.$,{type:"button",variant:"outline",onClick:()=>n(!1),children:c("Cancel")}),(0,a.jsx)(G.$,{type:"submit",form:ef,children:d?c("Update"):c("Add")})]}),children:(0,a.jsx)(u.lV,{...p,children:(0,a.jsxs)("form",{id:ef,onSubmit:p.handleSubmit(e=>{i({name:e.name,productId:e.productId,price:e.price,quota:e.quota,currency:e.currency}),p.reset(),n(!1)}),className:"space-y-4",children:[(0,a.jsx)(u.zB,{control:p.control,name:"name",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:c("Product Name")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:c("e.g., Basic Package"),...t})}),(0,a.jsx)(u.Rr,{children:c("Display name shown to users.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:p.control,name:"productId",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:c("Product ID")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:c("e.g., prod_xxx"),disabled:d,...t})}),(0,a.jsx)(u.Rr,{children:c("Creem product ID from your Creem dashboard.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:p.control,name:"currency",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:c("Currency")}),(0,a.jsxs)(x.l6,{items:[{value:"USD",label:"USD ($)"},{value:"EUR",label:"EUR (€)"}],onValueChange:t.onChange,value:t.value,children:[(0,a.jsx)(u.MJ,{children:(0,a.jsx)(x.bq,{children:(0,a.jsx)(x.yv,{placeholder:c("Select currency")})})}),(0,a.jsx)(x.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(x.s3,{children:[(0,a.jsx)(x.eb,{value:"USD",children:"USD ($)"}),(0,a.jsx)(x.eb,{value:"EUR",children:"EUR (€)"})]})})]}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:p.control,name:"price",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:c("Price")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:.01,placeholder:"10.00",...(0,P.X)(t)})}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsx)(u.zB,{control:p.control,name:"quota",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:c("Quota")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",min:1,placeholder:c("e.g., 500000"),...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:c("Amount of quota to credit to user account.")}),(0,a.jsx)(u.C5,{})]})}})]})})})}function eb(e){let{value:t,onChange:n}=e,{t:i}=(0,r.Bd)(),[o,s]=(0,F.useState)(""),[l,c]=(0,F.useState)(!1),[d,u]=(0,F.useState)(null),p=(0,F.useMemo)(()=>(0,eo.Cz)(t,{fallback:[],validator:es.cy,validatorMessage:i("Creem products must be a JSON array"),context:"creem products"}).filter(e=>"object"==typeof e&&null!==e&&"name"in e&&"productId"in e&&"price"in e&&"quota"in e&&"currency"in e&&"string"==typeof e.name&&"string"==typeof e.productId&&"number"==typeof e.price&&"number"==typeof e.quota&&("USD"===e.currency||"EUR"===e.currency)),[t,i]),m=(0,F.useMemo)(()=>{if(!o)return p;let e=o.toLowerCase();return p.filter(t=>t.name.toLowerCase().includes(e)||t.productId.toLowerCase().includes(e))},[p,o]),g=e=>{n(JSON.stringify((0,eo.Cz)(t,{fallback:[],validator:es.cy,silent:!0}).filter(t=>!("object"==typeof t&&null!==t&&"productId"in t&&t.productId===e.productId)),null,2))},f=e=>{u(e),c(!0)};return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(ep.A,{className:"text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4"}),(0,a.jsx)(h.p,{placeholder:i("Search products..."),value:o,onChange:e=>s(e.target.value),className:"pl-9"})]}),(0,a.jsxs)(G.$,{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),u(null),c(!0)},className:"flex-1 sm:flex-none",children:[(0,a.jsx)(Z.A,{className:"h-4 w-4 sm:mr-2"}),(0,a.jsx)("span",{className:"sm:inline",children:i("Add product")})]})]}),0===m.length?(0,a.jsx)("div",{className:"text-muted-foreground rounded-lg border border-dashed p-8 text-center text-sm",children:o?i("No products match your search"):i('No products configured. Click "Add product" to get started.')}):(0,a.jsxs)("div",{className:"rounded-md border",children:[(0,a.jsx)(en.h,{className:"hidden rounded-none border-0 md:block",data:m,getRowKey:e=>e.productId,columns:[{id:"name",header:i("Name"),cellClassName:"font-medium",cell:e=>e.name},{id:"product-id",header:i("Product ID"),cell:e=>(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-sm",children:e.productId})},{id:"price",header:i("Price"),cell:e=>(0,a.jsx)("span",{className:"font-mono text-sm",children:(0,em.Bg)(e.price,e.currency)})},{id:"quota",header:i("Quota"),cell:e=>(0,a.jsx)("span",{className:"font-mono text-sm",children:(0,em.aE)(e.quota)})},{id:"actions",header:i("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)(ea._,{editLabel:i("Edit"),deleteLabel:i("Delete"),menuLabel:i("Open menu"),onEdit:()=>f(e),onDelete:()=>g(e)})}]}),(0,a.jsx)("div",{className:"divide-y md:hidden",children:m.map(e=>(0,a.jsxs)("div",{className:"p-4",children:[(0,a.jsxs)("div",{className:"mb-3 flex items-start justify-between",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("div",{className:"mb-1 font-medium",children:e.name}),(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-xs",children:e.productId})]}),(0,a.jsxs)("div",{className:"flex gap-1",children:[(0,a.jsx)(G.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),f(e)},children:(0,a.jsx)(ee.A,{className:"h-4 w-4"})}),(0,a.jsx)(G.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),g(e)},children:(0,a.jsx)(et.A,{className:"h-4 w-4"})})]})]}),(0,a.jsxs)("div",{className:"space-y-2 text-sm",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:"text-muted-foreground min-w-16",children:[i("Price"),":"]}),(0,a.jsx)("span",{className:"font-mono",children:(0,em.Bg)(e.price,e.currency)})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:"text-muted-foreground min-w-16",children:[i("Quota"),":"]}),(0,a.jsx)("span",{className:"font-mono",children:(0,em.aE)(e.quota)})]})]})]},e.productId))})]}),(0,a.jsx)(ey,{open:l,onOpenChange:c,onSave:e=>{let a=[...(0,eo.Cz)(t,{fallback:[],validator:es.cy,silent:!0})];if(d){let t=a.findIndex(e=>"object"==typeof e&&null!==e&&"productId"in e&&e.productId===d.productId);-1!==t?a[t]=e:a.push(e)}else a.push(e);n(JSON.stringify(a,null,2))},editData:d})]})}var ev=n(40931),ek=n(2530),ex=n(74501),ew=n(49641);let eC="payment-method-form",eA={alipay:"SiAlipay",stripe:"SiStripe",waffo_pancake:"LuCreditCard",wxpay:"SiWechat"};function eS(e){let{open:t,onOpenChange:n,onSave:i,editData:l}=e,{t:d}=(0,r.Bd)(),p=!!l,m=c.Ik({name:c.Yj().min(1,d("Payment method name is required")),type:c.Yj().min(1,d("Payment type key is required")),icon:c.Yj().optional(),min_topup:c.Yj().optional()}),g=[{iconName:"SiAlipay",label:`${d("Alipay")} (Epay: alipay)`,name:d("Alipay"),value:"alipay"},{iconName:"SiWechat",label:`${d("WeChat Pay")} (Epay: wxpay)`,name:d("WeChat Pay"),value:"wxpay"},{iconName:"SiStripe",label:`${d("Stripe")} (stripe)`,name:d("Stripe"),value:"stripe"},{iconName:"LuCreditCard",label:"Waffo Pancake (waffo_pancake)",name:"Waffo Pancake",value:"waffo_pancake"}],f=e=>g.find(t=>t.value===e),y=(0,s.mN)({resolver:(0,o.u)(m),defaultValues:{name:"",type:"",icon:"",min_topup:""}}),b=y.watch("icon");return(0,F.useEffect)(()=>{l?y.reset({name:l.name,type:l.type,icon:l.icon??eA[l.type]??"",min_topup:l.min_topup??""}):y.reset({name:"",type:"",icon:"",min_topup:""})},[l,y,t]),(0,a.jsx)(er.l,{open:t,onOpenChange:n,title:p?d("Edit payment method"):d("Add payment method"),description:d("Configure a payment method for user recharge options."),contentClassName:"sm:max-w-[500px]",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(G.$,{type:"button",variant:"outline",onClick:()=>n(!1),children:d("Cancel")}),(0,a.jsx)(G.$,{type:"submit",form:eC,children:p?d("Update"):d("Add")})]}),children:(0,a.jsx)(u.lV,{...y,children:(0,a.jsxs)("form",{id:eC,onSubmit:y.handleSubmit(e=>{let t={name:e.name,type:e.type};e.icon&&""!==e.icon.trim()&&(t.icon=e.icon.trim()),e.min_topup&&""!==e.min_topup.trim()&&(t.min_topup=e.min_topup),i(t),y.reset(),n(!1)}),className:"space-y-4",children:[(0,a.jsx)(u.zB,{control:y.control,name:"name",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Name")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:d("e.g., Alipay, WeChat"),...t})}),(0,a.jsx)(u.Rr,{children:d("Display name for this payment method.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:y.control,name:"type",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Payment type key")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(ew.G3,{options:g,value:t.value,onValueChange:e=>{if(null===e)return;let n=y.getValues("icon")?.trim(),a=y.getValues("name")?.trim(),i=f(t.value),o=f(e);t.onChange(e),o?.iconName&&(!n||n===i?.iconName)&&y.setValue("icon",o.iconName,{shouldDirty:!0}),o?.name&&(!a||a===i?.name)&&y.setValue("name",o.name,{shouldDirty:!0})},placeholder:d("Select or enter payment type key"),searchPlaceholder:d("Search payment type keys..."),allowCustomValue:!0})}),(0,a.jsx)(u.Rr,{className:"leading-relaxed",children:d("Used to decide the payment flow. Built-in keys include stripe for Stripe and waffo_pancake for Waffo Pancake; other values are sent to Epay as the type parameter.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:y.control,name:"icon",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Icon")}),(0,a.jsx)(u.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(h.p,{placeholder:d("e.g., SiAlipay"),...t,className:"flex-1"}),b&&(0,a.jsx)(ek.x,{name:b,className:"text-muted-foreground size-5 shrink-0",title:b})]})}),(0,a.jsx)(u.Rr,{children:d("Enter a react-icons component name. Invalid names show no icon.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:y.control,name:"min_topup",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:d("Minimum top-up (optional)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",placeholder:d("e.g., 50"),...t})}),(0,a.jsx)(u.Rr,{children:d("Optional minimum recharge amount for this method.")}),(0,a.jsx)(u.C5,{})]})}})]})})})}let eP={alipay:"SiAlipay",stripe:"SiStripe",waffo_pancake:"LuCreditCard",wxpay:"SiWechat"};function eT(e){return eP[e]??""}function eI(e){return e.icon||eT(e.type)}function eR(e){let{value:t,onChange:n}=e,{t:i}=(0,r.Bd)(),o=[{name:i("Epay Alipay"),template:{icon:eT("alipay"),name:"支付宝",type:"alipay"}},{name:i("Epay WeChat Pay"),template:{icon:eT("wxpay"),name:"微信",type:"wxpay"}},{name:i("Stripe"),template:{icon:eT("stripe"),min_topup:"10",name:"Stripe",type:"stripe"}},{name:"Waffo Pancake",template:{icon:eT("waffo_pancake"),name:"Waffo Pancake",type:"waffo_pancake"}},{name:i("Custom Epay method"),template:{icon:"LuCreditCard",min_topup:"50",name:"自定义1",type:"custom1"}}],[s,l]=(0,F.useState)(""),[c,d]=(0,F.useState)(!1),[u,p]=(0,F.useState)(null),m=(0,F.useMemo)(()=>(0,eo.Cz)(t,{fallback:[],validator:es.cy,validatorMessage:"Payment methods must be a JSON array",context:"payment methods"}).filter(e=>"object"==typeof e&&null!==e&&"name"in e&&"type"in e&&"string"==typeof e.name&&"string"==typeof e.type&&(!("icon"in e)||"string"==typeof e.icon)&&(!("min_topup"in e)||"string"==typeof e.min_topup)&&(!("color"in e)||"string"==typeof e.color)),[t]),g=(0,F.useMemo)(()=>{if(!s)return m;let e=s.toLowerCase();return m.filter(t=>t.name.toLowerCase().includes(e)||t.type.toLowerCase().includes(e)||eI(t).toLowerCase().includes(e))},[m,s]),f=e=>{n(JSON.stringify((0,eo.Cz)(t,{fallback:[],validator:es.cy,silent:!0}).filter(t=>!("object"==typeof t&&null!==t&&"name"in t&&"type"in t&&t.name===e.name&&t.type===e.type)),null,2))},y=e=>{p(e),d(!0)};return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center",children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(ep.A,{className:"text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4"}),(0,a.jsx)(h.p,{placeholder:i("Search payment methods..."),value:s,onChange:e=>l(e.target.value),className:"pl-9"})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsxs)(ex.AM,{children:[(0,a.jsxs)(ex.Wv,{render:(0,a.jsx)(G.$,{variant:"outline",className:"flex-1 sm:flex-none"}),children:[(0,a.jsx)(ev.A,{className:"h-4 w-4 sm:mr-2"}),(0,a.jsx)("span",{className:"sm:inline",children:i("Templates")})]}),(0,a.jsx)(ex.hl,{className:"w-60",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:i("Quick insert payment entries")}),(0,a.jsx)("div",{className:"space-y-1",children:o.map(e=>(0,a.jsxs)(G.$,{type:"button",variant:"ghost",className:"w-full justify-start text-sm",onClick:a=>{var i;let o;a.preventDefault(),a.stopPropagation(),i=e.template,(o=(0,eo.Cz)(t,{fallback:[],validator:es.cy,silent:!0})).some(e=>"object"==typeof e&&null!==e&&"type"in e&&"name"in e&&e.type===i.type&&e.name===i.name)||(o.push(i),n(JSON.stringify(o,null,2)))},children:[(0,a.jsx)(Z.A,{className:"mr-2 h-3 w-3"}),e.name]},e.name))})]})})]}),(0,a.jsxs)(G.$,{type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),p(null),d(!0)},className:"flex-1 sm:flex-none",children:[(0,a.jsx)(Z.A,{className:"h-4 w-4 sm:mr-2"}),(0,a.jsx)("span",{className:"sm:inline",children:i("Add method")})]})]})]}),0===g.length?(0,a.jsx)("div",{className:"text-muted-foreground rounded-lg border border-dashed p-8 text-center text-sm",children:s?i("No payment methods match your search"):i('No payment methods configured. Click "Add method" or use templates to get started.')}):(0,a.jsxs)("div",{className:"rounded-md border",children:[(0,a.jsx)(en.h,{className:"hidden rounded-none border-0 md:block",data:g,getRowKey:(e,t)=>`${e.type}-${t}`,columns:[{id:"name",header:i("Name"),cellClassName:"font-medium",cell:e=>e.name},{id:"type",header:i("Payment type key"),cell:e=>(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-sm",children:e.type})},{id:"icon",header:i("Icon"),cell:e=>{let t=eI(e);return t?(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(ek.x,{name:t,className:"text-muted-foreground size-5 shrink-0",title:t}),(0,a.jsx)("span",{className:"text-muted-foreground truncate font-mono text-sm",children:t})]}):(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:"—"})}},{id:"min-top-up",header:i("Min Top-up"),cell:e=>e.min_topup?(0,a.jsx)("span",{className:"font-mono text-sm",children:e.min_topup}):(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:"—"})},{id:"actions",header:i("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)(ea._,{editLabel:i("Edit"),deleteLabel:i("Delete"),menuLabel:i("Open menu"),onEdit:()=>y(e),onDelete:()=>f(e)})}]}),(0,a.jsx)("div",{className:"divide-y md:hidden",children:g.map(e=>{let t=eI(e),n=[e.type,e.name,e.icon,e.min_topup,e.color].filter(Boolean).join("-");return(0,a.jsxs)("div",{className:"p-4",children:[(0,a.jsxs)("div",{className:"mb-3 flex items-start justify-between",children:[(0,a.jsxs)("div",{className:"flex-1",children:[(0,a.jsx)("div",{className:"mb-1 font-medium",children:e.name}),(0,a.jsx)("code",{className:"bg-muted rounded px-1.5 py-0.5 text-xs",children:e.type})]}),(0,a.jsxs)("div",{className:"flex gap-1",children:[(0,a.jsx)(G.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),y(e)},children:(0,a.jsx)(ee.A,{className:"h-4 w-4"})}),(0,a.jsx)(G.$,{type:"button",variant:"ghost",size:"sm",onClick:t=>{t.preventDefault(),t.stopPropagation(),f(e)},children:(0,a.jsx)(et.A,{className:"h-4 w-4"})})]})]}),(0,a.jsxs)("div",{className:"space-y-2 text-sm",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-muted-foreground min-w-20",children:i("Icon")}),t?(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)(ek.x,{name:t,className:"text-muted-foreground size-5 shrink-0",title:t}),(0,a.jsx)("span",{className:"text-muted-foreground truncate font-mono text-xs",children:t})]}):(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:"—"})]}),e.min_topup&&(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-muted-foreground min-w-20",children:i("Min Top-up:")}),(0,a.jsx)("span",{className:"font-mono",children:e.min_topup})]})]})]},n)})})]}),(0,a.jsx)(eS,{open:c,onOpenChange:d,onSave:e=>{let a=[...(0,eo.Cz)(t,{fallback:[],validator:es.cy,silent:!0})];if(u){let t=a.findIndex(e=>"object"==typeof e&&null!==e&&"name"in e&&"type"in e&&e.name===u.name&&e.type===u.type);-1!==t?a[t]=e:a.push(e)}else a.push(e);n(JSON.stringify(a,null,2))},editData:u})]})}var eN=n(52757),ej=n(22990);async function eM(e,t){return(await ej.FH.get("/api/option/waffo-pancake/catalog",{params:{merchant_id:e,private_key:t}})).data}async function eD(e){return(await ej.FH.post("/api/option/waffo-pancake/pair",{merchant_id:e.merchantID,private_key:e.privateKey,return_url:e.returnURL})).data}async function eO(e){return(await ej.FH.post("/api/option/waffo-pancake/save",{merchant_id:e.merchantID,private_key:e.privateKey,return_url:e.returnURL,store_id:e.storeID,product_id:e.productID})).data}function eL(e){let t,{defaultValues:n,values:i,onValueChange:o,selectedBinding:s,savedBinding:c,onSelectedBindingChange:d}=e,{t:u}=(0,r.Bd)(),[p,m]=F.useState("idle"),[g,f]=F.useState([]),[y,b]=F.useState(!1),v=s.storeID,k=s.productID,x=c.storeID,w=c.productID,C=i.WaffoPancakeReturnURL,A=F.useRef(n),S=F.useMemo(()=>JSON.stringify(n),[n]),P=F.useRef(""),T=F.useRef(0),I=F.useRef(!1);F.useEffect(()=>{let e=JSON.parse(S);A.current=e,I.current||(I.current=!0,P.current=`${e.WaffoPancakeMerchantID.trim()}|${e.WaffoPancakePrivateKey.trim()}`)},[S]);let R=F.useMemo(()=>v?g.find(e=>e.id===v)?.onetimeProducts??[]:[],[g,v]),N=F.useMemo(()=>{let e=g.map(e=>({value:e.id,label:`${e.name} (${e.id})`}));return v&&!g.some(e=>e.id===v)&&e.push({value:v,label:v}),e},[g,v]),j=F.useMemo(()=>{let e=R.map(e=>({value:e.id,label:`${e.name} (${e.id})`}));return k&&!R.some(e=>e.id===k)&&e.push({value:k,label:k}),e},[R,k]),M=F.useCallback(async(e,t,n)=>{let a,i=++T.current;try{let n=await eM(e,t);if(i!==T.current)return;if(n?.message==="success"&&"object"==typeof n.data&&n.data)a=n.data.stores??[];else{let e=(0,$.ck)(n)??("string"==typeof n?.data?n.data:void 0);(0,Y.Q)(n,void 0,{title:e?`${u("Credentials verification failed")}: ${e}`:u("Credentials verification failed — double-check Merchant ID and API private key.")}),m("idle");return}}catch(e){if(i!==T.current)return;(0,Y.Q)(e,`${u("Credentials verification failed")}: ${e instanceof Error?e.message:String(e)}`),m("idle");return}if(i===T.current){if(f(a),n)d({storeID:n.storeID??"",productID:n.productID??""});else{let e=a.find(e=>e.onetimeProducts.some(e=>e.id===w));if(e&&w)d({storeID:e.id,productID:w});else{let e=a.find(e=>e.onetimeProducts.length>0);e?d({storeID:e.id,productID:e.onetimeProducts[0].id}):d({storeID:"",productID:""})}}m("idle")}},[d,w,u]),D=i.WaffoPancakeMerchantID||"",O=i.WaffoPancakePrivateKey||"";F.useEffect(()=>{let e=D.trim(),t=O.trim();if(!e||!t)return;let n=`${e}|${t}`;if(n===P.current)return;let a=setTimeout(()=>{P.current=n,m("verifying"),M(e,t)},800);return()=>clearTimeout(a)},[D,O,M]);let L=F.useRef(!1);F.useEffect(()=>{if(L.current||!n.WaffoPancakeMerchantID.trim())return;L.current=!0;let e=window.setTimeout(()=>{m("verifying"),M("","")},0);return()=>window.clearTimeout(e)},[n.WaffoPancakeMerchantID,M]);let q=async()=>{let e,t;if(!H)return void l.oR.error(u("Fill in both Merchant ID and API Private Key before creating."));let{merchantID:a,privateKey:o}=(e=(i.WaffoPancakeMerchantID||"").trim(),t=(i.WaffoPancakePrivateKey||"").trim(),e!==(n.WaffoPancakeMerchantID||"").trim()||t.length>0?{merchantID:e,privateKey:t}:{merchantID:"",privateKey:""}),s=(0,eN.UC)(C.trim());if(s||window.confirm(u("Payment return URL is empty. Create the product without a SuccessURL redirect?"))){b(!0);try{let e=await eD({merchantID:a,privateKey:o,returnURL:s});if(e?.message==="success"&&"object"==typeof e.data&&e.data){let t=e.data;m("verifying"),await M(a,o,{storeID:t.store_id,productID:t.product_id}),l.oR.success(`${u("Store + product created")}: ${t.store_id} / ${t.product_id}`);return}let t=e&&"object"==typeof e.data&&null!==e.data?e.data:null;t?.orphan_store&&t.store_id&&(m("verifying"),await M(a,o,{storeID:t.store_id,productID:""}));let n=t?.error??(0,$.ck)(e)??("string"==typeof e?.data?e.data:void 0);(0,Y.Q)(e,void 0,{title:n?`${u("Creation failed")}: ${n}`:u("Creation failed")})}catch(e){(0,Y.Q)(e,`${u("Creation failed")}: ${e instanceof Error?e.message:String(e)}`)}finally{b(!1)}}},U="verifying"===p,E=(n.WaffoPancakeMerchantID||"").trim(),_=D.trim(),B=O.trim(),V=_!==E||B.length>0,W=E.length>0,H=V?_.length>0&&B.length>0:W,J=g.length>0;return t=H?U?u("Verifying credentials and pulling stores from your Pancake account..."):J?u("Mint a fresh pair below — or pick an existing one further down. Click Save when ready."):u("No stores on this merchant yet. Set a return URL and click Create to mint your first pair."):u("Fill in the credentials above to begin."),(0,a.jsxs)("div",{className:"space-y-4 pt-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:u("Waffo Pancake MoR")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:u("Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.")})]}),(0,a.jsxs)("div",{className:"grid min-w-0 gap-x-5 gap-y-4 lg:grid-cols-2",children:[(0,a.jsxs)("div",{className:"rounded-md bg-blue-50 p-4 text-sm text-blue-900 lg:col-span-2 dark:bg-blue-950 dark:text-blue-100",children:[(0,a.jsx)("p",{className:"mb-2 font-medium",children:u("Webhook Configuration:")}),(0,a.jsxs)("ul",{className:"list-inside list-disc space-y-1",children:[(0,a.jsxs)("li",{children:[u("Webhook URL (Test):")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:"/api/waffo-pancake/webhook/test"})]}),(0,a.jsxs)("li",{children:[u("Webhook URL (Production):")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:"/api/waffo-pancake/webhook/prod"})]}),(0,a.jsx)("li",{children:u("Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.")}),(0,a.jsxs)("li",{children:[u("Configure at:")," ",(0,a.jsx)("a",{href:"https://pancake.waffo.ai/merchant/dashboard",target:"_blank",rel:"noreferrer",className:"underline hover:no-underline",children:u("Waffo Pancake Dashboard")})]})]})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:u("Merchant ID")}),(0,a.jsx)(h.p,{placeholder:"MER_xxx",autoComplete:"off",value:i.WaffoPancakeMerchantID,onChange:e=>o("WaffoPancakeMerchantID",e.target.value)})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:u("API Private Key")}),(0,a.jsx)(K.T,{rows:4,placeholder:u("Leave blank to keep the existing key"),autoComplete:"new-password",value:i.WaffoPancakePrivateKey,onChange:e=>o("WaffoPancakePrivateKey",e.target.value),className:"font-mono text-xs"}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:u("The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.")})]}),(0,a.jsxs)("div",{className:"space-y-4 pt-2 lg:col-span-2",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-medium",children:u("Bind a Pancake store + product")}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:t})]}),(0,a.jsxs)("div",{className:"rounded-md border border-blue-200 bg-blue-50 p-3 text-xs text-blue-900 dark:border-blue-900/60 dark:bg-blue-950/40 dark:text-blue-100",children:[(0,a.jsx)("p",{className:"mb-1 font-medium",children:u("Why only one store + product?")}),(0,a.jsxs)("ul",{className:"list-inside list-disc space-y-1",children:[(0,a.jsx)("li",{children:u("The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.")}),(0,a.jsx)("li",{children:u("The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.")}),(0,a.jsx)("li",{children:u('Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the "+ Create" button there).')})]})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)(z.J,{children:u("Payment return URL")}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(h.p,{placeholder:"https://example.com/wallet",value:C,onChange:e=>o("WaffoPancakeReturnURL",e.target.value),className:"flex-1"}),(0,a.jsx)(G.$,{type:"button",variant:"outline",onClick:q,disabled:y||U||!H,className:"shrink-0",children:y?u("Creating..."):`+ ${u("Create")} new-api-store + new-api-charge-product`})]}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:u("Used as SuccessURL on the new product. You'll be prompted to confirm if left blank.")})]}),J?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"relative flex items-center py-1",children:[(0,a.jsx)("div",{className:"flex-1 border-t"}),(0,a.jsx)("span",{className:"text-muted-foreground px-3 text-[10px] font-medium tracking-[0.2em] uppercase",children:u("or pick existing")}),(0,a.jsx)("div",{className:"flex-1 border-t"})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:u("Store")}),(0,a.jsx)(ew.G3,{options:N,value:v,onValueChange:e=>{d({storeID:e??"",productID:""})},className:"w-full",placeholder:u("Select a store")})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:u("Product")}),(0,a.jsx)(ew.G3,{options:j,value:k,onValueChange:e=>d(t=>({...t,productID:e??""})),disabled:!v||0===j.length,className:"w-full",placeholder:u("Select a product")})]})]})]}):null,(0,a.jsx)("div",{className:"flex items-center gap-3",children:x||w?(0,a.jsxs)("div",{className:"text-muted-foreground flex flex-wrap gap-x-3 gap-y-1 text-xs",children:[x?(0,a.jsxs)("span",{children:[u("Bound store:")," ",(0,a.jsx)("code",{className:"bg-muted rounded px-1 py-0.5",children:x})]}):null,w?(0,a.jsxs)("span",{children:[u("Bound product:")," ",(0,a.jsx)("code",{className:"bg-muted rounded px-1 py-0.5",children:w})]}):null]}):null})]})]})]})}var eq=n(38939);function eU(e){let{values:t,onValueChange:n,payMethods:i,onPayMethodsChange:o}=e,{t:s}=(0,r.Bd)(),c=(0,F.useRef)(null),[d,u]=(0,F.useState)(!1),[p,g]=(0,F.useState)(-1),[f,y]=(0,F.useState)({name:"",icon:"",payMethodType:"",payMethodName:""});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"space-y-4 pt-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:s("Waffo Aggregator Gateway")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:s("Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.")})]}),(0,a.jsx)(R.Fc,{children:(0,a.jsx)(R.TN,{className:"text-xs",children:s("Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.")})}),(0,a.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,a.jsx)(m.ew,{checked:t.WaffoEnabled,onCheckedChange:e=>n("WaffoEnabled",e),label:s("Enable Waffo"),className:"py-0"}),(0,a.jsx)(m.ew,{checked:t.WaffoSandbox,onCheckedChange:e=>n("WaffoSandbox",e),label:s("Sandbox mode"),className:"py-0"})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("API Key (Production)")}),(0,a.jsx)(h.p,{type:"password",value:t.WaffoApiKey,onChange:e=>n("WaffoApiKey",e.target.value)})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("API Key (Sandbox)")}),(0,a.jsx)(h.p,{type:"password",value:t.WaffoSandboxApiKey,onChange:e=>n("WaffoSandboxApiKey",e.target.value)})]})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("Merchant ID")}),(0,a.jsx)(h.p,{value:t.WaffoMerchantId,onChange:e=>n("WaffoMerchantId",e.target.value)})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("RSA Private Key (Production)")}),(0,a.jsx)(K.T,{rows:3,value:t.WaffoPrivateKey,onChange:e=>n("WaffoPrivateKey",e.target.value),className:"font-mono text-xs"})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("RSA Private Key (Sandbox)")}),(0,a.jsx)(K.T,{rows:3,value:t.WaffoSandboxPrivateKey,onChange:e=>n("WaffoSandboxPrivateKey",e.target.value),className:"font-mono text-xs"})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("Waffo Public Key (Production)")}),(0,a.jsx)(K.T,{rows:3,value:t.WaffoPublicCert,onChange:e=>n("WaffoPublicCert",e.target.value),className:"font-mono text-xs"})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("Waffo Public Key (Sandbox)")}),(0,a.jsx)(K.T,{rows:3,value:t.WaffoSandboxPublicCert,onChange:e=>n("WaffoSandboxPublicCert",e.target.value),className:"font-mono text-xs"})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-4",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("Currency")}),(0,a.jsx)(h.p,{value:t.WaffoCurrency,disabled:!0})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("Unit price (USD)")}),(0,a.jsx)(h.p,{type:"number",step:.1,min:0,value:t.WaffoUnitPrice,onChange:e=>n("WaffoUnitPrice",""===e.target.value?0:e.target.valueAsNumber)})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("Minimum top-up quantity")}),(0,a.jsx)(h.p,{type:"number",min:1,value:t.WaffoMinTopUp,onChange:e=>n("WaffoMinTopUp",""===e.target.value?1:e.target.valueAsNumber)})]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("Callback notification URL")}),(0,a.jsx)(h.p,{placeholder:"https://example.com/api/waffo/webhook",value:t.WaffoNotifyUrl,onChange:e=>n("WaffoNotifyUrl",e.target.value)})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("Payment return URL")}),(0,a.jsx)(h.p,{placeholder:"https://example.com/wallet",value:t.WaffoReturnUrl,onChange:e=>n("WaffoReturnUrl",e.target.value)})]})]}),(0,a.jsx)(eq.w,{}),(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)("h4",{className:"font-medium",children:s("Payment Methods")}),(0,a.jsxs)(G.$,{type:"button",variant:"outline",size:"sm",onClick:()=>{g(-1),y({name:"",icon:"",payMethodType:"",payMethodName:""}),u(!0)},children:[(0,a.jsx)(Z.A,{className:"mr-1 h-3 w-3"}),s("Add payment method")]})]}),(0,a.jsx)(en.h,{data:i,emptyClassName:"text-muted-foreground py-8",emptyContent:s("No payment methods configured"),columns:[{id:"name",header:s("Display name"),cell:e=>e.name},{id:"icon",header:s("Icon"),cell:e=>e.icon?(0,a.jsx)("img",{src:e.icon,alt:e.name,className:"h-6 w-6 rounded object-contain"}):(0,a.jsx)("span",{className:"text-muted-foreground",children:"-"})},{id:"type",header:s("Payment method type"),cell:e=>e.payMethodType||"-"},{id:"method",header:s("Payment method name"),cell:e=>e.payMethodName||"-"},{id:"actions",header:s("Actions"),className:"text-right",cellClassName:"text-right",cell:(e,t)=>(0,a.jsx)(ea._,{editLabel:s("Edit"),deleteLabel:s("Delete"),menuLabel:s("Open menu"),onEdit:()=>{g(t),y({...i[t]}),u(!0)},onDelete:()=>o(e=>e.filter((e,n)=>n!==t))})}]})]}),(0,a.jsx)(er.l,{open:d,onOpenChange:u,title:-1===p?s("Add payment method"):s("Edit payment method"),contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(G.$,{type:"button",variant:"outline",onClick:()=>u(!1),children:s("Cancel")}),(0,a.jsx)(G.$,{type:"button",onClick:()=>{if(!f.name.trim())return l.oR.error(s("Payment method name is required"));-1===p?o(e=>[...e,f]):o(e=>e.map((e,t)=>t===p?f:e)),u(!1)},children:s("Confirm")})]}),children:(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{required:!0,children:s("Display name")}),(0,a.jsx)(h.p,{value:f.name,onChange:e=>y(t=>({...t,name:e.target.value}))})]}),(0,a.jsxs)("div",{className:"grid gap-2",children:[(0,a.jsx)(z.J,{children:s("Icon")}),(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[f.icon?(0,a.jsx)("img",{src:f.icon,alt:f.name||s("Icon"),className:"h-10 w-10 rounded border object-contain p-1"}):(0,a.jsx)("div",{className:"bg-muted text-muted-foreground flex h-10 w-10 items-center justify-center rounded border text-xs",children:s("Icon")}),(0,a.jsx)("input",{ref:c,type:"file",accept:"image/png,image/jpeg,image/svg+xml,image/webp",className:"hidden",onChange:e=>{let t=e.target.files?.[0];if(!t)return;if(t.size>102400){l.oR.error(s("Icon file must be 100 KB or smaller")),e.target.value="";return}let n=new FileReader;n.addEventListener("load",()=>{y(e=>({...e,icon:"string"==typeof n.result?n.result:""}))}),n.readAsDataURL(t),e.target.value=""}}),(0,a.jsx)(G.$,{type:"button",variant:"outline",onClick:()=>c.current?.click(),children:s("Upload")}),f.icon?(0,a.jsx)(G.$,{type:"button",variant:"outline",onClick:()=>y(e=>({...e,icon:""})),children:s("Clear")}):null]}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:s("Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.")})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("Payment method type")}),(0,a.jsx)(h.p,{value:f.payMethodType,onChange:e=>y(t=>({...t,payMethodType:e.target.value})),placeholder:"CREDITCARD,DEBITCARD"})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(z.J,{children:s("Payment method name")}),(0,a.jsx)(h.p,{value:f.payMethodName,onChange:e=>y(t=>({...t,payMethodName:e.target.value}))})]})]})})]})}let eE=c.Ik({PayAddress:c.Yj().refine(e=>{let t=e.trim();return!t||/^https?:\/\//.test(t)},"Provide a valid callback URL starting with http:// or https://"),EpayId:c.Yj(),EpayKey:c.Yj(),Price:d.ai().min(0),MinTopUp:d.ai().min(0),CustomCallbackAddress:c.Yj().refine(function(e){let t=e.trim();if(!t)return!0;try{let e=new URL(t),n="http:"===e.protocol||"https:"===e.protocol,a=""===e.pathname||"/"===e.pathname;return n&&a&&!e.search&&!e.hash}catch{return!1}},"Enter only a top-level callback domain, for example https://api.example.com, without any path."),PayMethods:c.Yj().superRefine((e,t)=>{let n=(0,eN.NI)(e);n&&t.addIssue({code:k.eq.custom,message:n})}),AmountOptions:c.Yj().superRefine((e,t)=>{let n=(0,eN.NI)(e,e=>Array.isArray(e));n&&t.addIssue({code:k.eq.custom,message:n})}),AmountDiscount:c.Yj().superRefine((e,t)=>{let n=(0,eN.NI)(e,e=>!!e&&"object"==typeof e&&!Array.isArray(e));n&&t.addIssue({code:k.eq.custom,message:n})}),StripeApiSecret:c.Yj(),StripeWebhookSecret:c.Yj(),StripePriceId:c.Yj(),StripeUnitPrice:d.ai().min(0),StripeMinTopUp:d.ai().min(0),StripePromotionCodesEnabled:c.zM(),CreemApiKey:c.Yj(),CreemWebhookSecret:c.Yj(),CreemTestMode:c.zM(),CreemProducts:c.Yj().superRefine((e,t)=>{let n=(0,eN.NI)(e,e=>Array.isArray(e));n&&t.addIssue({code:k.eq.custom,message:n})}),WaffoEnabled:c.zM(),WaffoApiKey:c.Yj(),WaffoPrivateKey:c.Yj(),WaffoPublicCert:c.Yj(),WaffoSandboxPublicCert:c.Yj(),WaffoSandboxApiKey:c.Yj(),WaffoSandboxPrivateKey:c.Yj(),WaffoSandbox:c.zM(),WaffoMerchantId:c.Yj(),WaffoCurrency:c.Yj(),WaffoUnitPrice:d.ai().min(0),WaffoMinTopUp:d.ai().min(1),WaffoNotifyUrl:c.Yj(),WaffoReturnUrl:c.Yj(),WaffoPancakeMerchantID:c.Yj(),WaffoPancakePrivateKey:c.Yj(),WaffoPancakeReturnURL:c.Yj()}),eF="mt-6 min-w-0";function e_(e){try{let t=JSON.parse(e||"[]");return Array.isArray(t)?t:[]}catch{return[]}}function eB(e){let{defaultValues:t,waffoDefaultValues:n,waffoPancakeDefaultValues:i,waffoPancakeProvisionedStoreID:c,waffoPancakeProvisionedProductID:d,complianceDefaults:b}=e,{t:v}=(0,r.Bd)(),k=(0,O.jE)(),x=(0,y.M)(),w=F.useMemo(()=>({...t,...n,...i}),[t,n,i]),C=F.useRef(w),A=F.useMemo(()=>JSON.stringify(w),[w]),[S,T]=F.useState(!0),[I,N]=F.useState(!0),[j,M]=F.useState(!0),[D,B]=F.useState(!0),[V,z]=F.useState(!1),[K,H]=F.useState(()=>e_(n.WaffoPayMethods)),[Z,ee]=F.useState({storeID:c??"",productID:d??""}),[et,en]=F.useState({storeID:c??"",productID:d??""});F.useEffect(()=>{H(e_(n.WaffoPayMethods))},[n.WaffoPayMethods]),F.useEffect(()=>{let e={storeID:c??"",productID:d??""};ee(e),en(e)},[d,c]);let ea=F.useMemo(()=>[v("You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas."),v("You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization."),v("If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection."),v("You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties."),v("You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior."),v("You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.")],[v]),ei=v("I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior."),eo=F.useMemo(()=>[{type:"input",text:v("I have read and understood the above compliance reminder")},{type:"static",text:v(",")},{type:"input",text:v("acknowledge the related legal risks")},{type:"static",text:v(",and ")},{type:"input",text:v("confirm that I bear legal responsibility arising from deployment")},{type:"static",text:v("、")},{type:"input",text:v("operation and charging behavior")}],[v]),es=b.confirmed&&"v1"===b.termsVersion,er=(0,L.n)({mutationFn:X.Ss,onSuccess:e=>{e.success?(l.oR.success(v("Compliance confirmed successfully")),z(!1),k.invalidateQueries({queryKey:["system-options"]})):(0,Y.Q)(e,v("Failed to confirm compliance"))},onError:e=>{(0,Y.Q)(e,v("Failed to confirm compliance"))}}),el=(0,s.mN)({resolver:(0,o.u)(eE),mode:"onChange",defaultValues:{...w,PayMethods:(0,eN.oE)(w.PayMethods),AmountOptions:(0,eN.oE)(w.AmountOptions),AmountDiscount:(0,eN.oE)(w.AmountDiscount),CreemProducts:(0,eN.oE)(w.CreemProducts)}}),{isSubmitting:ec}=el.formState,eu=F.useCallback((e,t)=>{el.setValue(e,t,{shouldDirty:!0,shouldValidate:!0})},[el]),ep=F.useCallback((e,t)=>{eu(e,t)},[eu]),em=F.useCallback((e,t)=>{eu(e,t)},[eu]);F.useEffect(()=>{let e=JSON.parse(A);C.current=e,el.reset({...e,PayMethods:(0,eN.oE)(e.PayMethods),AmountOptions:(0,eN.oE)(e.AmountOptions),AmountDiscount:(0,eN.oE)(e.AmountDiscount),CreemProducts:(0,eN.oE)(e.CreemProducts)})},[A,el]);let eg=async e=>{let t={PayAddress:(0,eN.UC)(e.PayAddress),EpayId:e.EpayId.trim(),EpayKey:e.EpayKey.trim(),Price:e.Price,MinTopUp:e.MinTopUp,CustomCallbackAddress:(0,eN.UC)(e.CustomCallbackAddress),PayMethods:e.PayMethods.trim(),AmountOptions:e.AmountOptions.trim(),AmountDiscount:e.AmountDiscount.trim(),StripeApiSecret:e.StripeApiSecret.trim(),StripeWebhookSecret:e.StripeWebhookSecret.trim(),StripePriceId:e.StripePriceId.trim(),StripeUnitPrice:e.StripeUnitPrice,StripeMinTopUp:e.StripeMinTopUp,StripePromotionCodesEnabled:e.StripePromotionCodesEnabled,CreemApiKey:e.CreemApiKey.trim(),CreemWebhookSecret:e.CreemWebhookSecret.trim(),CreemTestMode:e.CreemTestMode,CreemProducts:e.CreemProducts.trim(),WaffoEnabled:e.WaffoEnabled,WaffoSandbox:e.WaffoSandbox,WaffoMerchantId:e.WaffoMerchantId.trim(),WaffoCurrency:e.WaffoCurrency.trim()||"USD",WaffoUnitPrice:e.WaffoUnitPrice,WaffoMinTopUp:e.WaffoMinTopUp,WaffoNotifyUrl:e.WaffoNotifyUrl.trim(),WaffoReturnUrl:e.WaffoReturnUrl.trim(),WaffoPublicCert:e.WaffoPublicCert.trim(),WaffoSandboxPublicCert:e.WaffoSandboxPublicCert.trim(),WaffoApiKey:e.WaffoApiKey.trim(),WaffoPrivateKey:e.WaffoPrivateKey.trim(),WaffoSandboxApiKey:e.WaffoSandboxApiKey.trim(),WaffoSandboxPrivateKey:e.WaffoSandboxPrivateKey.trim(),WaffoPayMethods:JSON.stringify(K),WaffoPancakeMerchantID:e.WaffoPancakeMerchantID.trim(),WaffoPancakePrivateKey:e.WaffoPancakePrivateKey.trim(),WaffoPancakeReturnURL:(0,eN.UC)(e.WaffoPancakeReturnURL.trim())},a={PayAddress:(0,eN.UC)(C.current.PayAddress),EpayId:C.current.EpayId.trim(),EpayKey:C.current.EpayKey.trim(),Price:C.current.Price,MinTopUp:C.current.MinTopUp,CustomCallbackAddress:(0,eN.UC)(C.current.CustomCallbackAddress),PayMethods:C.current.PayMethods.trim(),AmountOptions:C.current.AmountOptions.trim(),AmountDiscount:C.current.AmountDiscount.trim(),StripeApiSecret:C.current.StripeApiSecret.trim(),StripeWebhookSecret:C.current.StripeWebhookSecret.trim(),StripePriceId:C.current.StripePriceId.trim(),StripeUnitPrice:C.current.StripeUnitPrice,StripeMinTopUp:C.current.StripeMinTopUp,StripePromotionCodesEnabled:C.current.StripePromotionCodesEnabled,CreemApiKey:C.current.CreemApiKey.trim(),CreemWebhookSecret:C.current.CreemWebhookSecret.trim(),CreemTestMode:C.current.CreemTestMode,CreemProducts:C.current.CreemProducts.trim(),WaffoEnabled:C.current.WaffoEnabled,WaffoSandbox:C.current.WaffoSandbox,WaffoMerchantId:C.current.WaffoMerchantId.trim(),WaffoCurrency:C.current.WaffoCurrency.trim()||"USD",WaffoUnitPrice:C.current.WaffoUnitPrice,WaffoMinTopUp:C.current.WaffoMinTopUp,WaffoNotifyUrl:C.current.WaffoNotifyUrl.trim(),WaffoReturnUrl:C.current.WaffoReturnUrl.trim(),WaffoPublicCert:C.current.WaffoPublicCert.trim(),WaffoSandboxPublicCert:C.current.WaffoSandboxPublicCert.trim(),WaffoApiKey:C.current.WaffoApiKey.trim(),WaffoPrivateKey:C.current.WaffoPrivateKey.trim(),WaffoSandboxApiKey:C.current.WaffoSandboxApiKey.trim(),WaffoSandboxPrivateKey:C.current.WaffoSandboxPrivateKey.trim(),WaffoPayMethods:JSON.stringify(e_(n.WaffoPayMethods)),WaffoPancakeMerchantID:C.current.WaffoPancakeMerchantID.trim(),WaffoPancakePrivateKey:C.current.WaffoPancakePrivateKey.trim(),WaffoPancakeReturnURL:(0,eN.UC)(C.current.WaffoPancakeReturnURL.trim())},i=[];t.PayAddress!==a.PayAddress&&i.push({key:"PayAddress",value:t.PayAddress}),t.EpayId!==a.EpayId&&i.push({key:"EpayId",value:t.EpayId}),t.EpayKey&&t.EpayKey!==a.EpayKey&&i.push({key:"EpayKey",value:t.EpayKey}),t.Price!==a.Price&&i.push({key:"Price",value:t.Price}),t.MinTopUp!==a.MinTopUp&&i.push({key:"MinTopUp",value:t.MinTopUp}),t.CustomCallbackAddress!==a.CustomCallbackAddress&&i.push({key:"CustomCallbackAddress",value:t.CustomCallbackAddress}),(0,eN.s$)(t.PayMethods)!==(0,eN.s$)(a.PayMethods)&&i.push({key:"PayMethods",value:t.PayMethods}),(0,eN.s$)(t.AmountOptions)!==(0,eN.s$)(a.AmountOptions)&&i.push({key:"payment_setting.amount_options",value:t.AmountOptions}),(0,eN.s$)(t.AmountDiscount)!==(0,eN.s$)(a.AmountDiscount)&&i.push({key:"payment_setting.amount_discount",value:t.AmountDiscount}),t.StripeApiSecret&&t.StripeApiSecret!==a.StripeApiSecret&&i.push({key:"StripeApiSecret",value:t.StripeApiSecret}),t.StripeWebhookSecret&&t.StripeWebhookSecret!==a.StripeWebhookSecret&&i.push({key:"StripeWebhookSecret",value:t.StripeWebhookSecret}),t.StripePriceId!==a.StripePriceId&&i.push({key:"StripePriceId",value:t.StripePriceId}),t.StripeUnitPrice!==a.StripeUnitPrice&&i.push({key:"StripeUnitPrice",value:t.StripeUnitPrice}),t.StripeMinTopUp!==a.StripeMinTopUp&&i.push({key:"StripeMinTopUp",value:t.StripeMinTopUp}),t.StripePromotionCodesEnabled!==a.StripePromotionCodesEnabled&&i.push({key:"StripePromotionCodesEnabled",value:t.StripePromotionCodesEnabled}),t.CreemApiKey&&t.CreemApiKey!==a.CreemApiKey&&i.push({key:"CreemApiKey",value:t.CreemApiKey}),t.CreemWebhookSecret&&t.CreemWebhookSecret!==a.CreemWebhookSecret&&i.push({key:"CreemWebhookSecret",value:t.CreemWebhookSecret}),t.CreemTestMode!==a.CreemTestMode&&i.push({key:"CreemTestMode",value:t.CreemTestMode}),(0,eN.s$)(t.CreemProducts)!==(0,eN.s$)(a.CreemProducts)&&i.push({key:"CreemProducts",value:t.CreemProducts}),t.WaffoEnabled!==a.WaffoEnabled&&i.push({key:"WaffoEnabled",value:t.WaffoEnabled}),t.WaffoSandbox!==a.WaffoSandbox&&i.push({key:"WaffoSandbox",value:t.WaffoSandbox}),t.WaffoMerchantId!==a.WaffoMerchantId&&i.push({key:"WaffoMerchantId",value:t.WaffoMerchantId}),t.WaffoCurrency!==a.WaffoCurrency&&i.push({key:"WaffoCurrency",value:t.WaffoCurrency}),t.WaffoUnitPrice!==a.WaffoUnitPrice&&i.push({key:"WaffoUnitPrice",value:t.WaffoUnitPrice}),t.WaffoMinTopUp!==a.WaffoMinTopUp&&i.push({key:"WaffoMinTopUp",value:t.WaffoMinTopUp}),t.WaffoNotifyUrl!==a.WaffoNotifyUrl&&i.push({key:"WaffoNotifyUrl",value:t.WaffoNotifyUrl}),t.WaffoReturnUrl!==a.WaffoReturnUrl&&i.push({key:"WaffoReturnUrl",value:t.WaffoReturnUrl}),t.WaffoPublicCert!==a.WaffoPublicCert&&i.push({key:"WaffoPublicCert",value:t.WaffoPublicCert}),t.WaffoSandboxPublicCert!==a.WaffoSandboxPublicCert&&i.push({key:"WaffoSandboxPublicCert",value:t.WaffoSandboxPublicCert}),t.WaffoApiKey&&i.push({key:"WaffoApiKey",value:t.WaffoApiKey}),t.WaffoPrivateKey&&i.push({key:"WaffoPrivateKey",value:t.WaffoPrivateKey}),t.WaffoSandboxApiKey&&i.push({key:"WaffoSandboxApiKey",value:t.WaffoSandboxApiKey}),t.WaffoSandboxPrivateKey&&i.push({key:"WaffoSandboxPrivateKey",value:t.WaffoSandboxPrivateKey}),(0,eN.s$)(t.WaffoPayMethods)!==(0,eN.s$)(a.WaffoPayMethods)&&i.push({key:"WaffoPayMethods",value:t.WaffoPayMethods});let o=t.WaffoPancakeMerchantID!==a.WaffoPancakeMerchantID||t.WaffoPancakePrivateKey.length>0||t.WaffoPancakeReturnURL!==a.WaffoPancakeReturnURL||Z.storeID!==et.storeID||Z.productID!==et.productID;if(0===i.length&&!o)return void l.oR.info(v("No changes to save"));for(let e of i)await x.mutateAsync(e);if(o){if(!t.WaffoPancakeMerchantID)return void l.oR.error(v("Merchant ID is required"));if(!Z.storeID||!Z.productID)return void l.oR.error(v("Pick or create both a store and a product before saving."));try{let e=await eO({merchantID:t.WaffoPancakeMerchantID,privateKey:t.WaffoPancakePrivateKey,returnURL:t.WaffoPancakeReturnURL,storeID:Z.storeID,productID:Z.productID});if(e?.message==="success"&&"object"==typeof e.data&&e.data){let t=e.data,n={storeID:t.store_id,productID:t.product_id};en(n),ee(n),k.invalidateQueries({queryKey:["system-options"]}),l.oR.success(v("Waffo Pancake settings saved"));return}let n=(0,$.ck)(e)??("string"==typeof e?.data?e.data:void 0);(0,Y.Q)(e,void 0,{title:n?`${v("Waffo Pancake save failed")}: ${n}`:v("Waffo Pancake save failed")})}catch(e){(0,Y.Q)(e,`${v("Waffo Pancake save failed")}: ${e instanceof Error?e.message:String(e)}`)}}},ef=el.watch(),ey={WaffoEnabled:ef.WaffoEnabled,WaffoApiKey:ef.WaffoApiKey,WaffoPrivateKey:ef.WaffoPrivateKey,WaffoPublicCert:ef.WaffoPublicCert,WaffoSandboxPublicCert:ef.WaffoSandboxPublicCert,WaffoSandboxApiKey:ef.WaffoSandboxApiKey,WaffoSandboxPrivateKey:ef.WaffoSandboxPrivateKey,WaffoSandbox:ef.WaffoSandbox,WaffoMerchantId:ef.WaffoMerchantId,WaffoCurrency:ef.WaffoCurrency,WaffoUnitPrice:ef.WaffoUnitPrice,WaffoMinTopUp:ef.WaffoMinTopUp,WaffoNotifyUrl:ef.WaffoNotifyUrl,WaffoReturnUrl:ef.WaffoReturnUrl,WaffoPayMethods:JSON.stringify(K)},ev={WaffoPancakeMerchantID:ef.WaffoPancakeMerchantID,WaffoPancakePrivateKey:ef.WaffoPancakePrivateKey,WaffoPancakeReturnURL:ef.WaffoPancakeReturnURL};return(0,a.jsxs)(f.X,{title:v("Payment Gateway"),children:[es?(0,a.jsxs)(R.Fc,{className:"mb-6",children:[(0,a.jsx)(R.XL,{children:v("Compliance confirmed")}),(0,a.jsx)(R.TN,{children:v("Confirmed at {{time}} by user #{{userId}}",{time:b.confirmedAt?new Date(1e3*b.confirmedAt).toLocaleString():"-",userId:b.confirmedBy||"-"})})]}):(0,a.jsxs)(R.Fc,{variant:"destructive",className:"mb-6",children:[(0,a.jsx)(q.A,{className:"h-4 w-4"}),(0,a.jsx)(R.XL,{children:v("Compliance confirmation required")}),(0,a.jsx)(R.TN,{children:(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsx)("p",{children:v("Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.")}),(0,a.jsx)("ol",{className:"list-decimal space-y-1 pl-5",children:ea.map(e=>(0,a.jsx)("li",{children:e},e))})]})}),(0,a.jsx)(R.T2,{children:(0,a.jsx)(G.$,{type:"button",size:"sm",variant:"destructive",onClick:()=>z(!0),children:v("Confirm compliance")})})]}),(0,a.jsx)(J,{open:V,onOpenChange:z,title:v("Confirm compliance terms"),description:v("This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully."),items:ea,requiredText:ei,requiredTextParts:eo,inputPrompt:v("Please type the following text to confirm:"),inputPlaceholder:v("Type the confirmation text here"),mismatchHint:v("The entered text does not match the required text."),confirmText:v("Confirm and enable"),isLoading:er.isPending,onConfirm:()=>er.mutate()}),(0,a.jsx)(u.lV,{...el,children:(0,a.jsxs)(m.yt,{onSubmit:el.handleSubmit(eg),className:(0,W.cn)("gap-y-8",!es&&"pointer-events-none opacity-40"),"data-no-autosubmit":"true",children:[(0,a.jsx)(g.S2,{onSave:el.handleSubmit(eg),isSaving:x.isPending||ec,saveLabel:"Save all settings"}),(0,a.jsxs)(Q.tU,{defaultValue:"general",className:"min-w-0",children:[(0,a.jsx)("div",{className:"overflow-x-auto pb-1",children:(0,a.jsxs)(Q.j7,{className:"grid min-w-[44rem] grid-cols-6",children:[(0,a.jsx)(Q.Xi,{value:"general",children:v("General")}),(0,a.jsx)(Q.Xi,{value:"epay",children:"Epay"}),(0,a.jsx)(Q.Xi,{value:"stripe",children:v("Stripe")}),(0,a.jsx)(Q.Xi,{value:"creem",children:"Creem"}),(0,a.jsx)(Q.Xi,{value:"waffo-pancake",children:"Waffo Pancake"}),(0,a.jsx)(Q.Xi,{value:"waffo",children:"Waffo"})]})}),(0,a.jsx)(Q.av,{value:"general",className:eF,children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:v("General Settings")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:v("Shared configuration for all payment gateways")})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:el.control,name:"Price",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Price (local currency / USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:0,...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:v("How much to charge for each US dollar of balance (Epay)")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"MinTopUp",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Minimum top-up (USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:0,...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:v("Smallest USD amount users can recharge (Epay)")}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsx)(u.zB,{control:el.control,name:"PayMethods",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsxs)("div",{className:"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)(u.lR,{children:v("Payment methods")}),(0,a.jsx)(G.$,{type:"button",variant:"outline",size:"sm",onClick:()=>T(!S),className:"w-full sm:w-auto",children:S?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(U.A,{className:"mr-2 h-3 w-3"}),v("JSON Editor")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-3 w-3"}),v("Visual Editor")]})})]}),(0,a.jsx)(u.MJ,{children:S?(0,a.jsx)(eR,{value:t.value,onChange:t.onChange}):(0,a.jsx)(_.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,placeholder:v('[{"name":"支付宝","type":"alipay","icon":"SiAlipay"}]'),heightClassName:"h-40 min-h-40 max-h-40","aria-invalid":!!el.formState.errors.PayMethods})}),(0,a.jsx)(u.Rr,{children:v("Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2 md:items-start",children:[(0,a.jsx)(u.zB,{control:el.control,name:"AmountOptions",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsxs)("div",{className:"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)(u.lR,{children:v("Top-up amount options")}),(0,a.jsx)(G.$,{type:"button",variant:"outline",size:"sm",onClick:()=>N(!I),className:"w-full sm:w-auto",children:I?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(U.A,{className:"mr-2 h-3 w-3"}),v("JSON Editor")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-3 w-3"}),v("Visual Editor")]})})]}),(0,a.jsx)(u.MJ,{children:I?(0,a.jsx)(eh,{value:t.value,onChange:t.onChange}):(0,a.jsx)(_.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,placeholder:"[10, 20, 50, 100]",heightClassName:"h-40 min-h-40 max-h-40","aria-invalid":!!el.formState.errors.AmountOptions})}),(0,a.jsx)(u.Rr,{children:v("Preset recharge amounts (JSON array)")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"AmountDiscount",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsxs)("div",{className:"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)(u.lR,{children:v("Amount discount")}),(0,a.jsx)(G.$,{type:"button",variant:"outline",size:"sm",onClick:()=>M(!j),className:"w-full sm:w-auto",children:j?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(U.A,{className:"mr-2 h-3 w-3"}),v("JSON Editor")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-3 w-3"}),v("Visual Editor")]})})]}),(0,a.jsx)(u.MJ,{children:j?(0,a.jsx)(ed,{value:t.value,onChange:t.onChange}):(0,a.jsx)(_.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,placeholder:'{"100":0.95,"200":0.9}',heightClassName:"h-40 min-h-40 max-h-40","aria-invalid":!!el.formState.errors.AmountDiscount})}),(0,a.jsx)(u.Rr,{children:v("Discount map by recharge amount (JSON object)")}),(0,a.jsx)(u.C5,{})]})}})]})]})}),(0,a.jsx)(Q.av,{value:"epay",className:eF,children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:v("Epay Gateway")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:v("Configuration for Epay payment integration")})]}),(0,a.jsxs)(R.Fc,{children:[(0,a.jsx)(q.A,{className:"h-4 w-4"}),(0,a.jsx)(R.XL,{children:v("Epay safety reminder")}),(0,a.jsx)(R.TN,{children:v("Epay is a payment protocol, not a specific official website. Verify the provider yourself and do not trust random third-party Epay deployments.")})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:el.control,name:"PayAddress",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Epay endpoint")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:v("https://pay.example.com"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Base address provided by your Epay service")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"CustomCallbackAddress",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Callback address")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:v("https://gateway.example.com"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.")}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:el.control,name:"EpayId",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Epay merchant ID")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:"10001",autoComplete:"off",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"EpayKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Epay secret key")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"password",placeholder:v("Enter new key to update"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Leave blank unless rotating the secret")}),(0,a.jsx)(u.C5,{})]})}})]})]})}),(0,a.jsx)(Q.av,{value:"stripe",className:eF,children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:v("Stripe Gateway")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:v("Configuration for Stripe payment integration")})]}),(0,a.jsxs)("div",{className:"rounded-md bg-blue-50 p-4 text-sm text-blue-900 dark:bg-blue-950 dark:text-blue-100",children:[(0,a.jsx)("p",{className:"mb-2 font-medium",children:v("Webhook Configuration:")}),(0,a.jsxs)("ul",{className:"list-inside list-disc space-y-1",children:[(0,a.jsxs)("li",{children:[v("Webhook URL:")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:"/api/stripe/webhook"})]}),(0,a.jsxs)("li",{children:[v("Required events:")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:v("checkout.session.completed")})," ",v("and")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:v("checkout.session.expired")})]}),(0,a.jsxs)("li",{children:[v("Configure at:")," ",(0,a.jsx)("a",{href:"https://dashboard.stripe.com/developers",target:"_blank",rel:"noreferrer",className:"underline hover:no-underline",children:v("Stripe Dashboard")})]})]})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-3",children:[(0,a.jsx)(u.zB,{control:el.control,name:"StripeApiSecret",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("API secret")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"password",placeholder:v("sk_xxx or rk_xxx"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Stripe API key (leave blank unless updating)")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"StripeWebhookSecret",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Webhook secret")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"password",placeholder:v("whsec_xxx"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Webhook signing secret (leave blank unless updating)")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"StripePriceId",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Price ID")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{placeholder:v("price_xxx"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Stripe product price ID")}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-3",children:[(0,a.jsx)(u.zB,{control:el.control,name:"StripeUnitPrice",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Unit price (local currency / USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:0,...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:v("e.g., 8 means 8 local currency per USD")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"StripeMinTopUp",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Minimum top-up (USD)")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"number",step:"0.01",min:0,...(0,P.X)(t)})}),(0,a.jsx)(u.Rr,{children:v("Minimum recharge amount in USD")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"StripePromotionCodesEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:v("Promotion codes")}),(0,a.jsx)(u.Rr,{children:v("Allow users to enter promo codes")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})]})}),(0,a.jsx)(Q.av,{value:"creem",className:eF,children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h3",{className:"text-lg font-medium",children:v("Creem Gateway")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:v("Configuration for Creem payment integration")})]}),(0,a.jsxs)("div",{className:"rounded-md bg-blue-50 p-4 text-sm text-blue-900 dark:bg-blue-950 dark:text-blue-100",children:[(0,a.jsx)("p",{className:"mb-2 font-medium",children:v("Webhook Configuration:")}),(0,a.jsxs)("ul",{className:"list-inside list-disc space-y-1",children:[(0,a.jsxs)("li",{children:[v("Webhook URL:")," ",(0,a.jsx)("code",{className:"rounded bg-blue-100 px-1 py-0.5 text-xs dark:bg-blue-900",children:"/api/creem/webhook"})]}),(0,a.jsx)("li",{children:v("Configure in your Creem dashboard")})]})]}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(u.zB,{control:el.control,name:"CreemApiKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("API Key")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"password",placeholder:v("Enter Creem API key"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Creem API key (leave blank unless updating)")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"CreemWebhookSecret",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:v("Webhook Secret")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{type:"password",placeholder:v("Enter webhook secret"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(u.Rr,{children:v("Webhook signing secret (leave blank unless updating)")}),(0,a.jsx)(u.C5,{})]})}})]}),(0,a.jsx)(u.zB,{control:el.control,name:"CreemTestMode",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:v("Test Mode")}),(0,a.jsx)(u.Rr,{children:v("Enable test mode for Creem payments")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(u.zB,{control:el.control,name:"CreemProducts",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsxs)("div",{className:"mb-2 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)(u.lR,{children:v("Products")}),(0,a.jsx)(G.$,{type:"button",variant:"outline",size:"sm",onClick:()=>B(!D),className:"w-full sm:w-auto",children:D?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(U.A,{className:"mr-2 h-3 w-3"}),v("JSON Editor")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-3 w-3"}),v("Visual Editor")]})})]}),(0,a.jsx)(u.MJ,{children:D?(0,a.jsx)(eb,{value:t.value,onChange:t.onChange}):(0,a.jsx)(_.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,placeholder:'[{"name":"Basic","productId":"prod_xxx","price":10,"quota":500000,"currency":"USD"}]',heightClassName:"h-40 min-h-40 max-h-40","aria-invalid":!!el.formState.errors.CreemProducts})}),(0,a.jsx)(u.Rr,{children:v("Configure Creem products. Provide a JSON array.")}),(0,a.jsx)(u.C5,{})]})}})]})}),(0,a.jsx)(Q.av,{value:"waffo-pancake",className:eF,children:(0,a.jsx)(eL,{defaultValues:i,values:ev,onValueChange:em,selectedBinding:Z,savedBinding:et,onSelectedBindingChange:ee})}),(0,a.jsx)(Q.av,{value:"waffo",className:eF,children:(0,a.jsx)(eU,{values:ey,onValueChange:ep,payMethods:K,onPayMethodsChange:H})})]})]})})]})}var eG=n(73280),eV=n(24503),ez=n(28305),eK=n(24985),eW=n(21735),eH=n(5623),eJ=n(47029),eQ=n(61868),e$=n(74559),eY=n(96855),eX=n(86094),eZ=n(37116),e0=n(77808),e1=n(34293),e2=n(61726),e5=n(68974),e4=n(6242),e3=n(6264),e6=n(52048),e8=n(87159);let e9=0;function e7(){return`gsu_${++e9}`}function te(e){let t=(0,F.useMemo)(()=>e.value&&!e.options.includes(e.value)?[e.value,...e.options]:e.options,[e.options,e.value]);return(0,a.jsx)(ew.G3,{options:t.map(e=>({value:e,label:e})),value:e.value,onValueChange:t=>{t&&e.onValueChange(t)},className:e.className,placeholder:e.placeholder,"aria-label":e.placeholder})}function tt(e){let{t}=(0,r.Bd)(),[n,i]=(0,F.useState)(!0),o=e.groupOptions.includes(e.groupName);return(0,a.jsx)(e4.Nt,{open:n,onOpenChange:i,children:(0,a.jsxs)("div",{className:"rounded-lg border",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2 p-3",children:[(0,a.jsxs)(e4.R6,{render:(0,a.jsx)(G.$,{variant:"ghost",className:"h-auto min-w-0 justify-start whitespace-normal"}),"aria-label":t("Rules for {{group}}",{group:e.groupName}),children:[n?(0,a.jsx)(e8.A,{className:"h-4 w-4"}):(0,a.jsx)(eZ.A,{className:"h-4 w-4"}),(0,a.jsx)("span",{className:"min-w-0 truncate font-semibold",children:e.groupName}),!o&&(0,a.jsxs)(ei.Wh,{variant:"danger",copyable:!1,children:[(0,a.jsx)(eY.A,{className:"mr-1 h-3 w-3"}),t("Not in pricing table")]}),(0,a.jsxs)(ei.Wh,{variant:"neutral",copyable:!1,children:[e.items.length," ",t("rules")]})]}),(0,a.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:[(0,a.jsx)(G.$,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0","aria-label":t("Add rule"),onClick:()=>{e.onAdd(e.groupName),i(!0)},children:(0,a.jsx)(Z.A,{className:"h-4 w-4"})}),(0,a.jsx)(G.$,{variant:"ghost",size:"sm",className:"text-destructive h-7 w-7 p-0","aria-label":t("Remove {{group}}",{group:e.groupName}),onClick:()=>e.onRemoveGroup(e.groupName),children:(0,a.jsx)(et.A,{className:"h-4 w-4"})})]})]}),(0,a.jsx)(e4.Ke,{children:(0,a.jsx)("div",{className:"space-y-2 border-t p-3",children:e.items.map(n=>(0,a.jsxs)("div",{className:"grid min-w-0 grid-cols-[minmax(0,1fr)_auto] items-center gap-2 rounded-lg border p-3 sm:grid-cols-[130px_minmax(0,1fr)_minmax(0,1fr)_auto] sm:border-0 sm:p-0",children:[(0,a.jsxs)(x.l6,{value:n.visible?"visible":"hidden",onValueChange:t=>null!==t&&e.onUpdate(n._id,"visible","visible"===t),children:[(0,a.jsx)(x.bq,{className:"w-full sm:w-[130px]","aria-label":t("Group visibility"),children:(0,a.jsx)(x.yv,{children:(0,a.jsx)(ei.Wh,{label:n.visible?t("Extra visible"):t("Hidden"),variant:n.visible?"info":"danger",copyable:!1})})}),(0,a.jsx)(x.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(x.s3,{children:[(0,a.jsx)(x.eb,{value:"visible",children:(0,a.jsx)(ei.Wh,{label:t("Extra visible"),variant:"info",copyable:!1})}),(0,a.jsx)(x.eb,{value:"hidden",children:(0,a.jsx)(ei.Wh,{label:t("Hidden"),variant:"danger",copyable:!1})})]})})]}),(0,a.jsxs)("div",{className:"col-start-1 row-start-2 flex min-w-0 items-center gap-1.5 sm:col-start-auto sm:row-start-auto",children:[(0,a.jsx)(te,{className:"min-w-0 flex-1",options:e.groupOptions,value:n.targetGroup,placeholder:t("Group name"),onValueChange:t=>e.onUpdate(n._id,"targetGroup",t)}),n.targetGroup&&!e.groupOptions.includes(n.targetGroup)&&(0,a.jsx)(eY.A,{className:"text-destructive h-4 w-4 shrink-0","aria-label":t("Not in pricing table")})]}),n.visible?(0,a.jsx)(h.p,{className:"col-start-1 row-start-3 min-w-0 sm:col-start-auto sm:row-start-auto","aria-label":t("Description"),value:n.description,placeholder:t("Description"),onChange:t=>e.onUpdate(n._id,"description",t.target.value)}):(0,a.jsx)("div",{className:"text-muted-foreground hidden px-3 text-sm sm:block",children:"-"}),(0,a.jsx)(G.$,{variant:"ghost",size:"sm",className:"text-destructive col-start-2 row-start-1 size-8 p-0 sm:col-start-auto sm:row-start-auto","aria-label":t("Delete rule"),onClick:()=>e.onRemove(n._id),children:(0,a.jsx)(et.A,{className:"h-4 w-4"})})]},n._id))})})]})})}function tn(e){let{t}=(0,r.Bd)(),[n,i]=(0,F.useState)(()=>(function(e){let t=[];for(let[n,a]of Object.entries(e))if("object"==typeof a&&null!==a)for(let[e,i]of Object.entries(a)){let{visible:a,groupName:o}=e.startsWith("-:")?{visible:!1,groupName:e.slice(2)}:e.startsWith("+:")?{visible:!0,groupName:e.slice(2)}:{visible:!0,groupName:e},s="";a?"string"==typeof i&&(s=i):s="remove",t.push({_id:e7(),userGroup:n,visible:a,targetGroup:o,description:s})}return t})(function(e){if(!e||!e.trim())return{};try{return JSON.parse(e)}catch{return{}}}(e.value))),{onChange:o}=e,s=(0,F.useCallback)(e=>{i(e),o(function(e){let t={};for(let{userGroup:n,visible:a,targetGroup:i,description:o}of e)n&&i&&(t[n]||(t[n]={}),t[n][a?`+:${i}`:`-:${i}`]=o);return 0===Object.keys(t).length?"{}":JSON.stringify(t,null,2)}(e))},[o]),l=(0,F.useCallback)((e,t,a)=>{s(n.map(n=>{if(n._id!==e)return n;let i={...n,[t]:a};return"visible"===t&&!1===a?i.description="remove":"visible"!==t||!0!==a||n.visible||"remove"!==i.description||(i.description=""),i}))},[n,s]),c=(0,F.useCallback)(e=>s(n.filter(t=>t._id!==e)),[n,s]),d=(0,F.useCallback)(e=>s(n.filter(t=>t.userGroup!==e)),[n,s]),u=(0,F.useCallback)(e=>{s([...n,{_id:e7(),userGroup:e,visible:!0,targetGroup:"",description:""}])},[n,s]),h=(0,F.useMemo)(()=>{let e={},t=[];for(let a of n)a.userGroup&&(e[a.userGroup]||(e[a.userGroup]=[],t.push(a.userGroup)),e[a.userGroup].push(a));return t.map(t=>({name:t,items:e[t]}))},[n]),p=(0,F.useMemo)(()=>{let t=new Set(h.map(e=>e.name));return e.groupOptions.filter(e=>!t.has(e))},[h,e.groupOptions]);return(0,a.jsxs)(e5.Zp,{className:"min-w-0 shadow-none",children:[(0,a.jsxs)(e5.aR,{className:"gap-2 border-b",children:[(0,a.jsx)(e5.ZB,{children:t("Special usable group rules")}),(0,a.jsx)(e5.BT,{children:t("Make extra groups visible to, or hide default groups from, users of a specific group.")})]}),(0,a.jsx)(e5.Wu,{children:(0,a.jsxs)("div",{className:"space-y-3",children:[0===h.length?(0,a.jsx)(e2.p,{className:"min-h-40",title:t("No rules yet. Add a group below to get started.")}):h.map(t=>(0,a.jsx)(tt,{groupName:t.name,items:t.items,groupOptions:e.groupOptions,onUpdate:l,onRemove:c,onAdd:u,onRemoveGroup:d},t.name)),(0,a.jsx)("div",{className:"flex items-center justify-center pt-2",children:(0,a.jsx)(te,{className:"w-full sm:w-72",options:p,value:"",placeholder:t("Add rules for a user group"),onValueChange:u})})]})})]})}let ta="min-w-0 shadow-none",ti="gap-2 border-b",to=0;function ts(){return to+=1,`gpr_${to}`}function tr(e){let t=Number(e);return Number.isFinite(t)?t:1}function tl(e){return(0,eo.jD)(e,{fallback:{},silent:!0})}function tc(e){return(0,eo.jD)(e,{fallback:{},silent:!0})}function td(e){return(0,eo.jD)(e,{fallback:{},silent:!0})}function tu(e,t,n){let a=tl(e),i=tc(t),o=tl(n);return[...new Set([...Object.keys(a),...Object.keys(i),...Object.keys(o)])].map(e=>({_id:ts(),name:e,ratio:String(tr(a[e])),topupRatio:Object.hasOwn(o,e)?String(o[e]):"",selectable:Object.hasOwn(i,e),description:String(i[e]??"")}))}function th(e){let t={},n={},a={};for(let i of e){let e=i.name.trim();if(!e)continue;t[e]=tr(i.ratio),i.selectable&&(n[e]=i.description);let o=i.topupRatio.trim();""!==o&&Number.isFinite(Number(o))&&(a[e]=Number(o))}return{GroupRatio:JSON.stringify(t,null,2),UserUsableGroups:JSON.stringify(n,null,2),TopupGroupRatio:JSON.stringify(a,null,2)}}function tp(){let{t:e}=(0,r.Bd)();return(0,a.jsxs)(ei.Wh,{variant:"danger",copyable:!1,children:[(0,a.jsx)(eY.A,{className:"mr-1 h-3 w-3"}),e("Not in pricing table")]})}function tm(e){let t=(0,F.useMemo)(()=>e.value&&!e.options.includes(e.value)?[e.value,...e.options]:e.options,[e.options,e.value]);return(0,a.jsx)(ew.G3,{options:t.map(e=>({value:e,label:e})),value:e.value,onValueChange:t=>{t&&e.onValueChange(t)},className:e.className??"w-48",placeholder:e.placeholder,"aria-label":e.placeholder})}let tg=(0,F.memo)(function(e){let{section:t,onSectionChange:n,defaultUseAutoGroupField:i,groupRatio:o,topupGroupRatio:s,userUsableGroups:l,groupGroupRatio:c,autoGroups:d,maxTokenAutoGroupsField:u,groupSpecialUsableGroup:h,onChange:p}=e,{t:m,i18n:g}=(0,r.Bd)(),f=(0,e6.Tl)(g.resolvedLanguage||g.language),[y,b]=(0,F.useState)(null),v=(0,F.useMemo)(()=>{let e=tl(o),t=tc(l),n=tl(s);return[...new Set([...Object.keys(e),...Object.keys(t),...Object.keys(n)])].map(t=>({name:t,ratio:tr(e[t])}))},[o,l,s]),k=(0,F.useMemo)(()=>v.map(e=>e.name),[v]),x=(0,F.useMemo)(()=>(0,eo.jD)(d,{fallback:[],context:"auto groups"}),[d]),w=(0,F.useCallback)(e=>{x.includes(e)||p("AutoGroups",JSON.stringify([...x,e],null,2))},[x,p]),C=(0,F.useCallback)(e=>{p("AutoGroups",JSON.stringify(x.filter((t,n)=>n!==e),null,2))},[x,p]),A=(0,F.useCallback)((e,t)=>{let n=[...x],a="up"===t?e-1:e+1;a<0||a>=n.length||([n[e],n[a]]=[n[a],n[e]],p("AutoGroups",JSON.stringify(n,null,2)))},[x,p]),S=(0,F.useMemo)(()=>k.filter(e=>!x.includes(e)),[k,x]);return(0,a.jsxs)(Q.tU,{value:t,onValueChange:e=>n(e),className:"min-w-0 gap-5",children:[(0,a.jsx)("div",{className:"min-w-0 overflow-x-auto pb-1",children:(0,a.jsxs)(Q.j7,{"aria-label":m("Group settings"),className:"w-full min-w-max",children:[(0,a.jsx)(Q.Xi,{value:"pricing",className:"px-3",children:m("Pricing groups")}),(0,a.jsx)(Q.Xi,{value:"overrides",className:"px-3",children:m("Special ratio rules")}),(0,a.jsx)(Q.Xi,{value:"visibility",className:"px-3",children:m("Group visibility")}),(0,a.jsx)(Q.Xi,{value:"auto",className:"px-3",children:m("Auto group order")})]})}),(0,a.jsx)(Q.av,{value:"pricing",keepMounted:!0,children:(0,a.jsx)(tf,{groupRatio:o,userUsableGroups:l,topupGroupRatio:s,onChange:p,onShowDetail:b})}),(0,a.jsx)(Q.av,{value:"overrides",keepMounted:!0,children:(0,a.jsx)(ty,{registry:v,groupGroupRatio:c,onChange:p})}),(0,a.jsx)(Q.av,{value:"visibility",keepMounted:!0,children:(0,a.jsx)(tn,{value:h,groupOptions:k,onChange:e=>p("GroupSpecialUsableGroup",e)})}),(0,a.jsx)(Q.av,{value:"auto",keepMounted:!0,children:(0,a.jsxs)(e5.Zp,{className:ta,children:[(0,a.jsxs)(e5.aR,{className:ti,children:[(0,a.jsx)(e5.ZB,{children:m("Auto group order")}),(0,a.jsx)(e5.BT,{children:m("Priority order for tokens in the auto group. The system tries groups from top to bottom.")})]}),(0,a.jsxs)(e5.Wu,{className:"grid gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(16rem,0.7fr)]",children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-3",children:[(0,a.jsx)(tm,{options:S,value:null,className:"w-full",placeholder:m("Add group"),onValueChange:w}),0===x.length?(0,a.jsx)(e2.p,{className:"min-h-40",title:m("No auto groups configured"),description:m("Add groups in the order they should be tried.")}):(0,a.jsx)(e0.x,{as:"ol",axis:"y",values:x,onReorder:e=>p("AutoGroups",JSON.stringify(e,null,2)),"aria-label":m("Auto group order"),className:"flex flex-col gap-2",children:x.map((e,t)=>(0,a.jsx)(e1.E,{group:e,index:t,count:x.length,onMove:A,onRemove:()=>C(t),leading:(0,a.jsx)("span",{className:"text-muted-foreground w-5 shrink-0 text-center text-sm tabular-nums",children:(0,N.ZV)(t+1,f)}),children:!k.includes(e)&&(0,a.jsx)(tp,{})},e))})]}),(0,a.jsxs)("div",{className:"bg-muted/20 flex min-w-0 flex-col gap-4 self-start rounded-lg border p-4",children:[i,(0,a.jsx)(eq.w,{}),u]})]})]})}),(0,a.jsx)(tv,{groupName:y,onOpenChange:e=>{e||b(null)},registry:v,topupGroupRatio:s,userUsableGroups:l,groupGroupRatio:c,autoGroups:x,groupSpecialUsableGroup:h})]})});function tf(e){let{groupRatio:t,userUsableGroups:n,topupGroupRatio:i,onChange:o,onShowDetail:s}=e,{t:l}=(0,r.Bd)(),[c,d]=(0,F.useState)(""),[u,p]=(0,F.useState)(()=>tu(t,n,i));(0,F.useEffect)(()=>{let e=JSON.stringify({groupRatio:tl(t),userUsableGroups:tc(n),topupGroupRatio:tl(i)});p(a=>{let o;return JSON.stringify({groupRatio:tl((o=th(a)).GroupRatio),userUsableGroups:tc(o.UserUsableGroups),topupGroupRatio:tl(o.TopupGroupRatio)})===e?a:tu(t,n,i)})},[t,n,i]);let m=(0,F.useCallback)(e=>{p(e);let t=th(e);o("GroupRatio",t.GroupRatio),o("UserUsableGroups",t.UserUsableGroups),o("TopupGroupRatio",t.TopupGroupRatio)},[o]),g=(0,F.useCallback)((e,t,n)=>{m(u.map(a=>a._id===e?{...a,[t]:n}:a))},[m,u]),f=(0,F.useCallback)(()=>{d("");let e=new Set(u.map(e=>e.name)),t=1,n=`group_${t}`;for(;e.has(n);)t+=1,n=`group_${t}`;m([{_id:ts(),name:n,ratio:"1",topupRatio:"",selectable:!0,description:""},...u])},[m,u]),y=(0,F.useCallback)(e=>{m(u.filter(t=>t._id!==e))},[m,u]),b=(0,F.useMemo)(()=>{let e=new Map;for(let t of u){let n=t.name.trim();n&&e.set(n,(e.get(n)??0)+1)}return[...e.entries()].filter(e=>{let[,t]=e;return t>1}).map(e=>{let[t]=e;return t})},[u]),v=c.trim().toLowerCase(),k=u.filter(e=>!v||e.name.toLowerCase().includes(v)||e.description.toLowerCase().includes(v));return(0,a.jsxs)(e5.Zp,{className:ta,children:[(0,a.jsx)(e5.aR,{className:ti,children:(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)(e5.ZB,{children:l("Pricing groups")}),(0,a.jsx)(e5.BT,{children:l("All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.")})]}),(0,a.jsxs)(G.$,{onClick:f,size:"sm",className:"sm:self-start",children:[(0,a.jsx)(Z.A,{className:"mr-2 h-4 w-4"}),l("Add group")]})]})}),(0,a.jsx)(e5.Wu,{children:(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,a.jsxs)(e3.MG,{className:"max-w-sm",children:[(0,a.jsx)(e3.Sq,{children:(0,a.jsx)(ep.A,{"aria-hidden":"true"})}),(0,a.jsx)(e3.iV,{value:c,onChange:e=>d(e.target.value),"aria-label":l("Search groups by name or description"),placeholder:l("Search groups by name or description")}),c&&(0,a.jsx)(e3.Sq,{align:"inline-end",children:(0,a.jsx)(e3.Ik,{size:"icon-xs","aria-label":l("Clear search"),onClick:()=>d(""),children:(0,a.jsx)(eu.A,{"aria-hidden":"true"})})})]}),(0,a.jsx)(en.h,{tableClassName:"min-w-[760px]",tableProps:{"aria-label":l("Pricing groups")},data:k,getRowKey:e=>e._id,emptyClassName:"text-muted-foreground h-20 text-sm",emptyContent:(0,a.jsx)(e2.p,{className:"min-h-40",title:v?l("No results found"):l("No groups yet. Add a group to get started."),action:v?(0,a.jsx)(G.$,{variant:"outline",size:"sm",onClick:()=>d(""),children:l("Clear search")}):void 0}),columns:[{id:"group",header:l("Group name"),className:"min-w-40",cell:e=>(0,a.jsx)(h.p,{value:e.name,"aria-label":l("Group name"),onChange:t=>g(e._id,"name",t.target.value),"aria-invalid":b.includes(e.name.trim())})},{id:"ratio",header:l("Ratio"),className:"w-28",cell:e=>(0,a.jsx)(h.p,{type:"number",min:0,step:1e-4,value:e.ratio,"aria-label":l("Ratio"),onChange:t=>g(e._id,"ratio",t.target.value)})},{id:"topup-ratio",header:l("Top-up ratio"),className:"w-28",cell:e=>(0,a.jsx)(h.p,{type:"number",min:0,step:1e-4,value:e.topupRatio,"aria-label":l("Top-up ratio"),placeholder:l("Not set"),onChange:t=>g(e._id,"topupRatio",t.target.value)})},{id:"selectable",header:l("User selectable"),className:"w-28 text-center",cell:e=>(0,a.jsx)("div",{className:"flex justify-center",children:(0,a.jsx)(V.S,{checked:e.selectable,onCheckedChange:t=>g(e._id,"selectable",!0===t),"aria-label":l("User selectable")})})},{id:"description",header:l("Description"),className:"min-w-56",cell:e=>e.selectable?(0,a.jsx)(h.p,{value:e.description,"aria-label":l("Group description"),placeholder:l("Group description"),onChange:t=>g(e._id,"description",t.target.value)}):(0,a.jsx)("span",{className:"text-muted-foreground px-3 text-sm",children:"-"})},{id:"actions",header:l("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsxs)("div",{className:"flex justify-end gap-1",children:[(0,a.jsx)(G.$,{variant:"ghost",size:"sm",onClick:()=>s(e.name.trim()),disabled:!e.name.trim(),"aria-label":l("Details"),children:(0,a.jsx)(eX.A,{className:"h-4 w-4"})}),(0,a.jsx)(G.$,{variant:"ghost",size:"sm",onClick:()=>y(e._id),"aria-label":l("Delete"),children:(0,a.jsx)(et.A,{className:"h-4 w-4"})})]})}]}),b.length>0&&(0,a.jsx)("p",{className:"text-destructive text-sm",children:l("Duplicate group names: {{names}}",{names:b.join(", ")})})]})})]})}function ty(e){let{registry:t,groupGroupRatio:n,onChange:i}=e,{t:o}=(0,r.Bd)(),[s,l]=(0,F.useState)(!1),[c,d]=(0,F.useState)(null),[u,h]=(0,F.useState)(!1),[p,m]=(0,F.useState)(null),[g,f]=(0,F.useState)(null),y=(0,F.useMemo)(()=>t.map(e=>e.name),[t]),b=(0,F.useMemo)(()=>{let e=new Map;for(let n of t)e.set(n.name,n.ratio);return e},[t]),v=(0,F.useMemo)(()=>Object.entries(td(n)).map(e=>{let[t,n]=e;return{userGroup:t,overrides:Object.entries(n).map(e=>{let[t,n]=e;return{targetGroup:t,ratio:n}})}}),[n]),k=(0,F.useCallback)(e=>{i("GroupGroupRatio",JSON.stringify(e,null,2))},[i]),x=(0,F.useCallback)(()=>{if(!c)return;let e=td(n);e[c]||(e[c]={}),k(e),l(!1),d(null)},[c,n,k]),w=(0,F.useCallback)(e=>{let t=td(n);delete t[e],k(t)},[n,k]),C=(0,F.useCallback)(e=>{m(e),f(null),h(!0)},[]),A=(0,F.useCallback)((e,t)=>{m(e),f(t),h(!0)},[]),S=(0,F.useCallback)((e,t,a)=>{if(!p)return;let i=td(n);i[p]||(i[p]={}),a&&a!==e&&delete i[p][a],i[p][e]=t,k(i),h(!1)},[p,n,k]),P=(0,F.useCallback)((e,t)=>{let a=td(n);a[e]&&(delete a[e][t],0===Object.keys(a[e]).length&&delete a[e]),k(a)},[n,k]);return(0,a.jsxs)(e5.Zp,{className:ta,children:[(0,a.jsxs)(e5.aR,{className:ti,children:[(0,a.jsx)(e5.ZB,{children:o("Special ratio rules")}),(0,a.jsx)(e5.BT,{children:o("Each rule reads as a sentence: users of one group pay a special ratio when billed as another group. Without a rule, the billing group base ratio applies.")})]}),(0,a.jsx)(e5.Wu,{children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)(G.$,{onClick:()=>{d(null),l(!0)},size:"sm",children:[(0,a.jsx)(Z.A,{className:"mr-2 h-4 w-4"}),o("Add user group")]}),0===v.length&&(0,a.jsx)(e2.p,{className:"min-h-40",title:o("No special ratios configured"),description:o("Base group ratios apply until you add an override.")}),v.length>0&&(0,a.jsx)("div",{className:"space-y-3",children:v.map(e=>(0,a.jsx)(e4.Nt,{defaultOpen:!0,children:(0,a.jsxs)("div",{className:"rounded-lg border",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2 p-3",children:[(0,a.jsxs)(e4.R6,{render:(0,a.jsx)(G.$,{variant:"ghost",className:"h-auto min-w-0 justify-start whitespace-normal"}),"aria-label":o("Rules for {{group}}",{group:e.userGroup}),children:[(0,a.jsx)(eZ.A,{className:"size-4 shrink-0","aria-hidden":"true"}),(0,a.jsx)("span",{className:"min-w-0 truncate font-semibold",children:e.userGroup}),!y.includes(e.userGroup)&&(0,a.jsx)(eY.A,{className:"text-destructive h-4 w-4","aria-label":o("Not in pricing table")}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:o("{{count}} override",{count:e.overrides.length})})]}),(0,a.jsxs)("div",{className:"flex shrink-0 gap-1",children:[(0,a.jsx)(G.$,{variant:"ghost",size:"sm","aria-label":o("Add ratio override"),onClick:()=>C(e.userGroup),children:(0,a.jsx)(Z.A,{className:"h-4 w-4"})}),(0,a.jsx)(G.$,{variant:"ghost",size:"sm","aria-label":o("Remove {{group}}",{group:e.userGroup}),onClick:()=>w(e.userGroup),children:(0,a.jsx)(et.A,{className:"h-4 w-4"})})]})]}),(0,a.jsx)(e4.Ke,{children:e.overrides.length>0&&(0,a.jsx)("div",{className:"border-t",children:(0,a.jsx)(en.h,{className:"rounded-none border-0",data:e.overrides,getRowKey:e=>e.targetGroup,columns:[{id:"target-group",header:o("Billing group"),cellClassName:"font-medium",cell:e=>(0,a.jsxs)("span",{className:"inline-flex max-w-48 items-center gap-1.5",children:[(0,a.jsx)("span",{className:"truncate",title:e.targetGroup,children:e.targetGroup}),!y.includes(e.targetGroup)&&(0,a.jsx)(eY.A,{className:"text-destructive h-3.5 w-3.5","aria-label":o("Not in pricing table")})]})},{id:"ratio",header:o("Ratio"),cell:e=>{let t=b.get(e.targetGroup);return(0,a.jsxs)("span",{className:"inline-flex items-center gap-1.5",children:[e.ratio,void 0!==t&&t!==e.ratio&&(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:o("(instead of {{ratio}})",{ratio:t})})]})}},{id:"actions",header:o("Actions"),className:"text-right",cellClassName:"text-right",cell:t=>(0,a.jsx)(ea._,{editLabel:o("Edit"),deleteLabel:o("Delete"),menuLabel:o("Open menu"),onEdit:()=>A(e.userGroup,t),onDelete:()=>P(e.userGroup,t.targetGroup)})}]})})})]})},e.userGroup))})]})}),(0,a.jsx)(er.l,{open:s,onOpenChange:l,title:o("Add user group"),description:o("Create a new user group to configure ratio overrides for."),contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(G.$,{variant:"outline",onClick:()=>l(!1),children:o("Cancel")}),(0,a.jsx)(G.$,{onClick:x,disabled:!c,children:o("Add")})]}),children:(0,a.jsx)("div",{className:"space-y-4 py-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(z.J,{children:o("User group name")}),(0,a.jsx)(tm,{className:"w-full",options:y,value:c,placeholder:o("Select a group"),onValueChange:d})]})})}),(0,a.jsx)(tb,{open:u,onOpenChange:h,onSave:S,editData:g,userGroup:p,groupOptions:y,baseRatioByName:b})]})}function tb(e){let{open:t,onOpenChange:n,onSave:i,editData:o,userGroup:s,groupOptions:l,baseRatioByName:c}=e,{t:d}=(0,r.Bd)(),[u,p]=(0,F.useState)(null),[m,g]=(0,F.useState)("");(0,F.useEffect)(()=>{if(!t){p(null),g("");return}p(o?.targetGroup??null),g(o?String(o.ratio):"")},[o,t]);let f=u?c.get(u):void 0;return(0,a.jsx)(er.l,{open:t,onOpenChange:n,title:d(o?"Edit ratio override":"Add ratio override"),description:s?d('Configure a custom ratio for "{{userGroup}}" users when using a specific token group.',{userGroup:s}):d("Configure a custom ratio for when users use a specific token group."),contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(G.$,{variant:"outline",onClick:()=>n(!1),children:d("Cancel")}),(0,a.jsx)(G.$,{onClick:()=>{if(!u||!m.trim())return;let e=Number.parseFloat(m);Number.isNaN(e)||(i(u,e,o?.targetGroup),p(null),g(""))},children:d(o?"Update":"Add")})]}),children:(0,a.jsxs)("div",{className:"space-y-4 py-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(z.J,{children:d("Billing group")}),(0,a.jsx)(tm,{className:"w-full",options:l,value:u,placeholder:d("Select a group"),onValueChange:p}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:d("The token group that will have a custom ratio")})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(z.J,{children:d("Ratio")}),(0,a.jsx)(h.p,{value:m,onChange:e=>{let t=e.target.value;""!==t&&Number.isNaN(Number.parseFloat(t))||g(t)},placeholder:void 0===f?"0.9":String(f)}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:void 0!==f?d("(instead of {{ratio}})",{ratio:f}):d("Multiplier applied when {{userGroup}} uses {{targetGroup}}",{userGroup:s||d("this user group"),targetGroup:u||d("this token group")})})]})]})})}function tv(e){let{t}=(0,r.Bd)(),n=e.groupName,i=(0,F.useMemo)(()=>{if(!n)return null;let t=e.registry.find(e=>e.name===n),a=tl(e.topupGroupRatio),i=tc(e.userUsableGroups),o=td(e.groupGroupRatio),s=(0,eo.jD)(e.groupSpecialUsableGroup,{fallback:{},silent:!0}),r=[];for(let[e,t]of Object.entries(o))Object.hasOwn(t,n)&&r.push({userGroup:e,ratio:t[n]});let l=Object.entries(o[n]??{}).map(e=>{let[t,n]=e;return{targetGroup:t,ratio:n}}),c=[];for(let[e,t]of Object.entries(s))if("object"==typeof t&&null!==t)for(let[a,i]of Object.entries(t)){let t=a.startsWith("-:")?{visible:!1,groupName:a.slice(2)}:a.startsWith("+:")?{visible:!0,groupName:a.slice(2)}:{visible:!0,groupName:a};t.groupName===n&&c.push({userGroup:e,visible:t.visible,description:"string"==typeof i?i:""})}let d=e.autoGroups.indexOf(n);return{ratio:t?.ratio,topupRatio:Object.hasOwn(a,n)?String(a[n]):null,selectable:Object.hasOwn(i,n),description:String(i[n]??""),incomingOverrides:r,outgoingOverrides:l,visibilityRules:c,autoIndex:d}},[n,e.registry,e.topupGroupRatio,e.userUsableGroups,e.groupGroupRatio,e.autoGroups,e.groupSpecialUsableGroup]);return(0,a.jsx)(e$.cj,{open:null!==n,onOpenChange:e.onOpenChange,children:(0,a.jsxs)(e$.h,{side:"right",className:(0,eJ.jW)("sm:max-w-lg"),children:[(0,a.jsxs)(e$.Fm,{className:(0,eJ.Dt)(),children:[(0,a.jsxs)(e$.qp,{children:[t("Group details"),n?`: ${n}`:""]}),(0,a.jsx)(e$.Qs,{children:t("Everything configured for this group, in one place.")})]}),i&&(0,a.jsxs)("div",{className:(0,eJ.e)("gap-5"),children:[(0,a.jsxs)("section",{className:"space-y-2",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold",children:t("Overview")}),(0,a.jsxs)("dl",{className:"space-y-1.5 text-sm",children:[(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("dt",{className:"text-muted-foreground",children:t("Ratio")}),(0,a.jsx)("dd",{className:"font-medium",children:i.ratio??"-"})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("dt",{className:"text-muted-foreground",children:t("Top-up ratio")}),(0,a.jsx)("dd",{className:"font-medium",children:i.topupRatio??t("Not set")})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("dt",{className:"text-muted-foreground",children:t("User selectable")}),(0,a.jsx)("dd",{className:"font-medium",children:i.selectable?t("Yes"):t("No")})]}),i.selectable&&i.description&&(0,a.jsxs)("div",{className:"flex justify-between gap-4",children:[(0,a.jsx)("dt",{className:"text-muted-foreground",children:t("Description")}),(0,a.jsx)("dd",{className:"text-right font-medium",children:i.description})]}),(0,a.jsxs)("div",{className:"flex justify-between",children:[(0,a.jsx)("dt",{className:"text-muted-foreground",children:t("Auto group order")}),(0,a.jsx)("dd",{className:"font-medium",children:i.autoIndex>=0?t("Position {{position}}",{position:i.autoIndex+1}):t("Not included")})]})]})]}),(0,a.jsxs)("section",{className:"space-y-2",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold",children:t("Ratio overrides when billed as this group")}),0===i.incomingOverrides.length?(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:t("None")}):(0,a.jsx)("ul",{className:"space-y-1 text-sm",children:i.incomingOverrides.map(e=>(0,a.jsxs)("li",{className:"flex justify-between rounded-md border px-3 py-1.5",children:[(0,a.jsx)("span",{children:t("Users in {{group}}",{group:e.userGroup})}),(0,a.jsx)("span",{className:"font-medium",children:e.ratio})]},e.userGroup))})]}),(0,a.jsxs)("section",{className:"space-y-2",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold",children:t("Ratio overrides for users of this group")}),0===i.outgoingOverrides.length?(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:t("None")}):(0,a.jsx)("ul",{className:"space-y-1 text-sm",children:i.outgoingOverrides.map(e=>(0,a.jsxs)("li",{className:"flex justify-between rounded-md border px-3 py-1.5",children:[(0,a.jsx)("span",{children:t("When billed as {{group}}",{group:e.targetGroup})}),(0,a.jsx)("span",{className:"font-medium",children:e.ratio})]},e.targetGroup))})]}),(0,a.jsxs)("section",{className:"space-y-2",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold",children:t("Special visibility rules")}),0===i.visibilityRules.length?(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:t("None")}):(0,a.jsx)("ul",{className:"space-y-1 text-sm",children:i.visibilityRules.map(e=>(0,a.jsxs)("li",{className:"flex items-center justify-between rounded-md border px-3 py-1.5",children:[(0,a.jsx)("span",{children:e.visible?t("Extra visible to {{group}}",{group:e.userGroup}):t("Hidden from {{group}}",{group:e.userGroup})}),(0,a.jsx)(ei.Wh,{variant:e.visible?"info":"danger",copyable:!1,children:e.visible?t("Visible"):t("Hidden")})]},`${e.userGroup}-${e.visible}`))})]})]})]})})}let tk=(0,F.memo)(function(e){let{form:t,onSave:n,isSaving:i}=e,{t:o}=(0,r.Bd)(),l=(0,s.FH)({control:t.control}),[c,d]=(0,F.useState)("visual"),[f,y]=(0,F.useState)(!1),[b,v]=(0,F.useState)("pricing"),k=(0,F.useCallback)((e,n)=>{t.setValue(e,n,{shouldValidate:!0,shouldDirty:!0})},[t]),x=(0,F.useCallback)(()=>{d(e=>"visual"===e?"json":"visual")},[]);return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:"visual"===c?o("Manage pricing, visibility and automatic routing for your groups."):o("Edit group settings as JSON. Changes are shared with the visual editor.")}),(0,a.jsxs)("div",{className:"flex shrink-0 gap-2",children:[(0,a.jsxs)(G.$,{variant:"outline",size:"sm",onClick:()=>y(!0),children:[(0,a.jsx)(eH.A,{className:"mr-2 h-4 w-4"}),o("Usage guide")]}),(0,a.jsx)(G.$,{variant:"outline",size:"sm",onClick:x,children:"visual"===c?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(U.A,{className:"mr-2 h-4 w-4"}),o("Switch to JSON")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-4 w-4"}),o("Switch to Visual")]})})]})]}),(0,a.jsx)(tC,{open:f,onOpenChange:y}),(0,a.jsxs)(u.lV,{...t,children:[(0,a.jsx)(g.cN,{children:(0,a.jsx)(G.$,{type:"button",size:"sm",onClick:t.handleSubmit(n,e=>{e.MaxTokenAutoGroups&&(d("visual"),v("auto"),requestAnimationFrame(()=>t.setFocus("MaxTokenAutoGroups")))}),disabled:i,children:i?o("Saving..."):o("Save group settings")})}),"visual"===c?(0,a.jsx)(tg,{section:b,onSectionChange:v,groupRatio:l.GroupRatio??"",topupGroupRatio:l.TopupGroupRatio??"",userUsableGroups:l.UserUsableGroups??"",groupGroupRatio:l.GroupGroupRatio??"",autoGroups:l.AutoGroups??"",maxTokenAutoGroupsField:(0,a.jsx)(u.zB,{control:t.control,name:"MaxTokenAutoGroups",render:e=>{let{field:t,fieldState:n}=e;return(0,a.jsxs)(u.eI,{"data-invalid":n.invalid,children:[(0,a.jsx)(u.lR,{children:o("Maximum custom groups per token")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{...(0,P.X)(t),type:"number",min:1,step:1,"aria-invalid":n.invalid})}),(0,a.jsx)(u.Rr,{children:o("Limits only token-specific Auto snapshots. Global Auto inheritance remains unlimited.")}),(0,a.jsx)(u.C5,{})]})}}),defaultUseAutoGroupField:(0,a.jsx)(u.zB,{control:t.control,name:"DefaultUseAutoGroup",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:o("Default to auto groups")}),(0,a.jsx)(u.Rr,{children:o("If default auto group is enabled, newly created tokens start with auto instead of an empty group.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),groupSpecialUsableGroup:l.GroupSpecialUsableGroup??"",onChange:(e,t)=>k(e,t)}):(0,a.jsxs)(m.yt,{onSubmit:t.handleSubmit(n),children:[(0,a.jsx)(u.zB,{control:t.control,name:"GroupRatio",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Group ratios")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref})}),(0,a.jsx)(u.Rr,{children:o("JSON map of group → ratio applied when the user selects the group explicitly.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"TopupGroupRatio",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Top-up group ratios")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,heightClassName:"h-40 min-h-40 max-h-40"})}),(0,a.jsxs)(u.Rr,{children:[o("Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as"),' { "default": 1, "vip": 1.2 }',"."]}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"UserUsableGroups",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Selectable groups")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,heightClassName:"h-40 min-h-40 max-h-40"})}),(0,a.jsx)(u.Rr,{children:o("JSON map of group → description exposed when users create API keys.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"GroupGroupRatio",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Inter-group overrides")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref})}),(0,a.jsxs)(u.Rr,{children:[o("Nested JSON: source group →")," ","{ targetGroup: ratio }"," ",o("to override billing when a user in one group uses a token of another group.")]}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"AutoGroups",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Auto group order")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,heightClassName:"h-40 min-h-40 max-h-40"})}),(0,a.jsx)(u.Rr,{children:o("Priority order for tokens in the auto group. The system tries groups from top to bottom.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"MaxTokenAutoGroups",render:e=>{let{field:t,fieldState:n}=e;return(0,a.jsxs)(u.eI,{"data-invalid":n.invalid,children:[(0,a.jsx)(u.lR,{children:o("Maximum custom groups per token")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(h.p,{...(0,P.X)(t),type:"number",min:1,step:1,"aria-invalid":n.invalid})}),(0,a.jsx)(u.Rr,{children:o("Limits only token-specific Auto snapshots. Global Auto inheritance remains unlimited.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"GroupSpecialUsableGroup",render:e=>{let{field:t}=e;return(0,a.jsxs)(u.eI,{children:[(0,a.jsx)(u.lR,{children:o("Special usable group rules")}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref})}),(0,a.jsx)(u.Rr,{children:o("Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.")}),(0,a.jsx)(u.C5,{})]})}}),(0,a.jsx)(u.zB,{control:t.control,name:"DefaultUseAutoGroup",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:o("Default to auto groups")}),(0,a.jsx)(u.Rr,{children:o("If default auto group is enabled, newly created tokens start with auto instead of an empty group.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})]})]})});function tx(e){let{children:t}=e;return(0,a.jsx)("pre",{className:"bg-muted/60 overflow-x-auto rounded-lg border px-3 py-2 text-xs leading-6 whitespace-pre-wrap",children:t})}function tw(e){let{chip:t,children:n}=e;return(0,a.jsxs)("div",{className:"flex items-start gap-2.5 text-sm leading-6",children:[(0,a.jsx)("span",{className:"bg-muted text-muted-foreground mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-xs font-medium",children:t}),(0,a.jsx)("span",{className:"text-muted-foreground min-w-0",children:n})]})}function tC(e){let{open:t,onOpenChange:n}=e,{t:i}=(0,r.Bd)();return(0,a.jsx)(e$.cj,{open:t,onOpenChange:n,children:(0,a.jsxs)(e$.h,{side:"right",className:(0,eJ.jW)("sm:max-w-2xl"),children:[(0,a.jsxs)(e$.Fm,{className:(0,eJ.Dt)(),children:[(0,a.jsx)(e$.qp,{children:i("Group pricing usage guide")}),(0,a.jsx)(e$.Qs,{children:i("Understand how user groups, token groups, ratios, and special rules work together.")})]}),(0,a.jsxs)("div",{className:(0,eJ.e)("gap-5"),children:[(0,a.jsxs)("section",{className:"space-y-2",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold",children:i("The two roles of a group")}),(0,a.jsxs)("div",{className:"text-muted-foreground space-y-2 text-sm leading-6",children:[(0,a.jsx)("p",{children:i("Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.")}),(0,a.jsxs)("p",{children:[(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("Token group")}),": ",i("decides which channels are used and which base ratio applies.")]}),(0,a.jsxs)("p",{children:[(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("User group")}),": ",i("decides the top-up ratio, which groups the user can pick for tokens, and whether an override ratio applies.")]})]})]}),(0,a.jsxs)("section",{className:"space-y-2",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold",children:i("How a call is priced")}),(0,a.jsxs)("ol",{className:"text-muted-foreground list-decimal space-y-2 pl-5 text-sm leading-6",children:[(0,a.jsxs)("li",{children:[(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("Find the billing group.")})," ",i("Use the group set on the token. If the token has no group, use the user group. The auto group tries the configured groups from top to bottom.")]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("Find the ratio.")})," ",i("Look for a special ratio rule matching this user group and this billing group. If one exists, use its ratio. Otherwise use the billing group base ratio from the pricing table.")]}),(0,a.jsxs)("li",{children:[(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("Charge.")})," ",i("Cost = model price × that one ratio. Nothing else from the group settings enters the formula.")]})]}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Common pitfall: the user group base ratio is NOT a personal discount. It only applies when the user group itself is the billing group.")})]}),(0,a.jsxs)("section",{className:"space-y-3",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold",children:i("Worked example")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("The admin configured three groups and one special ratio rule:")}),(0,a.jsxs)("div",{className:"overflow-hidden rounded-lg border",children:[(0,a.jsx)("div",{className:"bg-muted/40 border-b px-3 py-1.5 text-xs font-medium",children:i("Pricing groups")}),(0,a.jsxs)("table",{className:"w-full text-sm",children:[(0,a.jsx)("thead",{children:(0,a.jsxs)("tr",{className:"text-muted-foreground border-b text-xs",children:[(0,a.jsx)("th",{className:"px-3 py-1.5 text-left font-medium",children:i("Group name")}),(0,a.jsx)("th",{className:"px-3 py-1.5 text-right font-medium",children:i("Ratio")})]})}),(0,a.jsxs)("tbody",{children:[(0,a.jsxs)("tr",{className:"border-b",children:[(0,a.jsx)("td",{className:"px-3 py-1.5",children:"default"}),(0,a.jsx)("td",{className:"px-3 py-1.5 text-right",children:"1.0"})]}),(0,a.jsxs)("tr",{className:"border-b",children:[(0,a.jsx)("td",{className:"px-3 py-1.5",children:"premium"}),(0,a.jsx)("td",{className:"px-3 py-1.5 text-right",children:"0.5"})]}),(0,a.jsxs)("tr",{children:[(0,a.jsx)("td",{className:"px-3 py-1.5",children:"vip"}),(0,a.jsx)("td",{className:"px-3 py-1.5 text-right",children:"0.8"})]})]})]})]}),(0,a.jsxs)("div",{className:"overflow-hidden rounded-lg border",children:[(0,a.jsx)("div",{className:"bg-muted/40 border-b px-3 py-1.5 text-xs font-medium",children:i("Special ratio rules")}),(0,a.jsxs)("div",{className:"p-3 text-sm leading-6",children:[i("Users of vip, when billed as premium, pay ratio")," ",(0,a.jsx)("span",{className:"bg-primary/10 ring-primary/40 rounded px-1.5 py-0.5 font-semibold ring-1",children:"0.3"})," ",(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:i("(instead of {{ratio}})",{ratio:.5})})]})]}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Three calls made by the same vip user. Assume the base price of one call is 10.")}),(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"overflow-hidden rounded-lg border",children:[(0,a.jsx)("div",{className:"bg-muted/40 border-b px-3 py-2 text-sm font-medium",children:i("Call 1: the token group is premium")}),(0,a.jsxs)("div",{className:"space-y-2 p-3",children:[(0,a.jsx)(tw,{chip:"1",children:i("Billing group = premium (the token has a group, so use it)")}),(0,a.jsx)(tw,{chip:"2",children:i("There is a rule for vip billed as premium → use its ratio 0.3")}),(0,a.jsx)(tw,{chip:"=",children:(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("Cost = 10 × 0.3 = 3")})})]})]}),(0,a.jsxs)("div",{className:"overflow-hidden rounded-lg border",children:[(0,a.jsx)("div",{className:"bg-muted/40 border-b px-3 py-2 text-sm font-medium",children:i("Call 2: the token group is default")}),(0,a.jsxs)("div",{className:"space-y-2 p-3",children:[(0,a.jsx)(tw,{chip:"1",children:i("Billing group = default (the token has a group, so use it)")}),(0,a.jsx)(tw,{chip:"2",children:i("No rule for vip billed as default → use the base ratio of default, 1.0 (the 0.8 of vip is not used)")}),(0,a.jsx)(tw,{chip:"=",children:(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("Cost = 10 × 1.0 = 10")})})]})]}),(0,a.jsxs)("div",{className:"overflow-hidden rounded-lg border",children:[(0,a.jsx)("div",{className:"bg-muted/40 border-b px-3 py-2 text-sm font-medium",children:i("Call 3: the token has no group")}),(0,a.jsxs)("div",{className:"space-y-2 p-3",children:[(0,a.jsx)(tw,{chip:"1",children:i("Billing group = vip (the token has no group, so use the user group)")}),(0,a.jsx)(tw,{chip:"2",children:i("No rule for vip billed as vip → use the base ratio of vip, 0.8")}),(0,a.jsx)(tw,{chip:"=",children:(0,a.jsx)("span",{className:"text-foreground font-medium",children:i("Cost = 10 × 0.8 = 8")})})]})]})]})]}),(0,a.jsxs)(eQ.nD,{className:"rounded-lg border px-3",children:[(0,a.jsxs)(eQ.As,{value:"groups",children:[(0,a.jsx)(eQ.$m,{children:i("Pricing group example")}),(0,a.jsxs)(eQ.ub,{className:"space-y-3",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.")}),(0,a.jsx)(tx,{children:`${i("Group name")} ${i("Ratio")} ${i("User selectable")} ${i("Description")} standard 1.0 ${i("Yes")} ${i("Standard price")} premium 0.5 ${i("Yes")} ${i("Premium plan, half price")} vip 0.5 ${i("No")} ${i("Assigned by administrator only")}`}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.")})]})]}),(0,a.jsxs)(eQ.As,{value:"auto",children:[(0,a.jsx)(eQ.$m,{children:i("Auto group behavior")}),(0,a.jsxs)(eQ.ub,{className:"space-y-3",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.")}),(0,a.jsx)(tx,{children:'["default", "vip"]'}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("If default auto group is enabled, newly created tokens start with auto instead of an empty group.")})]})]}),(0,a.jsxs)(eQ.As,{value:"special-ratio",children:[(0,a.jsx)(eQ.$m,{children:i("Special ratio rules")}),(0,a.jsxs)(eQ.ub,{className:"space-y-3",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("In JSON, the user group is the outer key and the billing group is the inner key. The example below means: vip users pay 0.8 when billed as standard, and 0.3 when billed as premium.")}),(0,a.jsx)(tx,{children:`{ "vip": { "standard": 0.8, "premium": 0.3 } }`}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Only configured combinations are overridden. All other calls keep the billing group base ratio.")})]})]}),(0,a.jsxs)(eQ.As,{value:"usable",children:[(0,a.jsx)(eQ.$m,{children:i("Special usable group rules")}),(0,a.jsxs)(eQ.ub,{className:"space-y-3",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("Special usable group rules make extra token groups visible to, or hide default ones from, users of a specific user group.")}),(0,a.jsx)(tx,{children:`{ "vip": { "+:premium": "${i("Premium plan, half price")}", "-:default": "remove", "special": "${i("Special group")}" } }`}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm leading-6",children:i("In the visual editor these appear as Extra visible and Hidden. In JSON, +: (or no prefix) adds a group and -: removes one.")})]})]})]})]})]})})}var tA=n(53540),tS=n(23921),tP=n(99597),tT=n(27781),tI=n(12257),tR=n(46006),tN=n(99893),tj=n(13987),tM=n(89347),tD=n(38785),tO=n(88753),tL=n(52490),tq=n(97175),tU=n(63643);let tE="tiered_expr_task",tF="model-ratio-column-visibility",t_=(0,F.forwardRef)(function(e,t){let{savedModelPrice:n,savedModelRatio:i,savedCacheRatio:o,savedCreateCacheRatio:s,savedCompletionRatio:c,savedImageRatio:d,savedAudioRatio:u,savedAudioCompletionRatio:h,savedBillingMode:p,savedBillingExpr:m,savedPluginBillingExpr:g="{}",modelPrice:f,modelRatio:y,cacheRatio:b,createCacheRatio:v,completionRatio:k,imageRatio:x,audioRatio:w,audioCompletionRatio:C,billingMode:A,billingExpr:S,pluginBillingExpr:P="{}",candidateModelNames:T,candidateModelsLoading:I,filterMode:R="all",onChange:N,onSave:j,isSaving:M}=e,{t:D}=(0,r.Bd)(),{models:O}=(0,tM.y)(),L=(0,tO.Ub)("(max-width: 767px)"),[q,U]=(0,F.useState)(!1),[E,_]=(0,F.useState)(!1),[B,z]=(0,F.useState)(null),K=(0,eK.dy)(B?.name?[B.name]:[],!!B?.name),[W,H]=(0,F.useState)([]),[J,Q]=(0,F.useState)([]),[$,Y]=(0,F.useState)(""),[X,ee]=(0,F.useState)({}),et=(0,F.useRef)(null),en=(0,F.useRef)(null);(0,F.useEffect)(()=>{en.current=B?.name??null},[B]);let[es,er]=(0,F.useState)({pageIndex:0,pageSize:20}),[el,ec]=(0,F.useState)(()=>{let e=localStorage.getItem(tF);if(e)try{return(0,eo.jD)(e,{fallback:{cacheRatio:!1,createCacheRatio:!1,imageRatio:!1,audioRatio:!1,audioCompletionRatio:!1},silent:!0})}catch{}return{cacheRatio:!1,createCacheRatio:!1,imageRatio:!1,audioRatio:!1,audioCompletionRatio:!1}});(0,F.useEffect)(()=>{localStorage.setItem(tF,JSON.stringify(el))},[el]);let ed=(0,F.useMemo)(()=>new Set(O.filter(e=>e.billing_usage_schema&&Object.keys(e.billing_usage_schema).length>0).map(e=>e.model_name)),[O]),eu=(0,F.useMemo)(()=>{let e=(0,tq.XD)({modelPrice:n,modelRatio:i,cacheRatio:o,createCacheRatio:s,completionRatio:c,imageRatio:d,audioRatio:u,audioCompletionRatio:h,billingMode:p,billingExpr:m,pluginBillingExpr:g}),t=(0,tq.XD)({modelPrice:f,modelRatio:y,cacheRatio:b,createCacheRatio:v,completionRatio:k,imageRatio:x,audioRatio:w,audioCompletionRatio:C,billingMode:A,billingExpr:S,pluginBillingExpr:P}),a=new Map(e.map(e=>[e.name,e])),r=new Map(t.map(e=>[e.name,e]));return[...new Set("unset"===R?T??[]:[...a.keys(),...r.keys()])].map(e=>{let t=a.get(e),n=r.get(e),i=t??n??{name:e,billingMode:"per-token",hasConflict:!1},o=(0,tq.$M)(t),s=(0,tq.$M)(n);return{...i,saved:t,draft:n,isDraftChanged:o!==s,isDraftDeleted:!!(t&&!n),isDraftNew:!!(!t&&n)}}).filter(e=>!e.isDraftDeleted).filter(e=>"unset"!==R||(0,tq.xp)(e.saved)).sort((e,t)=>e.name.localeCompare(t.name))},[T,R,n,i,o,s,c,d,u,h,p,m,g,f,y,b,v,k,x,w,C,A,S,P]),eh=(0,F.useMemo)(()=>{let e={"per-token":0,"per-request":0,tiered_expr:0,[tE]:0};for(let t of eu){let n="per-request"===t.billingMode||"tiered_expr"===t.billingMode?t.billingMode:"per-token";e[n]+=1,ed.has(t.name)&&"tiered_expr"===t.billingMode&&t.billingExpr&&(e[tE]+=1)}return e},[eu,ed]),ep=(0,F.useCallback)(e=>{let t=e.draft??e.saved??e,n="per-token";"tiered_expr"===t.billingMode?n="tiered_expr":t.price&&""!==t.price&&(n="per-request"),z({name:t.name,price:t.price,ratio:t.ratio,cacheRatio:t.cacheRatio,createCacheRatio:t.createCacheRatio,completionRatio:t.completionRatio,imageRatio:t.imageRatio,audioRatio:t.audioRatio,audioCompletionRatio:t.audioCompletionRatio,billingMode:n,billingExpr:t.billingExpr,pluginBillingExpr:t.pluginBillingExpr,requestRuleExpr:t.requestRuleExpr}),_(!0),L&&U(!0)},[L]),em=(0,F.useCallback)(()=>{z(null),_(!0),L&&U(!0)},[L]),eg=(0,F.useCallback)(e=>{Y(t=>{let n="function"==typeof e?e(t):e;return n!==t&&(z(null),_(!1),U(!1)),n})},[]),ef=(0,F.useCallback)(e=>{let t=(0,eo.jD)(f,{fallback:{},silent:!0}),n=(0,eo.jD)(y,{fallback:{},silent:!0}),a=(0,eo.jD)(b,{fallback:{},silent:!0}),i=(0,eo.jD)(v,{fallback:{},silent:!0}),o=(0,eo.jD)(k,{fallback:{},silent:!0}),s=(0,eo.jD)(x,{fallback:{},silent:!0}),r=(0,eo.jD)(w,{fallback:{},silent:!0}),l=(0,eo.jD)(C,{fallback:{},silent:!0}),c=(0,eo.jD)(A,{fallback:{},silent:!0}),d=(0,eo.jD)(S,{fallback:{},silent:!0});delete t[e],delete n[e],delete a[e],delete i[e],delete o[e],delete s[e],delete r[e],delete l[e],delete c[e],delete d[e];let u=(0,eo.jD)(P,{fallback:{}});for(let t of Object.keys(u))(0,tD.tp)(t)?.[1]===e&&delete u[t];N("billing_setting.plugin_billing_expr",JSON.stringify(u)),N("ModelPrice",JSON.stringify(t,null,2)),N("ModelRatio",JSON.stringify(n,null,2)),N("CacheRatio",JSON.stringify(a,null,2)),N("CreateCacheRatio",JSON.stringify(i,null,2)),N("CompletionRatio",JSON.stringify(o,null,2)),N("ImageRatio",JSON.stringify(s,null,2)),N("AudioRatio",JSON.stringify(r,null,2)),N("AudioCompletionRatio",JSON.stringify(l,null,2)),N("billing_setting.billing_mode",JSON.stringify(c,null,2)),N("billing_setting.billing_expr",JSON.stringify(d,null,2)),en.current===e&&(z(null),_(!1),U(!1))},[f,y,b,v,k,x,w,C,A,S,P,N]),ey=(0,F.useMemo)(()=>(function(e){let{onDelete:t,onEdit:n,deleteDisabled:i,taskModelNames:o,t:s}=e;return[{id:"select",header:e=>{let{table:t}=e;return(0,a.jsx)(V.S,{checked:t.getIsAllPageRowsSelected(),indeterminate:t.getIsSomePageRowsSelected(),onCheckedChange:e=>t.toggleAllPageRowsSelected(!!e),"aria-label":s("Select all"),className:"translate-y-[2px]"})},cell:e=>{let{row:t}=e;return(0,a.jsx)(V.S,{checked:t.getIsSelected(),onCheckedChange:e=>t.toggleSelected(!!e),"aria-label":s("Select row"),className:"translate-y-[2px]"})},enableSorting:!1,enableHiding:!1,size:40},{accessorKey:"name",header:e=>{let{column:t}=e;return(0,a.jsx)(tU.w,{column:t,title:s("Model name")})},cell:e=>{let{row:t}=e,n=!!o?.has(t.original.name),i="tiered_expr"===t.original.billingMode&&!!t.original.billingExpr,r="tiered_expr"===t.original.billingMode&&!n;return(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2 font-medium",children:[(0,a.jsx)("span",{className:"min-w-0 truncate",children:t.getValue("name")}),r?(0,a.jsx)(ei.Wh,{label:s("Tiered"),variant:"info",copyable:!1,className:"shrink-0"}):null,n&&i?(0,a.jsx)(ei.Wh,{label:s("Task pricing"),variant:"info",copyable:!1,className:"shrink-0"}):null,t.original.hasConflict&&(0,a.jsx)(ei.Wh,{label:s("Conflict"),variant:"danger",copyable:!1,className:"shrink-0"}),n&&!i?(0,a.jsx)(ei.Wh,{label:s("Task pricing not configured"),variant:"warning",copyable:!1,className:"shrink-0"}):null]})},enableHiding:!1},{accessorKey:"billingMode",header:e=>{let{column:t}=e;return(0,a.jsx)(tU.w,{column:t,title:s("Mode")})},cell:e=>{let{row:t}=e;return(0,a.jsx)(ei.Wh,{label:s((0,tq.ax)(t.original.billingMode)),variant:(0,tq.Ph)(t.original.billingMode),copyable:!1,showDot:!1,className:"-ml-1.5 px-0"})},filterFn:(e,t,n)=>{var a;return a=e.getValue(t),!!(!Array.isArray(n)||0===n.length||n.includes(String(a)))||!!Array.isArray(n)&&!!n.includes(tE)&&!!o?.has(e.original.name)&&"tiered_expr"===e.original.billingMode&&!!e.original.billingExpr},meta:{label:s("Mode")}},{id:"priceSummary",header:e=>{let{column:t}=e;return(0,a.jsx)(tU.w,{column:t,title:s("Price summary")})},cell:e=>{let{row:t}=e;return(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-1",children:[(0,a.jsx)("span",{className:"truncate font-medium",children:(0,tq.uE)(t.original,s)}),(0,a.jsx)("span",{className:"text-muted-foreground truncate text-xs",children:(0,tq.v9)(t.original,s)})]})},sortingFn:(e,t)=>(0,tq.uE)(e.original,s).localeCompare((0,tq.uE)(t.original,s)),meta:{label:s("Price summary")}},{id:"actions",header:()=>(0,a.jsx)("div",{children:s("Actions")}),cell:e=>{let{row:o}=e;return(0,a.jsx)(ea._,{editLabel:s("Edit"),deleteLabel:s("Delete"),menuLabel:s("Open menu"),onEdit:()=>n(o.original),onDelete:()=>t(o.original.name),deleteDisabled:i})},enableHiding:!1}]})({onDelete:ef,onEdit:ep,deleteDisabled:"unset"===R,taskModelNames:ed,t:D}),[ep,ef,R,D,ed]),eb=(0,F.useCallback)(e=>{er(t=>e>0&&t.pageIndex>=e?{...t,pageIndex:e-1}:t)},[]),{table:ev}=(0,tj.uI)({data:eu,columns:ey,getRowId:e=>e.name,ensurePageInRange:eb,sorting:W,columnFilters:J,globalFilter:$,columnVisibility:el,pagination:es,rowSelection:X,enableRowSelection:!0,onSortingChange:H,onColumnFiltersChange:Q,onGlobalFilterChange:eg,onColumnVisibilityChange:ec,onPaginationChange:er,onRowSelectionChange:ee,autoResetPageIndex:!1,globalFilterFn:(e,t,n)=>{let a=String(n).toLowerCase();return e.original.name.toLowerCase().includes(a)}}),ek=(0,F.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[e.name],n=(0,eW.Pf)({ModelPrice:f,ModelRatio:y,CompletionRatio:k,CacheRatio:b,CreateCacheRatio:v,ImageRatio:x,AudioRatio:w,AudioCompletionRatio:C,BillingMode:A,BillingExpr:S,PluginBillingExpr:P});for(let[a,i]of Object.entries((0,eW.E8)(n,e,t)))N(a,i)},[f,y,k,b,v,x,w,C,A,S,P,N]),ex=(0,F.useCallback)(async()=>{if(!B)return void l.oR.error(D("Open a source model first"));let e=B;if(E&&et.current){let t=await et.current.commitDraft();if(!t)return;e=t,z(t)}let t=ev.getFilteredSelectedRowModel().rows.map(e=>e.original.name);0===t.length?l.oR.error(D("Select at least one target model")):(ek(e,[...new Set([e.name,...t])]),ev.resetRowSelection(),l.oR.success(D("Applied {{name}} pricing to {{count}} models",{name:e.name,count:t.length})))},[B,E,ek,D,ev]);(0,F.useImperativeHandle)(t,()=>({commitOpenEditor:async()=>{if(!E||!et.current)return!0;let e=await et.current.commitDraft();return!!e&&(ek(e),z(e),!0)}}),[E,ek]);let ew=ev.getRowModel().rows.length>0,eC=D("No models configured. Use Add model to get started.");return ev.getState().globalFilter?eC=D("No models match your search"):"unset"===R&&(eC=I?D("Loading..."):D("No models with unset prices")),(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[(0,a.jsxs)("div",{role:"region","aria-label":D("Model prices"),className:"grid min-h-0 flex-1 grid-rows-[minmax(0,1fr)] gap-4 md:grid-cols-[minmax(300px,0.72fr)_minmax(520px,1.28fr)] xl:grid-cols-[minmax(320px,0.68fr)_minmax(640px,1.32fr)]",children:[(0,a.jsxs)("div",{className:"flex min-h-0 min-w-0 flex-col gap-3",children:[(0,a.jsx)(tj.wk,{table:ev,searchPlaceholder:D("Search models..."),searchDebounceMs:250,filters:[{columnId:"billingMode",title:D("Mode"),options:[{label:"Per-token (deprecated)",value:"per-token",count:eh["per-token"]},{label:"Per-request (deprecated)",value:"per-request",count:eh["per-request"]},{label:"Expression",value:"tiered_expr",count:eh.tiered_expr},{label:"Expression - Task pricing",value:tE,count:eh[tE]}]}],preActions:"unset"===R?void 0:(0,a.jsxs)(G.$,{onClick:em,children:[(0,a.jsx)(Z.A,{"data-icon":"inline-start"}),D("Add model")]})}),ew?(0,a.jsx)(tj.Oz,{table:ev,containerClassName:"min-h-0 flex-1 rounded-md",tableContainerClassName:"h-full",tableClassName:"min-w-[852px] table-fixed",tableHeaderClassName:"[&_tr]:border-b-0",splitHeaderScrollClassName:"h-full",bodyContainerClassName:"[scrollbar-gutter:stable]",splitHeader:!0,pinnedColumns:[{columnId:"actions",side:"right"}],colgroup:(0,a.jsxs)("colgroup",{children:[(0,a.jsx)("col",{className:"w-9"}),(0,a.jsx)("col",{className:"w-[300px]"}),(0,a.jsx)("col",{className:"w-[120px]"}),(0,a.jsx)("col",{className:"w-[300px]"}),(0,a.jsx)("col",{className:"w-auto"})]}),renderRow:(e,t)=>{let{getCellClassName:n}=t;return(0,a.jsx)(tj.J2,{row:e,className:B?.name===e.original.name?"bg-muted/45 hover:bg-muted/50 data-[state=selected]:bg-muted group":"group",getColumnClassName:t=>"actions"===t&&B?.name===e.original.name?n(t,"bg-muted"):n(t),onClick:t=>{t.target.closest('button, [role="checkbox"]')||ep(e.original)}},e.id)}}):(0,a.jsx)("div",{className:"text-muted-foreground rounded-lg border border-dashed p-8 text-center",children:eC}),ew&&(0,a.jsx)(tj.Tw,{table:ev})]}),(0,a.jsx)("div",{className:"hidden min-h-0 min-w-0 md:block",children:E?(0,a.jsx)(tL.B,{ref:et,editData:B,pluginVariants:K.data?.entries.find(e=>e.model_name===B?.name)?.plugin_variants,usageSchema:K.data?.entries.find(e=>e.model_name===B?.name)?.usage_schema,onSave:j,isSaving:M,className:"h-full min-h-0"}):(0,a.jsxs)("div",{className:"bg-card text-muted-foreground flex h-full min-h-0 flex-col items-center justify-center gap-3 rounded-xl border border-dashed p-6 text-center",children:[(0,a.jsx)("div",{className:"text-foreground text-base font-medium",children:D("Select a model to edit pricing")}),(0,a.jsx)("p",{className:"max-w-sm text-sm",children:D("Use the full-width table to scan prices, then select a row to edit it here.")}),"unset"!==R&&(0,a.jsxs)(G.$,{variant:"outline",onClick:em,children:[(0,a.jsx)(Z.A,{"data-icon":"inline-start"}),D("Add model")]})]})})]}),(0,a.jsx)(tj.Of,{table:ev,entityName:D("model"),children:(0,a.jsxs)(G.$,{size:"sm",disabled:!B,onClick:ex,children:[(0,a.jsx)(tN.A,{"data-icon":"inline-start"}),B?D("Copy {{name}} pricing",{name:B.name}):D("Open a source model first")]})}),L&&(0,a.jsx)(tL.x,{ref:et,open:q,onOpenChange:U,editData:B,pluginVariants:K.data?.entries.find(e=>e.model_name===B?.name)?.plugin_variants,usageSchema:K.data?.entries.find(e=>e.model_name===B?.name)?.usage_schema,onSave:j,isSaving:M})]})}),tB=(0,F.memo)(t_,(e,t)=>e.savedModelPrice===t.savedModelPrice&&e.savedModelRatio===t.savedModelRatio&&e.savedCacheRatio===t.savedCacheRatio&&e.savedCreateCacheRatio===t.savedCreateCacheRatio&&e.savedCompletionRatio===t.savedCompletionRatio&&e.savedImageRatio===t.savedImageRatio&&e.savedAudioRatio===t.savedAudioRatio&&e.savedAudioCompletionRatio===t.savedAudioCompletionRatio&&e.savedBillingMode===t.savedBillingMode&&e.savedBillingExpr===t.savedBillingExpr&&e.savedPluginBillingExpr===t.savedPluginBillingExpr&&e.modelPrice===t.modelPrice&&e.modelRatio===t.modelRatio&&e.cacheRatio===t.cacheRatio&&e.createCacheRatio===t.createCacheRatio&&e.completionRatio===t.completionRatio&&e.imageRatio===t.imageRatio&&e.audioRatio===t.audioRatio&&e.audioCompletionRatio===t.audioCompletionRatio&&e.billingMode===t.billingMode&&e.billingExpr===t.billingExpr&&e.pluginBillingExpr===t.pluginBillingExpr&&e.candidateModelNames===t.candidateModelNames&&e.candidateModelsLoading===t.candidateModelsLoading&&e.filterMode===t.filterMode&&e.onChange===t.onChange&&e.onSave===t.onSave&&e.isSaving===t.isSaving),tG=[{name:"ModelPrice",labelKey:"Model fixed pricing",descriptionKey:"JSON map of model → USD cost per request. Takes precedence over ratio based billing."},{name:"ModelRatio",labelKey:"Model ratio",descriptionKey:"JSON map of model → multiplier applied to quota billing."},{name:"CacheRatio",labelKey:"Prompt cache ratio",descriptionKey:"Optional ratio used when upstream cache hits occur."},{name:"CreateCacheRatio",labelKey:"Create cache ratio",descriptionKey:"Ratio applied when creating cache entries for supported models."},{name:"CompletionRatio",labelKey:"Completion ratio",descriptionKey:"Applies to custom completion endpoints. JSON map of model → ratio."},{name:"ImageRatio",labelKey:"Image ratio",descriptionKey:"Configure per-model ratio for image inputs or outputs."},{name:"AudioRatio",labelKey:"Audio ratio",descriptionKey:"Ratio applied to audio inputs where supported by the upstream model."},{name:"AudioCompletionRatio",labelKey:"Audio completion ratio",descriptionKey:"Ratio applied to audio completions for streaming models."}];function tV(e){return(0,a.jsx)(u.zB,{control:e.form.control,name:e.name,render:t=>{let{field:n}=t;return(0,a.jsxs)(u.eI,{className:"flex min-w-0 flex-col gap-2",children:[(0,a.jsx)(u.lR,{children:e.label}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(_.B,{value:n.value,onChange:e=>n.onChange(e),name:n.name,onBlur:n.onBlur,textareaRef:n.ref})}),(0,a.jsx)(u.Rr,{className:"text-xs leading-5",children:e.description}),(0,a.jsx)(u.C5,{})]})}})}let tz=(0,F.memo)(function(e){let{form:t,savedValues:n,onSave:i,onReset:o,isSaving:s,isResetting:l,variant:c="default"}=e,{t:d}=(0,r.Bd)(),h="unset"===c,[f,y]=(0,F.useState)("visual"),b=(0,F.useRef)(null),v=(0,tA.I)({queryKey:["enabled-models"],queryFn:async()=>(0,tR.oi)(await (0,tI.Kz)()),enabled:h}),k=!!h&&(v.isError||void 0!==v.data&&!v.data.success),x=v.data?.message;(0,F.useEffect)(()=>{k&&(0,Y.Q)(v.error??v.data,d("Failed to load enabled models"))},[k,x,v.error,v.data,d]);let w=(0,F.useCallback)((e,n)=>{t.setValue(e,n,{shouldValidate:!0,shouldDirty:!0})},[t]),C=(0,F.useCallback)(()=>{y(e=>"visual"===e?"json":"visual")},[]),A=(0,F.useCallback)(async()=>{("visual"!==f||!1!==await b.current?.commitOpenEditor())&&await t.handleSubmit(i)()},[f,t,i]);return(0,a.jsx)(u.lV,{...t,children:(0,a.jsxs)("div",{className:"flex min-h-0 flex-1 flex-col gap-6",children:[!h&&(0,a.jsxs)("div",{className:"flex shrink-0 flex-wrap items-center justify-end gap-2",children:[(0,a.jsx)(g.cN,{children:(0,a.jsx)(u.zB,{control:t.control,name:"ExposeRatioEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(m.H,{className:"gap-2 py-0",children:[(0,a.jsxs)(m.z$,{children:[(0,a.jsx)(u.lR,{children:d("Expose ratio API")}),(0,a.jsx)(u.Rr,{className:"sr-only",children:d("Allow clients to query configured prices via `/api/ratio`.")})]}),(0,a.jsx)(u.MJ,{children:(0,a.jsx)(p.d,{checked:t.value,onCheckedChange:t.onChange})}),(0,a.jsx)(tT.e,{contentProps:{side:"bottom",align:"end"},children:d("Allow clients to query configured prices via `/api/ratio`.")})]})}})}),(0,a.jsxs)(G.$,{type:"button",variant:"destructive",size:"sm",onClick:o,disabled:l,children:[(0,a.jsx)(tS.A,{"data-icon":"inline-start"}),d("Reset prices")]}),"json"===f&&(0,a.jsxs)(G.$,{type:"button",size:"sm",onClick:A,disabled:s,children:[(0,a.jsx)(tP.A,{"data-icon":"inline-start"}),s?d("Saving..."):d("Save model prices")]}),(0,a.jsx)(G.$,{variant:"outline",size:"sm",onClick:C,children:"visual"===f?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(U.A,{className:"mr-2 h-4 w-4"}),d("Switch to JSON")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-4 w-4"}),d("Switch to Visual")]})})]}),"visual"===f?(0,a.jsx)("div",{className:"flex min-h-0 flex-1 flex-col gap-6",children:(0,a.jsx)(tB,{ref:b,savedModelPrice:n.ModelPrice,savedModelRatio:n.ModelRatio,savedCacheRatio:n.CacheRatio,savedCreateCacheRatio:n.CreateCacheRatio,savedCompletionRatio:n.CompletionRatio,savedImageRatio:n.ImageRatio,savedAudioRatio:n.AudioRatio,savedAudioCompletionRatio:n.AudioCompletionRatio,savedBillingMode:n.BillingMode,savedBillingExpr:n.BillingExpr,savedPluginBillingExpr:n.PluginBillingExpr,modelPrice:t.watch("ModelPrice"),modelRatio:t.watch("ModelRatio"),cacheRatio:t.watch("CacheRatio"),createCacheRatio:t.watch("CreateCacheRatio"),completionRatio:t.watch("CompletionRatio"),imageRatio:t.watch("ImageRatio"),audioRatio:t.watch("AudioRatio"),audioCompletionRatio:t.watch("AudioCompletionRatio"),billingMode:t.watch("BillingMode"),billingExpr:t.watch("BillingExpr"),pluginBillingExpr:t.watch("PluginBillingExpr"),candidateModelNames:h?v.data?.data:void 0,candidateModelsLoading:h&&v.isLoading,filterMode:h?"unset":"all",onSave:A,isSaving:s,onChange:(e,t)=>{w({"billing_setting.billing_mode":"BillingMode","billing_setting.billing_expr":"BillingExpr","billing_setting.plugin_billing_expr":"PluginBillingExpr"}[e]||e,t)}})}):(0,a.jsx)(m.yt,{onSubmit:t.handleSubmit(i),children:(0,a.jsx)("div",{className:"grid min-w-0 gap-x-5 gap-y-8 lg:grid-cols-2 2xl:grid-cols-3",children:tG.map(e=>(0,a.jsx)(tV,{form:t,name:e.name,label:d(e.labelKey),description:d(e.descriptionKey)},e.name))})})]})})});var tK=n(90358);let tW={web_search:10,web_search_preview:10,"web_search_preview:gpt-4o*":25,"web_search_preview:gpt-4.1*":25,"web_search_preview:gpt-4o-mini*":25,"web_search_preview:gpt-4.1-mini*":25,file_search:2.5,google_search:14,"google_search:gemini-2.5*":0,"google_search:gemini-2.0*":0,"google_search:gemini-1.5*":0,"google_search_grounded_prompt:gemini-2.5*":35,"google_search_grounded_prompt:gemini-2.0*":35,"google_search_grounded_prompt:gemini-1.5*":35,image_generation:150,search_std:10,search_pro:30,search_pro_sogou:50,search_pro_quark:50,search_strategy_turbo:3,search_strategy_max:4,search_strategy_agent:4,search_strategy_agent_max:4,bing_web_search:14,"web_search:grok*":5,x_search_posts:5,x_search_profiles:10,deepseek_search:.75,deepseek_fetch:.75};function tH(e){if(""===e.trim())return null;let t=Number(e);return!Number.isFinite(t)||t<0?null:t}function tJ(e){let t={};for(let n of e){let e=n.key.trim();if(!e)continue;let a=tH(n.price);null!==a&&(t[e]=a)}return t}function tQ(e){return Object.entries(e).map((e,t)=>{let[n,a]=e;return{id:t+1,key:n,price:String(a)}})}let t$=(0,F.memo)(function(e){let{defaultValue:t}=e,{t:n}=(0,r.Bd)(),i=(0,y.M)(),[o,s]=(0,F.useState)("visual"),[c,d]=(0,F.useState)([]),[u,p]=(0,F.useState)(""),[m,g]=(0,F.useState)(""),[f,b]=(0,F.useState)(1);(0,F.useEffect)(()=>{let e=function(e){if(!e)return{...tW};try{let t=JSON.parse(e);if(t&&"object"==typeof t&&!Array.isArray(t)&&Object.keys(t).length>0){let e={};for(let[n,a]of Object.entries(t))"number"==typeof a&&Number.isFinite(a)&&a>=0&&(e[n]=a);return{...tW,...e}}}catch{}return{...tW}}(t),n=tQ(e);d(n),p(JSON.stringify(e,null,2)),g(""),b(n.length+1)},[t]);let v=(0,F.useMemo)(()=>tJ(c),[c]),k=(0,F.useMemo)(()=>new Set(c.filter(e=>null===tH(e.price)).map(e=>e.id)),[c]),x=(0,F.useCallback)(e=>{d(e),p(JSON.stringify(tJ(e),null,2)),g("")},[]),w=(0,F.useCallback)(e=>{p(e);try{let t=JSON.parse(e);if(!t||"object"!=typeof t||Array.isArray(t))return void g(n("JSON must be an object"));let a={};for(let[e,i]of Object.entries(t)){if("number"!=typeof i||!Number.isFinite(i)||i<0)return void g(n("Please enter a valid number"));a[e]=i}let i=tQ(a);d(i),b(i.length+1),g("")}catch(e){g(e instanceof Error?e.message:n("Invalid JSON"))}},[n]),C=(0,F.useCallback)((e,t,n)=>{x(c.map(a=>a.id===e?{...a,[t]:n}:a))},[c,x]),A=(0,F.useCallback)(()=>{b(e=>e+1),x([...c,{id:f,key:"",price:"0"}])},[f,c,x]),S=(0,F.useCallback)(e=>{x(c.filter(t=>t.id!==e))},[c,x]),P=(0,F.useCallback)(()=>{let e=tQ(tW);d(e),p(JSON.stringify(tW,null,2)),g(""),b(e.length+1)},[]),T=(0,F.useCallback)(async()=>{try{await navigator.clipboard.writeText(u),l.oR.success(n("Copied to clipboard"))}catch{l.oR.error(n("Failed to copy"))}},[u,n]),I=(0,F.useCallback)(async()=>{k.size>0?l.oR.error(n("Please enter a valid number")):"json"===o&&m?l.oR.error(n("Please fix JSON errors before saving")):await i.mutateAsync({key:"tool_price_setting.prices",value:JSON.stringify(v)})},[v,o,k.size,m,n,i]),N=(0,F.useCallback)(()=>{s(e=>"visual"===e?"json":"visual")},[]);return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(R.Fc,{children:(0,a.jsxs)(R.TN,{className:"space-y-1 text-sm",children:[(0,a.jsx)("div",{children:n("Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.")}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"font-medium",children:[n("Format"),":"]})," ",(0,a.jsx)("code",{className:"bg-muted rounded px-1 py-0.5 text-xs",children:"web_search_preview"})," ",n("is the default price; "),(0,a.jsx)("code",{className:"bg-muted rounded px-1 py-0.5 text-xs",children:"web_search_preview:gpt-4o*"})," ",n("overrides for matching model prefix.")]})]})}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:"visual"===o?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(G.$,{variant:"outline",size:"sm",onClick:A,children:[(0,a.jsx)(Z.A,{className:"mr-2 h-4 w-4"}),n("Add")]}),(0,a.jsx)(G.$,{variant:"ghost",size:"sm",onClick:P,children:n("Restore defaults")})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(G.$,{variant:"ghost",size:"sm",onClick:T,children:[(0,a.jsx)(tN.A,{className:"mr-2 h-4 w-4"}),n("Copy")]}),(0,a.jsx)(G.$,{variant:"ghost",size:"sm",onClick:P,children:n("Restore defaults")})]})}),(0,a.jsx)(G.$,{variant:"outline",size:"sm",onClick:N,children:"visual"===o?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(U.A,{className:"mr-2 h-4 w-4"}),n("Switch to JSON")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(E.A,{className:"mr-2 h-4 w-4"}),n("Switch to Visual")]})})]}),"visual"===o?(0,a.jsx)(tj.hm,{data:c,getRowKey:e=>e.id,emptyClassName:"text-muted-foreground py-8",emptyContent:n("No tools configured"),columns:[{id:"tool",header:n("Tool identifier"),cell:e=>(0,a.jsx)(h.p,{value:e.key,placeholder:"web_search_preview:gpt-4o*",onChange:t=>C(e.id,"key",t.target.value)})},{id:"price",header:n("Price ($/1K calls)"),className:"w-[200px]",cell:e=>{let t=k.has(e.id);return(0,a.jsxs)(tK.D0,{"data-invalid":t,children:[(0,a.jsx)(h.p,{type:"number",min:0,step:1e-4,value:e.price,"aria-invalid":t,"aria-label":`${n("Price ($/1K calls)")}: ${e.key||n("Tool identifier")}`,onChange:t=>C(e.id,"price",t.target.value)}),t?(0,a.jsx)(tK.bg,{children:n("Please enter a valid number")}):null]})}},{id:"actions",header:n("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)(G.$,{variant:"ghost",size:"icon",onClick:()=>S(e.id),"aria-label":n("Delete"),children:(0,a.jsx)(et.A,{className:"text-destructive h-4 w-4"})})}]}):(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(_.B,{value:u,onChange:w,heightClassName:"h-72 min-h-72 max-h-72","aria-invalid":!!m}),m&&(0,a.jsx)("p",{className:"text-destructive text-sm",children:m})]}),(0,a.jsx)("div",{className:"flex justify-end",children:(0,a.jsx)(G.$,{onClick:I,disabled:i.isPending||k.size>0||"json"===o&&!!m,children:n("Save tool prices")})})]})});var tY=n(86986),tX=n(31852);function tZ(e,t){return c.Yj().superRefine((n,a)=>{let i=(0,tX.En)(n,t);i.valid||a.addIssue({code:k.eq.custom,message:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Invalid JSON";if(!t)return e(n);if("required"===t.type)return e("Value is required");if("structure"===t.type)return e("Invalid JSON"===n?"JSON structure is invalid":n);let a=[t.line&&t.column?e("JSON is invalid at line {{line}}, column {{column}}.",{line:t.line,column:t.column}):void 0!==t.position?e("JSON is invalid at position {{position}}.",{position:t.position}):e("JSON is invalid. Please check the syntax.")];return t.missingCommaLine&&a.push(e("Check line {{line}} for a missing comma.",{line:t.missingCommaLine})),a.join(" ")}(e,i.error,i.message)})})}function t0(e){let{modelDefaults:t,groupDefaults:n,toolPricesDefault:i,titleKey:d="Pricing Ratios",visibleTabs:u=["models","groups","tool-prices","upstream-sync"]}=e,{t:h}=(0,r.Bd)(),p=(0,y.M)(),[m,b]=(0,F.useState)(!1),v=(0,eK.dy)(),k=(0,eK.cf)(),[x,w]=(0,F.useState)(null);(0,F.useEffect)(()=>{!x&&v.data&&w(v.data)},[x,v.data]);let C=(0,F.useMemo)(()=>x?{...t,...x.options,BillingMode:x.options["billing_setting.billing_mode"],BillingExpr:x.options["billing_setting.billing_expr"],PluginBillingExpr:x.options["billing_setting.plugin_billing_expr"]}:t,[t,x]),A=(0,L.n)({mutationFn:async()=>{x&&(await k.mutateAsync(x.entries.map(e=>({model_name:e.model_name,expected_version:e.version,pricing:{},reset:!0}))),w((await v.refetch()).data??null))},onSuccess:()=>{l.oR.success(h("Model prices reset successfully")),b(!1)},onError:e=>(0,Y.Q)(e)}),S=(0,F.useRef)({ModelPrice:(0,tX.Nr)(C.ModelPrice),ModelRatio:(0,tX.Nr)(C.ModelRatio),CacheRatio:(0,tX.Nr)(C.CacheRatio),CreateCacheRatio:(0,tX.Nr)(C.CreateCacheRatio),CompletionRatio:(0,tX.Nr)(C.CompletionRatio),ImageRatio:(0,tX.Nr)(C.ImageRatio),AudioRatio:(0,tX.Nr)(C.AudioRatio),AudioCompletionRatio:(0,tX.Nr)(C.AudioCompletionRatio),ExposeRatioEnabled:C.ExposeRatioEnabled,BillingMode:(0,tX.Nr)(C.BillingMode),BillingExpr:(0,tX.Nr)(C.BillingExpr),PluginBillingExpr:(0,tX.Nr)(C.PluginBillingExpr)}),[T,I]=(0,F.useState)(S.current),R=(0,F.useRef)({GroupRatio:(0,tX.Nr)(n.GroupRatio),TopupGroupRatio:(0,tX.Nr)(n.TopupGroupRatio),UserUsableGroups:(0,tX.Nr)(n.UserUsableGroups),GroupGroupRatio:(0,tX.Nr)(n.GroupGroupRatio),AutoGroups:(0,tX.Nr)(n.AutoGroups),MaxTokenAutoGroups:n.MaxTokenAutoGroups,DefaultUseAutoGroup:n.DefaultUseAutoGroup,GroupSpecialUsableGroup:(0,tX.Nr)(n.GroupSpecialUsableGroup)}),N=(0,F.useMemo)(()=>c.Ik({ModelPrice:tZ(h),ModelRatio:tZ(h),CacheRatio:tZ(h),CreateCacheRatio:tZ(h),CompletionRatio:tZ(h),ImageRatio:tZ(h),AudioRatio:tZ(h),AudioCompletionRatio:tZ(h),ExposeRatioEnabled:c.zM(),BillingMode:tZ(h),BillingExpr:tZ(h),PluginBillingExpr:tZ(h)}),[h]),j=(0,F.useMemo)(()=>c.Ik({GroupRatio:tZ(h),TopupGroupRatio:tZ(h),UserUsableGroups:tZ(h),GroupGroupRatio:tZ(h),AutoGroups:tZ(h,{predicate:e=>Array.isArray(e)&&e.every(e=>"string"==typeof e),predicateMessage:"Expected a JSON array of group identifiers"}),MaxTokenAutoGroups:(0,P.d)(h("Enter a positive integer")),DefaultUseAutoGroup:c.zM(),GroupSpecialUsableGroup:tZ(h)}),[h]),M=(0,s.mN)({resolver:(0,o.u)(N),mode:"onChange",defaultValues:{...C,ModelPrice:(0,tX.ZY)(C.ModelPrice),ModelRatio:(0,tX.ZY)(C.ModelRatio),CacheRatio:(0,tX.ZY)(C.CacheRatio),CreateCacheRatio:(0,tX.ZY)(C.CreateCacheRatio),CompletionRatio:(0,tX.ZY)(C.CompletionRatio),ImageRatio:(0,tX.ZY)(C.ImageRatio),AudioRatio:(0,tX.ZY)(C.AudioRatio),AudioCompletionRatio:(0,tX.ZY)(C.AudioCompletionRatio),BillingMode:(0,tX.ZY)(C.BillingMode),BillingExpr:(0,tX.ZY)(C.BillingExpr),PluginBillingExpr:(0,tX.ZY)(C.PluginBillingExpr)}}),D=(0,s.mN)({resolver:(0,o.u)(j),mode:"onChange",defaultValues:{...n,GroupRatio:(0,tX.ZY)(n.GroupRatio),TopupGroupRatio:(0,tX.ZY)(n.TopupGroupRatio),UserUsableGroups:(0,tX.ZY)(n.UserUsableGroups),GroupGroupRatio:(0,tX.ZY)(n.GroupGroupRatio),AutoGroups:(0,tX.ZY)(n.AutoGroups),GroupSpecialUsableGroup:(0,tX.ZY)(n.GroupSpecialUsableGroup)}});(0,F.useEffect)(()=>{S.current={ModelPrice:(0,tX.Nr)(C.ModelPrice),ModelRatio:(0,tX.Nr)(C.ModelRatio),CacheRatio:(0,tX.Nr)(C.CacheRatio),CreateCacheRatio:(0,tX.Nr)(C.CreateCacheRatio),CompletionRatio:(0,tX.Nr)(C.CompletionRatio),ImageRatio:(0,tX.Nr)(C.ImageRatio),AudioRatio:(0,tX.Nr)(C.AudioRatio),AudioCompletionRatio:(0,tX.Nr)(C.AudioCompletionRatio),ExposeRatioEnabled:C.ExposeRatioEnabled,BillingMode:(0,tX.Nr)(C.BillingMode),BillingExpr:(0,tX.Nr)(C.BillingExpr),PluginBillingExpr:(0,tX.Nr)(C.PluginBillingExpr)},I(S.current),M.reset({...C,ModelPrice:(0,tX.ZY)(C.ModelPrice),ModelRatio:(0,tX.ZY)(C.ModelRatio),CacheRatio:(0,tX.ZY)(C.CacheRatio),CreateCacheRatio:(0,tX.ZY)(C.CreateCacheRatio),CompletionRatio:(0,tX.ZY)(C.CompletionRatio),ImageRatio:(0,tX.ZY)(C.ImageRatio),AudioRatio:(0,tX.ZY)(C.AudioRatio),AudioCompletionRatio:(0,tX.ZY)(C.AudioCompletionRatio),BillingMode:(0,tX.ZY)(C.BillingMode),BillingExpr:(0,tX.ZY)(C.BillingExpr),PluginBillingExpr:(0,tX.ZY)(C.PluginBillingExpr)})},[C,M]),(0,F.useEffect)(()=>{R.current={GroupRatio:(0,tX.Nr)(n.GroupRatio),TopupGroupRatio:(0,tX.Nr)(n.TopupGroupRatio),UserUsableGroups:(0,tX.Nr)(n.UserUsableGroups),GroupGroupRatio:(0,tX.Nr)(n.GroupGroupRatio),AutoGroups:(0,tX.Nr)(n.AutoGroups),MaxTokenAutoGroups:n.MaxTokenAutoGroups,DefaultUseAutoGroup:n.DefaultUseAutoGroup,GroupSpecialUsableGroup:(0,tX.Nr)(n.GroupSpecialUsableGroup)},D.reset({...n,GroupRatio:(0,tX.ZY)(n.GroupRatio),TopupGroupRatio:(0,tX.ZY)(n.TopupGroupRatio),UserUsableGroups:(0,tX.ZY)(n.UserUsableGroups),GroupGroupRatio:(0,tX.ZY)(n.GroupGroupRatio),AutoGroups:(0,tX.ZY)(n.AutoGroups),GroupSpecialUsableGroup:(0,tX.ZY)(n.GroupSpecialUsableGroup)})},[n,D]);let O=(0,F.useCallback)(async e=>{let t={ModelPrice:(0,tX.Nr)(e.ModelPrice),ModelRatio:(0,tX.Nr)(e.ModelRatio),CacheRatio:(0,tX.Nr)(e.CacheRatio),CreateCacheRatio:(0,tX.Nr)(e.CreateCacheRatio),CompletionRatio:(0,tX.Nr)(e.CompletionRatio),ImageRatio:(0,tX.Nr)(e.ImageRatio),AudioRatio:(0,tX.Nr)(e.AudioRatio),AudioCompletionRatio:(0,tX.Nr)(e.AudioCompletionRatio),ExposeRatioEnabled:e.ExposeRatioEnabled,BillingMode:(0,tX.Nr)(e.BillingMode),BillingExpr:(0,tX.Nr)(e.BillingExpr),PluginBillingExpr:(0,tX.Nr)(e.PluginBillingExpr)};if(x)try{let e=(0,eK.mc)(x,(0,eW.Pf)(S.current),(0,eW.Pf)(t)),n=t.ExposeRatioEnabled!==S.current.ExposeRatioEnabled;if(!e.length&&!n)return void l.oR.info(h("No model price changes to save"));await k.mutateAsync(e),n&&await p.mutateAsync({key:"ExposeRatioEnabled",value:t.ExposeRatioEnabled});let a=await v.refetch();w(a.data??null),S.current=t,I(t),l.oR.success(h("Model pricing saved"))}catch(e){(0,Y.Q)(e)}},[h,p,x,k,v]),q=(0,F.useCallback)(async e=>{let t={GroupRatio:(0,tX.Nr)(e.GroupRatio),TopupGroupRatio:(0,tX.Nr)(e.TopupGroupRatio),UserUsableGroups:(0,tX.Nr)(e.UserUsableGroups),GroupGroupRatio:(0,tX.Nr)(e.GroupGroupRatio),AutoGroups:(0,tX.Nr)(e.AutoGroups),MaxTokenAutoGroups:e.MaxTokenAutoGroups,DefaultUseAutoGroup:e.DefaultUseAutoGroup,GroupSpecialUsableGroup:(0,tX.Nr)(e.GroupSpecialUsableGroup)},n={GroupSpecialUsableGroup:"group_ratio_setting.group_special_usable_group"};for(let e of Object.keys(t).filter(e=>t[e]!==R.current[e])){let a=n[e]||e;await p.mutateAsync({key:a,value:t[e]})}R.current=t},[p]),U=(0,F.useCallback)(()=>{b(!0)},[]),{mutate:E}=A,_=(0,F.useCallback)(()=>{E()},[E]),B={models:"Model prices","unset-models":"Unset price models",groups:"Group ratios","tool-prices":"Tool prices","upstream-sync":"Upstream price sync"},V={1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5"}[u.length]??"grid-cols-4",z=u[0]??"models",K=e=>"models"===e||"unset-models"===e?v.isError?(0,a.jsx)(eV.W,{description:v.error.message,onRetry:()=>void v.refetch()}):x?(0,a.jsxs)(a.Fragment,{children:[k.isError&&(0,a.jsx)(G.$,{variant:"outline",size:"sm",onClick:async()=>{let e=await v.refetch();e.data&&w(e.data),k.reset()},children:h("Reload pricing")}),(0,a.jsx)(tz,{form:M,savedValues:T,onSave:O,onReset:U,isSaving:p.isPending||k.isPending,isResetting:A.isPending,variant:"unset-models"===e?"unset":"default"})]}):(0,a.jsx)(ez.G,{}):"groups"===e?(0,a.jsx)(tk,{form:D,onSave:q,isSaving:p.isPending}):"tool-prices"===e?(0,a.jsx)(t$,{defaultValue:i}):(0,a.jsx)(tY._,{});return(0,a.jsxs)(a.Fragment,{children:[1===u.length?(0,a.jsx)(f.X,{title:h(d),className:"models"===z||"unset-models"===z?"min-h-0 flex-1":void 0,children:K(z)}):(0,a.jsxs)(Q.tU,{defaultValue:z,className:"h-full min-h-0 gap-6",children:[(0,a.jsx)(g.d1,{children:(0,a.jsx)(Q.j7,{className:`grid w-fit max-w-full ${V}`,children:u.map(e=>(0,a.jsx)(Q.Xi,{value:e,children:h(B[e])},e))})}),(0,a.jsx)(f.X,{title:h(d),className:"min-h-0 flex-1",children:u.map(e=>(0,a.jsx)(Q.av,{value:e,className:"models"===e||"unset-models"===e?"flex min-h-0 flex-col data-hidden:hidden":"min-h-0",children:K(e)},e))})]}),(0,a.jsx)(eG.T,{open:m,onOpenChange:b,title:h("Reset all model prices?"),desc:h("This will clear custom pricing ratios and revert to upstream defaults."),destructive:!0,isLoading:A.isPending,handleConfirm:_,confirmText:h("Reset")})]})}var t1=n(38159);let t2=e=>({ModelPrice:e.ModelPrice,ModelRatio:e.ModelRatio,CacheRatio:e.CacheRatio,CreateCacheRatio:e.CreateCacheRatio,CompletionRatio:e.CompletionRatio,ImageRatio:e.ImageRatio,AudioRatio:e.AudioRatio,AudioCompletionRatio:e.AudioCompletionRatio,ExposeRatioEnabled:e.ExposeRatioEnabled,BillingMode:e["billing_setting.billing_mode"],BillingExpr:e["billing_setting.billing_expr"],PluginBillingExpr:e["billing_setting.plugin_billing_expr"]}),t5=e=>({TopupGroupRatio:e.TopupGroupRatio,GroupRatio:e.GroupRatio,UserUsableGroups:e.UserUsableGroups,GroupGroupRatio:e.GroupGroupRatio,AutoGroups:e.AutoGroups,MaxTokenAutoGroups:e.MaxTokenAutoGroups,DefaultUseAutoGroup:e.DefaultUseAutoGroup,GroupSpecialUsableGroup:e["group_ratio_setting.group_special_usable_group"]}),t4=[{id:"quota",titleKey:"Quota Settings",build:e=>(0,a.jsx)(D,{defaultValues:{QuotaForNewUser:e.QuotaForNewUser,QuotaForInviter:e.QuotaForInviter,QuotaForInvitee:e.QuotaForInvitee,TopUpLink:e.TopUpLink,quota_setting:{trust_quota_usd:e["quota_setting.trust_quota_usd"],pre_consume_multiplier:e["quota_setting.pre_consume_multiplier"],enable_free_model_pre_consume:e["quota_setting.enable_free_model_pre_consume"]}},complianceConfirmed:(e["payment_setting.compliance_confirmed"]??!1)&&"v1"===e["payment_setting.compliance_terms_version"]})},{id:"currency",titleKey:"Currency & Display",build:e=>(0,a.jsx)(T,{defaultValues:{QuotaPerUnit:e.QuotaPerUnit,USDExchangeRate:e.USDExchangeRate,DisplayInCurrencyEnabled:e.DisplayInCurrencyEnabled,DisplayTokenStatEnabled:e.DisplayTokenStatEnabled,general_setting:{quota_display_type:(0,i.LC)(e["general_setting.quota_display_type"]),custom_currency_symbol:e["general_setting.custom_currency_symbol"]??"¤",custom_currency_exchange_rate:e["general_setting.custom_currency_exchange_rate"]??1}}})},{id:"model-pricing",titleKey:"Model Pricing",build:e=>(0,a.jsx)(t0,{titleKey:"Model Pricing",modelDefaults:t2(e),groupDefaults:t5(e),toolPricesDefault:e["tool_price_setting.prices"],visibleTabs:["models","unset-models","tool-prices","upstream-sync"]})},{id:"group-pricing",titleKey:"Group Pricing",build:e=>(0,a.jsx)(t0,{titleKey:"Group Pricing",modelDefaults:t2(e),groupDefaults:t5(e),toolPricesDefault:e["tool_price_setting.prices"],visibleTabs:["groups"]})},{id:"payment",titleKey:"Payment Gateway",build:e=>(0,a.jsx)(eB,{defaultValues:{PayAddress:e.PayAddress,EpayId:e.EpayId,EpayKey:e.EpayKey,Price:e.Price,MinTopUp:e.MinTopUp,CustomCallbackAddress:e.CustomCallbackAddress,PayMethods:e.PayMethods,AmountOptions:e["payment_setting.amount_options"],AmountDiscount:e["payment_setting.amount_discount"],StripeApiSecret:e.StripeApiSecret,StripeWebhookSecret:e.StripeWebhookSecret,StripePriceId:e.StripePriceId,StripeUnitPrice:e.StripeUnitPrice,StripeMinTopUp:e.StripeMinTopUp,StripePromotionCodesEnabled:e.StripePromotionCodesEnabled,CreemApiKey:e.CreemApiKey,CreemWebhookSecret:e.CreemWebhookSecret,CreemTestMode:e.CreemTestMode,CreemProducts:e.CreemProducts},waffoDefaultValues:{WaffoEnabled:e.WaffoEnabled??!1,WaffoApiKey:e.WaffoApiKey??"",WaffoPrivateKey:e.WaffoPrivateKey??"",WaffoPublicCert:e.WaffoPublicCert??"",WaffoSandboxPublicCert:e.WaffoSandboxPublicCert??"",WaffoSandboxApiKey:e.WaffoSandboxApiKey??"",WaffoSandboxPrivateKey:e.WaffoSandboxPrivateKey??"",WaffoSandbox:e.WaffoSandbox??!1,WaffoMerchantId:e.WaffoMerchantId??"",WaffoCurrency:e.WaffoCurrency??"USD",WaffoUnitPrice:e.WaffoUnitPrice??1,WaffoMinTopUp:e.WaffoMinTopUp??1,WaffoNotifyUrl:e.WaffoNotifyUrl??"",WaffoReturnUrl:e.WaffoReturnUrl??"",WaffoPayMethods:e.WaffoPayMethods??"[]"},waffoPancakeDefaultValues:{WaffoPancakeMerchantID:e.WaffoPancakeMerchantID??"",WaffoPancakePrivateKey:e.WaffoPancakePrivateKey??"",WaffoPancakeReturnURL:e.WaffoPancakeReturnURL??""},waffoPancakeProvisionedStoreID:e.WaffoPancakeStoreID??"",waffoPancakeProvisionedProductID:e.WaffoPancakeProductID??"",complianceDefaults:{confirmed:e["payment_setting.compliance_confirmed"]??!1,termsVersion:e["payment_setting.compliance_terms_version"]??"",confirmedAt:e["payment_setting.compliance_confirmed_at"]??0,confirmedBy:e["payment_setting.compliance_confirmed_by"]??0}})},{id:"checkin",titleKey:"Check-in Rewards",build:e=>(0,a.jsx)(v,{defaultValues:{enabled:e["checkin_setting.enabled"],minQuota:e["checkin_setting.min_quota"],maxQuota:e["checkin_setting.max_quota"]}})}],t3=(0,t1.h)({sections:t4,defaultSection:"quota",basePath:"/system-settings/billing",urlStyle:"path"}),t6=t3.sectionIds,t8=t3.defaultSection,t9=t3.getSectionNavItems,t7=t3.getSectionContent,ne=t3.getSectionMeta},27784(e,t,n){"use strict";var a=n(72361),i=n(6702),o=n(31002);function s(e){let{isDirty:t,message:n}=e,{t:s}=(0,i.Bd)();return t?(0,a.jsx)(o.d1,{children:(0,a.jsxs)("span",{className:"inline-flex h-5 items-center gap-1.5 rounded-full bg-amber-500/10 px-2 text-[11px] font-medium whitespace-nowrap text-amber-700 ring-1 ring-amber-500/20 ring-inset dark:bg-amber-400/10 dark:text-amber-300 dark:ring-amber-400/20",children:[(0,a.jsx)("span",{className:"size-1.5 rounded-full bg-amber-500 dark:bg-amber-300"}),s(n||"Unsaved changes")]})}):null}n.d(t,{_:()=>s})},41064(e,t,n){"use strict";var a=n(72361),i=n(88192),o=n(68413),s=n(6702),r=n(73280);function l(e){let{when:t,title:n,message:l}=e,{t:c}=(0,s.Bd)(),d=n??c("Unsaved changes"),u=l??c("You have unsaved changes. Are you sure you want to leave?"),h=(0,i.K)({condition:t}),[p,m]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{"blocked"===h.status&&m(!0)},[h.status]),(0,o.useEffect)(()=>{if(!t)return;let e=e=>(e.preventDefault(),e.returnValue="","");return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[t]),(0,a.jsx)(r.T,{open:p,onOpenChange:e=>{e||(m(!1),h.reset?.())},title:d,desc:u,confirmText:c("Leave"),cancelBtnText:c("Stay"),destructive:!0,handleConfirm:()=>{m(!1),h.proceed?.()}})}n.d(t,{s:()=>l})},43152(e,t,n){"use strict";var a=n(72361),i=n(36710),o=n(11728),s=n(87212),r=n(56275);let l="flex min-w-0 flex-row items-center justify-between gap-4 py-2.5";function c(e){return(0,a.jsx)("div",{"data-settings-form-span":"full",className:(0,r.cn)("grid min-w-0 gap-x-5 gap-y-6 lg:grid-cols-2","lg:[&>[data-settings-form-span=full]]:col-span-2","[&>[data-slot=form-item]]:min-w-0","lg:[&>[data-slot=form-item]:has(textarea)]:col-span-2","lg:[&>[data-slot=form-item]:has([data-slot=switch])]:col-span-2",e.className),children:e.children})}function d(e){return(0,a.jsx)("div",{"data-settings-form-span":"full"===e.span?"full":void 0,className:(0,r.cn)("min-w-0","full"===e.span&&"lg:col-span-2",e.className),children:e.children})}function u(e){let{className:t,...n}=e;return(0,a.jsx)(i.eI,{"data-settings-form-span":"full",className:(0,r.cn)(l,t),...n})}function h(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-settings-form-span":"full",className:(0,r.cn)(l,t),...n})}function p(e){let{controlId:t,checked:n,onCheckedChange:i,label:r,description:l,disabled:c,className:d,...u}=e;return(0,a.jsxs)(h,{className:d,...u,children:[(0,a.jsxs)(m,{children:[(0,a.jsx)(o.J,{htmlFor:t,className:"text-sm font-medium",children:r}),l?(0,a.jsx)("p",{id:t?`${t}-description`:void 0,className:"text-muted-foreground text-xs",children:l}):null]}),(0,a.jsx)(s.d,{id:t,"aria-describedby":t&&l?`${t}-description`:void 0,checked:n,onCheckedChange:i,disabled:c})]})}function m(e){return(0,a.jsx)("div",{className:(0,r.cn)("min-w-0 space-y-0.5",e.className),children:e.children})}function g(e){let{className:t,...n}=e;return(0,a.jsx)("div",{"data-settings-form-span":"full",className:(0,r.cn)("bg-muted/20 min-w-0 space-y-3 rounded-xl border px-3 py-2.5",t),...n})}function f(e){let{className:t,...n}=e;return(0,a.jsx)("div",{className:(0,r.cn)("border-border/70 ml-2 min-w-0 border-l pl-3",t),...n})}function y(e){let{className:t,...n}=e;return(0,a.jsx)("form",{className:(0,r.cn)("grid min-w-0 gap-x-5 gap-y-6 lg:grid-cols-2","lg:[&>*:not([data-slot=form-item])]:col-span-2","lg:[&>[data-settings-form-span=full]]:col-span-2","lg:[&>[data-slot=alert]]:col-span-2","[&>[data-slot=form-item]]:min-w-0","lg:[&>[data-slot=form-item]:has(textarea)]:col-span-2","lg:[&>[data-slot=form-item]:has([data-slot=switch])]:col-span-2",t),...n})}n.d(t,{H:()=>u,K1:()=>c,KF:()=>f,WY:()=>g,ew:()=>p,vF:()=>d,yt:()=>y,z$:()=>m})},31002(e,t,n){"use strict";var a=n(72361),i=n(23921),o=n(99597),s=n(68413),r=n(60140),l=n(6702),c=n(72868);let d=(0,s.createContext)({actionsContainer:null,titleStatusContainer:null,suppressSectionHeader:!1});function u(e){return(0,a.jsx)(d.Provider,{value:{actionsContainer:e.actionsContainer,titleStatusContainer:e.titleStatusContainer??null,suppressSectionHeader:e.suppressSectionHeader??!0},children:e.children})}function h(){return(0,s.useContext)(d).suppressSectionHeader}function p(e){let{titleStatusContainer:t}=(0,s.useContext)(d);return t?(0,r.createPortal)(e.children,t):null}function m(e){let{actionsContainer:t}=(0,s.useContext)(d);return t?(0,r.createPortal)((0,a.jsx)("div",{className:"flex flex-wrap items-center justify-end gap-2",children:e.children}),t):null}function g(e){let{t}=(0,l.Bd)(),n=e.isSaving?e.savingLabel??"Saving...":e.saveLabel??"Save Changes";return(0,a.jsxs)(m,{children:[e.onReset&&(0,a.jsxs)(c.$,{type:"button",size:"sm",variant:e.resetVariant??"outline",onClick:e.onReset,disabled:e.isResetDisabled||e.isSaving,children:[(0,a.jsx)(i.A,{"data-icon":"inline-start"}),(0,a.jsx)("span",{children:t(e.resetLabel??"Reset")})]}),(0,a.jsxs)(c.$,{ref:e.saveButtonRef,type:"button",size:"sm",onClick:e.onSave,disabled:e.isSaving||e.isSaveDisabled,children:[(0,a.jsx)(o.A,{"data-icon":"inline-start"}),(0,a.jsx)("span",{children:t(n)})]})]})}n.d(t,{If:()=>h,S2:()=>g,ab:()=>u,cN:()=>m,d1:()=>p})},44724(e,t,n){"use strict";var a=n(72361),i=n(56275),o=n(31002);function s(e){let{title:t,titleProps:n,children:s,className:r}=e,l=(0,o.If)();return(0,a.jsxs)("section",{className:(0,i.cn)("flex flex-col gap-4",r),children:[!l&&(0,a.jsx)("div",{className:"flex flex-col gap-1",children:(0,a.jsx)("h3",{...n,className:(0,i.cn)("text-base font-semibold",n?.className),children:t})}),s]})}n.d(t,{X:()=>s})},59520(e,t,n){"use strict";n.d(t,{Ku:()=>ef,PS:()=>eg,YD:()=>eb,UO:()=>ev,ey:()=>ey});var a=n(72361),i=n(38159),o=n(48367),s=n(66002),r=n(14653),l=n(99597),c=n(68413),d=n(86832),u=n(6702),h=n(20598),p=n(49256),m=n(32348),g=n(21505),f=n(8802),y=n(60641),b=n(42817),v=n(92379),k=n(72868),x=n(82655),w=n(36710),C=n(1738),A=n(88288),S=n(70954),P=n(52048),T=n(84935),I=n(33271),R=n(26411),N=n(43152),j=n(44724),M=n(47182);let D=p.Ik({content:p.Yj().min(1,"Content is required").max(500,"Content must be less than 500 characters"),publishDate:p.Yj().min(1,"Publish date is required"),type:p.k5(["default","ongoing","success","warning","error"]),extra:p.Yj().max(100,"Extra must be less than 100 characters").optional()}),O="announcement-form",L=[{value:"default",label:"Default",color:"bg-gray-500",badgeVariant:"neutral"},{value:"ongoing",label:"Ongoing",color:"bg-blue-500",badgeVariant:"info"},{value:"success",label:"Success",color:"bg-green-500",badgeVariant:"success"},{value:"warning",label:"Warning",color:"bg-orange-500",badgeVariant:"warning"},{value:"error",label:"Error",color:"bg-red-500",badgeVariant:"danger"}];function q(e){let{enabled:t,data:n}=e,{t:i,i18n:p}=(0,u.Bd)(),q=(0,P.Tl)(p.resolvedLanguage||p.language),U=(0,M.M)(),[E,F]=(0,c.useState)([]),[_,B]=(0,c.useState)(t),[G,V]=(0,c.useState)(!1),[z,K]=(0,c.useState)([]),[W,H]=(0,c.useState)(!1),[J,Q]=(0,c.useState)(!1),[$,Y]=(0,c.useState)(null),[X,Z]=(0,c.useState)("single"),ee=(0,d.mN)({resolver:(0,o.u)(D),defaultValues:{content:"",publishDate:new Date().toISOString(),type:"default",extra:""}});(0,c.useEffect)(()=>{try{let e=JSON.parse(n||"[]");Array.isArray(e)&&F(e.map((e,t)=>({...e,id:e.id||t+1})))}catch{F([])}},[n]),(0,c.useEffect)(()=>{B(t)},[t]);let et=async e=>{try{await U.mutateAsync({key:"console_setting.announcements_enabled",value:e}),B(e),h.oR.success(i("Setting saved"))}catch(e){(0,R.Q)(e,i("Failed to update setting"))}},en=async()=>{try{await U.mutateAsync({key:"console_setting.announcements",value:JSON.stringify(E)}),V(!1),h.oR.success(i("Announcements saved successfully"))}catch(e){(0,R.Q)(e,i("Failed to save announcements"))}},ea=(0,c.useMemo)(()=>[...E].sort((e,t)=>new Date(t.publishDate).getTime()-new Date(e.publishDate).getTime()),[E]);return(0,a.jsxs)(j.X,{title:i("Announcements"),children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(k.$,{onClick:()=>{Y(null),ee.reset({content:"",publishDate:new Date().toISOString(),type:"default",extra:""}),H(!0)},size:"sm",children:[(0,a.jsx)(s.A,{className:"mr-2 h-4 w-4"}),i("Add Announcement")]}),(0,a.jsxs)(k.$,{onClick:()=>{0===z.length?h.oR.error(i("Please select items to delete")):(Z("batch"),Q(!0))},size:"sm",variant:"destructive",disabled:0===z.length,children:[(0,a.jsx)(r.A,{className:"mr-2 h-4 w-4"}),i("Delete ("),z.length,")"]}),(0,a.jsxs)(k.$,{onClick:en,size:"sm",variant:"secondary",disabled:!G||U.isPending,children:[(0,a.jsx)(l.A,{className:"mr-2 h-4 w-4"}),U.isPending?i("Saving..."):i("Save Settings")]})]}),(0,a.jsx)(N.ew,{checked:_,onCheckedChange:et,label:i("Enabled"),className:"py-0"})]}),(0,a.jsx)(m.h,{data:ea,getRowKey:e=>e.id,emptyContent:i('No announcements yet. Click "Add Announcement" to create one.'),columns:[{id:"select",header:(0,a.jsx)(x.S,{checked:z.length===E.length&&E.length>0,onCheckedChange:e=>{K(e?E.map(e=>e.id):[])}}),className:"w-12",cell:e=>(0,a.jsx)(x.S,{checked:z.includes(e.id),onCheckedChange:t=>{var n;return n=e.id,void K(e=>t?[...e,n]:e.filter(e=>e!==n))}})},{id:"content",header:i("Content"),cellClassName:"max-w-xs truncate",cell:e=>e.content},{id:"publish-date",header:i("Publish Date"),cell:e=>(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)("span",{className:"text-sm font-medium",children:(0,I.K3)(new Date(e.publishDate).getTime(),"milliseconds",q)}),(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:(0,T.A)(e.publishDate).format("YYYY-MM-DD HH:mm:ss")})]})},{id:"type",header:i("Type"),cell:e=>(0,a.jsx)(b.Wh,{label:L.find(t=>t.value===e.type)?.label,variant:L.find(t=>t.value===e.type)?.badgeVariant??"neutral",copyable:!1})},{id:"extra",header:i("Extra"),cellClassName:"text-muted-foreground max-w-xs truncate",cell:e=>e.extra||"-"},{id:"actions",header:i("Actions"),cell:e=>(0,a.jsx)(g._,{editLabel:i("Edit"),deleteLabel:i("Delete"),menuLabel:i("Open menu"),onEdit:()=>{Y(e),ee.reset({content:e.content,publishDate:e.publishDate,type:e.type,extra:e.extra||""}),H(!0)},onDelete:()=>{Y(e),Z("single"),Q(!0)}})}]})]}),(0,a.jsx)(y.l,{open:W,onOpenChange:H,title:$?i("Edit Announcement"):i("Add Announcement"),description:i("Create or update system announcements for the dashboard"),contentClassName:"max-w-2xl",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(k.$,{type:"button",variant:"outline",onClick:()=>H(!1),children:i("Cancel")}),(0,a.jsx)(k.$,{type:"submit",form:O,children:$?i("Update"):i("Add")})]}),children:(0,a.jsx)(w.lV,{...ee,children:(0,a.jsxs)("form",{id:O,onSubmit:ee.handleSubmit(e=>{if($)F(t=>t.map(t=>t.id===$.id?{...t,...e}:t)),h.oR.success(i('Announcement updated. Click "Save Settings" to apply.'));else{let t=Math.max(...E.map(e=>e.id),0)+1;F(n=>[...n,{id:t,...e}]),h.oR.success(i('Announcement added. Click "Save Settings" to apply.'))}V(!0),H(!1)}),className:"space-y-4",children:[(0,a.jsx)(w.zB,{control:ee.control,name:"content",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Content")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(S.T,{placeholder:i("Enter announcement content (supports Markdown/HTML)"),rows:4,...t})}),(0,a.jsx)(w.Rr,{children:i("Maximum 500 characters. Supports Markdown and HTML.")}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:ee.control,name:"publishDate",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Publish Date")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(f.K,{value:t.value?new Date(t.value):void 0,onChange:e=>t.onChange(e?e.toISOString():""),placeholder:i("Select publish date")})}),(0,a.jsx)(w.Rr,{children:i("Date and time when this announcement should be displayed")}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:ee.control,name:"type",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Type")}),(0,a.jsxs)(A.l6,{items:L.map(e=>({value:e.value,label:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:`h-3 w-3 rounded-full ${e.color}`}),e.label]})})),onValueChange:t.onChange,value:t.value,children:[(0,a.jsx)(w.MJ,{children:(0,a.jsx)(A.bq,{children:(0,a.jsx)(A.yv,{placeholder:i("Select announcement type")})})}),(0,a.jsx)(A.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(A.s3,{children:L.map(e=>(0,a.jsx)(A.eb,{value:e.value,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:`h-3 w-3 rounded-full ${e.color}`}),e.label]})},e.value))})})]}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:ee.control,name:"extra",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Extra Notes (Optional)")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{placeholder:i("Additional information"),...t})}),(0,a.jsx)(w.Rr,{children:i("Optional supplementary information (max 100 characters)")}),(0,a.jsx)(w.C5,{})]})}})]})})}),(0,a.jsx)(v.Lt,{open:J,onOpenChange:Q,children:(0,a.jsxs)(v.EO,{children:[(0,a.jsxs)(v.wd,{children:[(0,a.jsx)(v.r7,{children:i("Are you sure?")}),(0,a.jsx)(v.$v,{children:"single"===X?i("This announcement will be removed from the list."):i("{{count}} announcements will be removed from the list.",{count:z.length})})]}),(0,a.jsxs)(v.ck,{children:[(0,a.jsx)(v.Zr,{children:i("Cancel")}),(0,a.jsx)(v.Rx,{variant:"destructive",onClick:()=>{"single"===X&&$?(F(e=>e.filter(e=>e.id!==$.id)),V(!0),h.oR.success(i('Announcement deleted. Click "Save Settings" to apply.'))):"batch"===X&&(F(e=>e.filter(e=>!z.includes(e.id))),K([]),V(!0),h.oR.success(i('{{count}} announcements deleted. Click "Save Settings" to apply.',{count:z.length}))),Q(!1),Y(null)},children:i("Delete")})]})]})})]})}var U=n(98505),E=n(85468);let F="api-info-form",_=[{value:"blue",label:"Blue"},{value:"green",label:"Green"},{value:"cyan",label:"Cyan"},{value:"purple",label:"Purple"},{value:"pink",label:"Pink"},{value:"red",label:"Red"},{value:"orange",label:"Orange"},{value:"amber",label:"Amber"},{value:"yellow",label:"Yellow"},{value:"lime",label:"Lime"},{value:"teal",label:"Teal"},{value:"indigo",label:"Indigo"},{value:"violet",label:"Violet"},{value:"slate",label:"Slate"}];function B(e){let{enabled:t,data:n}=e,{t:i}=(0,u.Bd)(),f=(0,M.M)(),S=p.Ik({url:p.Yj().url(i("Must be a valid URL")),route:p.Yj().min(1,i("Route is required")),description:p.Yj().min(1,i("Description is required")),color:p.Yj().min(1,i("Color is required"))}),P=(0,c.useMemo)(()=>(function(e){try{let t=JSON.parse(e||"[]");if(!Array.isArray(t))return[];return t.map((e,t)=>({...e,id:e.id||t+1}))}catch{return[]}})(n),[n]),[T,I]=(0,c.useState)(null),[D,O]=(0,c.useState)(null),[L,q]=(0,c.useState)([]),[B,G]=(0,c.useState)(!1),[V,z]=(0,c.useState)(!1),[K,W]=(0,c.useState)(null),[H,J]=(0,c.useState)("single"),Q=T??P,$=null!==T,Y=(0,d.mN)({resolver:(0,o.u)(S),defaultValues:{url:"",route:"",description:"",color:"blue"}}),X=async e=>{try{await f.mutateAsync({key:"console_setting.api_info_enabled",value:e}),O(e),h.oR.success(i("Setting saved"))}catch(e){(0,R.Q)(e,i("Failed to update setting"))}},Z=async()=>{try{(await f.mutateAsync({key:"console_setting.api_info",value:JSON.stringify(Q)})).success&&I(null)}catch(e){(0,R.Q)(e,i("Failed to save API info"))}};return(0,a.jsxs)(j.X,{title:i("API Addresses"),children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(k.$,{onClick:()=>{W(null),Y.reset({url:"",route:"",description:"",color:"blue"}),G(!0)},size:"sm",children:[(0,a.jsx)(s.A,{className:"mr-2 h-4 w-4"}),i("Add API")]}),(0,a.jsxs)(k.$,{onClick:()=>{0===L.length?h.oR.error(i("Please select items to delete")):(J("batch"),z(!0))},size:"sm",variant:"destructive",disabled:0===L.length,children:[(0,a.jsx)(r.A,{className:"mr-2 h-4 w-4"}),i("Delete ("),L.length,")"]}),(0,a.jsxs)(k.$,{onClick:Z,size:"sm",variant:"secondary",disabled:!$||f.isPending,children:[(0,a.jsx)(l.A,{className:"mr-2 h-4 w-4"}),f.isPending?i("Saving..."):i("Save Settings")]})]}),(0,a.jsx)(N.ew,{checked:D??t,onCheckedChange:X,label:i("Enabled"),className:"py-0"})]}),(0,a.jsx)(m.h,{data:Q,getRowKey:e=>e.id,emptyContent:i('No API Domains yet. Click "Add API" to create one.'),columns:[{id:"select",header:(0,a.jsx)(x.S,{checked:L.length===Q.length&&Q.length>0,onCheckedChange:e=>{q(e?Q.map(e=>e.id):[])}}),className:"w-12",cell:e=>(0,a.jsx)(x.S,{checked:L.includes(e.id),onCheckedChange:t=>{var n;return n=e.id,void q(e=>t?[...e,n]:e.filter(e=>e!==n))}})},{id:"url",header:i("URL"),cellClassName:"max-w-xs truncate font-mono text-sm",cell:e=>(0,a.jsx)(U.a,{children:(0,a.jsx)(b.Wh,{label:e.url,variant:"neutral",copyable:!1})})},{id:"route",header:i("Route"),cell:e=>(0,a.jsx)(U.a,{children:(0,a.jsx)(b.Wh,{label:e.route,variant:"neutral",copyable:!1})})},{id:"description",header:i("Description"),cellClassName:"max-w-xs truncate",cell:e=>e.description},{id:"color",header:i("Color"),cell:e=>{let t;return(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:`h-4 w-4 rounded-full ${(t=e.color,(0,E.Hl)(t))}`}),(0,a.jsx)("span",{className:"text-sm capitalize",children:e.color})]})}},{id:"actions",header:i("Actions"),cell:e=>(0,a.jsx)(g._,{editLabel:i("Edit"),deleteLabel:i("Delete"),menuLabel:i("Open menu"),onEdit:()=>{W(e),Y.reset({url:e.url,route:e.route,description:e.description,color:e.color}),G(!0)},onDelete:()=>{W(e),J("single"),z(!0)}})}]})]}),(0,a.jsx)(y.l,{open:B,onOpenChange:G,title:K?i("Edit API Shortcut"):i("Add API Shortcut"),description:i("Configure API documentation links for the dashboard"),contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(k.$,{type:"button",variant:"outline",onClick:()=>G(!1),children:i("Cancel")}),(0,a.jsx)(k.$,{type:"submit",form:F,children:K?i("Update"):i("Add")})]}),children:(0,a.jsx)(w.lV,{...Y,children:(0,a.jsxs)("form",{id:F,onSubmit:Y.handleSubmit(e=>{if(K)I(Q.map(t=>t.id===K.id?{...t,...e}:t)),h.oR.success(i('API info updated. Click "Save Settings" to apply.'));else{let t=Math.max(...Q.map(e=>e.id),0)+1;I([...Q,{id:t,...e}]),h.oR.success(i('API info added. Click "Save Settings" to apply.'))}G(!1)}),className:"space-y-4",children:[(0,a.jsx)(w.zB,{control:Y.control,name:"url",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("API URL")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{placeholder:i("https://api.example.com"),...t})}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:Y.control,name:"route",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Route Description")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{placeholder:i("e.g., CN2 GIA"),...t})}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:Y.control,name:"description",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Description")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{placeholder:i("e.g., Recommended for China Mainland Users"),...t})}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:Y.control,name:"color",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Badge Color")}),(0,a.jsxs)(A.l6,{items:_.map(e=>({value:e.value,label:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:`h-4 w-4 rounded-full ${(0,E.Hl)(e.value)}`}),e.label]})})),onValueChange:t.onChange,value:t.value,children:[(0,a.jsx)(w.MJ,{children:(0,a.jsx)(A.bq,{children:(0,a.jsx)(A.yv,{placeholder:i("Select a color")})})}),(0,a.jsx)(A.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(A.s3,{children:_.map(e=>(0,a.jsx)(A.eb,{value:e.value,children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("div",{className:`h-4 w-4 rounded-full ${(0,E.Hl)(e.value)}`}),e.label]})},e.value))})})]}),(0,a.jsx)(w.Rr,{children:i("Visual indicator color for the API card")}),(0,a.jsx)(w.C5,{})]})}})]})})}),(0,a.jsx)(v.Lt,{open:V,onOpenChange:z,children:(0,a.jsxs)(v.EO,{children:[(0,a.jsxs)(v.wd,{children:[(0,a.jsx)(v.r7,{children:i("Are you sure?")}),(0,a.jsx)(v.$v,{children:"single"===H?i("This API shortcut will be removed from the list."):i("{{count}} API shortcuts will be removed from the list.",{count:L.length})})]}),(0,a.jsxs)(v.ck,{children:[(0,a.jsx)(v.Zr,{children:i("Cancel")}),(0,a.jsx)(v.Rx,{variant:"destructive",onClick:()=>{"single"===H&&K?(I(Q.filter(e=>e.id!==K.id)),h.oR.success(i('API info deleted. Click "Save Settings" to apply.'))):"batch"===H&&(I(Q.filter(e=>!L.includes(e.id))),q([]),h.oR.success(i('{{count}} API entries deleted. Click "Save Settings" to apply.',{count:L.length}))),z(!1),W(null)},children:i("Delete")})]})]})})]})}var G=n(41128),V=n(91460),z=n(56920),K=n(31002),W=n(38766),H=n(24518),J=n(86358);let Q="chat-dialog-form";function $(e){let{open:t,onOpenChange:n,onSave:i,editData:s}=e,{t:r}=(0,u.Bd)(),l=!!s,h=p.Ik({name:p.Yj().min(1,r("Chat client name is required")),url:p.Yj().min(1,r("URL is required"))}),m=(0,d.mN)({resolver:(0,o.u)(h),defaultValues:{name:"",url:""}});return(0,c.useEffect)(()=>{s?m.reset(s):m.reset({name:"",url:""})},[s,m,t]),(0,a.jsx)(y.l,{open:t,onOpenChange:n,title:l?r("Edit chat preset"):r("Add chat preset"),description:r("Configure a predefined chat link for end users."),contentClassName:"sm:max-w-[500px]",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(k.$,{type:"button",variant:"outline",onClick:()=>n(!1),children:r("Cancel")}),(0,a.jsx)(k.$,{type:"submit",form:Q,children:l?r("Update"):r("Add")})]}),children:(0,a.jsx)(w.lV,{...m,children:(0,a.jsxs)("form",{id:Q,onSubmit:m.handleSubmit(e=>{i(e),m.reset(),n(!1)}),className:"space-y-4",children:[(0,a.jsx)(w.zB,{control:m.control,name:"name",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:r("Chat Client Name")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{placeholder:r("Please enter chat client name"),...t})}),(0,a.jsx)(w.Rr,{children:r("Display name for this chat client.")}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:m.control,name:"url",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:r("URL")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{placeholder:r("Please enter the URL"),...t})}),(0,a.jsx)(w.Rr,{children:r("The URL for this chat client.")}),(0,a.jsx)(w.C5,{})]})}})]})})})}function Y(e){let{value:t,onChange:n}=e,{t:i}=(0,u.Bd)(),[o,r]=(0,c.useState)(""),[l,d]=(0,c.useState)(!1),[h,p]=(0,c.useState)(null),f=(0,c.useMemo)(()=>(0,H.Cz)(t,{fallback:[],validator:J.cy,validatorMessage:"Chats must be a JSON array",context:"chats"}).map(e=>{if("object"==typeof e&&null!==e&&!Array.isArray(e)){let t=Object.entries(e);if(1===t.length){let[e,n]=t[0];return{name:e,url:String(n)}}}return null}).filter(e=>null!==e),[t]),y=(0,c.useMemo)(()=>{if(!o)return f;let e=o.toLowerCase();return f.filter(t=>t.name.toLowerCase().includes(e)||t.url.toLowerCase().includes(e))},[f,o]);return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(W.A,{className:"text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4"}),(0,a.jsx)(C.p,{placeholder:i("Search chat presets..."),value:o,onChange:e=>r(e.target.value),className:"pl-9"})]}),(0,a.jsxs)(k.$,{onClick:()=>{p(null),d(!0)},children:[(0,a.jsx)(s.A,{className:"mr-2 h-4 w-4"}),i("Add chat preset")]})]}),(0,a.jsx)(m.h,{data:y,getRowKey:e=>e.name,emptyContent:o?i("No chat presets match your search"):i('No chat presets configured. Click "Add chat preset" to get started.'),columns:[{id:"name",header:i("Chat Client Name"),cellClassName:"font-medium",cell:e=>e.name},{id:"url",header:i("URL"),cellClassName:"max-w-md truncate font-mono text-sm",cell:e=>e.url},{id:"actions",header:i("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)(g._,{editLabel:i("Edit"),deleteLabel:i("Delete"),menuLabel:i("Open menu"),onEdit:()=>{p(e),d(!0)},onDelete:()=>{var a;return a=e.name,void n(JSON.stringify((0,H.Cz)(t,{fallback:[],validator:J.cy,silent:!0}).filter(e=>"object"!=typeof e||null===e||!!Array.isArray(e)||!Object.keys(e).includes(a)),null,2))}})}]}),(0,a.jsx)($,{open:l,onOpenChange:d,onSave:e=>{let a=[...(0,H.Cz)(t,{fallback:[],validator:J.cy,silent:!0})];h&&(a=a.filter(e=>"object"!=typeof e||null===e||!!Array.isArray(e)||!Object.keys(e).includes(h.name))),a.push({[e.name]:e.url}),n(JSON.stringify(a,null,2))},editData:h})]})}function X(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"[]",n=e&&e.trim()?e:t;try{let e=JSON.parse(n);return JSON.stringify(e,null,2)}catch{return n}}function Z(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"[]",n=e&&e.trim()?e:t;try{let e=JSON.parse(n);return JSON.stringify(e)}catch{return n.trim()}}function ee(e){let{defaultValue:t}=e,{t:n}=(0,u.Bd)(),i=(0,M.M)(),[s,r]=(0,c.useState)("visual"),l=p.Ik({Chats:p.Yj().superRefine((e,t)=>{try{let a=JSON.parse(e||"[]");if(!Array.isArray(a))return void t.addIssue({code:G.eq.custom,message:n("Expected a JSON array.")});for(let e of a){if(null===e||"object"!=typeof e||Array.isArray(e))return void t.addIssue({code:G.eq.custom,message:n("Each item must be an object with a single key-value pair.")});let a=Object.entries(e);if(1!==a.length)return void t.addIssue({code:G.eq.custom,message:n("Each item must have exactly one key-value pair.")})}}catch{t.addIssue({code:G.eq.custom,message:n("Invalid JSON string.")})}})}),h=X(t,"[]"),m=(0,d.mN)({resolver:(0,o.u)(l),mode:"onChange",defaultValues:{Chats:h}}),g=(0,c.useRef)(Z(t,"[]"));(0,c.useEffect)(()=>{m.reset({Chats:X(t,"[]")}),g.current=Z(t,"[]")},[t,m]);let f=async e=>{let t=Z(e.Chats,"[]");t!==g.current&&await i.mutateAsync({key:"Chats",value:t})};return(0,a.jsx)(j.X,{title:n("Chat Presets"),children:(0,a.jsx)(w.lV,{...m,children:(0,a.jsxs)(N.yt,{onSubmit:m.handleSubmit(f),children:[(0,a.jsx)(K.S2,{onSave:m.handleSubmit(f),isSaving:i.isPending,saveLabel:"Save chat settings"}),(0,a.jsxs)(z.tU,{value:s,onValueChange:e=>r(e),children:[(0,a.jsxs)(z.j7,{className:"grid w-full grid-cols-2",children:[(0,a.jsx)(z.Xi,{value:"visual",children:n("Visual")}),(0,a.jsx)(z.Xi,{value:"json",children:n("JSON")})]}),(0,a.jsx)(z.av,{value:"visual",className:"mt-6",children:(0,a.jsx)(w.zB,{control:m.control,name:"Chats",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.MJ,{children:(0,a.jsx)(Y,{value:t.value,onChange:t.onChange})}),(0,a.jsx)(w.C5,{})]})}})}),(0,a.jsx)(z.av,{value:"json",className:"mt-6",children:(0,a.jsx)(w.zB,{control:m.control,name:"Chats",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:n("Chat configuration JSON")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(V.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,placeholder:n('[{"ChatGPT":"https://chat.openai.com"},{"Lobe Chat":"https://chat-preview.lobehub.com/?settings={...}"}]'),heightClassName:"h-72 min-h-72 max-h-72","aria-invalid":!!m.formState.errors.Chats})}),(0,a.jsx)(w.Rr,{children:n("Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.")}),(0,a.jsx)(w.C5,{})]})}})})]})]})})})}var et=n(87212),en=n(74750);let ea=p.Ik({DataExportEnabled:p.zM(),DataExportInterval:p.ai().int().min(1).max(1440),DataExportDefaultTime:p.k5(["hour","day","week"])}),ei=[{label:"Hour",value:"hour"},{label:"Day",value:"day"},{label:"Week",value:"week"}];function eo(e){let{defaultValues:t}=e,{t:n}=(0,u.Bd)(),i=(0,M.M)(),s=(0,d.mN)({resolver:(0,o.u)(ea),defaultValues:t});(0,c.useEffect)(()=>{s.reset(t)},[t,s]);let r=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await i.mutateAsync({key:n,value:a})},l=s.watch("DataExportEnabled");return(0,a.jsx)(j.X,{title:n("Data Dashboard"),children:(0,a.jsx)(w.lV,{...s,children:(0,a.jsxs)(N.yt,{onSubmit:s.handleSubmit(r),children:[(0,a.jsx)(K.S2,{onSave:s.handleSubmit(r),isSaving:i.isPending}),(0,a.jsx)(w.zB,{control:s.control,name:"DataExportEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(N.H,{children:[(0,a.jsx)(N.z$,{children:(0,a.jsx)(w.lR,{children:n("Enable Data Dashboard")})}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(et.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsxs)("div",{className:"grid gap-6 sm:grid-cols-2",children:[(0,a.jsx)(w.zB,{control:s.control,name:"DataExportInterval",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:n("Refresh interval (minutes)")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{type:"number",min:1,max:1440,step:1,...(0,en.X)(t),disabled:!l})}),(0,a.jsx)(w.Rr,{children:n("Keep this above 1 minute to avoid heavy database load")}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:s.control,name:"DataExportDefaultTime",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:n("Default time granularity")}),(0,a.jsxs)(A.l6,{items:[...ei.map(e=>({value:e.value,label:n(e.label)}))],onValueChange:t.onChange,value:t.value,disabled:!l,children:[(0,a.jsx)(w.MJ,{children:(0,a.jsx)(A.bq,{children:(0,a.jsx)(A.yv,{placeholder:n("Select granularity")})})}),(0,a.jsx)(A.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(A.s3,{children:ei.map(e=>(0,a.jsx)(A.eb,{value:e.value,children:n(e.label)},e.value))})})]}),(0,a.jsx)(w.Rr,{children:n("UI granularity only — data is still aggregated hourly")}),(0,a.jsx)(w.C5,{})]})}})]})]})})})}let es=p.Ik({DrawingEnabled:p.zM(),MjNotifyEnabled:p.zM(),MjAccountFilterEnabled:p.zM(),MjForwardUrlEnabled:p.zM(),MjModeClearEnabled:p.zM(),MjActionCheckSuccessEnabled:p.zM()});function er(e){let{defaultValues:t}=e,{t:n}=(0,u.Bd)(),i=(0,M.M)(),s=(0,d.mN)({resolver:(0,o.u)(es),defaultValues:t});(0,c.useEffect)(()=>{s.reset(t)},[t,s]);let r=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await i.mutateAsync({key:n,value:a})},l=[{name:"DrawingEnabled",label:n("Enable drawing features"),description:n("Required to expose MjProxy-style image generation to end users.")},{name:"MjNotifyEnabled",label:n("Allow upstream callbacks"),description:n("When enabled, MjProxy callbacks are accepted (reveals server IP).")},{name:"MjAccountFilterEnabled",label:n("Allow accountFilter parameter"),description:n("Keep enabled if you need to proxy requests for different upstream accounts.")},{name:"MjForwardUrlEnabled",label:n("Rewrite callback URLs to the local server"),description:n("Automatically replaces upstream callback URLs with the server address.")},{name:"MjModeClearEnabled",label:n("Clear mode flags in prompts"),description:n("Removes MjProxy flags such as --fast, --relax, and --turbo from user prompts.")},{name:"MjActionCheckSuccessEnabled",label:n("Require job success before follow-up actions"),description:n("Users must wait for a successful drawing before upscales or variations.")}];return(0,a.jsx)(j.X,{title:n("Drawing"),children:(0,a.jsx)(w.lV,{...s,children:(0,a.jsxs)(N.yt,{onSubmit:s.handleSubmit(r),children:[(0,a.jsx)(K.S2,{onSave:s.handleSubmit(r),isSaving:i.isPending,saveLabel:"Save drawing settings"}),(0,a.jsx)("div",{className:"space-y-4",children:l.map(e=>(0,a.jsx)(w.zB,{control:s.control,name:e.name,render:t=>{let{field:n}=t;return(0,a.jsxs)(N.H,{children:[(0,a.jsxs)(N.z$,{children:[(0,a.jsx)(w.lR,{children:e.label}),(0,a.jsx)(w.Rr,{children:e.description})]}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(et.d,{checked:n.value,onCheckedChange:n.onChange})}),(0,a.jsx)(w.C5,{})]})}},e.name))})]})})})}let el=p.Ik({question:p.Yj().min(1,"Question is required").max(200,"Question must be less than 200 characters"),answer:p.Yj().min(1,"Answer is required").max(1e3,"Answer must be less than 1000 characters")}),ec="faq-form";function ed(e){let{enabled:t,data:n}=e,{t:i}=(0,u.Bd)(),p=(0,M.M)(),[f,b]=(0,c.useState)([]),[A,P]=(0,c.useState)(t),[T,I]=(0,c.useState)(!1),[D,O]=(0,c.useState)([]),[L,q]=(0,c.useState)(!1),[U,E]=(0,c.useState)(!1),[F,_]=(0,c.useState)(null),[B,G]=(0,c.useState)("single"),V=(0,d.mN)({resolver:(0,o.u)(el),defaultValues:{question:"",answer:""}});(0,c.useEffect)(()=>{try{let e=JSON.parse(n||"[]");Array.isArray(e)&&b(e.map((e,t)=>({...e,id:e.id||t+1})))}catch{b([])}},[n]),(0,c.useEffect)(()=>{P(t)},[t]);let z=async e=>{try{await p.mutateAsync({key:"console_setting.faq_enabled",value:e}),P(e),h.oR.success(i("Setting saved"))}catch(e){(0,R.Q)(e,i("Failed to update setting"))}},K=async()=>{try{await p.mutateAsync({key:"console_setting.faq",value:JSON.stringify(f)}),I(!1),h.oR.success(i("FAQ saved successfully"))}catch(e){(0,R.Q)(e,i("Failed to save FAQ"))}};return(0,a.jsxs)(j.X,{title:i("FAQ"),children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(k.$,{onClick:()=>{_(null),V.reset({question:"",answer:""}),q(!0)},size:"sm",children:[(0,a.jsx)(s.A,{className:"mr-2 h-4 w-4"}),i("Add FAQ")]}),(0,a.jsxs)(k.$,{onClick:()=>{0===D.length?h.oR.error(i("Please select items to delete")):(G("batch"),E(!0))},size:"sm",variant:"destructive",disabled:0===D.length,children:[(0,a.jsx)(r.A,{className:"mr-2 h-4 w-4"}),i("Delete ("),D.length,")"]}),(0,a.jsxs)(k.$,{onClick:K,size:"sm",variant:"secondary",disabled:!T||p.isPending,children:[(0,a.jsx)(l.A,{className:"mr-2 h-4 w-4"}),p.isPending?i("Saving..."):i("Save Settings")]})]}),(0,a.jsx)(N.ew,{checked:A,onCheckedChange:z,label:i("Enabled"),className:"py-0"})]}),(0,a.jsx)(m.h,{data:f,getRowKey:e=>e.id,emptyContent:i('No FAQ entries yet. Click "Add FAQ" to create one.'),columns:[{id:"select",header:(0,a.jsx)(x.S,{checked:D.length===f.length&&f.length>0,onCheckedChange:e=>{O(e?f.map(e=>e.id):[])}}),className:"w-12",cell:e=>(0,a.jsx)(x.S,{checked:D.includes(e.id),onCheckedChange:t=>{var n;return n=e.id,void O(e=>t?[...e,n]:e.filter(e=>e!==n))}})},{id:"question",header:i("Question"),cellClassName:"max-w-xs truncate font-medium",cell:e=>e.question},{id:"answer",header:i("Answer"),cellClassName:"text-muted-foreground max-w-md truncate",cell:e=>e.answer},{id:"actions",header:i("Actions"),cell:e=>(0,a.jsx)(g._,{editLabel:i("Edit"),deleteLabel:i("Delete"),menuLabel:i("Open menu"),onEdit:()=>{_(e),V.reset({question:e.question,answer:e.answer}),q(!0)},onDelete:()=>{_(e),G("single"),E(!0)}})}]})]}),(0,a.jsx)(y.l,{open:L,onOpenChange:q,title:F?i("Edit FAQ"):i("Add FAQ"),description:i("Create or update frequently asked questions for users"),contentClassName:"max-w-2xl",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(k.$,{type:"button",variant:"outline",onClick:()=>q(!1),children:i("Cancel")}),(0,a.jsx)(k.$,{type:"submit",form:ec,children:F?i("Update"):i("Add")})]}),children:(0,a.jsx)(w.lV,{...V,children:(0,a.jsxs)("form",{id:ec,onSubmit:V.handleSubmit(e=>{if(F)b(t=>t.map(t=>t.id===F.id?{...t,...e}:t)),h.oR.success(i('FAQ updated. Click "Save Settings" to apply.'));else{let t=Math.max(...f.map(e=>e.id),0)+1;b(n=>[...n,{id:t,...e}]),h.oR.success(i('FAQ added. Click "Save Settings" to apply.'))}I(!0),q(!1)}),className:"space-y-4",children:[(0,a.jsx)(w.zB,{control:V.control,name:"question",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Question")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{placeholder:i("How to reset my quota?"),...t})}),(0,a.jsx)(w.Rr,{children:i("Maximum 200 characters")}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:V.control,name:"answer",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Answer")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(S.T,{placeholder:i("Visit Settings → General and adjust quota options..."),rows:8,...t})}),(0,a.jsx)(w.Rr,{children:i("Maximum 1000 characters. Supports Markdown and HTML.")}),(0,a.jsx)(w.C5,{})]})}})]})})}),(0,a.jsx)(v.Lt,{open:U,onOpenChange:E,children:(0,a.jsxs)(v.EO,{children:[(0,a.jsxs)(v.wd,{children:[(0,a.jsx)(v.r7,{children:i("Are you sure?")}),(0,a.jsx)(v.$v,{children:"single"===B?i("This FAQ entry will be removed from the list."):i("{{count}} FAQ entries will be removed from the list.",{count:D.length})})]}),(0,a.jsxs)(v.ck,{children:[(0,a.jsx)(v.Zr,{children:i("Cancel")}),(0,a.jsx)(v.Rx,{variant:"destructive",onClick:()=>{"single"===B&&F?(b(e=>e.filter(e=>e.id!==F.id)),I(!0),h.oR.success(i('FAQ deleted. Click "Save Settings" to apply.'))):"batch"===B&&(b(e=>e.filter(e=>!D.includes(e.id))),O([]),I(!0),h.oR.success(i('{{count}} FAQs deleted. Click "Save Settings" to apply.',{count:D.length}))),E(!1),_(null)},children:i("Delete")})]})]})})]})}let eu="uptime-kuma-form";function eh(e){let{enabled:t,data:n}=e,{t:i}=(0,u.Bd)(),f=(0,M.M)(),b=p.Ik({categoryName:p.Yj().min(1,{error:i("Category name is required")}).max(50,{error:i("Category name must be less than 50 characters")}),url:p.Yj().url({error:i("Must be a valid URL")}),slug:p.Yj().min(1,{error:i("Slug is required")}).max(100,{error:i("Slug must be less than 100 characters")}).regex(/^[a-zA-Z0-9_-]+$/,{error:i("Slug can only contain letters, numbers, hyphens, and underscores")})}),[A,S]=(0,c.useState)([]),[P,T]=(0,c.useState)(t),[I,D]=(0,c.useState)(!1),[O,L]=(0,c.useState)([]),[q,U]=(0,c.useState)(!1),[E,F]=(0,c.useState)(!1),[_,B]=(0,c.useState)(null),[G,V]=(0,c.useState)("single"),z=(0,d.mN)({resolver:(0,o.u)(b),defaultValues:{categoryName:"",url:"",slug:""}});(0,c.useEffect)(()=>{try{let e=JSON.parse(n||"[]");Array.isArray(e)&&S(e.map((e,t)=>({...e,id:e.id||t+1})))}catch{S([])}},[n]),(0,c.useEffect)(()=>{T(t)},[t]);let K=async e=>{try{await f.mutateAsync({key:"console_setting.uptime_kuma_enabled",value:e}),T(e),h.oR.success(i("Setting saved"))}catch(e){(0,R.Q)(e,i("Failed to update setting"))}},W=async()=>{try{await f.mutateAsync({key:"console_setting.uptime_kuma_groups",value:JSON.stringify(A)}),D(!1),h.oR.success(i("Uptime Kuma groups saved successfully"))}catch(e){(0,R.Q)(e,i("Failed to save Uptime Kuma groups"))}};return(0,a.jsxs)(j.X,{title:i("Uptime Kuma"),children:[(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(k.$,{onClick:()=>{B(null),z.reset({categoryName:"",url:"",slug:""}),U(!0)},size:"sm",children:[(0,a.jsx)(s.A,{className:"mr-2 h-4 w-4"}),i("Add Group")]}),(0,a.jsxs)(k.$,{onClick:()=>{0===O.length?h.oR.error(i("Please select items to delete")):(V("batch"),F(!0))},size:"sm",variant:"destructive",disabled:0===O.length,children:[(0,a.jsx)(r.A,{className:"mr-2 h-4 w-4"}),i("Delete ("),O.length,")"]}),(0,a.jsxs)(k.$,{onClick:W,size:"sm",variant:"secondary",disabled:!I||f.isPending,children:[(0,a.jsx)(l.A,{className:"mr-2 h-4 w-4"}),f.isPending?i("Saving..."):i("Save Settings")]})]}),(0,a.jsx)(N.ew,{checked:P,onCheckedChange:K,label:i("Enabled"),className:"py-0"})]}),(0,a.jsx)(m.h,{data:A,getRowKey:e=>e.id,emptyContent:i('No Uptime Kuma groups yet. Click "Add Group" to create one.'),columns:[{id:"select",header:(0,a.jsx)(x.S,{checked:O.length===A.length&&A.length>0,onCheckedChange:e=>{L(e?A.map(e=>e.id):[])}}),className:"w-12",cell:e=>(0,a.jsx)(x.S,{checked:O.includes(e.id),onCheckedChange:t=>{var n;return n=e.id,void L(e=>t?[...e,n]:e.filter(e=>e!==n))}})},{id:"category",header:i("Category Name"),cellClassName:"font-medium",cell:e=>e.categoryName},{id:"url",header:i("Uptime Kuma URL"),cellClassName:"text-primary max-w-xs truncate font-mono text-sm",cell:e=>e.url},{id:"slug",header:i("Status Page Slug"),cellClassName:"text-muted-foreground font-mono text-sm",cell:e=>e.slug},{id:"actions",header:i("Actions"),cell:e=>(0,a.jsx)(g._,{editLabel:i("Edit"),deleteLabel:i("Delete"),menuLabel:i("Open menu"),onEdit:()=>{B(e),z.reset({categoryName:e.categoryName,url:e.url,slug:e.slug}),U(!0)},onDelete:()=>{B(e),V("single"),F(!0)}})}]})]}),(0,a.jsx)(y.l,{open:q,onOpenChange:U,title:_?i("Edit Uptime Kuma Group"):i("Add Uptime Kuma Group"),description:i("Configure monitoring status page groups for the dashboard"),contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(k.$,{type:"button",variant:"outline",onClick:()=>U(!1),children:i("Cancel")}),(0,a.jsx)(k.$,{type:"submit",form:eu,children:_?i("Update"):i("Add")})]}),children:(0,a.jsx)(w.lV,{...z,children:(0,a.jsxs)("form",{id:eu,onSubmit:z.handleSubmit(e=>{if(_)S(t=>t.map(t=>t.id===_.id?{...t,...e}:t)),h.oR.success(i('Group updated. Click "Save Settings" to apply.'));else{let t=Math.max(...A.map(e=>e.id),0)+1;S(n=>[...n,{id:t,...e}]),h.oR.success(i('Group added. Click "Save Settings" to apply.'))}D(!0),U(!1)}),className:"space-y-4",children:[(0,a.jsx)(w.zB,{control:z.control,name:"categoryName",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Category Name")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{placeholder:i("e.g., Core APIs, OpenAI, Claude"),...t})}),(0,a.jsx)(w.Rr,{children:i("Display name for this monitoring group (max 50 characters)")}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:z.control,name:"url",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Uptime Kuma URL")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{placeholder:i("https://status.example.com"),...t})}),(0,a.jsx)(w.Rr,{children:i("Base URL of your Uptime Kuma instance")}),(0,a.jsx)(w.C5,{})]})}}),(0,a.jsx)(w.zB,{control:z.control,name:"slug",render:e=>{let{field:t}=e;return(0,a.jsxs)(w.eI,{children:[(0,a.jsx)(w.lR,{children:i("Status Page Slug")}),(0,a.jsx)(w.MJ,{children:(0,a.jsx)(C.p,{placeholder:i("my-status"),...t})}),(0,a.jsxs)(w.Rr,{children:[i("The slug is appended to the URL:")," ","{url}",i("/status/"),"{slug}"]}),(0,a.jsx)(w.C5,{})]})}})]})})}),(0,a.jsx)(v.Lt,{open:E,onOpenChange:F,children:(0,a.jsxs)(v.EO,{children:[(0,a.jsxs)(v.wd,{children:[(0,a.jsx)(v.r7,{children:i("Are you sure?")}),(0,a.jsx)(v.$v,{children:"single"===G?i("This Uptime Kuma group will be removed from the list."):i("{{count}} Uptime Kuma groups will be removed from the list.",{count:O.length})})]}),(0,a.jsxs)(v.ck,{children:[(0,a.jsx)(v.Zr,{children:i("Cancel")}),(0,a.jsx)(v.Rx,{variant:"destructive",onClick:()=>{"single"===G&&_?(S(e=>e.filter(e=>e.id!==_.id)),D(!0),h.oR.success(i('Group deleted. Click "Save Settings" to apply.'))):"batch"===G&&(S(e=>e.filter(e=>!O.includes(e.id))),L([]),D(!0),h.oR.success(i('{{count}} groups deleted. Click "Save Settings" to apply.',{count:O.length}))),F(!1),B(null)},children:i("Delete")})]})]})})]})}let ep=[{id:"dashboard",titleKey:"Data Dashboard",build:e=>{var t;return(0,a.jsx)(eo,{defaultValues:{DataExportEnabled:e.DataExportEnabled,DataExportInterval:e.DataExportInterval,DataExportDefaultTime:"week"===(t=e.DataExportDefaultTime)||"hour"===t||"day"===t?t:"hour"}})}},{id:"announcements",titleKey:"Announcements",build:e=>(0,a.jsx)(q,{enabled:e["console_setting.announcements_enabled"],data:e["console_setting.announcements"]})},{id:"api-info",titleKey:"API Addresses",build:e=>(0,a.jsx)(B,{enabled:e["console_setting.api_info_enabled"],data:e["console_setting.api_info"]})},{id:"faq",titleKey:"FAQ",build:e=>(0,a.jsx)(ed,{enabled:e["console_setting.faq_enabled"],data:e["console_setting.faq"]})},{id:"uptime-kuma",titleKey:"Uptime Kuma",build:e=>(0,a.jsx)(eh,{enabled:e["console_setting.uptime_kuma_enabled"],data:e["console_setting.uptime_kuma_groups"]})},{id:"chat",titleKey:"Chat Presets",build:e=>(0,a.jsx)(ee,{defaultValue:e.Chats})},{id:"drawing",titleKey:"Drawing",build:e=>(0,a.jsx)(er,{defaultValues:{DrawingEnabled:e.DrawingEnabled,MjNotifyEnabled:e.MjNotifyEnabled,MjAccountFilterEnabled:e.MjAccountFilterEnabled,MjForwardUrlEnabled:e.MjForwardUrlEnabled,MjModeClearEnabled:e.MjModeClearEnabled,MjActionCheckSuccessEnabled:e.MjActionCheckSuccessEnabled}})}],em=(0,i.h)({sections:ep,defaultSection:"dashboard",basePath:"/system-settings/content",urlStyle:"path"}),eg=em.sectionIds,ef=em.defaultSection,ey=em.getSectionNavItems,eb=em.getSectionContent,ev=em.getSectionMeta},18372(e,t,n){"use strict";var a=n(22990);async function i(){return(await a.FH.get("/api/option/channel_affinity_cache",{disableDuplicate:!0})).data}async function o(){return(await a.FH.delete("/api/option/channel_affinity_cache",{params:{all:!0}})).data}async function s(e){return(await a.FH.delete("/api/option/channel_affinity_cache",{params:{rule_name:e}})).data}async function r(e){return(await a.FH.get("/api/log/channel_affinity_usage_cache",{params:e,disableDuplicate:!0})).data}n.d(t,{A4:()=>s,Mb:()=>r,QS:()=>i,pc:()=>o})},12727(e,t,n){"use strict";var a=n(68413);function i(e,t){let n=(0,a.useRef)(null);(0,a.useEffect)(()=>{if(!t)return;let a=JSON.stringify(t);a!==n.current&&(e.reset(t),n.current=a)},[t,e])}n.d(t,{j:()=>i})},75033(e,t,n){"use strict";var a=n(19376),i=n(68413),o=n(86832),s=n(20598);function r(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function l(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r(e)?Object.entries(e).forEach(e=>{let[a,i]=e,o=t?`${t}.${a}`:a;if(r(i))return void l(i,o,n);if(Array.isArray(i)){n[o]=i;return}n[o]=i}):"string"==typeof t&&(n[t]=e),n}function c(e){let{onSubmit:t,compareValues:n,defaultValues:c,...d}=e,u=(0,i.useMemo)(()=>(function e(t){if(!t||!r(t))return t;let n={};return Object.entries(t).forEach(t=>{let[a,i]=t;if(a.includes(".")){let e,t;return void(e=a.split("."),t=n,e.forEach((n,a)=>{if(a===e.length-1){t[n]=i;return}let o=t[n];if(r(o)){t=o;return}t[n]={},t=t[n]}))}if(r(i)){n[a]=e(i);return}n[a]=i}),n})(c),[c]),h=(0,o.mN)({...d,defaultValues:u}),p=(0,i.useRef)(u??{}),m=(0,i.useRef)(l(u??{})),g=(0,i.useRef)(JSON.stringify(m.current));(0,i.useEffect)(()=>{if(!u)return;let e=l(u),t=JSON.stringify(e);t!==g.current&&(m.current=e,p.current=u,g.current=t,h.reset(u))},[u,h]);let f=n||((e,t)=>e===t||(Array.isArray(e)&&Array.isArray(t)?JSON.stringify(e)===JSON.stringify(t):typeof e==typeof t&&!!e&&!!t&&"object"==typeof e&&"object"==typeof t&&JSON.stringify(e)===JSON.stringify(t))),y=async e=>{let n=Object.entries(function e(t,n,a){let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return!0===t?"string"==typeof a&&(i[a]=n):t&&"object"==typeof t&&Object.entries(t).forEach(t=>{let[o,s]=t,l=a?`${a}.${o}`:o,c=n&&(r(n)||Array.isArray(n))?n[o]:void 0;if(!0===s){i[l]=c;return}s&&"object"==typeof s&&e(s,c,l,i)}),i}(h.formState.dirtyFields,e)).filter(e=>{let[t,n]=e;return!f(n,m.current[t])});if(0===n.length)return void s.oR.info(a.Ay.t("No changes to save"));let i=n.reduce((e,t)=>{let[n,a]=t;return e[n]=a,e},{});await t(e,i);let o=l(e);m.current=o,p.current=e,g.current=JSON.stringify(o),h.reset(e)};return{form:h,handleSubmit:h.handleSubmit(y),handleReset:()=>{h.reset(p.current),s.oR.success(a.Ay.t("Form reset to saved values"))},isDirty:h.formState.isDirty,isSubmitting:h.formState.isSubmitting}}n.d(t,{T:()=>c})},47182(e,t,n){"use strict";var a=n(96962),i=n(55667),o=n(19376),s=n(20598),r=n(26411),l=n(46006),c=n(92778);let d=new Set(["HeaderNavModules","SidebarModulesAdmin","Notice","LogConsumeEnabled","log_setting.user_export_enabled","log_setting.max_range_days","QuotaPerUnit","USDExchangeRate","DisplayInCurrencyEnabled","DisplayTokenStatEnabled","general_setting.quota_display_type","general_setting.custom_currency_symbol","general_setting.custom_currency_exchange_rate","oidc.display_name","ServerAddress","passkey.enabled","passkey.rp_id","passkey.legacy_rp_ids","passkey.origins","QuotaRemindEnabled","QuotaRemindThreshold"]);function u(){let e=(0,a.jE)();return(0,i.n)({mutationFn:async e=>(0,l.oi)(await (0,c.qE)(e)),onSuccess:(t,n)=>{if(t.success){if(e.invalidateQueries({queryKey:["system-options"]}),d.has(n.key)){e.invalidateQueries({queryKey:["status"]});try{window.localStorage.removeItem("status")}catch{}}s.oR.success(o.Ay.t("Setting updated successfully"))}else(0,r.Q)(t,o.Ay.t("Failed to update setting"))},onError:e=>{(0,r.Q)(e,o.Ay.t("Failed to update setting"))}})}function h(){let e=(0,a.jE)();return(0,i.n)({mutationFn:async e=>{let t=await (0,c.R)(e);return"PASSKEY_RP_ID_REMOVAL_CONFIRMATION_REQUIRED"===t.code&&t.data?t:(0,l.oi)(t)},onSuccess:(t,n)=>{if(!n.preview&&t.success){e.invalidateQueries({queryKey:["system-options"]}),e.invalidateQueries({queryKey:["status"]});try{window.localStorage.removeItem("status")}catch{}s.oR.success(o.Ay.t("Setting updated successfully"))}},onError:e=>(0,r.Q)(e,o.Ay.t("Failed to update setting"))})}n.d(t,{M:()=>u,_:()=>h})},52757(e,t,n){"use strict";function a(e){let t=e.trim();return t?t.replace(/\/+$/,""):""}function i(e){let t=e.trim();if(!t)return"";try{return JSON.stringify(JSON.parse(t),null,2)}catch{return t}}function o(e){let t=e.trim();if(!t)return"";try{return JSON.stringify(JSON.parse(t))}catch{return t}}function s(e,t){let n=e.trim();if(!n)return null;try{let e=JSON.parse(n);if(t&&!t(e))return"JSON structure is invalid";return null}catch(i){if(!(i instanceof Error))return"Invalid JSON";let e=function(e,t){if(!(e instanceof Error))return{};let n=e.message,a=n.match(/at position (\d+)/i);if(a){let e=parseInt(a[1],10),n=t.substring(0,e).split("\n");return{line:n.length,column:n[n.length-1].length+1}}let i=n.match(/at line (\d+) column (\d+)/i);return i?{line:parseInt(i[1],10),column:parseInt(i[2],10)}:{}}(i,n),t=i.message,a=t.includes("Expected ','")||t.includes("Expected property name")||t.includes("Unexpected string");if(e.line&&e.column){let n="";return a&&e.line>1&&(n=` (check line ${e.line-1} for missing comma)`),`Error at line ${e.line}, column ${e.column}: ${t}${n}`}return t}}n.d(t,{NI:()=>s,UC:()=>a,oE:()=>i,s$:()=>o})},74091(e,t,n){"use strict";var a=n(49256),i=n(89162),o=n(30077),s=n(92924),r=n(30991);let l={completion:"",cache:"",createCache:"",image:"",audioInput:"",audioOutput:""},c={completion:!1,cache:!1,createCache:!1,image:!1,audioInput:!1,audioOutput:!1};function d(e){return""!==e&&null!=e&&!1!==e}function u(e){if(!d(e)&&0!==e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function h(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=u(e),i=u(t);return null===a||null===i?n:(0,r.j)(a*i)}function p(e){let t;if(!e)return{promptPrice:"",prices:{...l},enabled:{...c}};let n=null===(t=u(e.ratio))?"":(0,r.j)(2*t),a=h(e.audioRatio,n),i={completion:h(e.completionRatio,n),cache:h(e.cacheRatio,n),createCache:h(e.createCacheRatio,n),image:h(e.imageRatio,n),audioInput:a,audioOutput:h(e.audioCompletionRatio,a)};return{promptPrice:n,prices:i,enabled:{completion:d(e.completionRatio),cache:d(e.cacheRatio),createCache:d(e.createCacheRatio),image:d(e.imageRatio),audioInput:d(e.audioRatio),audioOutput:d(e.audioCompletionRatio)}}}function m(e,t,n,a,s,r,l,c){let h=arguments.length>8&&void 0!==arguments[8]?arguments[8]:i.GW,p=arguments.length>9?arguments[9]:void 0,m=arguments.length>10?arguments[10]:void 0;if("tiered_expr"===t){let e=(0,o.yl)(n,a);return[{key:"mode",label:c("Pricing"),value:c("Expression")},{key:"expr",label:`${c("Expression")} (USD)`,value:e||c("Empty"),multiline:!0}]}if("per-request"===t)return[{key:"price",label:c(m?.image_count?"Price per image":"Fixed price"),...m?.image_count?{unit:"image"}:{},value:e.price?(0,i.yG)(e.price,h):c("Empty")},...g(m,c)];let f=l.audioInput&&r.audioInput?(0,i.yG)(r.audioInput,h):c("Empty"),y=l.audioOutput&&r.audioOutput?(0,i.yG)(r.audioOutput,h):c("Empty");m?.audio_input_price!==void 0&&(f=(0,i.yG)(m.audio_input_price,h)),m?.audio_output_price!==void 0&&(y=(0,i.yG)(m.audio_output_price,h));let b=[{key:"inputPrice",label:c("Input price"),value:s?(0,i.yG)(s,h):c("Empty")},{key:"completion",label:c("Completion price"),value:l.completion&&r.completion?(0,i.yG)(r.completion,h):c("Empty")},{key:"cache",label:c("Cache read price"),value:l.cache&&r.cache?(0,i.yG)(r.cache,h):c("Empty")},{key:"createCache",label:c("claude_ttl"===p?"Cache Creation (5m)":"Cache write price"),value:l.createCache&&r.createCache?(0,i.yG)(r.createCache,h):c("Empty")},{key:"image",label:c("Image input price"),value:l.image&&r.image?(0,i.yG)(r.image,h):c("Empty")},{key:"audio",label:c("Audio input price"),value:f},{key:"audioCompletion",label:c("Audio output price"),value:y}];"claude_ttl"===p&&l.createCache&&r.createCache&&b.splice(4,0,{key:"createCache1h",label:c("Cache create (1h) price"),value:(0,i.yG)(1.6*Number(r.createCache),h)});let v=p?"none"!==p:d(e.createCacheRatio),k=u(e.imageRatio)??1,x=u(e.cacheRatio)??1;return[...b.filter(e=>("image"!==e.key||1!==k)&&("cache"!==e.key||1!==x)&&("createCache"!==e.key||v)),...g(m,c)]}function g(e,t){let n=[];for(let[a,i]of(e?.audio_text_branches&&n.push({key:"audioTextBranches",label:t("Pricing"),value:t("Audio and text-only requests keep their respective pricing."),unit:"none"}),e?.image_count&&n.push({key:"imageCount",label:t("Image count"),value:t("Reserve requested images; settle returned images."),unit:"none"}),(e?.request_rules??[]).entries()))n.push({key:`adjustment-${a}`,label:(0,s.m)(i.condition,t)||i.condition,value:`\xd7 ${i.multiplier}`,unit:"none"});return n}n.d(t,{J:()=>u,a4:()=>d,kw:()=>p,r:()=>g,yi:()=>m},{D0:c,Q2:[{key:"completion",titleKey:"Completion price",descriptionKey:"Output token price for generated tokens.",placeholder:"15"},{key:"cache",titleKey:"Cache read price",descriptionKey:"Token price for cache reads.",placeholder:"0.3"},{key:"createCache",titleKey:"Cache write price",descriptionKey:"Token price for creating cache entries.",placeholder:"3.75"},{key:"image",titleKey:"Image input price",descriptionKey:"Token price for image input.",placeholder:"2.5"},{key:"audioInput",titleKey:"Audio input price",descriptionKey:"Token price for audio input.",placeholder:"3.81"},{key:"audioOutput",titleKey:"Audio output price",descriptionKey:"Token price for audio output.",placeholder:"15.11"}],a8:l,hH:{completion:"completionRatio",cache:"cacheRatio",createCache:"createCacheRatio",image:"imageRatio",audioInput:"audioRatio",audioOutput:"audioCompletionRatio"},nq:e=>a.Ik({name:a.Yj().min(1,e("Model name is required")),price:a.Yj().optional(),ratio:a.Yj().optional(),cacheRatio:a.Yj().optional(),createCacheRatio:a.Yj().optional(),completionRatio:a.Yj().optional(),imageRatio:a.Yj().optional(),audioRatio:a.Yj().optional(),audioCompletionRatio:a.Yj().optional()})})},52490(e,t,n){"use strict";n.d(t,{B:()=>tm,x:()=>tp});var a=n(72361),i=n(48367),o=n(55667),s=n(53540),r=n(96855),l=n(99597),c=n(68413),d=n(86832),u=n(6702),h=n(47029),p=n(43284),m=n(72868),g=n(90358),f=n(36710),y=n(1738),b=n(6264),v=n(74559),k=n(56920),x=n(24985),w=n(89162),C=n(21735),A=n(30991);function S(e){let{value:t,onChange:n,currency:i=w.GW,grouped:o,...s}=e,{t:r}=(0,u.Bd)(),l=(0,c.useId)(),d=String(t),[h,p]=(0,c.useState)(null),m=Number(t)*i.exchangeRate,g="";""!==t&&(g=String(m),Number.isFinite(m)&&(g=Number((0,A.j)(m)).toLocaleString("en-US",{useGrouping:!1,maximumFractionDigits:12})));let f=h?.source===d&&h.rate===i.exchangeRate?h.text:g,v=""===f||"."===f?0:Number(f),k=v/i.exchangeRate,x=!Number.isFinite(v)||v<0||!Number.isFinite(k)||!Number.isFinite(m),C=x?r("The converted price must be a finite, non-negative number."):"",S=o?b.iV:y.p;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(S,{...s,ref:e=>{if(e?.setCustomValidity(C),"function"==typeof s.ref)return s.ref(e);s.ref&&(s.ref.current=e)},"data-pricing-amount":"",type:"text",inputMode:"decimal",value:f,"aria-invalid":x||s["aria-invalid"]||void 0,"aria-describedby":[s["aria-describedby"],x?l:""].filter(Boolean).join(" ")||void 0,onChange:e=>{let a=e.target.value;if(!/^(\d+(\.\d*)?|\.\d*)?$/.test(a))return;let o="."===a||""===a?0:Number(a),s=o/i.exchangeRate;if(!Number.isFinite(s)||!Number.isFinite(o))return void p({text:a,source:d,rate:i.exchangeRate});let r=""===a||"."===a?"":(0,A.j)(s),l="number"==typeof t?String(Number(r)):r;p({text:a,source:l,rate:i.exchangeRate}),l!==d&&n(r)},onFocus:e=>{s.onFocus?.(e),0===Number(e.currentTarget.value)&&e.currentTarget.select()}}),x&&(0,a.jsx)("span",{id:l,role:"alert","data-pricing-error":"",className:o?"text-destructive order-[10000] w-full px-2.5 pb-1 text-xs":"text-destructive block text-xs",children:C})]})}var P=n(73280),T=n(18557),I=n(30077),R=n(73951),N=n(79220),j=n(74091);function M(e){let{t}=(0,u.Bd)(),n=(0,C.rK)(e.preview.modelName,e.preview.effective),i=(0,j.kw)(n),o=(0,j.yi)(n,n.billingMode??"per-token","","",i.promptPrice,i.prices,i.enabled,t,e.currency,e.preview.cacheWriteMode,e.preview.billingDetails).filter(e=>e.value!==t("Empty")),s=(0,I.oK)((0,I.U8)(e.preview.expression).billingExpr),r=s.flatMap((e,n)=>(0,N.XY)(e,{tokenUnit:"M"}).map(a=>({...a,key:`${n}-${a.key}`,tierLabel:s.length>1?t(e.conditionText||e.label):"",imageCount:!!e.imageCount}))),l=(0,R.Z)(e.preview.expression),c=(0,j.r)("ready"===l.status?{image_count:l.variables.has("image_count"),request_rules:l.requestRules.map(t=>({condition:e.preview.expression.slice(t.condition.start,t.condition.end),multiplier:t.multiplier}))}:void 0,t);return(0,a.jsxs)(P.T,{open:!0,onOpenChange:t=>{t||e.onCancel()},title:t("Preview pricing conversion"),desc:t("Review the prices and billing expression. Confirming updates the draft; save model pricing to apply it."),confirmText:t("Apply to draft"),handleConfirm:e.onConfirm,className:"max-h-[min(90dvh,var(--dialog-available-height))] overflow-y-auto data-[size=default]:max-w-[calc(100%-2rem)] data-[size=default]:sm:max-w-5xl",children:[(0,a.jsx)("p",{className:"font-mono text-sm break-all",children:e.preview.modelName}),(0,a.jsxs)("div",{className:"grid min-w-0 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("section",{"aria-label":t("Before conversion"),className:"min-w-0 space-y-4 rounded-lg border p-4",children:[(0,a.jsx)("h3",{className:"font-semibold",children:t("Before conversion")}),(0,a.jsx)("dl",{className:"space-y-3",children:o.map(e=>{let i="per-request"===n.billingMode?t("request"):t("1M token");return"image"===e.unit&&(i=t("image")),(0,a.jsxs)("div",{className:"flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1",children:[(0,a.jsx)("dt",{className:"text-muted-foreground text-sm",children:e.label}),(0,a.jsxs)("dd",{className:"font-mono text-sm tabular-nums",children:[e.value,"none"!==e.unit&&(0,a.jsxs)(a.Fragment,{children:[" / ",i]})]})]},e.key)})})]}),(0,a.jsxs)("section",{"aria-label":t("After conversion"),className:"border-primary/30 bg-primary/5 min-w-0 space-y-4 rounded-lg border p-4",children:[(0,a.jsx)("h3",{className:"font-semibold",children:t("After conversion")}),(0,a.jsxs)("dl",{className:"space-y-3",children:[r.map(n=>{let i="request"===n.unit?t("request"):t("1M token");return n.imageCount&&(i=t("image")),(0,a.jsxs)("div",{className:"flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1",children:[(0,a.jsxs)("dt",{className:"text-muted-foreground text-sm",children:[n.tierLabel&&`${n.tierLabel} \xb7 `,t(n.label)]}),(0,a.jsxs)("dd",{className:"font-mono text-sm tabular-nums",children:[(0,w.yG)(n.value,e.currency)," /"," ",i]})]},n.key)}),c.map(e=>(0,a.jsxs)("div",{className:"flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1",children:[(0,a.jsx)("dt",{className:"text-muted-foreground text-sm",children:e.label}),(0,a.jsx)("dd",{className:"font-mono text-sm tabular-nums",children:e.value})]},e.key))]}),(0,a.jsxs)("div",{className:"space-y-2 border-t pt-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("h4",{className:"text-sm font-medium",children:[t("Billing expression")," (USD)"]}),(0,a.jsx)(T.i,{value:e.preview.expression})]}),(0,a.jsx)("pre",{className:"bg-background rounded-md border p-3 text-xs break-words whitespace-pre-wrap",children:(0,a.jsx)("code",{children:e.preview.expression})})]})]})]}),(0,a.jsx)(p.Fc,{children:(0,a.jsx)(p.TN,{className:"text-xs",children:t("After conversion, expression reservation and rounding rules apply. Effective unit prices are preserved; individual rounded charges may differ.")})})]})}var D=n(5623),O=n(60641),L=n(88288),q=n(5676);function U(e){let{t}=(0,u.Bd)(),n=(0,c.useId)(),i=(0,q.v)(e=>e.currency),o=(0,q.v)(e=>e.setCurrency),s=(0,w.OP)(e.siteCurrency),r=s&&"site"===i?"site":"USD",l=[{value:"USD",label:t("US dollar (USD)")}];return e.siteCurrency&&l.push({value:"site",label:t("Site currency ({{currency}})",{currency:e.siteCurrency.label})}),(0,a.jsxs)(g.D0,{className:"mb-4 gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.jsx)(g.dh,{htmlFor:n,children:t("Pricing currency")}),(0,a.jsxs)(O.l,{title:t("About pricing currency"),contentClassName:"sm:max-w-lg",trigger:(0,a.jsx)(m.$,{type:"button",size:"icon-sm",variant:"ghost","aria-label":t("About pricing currency"),children:(0,a.jsx)(D.A,{"aria-hidden":"true"})}),children:[(0,a.jsx)("p",{className:"text-sm",children:t("The system always bills in USD. Site currency makes entering and converting prices easier; amounts are converted to USD using the site exchange rate. Switching currencies does not change the actual price. Raw billing expressions always use USD.")}),s&&e.siteCurrency&&(0,a.jsx)("p",{className:"mt-3 text-sm",children:t("Current exchange rate: 1 USD = {{rate}} {{currency}}",{rate:String(e.siteCurrency.exchangeRate),currency:e.siteCurrency.label})})]})]}),(0,a.jsxs)(L.l6,{items:l,value:r,onValueChange:e=>{("USD"===e||"site"===e&&s)&&o(e)},children:[(0,a.jsx)(L.bq,{id:n,className:"w-full sm:w-64","aria-describedby":e.siteCurrency&&!s?`${n}-error`:void 0,children:(0,a.jsx)(L.yv,{})}),(0,a.jsx)(L.gC,{alignItemWithTrigger:!1,children:l.map(e=>(0,a.jsx)(L.eb,{value:e.value,disabled:"site"===e.value&&!s,children:e.label},e.value))})]}),e.siteCurrency&&!s&&(0,a.jsx)("p",{id:`${n}-error`,className:"text-muted-foreground text-xs",children:t("The site exchange rate is invalid. Prices are shown in USD.")})]})}var E=n(89347),F=n(38785),_=n(34146),B=n(38088),G=n(26411),V=n(56275),z=n(43919),K=n(43152);function W(e){return(0,a.jsxs)(b.MG,{className:"has-[[data-pricing-error]]:h-auto has-[[data-pricing-error]]:flex-wrap",children:[(0,a.jsx)(b.Sq,{children:(e.currency??w.GW).symbol}),(0,a.jsx)(S,{grouped:!0,currency:e.currency,id:e.id,"aria-label":e["aria-label"],"aria-describedby":e["aria-describedby"],inputMode:"decimal",value:e.value,placeholder:e.placeholder,disabled:e.disabled,onChange:e.onChange}),(0,a.jsxs)(b.Sq,{align:"inline-end",children:[(e.currency??w.GW).symbol,"/1M"]})]})}function H(e){let{t}=(0,u.Bd)(),n=(0,c.useId)(),i=e.disabled||!e.enabled;return(0,a.jsxs)(K.WY,{className:(0,V.cn)("space-y-3",e.compact&&"space-y-2 rounded-lg bg-transparent p-3",i&&"opacity-75"),"data-disabled":i||void 0,children:[(0,a.jsx)(K.ew,{controlId:n,className:e.compact?"py-0":void 0,checked:e.enabled,disabled:e.disabled,onCheckedChange:e.onEnabledChange,label:e.title,description:e.disabledReason||e.description,"aria-label":e.title}),(0,a.jsx)(W,{currency:e.currency,"aria-label":e.title,"aria-describedby":`${n}-description`,value:e.value,placeholder:e.placeholder,disabled:i,onChange:e.onChange}),!e.compact&&(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:e.enabled?t("{{currency}} price per 1M tokens.",{currency:(e.currency??w.GW).label}):t("Disabled lanes are omitted on save.")})]})}var J=n(42685),Q=n(90879),$=n(49641),Y=n(11728),X=n(70954),Z=n(12363),ee=n(91460),et=n(24877),en=n(6242),ea=n(87957),ei=n(92924),eo=n(67558);let es={syntax:"Invalid expression syntax",unsupported:"This expression cannot be simulated in the browser.",missing_context:"Simulation context is missing.",type:"Expression argument types do not match.",number:"Billing values must be finite and non-negative.",limit:"This expression exceeds the browser simulation limits."};function er(e){let{t,i18n:n}=(0,u.Bd)(),i=(0,c.useId)(),o=(0,c.useId)(),s=(0,c.useId)(),r=(0,c.useId)(),[l,d]=(0,c.useState)("1"),h=(0,c.useMemo)(()=>(0,R.Z)(e.expression),[e.expression]),p="ready"===h.status&&h.variables.has("image_count"),f=Object.entries(e.usageSchema??{}).filter(e=>{let[,t]=e;return"boolean"===t.type}),[b,v]=(0,c.useState)({sample:e.usage,values:{}}),k=(0,c.useMemo)(()=>{if(e.usage)return{...e.usage,...b.sample===e.usage?b.values:{}}},[e.usage,b]),[x,C]=(0,c.useState)(!1),[A,S]=(0,c.useState)("{}"),[P,T]=(0,c.useState)("{}"),[I,N]=(0,c.useState)("current"),[j,M]=(0,c.useState)(()=>new Date().toISOString()),D=(0,ea.K)(e.expression,x&&"current"===I),O=(0,c.useMemo)(()=>{let t,n;if(!x)return null;try{t=JSON.parse(A)}catch{return{inputError:"Request body must be a JSON object."}}if(null===t||"object"!=typeof t||Array.isArray(t))return{inputError:"Request body must be a JSON object."};try{n=JSON.parse(P.trim()||"{}")}catch{return{inputError:"Request headers must be a JSON object with string values."}}if(null===n||"object"!=typeof n||Array.isArray(n)||Object.values(n).some(e=>"string"!=typeof e))return{inputError:"Request headers must be a JSON object with string values."};let a=void 0===D?new Date:new Date(D);if("fixed"===I){if(!/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?(?:Z|[+-]\d{2}:\d{2})$/.test(j))return{inputError:"Enter an ISO date and time with a timezone offset."};a=new Date(j);let e=new Date(`${j.slice(0,10)}T00:00:00Z`);if(!Number.isFinite(e.getTime())||e.toISOString().slice(0,10)!==j.slice(0,10)||!Number.isFinite(a.getTime()))return{inputError:"Enter an ISO date and time with a timezone offset."}}for(let[t,n]of Object.entries(e.usageSchema??{}))if("boolean"===n.type&&"boolean"!=typeof k?.[t])return{inputError:"Simulation context is missing."};return(0,eo.j8)(e.expression,{imageCount:Number(l),tokens:e.tokens,usage:k,now:a,request:{body:t,headers:n}})},[x,l,A,P,I,j,D,e.expression,e.tokens,k,e.usageSchema]),q="";O&&"inputError"in O?q=t(O.inputError):O&&"success"!==O.status&&(q=`${t(es[O.diagnostic.code])} ${O.diagnostic.detail}`);let U=O&&"status"in O&&"success"===O.status?O:null,E=new Map,F=(U?.requestRules??[]).map(e=>{let t=`${e.cond}:${e.multiplier}`,n=E.get(t)??0;return E.set(t,n+1),{...e,key:`${t}:${n}`}});return(0,a.jsxs)(en.Nt,{open:x,onOpenChange:C,className:"rounded-md border p-3",children:[(0,a.jsx)(en.R6,{render:(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"sm"}),children:t("Request simulation")}),(0,a.jsxs)(en.Ke,{className:"mt-3 space-y-4",children:[p&&(0,a.jsxs)(g.D0,{children:[(0,a.jsx)(g.dh,{htmlFor:r,children:t("Billable image count")}),(0,a.jsx)(y.p,{id:r,type:"number",min:1,max:128,step:1,value:l,onChange:e=>d(e.target.value)}),(0,a.jsx)(g.ry,{children:t("Reserve requested images; settle returned images.")})]}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:t("Simulate a request including request rules and excluding group multipliers. Empty objects represent an empty request.")}),f.map(i=>{let[o,s]=i,r=(0,Z.t)(s.description,o,n.language);return(0,a.jsxs)(g.D0,{children:[(0,a.jsx)(g.dh,{children:r}),(0,a.jsxs)(L.l6,{value:"boolean"==typeof k?.[o]?String(k[o]):null,onValueChange:t=>{null!==t&&v({sample:e.usage,values:{...b.sample===e.usage?b.values:{},[o]:"true"===t}})},items:[{value:"true",label:t("Yes")},{value:"false",label:t("No")}],children:[(0,a.jsx)(L.bq,{"aria-label":r,children:(0,a.jsx)(L.yv,{})}),(0,a.jsxs)(L.gC,{children:[(0,a.jsx)(L.eb,{value:"true",children:t("Yes")}),(0,a.jsx)(L.eb,{value:"false",children:t("No")})]})]})]},o)}),(0,a.jsxs)("div",{className:"grid gap-4 sm:grid-cols-2",children:[(0,a.jsxs)(g.D0,{children:[(0,a.jsx)(g.dh,{htmlFor:i,children:t("Simulated request body")}),(0,a.jsx)(ee.B,{id:i,value:A,onChange:S,ariaLabel:t("Simulated request body"),heightClassName:"h-40 min-h-40 max-h-40"})]}),(0,a.jsxs)("div",{role:"group","aria-labelledby":o,className:"space-y-2",children:[(0,a.jsx)("div",{id:o,className:"text-sm font-medium",children:t("Simulated request headers")}),(0,a.jsx)(et.i,{value:P,onChange:T,valueType:"string",keyPlaceholder:t("Header"),valuePlaceholder:t("Value")})]})]}),(0,a.jsxs)(g.D0,{children:[(0,a.jsx)(g.dh,{htmlFor:s,children:t("Simulation time")}),(0,a.jsxs)(L.l6,{value:I,onValueChange:e=>e&&N(e),items:[{value:"current",label:t("Current time")},{value:"fixed",label:t("Specified time")}],children:[(0,a.jsx)(L.bq,{id:s,className:"w-full sm:w-56",children:(0,a.jsx)(L.yv,{})}),(0,a.jsxs)(L.gC,{children:[(0,a.jsx)(L.eb,{value:"current",children:t("Current time")}),(0,a.jsx)(L.eb,{value:"fixed",children:t("Specified time")})]})]}),"fixed"===I&&(0,a.jsx)(y.p,{"aria-label":t("Specified time"),value:j,onChange:e=>M(e.target.value),placeholder:"2026-09-07T09:00:00+08:00",className:"font-mono"}),(0,a.jsx)(g.ry,{children:t("Time functions use the timezone written in the expression.")})]}),q&&(0,a.jsx)("p",{role:"alert",className:"text-destructive text-sm",children:q}),U&&(0,a.jsxs)("div",{role:"status",className:"bg-muted/40 space-y-2 rounded-md border p-3 text-sm",children:[(0,a.jsxs)("p",{className:"font-medium",children:[t("Simulated request cost"),":"," ",(0,w.yG)(U.cost/("token"===e.mode?1e6:1),e.currency),"request"===U.billingUnit&&`/${t("request")}`]}),U.matchedTier&&(0,a.jsxs)(Q.E,{variant:"outline",children:[t("Hit tier"),": ",U.matchedTier]}),U.requestRules.length>0&&(0,a.jsx)("ul",{className:"space-y-1",children:F.map(e=>(0,a.jsxs)("li",{className:"text-xs break-words",children:[(0,a.jsxs)("span",{children:[t(e.matched?"Matched":"Not matched")," · ×",e.multiplier]})," ",(0,a.jsx)("span",{children:(0,ei.m)(e.cond,t,n.language)??e.cond})]},e.key))})]})]})]})}var el=n(90689),ec=n(37116),ed=n(74501),eu=n(49302),eh=n(47303);function ep(e){let{t}=(0,u.Bd)(),n=(0,c.useRef)(null),[i,o]=(0,c.useState)(!1),[s,r]=(0,c.useState)(e.initialValue),l=()=>{if(n.current&&!n.current.reportValidity())return;let t=Number(s);e.onFillColumn(e.priceKey,Number.isFinite(t)&&t>=0?t:0),o(!1)};return(0,a.jsxs)(ed.AM,{open:i,onOpenChange:t=>{t&&r(e.initialValue),o(t)},children:[(0,a.jsx)(ed.Wv,{render:(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"sm",className:"h-8 min-w-8 shrink-0 px-2","aria-label":t("Fill entire column")}),children:(0,a.jsx)(el.A,{"aria-hidden":"true"})}),(0,a.jsxs)(ed.hl,{align:"end",className:"w-56",children:[(0,a.jsx)(ed.DI,{children:(0,a.jsx)(ed.eO,{children:t("Fill entire column")})}),(0,a.jsxs)(g.D0,{className:"gap-2",children:[(0,a.jsx)(g.dh,{className:"sr-only",children:t("Fill entire column")}),(0,a.jsx)(S,{ref:n,currency:e.currency,min:0,step:1e-6,value:s,"aria-label":t("Fill entire column"),onFocus:e=>{0===Number(e.currentTarget.value)&&e.currentTarget.select()},onChange:e=>r(Number(e)),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),l())},className:"font-mono"}),(0,a.jsx)(m.$,{type:"button",size:"sm",onClick:l,children:t("Apply to all rows")})]})]})]})}function em(e){let{t,i18n:n}=(0,u.Bd)(),i=Object.fromEntries([...e.enumFields,...e.numberFields]),o=e.enumFields.filter(t=>{let[n]=t;return n!==e.hiddenEnumField});return(0,a.jsxs)(eu.XI,{className:"min-w-max",children:[(0,a.jsx)(eu.A0,{children:(0,a.jsxs)(eu.Hj,{children:[o.map(e=>{let[t,i]=e;return(0,a.jsx)(eu.nd,{scope:"col",children:(0,a.jsx)("span",{className:"block max-w-64 break-words whitespace-normal",children:(0,Z.t)(i.description,t,n.language)})},t)}),e.numberFields.map(i=>{let[o,s]=i;return(0,a.jsx)(eu.nd,{scope:"col",className:"min-w-40",children:(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,a.jsx)("span",{className:"max-w-64 break-words whitespace-normal",children:(0,Z.t)(s.description,t("Unit price: {{field}}",{field:o}),n.language)}),(0,a.jsxs)("span",{className:"text-muted-foreground text-[11px] font-normal",children:[(e.currency??w.GW).symbol,"/",(0,Z.dy)(s,n.language,t((0,N.LZ)(s.unit)))]})]}),(0,a.jsx)(ep,{currency:e.currency,priceKey:o,initialValue:e.firstRow.unitPrices[o]??0,onFillColumn:e.onFillColumn})]})},o)}),(0,a.jsx)(eu.nd,{scope:"col",className:"min-w-40",children:(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-0.5",children:[(0,a.jsx)("span",{children:t("Additional charge")}),(0,a.jsx)("span",{className:"text-muted-foreground max-w-48 text-xs font-normal whitespace-normal",children:t("Added to the usage cost. Set to 0 for no additional charge.")}),(0,a.jsxs)("span",{className:"text-muted-foreground text-[11px] font-normal",children:[(e.currency??w.GW).symbol,"/",t("request")]})]}),(0,a.jsx)(ep,{currency:e.currency,priceKey:"constant",initialValue:e.firstRow.constant,onFillColumn:e.onFillColumn})]})}),(0,a.jsx)(eu.nd,{scope:"col",className:"w-10 px-1 text-center",children:(0,a.jsx)("span",{className:"sr-only",children:t("Status")})})]})}),(0,a.jsx)(eu.BF,{children:e.entries.map(s=>{let l=0===s.row.constant&&e.numberFields.every(e=>{let[t]=e;return!(s.row.unitPrices[t]>0)}),c=(0,Z.s$)(Object.entries(s.row.combination).map(e=>{let[t,n]=e;return{field:t,value:n}}),i,n.language,t);return(0,a.jsxs)(eu.Hj,{className:(0,V.cn)(e.matchedRowIndex===s.index&&"bg-primary/5 border-l-primary border-l-2"),children:[o.map(e=>{let[t]=e;return(0,a.jsx)(eu.nA,{children:(0,a.jsx)("span",{className:"break-words whitespace-normal",children:(0,Z.P3)(i[t],s.row.combination[t],n.language)})},t)}),e.numberFields.map(o=>{let[r]=o;return(0,a.jsx)(eu.nA,{children:(0,a.jsx)(S,{currency:e.currency,min:0,step:1e-6,value:s.row.unitPrices[r]??0,"data-matrix-col":r,"data-matrix-row":s.index,"aria-label":`${(0,Z.t)(i[r]?.description,t("Unit price: {{field}}",{field:r}),n.language)}: ${c}`,onFocus:e=>{0===Number(e.currentTarget.value)&&e.currentTarget.select()},onChange:t=>{let n=Number(t);e.onRowChange(s.index,{...s.row,unitPrices:{...s.row.unitPrices,[r]:Number.isFinite(n)&&n>=0?n:0}})},onKeyDown:t=>e.onPriceKeyDown(t,s.index,r),className:"min-w-28 font-mono"})},r)}),(0,a.jsx)(eu.nA,{children:(0,a.jsx)(S,{currency:e.currency,min:0,step:1e-6,value:s.row.constant,"data-matrix-col":"constant","data-matrix-row":s.index,"aria-label":`${t("Additional charge")}: ${c}`,onFocus:e=>{0===Number(e.currentTarget.value)&&e.currentTarget.select()},onChange:t=>{let n=Number(t);e.onRowChange(s.index,{...s.row,constant:Number.isFinite(n)&&n>=0?n:0})},onKeyDown:t=>e.onPriceKeyDown(t,s.index,"constant"),className:"min-w-28 font-mono"})}),(0,a.jsx)(eu.nA,{className:"px-1 text-center",children:!e.allRowsFree&&l?(0,a.jsxs)(eh.m_,{children:[(0,a.jsxs)(eh.k$,{render:(0,a.jsx)("span",{className:"inline-flex cursor-help text-amber-600 dark:text-amber-400",tabIndex:0}),children:[(0,a.jsx)(r.A,{"aria-hidden":"true"}),(0,a.jsx)("span",{className:"sr-only",children:t("This combination will be billed as free.")})]}),(0,a.jsx)(eh.ZI,{children:t("This combination will be billed as free.")})]}):null})]},`${c}:${s.index}`)})})]})}function eg(e){let{t,i18n:n}=(0,u.Bd)(),i=e.entries.filter(t=>0===t.row.constant&&e.numberFields.every(e=>{let[n]=e;return!(t.row.unitPrices[n]>0)})).length,o=e.entries.some(t=>t.index===e.matchedRowIndex);return(0,a.jsxs)(en.Nt,{open:e.open,onOpenChange:e.onOpenChange,children:[(0,a.jsxs)(en.R6,{render:(0,a.jsx)("button",{type:"button",className:"hover:bg-muted/40 flex w-full items-center justify-between rounded-lg border px-3 py-2 text-left transition-colors","aria-expanded":e.open}),children:[(0,a.jsxs)("span",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)("span",{className:"break-words whitespace-normal",children:(0,Z.P3)(Object.fromEntries(e.enumFields)[e.groupField],e.groupValue,n.language)}),(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:t("{{count}} combinations",{count:e.entries.length})}),!e.allRowsFree&&i>0?(0,a.jsxs)("span",{className:"inline-flex items-center gap-1 text-xs text-amber-600 dark:text-amber-400",children:[(0,a.jsx)(r.A,{"aria-hidden":"true"}),i,(0,a.jsx)("span",{className:"sr-only",children:t("This combination will be billed as free.")})]}):null,!e.open&&o?(0,a.jsx)("span",{className:"bg-primary size-2 rounded-full",children:(0,a.jsx)("span",{className:"sr-only",children:t("Hit tier")})}):null]}),(0,a.jsx)(ec.A,{className:(0,V.cn)("text-muted-foreground size-4 shrink-0 transition-transform",e.open&&"rotate-180"),"aria-hidden":"true"})]}),(0,a.jsx)(en.Ke,{className:"mt-2",children:(0,a.jsx)(em,{...e,hiddenEnumField:e.groupField})})]})}function ef(e){let{t}=(0,u.Bd)(),n=(0,c.useRef)(null),i=(0,_.aJ)(e.usageSchema),o=(0,_.Cp)(e.usageSchema),s=e.rows.map((e,t)=>({row:e,index:t})),l=e.rows[0],d=e.rows.every(e=>0===e.constant&&o.every(t=>{let[n]=t;return!(e.unitPrices[n]>0)})),h=i[0],m=e.rows.length>24&&!!h,[g,f]=(0,c.useState)(()=>{let e=h?.[1].enum?.[0];return e?[e]:[]}),y=(t,a,i)=>{if("Enter"!==t.key||a>=e.rows.length-1)return;t.preventDefault();let o=`input[data-matrix-col="${CSS.escape(i)}"][data-matrix-row="${a+1}"]`,s=n.current?.querySelector(o);if(s)return void s.focus();let r=h?e.rows[a+1]?.combination[h[0]]:void 0;m&&r&&(f(e=>e.includes(r)?e:[...e,r]),window.requestAnimationFrame(()=>{n.current?.querySelector(o)?.focus()}))};return l?(0,a.jsx)(eh.Bc,{children:(0,a.jsxs)("div",{ref:n,className:"flex flex-col gap-3",children:[d?(0,a.jsxs)(p.Fc,{className:"border-amber-500/40 bg-amber-500/10 text-amber-800 dark:text-amber-200",children:[(0,a.jsx)(r.A,{"aria-hidden":"true"}),(0,a.jsx)(p.TN,{className:"text-xs text-current",children:t("All combinations are priced at zero. Matching requests will be billed as free.")})]}):null,m&&h?(0,a.jsx)("div",{className:"flex flex-col gap-2",children:(h[1].enum??[]).map(t=>(0,a.jsx)(eg,{currency:e.currency,entries:s.filter(e=>e.row.combination[h[0]]===t),enumFields:i,numberFields:o,groupField:h[0],groupValue:t,open:g.includes(t),onOpenChange:e=>f(n=>e?n.includes(t)?n:[...n,t]:n.filter(e=>e!==t)),firstRow:l,allRowsFree:d,matchedRowIndex:e.matchedRowIndex,onRowChange:e.onRowChange,onFillColumn:e.onFillColumn,onPriceKeyDown:y},t))}):(0,a.jsx)(em,{currency:e.currency,entries:s,enumFields:i,numberFields:o,firstRow:l,allRowsFree:d,matchedRowIndex:e.matchedRowIndex,onRowChange:e.onRowChange,onFillColumn:e.onFillColumn,onPriceKeyDown:y})]})}):null}function ey(e){let{t,i18n:n}=(0,u.Bd)(),i=(0,_.aJ)(e.usageSchema),o=(0,_.Cp)(e.usageSchema),s=e.config?(0,_.tu)(e.config,e.sample,e.usageSchema):null,r=(s?.parts??[]).map(a=>{if("constant"===a.kind)return`${t("Additional charge")}: ${(0,w.yG)(a.amount,e.currency)}`;let i=e.usageSchema[a.field??""],o=(0,N.hD)(i?.unit),s=(0,N.LZ)(i?.unit),r=(0,Z.dy)(i,n.language,t(o)),l=(0,Z.dy)(i,n.language,t(s)),c=i?.unit==="second"?`${(0,A.j)(a.quantity)}${r}`:`${(0,A.j)(a.quantity)} ${r}`;return`${(0,Z.t)(i?.description,a.field??"",n.language)}: ${c} \xd7 ${(0,w.yG)(a.unitPrice??0,e.currency)}/${l}`}),l=r.length>0?r.join(" + "):(0,w.yG)(0,e.currency),c=`${l} = ${(0,w.yG)(s?.total??0,e.currency)}`;return(0,a.jsxs)("div",{className:"bg-muted/30 flex flex-col gap-3 rounded-md border p-3",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:t("Cost calculator")}),(0,a.jsxs)("p",{className:"text-muted-foreground text-xs",children:[t("Enter sample usage to estimate the cost. Group and request multipliers are not included."),e.requestRuleExpr?(0,a.jsxs)(a.Fragment,{children:[" ",t("Request rules apply on top of this amount.")]}):null]})]}),e.usageExamples&&e.usageExamples.length>0?(0,a.jsxs)(g.D0,{className:"gap-1.5",children:[(0,a.jsx)(g.dh,{children:t("Example spec")}),(0,a.jsx)($.G3,{options:e.usageExamples.map(e=>({value:e.label,label:e.label})),value:e.usageExamples.find(t=>Object.entries(t.facts).every(t=>{let[n,a]=t;return e.sample[n]===a}))?.label??null,onValueChange:t=>{let n=e.usageExamples?.find(e=>e.label===t);n&&e.onSampleReplace({...n.facts})},className:"w-full",placeholder:t("Example spec")})]}):null,i.length+o.length>0?(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[i.map(t=>{let[i,o]=t,s=(o.enum??[]).map(e=>({value:e,label:(0,Z.P3)(o,e,n.language)}));return(0,a.jsxs)(g.D0,{className:"gap-1.5",children:[(0,a.jsx)(g.dh,{children:(0,Z.t)(o.description,i,n.language)}),(0,a.jsx)($.G3,{"aria-label":(0,Z.t)(o.description,i,n.language),options:s,value:String(e.sample[i]??""),onValueChange:t=>null!==t&&e.onSampleChange(i,t),className:"w-full"})]},i)}),o.map(i=>{let[o,s]=i;return(0,a.jsxs)(g.D0,{className:"gap-1.5",children:[(0,a.jsx)(g.dh,{children:t("Usage · {{price}}",{price:(0,Z.t)(s.description,o,n.language)})}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(y.p,{type:"number","aria-label":t("Usage · {{price}}",{price:(0,Z.t)(s.description,o,n.language)}),min:0,step:1,value:e.sample[o]??0,onChange:t=>{let n=Number(t.target.value);e.onSampleChange(o,Number.isFinite(n)&&n>=0?n:0)},className:"font-mono"}),(0,a.jsx)("span",{className:"text-muted-foreground shrink-0 text-xs",children:(0,Z.dy)(s,n.language,t((0,N.hD)(s.unit)))})]})]},o)})]}):null,s?(0,a.jsxs)("div",{className:"border-primary/50 bg-primary/10 flex flex-col gap-2 rounded-md border p-3 text-sm",children:[(0,a.jsxs)(Q.E,{variant:"outline",className:"text-xs",children:[t("Current pricing conditions"),":"," ",(0,Z.s$)(i.map(t=>{let[n]=t;return{field:n,value:String(e.sample[n]??"")}}),e.usageSchema,n.language,t)||t("All requests")]}),(0,a.jsx)("code",{className:"font-mono text-xs break-words",children:c})]}):(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:t("Preview is unavailable for custom expressions.")})]})}let eb=(0,c.memo)(function(e){let{t,i18n:n}=(0,u.Bd)(),[i,o]=(0,c.useState)(()=>e.billingExpr&&!(0,_.Vl)(e.billingExpr,e.usageSchema)?"raw":"visual"),[s,l]=(0,c.useState)(()=>((0,_.Vl)(e.billingExpr,e.usageSchema)??(0,_.uE)(e.usageSchema)).rows),[d,h]=(0,c.useState)(!1),[m,f]=(0,c.useState)(()=>(0,I.yl)(e.billingExpr,e.requestRuleExpr)),[y,b]=(0,c.useState)(()=>{if(e.usageExamples?.[0])return{...e.usageExamples[0].facts};let t={};for(let[n,a]of(0,_.aJ)(e.usageSchema))t[n]=a.enum?.[0]??"";for(let[n,a]of(0,_.Cp)(e.usageSchema))t[n]="second"===a.unit?5:1;return t}),v=(0,_.aJ)(e.usageSchema),k=(0,_.Cp)(e.usageSchema),x=(0,_.ZF)(e.usageSchema),C=(0,_.XR)({rows:s},e.usageSchema),A=null,T=e.requestRuleExpr,R=null;if("visual"===i){(0,_.gq)({tiers:C},e.usageSchema)&&(A={tiers:C});let t=x.findIndex(e=>Object.entries(e).every(e=>{let[t,n]=e;return y[t]===n}));t>=0&&(R=t)}else{let t=(0,I.U8)(m);A=(0,_.g8)(t.billingExpr,e.usageSchema),T=t.requestRuleExpr}let j=t=>{l(t),e.onBillingExprChange((0,_.gq)({tiers:(0,_.XR)({rows:t},e.usageSchema)},e.usageSchema))},M=(e,t)=>{let n=[...s];n[e]=t,j(n)},D=(0,I.U8)(m),O=(0,_.Vl)(D.billingExpr,e.usageSchema),q=(e,t)=>{b(n=>({...n,[e]:t}))},U=s.every(e=>0===e.constant&&k.every(t=>{let[n]=t;return!(e.unitPrices[n]>0)}));return(0,a.jsxs)("div",{className:"space-y-5",children:[(0,a.jsx)(P.T,{open:d,onOpenChange:h,title:t("Switch to visual pricing?"),desc:O?t("Switching regenerates the expression from the price table and replaces its original formatting and tier names. Changes apply only after saving."):t("This expression cannot be represented by the price table. Switching discards the entire expression, including request rules, and resets all prices to zero. Configure prices before saving."),confirmText:t("Switch to visual editor"),destructive:!O,handleConfirm:()=>{let t=(O??(0,_.uE)(e.usageSchema)).rows;l(t),e.onBillingExprChange((0,_.gq)({tiers:(0,_.XR)({rows:t},e.usageSchema)},e.usageSchema)),e.onRequestRuleExprChange(O?D.requestRuleExpr:""),h(!1),o("visual")}}),(0,a.jsx)("div",{className:"grid gap-3 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-end",children:(0,a.jsxs)(g.D0,{className:"gap-2",children:[(0,a.jsx)(g.dh,{children:t("Editor mode")}),(0,a.jsxs)(L.l6,{items:[{value:"visual",label:t("Visual editor")},{value:"raw",label:t("Expression editor")}],value:i,onValueChange:t=>null!==t&&(t=>{if(t!==i){if("visual"===t)return void h(!0);f((0,I.yl)(e.billingExpr,e.requestRuleExpr)),o("raw")}})(t),children:[(0,a.jsx)(L.bq,{"aria-label":t("Editor mode"),className:"w-full sm:w-56",size:"sm",children:(0,a.jsx)(L.yv,{})}),(0,a.jsx)(L.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(L.s3,{children:[(0,a.jsx)(L.eb,{value:"visual",children:t("Visual editor")}),(0,a.jsx)(L.eb,{value:"raw",children:t("Expression editor")})]})})]})]})}),(0,a.jsx)(p.Fc,{children:(0,a.jsx)(p.TN,{className:"text-xs",children:t("Prices are in {{currency}}, with units shown below. Use USD when editing expressions directly.",{currency:(e.currency??w.GW).label})})}),(0,a.jsx)("div",{className:"bg-muted/30 space-y-3 rounded-md border p-3",children:"visual"===i?(0,a.jsxs)(a.Fragment,{children:[v.length>0?(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:t("Set prices for each set of conditions below. Cost = usage × unit price + additional charge. Token prices are per million tokens.")}),(0,a.jsx)(ef,{currency:e.currency,rows:s,usageSchema:e.usageSchema,matchedRowIndex:R,onRowChange:M,onFillColumn:(e,t)=>{j(s.map(n=>"constant"===e?{...n,constant:t}:{...n,unitPrices:{...n.unitPrices,[e]:t}}))}})]}):(0,a.jsxs)(a.Fragment,{children:[U?(0,a.jsxs)(p.Fc,{className:"border-amber-500/40 bg-amber-500/10 text-amber-800 dark:text-amber-200",children:[(0,a.jsx)(r.A,{"aria-hidden":"true"}),(0,a.jsx)(p.TN,{className:"text-xs text-current",children:t("All combinations are priced at zero. Matching requests will be billed as free.")})]}):null,(0,a.jsx)("div",{className:"flex flex-col gap-4",children:(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsx)(Y.J,{className:"text-xs font-medium",children:t("Usage prices")}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[k.map(i=>{let[o,r]=i,l=(0,Z.t)(r.description,o,n.language);return(0,a.jsxs)(g.D0,{className:"gap-1.5",children:[(0,a.jsx)(g.dh,{children:l}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(S,{currency:e.currency,"aria-label":o,min:0,step:1e-6,value:s[0].unitPrices[o]??0,onFocus:e=>{0===Number(e.currentTarget.value)&&e.currentTarget.select()},onChange:e=>{let t=Number(e);M(0,{...s[0],unitPrices:{...s[0].unitPrices,[o]:Number.isFinite(t)&&t>=0?t:0}})},className:"font-mono"}),(0,a.jsxs)("span",{className:"text-muted-foreground shrink-0 text-xs",children:[(e.currency??w.GW).symbol,"/",(0,Z.dy)(r,n.language,t((0,N.LZ)(r.unit)))]})]})]},o)}),(0,a.jsxs)(g.D0,{className:"gap-1.5",children:[(0,a.jsx)(g.dh,{children:t("Additional charge")}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(S,{currency:e.currency,"aria-label":t("Additional charge"),min:0,step:1e-6,value:s[0].constant,onFocus:e=>{0===Number(e.currentTarget.value)&&e.currentTarget.select()},onChange:e=>{let t=Number(e);M(0,{...s[0],constant:Number.isFinite(t)&&t>=0?t:0})},className:"font-mono"}),(0,a.jsxs)("span",{className:"text-muted-foreground shrink-0 text-xs",children:[(e.currency??w.GW).symbol,"/",t("request")]})]})]})]})]})})]}),(0,a.jsx)(ey,{currency:e.currency,config:A,requestRuleExpr:T,sample:y,usageSchema:e.usageSchema,usageExamples:e.usageExamples,onSampleChange:q,onSampleReplace:b}),(0,a.jsxs)(g.D0,{className:"gap-2 border-t pt-3",children:[(0,a.jsx)(g.dh,{children:t("Request rule pricing")}),(0,a.jsx)(X.T,{value:e.requestRuleExpr,onChange:t=>e.onRequestRuleExprChange(t.target.value),placeholder:'(header("x-priority") == "high" ? 2 : 1)',rows:3,className:"font-mono text-xs",spellCheck:!1}),(0,a.jsx)(g.ry,{children:t("Optional request-rule multiplier expression. Leave empty when no request rule applies.")})]})]}):(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsx)(p.Fc,{children:(0,a.jsxs)(p.TN,{className:"space-y-1 text-xs",children:[(0,a.jsxs)("div",{children:[t("Usage parameters"),":"," ",Object.keys(e.usageSchema).sort((e,t)=>e.localeCompare(t)).map(e=>`u(${JSON.stringify(e)})`).join(", ")]}),(0,a.jsxs)("div",{children:[t("Functions"),": ",(0,a.jsx)("code",{children:"tier(name, value)"}),","," ",(0,a.jsx)("code",{children:"header(name)"}),", ",(0,a.jsx)("code",{children:"param(path)"})]}),O?null:(0,a.jsx)("div",{children:t("This expression cannot be represented by the price table. You can switch to visual editing by confirming that the expression will be discarded.")})]})}),(0,a.jsx)(X.T,{"aria-label":t("Billing expression"),value:m,onChange:t=>{var n;let a;return f(n=t.target.value),a=(0,I.U8)(n),void(e.onBillingExprChange(a.billingExpr),e.onRequestRuleExprChange(a.requestRuleExpr))},placeholder:'tier("base", u("seconds") * 0.4)',rows:7,className:"font-mono text-xs",spellCheck:!1}),(0,a.jsx)(ey,{currency:e.currency,config:A,requestRuleExpr:T,sample:y,usageSchema:e.usageSchema,usageExamples:e.usageExamples,onSampleChange:q,onSampleReplace:b})]})}),(0,a.jsx)(er,{expression:"raw"===i?m:(0,I.yl)((0,_.gq)({tiers:C},e.usageSchema),e.requestRuleExpr),usage:y,usageSchema:e.usageSchema,currency:e.currency,mode:"task"})]})});function ev(e){let{t}=(0,u.Bd)(),n=(0,c.useId)(),[i,o]=(0,c.useState)("__model__"),s="ratio"!==e.modelBillingMode,r=e.variants.filter(t=>{if(t.stale||!s||Object.hasOwn(e.expressions,t.plugin_key))return!1;let n=(0,F.QX)(e.modelExpression,t.usage_schema);return void 0!==n?!n:e.modelExpression===t.effective&&!t.compatible});return 0===e.variants.length?e.children:(0,a.jsxs)(k.tU,{value:i,onValueChange:e=>o(String(e)),children:[(0,a.jsxs)(k.j7,{"aria-label":t("Provider"),className:"max-w-full flex-wrap justify-start group-data-horizontal/tabs:h-auto",children:[(0,a.jsx)(k.Xi,{value:"__model__",children:t("Default")}),e.variants.map(e=>(0,a.jsxs)(k.Xi,{value:e.plugin_key,className:"max-w-full min-w-0",children:[(0,a.jsx)(J.d,{plugin:{key:e.plugin_key,name:e.plugin_name,icon:e.icon},size:16}),(0,a.jsx)("span",{className:"truncate",title:e.plugin_name,children:e.plugin_name})]},e.plugin_key))]}),(0,a.jsxs)(k.av,{value:"__model__",keepMounted:!0,className:"space-y-3",children:[r.length>0&&(0,a.jsx)(p.Fc,{children:(0,a.jsxs)(p.TN,{children:[(0,a.jsx)("p",{children:t("The model-level expression cannot be evaluated by: {{plugins}}",{plugins:r.map(e=>e.plugin_name).join(", ")})}),(0,a.jsx)("div",{className:"flex flex-wrap gap-1",children:r.map(e=>(0,a.jsx)(m.$,{type:"button",variant:"link",size:"sm",onClick:()=>o(e.plugin_key),children:e.plugin_name},e.plugin_key))})]})}),e.children]}),e.variants.map(i=>{let r=i.plugin_key,l=Object.hasOwn(e.expressions,r);if(i.stale)return(0,a.jsxs)(k.av,{value:r,keepMounted:!0,className:"space-y-3",children:[(0,a.jsx)(p.Fc,{children:(0,a.jsx)(p.TN,{children:t("This provider is unavailable for this model.")})}),l&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("code",{className:"bg-muted/30 block max-h-40 overflow-auto rounded-md border p-3 text-xs break-all whitespace-pre-wrap",children:e.expressions[r]}),(0,a.jsx)(m.$,{type:"button",variant:"outline",onClick:()=>{e.onChange(e=>{let t={...e};return delete t[r],t}),o("__model__")},children:t("Remove saved price")})]})]},r);let c=l?e.expressions[r]:e.modelExpression,d=(0,I.U8)(c),u=(0,F.QX)(c,i.usage_schema);l||s?void 0===u&&c===i.effective&&(u=i.compatible):u=!0;let h=(0,F.QX)(e.modelExpression,i.usage_schema);void 0===h&&e.modelExpression===i.effective&&(h=i.compatible);let g=t("Use model-level expression");return s||(g=t("Use model-level pricing")),(0,a.jsxs)(k.av,{value:r,keepMounted:!0,className:"space-y-3",children:[(0,a.jsx)(K.ew,{controlId:`${n}-${r}`,checked:l,label:t("Set separately for this provider"),description:l?void 0:g,onCheckedChange:t=>e.onChange(n=>{let a={...n};return t?a[r]=s&&h?e.modelExpression:(0,_.gq)((0,_.fp)(i.usage_schema),i.usage_schema):delete a[r],a})}),!1===u&&(0,a.jsx)(p.Fc,{children:(0,a.jsx)(p.TN,{children:t("Not configured for this provider")})}),void 0===u&&(0,a.jsx)(p.Fc,{children:(0,a.jsx)(p.TN,{children:t("Expression compatibility will be checked when saving.")})}),l?(0,a.jsx)(eb,{currency:e.currency,billingExpr:d.billingExpr,requestRuleExpr:d.requestRuleExpr,usageSchema:i.usage_schema,usageExamples:i.usage_examples,onBillingExprChange:t=>e.onChange(e=>({...e,[r]:(0,I.yl)(t,(0,I.U8)(e[r]??"").requestRuleExpr)})),onRequestRuleExprChange:t=>e.onChange(e=>({...e,[r]:(0,I.yl)((0,I.U8)(e[r]??"").billingExpr,t)}))}):s&&(0,a.jsx)("code",{className:"bg-muted/30 block max-h-40 overflow-auto rounded-md border p-3 text-xs break-all whitespace-pre-wrap",children:c})]},r)})]})}var ek=n(14653),ex=n(66002),ew=n(99893),eC=n(20598),eA=n(9016),eS=n(49503);let eP=new Set(["<","<=",">",">=","==","!="]),eT={hour:[0,23],minute:[0,59],weekday:[0,6],month:[1,12],day:[1,31]},eI=0;function eR(){return`draft-${++eI}`}function eN(){return{id:eR(),kind:"comparison",probe:"hour",timezone:"Asia/Shanghai",operator:">=",value:""}}function ej(e,t,n){let a=e.slice(t.start,t.end);for(let e of[...n].sort((e,t)=>t.node.start-e.node.start))a=a.slice(0,e.node.start-t.start)+e.text+a.slice(e.node.end-t.start);return a}function eM(e){if(!/^(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(e.trim()))return null;let t=Number(e);return Number.isFinite(t)&&t>=0?t:null}function eD(e,t,n){if("not"===e.kind){let a=eD(e.child,t,n);return e.origin?.kind==="unary"&&e.child.origin===e.origin.operand?ej(t,e.origin,[{node:e.origin.operand,text:a}]):`!(${a})`}if("all"===e.kind||"any"===e.kind){0===e.children.length&&n.push({id:e.id,message:"Add at least one condition to this group."});let a=e.children.map(e=>eD(e,t,n)),i="all"===e.kind?"&&":"||";if(e.origin?.kind==="binary"&&e.origin.operator===i){let n=(0,eA.eg)(e.origin,i);if(n.length===e.children.length&&n.every((t,n)=>e.children[n].origin===t))return ej(t,e.origin,n.map((e,t)=>({node:e,text:a[t]})))}return`(${a.map(e=>`(${e})`).join(` ${i} `)})`}let a=eM(e.value),i=null!==a;if(eS.i1.includes(e.probe)){let[t,n]=eT[e.probe];i=i&&Number.isInteger(a)&&Number(a)>=t&&Number(a)<=n+ +("<"===e.operator)}i||n.push({id:e.id,message:"Enter a valid condition value."});let o=eS.i1.includes(e.probe);if(o){let t=e.origin?.kind==="binary"?e.origin.left:null,a=t?.kind==="call"&&"literal"===t.args[0].kind?t.args[0].value:null;if(e.timezone!==a)try{if(!e.timezone.trim())throw Error("Empty timezone");new Intl.DateTimeFormat("en",{timeZone:e.timezone.trim()}).format(0)}catch{n.push({id:e.id,message:"Choose a valid IANA timezone."})}}let s=o?`${e.probe}(${JSON.stringify(e.timezone)})`:e.probe,r=e.origin;if(r?.kind==="binary"&&r.operator===e.operator){let n=r.left,i=s;"variable"===n.kind&&n.name===e.probe&&(i=t.slice(n.start,n.end)),"call"===n.kind&&n.name===e.probe&&"literal"===n.args[0].kind&&n.args[0].value===e.timezone&&(i=t.slice(n.start,n.end));let o="literal"===r.right.kind&&a===r.right.value?t.slice(r.right.start,r.right.end):e.value;return ej(t,r,[{node:r.left,text:i},{node:r.right,text:o}])}return`(${s} ${e.operator} ${e.value})`}function eO(e){let t=[],n=function e(t,n,a){if("branch"===t.kind){let i=eD(t.condition,n,a),o=e(t.yes,n,a),s=e(t.no,n,a);return t.origin?.kind==="conditional"?ej(n,t.origin,[{node:t.origin.condition,text:i},{node:t.origin.yes,text:o},{node:t.origin.no,text:s}]):`(${i}) ? (${o}) : (${s})`}if("request"===t.billingUnit){let e=eM(t.fixedPrice);null!==e&&Number.isFinite(1e6*e)||a.push({id:`${t.id}:fixed`,message:"Enter a finite, non-negative price."});let i=t.origin;if(i?.kind==="call"&&"tier"===i.name){let a=i.args[0],o="literal"===a.kind&&a.value===t.label?n.slice(a.start,a.end):JSON.stringify(t.label),s=i.args[1],r=`fixed(${t.fixedPrice})`;if("call"===s.kind&&"fixed"===s.name&&"literal"===s.args[0].kind){let a=s.args[0],i=e===a.value?n.slice(a.start,a.end):t.fixedPrice;r=ej(n,s,[{node:a,text:i}])}return ej(n,i,[{node:a,text:o},{node:s,text:r}])}return`tier(${JSON.stringify(t.label)}, fixed(${t.fixedPrice}))`}0===t.prices.length&&a.push({id:t.id,message:"Include at least one price variable."});let i=[],o=[];for(let e of t.prices){let s=eM(e.value);if(null===s&&a.push({id:`${t.id}:${e.variable}`,message:"Enter a finite, non-negative price."}),e.origin?.kind==="binary"&&"literal"===e.origin.right.kind){let t=s===e.origin.right.value?n.slice(e.origin.right.start,e.origin.right.end):e.value;o.push({node:e.origin.right,text:t}),i.push(ej(n,e.origin,[{node:e.origin.right,text:t}]))}else i.push(`${e.variable} * ${e.value}`)}let s=t.origin;if(s?.kind==="call"&&"tier"===s.name){let e=s.args[0],a="literal"===e.kind&&e.value===t.label?n.slice(e.start,e.end):JSON.stringify(t.label),r=(0,eA.eg)(s.args[1],"+");return r.length===t.prices.length&&r.every((e,n)=>t.prices[n].origin===e)?ej(n,s,[{node:e,text:a},...o]):ej(n,s,[{node:e,text:a},{node:s.args[1],text:i.join(" + ")}])}return`tier(${JSON.stringify(t.label)}, ${i.join(" + ")})`}(e.root,e.source,t);if(t.length>0)return{ok:!1,issues:t};let a=(0,R.Z)(e.source);if("ready"!==a.status)return{ok:!1,issues:[{id:e.root.id,message:"This expression cannot be edited visually without losing information."}]};let i=e.source.slice(0,a.ast.start)+n+e.source.slice(a.ast.end);return"ready"!==(0,R.Z)(i).status?{ok:!1,issues:[{id:e.root.id,message:"Enter a valid condition value."}]}:{ok:!0,source:i}}var eL=n(65269),eq=n(52048);function eU(e){return""===e?"":"number"==typeof e?Number.isFinite(e)?String(e):"0":e}function eE(e){if(""===e.trim())return 0;let t=Number(e);return Number.isFinite(t)?t:0}function eF(e){return""!==e.trim()&&0===eE(e)}function e_(e){let{value:t,onValueChange:n,selectZeroOnFocus:i=!0,onBlur:o,onFocus:s,onMouseUp:r,...l}=e,[d,u]=(0,c.useState)(()=>eU(t)),[h,p]=(0,c.useState)(!1);return(0,c.useEffect)(()=>{h||u(eU(t))},[h,t]),(0,a.jsx)(y.p,{...l,type:"number",value:d,onChange:e=>{let t=e.target.value;u(t),n(eE(t))},onFocus:e=>{p(!0),s?.(e),i&&eF(e.currentTarget.value)&&e.currentTarget.select()},onMouseUp:e=>{r?.(e),i&&eF(e.currentTarget.value)&&(e.preventDefault(),e.currentTarget.select())},onBlur:e=>{let t=eE(e.currentTarget.value);p(!1),u(String(t)),n(t),o?.(e)}})}let eB={hour:"Hour of day",minute:"Minute",weekday:"Weekday",month:"Month number",day:"Day of month",p:"Billable input tokens",c:"Billable output tokens",len:"Full input length"};function eG(e){let{t}=(0,u.Bd)(),n=[...I.yG];e.includeTokens&&n.push("len","p","c");let i=I.yG.includes(e.probe),o=I.NT.map(e=>({value:e.value,label:e.value}));return o.some(t=>t.value===e.timezone)||o.push({value:e.timezone,label:e.timezone||"UTC"}),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(L.l6,{items:n.map(e=>({value:e,label:t(eB[e])})),value:e.probe,onValueChange:t=>t&&e.onChange(t,e.timezone||"UTC"),children:[(0,a.jsx)(L.bq,{"aria-label":t("Condition input"),className:"w-44",size:"sm",children:(0,a.jsx)(L.yv,{})}),(0,a.jsx)(L.gC,{alignItemWithTrigger:!1,children:n.map(e=>(0,a.jsx)(L.eb,{value:e,children:t(eB[e])},e))})]}),i&&(0,a.jsx)("div",{className:"w-56 max-w-full min-w-0",children:(0,a.jsx)($.G3,{"aria-label":t("Timezone"),"aria-invalid":e.invalidTimezone||void 0,options:o,value:e.timezone,allowCustomValue:!0,onValueChange:t=>null!==t&&e.onChange(e.probe,t),className:"w-full"})})]})}function eV(e){let{t,i18n:n}=(0,u.Bd)();if("weekday"===e.probe&&!e.normalizeNumberDrafts&&(""===e.value||/^[0-6]$/.test(e.value))){let i=new Intl.DateTimeFormat((0,eq.Tl)(n.resolvedLanguage||n.language),{weekday:"long",timeZone:"UTC"}),o=Array.from({length:7},(e,t)=>({value:String(t),label:i.format(new Date(Date.UTC(2026,0,4+t)))}));return(0,a.jsxs)(L.l6,{items:o,value:e.value,onValueChange:t=>null!==t&&e.onChange(t),children:[(0,a.jsx)(L.bq,{size:"sm",className:"w-32","aria-label":e.label??t("Condition value"),"aria-invalid":e.invalid||void 0,children:(0,a.jsx)(L.yv,{})}),(0,a.jsx)(L.gC,{alignItemWithTrigger:!1,children:o.map(e=>(0,a.jsx)(L.eb,{value:e.value,children:e.label},e.value))})]})}return e.normalizeNumberDrafts?(0,a.jsx)(e_,{"aria-label":e.label??t("Condition value"),value:e.value,onValueChange:t=>e.onChange(String(t)),className:"w-24"}):(0,a.jsx)(y.p,{type:"text",inputMode:"numeric","aria-label":e.label??t("Condition value"),"aria-invalid":e.invalid||void 0,value:e.value,onChange:t=>e.onChange(t.target.value),className:"w-24"})}function ez(e){let{t}=(0,u.Bd)();return(0,a.jsxs)(a.Fragment,{children:[e.startOperator,(0,a.jsx)(eV,{label:t("weekday"===e.probe?"Start weekday":"Start"),probe:e.probe,normalizeNumberDrafts:e.normalizeNumberDrafts,invalid:e.invalidStart,value:e.start,onChange:t=>e.onChange(t,e.end)}),(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:t("to")}),e.endOperator,(0,a.jsx)(eV,{label:t("weekday"===e.probe?"End weekday":"End"),probe:e.probe,normalizeNumberDrafts:e.normalizeNumberDrafts,invalid:e.invalidEnd,value:e.end,onChange:t=>e.onChange(e.start,t)})]})}var eK=n(13987),eW=n(84368),eH=n(82655);let eJ=I.s5.map(e=>({...e,key:e.key})),eQ=eJ.filter(e=>"cache"===e.group&&"img_cr"!==e.key),e$=["img","img_cr","img_o","ai","ao"],eY=eJ.filter(e=>"media"===e.group||"img_cr"===e.key).sort((e,t)=>e$.indexOf(e.key)-e$.indexOf(t.key));function eX(e){let{label:t,hint:n,value:i,onChange:o,currency:s,included:r,onInclude:l,invalid:d}=e,h=(0,c.useId)(),{t:p}=(0,u.Bd)();return(0,a.jsxs)("div",{className:"w-36 space-y-0.5",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1",children:[l&&(0,a.jsx)(eH.S,{"aria-label":p("Include {{price}}",{price:t}),checked:r,onCheckedChange:e=>l(!0===e)}),(0,a.jsx)(Y.J,{htmlFor:h,className:"text-muted-foreground text-xs",children:t})]}),(0,a.jsx)(S,{id:h,currency:s,"aria-label":t,value:i,onChange:o,disabled:!1===r,"aria-invalid":d||void 0,className:"h-8 w-full"}),n&&(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:n})]})}function eZ(e){let{t}=(0,u.Bd)(),n=eY.some(t=>e.onInclude?void 0!==e.prices[t.key]:Number(e.prices[t.key]??0)>0),[i,o]=(0,c.useState)(n);(0,c.useEffect)(()=>{n&&o(!0)},[n]);let s=n=>(0,a.jsx)(eX,{currency:e.currency,label:"cc"===n.key&&void 0!==e.prices.cc1h?t("Cache Creation (5m)"):t(n.label),value:e.prices[n.key]??0,onChange:t=>e.onChange(n.key,t),included:e.onInclude?void 0!==e.prices[n.key]:void 0,onInclude:e.onInclude?t=>e.onInclude?.(n.key,t):void 0,invalid:e.invalidVariables?.includes(n.key)},n.key),r=e.onBillingUnitChange&&(0,a.jsxs)(L.l6,{items:[{value:"token",label:t("Per token")},{value:"request",label:t("Per-call")}],value:e.billingUnit??"token",onValueChange:t=>{("token"===t||"request"===t)&&e.onBillingUnitChange?.(t)},children:[(0,a.jsx)(L.bq,{"aria-label":t("Tier billing mode"),size:"sm",className:"w-full sm:w-48",children:(0,a.jsx)(L.yv,{})}),(0,a.jsx)(L.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(L.s3,{children:[(0,a.jsx)(L.eb,{value:"token",children:t("Per token")}),(0,a.jsx)(L.eb,{value:"request",children:t("Per-call")})]})})]});return"request"===e.billingUnit?(0,a.jsxs)(a.Fragment,{children:[r,(0,a.jsx)(eX,{currency:e.currency,label:t("Price per request"),value:e.fixedPrice??"",onChange:t=>e.onFixedPriceChange?.(t),hint:`${e.currency.symbol}/${t("request")}`,invalid:e.invalidVariables?.includes("fixed")})]}):(0,a.jsxs)(a.Fragment,{children:[r,(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-3",children:[(0,a.jsx)(Y.J,{className:"text-sm font-semibold",children:t("Token prices")}),(0,a.jsxs)("span",{className:"bg-muted text-muted-foreground rounded-md px-2 py-1 text-xs",children:[e.currency.symbol,"/",t("1M token")]})]}),(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap gap-x-4 gap-y-2",children:[s({key:"p",label:"Input price"}),s({key:"c",label:"Output price"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("div",{className:"flex h-7 items-center",children:e.onCacheModeChange&&(0,a.jsx)(k.tU,{value:e.cacheMode,onValueChange:t=>null!==t&&e.onCacheModeChange?.(t),children:(0,a.jsxs)(k.j7,{className:"h-8",children:[(0,a.jsx)(k.Xi,{value:eL.RR,className:"px-2 text-xs",children:t("Generic cache")}),(0,a.jsx)(k.Xi,{value:"timed",className:"px-2 text-xs",children:t("Time-sliced cache (Claude)")})]})})}),(0,a.jsx)("div",{className:"flex flex-wrap gap-x-4 gap-y-2",children:eQ.map(t=>"cc1h"===t.key&&e.onCacheModeChange&&"timed"!==e.cacheMode?null:s(t))})]})]})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsxs)(m.$,{type:"button",variant:"ghost",size:"sm",className:"h-7 px-2 text-xs",onClick:()=>o(e=>!e),children:[(0,a.jsx)(ec.A,{className:(0,V.cn)("mr-1 h-3 w-3 transition-transform",i&&"rotate-180")}),t("Media pricing")]}),i&&(0,a.jsx)("div",{className:"flex flex-wrap gap-x-4 gap-y-2",children:eY.map(s)})]})]})}var e0=n(10823),e1=n(73020);let e2=["<","<=",">",">=","==","!="];function e5(e){if("all"!==e.kind&&"any"!==e.kind||2!==e.children.length)return null;let[t,n]=e.children;return"comparison"===t.kind&&"comparison"===n.kind&&t.probe===n.probe&&t.timezone===n.timezone&&[">",">="].includes(t.operator)&&["<","<="].includes(n.operator)?[t,n]:null}function e4(e){let{t}=(0,u.Bd)();return(0,a.jsxs)(L.l6,{items:e2.map(e=>({value:e,label:e})),value:e.value,onValueChange:t=>t&&e.onChange(t),children:[(0,a.jsx)(L.bq,{size:"sm",className:"w-20","aria-label":t("Comparison operator"),children:(0,a.jsx)(L.yv,{})}),(0,a.jsx)(L.gC,{alignItemWithTrigger:!1,children:e2.map(e=>(0,a.jsx)(L.eb,{value:e,children:e},e))})]})}function e3(e){let{t}=(0,u.Bd)(),n=e.node,i=e5(n),o=t=>{let a=t?{id:eR(),kind:"any",children:[]}:eN();e.onChange("all"===n.kind||"any"===n.kind?{...n,children:[...n.children,a]}:{id:eR(),kind:"all",children:[n,a]})};return(0,a.jsxs)("div",{className:"ml-auto flex shrink-0 items-center gap-1 self-start",children:[e.group&&"not"!==n.kind&&(0,a.jsxs)(eW.rI,{children:[(0,a.jsxs)(eW.ty,{render:(0,a.jsx)(m.$,{type:"button",variant:"ghost",size:"sm","aria-label":t("Add to group {{path}}",{path:e.path})}),children:[(0,a.jsx)(ex.A,{"aria-hidden":"true",className:"size-3.5"}),t("Add")]}),(0,a.jsxs)(eW.SQ,{align:"end",className:"w-48",children:[(0,a.jsxs)(eW._2,{onClick:()=>o(!1),children:[(0,a.jsx)(ex.A,{"aria-hidden":"true"}),t("Add condition")]}),(0,a.jsxs)(eW._2,{onClick:()=>o(!0),children:[(0,a.jsx)(e0.A,{"aria-hidden":"true"}),t("Add condition group")]})]})]}),(0,a.jsxs)(eK.CY,{ariaLabel:t("Condition actions {{path}}",{path:e.path}),children:[!e.group&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(eW._2,{onClick:()=>o(!1),children:[(0,a.jsx)(ex.A,{"aria-hidden":"true"}),t("Add condition")]}),(0,a.jsxs)(eW._2,{onClick:()=>o(!0),children:[(0,a.jsx)(e0.A,{"aria-hidden":"true"}),t("Add condition group")]}),(0,a.jsx)(eW.mB,{})]}),(0,a.jsxs)(eW._2,{onClick:()=>e.onChange("not"===n.kind?n.child:{id:eR(),kind:"not",child:n}),children:[(0,a.jsx)(e1.A,{"aria-hidden":"true"}),t("not"===n.kind?"Remove negation":"Negate condition")]}),i&&("all"===n.kind||"any"===n.kind)&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eW.mB,{}),(0,a.jsx)(eW._2,{onClick:()=>e.onChange({...n,children:[i[1]]}),children:t("Remove start condition")}),(0,a.jsx)(eW._2,{onClick:()=>e.onChange({...n,children:[i[0]]}),children:t("Remove end condition")})]}),e.onRemove&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eW.mB,{}),(0,a.jsxs)(eW._2,{variant:"destructive",onClick:e.onRemove,children:[(0,a.jsx)(ek.A,{"aria-hidden":"true"}),t("Remove condition")]})]})]})]})}function e6(e){let{t}=(0,u.Bd)(),n=e.node,i=e5(n),o="comparison"===n.kind?n:i?.[0];if(!o)return null;let s=i?i.map(e=>e.id):[o.id],r=e.issues.filter(e=>s.includes(e.id));return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-wrap items-center gap-2",children:[(0,a.jsx)(eG,{includeTokens:!0,probe:o.probe,timezone:o.timezone,invalidTimezone:r.some(e=>"Choose a valid IANA timezone."===e.message),onChange:(t,a)=>{"comparison"===n.kind?e.onChange({...n,probe:t,timezone:a}):i&&("all"===n.kind||"any"===n.kind)&&e.onChange({...n,children:i.map(e=>({...e,probe:t,timezone:a}))})}}),"comparison"===n.kind&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(e4,{value:n.operator,onChange:t=>e.onChange({...n,operator:t})}),(0,a.jsx)(eV,{probe:n.probe,value:n.value,invalid:r.some(e=>"Enter a valid condition value."===e.message),onChange:t=>e.onChange({...n,value:t})})]}),i&&("all"===n.kind||"any"===n.kind)&&(0,a.jsx)(ez,{probe:o.probe,start:i[0].value,end:i[1].value,invalidStart:r.some(e=>e.id===i[0].id&&"Enter a valid condition value."===e.message),invalidEnd:r.some(e=>e.id===i[1].id&&"Enter a valid condition value."===e.message),startOperator:(0,a.jsx)(e4,{value:i[0].operator,onChange:t=>e.onChange({...n,children:[{...i[0],operator:t},i[1]]})}),endOperator:(0,a.jsx)(e4,{value:i[1].operator,onChange:t=>e.onChange({...n,children:[i[0],{...i[1],operator:t}]})}),onChange:(t,a)=>e.onChange({...n,children:[{...i[0],value:t},{...i[1],value:a}]})})]}),[...new Map(r.map(e=>[e.message,e])).values()].map(e=>(0,a.jsx)("p",{role:"alert",className:"text-destructive w-full text-xs",children:t(e.message)},`${e.id}:${e.message}`))]})}function e8(e){let{t}=(0,u.Bd)(),n=e.node,i=e5(n);return"comparison"===n.kind||e.implicitRange?(0,a.jsxs)("div",{role:"group","aria-label":t("Condition {{path}}",{path:e.path}),className:"billing-condition-row flex flex-wrap items-center gap-2",children:[(0,a.jsx)(e6,{...e}),(0,a.jsx)(e3,{...e,group:!1})]}):(0,a.jsxs)("section",{role:"group","aria-label":t("Condition group {{path}}",{path:e.path}),"data-condition-kind":n.kind,className:"billing-condition-group min-w-0",children:[(0,a.jsxs)("div",{className:"billing-condition-header flex flex-wrap items-center gap-2 px-3 py-2",children:["not"===n.kind?(0,a.jsx)(Q.E,{className:"billing-condition-label",variant:"outline",children:t("Negated group")}):(0,a.jsxs)(L.l6,{items:[{value:"all",label:t("All conditions")},{value:"any",label:t("Any condition")}],value:n.kind,onValueChange:t=>t&&e.onChange({...n,kind:t}),children:[(0,a.jsx)(L.bq,{"aria-label":t("Condition group"),size:"sm",className:"bg-background w-36",children:(0,a.jsx)(L.yv,{})}),(0,a.jsxs)(L.gC,{alignItemWithTrigger:!1,children:[(0,a.jsx)(L.eb,{value:"all",children:t("All conditions")}),(0,a.jsx)(L.eb,{value:"any",children:t("Any condition")})]})]}),(0,a.jsx)("span",{className:"billing-condition-label text-xs font-medium",children:t("Group {{path}}",{path:e.path})}),(0,a.jsx)(e3,{...e,group:!0})]}),i?(0,a.jsx)("div",{className:"billing-condition-range",children:(0,a.jsx)("div",{className:"billing-condition-row flex flex-wrap items-center gap-2",children:(0,a.jsx)(e6,{...e})})}):(0,a.jsx)("ol",{className:"billing-condition-children",children:"not"===n.kind?(0,a.jsx)("li",{children:(0,a.jsx)(e8,{...e,node:n.child,path:`${e.path}.1`,implicitRange:!1,onRemove:void 0,onChange:t=>e.onChange({...n,child:t})})}):(function(e){let t=[];for(let n=0;n(0,a.jsx)("li",{children:(0,a.jsx)(e8,{...e,node:t.node,path:`${e.path}.${i+1}`,implicitRange:2===t.count,onChange:a=>{let i=2===t.count&&"all"===a.kind?a.children:[a];e.onChange({...n,children:[...n.children.slice(0,t.index),...i,...n.children.slice(t.index+t.count)]})},onRemove:()=>e.onChange({...n,children:n.children.filter((e,n)=>n=t.index+t.count)})})},t.node.id))}),e.issues.filter(e=>e.id===n.id).map(e=>(0,a.jsx)("p",{role:"alert",className:"text-destructive px-3 pb-2 text-xs",children:t(e.message)},`${e.id}:${e.message}`))]})}function e9(e){let{t}=(0,u.Bd)(),n=e.node,i=e.issues.filter(e=>e.id===n.id||e.id.startsWith(`${n.id}:`));return(0,a.jsxs)("div",{className:"min-w-0 space-y-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)(Q.E,{variant:"secondary",children:t("Tier")}),(0,a.jsx)(y.p,{"aria-label":t("Tier name"),value:n.label,onChange:t=>e.onChange({...n,label:t.target.value}),className:"w-40 max-w-full"})]}),(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"sm",onClick:()=>e.onChange({id:eR(),kind:"branch",condition:eN(),yes:{...n,id:eR(),origin:void 0,prices:n.prices.map(e=>{let{variable:t,value:n}=e;return{variable:t,value:n}})},no:n}),children:t("Add pricing branch")})]}),(0,a.jsx)(eZ,{currency:e.currency,billingUnit:n.billingUnit,fixedPrice:n.fixedPrice,onBillingUnitChange:t=>e.onChange({...n,billingUnit:t,prices:"token"===t&&0===n.prices.length?[{variable:"p",value:"0"},{variable:"c",value:"0"}]:n.prices}),onFixedPriceChange:t=>e.onChange({...n,fixedPrice:t}),prices:Object.fromEntries(n.prices.map(e=>[e.variable,e.value])),invalidVariables:i.map(e=>e.id.slice(n.id.length+1)),onChange:(t,a)=>e.onChange({...n,prices:n.prices.map(e=>e.variable===t?{...e,value:a}:e)}),onInclude:(t,a)=>e.onChange({...n,prices:a?[...n.prices,{variable:t,value:"0"}]:n.prices.filter(e=>e.variable!==t)})}),i.map(e=>(0,a.jsx)("p",{role:"alert",className:"text-destructive text-xs",children:t(e.message)},`${e.id}:${e.message}`))]})}function e7(e){var t,n;let i,o,{t:s,i18n:r}=(0,u.Bd)(),l=e.node,[d,h]=(0,c.useState)(e.first),p="tier"===l.kind?l:l.yes,m="tier"===p.kind?p.label:s("Pricing rule {{number}}",{number:e.number}),g="branch"===l.kind?(t=l.condition,n=e.source,o=eD(t,n,i=[]),0===i.length?o:null):null,f=g&&(0,ei.m)(g,s,r.language)||s("Tier conditions");"tier"===l.kind?f=e.fallback?s("No preceding rule matched"):s("Always matches (default tier)."):e.first||(f=s("If no preceding rule matched: {{condition}}",{condition:f}));let y=new Set,b="tier"===l.kind?[l]:[l.condition,l.yes];for(let e=0;ey.has(e.id.split(":")[0]));return(0,c.useEffect)(()=>{v&&h(!0)},[v]),(0,a.jsxs)(en.Nt,{open:d||v,onOpenChange:h,render:(0,a.jsx)("section",{role:"group","aria-label":s("Pricing tier {{name}}",{name:m})}),className:"bg-background min-w-0 overflow-hidden rounded-xl border data-open:border-blue-300 dark:data-open:border-blue-800",children:[(0,a.jsxs)("div",{className:"flex items-start gap-1 p-3",children:[(0,a.jsxs)(en.R6,{"aria-label":s("Edit pricing rule {{name}}",{name:m}),className:"flex min-w-0 flex-1 items-start gap-3 rounded-md text-left focus-visible:outline-2 focus-visible:outline-offset-2",children:[(0,a.jsx)(Q.E,{variant:"secondary",className:"mt-0.5 shrink-0 tabular-nums",children:e.number}),(0,a.jsxs)("span",{className:"min-w-0 flex-1 space-y-2",children:[(0,a.jsxs)("span",{className:"flex flex-wrap items-center gap-2 font-medium",children:[(0,a.jsx)("span",{className:"break-all",children:m}),e.fallback&&(0,a.jsx)(Q.E,{variant:"outline",children:s("Fallback tier")})]}),(0,a.jsx)("span",{className:"text-muted-foreground block text-sm break-words",children:f}),"tier"===p.kind&&(0,a.jsx)("span",{className:"flex flex-wrap gap-x-4 gap-y-1 text-xs tabular-nums",children:"request"===p.billingUnit?(0,a.jsxs)("span",{children:[s("Price per request"),":"," ",(0,w.yG)(p.fixedPrice,e.currency)||"—","/",s("request")]}):(0,a.jsxs)(a.Fragment,{children:[p.prices.map(t=>(0,a.jsxs)("span",{children:[s(I.fo.find(e=>e.key===t.variable)?.shortLabel??t.variable),":"," ",(0,w.yG)(t.value,e.currency)||"—"]},t.variable)),(0,a.jsxs)("span",{className:"text-muted-foreground",children:["/",s("1M token")]})]})})]}),(0,a.jsx)(ec.A,{"aria-hidden":"true",className:`mt-1 size-4 shrink-0 transition-transform ${d||v?"rotate-180":""}`})]}),"branch"===l.kind&&(0,a.jsx)(eK.CY,{ariaLabel:s("Branch actions {{path}}",{path:e.number}),children:(0,a.jsx)(eW._2,{variant:"destructive",onClick:()=>e.onChange(l.no),children:s("Remove branch")})})]}),(0,a.jsx)(en.Ke,{keepMounted:!0,className:"border-t p-3",children:(0,a.jsxs)("div",{className:"space-y-4",children:["branch"===l.kind&&(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:s("Tier conditions")}),(0,a.jsx)(e8,{node:l.condition,path:e.number,issues:e.issues,onChange:t=>e.onChange({...l,condition:t})})]}),"tier"===p.kind?(0,a.jsx)(e9,{...e,node:p,onChange:t=>e.onChange("tier"===l.kind?t:{...l,yes:t})}):(0,a.jsxs)("div",{className:"space-y-3 border-l-2 pl-3",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:s("When conditions match")}),(0,a.jsx)(te,{...e,node:p,prefix:`${e.number}.`,onChange:t=>"branch"===l.kind&&e.onChange({...l,yes:t})})]})]})})]})}function te(e){let{t}=(0,u.Bd)(),n=[],i=e.node;for(;"branch"===i.kind;)n.push(i),i=i.no;return n.push(i),(0,a.jsx)("ol",{"aria-label":t("Pricing rules"),className:"min-w-0 space-y-3",children:n.map((t,i)=>(0,a.jsx)("li",{className:"min-w-0",children:(0,a.jsx)(e7,{...e,node:t,number:`${e.prefix}${i+1}`,first:0===i,fallback:i>0&&"tier"===t.kind,onChange:t=>{let a=t;for(let e=i-1;e>=0;e--){let t=n[e];"branch"===t.kind&&(a={...t,no:a})}e.onChange(a)}})},t.id))})}function tt(e){let{t}=(0,u.Bd)();return(0,a.jsxs)("div",{className:"space-y-3",children:["branch"===e.document.root.kind&&(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:t("Rules are checked in order. The first match determines the price.")}),(0,a.jsx)(te,{node:e.document.root,prefix:"",source:e.document.source,currency:e.currency,issues:e.issues,onChange:t=>e.onChange({...e.document,root:t})})]})}let tn=[{group:"Fixed price",presets:[{key:"flat",label:"Flat",expr:'tier("base", p * 2 + c * 4)'},{key:"claude-opus",label:"Claude Opus 4.6",expr:'tier("base", p * 5 + c * 25 + cr * 0.5 + cc * 6.25 + cc1h * 10)'},{key:"gpt-5.4",label:"GPT-5.4",expr:'len <= 272000 ? tier("standard", p * 2.5 + c * 15 + cr * 0.25) : tier("long_context", p * 5 + c * 22.5 + cr * 0.5)'}]},{group:"Tiered",presets:[{key:"claude-sonnet",label:"Claude Sonnet 4.5",expr:'len <= 200000 ? tier("standard", p * 3 + c * 15 + cr * 0.3 + cc * 3.75 + cc1h * 6) : tier("long_context", p * 6 + c * 22.5 + cr * 0.6 + cc * 7.5 + cc1h * 12)'},{key:"qwen3-max",label:"Qwen3 Max",expr:'len <= 32000 ? tier("short", p * 1.2 + c * 6 + cr * 0.24 + cc * 1.5) : len <= 128000 ? tier("mid", p * 2.4 + c * 12 + cr * 0.48 + cc * 3) : tier("long", p * 3 + c * 15 + cr * 0.6 + cc * 3.75)'},{key:"glm-4.5-air",label:"GLM-4.5 Air",expr:'len < 32000 && c < 200 ? tier("short_output", p * 0.8 + c * 2 + cr * 0.16) : len < 32000 && c >= 200 ? tier("long_output", p * 0.8 + c * 6 + cr * 0.16) : tier("mid_context", p * 1.2 + c * 8 + cr * 0.24)'},{key:"doubao-seed-1.8",label:"Doubao Seed 1.8",expr:'len <= 32000 && c <= 200 ? tier("discount", p * 0.8 + c * 2 + cr * 0.16 + cc * 0.17) : len <= 32000 ? tier("short", p * 0.8 + c * 8 + cr * 0.16 + cc * 0.17) : len <= 128000 ? tier("mid", p * 1.2 + c * 16 + cr * 0.16 + cc * 0.17) : tier("long", p * 2.4 + c * 24 + cr * 0.16 + cc * 0.17)'}]},{group:"Multimodal",presets:[{key:"gpt-image-1-mini",label:"GPT Image 1 Mini",expr:'tier("base", p * 2 + c * 8 + img * 2.5)'},{key:"gemini-2.5-flash",label:"Gemini 2.5 Flash",expr:'tier("base", p * 0.3 + c * 2.5 + cr * 0.03 + ai * 1.0)'},{key:"gemini-3-pro-image",label:"Gemini 3 Pro Image",expr:'tier("base", p * 2 + c * 12 + img_o * 120)'},{key:"qwen3-omni-flash",label:"Qwen3 Omni Flash",expr:'tier("base", p * 0.43 + c * 3.06 + img * 0.78 + ai * 3.81 + ao * 15.11)'}]},{group:"Request rule",presets:[{key:"claude-opus-fast",label:"Claude Opus 4.6 Fast",expr:'tier("base", p * 5 + c * 25 + cr * 0.5 + cc * 6.25 + cc1h * 10)',requestRules:[{conditions:[{source:"header",path:"anthropic-beta",mode:I.I2,value:"fast-mode-2026-02-01"}],multiplier:"6"}]},{key:"gpt-5.4-tiers",label:"GPT-5.4 Priority/Flex",expr:'len <= 272000 ? tier("standard", p * 2.5 + c * 15 + cr * 0.25) : tier("long_context", p * 5 + c * 22.5 + cr * 0.5)',requestRules:[{conditions:[{source:"param",path:"service_tier",mode:"eq",value:"priority"}],multiplier:"2"},{conditions:[{source:"param",path:"service_tier",mode:"eq",value:"flex"}],multiplier:"0.5"}]}]},{group:"Time-based",presets:[{key:"night-discount",label:"Night discount (50%)",expr:'tier("base", p * 3 + c * 15)',requestRules:[{conditions:[{source:"time",timeFunc:"hour",timezone:"Asia/Shanghai",mode:"range",value:"",rangeStart:"21",rangeEnd:"6"}],multiplier:"0.5"}]},{key:"weekend-discount",label:"Weekend discount (80%)",expr:'tier("base", p * 3 + c * 15)',requestRules:[{conditions:[{source:"time",timeFunc:"weekday",timezone:"Asia/Shanghai",mode:"eq",value:"0",rangeStart:"",rangeEnd:""}],multiplier:"0.8"},{conditions:[{source:"time",timeFunc:"weekday",timezone:"Asia/Shanghai",mode:"eq",value:"6",rangeStart:"",rangeEnd:""}],multiplier:"0.8"}]}]}];function ta(e){let{exprString:t,onChange:n}=e,{t:i}=(0,u.Bd)();return(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsx)(p.Fc,{children:(0,a.jsxs)(p.TN,{className:"space-y-1 text-xs",children:[(0,a.jsxs)("div",{children:[i("Variables"),": ",(0,a.jsx)("code",{children:"len"}),", ",(0,a.jsx)("code",{children:"p"}),", ",(0,a.jsx)("code",{children:"c"}),","," ",(0,a.jsx)("code",{children:"cr"}),", ",(0,a.jsx)("code",{children:"cc"}),", ",(0,a.jsx)("code",{children:"cc1h"}),","," ",(0,a.jsx)("code",{children:"img"}),", ",(0,a.jsx)("code",{children:"img_cr"}),", ",(0,a.jsx)("code",{children:"img_o"}),","," ",(0,a.jsx)("code",{children:"ai"}),", ",(0,a.jsx)("code",{children:"ao"})]}),(0,a.jsxs)("div",{children:[i("Functions"),": ",(0,a.jsx)("code",{children:"tier(name, value)"}),","," ",(0,a.jsx)("code",{children:"fixed(amount)"}),", ",(0,a.jsx)("code",{children:"max"}),", ",(0,a.jsx)("code",{children:"min"}),","," ",(0,a.jsx)("code",{children:"ceil"}),", ",(0,a.jsx)("code",{children:"floor"}),", ",(0,a.jsx)("code",{children:"abs"}),","," ",(0,a.jsx)("code",{children:"header(name)"}),", ",(0,a.jsx)("code",{children:"param(path)"}),","," ",(0,a.jsx)("code",{children:"has(source, text)"})]}),(0,a.jsx)("div",{children:i("Use tier(name, fixed(amount)) for a USD price per request. Group and request multipliers still apply.")})]})}),(0,a.jsx)(X.T,{"aria-label":i("Billing expression"),value:t,onChange:e=>n(e.target.value),placeholder:'tier("base", p * 3 + c * 15)',rows:6,className:"font-mono text-xs",spellCheck:!1})]})}function ti(e){let{condition:t,onChange:n,onRemove:i}=e,{t:o}=(0,u.Bd)(),s=(0,I.ZT)(t.source),r=e=>{switch(e){case"eq":return o("Equals");case I.I2:return o("Contains");case"exists":return o("Exists");case"gt":return o("Greater than");case"gte":return o("Greater than or equal");case"lt":return o("Less than");case"lte":return o("Less than or equal");case"range":return o("Time range");default:return e}},l=o("Time");"param"===t.source?l=o("Body param"):"header"===t.source&&(l=o("Header"));let c=e=>{n({...t,mode:e})};return(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(L.l6,{items:[{value:"param",label:o("Body param")},{value:"header",label:o("Header")},{value:"time",label:o("Time")}],value:t.source,onValueChange:e=>null!==e&&void("time"===e?n((0,I.qC)()):("header"===e||"param"===e)&&n({...(0,I.f_)(),source:e})),children:[(0,a.jsx)(L.bq,{className:"w-28",size:"sm",children:(0,a.jsx)(L.yv,{children:l})}),(0,a.jsx)(L.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(L.s3,{children:[(0,a.jsx)(L.eb,{value:"param",children:o("Body param")}),(0,a.jsx)(L.eb,{value:"header",children:o("Header")}),(0,a.jsx)(L.eb,{value:"time",children:o("Time")})]})})]}),"time"===t.source?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eG,{probe:t.timeFunc,timezone:t.timezone,onChange:(e,a)=>n({...t,timeFunc:e,timezone:a})}),(0,a.jsxs)(L.l6,{items:s.map(e=>({value:e.value,label:r(e.value)})),value:t.mode,onValueChange:e=>null!==e&&c(e),children:[(0,a.jsx)(L.bq,{className:"w-32",size:"sm",children:(0,a.jsx)(L.yv,{children:r(t.mode)})}),(0,a.jsx)(L.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(L.s3,{children:s.map(e=>(0,a.jsx)(L.eb,{value:e.value,children:r(e.value)},e.value))})})]}),"range"===t.mode?(0,a.jsx)(ez,{normalizeNumberDrafts:!0,start:t.rangeStart,end:t.rangeEnd,onChange:(e,a)=>n({...t,rangeStart:e,rangeEnd:a})}):(0,a.jsx)(e_,{value:t.value,onValueChange:e=>n({...t,value:String(e)}),placeholder:o("Value"),className:"w-24"})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(y.p,{value:t.path,onChange:e=>n({...t,path:e.target.value}),placeholder:"header"===t.source?"X-Header-Name":"service_tier",className:"w-44"}),(0,a.jsxs)(L.l6,{items:s.map(e=>({value:e.value,label:r(e.value)})),value:t.mode,onValueChange:e=>null!==e&&c(e),children:[(0,a.jsx)(L.bq,{className:"w-32",size:"sm",children:(0,a.jsx)(L.yv,{children:r(t.mode)})}),(0,a.jsx)(L.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(L.s3,{children:s.map(e=>(0,a.jsx)(L.eb,{value:e.value,children:r(e.value)},e.value))})})]}),"exists"!==t.mode&&(0,a.jsx)(y.p,{value:t.value,onChange:e=>n({...t,value:e.target.value}),placeholder:o("Value"),className:"w-44"})]}),(0,a.jsx)(m.$,{variant:"ghost",size:"icon",onClick:i,"aria-label":o("Remove condition"),className:"ml-auto",children:(0,a.jsx)(ek.A,{className:"text-destructive h-4 w-4"})}),"time"===t.source&&"range"===t.mode&&(0,a.jsx)("p",{className:"text-muted-foreground w-full text-xs",children:o("Start ≤ end: within the day; start > end: across midnight")})]})}function to(e){let{group:t,index:n,onChange:i,onRemove:o}=e,{t:s}=(0,u.Bd)(),r=e=>{i({...t,conditions:[...t.conditions,e?(0,I.qC)():(0,I.f_)()]})};return(0,a.jsxs)("div",{className:"bg-muted/30 space-y-3 rounded-md border p-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)(Q.E,{variant:"outline",children:[s("Rule group")," #",n+1]}),(0,a.jsx)(m.$,{variant:"ghost",size:"icon",onClick:o,"aria-label":s("Remove rule group"),children:(0,a.jsx)(ek.A,{className:"text-destructive h-4 w-4"})})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[t.conditions.map((e,n)=>(0,a.jsx)(ti,{condition:e,onChange:e=>{let a;(a=[...t.conditions])[n]=e,i({...t,conditions:a})},onRemove:()=>i({...t,conditions:t.conditions.filter((e,t)=>t!==n)})},n)),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsxs)(m.$,{variant:"ghost",size:"sm",onClick:()=>r(!1),children:[(0,a.jsx)(ex.A,{className:"mr-1 h-3 w-3"}),s("Add param/header")]}),(0,a.jsxs)(m.$,{variant:"ghost",size:"sm",onClick:()=>r(!0),children:[(0,a.jsx)(ex.A,{className:"mr-1 h-3 w-3"}),s("Add time condition")]})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(Y.J,{className:"text-xs",children:s("Multiplier")}),(0,a.jsx)(e_,{min:0,step:1e-6,value:t.multiplier,onValueChange:e=>i({...t,multiplier:String(e)}),className:"w-32",placeholder:"1.0"}),(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:s("Final cost = base × multiplier when conditions match")})]})]})}function ts(e){let{applyPreset:t}=e,{t:n}=(0,u.Bd)(),[i,o]=(0,c.useState)(!1),s=i?tn:tn.slice(0,2),r=tn.length>2;return(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-sm font-medium",children:n("Preset templates")}),r&&(0,a.jsx)(m.$,{variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:()=>o(e=>!e),children:i?n("Collapse"):n("More templates...")})]}),(0,a.jsx)("div",{className:"space-y-1",children:s.map(e=>(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)(Q.E,{variant:"secondary",className:"min-w-[60px] justify-center",children:n(e.group)}),e.presets.map(e=>(0,a.jsx)(m.$,{variant:"outline",size:"sm",className:"h-7 text-xs",onClick:()=>t(e),children:e.label},e.key))]},e.group))})]})}function tr(e){let{effectiveExpr:t,fullExpr:n,currency:i}=e,{t:o}=(0,u.Bd)(),s=(0,c.useId)(),r=(0,c.useId)(),l=(0,c.useId)(),[d,h]=(0,c.useState)(""),m=(0,ea.K)(t),[f,b]=(0,c.useState)(0),[v,k]=(0,c.useState)(0),[x,C]=(0,c.useState)({cacheReadTokens:0,cacheCreateTokens:0,cacheCreate1hTokens:0,imageTokens:0,imageCacheTokens:0,imageOutputTokens:0,audioInputTokens:0,audioOutputTokens:0}),A=(0,c.useMemo)(()=>(0,eL.IU)(t),[t]),S=(0,c.useMemo)(()=>{let e=(0,eL.T1)(f,v,x);return d.trim()&&(e.len=Number(d)),e},[f,v,x,d]),P=(0,c.useMemo)(()=>(0,eL.C6)(t,f,v,x,{tokens:S,now:void 0===m?void 0:new Date(m)}),[t,f,v,x,S,m]);return"task usage"===P.error?(0,a.jsx)(p.Fc,{children:(0,a.jsx)(p.TN,{children:o("Task usage data is required to estimate this expression. Check the model's task plugin configuration.")})}):(0,a.jsxs)("div",{className:"bg-muted/30 space-y-3 rounded-md border p-3",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:o("Token estimator")}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:o("Enter token counts to preview the estimated cost (excluding group multipliers).")})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(Y.J,{htmlFor:s,className:"text-xs",children:o("Input tokens")}),(0,a.jsx)(e_,{id:s,min:0,value:f,onValueChange:b})]}),(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(Y.J,{htmlFor:r,className:"text-xs",children:o("Output tokens")}),(0,a.jsx)(e_,{id:r,min:0,value:v,onValueChange:k})]})]}),(0,a.jsxs)(g.D0,{children:[(0,a.jsx)(g.dh,{htmlFor:l,children:o("Full input length override")}),(0,a.jsx)(y.p,{id:l,type:"number",min:0,value:d,onChange:e=>h(e.target.value),placeholder:o("Use the existing token total")})]}),A&&(0,a.jsx)("div",{className:"grid grid-cols-2 gap-3",children:I.s5.map(e=>{if(!e.field)return null;let t=e.field.replace("Price","Tokens");return(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)(Y.J,{className:"text-xs",children:o(e.shortLabel)}),(0,a.jsx)(e_,{min:0,value:x[t],onValueChange:e=>C(n=>({...n,[t]:e}))})]},e.key)})}),(0,a.jsx)("div",{className:(0,V.cn)("rounded-md border p-3 text-sm",P.error?"border-destructive/50 bg-destructive/10 text-destructive":"border-primary/50 bg-primary/10"),children:P.error?(0,a.jsxs)("span",{children:[o("Expression error"),": ",P.error]}):(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsxs)("span",{className:"font-medium",children:[o("Estimated cost"),":"," ",(0,w.yG)(P.cost/1e6,i),"request"===P.billingUnit&&`/${o("request")}`]}),P.matchedTier&&(0,a.jsxs)(Q.E,{variant:"outline",className:"text-xs",children:[o("Hit tier"),": ",P.matchedTier]})]})}),(0,a.jsx)(er,{expression:n,tokens:S,currency:i,mode:"token"})]})}let tl=`You are an AI API billing expression design assistant. The user needs help designing a billing expression for an AI API gateway. ## Expression Language Expressions are based on standard arithmetic with ternary operators. ### Token Variables Input side: - p — input token count (for pricing). Automatically excludes sub-categories priced separately (e.g., if cr is used, cache tokens are deducted from p) - len — total input context length (for condition checks). Not affected by auto-exclusion; always reflects the full input length. Use in tier conditions - cr — cache-hit (read) token count - cc — cache-create token count (5-min TTL) - cc1h — cache-create token count (1-hour TTL, Claude-specific) - img — image input token count - ai — audio input token count Output side: - c — output token count. Also auto-excludes sub-categories priced separately - img_o — image output token count - img_cr — image cache input tokens; deducted from img and cr only when the upstream reports a valid image cache breakdown - ao — audio output token count ### p/c Auto-exclusion p and c are fallback variables representing all tokens not separately priced in the expression. If the expression uses a sub-category variable (e.g., cr), those tokens are deducted from p to avoid double-billing. Unused sub-category tokens remain in p/c at base price. Important: len is NOT affected by auto-exclusion. Tier conditions should use len instead of p to prevent cache hits from lowering p and misidentifying the tier. ### Built-in Functions - tier(name, value) — labels the billing tier; must wrap the cost expression - fixed(amount) — a finite non-negative USD price per request, used only as tier("name", fixed(0.01)); replaces token charges in that leaf. Other leaves may still use token prices. Group/request multipliers and existing tool surcharges still apply. Unsupported for task usage expressions and Realtime. - max(a, b), min(a, b) — maximum/minimum - ceil(x), floor(x), abs(x) — ceiling, floor, absolute value - header(name) — reads a request header - param(path) — reads a request body JSON path (gjson syntax) - has(source, substr) — substring check - hour(tz), minute(tz), weekday(tz), month(tz), day(tz) — time functions, tz is a timezone like "Asia/Shanghai" ### Price Coefficients Numbers in the expression are $/1M tokens prices. For example, p * 2.5 means input $2.50/1M tokens. ## Expression Examples Simple pricing: tier("base", p * 2.5 + c * 15) With cache: tier("base", p * 2.5 + c * 15 + cr * 0.25) Multi-tier (use len for conditions): len <= 200000 ? tier("standard", p * 3 + c * 15 + cr * 0.3 + cc * 3.75 + cc1h * 6) : tier("long_context", p * 6 + c * 22.5 + cr * 0.6 + cc * 7.5 + cc1h * 12) Image model: tier("base", p * 2 + c * 8 + img * 2.5) Multimodal with audio: tier("base", p * 0.43 + c * 3.06 + img * 0.78 + ai * 3.81 + ao * 15.11) Three-tier example: len <= 128000 ? tier("standard", p * 1.1 + c * 4.4) : (len <= 1000000 ? tier("medium", p * 2.2 + c * 8.8) : tier("long", p * 4.4 + c * 17.6)) ## Rules 1. Every leaf branch must be wrapped in tier("name", cost_expr) 2. Use English tier names, e.g. "base", "standard", "long_context" 3. Use len for tier conditions (not p), supports <, <=, >, >= 4. Multi-tier uses nested ternary: cond1 ? tier(...) : (cond2 ? tier(...) : tier(...)) 5. Price coefficients are the provider's official $/1M tokens prices 6. If cache/image/audio don't need separate pricing, omit those variables; their tokens are included in p/c automatically Please generate a billing expression based on the model information and pricing requirements provided.`;function tc(e){let{modelName:t}=e,{t:n}=(0,u.Bd)(),[i,o]=(0,c.useState)(!1),s=(0,c.useMemo)(()=>t?`${tl} Current model: ${t}`:tl,[t]),r=(0,c.useCallback)(async()=>{try{await navigator.clipboard.writeText(s),eC.oR.success(n("Copied to clipboard"))}catch{eC.oR.error(n("Failed to copy"))}},[s,n]);return(0,a.jsxs)(en.Nt,{open:i,onOpenChange:o,children:[(0,a.jsxs)(en.R6,{render:(0,a.jsx)(m.$,{variant:"ghost",size:"sm",className:"h-7 px-2 text-xs"}),children:[(0,a.jsx)(ew.A,{className:"mr-1.5 h-3 w-3"}),n("LLM prompt helper")]}),(0,a.jsx)(en.Ke,{className:"mt-2",children:(0,a.jsxs)("div",{className:"bg-muted/30 rounded-md border p-3",children:[(0,a.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:n("Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.")}),(0,a.jsxs)(m.$,{variant:"outline",size:"sm",className:"ml-3 shrink-0",onClick:r,children:[(0,a.jsx)(ew.A,{className:"mr-1.5 h-3 w-3"}),n("Copy prompt")]})]}),(0,a.jsx)(X.T,{value:s,readOnly:!0,rows:8,className:"font-mono text-xs",spellCheck:!1})]})})]})}function td(e){return function(e){let t=(0,R.Z)(e);if("ready"!==t.status)return null;let n=function e(t){let n={id:`pricing-${t.start}-${t.end}`,origin:t};if("conditional"===t.kind){let a=function e(t){let n,a={id:`condition-${t.start}-${t.end}`,origin:t};if("unary"===t.kind&&"!"===t.operator){let n=e(t.operand);return n?{...a,kind:"not",child:n}:null}if("binary"===t.kind&&["&&","||"].includes(t.operator)){let n=(0,eA.eg)(t,t.operator).map(e);return n.some(e=>null===e)?null:{...a,kind:"&&"===t.operator?"all":"any",children:n}}if("binary"!==t.kind||!eP.has(t.operator)||"literal"!==t.right.kind||"number"!=typeof t.right.value)return null;let i="";if("variable"===t.left.kind&&["p","c","len"].includes(t.left.name))n=t.left.name;else{if(!("call"===t.left.kind&&eS.i1.includes(t.left.name))||"literal"!==t.left.args[0].kind||"string"!=typeof t.left.args[0].value)return null;n=t.left.name,i=t.left.args[0].value}return{...a,kind:"comparison",probe:n,timezone:i,operator:t.operator,value:String(t.right.value)}}(t.condition),i=e(t.yes),o=e(t.no);return a&&i&&o?{...n,kind:"branch",condition:a,yes:i,no:o}:null}if("call"!==t.kind||"tier"!==t.name||"literal"!==t.args[0].kind||"string"!=typeof t.args[0].value)return null;let a=[],i=t.args[1];if("call"===i.kind&&"fixed"===i.name&&"literal"===i.args[0].kind)return{...n,kind:"tier",label:t.args[0].value,prices:a,billingUnit:"request",fixedPrice:String(i.args[0].value)};for(let e of(0,eA.eg)(t.args[1],"+")){if("binary"!==e.kind||"*"!==e.operator||"variable"!==e.left.kind||"len"===e.left.name||"image_count"===e.left.name||"literal"!==e.right.kind||"number"!=typeof e.right.value||e.right.value<0)return null;let t=e.left.name;if(a.some(e=>e.variable===t))return null;a.push({variable:e.left.name,value:String(e.right.value),origin:e})}return{...n,kind:"tier",label:t.args[0].value,prices:a,billingUnit:"token",fixedPrice:""}}(t.ast);if(!n)return null;let a={source:e,root:n};return eO(a).ok?a:null}(e||(0,eL.xp)((0,eL.MP)()))}let tu=(0,c.memo)(function(e){let{currency:t=w.GW,modelName:n,billingExpr:i,requestRuleExpr:o,onBillingExprChange:s,onRequestRuleExprChange:r}=e,{t:l}=(0,u.Bd)(),[d,h]=(0,c.useState)(()=>td(i)),[f,y]=(0,c.useState)(()=>d?"visual":"raw"),[b,v]=(0,c.useState)(i),[k,x]=(0,c.useState)(o),[C,A]=(0,c.useState)(()=>(0,I.yl)(i,o)),[S,P]=(0,c.useState)(()=>(0,I.TS)(o)||[]),T=(0,c.useRef)(n);(0,c.useEffect)(()=>{if(T.current===n)return;T.current=n;let e=td(i);h(e),y(e?"visual":"raw"),v(i),x(o),A((0,I.yl)(i,o)),P((0,I.TS)(o)||[])},[n,i,o]);let R=(0,c.useMemo)(()=>d?eO(d):null,[d]),N="visual"===f&&R?.ok===!1,j=!k||null!==(0,I.TS)(k),M=(0,c.useCallback)(e=>{h(e);let t=eO(e);t.ok&&(v(t.source),s(t.source))},[s]),D=(0,c.useCallback)(e=>{A(e);let t=(0,I.U8)(e);v(t.billingExpr),x(t.requestRuleExpr),s(t.billingExpr),r(t.requestRuleExpr)},[s,r]),O=(0,c.useCallback)(e=>{if(e!==f&&!N){if("visual"===e){let e=td(b);if(!e)return void eC.oR.error(l("This expression cannot be edited visually without losing information."));h(e),P((0,I.TS)(k)||[])}else A((0,I.yl)(b,k));y(e)}},[f,N,b,k,l]),q=(0,c.useCallback)(e=>{let t=e.requestRules||[],n=(0,I.Fy)(t),a=td(e.expr);A((0,I.yl)(e.expr,n)),v(e.expr),x(n),h(a),y(a?"visual":"raw"),P(t),s(e.expr),r(n)},[s,r]),U=(0,c.useCallback)(e=>{P(e);let t=(0,I.Fy)(e);x(t),r(t)},[r]);return(0,a.jsxs)("div",{className:"space-y-5","data-billing-invalid":N||void 0,children:[(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-[minmax(0,1fr)_auto] sm:items-end",children:[(0,a.jsxs)(g.D0,{className:"gap-2",children:[(0,a.jsx)(g.dh,{children:l("Editor mode")}),(0,a.jsxs)(L.l6,{items:[{value:"visual",label:l("Visual editor")},{value:"raw",label:l("Expression editor")}],value:f,onValueChange:e=>O(e),children:[(0,a.jsx)(L.bq,{"aria-label":l("Editor mode"),className:"w-full sm:w-56",size:"sm",children:(0,a.jsx)(L.yv,{})}),(0,a.jsx)(L.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(L.s3,{children:[(0,a.jsx)(L.eb,{value:"visual",children:l("Visual editor")}),(0,a.jsx)(L.eb,{value:"raw",disabled:N,children:l("Expression editor")})]})})]})]}),"raw"===f&&(0,a.jsx)("div",{className:"sm:pb-0.5",children:(0,a.jsx)(tc,{modelName:n})})]}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:l("Raw expressions and presets use USD. Currency selection only converts visual price inputs and monetary previews.")}),(0,a.jsx)(ts,{applyPreset:q}),(0,a.jsxs)("div",{className:"bg-muted/30 space-y-3 rounded-md border p-3",children:["visual"===f&&d&&(0,a.jsx)(tt,{document:d,currency:t,issues:R&&!R.ok?R.issues:[],onChange:M}),"raw"===f&&(0,a.jsx)(ta,{exprString:C,onChange:D}),N&&(0,a.jsx)("p",{role:"alert",className:"text-destructive text-sm",children:l("Complete the invalid fields before saving or switching modes. The last valid expression is preserved.")}),"visual"===f&&(0,a.jsxs)("div",{className:"space-y-3 border-t pt-3",children:[(0,a.jsxs)("div",{className:"space-y-1",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:l("Request rule pricing")}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:l("When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.")})]}),k&&!j?(0,a.jsx)(p.Fc,{children:(0,a.jsx)(p.TN,{className:"text-xs",children:l("This expression is too complex for the visual editor. Please switch to expression mode to edit.")})}):(0,a.jsxs)(a.Fragment,{children:[S.map((e,t)=>(0,a.jsx)(to,{group:e,index:t,onChange:e=>{let n=[...S];n[t]=e,U(n)},onRemove:()=>U(S.filter((e,n)=>n!==t))},t)),(0,a.jsxs)(m.$,{variant:"outline",size:"sm",className:"h-9 w-36 justify-center",onClick:()=>U([...S,(0,I.LU)()]),children:[(0,a.jsx)(ex.A,{className:"mr-2 h-4 w-4"}),l("Add rule group")]})]})]})]}),(0,a.jsx)(tr,{effectiveExpr:b,fullExpr:"raw"===f?C:(0,I.yl)(b,k),currency:t})]})}),th='tier("base", p * 0 + c * 0)',tp=(0,c.forwardRef)(function(e,t){let{open:n,onOpenChange:i,editData:o,onSave:s,isSaving:r,usageSchema:l,pluginVariants:c,onDirtyChange:d}=e,{t:p}=(0,u.Bd)(),m=p(o?"Edit model pricing":"Add model pricing"),g=o?.name||p("New model");return(0,a.jsx)(v.cj,{open:n,onOpenChange:i,children:(0,a.jsxs)(v.h,{side:"right",className:(0,h.jW)("sm:max-w-2xl"),children:[(0,a.jsxs)(v.Fm,{className:"sr-only",children:[(0,a.jsx)(v.qp,{children:m}),(0,a.jsx)(v.Qs,{children:g})]}),(0,a.jsx)(tm,{ref:t,editData:o,usageSchema:l,pluginVariants:c,onDirtyChange:d,onSave:s,isSaving:r,className:"h-full rounded-none border-0"})]})})}),tm=(0,c.forwardRef)(function(e,t){let{editData:n,className:h,onSave:v,isSaving:P,usageSchema:T,pluginVariants:R,onDirtyChange:N,embedded:D=!1,scrollHeader:O}=e,{t:L}=(0,u.Bd)(),K=(0,c.useId)(),J=(0,c.useRef)(null),Q=(0,z.Eh)(e=>e.config.currency),$=(0,q.v)(e=>e.currency),Y=(0,c.useMemo)(()=>(0,w.ZC)(Q),[Q]),X="site"===$&&(0,w.OP)(Y)?Y:w.GW,[Z,ee]=(0,c.useState)("tiered_expr"),[et,en]=(0,c.useState)(""),[ea,ei]=(0,c.useState)({...j.a8}),[eo,es]=(0,c.useState)({...j.D0}),[er,el]=(0,c.useState)(th),[ec,ed]=(0,c.useState)(""),[eu,eh]=(0,c.useState)(!1),ep=(0,c.useRef)(0),[em,eg]=(0,c.useState)(null),ef=(0,o.n)({mutationFn:x.aH,meta:{errorToast:!1}}),[ey,ek]=(0,c.useState)(""),[ex,ew]=(0,c.useState)({}),[eC,eA]=(0,c.useState)(0),eS=(0,c.useRef)(null),eP=!!n,eT=n&&[n.price,n.ratio,n.completionRatio,n.cacheRatio,n.createCacheRatio,n.imageRatio,n.audioRatio,n.audioCompletionRatio].some(j.a4),eI="tiered_expr";n?.billingMode!=="tiered_expr"&&eT&&(eI=(0,j.a4)(n?.price)?"per-request":"per-token");let eR=n?.billingExpr||("tiered_expr"===eI?th:""),{models:eN}=(0,E.y)(),ej=(0,d.mN)({resolver:(0,i.u)((0,j.nq)(L)),defaultValues:{name:"",price:"",ratio:"",cacheRatio:"",createCacheRatio:"",completionRatio:"",imageRatio:"",audioRatio:"",audioCompletionRatio:""}}),eM=ej.watch(),eD="";if("per-token"===Z&&eM.name.trim())try{eD=JSON.stringify({model_name:eM.name.trim(),pricing:(0,C.uu)({...eM,billingMode:"per-token"})})}catch{}let eO=(0,B.d)(eD,250),eL=(0,s.I)({queryKey:["model-pricing-preview",eO],queryFn:()=>(0,x.AI)(JSON.parse(eO)),enabled:!!eO&&eO===eD,retry:!1,refetchOnWindowFocus:!1,meta:{errorToast:!1}}),eq=eD===eO?eL.data:void 0,eU=(0,c.useMemo)(()=>new Map(eN.map(e=>[e.model_name,e.billing_usage_schema])),[eN]),eE=(0,c.useMemo)(()=>new Map(eN.map(e=>[e.model_name,e.billing_usage_examples])),[eN]),eF=T??R?.find(e=>!e.stale)?.usage_schema??eU.get(eM.name.trim()),e_=eE.get(eM.name.trim())??R?.find(e=>!e.stale)?.usage_examples,eB=(0,c.useMemo)(()=>eF?(0,_.gq)((0,_.fp)(eF),eF):"",[eF]),eG=eF&&(!er||er===th)?eB:er;(0,c.useEffect)(()=>{ep.current+=1,ed(""),ew(n?.pluginBillingExpr??{}),eh(!1),eg(null);let e=(0,j.kw)(n);n?(ej.reset({name:n.name,price:n.price||"",ratio:n.ratio||"",cacheRatio:n.cacheRatio||"",createCacheRatio:n.createCacheRatio||"",completionRatio:n.completionRatio||"",imageRatio:n.imageRatio||"",audioRatio:n.audioRatio||"",audioCompletionRatio:n.audioCompletionRatio||""}),ee(eI),el(eR),ek(n.requestRuleExpr||"")):(ej.reset({name:"",price:"",ratio:"",cacheRatio:"",createCacheRatio:"",completionRatio:"",imageRatio:"",audioRatio:"",audioCompletionRatio:""}),ee("tiered_expr"),el(th),ek("")),en(e.promptPrice),ei(e.prices),es(e.enabled),eA(e=>e+1),eS.current=null},[n,ej,eI,eR]),(0,c.useEffect)(()=>{!n||"tiered_expr"===n.billingMode||n.price||n.ratio||eF&&0!==Object.keys(eF).length&&eS.current!==n.name&&(ee("tiered_expr"),eS.current=n.name)},[n,eF]),(0,c.useEffect)(()=>{N?.(ej.formState.isDirty||Z!==eI||er!==eR||ey!==(n?.requestRuleExpr??"")||!(0,F.zK)(ex,n?.pluginBillingExpr))},[N,ej.formState.isDirty,Z,er,ey,n,eI,eR,ex]);let eV=(e,t)=>{ej.setValue(e,t,{shouldDirty:!0,shouldValidate:!0})},ez=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:et,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:ea,i=(0,j.J)(t);if(null===i)return"";if("audioOutput"===e){let e=(0,j.J)(a.audioInput);return null===e||0===e?"":(0,A.j)(i/e)}let o=(0,j.J)(n);return null===o||0===o?"":(0,A.j)(i/o)},eK=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:et,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ea,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:eo,a=(0,j.J)(e);eV("ratio",null!==a?(0,A.j)(a/2):""),j.Q2.forEach(a=>{let{key:i}=a,o=j.hH[i];n[i]?eV(o,ez(i,t[i],e,t)):eV(o,"")})},eW=e=>{ep.current+=1,ed(""),ee(e),"tiered_expr"!==e||er||el(eB||th)},eH=(0,c.useMemo)(()=>{let e={promptPrice:et,prices:ea,enabled:eo};return"per-token"===Z&&eq&&(e=(0,j.kw)((0,C.rK)(eM.name,eq.effective))),(0,j.yi)(eM,Z,eG,ey,e.promptPrice,e.prices,e.enabled,L,X,eq?.cacheWriteMode,eq?.billingDetails)},[eG,eo,ea,Z,et,ey,L,eM,X,eq]),eJ=(0,c.useMemo)(()=>{let e=[];return n?.price&&[n.ratio,n.completionRatio,n.cacheRatio,n.createCacheRatio,n.imageRatio,n.audioRatio,n.audioCompletionRatio].some(j.a4)&&e.push(L("This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.")),"per-token"===Z&&null===(0,j.J)(et)&&j.Q2.some(e=>{let{key:t}=e;return eo[t]&&(0,j.a4)(ea[t])})&&e.push(L("Input price is required before saving dependent prices.")),"per-token"===Z&&eo.audioOutput&&!(0,j.a4)(ea.audioInput)&&e.push(L("Audio output price requires an audio input price.")),e},[n,eo,ea,Z,et,L]),eQ=(0,c.useCallback)(()=>"per-token"===Z&&(0===(0,j.J)(et)&&j.Q2.some(e=>{let{key:t}=e;return eo[t]&&((0,j.J)(ea[t])??0)>0})||0===(0,j.J)(ea.audioInput)&&eo.audioOutput&&((0,j.J)(ea.audioOutput)??0)>0)?(ej.setError("ratio",{message:L("Use expression pricing when a dependent price is non-zero and its base price is zero.")}),!1):"per-token"===Z&&null===(0,j.J)(et)&&j.Q2.some(e=>{let{key:t}=e;return eo[t]&&(0,j.a4)(ea[t])})?(ej.setError("ratio",{message:L("Input price is required before saving dependent prices.")}),!1):"per-token"!==Z||!eo.audioOutput||!!(0,j.a4)(ea.audioInput)||(ej.setError("audioRatio",{message:L("Audio output price requires an audio input price.")}),!1),[ej,eo,ea,Z,et,L]),e$=(0,c.useCallback)(e=>{let t={name:e.name.trim(),...n?.pluginBillingExpr||R?.length||Object.keys(ex).length?{pluginBillingExpr:ex}:{},billingMode:Z,price:e.price||"",ratio:e.ratio||"",cacheRatio:e.cacheRatio||"",createCacheRatio:e.createCacheRatio||"",completionRatio:e.completionRatio||"",imageRatio:e.imageRatio||"",audioRatio:e.audioRatio||"",audioCompletionRatio:e.audioCompletionRatio||""};return"tiered_expr"===Z&&(t.billingExpr=eG,t.requestRuleExpr=ey),t},[Z,ey,eG,ex,n,R]),eY=async()=>{if(ef.isPending||em||er.trim()||"tiered_expr"===Z||!await ej.trigger()||!eQ())return;let e=e$(ej.getValues()),t=++ep.current;ed("");try{let n=(0,C.uu)(e),a=await ef.mutateAsync({model_name:e.name,pricing:n});if(t!==ep.current)return;let i=e$(ej.getValues());if(i.name!==e.name||JSON.stringify((0,C.uu)(i))!==JSON.stringify(n))return void ed("Prices changed while preparing the conversion. Try again.");if(a.unsupported_reason)return void ed(a.unsupported_reason);if(!a.expression||!a.effective)throw Error(L("Failed to prepare pricing conversion"));eg({modelName:e.name,effective:a.effective,expression:a.expression,draftFingerprint:JSON.stringify(e),cacheWriteMode:a.cache_write_mode,billingDetails:a.billing_details})}catch(e){(0,G.Q)(e,L("Failed to prepare pricing conversion"))}};(0,c.useImperativeHandle)(t,()=>({commitDraft:async()=>{if(J.current?.querySelector('[data-billing-invalid="true"]'))return null;let e=J.current?.querySelectorAll("input[data-pricing-amount]");return e&&[...e].some(e=>!e.reportValidity())||!await ej.trigger()||!eQ()?null:e$(ej.getValues())}}),[ej,eQ,e$]);let eX=eF?(0,a.jsx)(eb,{currency:X,billingExpr:eG,requestRuleExpr:ey,usageSchema:eF,usageExamples:e_,onBillingExprChange:el,onRequestRuleExprChange:ek},`${eC}:${eM.name}`):(0,a.jsx)(tu,{currency:X,modelName:eM.name,billingExpr:er,requestRuleExpr:ey,onBillingExprChange:el,onRequestRuleExprChange:ek},eC),eZ=!!v;return(0,a.jsxs)("div",{className:(0,V.cn)("bg-background flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden rounded-xl border",h),children:[!D&&(0,a.jsx)("div",{className:"border-b p-4",children:(0,a.jsx)("div",{className:"flex flex-wrap items-start justify-between gap-3",children:(0,a.jsx)("div",{className:"min-w-0",children:(0,a.jsx)("h3",{className:"truncate text-base font-medium",children:eP?L("Edit model pricing"):L("Add model pricing")})})})}),(0,a.jsx)(f.lV,{...ej,children:(0,a.jsxs)("form",{ref:J,onSubmit:e=>e.preventDefault(),className:"flex min-h-0 flex-1 flex-col",autoComplete:"off",children:[(0,a.jsxs)("div",{role:"region","aria-label":eP?L("Edit model pricing"):L("Add model pricing"),className:"@container/pricing-editor min-h-0 flex-1 overflow-y-auto overscroll-contain p-4 pb-6",children:[O&&(0,a.jsx)("div",{className:"mb-4 space-y-3",children:O}),(0,a.jsxs)("div",{className:"grid min-w-0 items-start gap-4 @min-[960px]/pricing-editor:grid-cols-[minmax(0,1fr)_260px]",children:[(0,a.jsxs)(g.M_,{className:"min-w-0",children:[eJ.length>0&&(0,a.jsxs)(p.Fc,{variant:"destructive",children:[(0,a.jsx)(r.A,{"data-icon":"inline-start"}),(0,a.jsx)(p.TN,{children:(0,a.jsx)("div",{className:"flex flex-col gap-1",children:eJ.map(e=>(0,a.jsx)("span",{children:e},e))})})]}),!D&&(0,a.jsx)(f.zB,{control:ej.control,name:"name",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.eI,{children:[(0,a.jsx)(f.lR,{children:L("Model name")}),(0,a.jsx)(f.MJ,{children:(0,a.jsx)(y.p,{placeholder:L("gpt-4"),...t,disabled:eP})}),(0,a.jsx)(f.Rr,{children:L("The exact model identifier as used in API requests.")}),(0,a.jsx)(f.C5,{})]})}}),(0,a.jsx)(U,{siteCurrency:Y}),(0,a.jsx)(ev,{variants:R??[],expressions:ex,onChange:ew,modelExpression:(0,I.yl)(eG,ey),modelBillingMode:"tiered_expr"===Z?"tiered_expr":"ratio",currency:X,children:(0,a.jsxs)(k.tU,{value:Z,onValueChange:eW,className:"gap-4",children:[(0,a.jsxs)(k.j7,{className:"grid w-full grid-cols-3",children:[(0,a.jsx)(k.Xi,{value:"tiered_expr",children:L("Expression")}),(0,a.jsx)(k.Xi,{value:"per-token",children:L("Per-token (deprecated)")}),(0,a.jsx)(k.Xi,{value:"per-request",children:L("Per-request (deprecated)")})]}),"tiered_expr"!==Z&&(0,a.jsxs)(p.Fc,{className:"border-amber-500/40 bg-amber-500/10 p-4 text-amber-900 dark:text-amber-100",children:[(0,a.jsx)(r.A,{"aria-hidden":"true",className:"size-5"}),(0,a.jsxs)(p.TN,{className:"space-y-3 text-sm text-inherit",children:[(0,a.jsx)("p",{className:"font-medium",children:L("Legacy pricing is deprecated. Convert the current prices to an expression draft, then save to apply it.")}),(0,a.jsx)(m.$,{type:"button",className:"w-full sm:w-auto",disabled:ef.isPending||!!er.trim(),onClick:()=>void eY(),children:ef.isPending?L("Preparing conversion..."):L("Convert to expression")}),er.trim()&&(0,a.jsx)("p",{children:L("An expression draft already exists. Open the Expression tab to keep editing it.")}),ec&&(0,a.jsx)("p",{role:"status",children:L(ec)})]})]}),("tiered_expr"!==Z||eu)&&(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:L("After conversion, expression reservation and rounding rules apply. Effective unit prices are preserved; individual rounded charges may differ.")}),(0,a.jsxs)(k.av,{value:"per-token",className:"@container/pricing-fields min-w-0 pt-0",children:[eF&&Object.keys(eF).length>0&&(0,a.jsx)(p.Fc,{className:"mb-4",children:(0,a.jsxs)(p.TN,{className:"flex flex-col gap-3 text-xs",children:[(0,a.jsx)("p",{children:L("This is a task model billed by usage (e.g. seconds, resolution). Prices entered here act as a per-call base rate, not per-token prices.")}),(0,a.jsx)("p",{children:L("Tip: after configuring one model, select others in the table and use bulk copy.")}),(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"sm",className:"w-fit",onClick:()=>eW("tiered_expr"),children:L("Configure task pricing")})]})}),(0,a.jsxs)("p",{className:"text-muted-foreground mb-3 text-xs",children:[D&&(0,a.jsxs)(a.Fragment,{children:[L("{{currency}} price per 1M tokens.",{currency:X.label})," "]}),L("Unset legacy prices use the billing engine defaults.")]}),(0,a.jsxs)("div",{className:(0,V.cn)("grid min-w-0 gap-3",D&&"@min-[560px]/pricing-fields:grid-cols-2"),children:[(0,a.jsxs)(g.D0,{className:(0,V.cn)("min-w-0",D&&"rounded-lg border p-3"),children:[(0,a.jsx)(g.dh,{htmlFor:K,children:L("Input price")}),(0,a.jsx)(g.ry,{id:`${K}-description`,className:D?"text-xs":void 0,children:L("{{currency}} price per 1M input tokens.",{currency:X.label})}),(0,a.jsx)(W,{currency:X,id:K,"aria-describedby":`${K}-description`,value:et,placeholder:"3",onChange:e=>{en(e),eK(e,ea,eo)}})]}),j.Q2.map(e=>{let t="audioOutput"===e.key&&(!eo.audioInput||!(0,j.a4)(ea.audioInput));return(0,a.jsx)(H,{currency:X,compact:D,title:L(e.titleKey),description:L(e.descriptionKey),placeholder:e.placeholder,value:ea[e.key],enabled:eo[e.key],disabled:t,disabledReason:t?L("Audio output price requires an audio input price."):void 0,onEnabledChange:t=>{var n;let a,i;return n=e.key,a={...eo,[n]:t},i=ea,void(!t&&(i={...i,[n]:""},eV(j.hH[n],""),"audioInput"===n&&(a.audioOutput=!1,i.audioOutput="",eV("audioCompletionRatio",""))),es(a),ei(i),t&&eV(j.hH[n],ez(n,i[n],et,i)))},onChange:t=>{var n;let a;return n=e.key,void(ei(a={...ea,[n]:t}),eo[n]&&eV(j.hH[n],ez(n,t,et,a)),"audioInput"===n&&eo.audioOutput&&eV("audioCompletionRatio",ez("audioOutput",a.audioOutput,et,a)))}},e.key)})]})]}),(0,a.jsx)(k.av,{value:"per-request",className:"pt-0",children:(0,a.jsx)(g.M_,{className:"gap-5",children:(0,a.jsx)(f.zB,{control:ej.control,name:"price",render:e=>{let{field:t}=e;return(0,a.jsx)(f.eI,{className:"contents",children:(0,a.jsxs)(g.D0,{children:[(0,a.jsx)(f.lR,{children:L("Fixed price")}),(0,a.jsxs)(b.MG,{className:"has-[[data-pricing-error]]:h-auto has-[[data-pricing-error]]:flex-wrap",children:[(0,a.jsx)(b.Sq,{children:X.symbol}),(0,a.jsx)(f.MJ,{children:(0,a.jsx)(S,{...t,value:t.value??"",currency:X,grouped:!0,placeholder:"0.01",onChange:t.onChange})}),(0,a.jsx)(b.Sq,{align:"inline-end",children:L("per request")})]}),(0,a.jsx)(f.Rr,{children:L("Cost in {{currency}} per request, regardless of tokens used.",{currency:X.label})}),(0,a.jsx)(f.C5,{})]})})}})})}),(0,a.jsx)(k.av,{value:"tiered_expr",className:"pt-0",children:(0,a.jsx)(g.M_,{className:"gap-5",children:eX})})]},eC)},`${eC}:${eM.name}`)]}),(0,a.jsxs)("aside",{"aria-label":L("Preview"),className:"bg-muted/20 min-w-0 rounded-lg border @min-[960px]/pricing-editor:sticky @min-[960px]/pricing-editor:top-0",children:[(0,a.jsx)("div",{className:"border-b px-3 py-2",children:(0,a.jsx)("div",{className:"text-sm font-medium",children:L("Preview")})}),(0,a.jsxs)("div",{className:"divide-y",children:["per-token"===Z&&!eq&&(0,a.jsx)("p",{className:"text-muted-foreground px-3 py-2 text-xs",role:"status",children:eL.isError?L("Failed to load model pricing"):L("Loading...")}),("per-token"!==Z||eq)&&eH.map(e=>(0,a.jsxs)("div",{className:"grid gap-1 px-3 py-2.5",children:[(0,a.jsx)("span",{className:"text-muted-foreground text-xs",children:e.label}),(0,a.jsx)("span",{className:(0,V.cn)("min-w-0 text-sm",e.multiline?"font-mono text-xs leading-5 break-words whitespace-pre-wrap":"truncate"),children:e.value})]},e.key))]})]})]})]}),eZ&&(0,a.jsx)("div",{className:"bg-background/95 supports-[backdrop-filter]:bg-background/80 shrink-0 border-t p-3 backdrop-blur",children:(0,a.jsx)("div",{className:"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",children:v&&(0,a.jsxs)(m.$,{type:"button",onClick:v,disabled:P,className:"w-full sm:w-auto",children:[(0,a.jsx)(l.A,{"data-icon":"inline-start"}),P?L("Saving..."):L("Save model prices")]})})})]})}),em&&(0,a.jsx)(M,{preview:em,currency:X,onCancel:()=>{ep.current+=1,eg(null),ed("")},onConfirm:()=>{if(em){if(eg(null),er.trim()||"tiered_expr"===Z||JSON.stringify(e$(ej.getValues()))!==em.draftFingerprint)return void ed("Prices changed while preparing the conversion. Try again.");el(em.expression),eh(!0),ee("tiered_expr"),eA(e=>e+1)}}})]})})},97175(e,t,n){"use strict";var a=n(30077),i=n(38785),o=n(24518),s=n(30991);let r=e=>void 0!==e&&""!==e,l=e=>{if(!r(e))return null;let t=Number(e);return Number.isFinite(t)?t:null},c=(e,t)=>{let n=l(e),a=t?l(t):2;return null===n||null===a?"":(0,s.j)(n*a)};n.d(t,{},{$M:e=>e?JSON.stringify({price:e.price||"",ratio:e.ratio||"",cacheRatio:e.cacheRatio||"",createCacheRatio:e.createCacheRatio||"",completionRatio:e.completionRatio||"",imageRatio:e.imageRatio||"",audioRatio:e.audioRatio||"",audioCompletionRatio:e.audioCompletionRatio||"",billingMode:e.billingMode||"per-token",billingExpr:e.billingExpr||"",requestRuleExpr:e.requestRuleExpr||"",pluginBillingExpr:Object.entries(e.pluginBillingExpr??{}).sort((e,t)=>{let[n]=e,[a]=t;return n.localeCompare(a)})}):"",Ph:e=>"per-request"===e?"warning":"tiered_expr"===e?"info":"success",XD:e=>{let{modelPrice:t,modelRatio:n,cacheRatio:s,createCacheRatio:r,completionRatio:l,imageRatio:c,audioRatio:d,audioCompletionRatio:u,billingMode:h,billingExpr:p,pluginBillingExpr:m="{}"}=e,g=(0,o.jD)(t,{fallback:{},context:"model prices"}),f=(0,o.jD)(n,{fallback:{},context:"model ratios"}),y=(0,o.jD)(s,{fallback:{},context:"cache ratios"}),b=(0,o.jD)(r,{fallback:{},context:"create cache ratios"}),v=(0,o.jD)(l,{fallback:{},context:"completion ratios"}),k=(0,o.jD)(c,{fallback:{},context:"image ratios"}),x=(0,o.jD)(d,{fallback:{},context:"audio ratios"}),w=(0,o.jD)(u,{fallback:{},context:"audio completion ratios"}),C=(0,o.jD)(h,{fallback:{},context:"billing mode"}),A=(0,o.jD)(p,{fallback:{},context:"billing expression"}),S=(0,o.jD)(m,{fallback:{},context:"plugin billing expressions"}),P=new Map;for(let[e,t]of Object.entries(S)){let n=(0,i.tp)(e);if(!n)continue;let[a,o]=n;P.set(o,{...P.get(o),[a]:t})}return[...new Set([...P.keys(),...Object.keys(g),...Object.keys(f),...Object.keys(y),...Object.keys(b),...Object.keys(v),...Object.keys(k),...Object.keys(x),...Object.keys(w),...Object.keys(C),...Object.keys(A)])].map(e=>{let t=g[e]?.toString()||"",n=f[e]?.toString()||"",i=y[e]?.toString()||"",o=b[e]?.toString()||"",s=v[e]?.toString()||"",r=k[e]?.toString()||"",l=x[e]?.toString()||"",c=w[e]?.toString()||"";if("tiered_expr"===C[e]){let d=A[e]||"",{billingExpr:u,requestRuleExpr:h}=(0,a.U8)(d);return{name:e,pluginBillingExpr:P.get(e),billingMode:"tiered_expr",billingExpr:u,requestRuleExpr:h,price:t,ratio:n,cacheRatio:i,createCacheRatio:o,completionRatio:s,imageRatio:r,audioRatio:l,audioCompletionRatio:c,hasConflict:!1}}return{name:e,pluginBillingExpr:P.get(e),price:t,ratio:n,cacheRatio:i,createCacheRatio:o,completionRatio:s,imageRatio:r,audioRatio:l,audioCompletionRatio:c,billingMode:""!==t?"per-request":"per-token",hasConflict:""!==t&&(""!==n||""!==s||""!==i||""!==o||""!==r||""!==l||""!==c)}})},ax:e=>"per-request"===e?"Per-request (deprecated)":"tiered_expr"===e?"Expression":"Per-token (deprecated)",uE:(e,t)=>{if("tiered_expr"===e.billingMode){let n;return(n=(e.billingExpr?.match(/tier\(/g)||[]).length)>0?`${t("Tiered pricing")} \xb7 ${n} ${t("tiers")}`:t("Expression pricing")}if("per-request"===e.billingMode)return e.price?`$${e.price} / ${t("request")}`:t("Unset price");let n=c(e.ratio);return n?`${t("Input")} $${n}`:t("Unset price")},v9:(e,t)=>{if("tiered_expr"===e.billingMode)return t(e.requestRuleExpr?"Includes request rules":"Expression based");if("per-request"===e.billingMode)return t("Fixed request price");let n=c(e.ratio);if(!n)return t("No base input price");let a=[e.completionRatio&&`${t("Output")} $${c(e.completionRatio,n)}`,e.cacheRatio&&`${t("Cache")} $${c(e.cacheRatio,n)}`,e.createCacheRatio&&`${t("Cache write")} $${c(e.createCacheRatio,n)}`].filter(Boolean).slice(0,2);return a.length>0?a.join(" · "):t("Base input price only")},xp:e=>!e||"tiered_expr"!==e.billingMode&&!r(e.price)&&!r(e.ratio)})},30991(e,t,n){"use strict";function a(e){let t=function(e){if(""===e||null==e||!1===e)return null;let t=Number(e);return Number.isFinite(t)?t:null}(e);return null===t?"":Number.parseFloat((function(e){let t=Math.max(1e-12,Math.abs(e)*Number.EPSILON*8);for(let n=0;n<=8;n+=1){let a=function(e,t){let n=10**t;return Math.round(e*n)/n}(e,n);if(Math.abs(e-a)<=t)return a}return e})(t).toFixed(12)).toString()}n.d(t,{j:()=>a})},22923(e,t,n){"use strict";n.d(t,{Fi:()=>X,ev:()=>Y,Fs:()=>ee,L5:()=>et,dj:()=>Z});var a=n(72361),i=n(48367),o=n(55724),s=n(85949),r=n(72969),l=n(68413),c=n(86832),d=n(6702),u=n(20598),h=n(49256),p=n(43284),m=n(72868),g=n(36710),f=n(1738),y=n(87212),b=n(39987),v=n(43152),k=n(31002),x=n(44724),w=n(47182);let C=h.Ik({enabled:h.zM(),apiKey:h.Yj().optional()});function A(e){let{defaultValues:t}=e,{t:n}=(0,d.Bd)(),h=(0,w.M)(),A=(0,c.mN)({resolver:(0,i.u)(C),defaultValues:{enabled:t.enabled,apiKey:t.apiKey??""}}),{isDirty:S,isSubmitting:P}=A.formState,T=A.watch("enabled"),[I,R]=(0,l.useState)({loading:!1,ok:null,error:null});async function N(e){let a=[];if(e.enabled!==t.enabled&&a.push({key:"model_deployment.ionet.enabled",value:String(e.enabled)}),(e.apiKey||"")!==(t.apiKey||"")&&a.push({key:"model_deployment.ionet.api_key",value:String(e.apiKey||"")}),0===a.length)return void u.oR.info(n("No changes to save"));for(let e of a)await h.mutateAsync(e);A.reset(e)}let j=async()=>{R({loading:!0,ok:null,error:null});try{let e=A.getValues("apiKey"),t=await (0,b.rP)(e);if(t?.success)return void R({loading:!1,ok:!0,error:null});R({loading:!1,ok:!1,error:t?.message||n("Connection failed")})}catch(e){R({loading:!1,ok:!1,error:e instanceof Error?e.message:n("Connection failed")})}};return(0,a.jsx)(x.X,{title:n("io.net Deployments"),children:(0,a.jsx)(g.lV,{...A,children:(0,a.jsxs)(v.yt,{onSubmit:A.handleSubmit(N),autoComplete:"off",children:[(0,a.jsx)(k.S2,{onSave:A.handleSubmit(N),isSaving:h.isPending||P,isSaveDisabled:!S,saveLabel:"Save io.net settings"}),(0,a.jsx)(g.zB,{control:A.control,name:"enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.H,{children:[(0,a.jsxs)(v.z$,{children:[(0,a.jsx)(g.lR,{children:n("Enable io.net deployments")}),(0,a.jsx)(g.Rr,{children:n("Enable io.net model deployment service in console")})]}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(y.d,{checked:t.value,onCheckedChange:e=>t.onChange(e),disabled:h.isPending||P})})]})}}),T?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(g.zB,{control:A.control,name:"apiKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("io.net API Key")}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(g.MJ,{children:(0,a.jsx)(f.p,{type:"password",placeholder:n("Enter API Key"),autoComplete:"off",...t})}),(0,a.jsxs)(m.$,{type:"button",variant:"secondary",onClick:j,disabled:I.loading||h.isPending,className:"shrink-0",children:[I.loading?(0,a.jsx)(o.A,{className:"me-2 size-4 animate-spin"}):null,n("Test Connection")]})]}),(0,a.jsx)(g.Rr,{children:n("Used to authenticate with io.net deployment API")}),(0,a.jsx)(g.C5,{})]})}}),(0,a.jsxs)(p.Fc,{variant:"default",children:[(0,a.jsx)(p.XL,{children:n("How to get an io.net API Key")}),(0,a.jsx)(p.TN,{children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsxs)("ul",{className:"list-disc space-y-1 pl-5",children:[(0,a.jsx)("li",{children:n("Open the io.net console API Keys page")}),(0,a.jsx)("li",{children:n("Set Project to io.cloud when creating/selecting key")}),(0,a.jsx)("li",{children:n("Copy the key and paste it here")})]}),(0,a.jsx)(m.$,{type:"button",variant:"outline",onClick:()=>window.open("https://ai.io.net/ai/api-keys","_blank"),children:n("Go to io.net API Keys")})]})})]}),!0===I.ok?(0,a.jsxs)(p.Fc,{variant:"default",className:"flex items-center gap-2",children:[(0,a.jsx)(s.A,{className:"size-4 text-green-600"}),(0,a.jsxs)("div",{children:[(0,a.jsx)(p.XL,{children:n("Connection successful")}),(0,a.jsx)(p.TN,{children:n("Connected to io.net service normally.")})]})]}):null,!1===I.ok&&I.error?(0,a.jsxs)(p.Fc,{variant:"destructive",className:"flex items-center gap-2",children:[(0,a.jsx)(r.A,{className:"size-4"}),(0,a.jsxs)("div",{children:[(0,a.jsx)(p.XL,{children:n("Connection failed")}),(0,a.jsx)(p.TN,{children:n(I.error)})]})]}):null]}):null]})})})}var S=n(38159),P=n(41128),T=n(63859),I=n(91460),R=n(31852);let N=h.Ik({claude:h.Ik({model_headers_settings:h.Yj().superRefine((e,t)=>{let n=(0,R.En)(e);n.valid||t.addIssue({code:P.eq.custom,message:n.message||"Invalid JSON"})}),default_max_tokens:h.Yj().superRefine((e,t)=>{let n=(0,R.En)(e);n.valid||t.addIssue({code:P.eq.custom,message:n.message||"Invalid JSON"})}),thinking_adapter_enabled:h.zM(),thinking_adapter_budget_tokens_percentage:T.ai().min(.1,{message:"Must be at least 0.1"}).max(1,{message:"Must be 1 or less"})})});function j(e){let{defaultValues:t}=e,{t:n}=(0,d.Bd)(),o=(0,w.M)(),s=(0,l.useRef)({"claude.model_headers_settings":(0,R.Nr)(t.claude.model_headers_settings),"claude.default_max_tokens":(0,R.Nr)(t.claude.default_max_tokens),"claude.thinking_adapter_enabled":t.claude.thinking_adapter_enabled,"claude.thinking_adapter_budget_tokens_percentage":Number(t.claude.thinking_adapter_budget_tokens_percentage)}),r=e=>({claude:{model_headers_settings:(0,R.ZY)(e.claude.model_headers_settings),default_max_tokens:(0,R.ZY)(e.claude.default_max_tokens),thinking_adapter_enabled:e.claude.thinking_adapter_enabled,thinking_adapter_budget_tokens_percentage:e.claude.thinking_adapter_budget_tokens_percentage}}),h=(0,c.mN)({resolver:(0,i.u)(N),defaultValues:r(t)});(0,l.useEffect)(()=>{s.current={"claude.model_headers_settings":(0,R.Nr)(t.claude.model_headers_settings),"claude.default_max_tokens":(0,R.Nr)(t.claude.default_max_tokens),"claude.thinking_adapter_enabled":t.claude.thinking_adapter_enabled,"claude.thinking_adapter_budget_tokens_percentage":Number(t.claude.thinking_adapter_budget_tokens_percentage)},h.reset(r(t))},[t,h]);let p=async e=>{let t={"claude.model_headers_settings":(0,R.Nr)(e.claude.model_headers_settings),"claude.default_max_tokens":(0,R.Nr)(e.claude.default_max_tokens),"claude.thinking_adapter_enabled":e.claude.thinking_adapter_enabled,"claude.thinking_adapter_budget_tokens_percentage":e.claude.thinking_adapter_budget_tokens_percentage},a=Object.keys(t).filter(e=>t[e]!==s.current[e]);if(0===a.length)return void u.oR.info(n("No changes to save"));for(let e of a)await o.mutateAsync({key:e,value:t[e]})};return(0,a.jsx)(x.X,{title:n("Claude"),children:(0,a.jsx)(g.lV,{...h,children:(0,a.jsxs)(v.yt,{onSubmit:h.handleSubmit(p),children:[(0,a.jsx)(k.S2,{onSave:h.handleSubmit(p),isSaving:o.isPending}),(0,a.jsx)(g.zB,{control:h.control,name:"claude.model_headers_settings",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("Request Header Overrides")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(I.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,"aria-invalid":!!h.formState.errors.claude?.model_headers_settings})}),(0,a.jsx)(g.Rr,{children:n("Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.")}),(0,a.jsx)(g.C5,{})]})}}),(0,a.jsx)(g.zB,{control:h.control,name:"claude.default_max_tokens",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("Default Max Tokens")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(I.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,"aria-invalid":!!h.formState.errors.claude?.default_max_tokens})}),(0,a.jsxs)(g.Rr,{children:[n("Example")," ",'{ "default": 8192, "claude-3-haiku-20240307": 4096, "claude-3-opus-20240229": 4096, "claude-3-7-sonnet-20250219-thinking": 8192 }']}),(0,a.jsx)(g.C5,{})]})}}),(0,a.jsxs)(v.WY,{children:[(0,a.jsx)(g.zB,{control:h.control,name:"claude.thinking_adapter_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.H,{children:[(0,a.jsxs)(v.z$,{children:[(0,a.jsx)(g.lR,{children:n("Thinking Suffix Adapter")}),(0,a.jsx)(g.Rr,{children:n("Adapt `-thinking`, `-nothinking`, and effort suffixes such as `-high` to Anthropic native thinking behavior while keeping billing predictable. When off, model names are sent upstream unchanged.")})]}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(y.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(g.zB,{control:h.control,name:"claude.thinking_adapter_budget_tokens_percentage",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("Budget Tokens Ratio")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(f.p,{...t,value:String(t.value??""),onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(g.Rr,{children:n("Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.")}),(0,a.jsx)(g.C5,{})]})}})]})]})})})}let M=h.Ik({gemini:h.Ik({safety_settings:h.Yj().superRefine((e,t)=>{let n=(0,R.En)(e);n.valid||t.addIssue({code:P.eq.custom,message:n.message||"Invalid JSON"})}),version_settings:h.Yj().superRefine((e,t)=>{let n=(0,R.En)(e);n.valid||t.addIssue({code:P.eq.custom,message:n.message||"Invalid JSON"})}),supported_imagine_models:h.Yj().superRefine((e,t)=>{let n=(0,R.En)(e,{predicate:e=>Array.isArray(e)&&e.every(e=>"string"==typeof e),predicateMessage:"Expected a JSON array of model identifiers"});n.valid||t.addIssue({code:P.eq.custom,message:n.message||"Invalid JSON array"})}),thinking_adapter_enabled:h.zM(),thinking_adapter_budget_tokens_percentage:T.ai().min(.002,{message:"Must be at least 0.002"}).max(1,{message:"Must be 1 or less"}),function_call_thought_signature_enabled:h.zM(),remove_function_response_id_enabled:h.zM()})});function D(e){let{defaultValues:t}=e,{t:n}=(0,d.Bd)(),o=(0,w.M)(),s=(0,l.useRef)({"gemini.safety_settings":(0,R.Nr)(t.gemini.safety_settings),"gemini.version_settings":(0,R.Nr)(t.gemini.version_settings),"gemini.supported_imagine_models":(0,R.Nr)(t.gemini.supported_imagine_models),"gemini.thinking_adapter_enabled":t.gemini.thinking_adapter_enabled,"gemini.thinking_adapter_budget_tokens_percentage":Number(t.gemini.thinking_adapter_budget_tokens_percentage),"gemini.function_call_thought_signature_enabled":t.gemini.function_call_thought_signature_enabled??!0,"gemini.remove_function_response_id_enabled":t.gemini.remove_function_response_id_enabled??!0}),r=e=>({gemini:{safety_settings:(0,R.ZY)(e.gemini.safety_settings),version_settings:(0,R.ZY)(e.gemini.version_settings),supported_imagine_models:(0,R.ZY)(e.gemini.supported_imagine_models),thinking_adapter_enabled:e.gemini.thinking_adapter_enabled,thinking_adapter_budget_tokens_percentage:e.gemini.thinking_adapter_budget_tokens_percentage,function_call_thought_signature_enabled:e.gemini.function_call_thought_signature_enabled??!0,remove_function_response_id_enabled:e.gemini.remove_function_response_id_enabled??!0}}),h=(0,c.mN)({resolver:(0,i.u)(M),defaultValues:r(t)});(0,l.useEffect)(()=>{s.current={"gemini.safety_settings":(0,R.Nr)(t.gemini.safety_settings),"gemini.version_settings":(0,R.Nr)(t.gemini.version_settings),"gemini.supported_imagine_models":(0,R.Nr)(t.gemini.supported_imagine_models),"gemini.thinking_adapter_enabled":t.gemini.thinking_adapter_enabled,"gemini.thinking_adapter_budget_tokens_percentage":Number(t.gemini.thinking_adapter_budget_tokens_percentage),"gemini.function_call_thought_signature_enabled":t.gemini.function_call_thought_signature_enabled??!0,"gemini.remove_function_response_id_enabled":t.gemini.remove_function_response_id_enabled??!0},h.reset(r(t))},[t,h]);let p=h.watch("gemini.thinking_adapter_enabled"),m=async e=>{let t={"gemini.safety_settings":(0,R.Nr)(e.gemini.safety_settings),"gemini.version_settings":(0,R.Nr)(e.gemini.version_settings),"gemini.supported_imagine_models":(0,R.Nr)(e.gemini.supported_imagine_models),"gemini.thinking_adapter_enabled":e.gemini.thinking_adapter_enabled,"gemini.thinking_adapter_budget_tokens_percentage":e.gemini.thinking_adapter_budget_tokens_percentage,"gemini.function_call_thought_signature_enabled":e.gemini.function_call_thought_signature_enabled,"gemini.remove_function_response_id_enabled":e.gemini.remove_function_response_id_enabled},a=Object.keys(t).filter(e=>t[e]!==s.current[e]);if(0===a.length)return void u.oR.info(n("No changes to save"));for(let e of a)await o.mutateAsync({key:e,value:t[e]})},b=(0,l.useMemo)(()=>JSON.stringify(["gemini-2.0-flash-exp-image-generation"],null,2),[]);return(0,a.jsx)(x.X,{title:n("Gemini"),children:(0,a.jsx)(g.lV,{...h,children:(0,a.jsxs)(v.yt,{onSubmit:h.handleSubmit(m),children:[(0,a.jsx)(k.S2,{onSave:h.handleSubmit(m),isSaving:o.isPending}),(0,a.jsx)(g.zB,{control:h.control,name:"gemini.safety_settings",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("Safety Settings")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(I.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,"aria-invalid":!!h.formState.errors.gemini?.safety_settings})}),(0,a.jsx)(g.Rr,{children:n("Provide per-category safety overrides as JSON. Use `default` for fallback values.")}),(0,a.jsx)(g.C5,{})]})}}),(0,a.jsx)(g.zB,{control:h.control,name:"gemini.version_settings",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("Version Overrides")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(I.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,"aria-invalid":!!h.formState.errors.gemini?.version_settings})}),(0,a.jsx)(g.Rr,{children:n("Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.")}),(0,a.jsx)(g.C5,{})]})}}),(0,a.jsx)(g.zB,{control:h.control,name:"gemini.supported_imagine_models",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("Supported Imagine Models")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(I.B,{value:t.value,onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,placeholder:b,heightClassName:"h-40 min-h-40 max-h-40","aria-invalid":!!h.formState.errors.gemini?.supported_imagine_models})}),(0,a.jsx)(g.Rr,{children:n("Accepts a JSON array of model identifiers that support the Imagine API.")}),(0,a.jsx)(g.C5,{})]})}}),(0,a.jsxs)(v.WY,{children:[(0,a.jsx)(g.zB,{control:h.control,name:"gemini.thinking_adapter_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.H,{children:[(0,a.jsxs)(v.z$,{children:[(0,a.jsx)(g.lR,{children:n("Thinking Suffix Adapter")}),(0,a.jsxs)(g.Rr,{children:[n("Supports `-thinking`, `-thinking-"),"{{budget}}",n("`, `-nothinking`, and effort suffixes such as `-high` while routing to the correct Gemini variant. When off, model names are sent upstream unchanged.")]})]}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(y.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(g.zB,{control:h.control,name:"gemini.thinking_adapter_budget_tokens_percentage",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("Budget Tokens Ratio")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(f.p,{...t,value:String(t.value??""),onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(g.Rr,{children:n("Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.")}),(0,a.jsx)(g.C5,{})]})}}),!p&&(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:n("Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.")})]}),(0,a.jsx)(g.zB,{control:h.control,name:"gemini.function_call_thought_signature_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.H,{children:[(0,a.jsxs)(v.z$,{children:[(0,a.jsx)(g.lR,{children:n("Enable FunctionCall thoughtSignature Fill")}),(0,a.jsx)(g.Rr,{children:n("Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format")})]}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(y.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(g.zB,{control:h.control,name:"gemini.remove_function_response_id_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.H,{children:[(0,a.jsxs)(v.z$,{children:[(0,a.jsx)(g.lR,{children:n("Remove functionResponse.id field")}),(0,a.jsx)(g.Rr,{children:n("Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.")})]}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(y.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})})}var O=n(42817),L=n(38939);let q=JSON.stringify(["moonshotai/kimi-k2-thinking","kimi-k2-thinking","re:.*@sha256:.*"],null,2),U=JSON.stringify({enabled:!0,all_channels:!1,channel_ids:[1,2],model_patterns:["^gpt-4o.*$","^gpt-5.*$"]},null,2),E=JSON.stringify({enabled:!0,all_channels:!0,model_patterns:["^gpt-4o.*$","^gpt-5.*$"]},null,2),F=h.Yj().refine(e=>{let t=e.trim();if(!t)return!0;try{return JSON.parse(t),!0}catch{return!1}},"Invalid JSON format"),_=h.Ik({global:h.Ik({pass_through_request_enabled:h.zM(),thinking_model_blacklist:F,chat_completions_to_responses_policy:F}),general_setting:h.Ik({ping_interval_enabled:h.zM(),ping_interval_seconds:T.ai().min(1)})}),B=e=>({"global.pass_through_request_enabled":e.global.pass_through_request_enabled,"global.thinking_model_blacklist":G(e.global.thinking_model_blacklist,"[]"),"global.chat_completions_to_responses_policy":G(e.global.chat_completions_to_responses_policy,"{}"),"general_setting.ping_interval_enabled":e.general_setting.ping_interval_enabled,"general_setting.ping_interval_seconds":e.general_setting.ping_interval_seconds});function G(e,t){return(e??"").toString().trim()||t}function V(e){let{defaultValues:t}=e,{t:n}=(0,d.Bd)(),o=(0,w.M)(),s=(0,c.mN)({resolver:(0,i.u)(_),defaultValues:t});(0,l.useEffect)(()=>{s.reset(t)},[t,s]);let r=s.watch("general_setting.ping_interval_enabled"),h=async e=>{let a=B(t),i=Object.entries(B(e)).filter(e=>{let[t,n]=e;return n!==a[t]});if(0===i.length)return void u.oR.info(n("No changes to save"));for(let[e,t]of i)await o.mutateAsync({key:e,value:t})};return(0,a.jsx)(x.X,{title:n("Global Model Configuration"),children:(0,a.jsx)(g.lV,{...s,children:(0,a.jsxs)(v.yt,{onSubmit:s.handleSubmit(h),children:[(0,a.jsx)(k.S2,{onSave:s.handleSubmit(h),isSaving:o.isPending}),(0,a.jsx)(g.zB,{control:s.control,name:"global.pass_through_request_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.H,{children:[(0,a.jsxs)(v.z$,{children:[(0,a.jsx)(g.lR,{children:n("Enable Request Passthrough")}),(0,a.jsx)(g.Rr,{children:n("Forward requests directly to upstream providers without any post-processing.")})]}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(y.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(g.zB,{control:s.control,name:"global.thinking_model_blacklist",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("Models that skip thinking suffix processing")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(I.B,{value:t.value,onChange:e=>t.onChange(e),name:t.name,onBlur:t.onBlur,textareaRef:t.ref,placeholder:`${n("Example:")} ${q}`,heightClassName:"h-32 min-h-32 max-h-32"})}),(0,a.jsx)(g.Rr,{children:n("Models listed here skip automatic -thinking / -nothinking suffix handling. Matched names are also exempt from @-modifier parsing and 400 validation. Prefix an entry with re: to match the full model name as a Go regular expression, for example re:.*@sha256:.*")}),(0,a.jsx)(g.C5,{})]})}}),(0,a.jsx)(L.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h3",{className:"text-base font-semibold",children:n("ChatCompletions -> Responses Compatibility")}),(0,a.jsx)(O.Wh,{label:n("Preview"),variant:"neutral",copyable:!1})]}),(0,a.jsxs)(p.Fc,{children:[(0,a.jsx)(p.XL,{children:n("Warning")}),(0,a.jsx)(p.TN,{children:n("This feature is experimental. Configuration format and behavior may change.")})]}),(0,a.jsx)(g.zB,{control:s.control,name:"global.chat_completions_to_responses_policy",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("Policy JSON")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(I.B,{value:t.value,onChange:e=>t.onChange(e),name:t.name,onBlur:t.onBlur,textareaRef:t.ref,placeholder:`${n("Example (specific channels):")} ${U} ${n("Example (all channels):")} ${E}`})}),(0,a.jsx)(g.Rr,{children:n("Empty value will be saved as {}.")}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"sm",onClick:()=>s.setValue("global.chat_completions_to_responses_policy",U,{shouldDirty:!0}),children:n("Fill example (specific channels)")}),(0,a.jsx)(m.$,{type:"button",variant:"outline",size:"sm",onClick:()=>s.setValue("global.chat_completions_to_responses_policy",E,{shouldDirty:!0}),children:n("Fill example (all channels)")})]}),(0,a.jsx)(g.C5,{})]})}})]}),(0,a.jsx)(L.w,{}),(0,a.jsx)(g.zB,{control:s.control,name:"general_setting.ping_interval_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(v.H,{children:[(0,a.jsxs)(v.z$,{children:[(0,a.jsx)(g.lR,{children:n("Keep-alive Ping")}),(0,a.jsx)(g.Rr,{children:n("Periodically send ping frames to keep streaming connections active.")})]}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(y.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(g.zB,{control:s.control,name:"general_setting.ping_interval_seconds",render:e=>{let{field:t}=e;return(0,a.jsxs)(g.eI,{children:[(0,a.jsx)(g.lR,{children:n("Ping Interval (seconds)")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(f.p,{type:"number",min:1,disabled:!r,className:"w-24",value:void 0===t.value||null===t.value?"":String(t.value),onChange:e=>t.onChange(e.target.value),onBlur:t.onBlur,name:t.name,ref:t.ref})}),(0,a.jsx)(g.Rr,{children:n("Recommended to keep this high to avoid upstream throttling.")}),(0,a.jsx)(g.C5,{})]})}})]})})})}var z=n(74750);let K=h.Ik({grok:h.Ik({violation_deduction_enabled:h.zM(),violation_deduction_amount:T.ai().min(0)})}),W=e=>({grok:{violation_deduction_enabled:e["grok.violation_deduction_enabled"],violation_deduction_amount:e["grok.violation_deduction_amount"]}});function H(e){let{t}=(0,d.Bd)(),n=(0,w.M)(),o=(0,l.useMemo)(()=>W(e.defaultValues),[e.defaultValues]),s=(0,c.mN)({resolver:(0,i.u)(K),defaultValues:o}),r=(0,l.useRef)(e.defaultValues),h=(0,l.useRef)(JSON.stringify(e.defaultValues));(0,l.useEffect)(()=>{let t=JSON.stringify(e.defaultValues);t!==h.current&&(r.current=e.defaultValues,h.current=t,s.reset(W(e.defaultValues)))},[e.defaultValues,s]);let p=async e=>{let a={"grok.violation_deduction_enabled":e.grok.violation_deduction_enabled,"grok.violation_deduction_amount":e.grok.violation_deduction_amount},i=Object.keys(a).filter(e=>a[e]!==r.current[e]);if(0===i.length)return void u.oR.info(t("No changes to save"));for(let e of i)await n.mutateAsync({key:e,value:a[e]});r.current=a,h.current=JSON.stringify(a),s.reset(W(a))},m=s.watch("grok.violation_deduction_enabled");return(0,a.jsx)(x.X,{title:t("Grok Settings"),children:(0,a.jsx)(g.lV,{...s,children:(0,a.jsxs)(v.yt,{onSubmit:s.handleSubmit(p),children:[(0,a.jsx)(k.S2,{onSave:s.handleSubmit(p),isSaving:n.isPending}),(0,a.jsx)(g.zB,{control:s.control,name:"grok.violation_deduction_enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(v.H,{children:[(0,a.jsxs)(v.z$,{children:[(0,a.jsx)(g.lR,{children:t("Enable violation deduction")}),(0,a.jsxs)(g.Rr,{children:[t("When enabled, violation requests will incur additional charges.")," ",(0,a.jsx)("a",{href:"https://docs.x.ai/docs/models#usage-guidelines-violation-fee",target:"_blank",rel:"noreferrer",className:"underline",children:t("Official documentation")})]})]}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(y.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(g.zB,{control:s.control,name:"grok.violation_deduction_amount",render:e=>{let{field:n}=e;return(0,a.jsxs)(g.eI,{className:"max-w-xs",children:[(0,a.jsx)(g.lR,{children:t("Violation deduction amount")}),(0,a.jsx)(g.MJ,{children:(0,a.jsx)(f.p,{type:"number",step:.01,min:0,...(0,z.X)(n),disabled:!m})}),(0,a.jsx)(g.Rr,{children:t("Base amount. Actual deduction = base amount × system group rate.")}),(0,a.jsx)(g.C5,{})]})}})]})})})}function J(e,t){let n=(e??"").toString().trim();if(!n)return t;try{return JSON.stringify(JSON.parse(n),null,2)}catch{return t}}let Q=[{id:"global",titleKey:"Global Model Configuration",build:e=>(0,a.jsx)(V,{defaultValues:{global:{pass_through_request_enabled:e["global.pass_through_request_enabled"],thinking_model_blacklist:J(e["global.thinking_model_blacklist"],"[]"),chat_completions_to_responses_policy:J(e["global.chat_completions_to_responses_policy"],"{}")},general_setting:{ping_interval_enabled:e["general_setting.ping_interval_enabled"],ping_interval_seconds:e["general_setting.ping_interval_seconds"]}}})},{id:"gemini",titleKey:"Gemini",build:e=>(0,a.jsx)(D,{defaultValues:{gemini:{safety_settings:e["gemini.safety_settings"],version_settings:e["gemini.version_settings"],supported_imagine_models:e["gemini.supported_imagine_models"],thinking_adapter_enabled:e["gemini.thinking_adapter_enabled"],thinking_adapter_budget_tokens_percentage:e["gemini.thinking_adapter_budget_tokens_percentage"],function_call_thought_signature_enabled:e["gemini.function_call_thought_signature_enabled"],remove_function_response_id_enabled:e["gemini.remove_function_response_id_enabled"]}}})},{id:"claude",titleKey:"Claude",build:e=>(0,a.jsx)(j,{defaultValues:{claude:{model_headers_settings:e["claude.model_headers_settings"],default_max_tokens:e["claude.default_max_tokens"],thinking_adapter_enabled:e["claude.thinking_adapter_enabled"],thinking_adapter_budget_tokens_percentage:e["claude.thinking_adapter_budget_tokens_percentage"]}}})},{id:"grok",titleKey:"Grok",build:e=>(0,a.jsx)(H,{defaultValues:{"grok.violation_deduction_enabled":e["grok.violation_deduction_enabled"]??!0,"grok.violation_deduction_amount":e["grok.violation_deduction_amount"]??.05}})},{id:"model-deployment",titleKey:"Model Deployment",build:e=>(0,a.jsx)(A,{defaultValues:{enabled:e["model_deployment.ionet.enabled"],apiKey:e["model_deployment.ionet.api_key"]}})}],$=(0,S.h)({sections:Q,defaultSection:"global",basePath:"/system-settings/models",urlStyle:"path"}),Y=$.sectionIds,X=$.defaultSection,Z=$.getSectionNavItems,ee=$.getSectionContent,et=$.getSectionMeta},86986(e,t,n){"use strict";n.d(t,{_:()=>eo});var a=n(72361),i=n(96962),o=n(53540),s=n(55667),r=n(88693),l=n(81285),c=n(68413),d=n(6702),u=n(20598),h=n(24503),p=n(72868),m=n(24985),g=n(21735),f=n(26411),y=n(46006),b=n(92778),v=n(38766),k=n(13987),x=n(60641),w=n(42817),C=n(82655),A=n(1738),S=n(88288),P=n(38088);let T="/api/pricing",I="官方倍率预设",R="models.dev 价格预设",N="openrouter",j=[{label:"pricing",value:"/api/pricing"},{label:"ratio_config",value:"/api/ratio_config"},{label:"OpenRouter",value:N},{label:"custom",value:"custom"}],M={1:{label:"Enabled",variant:"success"},2:{label:"Disabled",variant:"danger"},3:{label:"Auto Disabled",variant:"warning"}};var D=n(30077),O=n(65269),L=n(30991);function q(e,t){return e===I||e===`${I}(-100)`?t("Official pricing preset"):e===R||e===`${R}(-101)`?t("models.dev pricing preset"):e}function U(e){return e?.billing_mode==="tiered_expr"&&"string"==typeof e.billing_expr&&e.billing_expr.trim()?"expression":"number"==typeof e?.model_price?"request":"number"==typeof e?.model_ratio?"token":"unset"}function E(e,t){for(let n of new Set([...Object.keys(e),...Object.keys(t)])){let a=e[n],i=t[n];if("number"==typeof a&&"number"==typeof i){if(Math.abs(a-i)>=1e-9)return!1}else if(a!==i)return!1}return!0}function F(e,t){if("request"===U(e))return[{label:t("Per-request"),value:`$${(0,L.j)(e.model_price)}`}];if("token"!==U(e))return[];let n=2*Number(e.model_ratio),a=(0,L.j)(n),i=[{label:t("Input"),value:a?`$${a}`:"—"}];for(let[a,o]of[["completion_ratio",t("Output")],["cache_ratio",t("Cache Read")],["create_cache_ratio",t("Cache write")],["image_ratio",t("Image input")],["audio_ratio",t("Audio input")],["audio_completion_ratio",t("Audio output")]]){let t=e[a];if("number"!=typeof t)continue;let s=n*t;if("audio_completion_ratio"===a){if("number"!=typeof e.audio_ratio){i.push({label:o,value:"—"});continue}s*=e.audio_ratio}let r=(0,L.j)(s);i.push({label:o,value:r?`$${r}`:"—"})}return i}function _(e,t){let{billingExpr:n,requestRuleExpr:a}=(0,D.U8)(e),i=(0,O.jU)(n);if(!i)return null;let o=n.replace(/"(?:\\.|[^"\\])*"/g,"");for(let e of o.matchAll(/\*\s*([+\-\d.eE]+)/g))if(!Number.isFinite(Number(e[1]))||0>Number(e[1]))return null;let s=D.mq.filter(e=>e.tierField&&RegExp(`\\b${e.key}\\s*\\*`).test(o)),r={p:t("Input tokens"),c:t("Output tokens"),len:t("Length")};return{requestRuleExpr:a,tiers:i.tiers.map(e=>({label:e.label,condition:e.conditions.map(e=>`${r[e.var]} ${e.op} ${Number(e.value).toLocaleString()}`).join(" ∧ "),lines:s.map(n=>({label:t(n.shortLabel),value:`$${(0,L.j)(Number(e[n.tierField]))}`}))}))}}function B(e,t){let n=U(e);if("expression"===n){let n=_(String(e.billing_expr),t);return n?[t("Expression pricing"),`USD / ${t("1M token")}`,...n.tiers.flatMap(e=>[...n.tiers.length>1?[e.condition||e.label||t("Default")]:[],...e.lines.map(e=>`${e.label}: ${e.value}`)]),...n.requestRuleExpr?[`${t("Includes request rules")}: ${n.requestRuleExpr}`]:[]].join("\n"):`${t("Expression pricing")} ${e.billing_expr}`}return"unset"===n?t("Unset price"):["request"===n?`USD / ${t("request")}`:`USD / ${t("1M token")}`,...F(e,t).map(e=>`${e.label}: ${e.value}`)].join("\n")}let G=(0,c.createContext)(null);function V(){let e=(0,c.useContext)(G);if(!e)throw Error("Sync price selection provider is required");return e}function z(e){return -100===e.id||-101===e.id}function K(e){let{open:t,onOpenChange:n,channels:i,selectedChannelIds:o,onSelectedChannelIdsChange:s,channelEndpoints:r,onChannelEndpointsChange:l,onConfirm:u}=e,{t:h}=(0,d.Bd)(),[m,g]=(0,c.useState)(""),f=(0,P.d)(m,200),[y,b]=(0,c.useState)({});(0,c.useEffect)(()=>{if(!o.length)return void b({});let e=new Set(i.map(e=>e.id)),t={};o.forEach(n=>{e.has(n)&&(t[n.toString()]=!0)}),b(t)},[o,i]);let I=(0,c.useCallback)((e,t)=>{l({...r,[e]:t})},[r,l]),R=(0,c.useMemo)(()=>[{id:"select",size:44,minSize:44,header:e=>{let{table:t}=e;return(0,a.jsx)(C.S,{checked:t.getIsAllPageRowsSelected(),indeterminate:t.getIsSomePageRowsSelected(),onCheckedChange:e=>t.toggleAllPageRowsSelected(!!e),"aria-label":h("Select all")})},cell:e=>{let{row:t}=e;return(0,a.jsx)(C.S,{checked:t.getIsSelected(),onCheckedChange:e=>t.toggleSelected(!!e),"aria-label":h("Select {{name}}",{name:q(t.original.name,h)})})},enableSorting:!1,enableHiding:!1},{accessorKey:"name",header:h("Name"),size:300,minSize:220,cell:e=>{let{row:t}=e,n=q(t.getValue("name"),h),i=z(t.original);return(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"font-medium",children:n}),i&&(0,a.jsx)(w.Wh,{label:h("Official"),variant:"success",size:"sm",copyable:!1})]})}},{accessorKey:"base_url",header:h("Base URL"),size:340,minSize:260,cell:e=>{let{row:t}=e,n=t.getValue("base_url");return(0,a.jsx)("span",{className:"text-muted-foreground block max-w-xs truncate font-mono text-xs",title:n,children:n})}},{accessorKey:"status",header:h("Status"),size:140,minSize:120,cell:e=>{let{row:t}=e,n=M[t.getValue("status")];return n?(0,a.jsx)(w.Wh,{label:h(n.label),variant:n.variant,size:"sm",copyable:!1}):(0,a.jsx)(w.Wh,{label:h("Unknown"),variant:"neutral",size:"sm",copyable:!1})}},{id:"endpoint",header:h("Sync Endpoint"),size:460,minSize:360,cell:e=>{let{row:t}=e,n=t.original,i=r[n.id]||T,o=j.find(e=>e.value===i)?i:"custom";return(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsxs)(S.l6,{items:j.map(e=>({value:e.value,label:e.label})),value:o,onValueChange:e=>null!==e&&void("custom"===e?I(n.id,""):I(n.id,e)),children:[(0,a.jsx)(S.bq,{className:"h-8 w-32",children:(0,a.jsx)(S.yv,{})}),(0,a.jsx)(S.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(S.s3,{children:j.map(e=>(0,a.jsx)(S.eb,{value:e.value,children:e.label},e.value))})})]}),"custom"===o&&(0,a.jsx)(A.p,{value:i,onChange:e=>I(n.id,e.target.value),placeholder:h("/your/endpoint"),className:"h-8 min-w-0 flex-1 font-mono text-xs"})]})}}],[r,h,I]),N=(0,c.useMemo)(()=>{if(!f.trim())return i;let e=f.toLowerCase();return i.filter(t=>q(t.name,h).toLowerCase().includes(e)||t.base_url.toLowerCase().includes(e))},[i,f,h]),D=(0,c.useMemo)(()=>[...N].sort((e,t)=>{let n=z(e),a=z(t);return n&&!a?-1:!n&&a?1:0}),[N]),{table:O}=(0,k.uI)({data:D,columns:R,rowSelection:y,getRowId:e=>e.id.toString(),enableRowSelection:!0,onRowSelectionChange:b,initialPagination:{pageIndex:0,pageSize:10},withSortedRowModel:!1,withFacetedRowModel:!1});return(0,a.jsx)(x.l,{open:t,onOpenChange:n,title:h("Select price sources"),contentClassName:"flex max-h-[min(90dvh,var(--dialog-available-height))] max-w-[calc(100%-2rem)] flex-col sm:max-w-[90vw] xl:max-w-[1400px]",contentHeight:"min(72vh, 720px)",bodyClassName:"flex h-full min-h-0 flex-col overflow-hidden",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(p.$,{variant:"outline",onClick:()=>n(!1),children:h("Cancel")}),(0,a.jsx)(p.$,{onClick:()=>{let e=O.getSelectedRowModel().rows.map(e=>e.original.id);s(e),n(!1),u(e)},children:h("Confirm Selection")})]}),children:(0,a.jsxs)("div",{className:"flex h-full min-h-0 flex-col gap-4 overflow-hidden",children:[(0,a.jsx)("div",{className:"flex shrink-0 items-center gap-2",children:(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(v.A,{className:"text-muted-foreground pointer-events-none absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2"}),(0,a.jsx)(A.p,{placeholder:h("Search by name or URL..."),value:m,onChange:e=>g(e.target.value),className:"ps-9"})]})}),(0,a.jsx)(k.Oz,{table:O,containerClassName:"min-h-0 flex-1 rounded-md",tableContainerClassName:"h-full min-h-0",tableHeaderClassName:"[background-color:var(--table-header)]",splitHeaderScrollClassName:"h-full",bodyContainerClassName:"[scrollbar-gutter:stable]",splitHeader:!0,getColumnClassName:(e,t)=>"select"===e?"w-11 text-center align-middle":"header"===t?"h-11 align-middle":"align-middle",emptyContent:h("No channels found"),emptyCellClassName:"h-24 text-center"}),(0,a.jsx)("div",{className:"shrink-0",children:(0,a.jsx)(k.Tw,{table:O})})]})})}var W=n(73280);function H(e){let{t}=(0,d.Bd)(),n=e.conflicts;return(0,a.jsxs)(W.T,{open:e.open,onOpenChange:e.onOpenChange,title:t("Preview price changes"),desc:t("Review and confirm the selected prices."),className:"max-h-[min(90dvh,var(--dialog-available-height))] overflow-y-auto data-[size=default]:max-w-[calc(100%-2rem)] data-[size=default]:sm:max-w-4xl",confirmText:t("Confirm Changes"),isLoading:e.isLoading,handleConfirm:e.onConfirm,disabled:!!e.error,children:[e.error&&(0,a.jsx)(h.W,{description:e.error,action:(0,a.jsx)(p.$,{variant:"outline",onClick:e.onReload,children:t("Reload pricing")})}),(0,a.jsx)(k.hm,{className:"max-h-96 overflow-y-auto",tableClassName:"min-w-[640px]",data:n,columns:[{id:"channel",header:t("Price source"),cellClassName:"font-medium",cell:e=>e.channel},{id:"model",header:t("Model"),cellClassName:"font-mono text-sm",cell:e=>e.model},{id:"current",header:t("Current Billing"),cell:e=>(0,a.jsx)("pre",{className:"text-sm whitespace-pre-wrap",children:e.current})},{id:"new",header:t("Change To"),cell:e=>(0,a.jsx)("pre",{className:"text-sm whitespace-pre-wrap",children:e.newVal})}]})]})}var J=n(61726),Q=n(28305),$=n(91518),Y=n(18557),X=n(56275);function Z(e){let{t}=(0,d.Bd)(),n=U(e.values);if("unset"===n)return(0,a.jsx)("span",{className:"text-muted-foreground",children:t("Unset price")});if("expression"===n){var i,o;let n,s,r=_(String(e.values.billing_expr),t);return(0,a.jsxs)("div",{className:"min-w-0 flex-1 space-y-1",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:"text-muted-foreground text-xs!",children:t("Expression pricing")}),(0,a.jsx)(Y.i,{value:String(e.values.billing_expr),size:"icon",className:"size-6","aria-label":t("Copy billing expression")})]}),r?(0,a.jsxs)("div",{className:"space-y-2",children:[r.tiers.map((e,n)=>(0,a.jsxs)("div",{className:"space-y-1",children:[r.tiers.length>1&&(0,a.jsx)("div",{className:"text-muted-foreground text-xs!",children:e.condition||e.label||t("Default")}),(0,a.jsx)(ee,{lines:e.lines})]},`${e.label}-${n}`)),r.requestRuleExpr&&(0,a.jsxs)("div",{className:"text-muted-foreground text-xs! break-all",children:[t("Includes request rules"),": ",r.requestRuleExpr]})]}):(0,a.jsx)("code",{className:"block text-xs! leading-relaxed break-all whitespace-pre-wrap",children:(i=String(e.values.billing_expr),o=e.compareTo?.billing_expr,n=[...i.matchAll(/\S+|\s+/g)],(s="string"==typeof o?o.match(/\S+|\s+/g):null)&&s.length===n.length?n.map((e,t)=>e[0]===s[t]?e[0]:(0,a.jsx)("mark",{className:"rounded-sm bg-amber-500/25 text-inherit",children:e[0]},e.index)):i)})]})}let s=F(e.values,t);return"request"===n?(0,a.jsxs)("span",{className:"whitespace-nowrap",children:[(0,a.jsx)("span",{className:"font-medium tabular-nums",children:s[0].value}),(0,a.jsxs)("span",{className:"text-muted-foreground",children:[" / ",t("request")]})]}):(0,a.jsx)(ee,{lines:s})}function ee(e){return(0,a.jsx)("dl",{className:"flex min-w-0 flex-1 flex-wrap gap-x-4 gap-y-2",children:e.lines.map(e=>(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("dt",{className:"text-muted-foreground text-xs! leading-4",children:e.label}),(0,a.jsx)("dd",{className:"leading-5 font-medium tabular-nums",children:e.value})]},e.label))})}function et(e){let{t}=(0,d.Bd)(),n=V(),i=n.bulkStates[e.source],o=i?.selections.length??0,s=i?.selectedModels.length??0,r=q(e.source,t);return(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)(C.S,{checked:o>0&&o===s,indeterminate:s>0&&se?n.onSelectPrices(i.selections):n.onUnselectPrices(i.selectedModels)}),(0,a.jsx)("span",{className:"min-w-0 flex-1 truncate",title:r,children:r}),(0,a.jsxs)("span",{className:"text-muted-foreground text-xs tabular-nums",children:[s,"/",o]})]})}function en(e){let{t}=(0,d.Bd)(),n=V(),i=e.row.model,o=e.row.prices.upstreams[e.source];if(!o)return(0,a.jsx)("span",{className:"text-muted-foreground",children:"—"});let s=E(o,e.row.prices.current),r=Object.values(e.row.differences??{}).every(t=>t?.confidence?.[e.source]!==!1);return(0,a.jsxs)("div",{className:(0,X.cn)("flex min-h-10 min-w-0 items-center gap-3 rounded-md px-2 py-1 -mx-2",n.selectedSources[i]===e.source&&"bg-primary/8"),children:[s?(0,a.jsx)(w.Wh,{label:t("Same as Local"),variant:"neutral",size:"sm",copyable:!1}):(0,a.jsxs)("div",{className:"flex shrink-0 items-center gap-2",children:[(0,a.jsx)(C.S,{checked:n.selectedSources[i]===e.source,disabled:n.isDisabled,"aria-label":t("Select price for {{model}} from {{source}}",{model:i,source:q(e.source,t)}),onCheckedChange:t=>t?n.onSelectPrices([{model:i,source:e.source}]):n.onUnselectPrices([i])}),!r&&(0,a.jsx)(w.Wh,{label:t("Verify upstream pricing"),variant:"warning",size:"sm",copyable:!1})]}),(0,a.jsx)(Z,{values:o,compareTo:e.row.prices.current})]})}function ea(e){let t,{t:n}=(0,d.Bd)(),i=(0,$.U)("(max-width: 640px)"),[o,s]=(0,c.useState)(""),[r,l]=(0,c.useState)("__all__"),u=(0,P.d)(o,250),h=(0,c.useMemo)(()=>Object.entries(e.prices).filter(e=>{let[,t]=e;return Object.values(t.upstreams).some(e=>!E(t.current,e))}).map(t=>{let[n,a]=t;return{model:n,prices:a,differences:e.differences[n]}}).sort((e,t)=>e.model.localeCompare(t.model)),[e.prices,e.differences]),p=(0,c.useMemo)(()=>h.filter(e=>e.model.toLowerCase().includes(u.trim().toLowerCase())&&("__all__"===r||Object.values(e.prices.upstreams).some(e=>U(e)===r))),[h,u,r]),m=(0,c.useMemo)(()=>[...new Set(h.flatMap(e=>Object.keys(e.prices.upstreams)))].sort(),[h]),g=(0,c.useMemo)(()=>Object.fromEntries(m.map(t=>{let n=p.filter(e=>e.prices.upstreams[t]&&!E(e.prices.current,e.prices.upstreams[t])).map(e=>({model:e.model,source:t}));return[t,{selections:n,selectedModels:n.filter(n=>e.selectedSources[n.model]===t).map(e=>e.model)}]})),[p,m,e.selectedSources]),f=function(e,t){let{t:n}=(0,d.Bd)();return(0,c.useMemo)(()=>[{accessorKey:"model",header:e=>{let{column:t}=e;return(0,a.jsx)(k.wZ,{column:t,title:n("Model")})},size:220,minSize:180,meta:{mobileTitle:!0},cell:e=>{let{row:t}=e;return(0,a.jsx)("span",{className:"block max-w-72 truncate font-medium",title:t.original.model,children:t.original.model})}},{id:"current",header:n("Current Price"),size:1===e.length?420:320,minSize:280,cell:e=>{let{row:t}=e;return(0,a.jsx)("div",{className:"-mr-3 pl-7",children:(0,a.jsx)(Z,{values:t.original.prices.current})})}},...e.map(i=>({id:`upstream_${i}`,size:1===e.length?420:320,minSize:280,header:t?q(i,n):()=>(0,a.jsx)(et,{source:i}),cell:e=>{let{row:t}=e;return(0,a.jsx)(en,{row:t.original,source:i})}}))],[e,t,n])}(m,i),{table:y}=(0,k.uI)({data:p,columns:f,getRowId:e=>e.model,initialPagination:{pageIndex:0,pageSize:10},withFilteredRowModel:!1,withSortedRowModel:!0,withFacetedRowModel:!1}),b=[{value:"__all__",label:n("All Types")},{value:"expression",label:n("Expression pricing")},{value:"token",label:n("Per-token")},{value:"request",label:n("Per-request")}];return t=e.isSyncing?(0,a.jsx)(Q.G,{message:n("Fetching upstream prices...")}):0===h.length?(0,a.jsx)(J.p,{title:n("No upstream price differences found"),bordered:!0,className:"min-h-48 flex-1"}):i?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"shrink-0 space-y-2 rounded-md border px-3 py-2",children:m.map(e=>(0,a.jsx)(et,{source:e},e))}),(0,a.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,a.jsx)(k.nV,{table:y,emptyTitle:n("No results found")})})]}):(0,a.jsx)(k.Oz,{table:y,containerClassName:"min-h-0 flex-1 rounded-md",tableContainerClassName:"h-full min-h-0",tableHeaderClassName:"[background-color:var(--table-header)]",tableBodyClassName:"[&>tr]:h-14",splitHeaderScrollClassName:"h-full",bodyContainerClassName:"[scrollbar-gutter:stable]",splitHeader:!0,getColumnClassName:(e,t)=>"header"===t?"h-11 px-3 align-middle":"h-14 px-3 py-2 align-middle",getRowClassName:()=>"align-middle",emptyContent:n("No results found"),emptyCellClassName:"h-24 text-center"}),(0,a.jsx)(G.Provider,{value:{bulkStates:g,selectedSources:e.selectedSources,isDisabled:e.isDisabled,onSelectPrices:e.onSelectPrices,onUnselectPrices:e.onUnselectPrices},children:(0,a.jsxs)("div",{className:"flex h-full min-h-0 flex-col gap-3",children:[(0,a.jsxs)("div",{className:"flex shrink-0 flex-wrap items-center gap-2",children:[e.toolbar,(0,a.jsxs)("div",{className:"relative min-w-40 flex-1 sm:max-w-72",children:[(0,a.jsx)(v.A,{className:"text-muted-foreground absolute top-1/2 left-2 size-4 -translate-y-1/2","aria-hidden":!0}),(0,a.jsx)(A.p,{value:o,onChange:e=>{s(e.target.value),y.setPageIndex(0)},placeholder:n("Search model name..."),"aria-label":n("Search models"),className:"ps-8",disabled:e.isDisabled})]}),(0,a.jsxs)(S.l6,{value:r,items:b,onValueChange:e=>{e&&(l(e),y.setPageIndex(0))},disabled:e.isDisabled,children:[(0,a.jsx)(S.bq,{className:"w-36","aria-label":n("Billing Mode"),children:(0,a.jsx)(S.yv,{})}),(0,a.jsx)(S.gC,{alignItemWithTrigger:!1,children:b.map(e=>(0,a.jsx)(S.eb,{value:e.value,children:e.label},e.value))})]}),(0,a.jsxs)("span",{className:"text-muted-foreground text-xs sm:ml-auto",children:["USD / ",n("1M token")]})]}),t,(0,a.jsx)("div",{className:"shrink-0",children:(0,a.jsx)(k.Tw,{table:y})})]})})}function ei(e){return -101===e.id?"https://models.dev/api.json":-100===e.id?"/llm-metadata/api/newapi/ratio_config-v1-base.json":20===e.type?N:T}function eo(){let{t:e}=(0,d.Bd)(),t=(0,i.jE)(),[n,v]=(0,c.useState)(null),[k,x]=(0,c.useState)(!1),[w,C]=(0,c.useState)(!1),[A,S]=(0,c.useState)([]),[P,T]=(0,c.useState)({}),[I,R]=(0,c.useState)({}),[N,j]=(0,c.useState)({}),[M,D]=(0,c.useState)({}),[O,L]=(0,c.useState)([]),[U,E]=(0,c.useState)(!1),{data:F}=(0,o.I)({queryKey:["upstream-channels"],queryFn:async()=>(0,y.oi)(await (0,b.ck)()),enabled:k}),_=(0,c.useMemo)(()=>F?.data??[],[F?.data]);(0,c.useEffect)(()=>{_.length&&T(e=>{let t={...e};for(let e of _)t[e.id]??=ei(e);return t})},[_]);let G=(0,c.useMemo)(()=>Object.fromEntries(Object.entries(M).flatMap(e=>{let[t,n]=e,a=N[t]?.upstreams[n];return a?[[t,{...a}]]:[]})),[M,N]),V=(0,s.n)({mutationFn:async t=>{let n=await (0,b.kw)(t);if(!n.success||!n.data?.prices)throw(0,y.ic)(n,e("Failed to fetch upstream prices"));let a=n.data.test_results;if(a.length&&a.every(e=>"error"===e.status))throw Error(a.map(t=>`${q(t.name,e)}: ${t.error}`).join(", "));return n},onMutate:()=>{j({}),R({}),D({})},onSuccess:t=>{let n=t.data.test_results.filter(e=>"error"===e.status);n.length&&u.oR.warning(e("Some channels failed: {{errorMsg}}",{errorMsg:n.map(t=>`${q(t.name,e)}: ${t.error}`).join(", ")})),R(t.data.differences),j(t.data.prices),Object.keys(t.data.prices).length||u.oR.success(e("No price differences found"))},onError:t=>(0,f.Q)(t,e("Failed to fetch upstream prices"))}),z=(0,s.n)({mutationFn:async()=>{if(!n)throw Error(e("Reload pricing"));let t=(0,g.Yf)(n.options,G);return await (0,m.FK)((0,m.mc)(n,n.options,t)),G},onSuccess:async n=>{j(e=>Object.fromEntries(Object.entries(e).map(e=>{let[t,a]=e;return[t,{...a,current:n[t]??a.current}]}))),D({}),C(!1),v(null),u.oR.success(e("Prices synced successfully")),await (0,m.fV)(t);try{v(await (0,m.az)())}catch(t){(0,f.Q)(t,e("Reload pricing"))}},onError:t=>(0,f.Q)(t,e("Failed to sync prices"))}),W=async t=>{let n=_.filter(e=>t.includes(e.id));if(!n.length)return void u.oR.warning(e("Please select at least one channel"));let a=n.map(e=>({id:e.id,name:e.name,base_url:e.base_url,endpoint:P[e.id]||ei(e)}));E(!0),j({}),R({}),V.reset(),v(null),D({}),z.reset();try{v(await (0,m.az)()),V.mutate({upstreams:a,timeout:10})}catch(t){(0,f.Q)(t,e("Failed to load model pricing"))}finally{E(!1)}},J=(0,c.useCallback)(e=>{D(t=>Object.fromEntries([...Object.entries(t),...e.filter(e=>N[e.model]?.upstreams[e.source]).map(e=>[e.model,e.source])]))},[N]),Q=(0,c.useCallback)(e=>{D(t=>{let n={...t};for(let t of e)delete n[t];return n})},[]),$=U||V.isPending||z.isPending;return(0,a.jsxs)("div",{className:"flex h-full min-h-0 flex-col gap-3",children:[(0,a.jsx)("div",{className:"min-h-0 flex-1",children:V.isError?(0,a.jsx)(h.W,{description:V.error.message,action:(0,a.jsx)(p.$,{variant:"outline",onClick:()=>void W(A),children:e("Retry")})}):(0,a.jsx)(ea,{toolbar:(0,a.jsxs)(p.$,{variant:"outline",onClick:()=>x(!0),disabled:$,children:[(0,a.jsx)(r.A,{className:"size-4","aria-hidden":!0}),e("Select price sources")]}),prices:N,differences:I,selectedSources:M,isDisabled:$,isSyncing:V.isPending||U,onSelectPrices:J,onUnselectPrices:Q})}),(0,a.jsxs)("div",{className:"flex shrink-0 flex-wrap items-center justify-between gap-2 border-t pt-3",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"text-muted-foreground text-sm",role:"status",children:e("{{count}} selected models",{count:Object.keys(M).length})}),Object.keys(M).length>0&&(0,a.jsx)(p.$,{variant:"ghost",size:"sm",disabled:$,onClick:()=>D({}),children:e("Clear selection")})]}),(0,a.jsxs)(p.$,{onClick:()=>{L(Object.entries(M).flatMap(t=>{let[n,a]=t,i=N[n],o=i?.upstreams[a];return i&&o?[{model:n,channel:q(a,e),current:B(i.current,e),newVal:B(o,e)}]:[]})),C(!0)},disabled:!n||!Object.keys(M).length||$,children:[(0,a.jsx)(l.A,{className:"size-4","aria-hidden":!0}),e("Apply Sync")]})]}),(0,a.jsx)(K,{open:k,onOpenChange:x,channels:_,selectedChannelIds:A,onSelectedChannelIdsChange:S,channelEndpoints:P,onChannelEndpointsChange:T,onConfirm:W}),(0,a.jsx)(H,{open:w,onOpenChange:e=>{z.isPending||C(e)},conflicts:O,onConfirm:()=>z.mutate(),isLoading:z.isPending,error:z.error?.message,onReload:()=>{C(!1),D({}),j({}),R({}),v(null),z.reset(),x(!0)}})]})}},31852(e,t,n){"use strict";function a(e){if(!e||!e.trim())return"";try{let t=JSON.parse(e);return JSON.stringify(t,null,2)}catch{return e}}function i(e){let t=e.trim();if(!t)return"";try{let e=JSON.parse(t);return JSON.stringify(e)}catch{return t}}function o(e,t){if(!(e instanceof Error))return{};let n=e.message,a=n.match(/at position (\d+)/i);if(a){let e=parseInt(a[1],10),n=t.substring(0,e).split("\n");return{line:n.length,column:n[n.length-1].length+1,position:e}}let i=n.match(/at line (\d+) column (\d+)/i);return i?{line:parseInt(i[1],10),column:parseInt(i[2],10)}:{}}function s(e,t){if(!(e instanceof Error))return{type:"syntax"};let n=o(e,t),a=e.message,i=(a.includes("Expected ','")||a.includes("Expected property name")||a.includes("Unexpected string"))&&n.line&&n.line>1?n.line-1:void 0;return{type:"syntax",...n,missingCommaLine:i}}function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{allowEmpty:n=!0,predicate:a,predicateMessage:i}=t,r=e.trim();if(!r)return{valid:n,message:n?void 0:"Value is required",error:n?void 0:{type:"required"}};try{let e=JSON.parse(r);if(a&&!a(e))return{valid:!1,message:i||"JSON structure is invalid",error:{type:"structure"}};return{valid:!0}}catch(e){return{valid:!1,message:function(e,t){if(!(e instanceof Error))return"Invalid JSON";let n=o(e,t),a=e.message,i=s(e,t);if(n.line&&n.column){let e="";return i.missingCommaLine&&(e=` (check line ${i.missingCommaLine} for missing comma)`),`Error at line ${n.line}, column ${n.column}: ${a}${e}`}return void 0!==n.position?`Error at position ${n.position}: ${a}`:a}(e,r),error:s(e,r)}}}n.d(t,{En:()=>r,Nr:()=>i,ZY:()=>a})},51056(e,t,n){"use strict";n.d(t,{Tn:()=>eu,UK:()=>ed,xM:()=>ep,Z8:()=>em,bK:()=>eh});var a=n(72361),i=n(48367),o=n(86832),s=n(6702),r=n(49256),l=n(36710),c=n(87212),d=n(43152),u=n(31002),h=n(44724),p=n(12727),m=n(47182);let g=r.Ik({DefaultCollapseSidebar:r.zM(),DemoSiteEnabled:r.zM(),SelfUseModeEnabled:r.zM()});function f(e){let{defaultValues:t}=e,{t:n}=(0,s.Bd)(),r=(0,m.M)(),f=(0,o.mN)({resolver:(0,i.u)(g),defaultValues:t});(0,p.j)(f,t);let y=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await r.mutateAsync({key:n,value:a})};return(0,a.jsx)(h.X,{title:n("System Behavior"),children:(0,a.jsx)(l.lV,{...f,children:(0,a.jsxs)(d.yt,{onSubmit:f.handleSubmit(y),children:[(0,a.jsx)(u.S2,{onSave:f.handleSubmit(y),isSaving:r.isPending}),(0,a.jsx)(l.zB,{control:f.control,name:"DefaultCollapseSidebar",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsxs)(d.z$,{children:[(0,a.jsx)(l.lR,{children:n("Default Collapse Sidebar")}),(0,a.jsx)(l.Rr,{children:n("Sidebar collapsed by default for new users")})]}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(l.zB,{control:f.control,name:"DemoSiteEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsxs)(d.z$,{children:[(0,a.jsx)(l.lR,{children:n("Demo Site Mode")}),(0,a.jsx)(l.Rr,{children:n("Enable demo mode with limited functionality")})]}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(l.zB,{control:f.control,name:"SelfUseModeEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsxs)(d.z$,{children:[(0,a.jsx)(l.lR,{children:n("Self-Use Mode")}),(0,a.jsx)(l.Rr,{children:n("Optimize system for self-hosted single-user usage")})]}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})})}var y=n(68413),b=n(1738),v=n(11728),k=n(67085),x=n(43459),w=n(33271);function C(e){return e.SMTPSSLEnabled?"ssl_tls":e.SMTPStartTLSEnabled?"starttls":"none"}function A(e){let{defaultValues:t}=e,{t:n}=(0,s.Bd)(),g=(0,m.M)(),f=r.Ik({SMTPServer:r.Yj(),SMTPPort:r.Yj().refine(e=>{let t=e.trim();return!t||/^\d+$/.test(t)},n("Port must be a positive integer")),SMTPAccount:r.Yj(),SMTPFrom:r.Yj().refine(e=>{let t=e.trim();return!t||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)},n("Enter a valid email or leave blank")),SMTPToken:r.Yj(),SMTPSSLEnabled:r.zM(),SMTPStartTLSEnabled:r.zM(),SMTPInsecureSkipVerify:r.zM(),SMTPForceAuthLogin:r.zM(),QuotaRemindEnabled:r.zM(),QuotaRemindThreshold:r.Yj().refine(e=>{let t=e.trim();return!t||Number.isFinite(Number(t))&&Number(t)>=0},n("Must be greater than or equal to 0"))}),A=(0,y.useMemo)(()=>({...t,QuotaRemindThreshold:String((0,w.Sh)(Number(t.QuotaRemindThreshold)||0))}),[t]),S=(0,o.mN)({resolver:(0,i.u)(f),defaultValues:A});(0,p.j)(S,A);let P=S.watch("QuotaRemindEnabled"),T="tokens"===(0,x.cw)().meta.kind,I=async e=>{let n=C(e),a={SMTPServer:e.SMTPServer.trim(),SMTPPort:e.SMTPPort.trim(),SMTPAccount:e.SMTPAccount.trim(),SMTPFrom:e.SMTPFrom.trim(),SMTPToken:e.SMTPToken.trim(),SMTPSSLEnabled:"ssl_tls"===n,SMTPStartTLSEnabled:"starttls"===n,SMTPInsecureSkipVerify:e.SMTPInsecureSkipVerify,SMTPForceAuthLogin:e.SMTPForceAuthLogin},i={SMTPServer:t.SMTPServer.trim(),SMTPPort:t.SMTPPort.trim(),SMTPAccount:t.SMTPAccount.trim(),SMTPFrom:t.SMTPFrom.trim(),SMTPToken:t.SMTPToken.trim(),SMTPSSLEnabled:t.SMTPSSLEnabled,SMTPStartTLSEnabled:t.SMTPStartTLSEnabled,SMTPInsecureSkipVerify:t.SMTPInsecureSkipVerify,SMTPForceAuthLogin:t.SMTPForceAuthLogin},o=[];a.SMTPServer!==i.SMTPServer&&o.push({key:"SMTPServer",value:a.SMTPServer}),a.SMTPPort!==i.SMTPPort&&o.push({key:"SMTPPort",value:a.SMTPPort}),a.SMTPAccount!==i.SMTPAccount&&o.push({key:"SMTPAccount",value:a.SMTPAccount}),a.SMTPFrom!==i.SMTPFrom&&o.push({key:"SMTPFrom",value:a.SMTPFrom}),a.SMTPToken&&a.SMTPToken!==i.SMTPToken&&o.push({key:"SMTPToken",value:a.SMTPToken}),a.SMTPSSLEnabled!==i.SMTPSSLEnabled&&o.push({key:"SMTPSSLEnabled",value:a.SMTPSSLEnabled}),a.SMTPStartTLSEnabled!==i.SMTPStartTLSEnabled&&o.push({key:"SMTPStartTLSEnabled",value:a.SMTPStartTLSEnabled}),a.SMTPInsecureSkipVerify!==i.SMTPInsecureSkipVerify&&o.push({key:"SMTPInsecureSkipVerify",value:a.SMTPInsecureSkipVerify}),a.SMTPForceAuthLogin!==i.SMTPForceAuthLogin&&o.push({key:"SMTPForceAuthLogin",value:a.SMTPForceAuthLogin}),e.QuotaRemindEnabled!==t.QuotaRemindEnabled&&o.push({key:"QuotaRemindEnabled",value:e.QuotaRemindEnabled});let s=e.QuotaRemindThreshold.trim();for(let e of(s!==A.QuotaRemindThreshold&&o.push({key:"QuotaRemindThreshold",value:String((0,w.dD)(Number(s||0)))}),o))await g.mutateAsync(e)};return(0,a.jsx)(h.X,{title:n("Email & Notifications"),children:(0,a.jsx)(l.lV,{...S,children:(0,a.jsxs)(d.yt,{onSubmit:S.handleSubmit(I),autoComplete:"off",children:[(0,a.jsx)(u.S2,{onSave:S.handleSubmit(I),isSaving:g.isPending}),(0,a.jsx)(l.zB,{control:S.control,name:"SMTPServer",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("SMTP Host")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{autoComplete:"off",placeholder:n("smtp.example.com"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(l.Rr,{children:n("Hostname or IP of your SMTP provider")}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsxs)("div",{className:"grid gap-6 md:grid-cols-2",children:[(0,a.jsx)(l.zB,{control:S.control,name:"SMTPPort",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("Port")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{autoComplete:"off",type:"number",placeholder:"587",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(l.Rr,{children:n("Common ports include 25, 465, and 587")}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("SMTP encryption")}),(0,a.jsx)(l.MJ,{children:(0,a.jsxs)(k.z,{value:C({SMTPSSLEnabled:S.watch("SMTPSSLEnabled"),SMTPStartTLSEnabled:S.watch("SMTPStartTLSEnabled")}),onValueChange:e=>{S.setValue("SMTPSSLEnabled","ssl_tls"===e,{shouldDirty:!0}),S.setValue("SMTPStartTLSEnabled","starttls"===e,{shouldDirty:!0})},className:"gap-3",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(k.C,{value:"none",id:"smtp-security-none"}),(0,a.jsx)(v.J,{htmlFor:"smtp-security-none",className:"cursor-pointer font-normal",children:n("No encryption")})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(k.C,{value:"ssl_tls",id:"smtp-security-ssl-tls"}),(0,a.jsx)(v.J,{htmlFor:"smtp-security-ssl-tls",className:"cursor-pointer font-normal",children:n("SSL/TLS")})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(k.C,{value:"starttls",id:"smtp-security-starttls"}),(0,a.jsx)(v.J,{htmlFor:"smtp-security-starttls",className:"cursor-pointer font-normal",children:n("STARTTLS")})]})]})}),(0,a.jsx)(l.Rr,{children:n("Choose one SMTP transport security mode")})]}),(0,a.jsx)(l.zB,{control:S.control,name:"SMTPInsecureSkipVerify",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsxs)(d.z$,{children:[(0,a.jsx)(l.lR,{children:n("Skip SMTP TLS certificate verification")}),(0,a.jsx)(l.Rr,{children:n("Allow self-signed or hostname-mismatched SMTP certificates")})]}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(l.zB,{control:S.control,name:"SMTPForceAuthLogin",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsxs)(d.z$,{children:[(0,a.jsx)(l.lR,{children:n("Force AUTH LOGIN")}),(0,a.jsx)(l.Rr,{children:n("Force SMTP authentication using AUTH LOGIN method")})]}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]}),(0,a.jsx)(l.zB,{control:S.control,name:"SMTPAccount",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("Username")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{autoComplete:"off",placeholder:n("noreply@example.com"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(l.Rr,{children:n("Account used when authenticating with the SMTP server")}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(l.zB,{control:S.control,name:"SMTPFrom",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("From Address")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{autoComplete:"off",placeholder:n("New API <noreply@example.com>"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(l.Rr,{children:n("Display name and email used in outgoing messages")}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(l.zB,{control:S.control,name:"SMTPToken",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("Password / Access Token")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{autoComplete:"off",type:"password",placeholder:n("Enter new token to update"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(l.Rr,{children:n("Leave blank to keep the existing credential")}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsxs)(d.WY,{children:[(0,a.jsx)(l.zB,{control:S.control,name:"QuotaRemindEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsxs)(d.z$,{children:[(0,a.jsx)(l.lR,{children:n("Low balance reminder")}),(0,a.jsx)(l.Rr,{children:n("Remind users through their chosen notification method when their balance drops below the threshold")})]}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),P&&(0,a.jsx)(d.KF,{children:(0,a.jsx)(l.zB,{control:S.control,name:"QuotaRemindThreshold",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsxs)(l.lR,{children:[n("Default reminder threshold")," (",(0,x.yz)(),")"]}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{autoComplete:"off",type:"number",min:0,step:T?1:1e-6,...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(l.C5,{})]})}})})]})]})})})}var S=n(20598),P=n(63859),T=n(88288),I=n(74750);let R=r.Ik({perf_metrics_setting:r.Ik({enabled:r.zM(),flush_interval:P.ai().min(1),bucket_time:r.k5(["minute","5min","hour"]),retention_days:P.ai().min(0)})}),N=e=>({"perf_metrics_setting.enabled":e["perf_metrics_setting.enabled"],"perf_metrics_setting.flush_interval":e["perf_metrics_setting.flush_interval"],"perf_metrics_setting.bucket_time":e["perf_metrics_setting.bucket_time"],"perf_metrics_setting.retention_days":e["perf_metrics_setting.retention_days"]});function j(e){let{defaultValues:t}=e,{t:n}=(0,s.Bd)(),r=(0,m.M)(),g=(0,y.useRef)(N(t)),f=(0,y.useRef)(JSON.stringify(N(t))),v=(0,y.useMemo)(()=>({perf_metrics_setting:{enabled:t["perf_metrics_setting.enabled"],flush_interval:t["perf_metrics_setting.flush_interval"],bucket_time:t["perf_metrics_setting.bucket_time"],retention_days:t["perf_metrics_setting.retention_days"]}}),[t]),k=(0,o.mN)({resolver:(0,i.u)(R),defaultValues:v});(0,p.j)(k,v),(0,y.useEffect)(()=>{let e=N(t),n=JSON.stringify(e);n!==f.current&&(g.current=e,f.current=n)},[t]);let x=k.watch("perf_metrics_setting.enabled"),w=async e=>{let t={"perf_metrics_setting.enabled":e.perf_metrics_setting.enabled,"perf_metrics_setting.flush_interval":e.perf_metrics_setting.flush_interval,"perf_metrics_setting.bucket_time":e.perf_metrics_setting.bucket_time,"perf_metrics_setting.retention_days":e.perf_metrics_setting.retention_days},a=Object.keys(t).filter(e=>t[e]!==g.current[e]);if(0===a.length)return void S.oR.info(n("No changes to save"));for(let e of a)await r.mutateAsync({key:e,value:t[e]});g.current=t,f.current=JSON.stringify(t)};return(0,a.jsx)(h.X,{title:n("Model performance metrics"),children:(0,a.jsx)(l.lV,{...k,children:(0,a.jsxs)(d.yt,{onSubmit:k.handleSubmit(w),children:[(0,a.jsx)(u.S2,{onSave:k.handleSubmit(w),isSaving:r.isPending}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:n("Collect relay latency and success-rate metrics for the model square.")}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-4",children:[(0,a.jsx)(l.zB,{control:k.control,name:"perf_metrics_setting.enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsx)(d.z$,{children:(0,a.jsx)(l.lR,{children:n("Enable model performance metrics")})}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(l.zB,{control:k.control,name:"perf_metrics_setting.flush_interval",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("Flush interval (minutes)")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{type:"number",min:1,step:1,...(0,I.X)(t),disabled:!x})}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(l.zB,{control:k.control,name:"perf_metrics_setting.bucket_time",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("Aggregation bucket")}),(0,a.jsxs)(T.l6,{items:[{value:"minute",label:n("1 minute")},{value:"5min",label:n("5 minutes")},{value:"hour",label:n("1 hour")}],value:t.value,onValueChange:t.onChange,disabled:!x,children:[(0,a.jsx)(l.MJ,{children:(0,a.jsx)(T.bq,{children:(0,a.jsx)(T.yv,{})})}),(0,a.jsx)(T.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(T.s3,{children:[(0,a.jsx)(T.eb,{value:"minute",children:n("1 minute")}),(0,a.jsx)(T.eb,{value:"5min",children:n("5 minutes")}),(0,a.jsx)(T.eb,{value:"hour",children:n("1 hour")})]})})]}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(l.zB,{control:k.control,name:"perf_metrics_setting.retention_days",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("Retention days")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{type:"number",min:0,step:1,...(0,I.X)(t),disabled:!x})}),(0,a.jsx)(l.Rr,{children:n("0 means data is kept permanently")}),(0,a.jsx)(l.C5,{})]})}})]})]})})})}var M=n(52757);function D(e){let{defaultValues:t}=e,{t:n}=(0,s.Bd)(),g=(0,m.M)(),f=r.Ik({WorkerUrl:r.Yj().refine(e=>{let t=e.trim();return!t||/^https?:\/\//.test(t)},n("Provide a valid URL starting with http:// or https://")),WorkerValidKey:r.Yj(),WorkerAllowHttpImageRequestEnabled:r.zM()}),y=(0,o.mN)({resolver:(0,i.u)(f),defaultValues:t});(0,p.j)(y,t);let v=async e=>{let n=(0,M.UC)(e.WorkerUrl),a=e.WorkerValidKey.trim(),i=(0,M.UC)(t.WorkerUrl),o=t.WorkerValidKey.trim(),s=[];for(let r of(n!==i&&s.push({key:"WorkerUrl",value:n}),(a!==o||""===n)&&s.push({key:"WorkerValidKey",value:a}),e.WorkerAllowHttpImageRequestEnabled!==t.WorkerAllowHttpImageRequestEnabled&&s.push({key:"WorkerAllowHttpImageRequestEnabled",value:e.WorkerAllowHttpImageRequestEnabled}),s))await g.mutateAsync(r)};return(0,a.jsx)(h.X,{title:n("Worker Proxy"),children:(0,a.jsx)(l.lV,{...y,children:(0,a.jsxs)(d.yt,{onSubmit:y.handleSubmit(v),autoComplete:"off",children:[(0,a.jsx)(u.S2,{onSave:y.handleSubmit(v),isSaving:g.isPending,saveLabel:"Save Worker settings"}),(0,a.jsx)(l.zB,{control:y.control,name:"WorkerUrl",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("Worker URL")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{type:"url",inputMode:"url",placeholder:n("https://worker.example.workers.dev"),autoComplete:"off",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(l.Rr,{children:n("Requests will be forwarded to this worker. Trailing slashes are removed automatically.")}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(l.zB,{control:y.control,name:"WorkerValidKey",render:e=>{let{field:t}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:n("Worker Access Key")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{type:"password",placeholder:n("Enter new key to update"),autoComplete:"new-password",...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(l.Rr,{children:n("Used to authenticate with the worker. Leave blank to keep the existing secret.")}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(l.zB,{control:y.control,name:"WorkerAllowHttpImageRequestEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsxs)(d.z$,{children:[(0,a.jsx)(l.lR,{children:n("Allow HTTP image requests")}),(0,a.jsx)(l.Rr,{children:n("Enable when proxying workers that fetch images over HTTP.")})]}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})})}var O=n(38939),L=n(8802),q=n(92379),U=n(72868),E=n(47497),F=n(26411),_=n(46006),B=n(92778);let G=e=>{let t=new Date;return t.setHours(t.getHours()-e),t},V=[{label:"24 hours ago",getValue:()=>G(24)},{label:"7 days ago",getValue:()=>G(168)},{label:"30 days ago",getValue:()=>G(720)}];function z(e){return e?.status==="pending"||e?.status==="running"}function K(){let{t:e}=(0,s.Bd)(),t=(0,y.useId)(),[n,i]=(0,y.useState)(()=>G(720)),[o,r]=(0,y.useState)(!1),[l,c]=(0,y.useState)(null),[d,u]=(0,y.useState)(!1);(0,y.useEffect)(()=>{let e=!1;return async function(){try{let t=await (0,B.hP)();!e&&t.success&&t.data&&c(t.data)}catch{}}(),()=>{e=!0}},[]);let h=(0,y.useMemo)(()=>n?Math.floor(n.getTime()/1e3):null,[n]),p=(0,y.useMemo)(()=>n?(0,w.fk)(n.getTime(),"milliseconds"):"",[n]),m=z(l),g=l?.state,f=Math.min(100,Math.max(0,g?.progress??0)),b=g?.processed??0,v=g?.total??0,k=l?.task_id;(0,y.useEffect)(()=>{if(!k||!m)return;let t=!1,n=window.setInterval(async()=>{try{let n=await (0,B.b)(k);if(t||!n.success||!n.data)return;if(c(n.data),!z(n.data))if("succeeded"===n.data.status){let t=n.data.result?.deleted_count??n.data.state?.processed??0;S.oR.success(t>0?e("{{count}} log entries removed.",{count:t}):e("No log entries matched the selected time."))}else"failed"===n.data.status&&(0,F.Q)(n.data,e("Failed to clean logs"))}catch{}},1e3);return()=>{t=!0,window.clearInterval(n)}},[m,k,e]);let x=async()=>{if(!h)return void S.oR.error(e("Select a timestamp before clearing logs."));r(!0);try{let t=await (0,B.Up)(h);if(!t.success)throw(0,_.ic)(t,e("Failed to clean logs"));if(!t.data)throw Error(e("Failed to clean logs"));c(t.data),u(!1),S.oR.success(e("Log cleanup task started."))}catch(n){let t=n instanceof Error?n.message:e("Failed to clean logs");(0,F.Q)(n,t)}finally{r(!1)}};return(0,a.jsxs)("div",{role:"group","aria-labelledby":t,className:"flex min-w-0 flex-col gap-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{id:t,className:"font-medium",children:e("Clean history logs")}),(0,a.jsx)("p",{className:"text-muted-foreground mt-1 text-xs",children:e("Remove all log entries created before the selected timestamp.")})]}),(0,a.jsx)(L.K,{value:n,onChange:i}),(0,a.jsxs)("div",{className:"flex flex-wrap gap-3",children:[V.map(t=>(0,a.jsx)(U.$,{type:"button",variant:"outline",onClick:()=>i(t.getValue()),children:e(t.label)},t.label)),(0,a.jsx)(U.$,{type:"button",variant:"destructive",onClick:()=>{h?u(!0):S.oR.error(e("Select a timestamp before clearing logs."))},disabled:o||m,children:o||m?e("Cleaning..."):e("Clean logs")})]}),l&&(0,a.jsxs)("div",{className:"rounded-md border p-3",children:[(0,a.jsxs)("div",{className:"mb-2 flex items-center justify-between gap-3 text-sm",children:[(0,a.jsx)("span",{className:"font-medium",children:e("Log cleanup progress")}),(0,a.jsxs)("span",{className:"text-muted-foreground tabular-nums",children:[f,"%"]})]}),(0,a.jsx)(E.ke,{value:f}),(0,a.jsx)("div",{className:"text-muted-foreground mt-2 text-xs",children:e("{{processed}} of {{total}} log entries processed.",{processed:b,total:v})}),"failed"===l.status&&l.error&&(0,a.jsx)("div",{className:"text-destructive mt-2 text-xs",children:l.error})]}),(0,a.jsx)(q.Lt,{open:d,onOpenChange:u,children:(0,a.jsxs)(q.EO,{children:[(0,a.jsxs)(q.wd,{children:[(0,a.jsx)(q.r7,{children:e("Confirm log cleanup")}),(0,a.jsxs)(q.$v,{children:[p?e("This will permanently remove all log entries created before {{date}}.",{date:p}):e("This will permanently remove log entries before the selected timestamp.")," ",e("This action cannot be undone.")]})]}),(0,a.jsxs)(q.ck,{children:[(0,a.jsx)(q.Zr,{disabled:o,children:e("Cancel")}),(0,a.jsx)(q.Rx,{variant:"destructive",onClick:x,disabled:o,children:o?e("Cleaning..."):e("Delete logs")})]})]})})]})}var W=n(43284),H=n(22990),J=n(84935);function Q(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(!e||Number.isNaN(e)||0===e)return"0 Bytes";if(e<0)return`-${Q(-e,t)}`;let n=["Bytes","KB","MB","GB","TB"],a=Math.floor(Math.log(Math.abs(e))/Math.log(1024));return a<0||a>=n.length?`${e} Bytes`:`${Number.parseFloat((e/Math.pow(1024,a)).toFixed(t))} ${n[a]}`}function $(){let{t:e}=(0,s.Bd)(),t=(0,y.useId)(),[n,i]=(0,y.useState)(null),[o,r]=(0,y.useState)("by_count"),[l,c]=(0,y.useState)(10),[d,u]=(0,y.useState)(!1),h=(0,y.useCallback)(async()=>{try{let e=await H.FH.get("/api/performance/logs");(0,_.oi)(e.data),e.data.success&&i(e.data.data)}catch(e){(0,F.Q)(e)}},[]);(0,y.useEffect)(()=>{h()},[h]);let p=async()=>{if(!l||Number.isNaN(l)||l<1)return void S.oR.error(e("Please enter a valid number"));u(!0);try{let t=await H.FH.delete(`/api/performance/logs?mode=${o}&value=${l}`);if(t.data.success){let{deleted_count:n,freed_bytes:a}=t.data.data;S.oR.success(e("Cleaned up {{count}} log files, freed {{size}}",{count:n,size:Q(a)}))}else(0,F.Q)(t.data,e("Cleanup failed"));h()}catch(t){(0,F.Q)(t,e("Cleanup failed"))}finally{u(!1)}};return(0,a.jsxs)("div",{role:"group","aria-labelledby":t,className:"flex min-w-0 flex-col gap-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{id:t,className:"font-medium",children:e("Server Log Management")}),(0,a.jsx)("p",{className:"text-muted-foreground mt-1 text-xs",children:e("Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.")})]}),null!==n&&(n.enabled?(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)("div",{className:"rounded-lg border p-4",children:(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-2 text-sm md:grid-cols-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[e("Log Directory"),":"]})," ",(0,a.jsx)("span",{className:"font-mono text-xs",children:n.log_dir})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[e("Log File Count"),":"]})," ",n.file_count]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[e("Total Log Size"),":"]})," ",Q(n.total_size)]}),n.oldest_time&&n.newest_time&&(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[e("Date Range"),":"]})," ",(0,J.A)(n.oldest_time).format("YYYY-MM-DD")," ~"," ",(0,J.A)(n.newest_time).format("YYYY-MM-DD")]})]})}),(0,a.jsxs)("div",{className:"flex flex-wrap items-end gap-3",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(v.J,{className:"text-xs",children:e("Cleanup Mode")}),(0,a.jsxs)(T.l6,{items:[{value:"by_count",label:e("Retain last N files")},{value:"by_days",label:e("Retain last N days")}],value:o,onValueChange:e=>null!==e&&r(e),children:[(0,a.jsx)(T.bq,{className:"w-[160px]",children:(0,a.jsx)(T.yv,{})}),(0,a.jsx)(T.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(T.s3,{children:[(0,a.jsx)(T.eb,{value:"by_count",children:e("Retain last N files")}),(0,a.jsx)(T.eb,{value:"by_days",children:e("Retain last N days")})]})})]})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(v.J,{className:"text-xs",children:"by_count"===o?e("Files to Retain"):e("Days to Retain")}),(0,a.jsx)(b.p,{type:"number",min:1,max:"by_count"===o?1e3:3650,value:l,onChange:e=>c(Number(e.target.value)),className:"w-[120px]"})]}),(0,a.jsxs)(q.Lt,{children:[(0,a.jsx)(q.tv,{render:(0,a.jsx)(U.$,{type:"button",variant:"destructive",size:"sm",disabled:d}),children:d?e("Cleaning..."):e("Clean Up Log Files")}),(0,a.jsxs)(q.EO,{children:[(0,a.jsxs)(q.wd,{children:[(0,a.jsx)(q.r7,{children:e("Confirm log file cleanup?")}),(0,a.jsx)(q.$v,{children:"by_count"===o?e("Only the last {{value}} log files will be retained; the rest will be deleted.",{value:l}):e("Log files older than {{value}} days will be deleted.",{value:l})})]}),(0,a.jsxs)(q.ck,{children:[(0,a.jsx)(q.Zr,{children:e("Cancel")}),(0,a.jsx)(q.Rx,{variant:"destructive",onClick:p,children:e("Confirm Cleanup")})]})]})]})]})]}):(0,a.jsx)(W.Fc,{children:(0,a.jsx)(W.TN,{children:e("Server logging is not enabled (log directory not configured)")})}))]})}let Y=r.Ik({LogConsumeEnabled:r.zM(),log_setting:r.Ik({user_export_enabled:r.zM(),max_range_days:r.ai().int().min(1)})});function X(e){let{t}=(0,s.Bd)(),n=(0,m.M)(),r=(0,y.useId)(),p=(0,y.useId)(),g=(0,y.useMemo)(()=>({LogConsumeEnabled:e.defaultValues.LogConsumeEnabled,log_setting:{user_export_enabled:e.defaultValues["log_setting.user_export_enabled"],max_range_days:e.defaultValues["log_setting.max_range_days"]}}),[e.defaultValues]),f=(0,o.mN)({resolver:(0,i.u)(Y),defaultValues:g});(0,y.useEffect)(()=>{f.reset(g)},[g,f]);let v=async t=>{for(let[a,i]of[["LogConsumeEnabled",t.LogConsumeEnabled],["log_setting.user_export_enabled",t.log_setting.user_export_enabled],["log_setting.max_range_days",t.log_setting.max_range_days]])i!==e.defaultValues[a]&&await n.mutateAsync({key:a,value:i})};return(0,a.jsxs)(h.X,{title:t("Log Maintenance"),className:"gap-6",children:[(0,a.jsx)(l.lV,{...f,children:(0,a.jsxs)(d.yt,{onSubmit:f.handleSubmit(v),children:[(0,a.jsx)(u.S2,{onSave:f.handleSubmit(v),isSaving:n.isPending,saveLabel:"Save log settings"}),(0,a.jsxs)("div",{role:"group","aria-labelledby":r,className:"flex min-w-0 flex-col gap-4",children:[(0,a.jsx)("h4",{id:r,className:"font-medium",children:t("Log recording")}),(0,a.jsx)(l.zB,{control:f.control,name:"LogConsumeEnabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsxs)(d.z$,{children:[(0,a.jsx)(l.lR,{children:t("Record quota usage")}),(0,a.jsx)(l.Rr,{children:t("Track per-request consumption to power usage analytics. Keeping this on increases database writes.")})]}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:n.value,onCheckedChange:n.onChange})}),(0,a.jsx)(l.C5,{})]})}})]}),(0,a.jsx)(O.w,{}),(0,a.jsxs)("div",{role:"group","aria-labelledby":p,className:"flex min-w-0 flex-col gap-4",children:[(0,a.jsx)("h4",{id:p,className:"font-medium",children:t("Log search and export")}),(0,a.jsxs)(d.K1,{children:[(0,a.jsx)(l.zB,{control:f.control,name:"log_setting.user_export_enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsxs)(d.z$,{children:[(0,a.jsx)(l.lR,{children:t("Allow users to export logs")}),(0,a.jsx)(l.Rr,{children:t("Users can download their own logs from the usage log page. Administrators can always export.")})]}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:n.value,onCheckedChange:n.onChange})}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(l.zB,{control:f.control,name:"log_setting.max_range_days",render:e=>{let{field:n}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:t("Longest log time range (days)")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{type:"number",min:1,step:1,...(0,I.X)(n)})}),(0,a.jsx)(l.Rr,{children:t("The longest time range a user can view at once in the logs and on the dashboard, and the longest range any export can cover.")}),(0,a.jsx)(l.C5,{})]})}})]})]})]})}),(0,a.jsx)(O.w,{}),(0,a.jsx)(K,{}),(0,a.jsx)(O.w,{}),(0,a.jsx)($,{})]})}var Z=n(42817);let ee=r.Ik({performance_setting:r.Ik({disk_cache_enabled:r.zM(),disk_cache_threshold_mb:P.ai().min(1),disk_cache_max_size_mb:P.ai().min(100),disk_cache_path:r.Yj(),monitor_enabled:r.zM(),monitor_cpu_threshold:P.ai().min(0),monitor_memory_threshold:P.ai().min(0).max(100),monitor_disk_threshold:P.ai().min(0).max(100)})}),et=e=>({performance_setting:{disk_cache_enabled:e["performance_setting.disk_cache_enabled"],disk_cache_threshold_mb:e["performance_setting.disk_cache_threshold_mb"],disk_cache_max_size_mb:e["performance_setting.disk_cache_max_size_mb"],disk_cache_path:e["performance_setting.disk_cache_path"]??"",monitor_enabled:e["performance_setting.monitor_enabled"],monitor_cpu_threshold:e["performance_setting.monitor_cpu_threshold"],monitor_memory_threshold:e["performance_setting.monitor_memory_threshold"],monitor_disk_threshold:e["performance_setting.monitor_disk_threshold"]}});function en(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;if(!e||Number.isNaN(e)||0===e)return"0 Bytes";if(e<0)return`-${en(-e,t)}`;let n=["Bytes","KB","MB","GB","TB"],a=Math.floor(Math.log(Math.abs(e))/Math.log(1024));return a<0||a>=n.length?`${e} Bytes`:`${Number.parseFloat((e/Math.pow(1024,a)).toFixed(t))} ${n[a]}`}function ea(e){let{t}=(0,s.Bd)(),n=(0,m.M)(),[r,p]=(0,y.useState)(null),g=(0,y.useMemo)(()=>et(e.defaultValues),[e.defaultValues]),f=(0,o.mN)({resolver:(0,i.u)(ee),defaultValues:g}),v=(0,y.useRef)(e.defaultValues),k=(0,y.useRef)(JSON.stringify(e.defaultValues));(0,y.useEffect)(()=>{let t=JSON.stringify(e.defaultValues);t!==k.current&&(v.current=e.defaultValues,k.current=t,f.reset(et(e.defaultValues)))},[e.defaultValues,f]);let x=(0,y.useCallback)(async()=>{try{let e=await H.FH.get("/api/performance/stats");e.data.success?p(e.data.data):(0,F.Q)(e.data)}catch(e){(0,F.Q)(e)}},[]);(0,y.useEffect)(()=>{x()},[x]);let w=async e=>{let a={"performance_setting.disk_cache_enabled":e.performance_setting.disk_cache_enabled,"performance_setting.disk_cache_threshold_mb":e.performance_setting.disk_cache_threshold_mb,"performance_setting.disk_cache_max_size_mb":e.performance_setting.disk_cache_max_size_mb,"performance_setting.disk_cache_path":e.performance_setting.disk_cache_path??"","performance_setting.monitor_enabled":e.performance_setting.monitor_enabled,"performance_setting.monitor_cpu_threshold":e.performance_setting.monitor_cpu_threshold,"performance_setting.monitor_memory_threshold":e.performance_setting.monitor_memory_threshold,"performance_setting.monitor_disk_threshold":e.performance_setting.monitor_disk_threshold},i=Object.keys(a).filter(e=>a[e]!==v.current[e]);if(0===i.length)return void S.oR.info(t("No changes to save"));for(let e of i)await n.mutateAsync({key:e,value:a[e]});v.current=a,k.current=JSON.stringify(a),f.reset(et(a)),x()},C=async()=>{try{let e=await H.FH.delete("/api/performance/disk_cache");e.data.success?(S.oR.success(t("Disk cache cleared")),x()):(0,F.Q)(e.data)}catch(e){(0,F.Q)(e,t("Cleanup failed"))}},A=async()=>{try{let e=await H.FH.post("/api/performance/reset_stats");e.data.success?(S.oR.success(t("Statistics reset")),x()):(0,F.Q)(e.data)}catch(e){(0,F.Q)(e,t("Reset failed"))}},P=async()=>{try{let e=await H.FH.post("/api/performance/gc");e.data.success?(S.oR.success(t("GC executed")),x()):(0,F.Q)(e.data)}catch(e){(0,F.Q)(e,t("GC execution failed"))}},T=f.watch("performance_setting.disk_cache_enabled"),R=f.watch("performance_setting.monitor_enabled"),N=f.watch("performance_setting.disk_cache_max_size_mb"),j="number"==typeof N?N:Number(N)||0,M=T&&r?.disk_space_info&&r.disk_space_info.free>0&&j>0&&r.disk_space_info.free<1024*j*1024,D=r?.cache_stats?.disk_cache_max_bytes&&r.cache_stats.disk_cache_max_bytes>0?Math.round(r.cache_stats.current_disk_usage_bytes/r.cache_stats.disk_cache_max_bytes*100):0;return(0,a.jsxs)(h.X,{title:t("Performance Settings"),children:[(0,a.jsx)(l.lV,{...f,children:(0,a.jsxs)(d.yt,{onSubmit:f.handleSubmit(w),children:[(0,a.jsx)(u.S2,{onSave:f.handleSubmit(w),isSaving:n.isPending}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-medium",children:t("Disk Cache Settings")}),(0,a.jsx)("p",{className:"text-muted-foreground mt-1 text-xs",children:t("When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.")})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-3",children:[(0,a.jsx)(l.zB,{control:f.control,name:"performance_setting.disk_cache_enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsx)(d.z$,{children:(0,a.jsx)(l.lR,{children:t("Enable Disk Cache")})}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(l.zB,{control:f.control,name:"performance_setting.disk_cache_threshold_mb",render:e=>{let{field:n}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:t("Disk Cache Threshold (MB)")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{type:"number",min:1,step:1,...(0,I.X)(n),disabled:!T})}),(0,a.jsx)(l.Rr,{children:t("Use disk cache when request body exceeds this size")}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(l.zB,{control:f.control,name:"performance_setting.disk_cache_max_size_mb",render:e=>{let{field:n}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:t("Max Disk Cache Size (MB)")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{type:"number",min:100,step:1,...(0,I.X)(n),disabled:!T})}),r?.disk_space_info&&r.disk_space_info.total>0&&(0,a.jsx)(l.Rr,{children:t("Free: {{free}} / Total: {{total}}",{free:en(r.disk_space_info.free),total:en(r.disk_space_info.total)})}),(0,a.jsx)(l.C5,{})]})}})]}),M&&(0,a.jsx)(W.Fc,{variant:"destructive",children:(0,a.jsx)(W.TN,{children:`${t("Warning")}: ${t("Available disk space")} (${en(r?.disk_space_info?.free??0)}) ${t("is less than the configured maximum cache size")} (${j} MB). ${t("This may cause cache failures.")}`})}),!r?.config?.is_running_in_container&&(0,a.jsx)(l.zB,{control:f.control,name:"performance_setting.disk_cache_path",render:e=>{let{field:n}=e;return(0,a.jsxs)(l.eI,{className:"max-w-md",children:[(0,a.jsx)(l.lR,{children:t("Cache Directory")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{placeholder:t("Leave empty to use system temp directory"),value:n.value??"",onChange:e=>n.onChange(e.target.value),name:n.name,onBlur:n.onBlur,ref:n.ref,disabled:!T})}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(O.w,{}),(0,a.jsxs)("div",{children:[(0,a.jsx)("h4",{className:"font-medium",children:t("System Performance Monitoring")}),(0,a.jsx)("p",{className:"text-muted-foreground mt-1 text-xs",children:t("When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.")})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-4",children:[(0,a.jsx)(l.zB,{control:f.control,name:"performance_setting.monitor_enabled",render:e=>{let{field:n}=e;return(0,a.jsxs)(d.H,{children:[(0,a.jsx)(d.z$,{children:(0,a.jsx)(l.lR,{children:t("Enable Performance Monitoring")})}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(c.d,{checked:n.value,onCheckedChange:n.onChange})})]})}}),(0,a.jsx)(l.zB,{control:f.control,name:"performance_setting.monitor_cpu_threshold",render:e=>{let{field:n}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:t("CPU Threshold (%)")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{type:"number",min:0,step:1,...(0,I.X)(n),disabled:!R})}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(l.zB,{control:f.control,name:"performance_setting.monitor_memory_threshold",render:e=>{let{field:n}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:t("Memory Threshold (%)")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{type:"number",min:0,max:100,step:1,...(0,I.X)(n),disabled:!R})}),(0,a.jsx)(l.C5,{})]})}}),(0,a.jsx)(l.zB,{control:f.control,name:"performance_setting.monitor_disk_threshold",render:e=>{let{field:n}=e;return(0,a.jsxs)(l.eI,{children:[(0,a.jsx)(l.lR,{children:t("Disk Threshold (%)")}),(0,a.jsx)(l.MJ,{children:(0,a.jsx)(b.p,{type:"number",min:0,max:100,step:1,...(0,I.X)(n),disabled:!R})}),(0,a.jsx)(l.C5,{})]})}})]})]})}),(0,a.jsx)(O.w,{}),(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h4",{className:"font-medium",children:t("Performance Monitor")}),(0,a.jsx)(U.$,{variant:"outline",size:"sm",onClick:x,children:t("Refresh Stats")}),(0,a.jsxs)(q.Lt,{children:[(0,a.jsx)(q.tv,{render:(0,a.jsx)(U.$,{variant:"outline",size:"sm"}),children:t("Clean up inactive cache")}),(0,a.jsxs)(q.EO,{children:[(0,a.jsxs)(q.wd,{children:[(0,a.jsx)(q.r7,{children:t("Confirm cleanup of inactive disk cache?")}),(0,a.jsx)(q.$v,{children:t("This will delete temporary cache files that have not been used for more than 10 minutes")})]}),(0,a.jsxs)(q.ck,{children:[(0,a.jsx)(q.Zr,{children:t("Cancel")}),(0,a.jsx)(q.Rx,{variant:"destructive",onClick:C,children:t("Confirm")})]})]})]}),(0,a.jsx)(U.$,{variant:"outline",size:"sm",onClick:A,children:t("Reset Stats")}),(0,a.jsx)(U.$,{variant:"outline",size:"sm",onClick:P,children:t("Run GC")})]}),r&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"space-y-2 rounded-lg border p-4",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:t("Request Body Disk Cache")}),(0,a.jsx)(E.ke,{value:D}),(0,a.jsxs)("div",{className:"text-muted-foreground flex justify-between text-xs",children:[(0,a.jsxs)("span",{children:[en(r.cache_stats?.current_disk_usage_bytes??0)," ","/"," ",en(r.cache_stats?.disk_cache_max_bytes??0)]}),(0,a.jsxs)("span",{children:[t("Active Files"),":"," ",r.cache_stats?.active_disk_files??0]})]}),(0,a.jsxs)(Z.Wh,{variant:"neutral",copyable:!1,children:[t("Disk Hits"),": ",r.cache_stats?.disk_cache_hits??0]})]}),(0,a.jsxs)("div",{className:"space-y-2 rounded-lg border p-4",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:t("Request Body Memory Cache")}),(0,a.jsxs)("div",{className:"text-muted-foreground flex justify-between text-xs",children:[(0,a.jsxs)("span",{children:[t("Current Cache Size"),":"," ",en(r.cache_stats?.current_memory_usage_bytes??0)]}),(0,a.jsxs)("span",{children:[t("Active Cache Count"),":"," ",r.cache_stats?.active_memory_buffers??0]})]}),(0,a.jsxs)(Z.Wh,{variant:"neutral",copyable:!1,children:[t("Memory Hits"),":"," ",r.cache_stats?.memory_cache_hits??0]})]})]}),r.disk_space_info&&r.disk_space_info.total>0&&(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("p",{className:"mb-2 text-sm font-medium",children:t("Cache Directory Disk Space")}),(0,a.jsx)(E.ke,{value:Math.round(r.disk_space_info.used_percent)}),(0,a.jsxs)("div",{className:"text-muted-foreground mt-2 flex justify-between text-xs",children:[(0,a.jsxs)("span",{children:[t("Used"),": ",en(r.disk_space_info.used)]}),(0,a.jsxs)("span",{children:[t("Available"),": ",en(r.disk_space_info.free)]}),(0,a.jsxs)("span",{children:[t("Total"),": ",en(r.disk_space_info.total)]})]})]}),r.memory_stats&&(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("p",{className:"mb-2 text-sm font-medium",children:t("System Memory Stats")}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-2 text-xs md:grid-cols-5",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Allocated Memory"),":"]})," ",en(r.memory_stats.alloc)]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Total Allocated"),":"]})," ",en(r.memory_stats.total_alloc)]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("System Memory"),":"]})," ",en(r.memory_stats.sys)]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("GC Count"),":"]})," ",r.memory_stats.num_gc]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:"Goroutines:"})," ",r.memory_stats.num_goroutine]})]})]}),r.disk_cache_info&&(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("p",{className:"mb-2 text-sm font-medium",children:t("Cache Directory Info")}),(0,a.jsxs)("div",{className:"grid grid-cols-3 gap-2 text-xs",children:[(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Cache Directory"),":"]})," ",(0,a.jsx)("span",{className:"font-mono",children:r.disk_cache_info.path})]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Directory File Count"),":"]})," ",r.disk_cache_info.file_count]}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("span",{className:"text-muted-foreground",children:[t("Directory Total Size"),":"]})," ",en(r.disk_cache_info.total_size)]})]})]})]})]})]})}var ei=n(19729),eo=n(13289);function es(e){let{t}=(0,s.Bd)(),{status:n}=(0,eo.s)(),i=e.startTime?(0,w.Ey)(e.startTime):t("Unknown"),o=n?.version||e.currentVersion||t("Unknown");return(0,a.jsx)(h.X,{title:t("System maintenance"),children:(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsxs)("div",{className:"grid gap-4 md:grid-cols-2",children:[(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:t("Current version")}),(0,a.jsx)("div",{className:"text-lg font-semibold break-all",children:o})]}),(0,a.jsxs)("div",{className:"rounded-lg border p-4",children:[(0,a.jsx)("div",{className:"text-muted-foreground text-sm",children:t("Uptime since")}),(0,a.jsx)("div",{className:"text-lg font-semibold",children:i})]})]}),(0,a.jsx)(ei.t,{compact:!1})]})})}var er=n(38159);let el=[{id:"behavior",titleKey:"System Behavior",build:e=>(0,a.jsx)(f,{defaultValues:{DefaultCollapseSidebar:e.DefaultCollapseSidebar,DemoSiteEnabled:e.DemoSiteEnabled,SelfUseModeEnabled:e.SelfUseModeEnabled}})},{id:"alerts",titleKey:"Model performance metrics",build:e=>(0,a.jsx)(j,{defaultValues:{"perf_metrics_setting.enabled":e["perf_metrics_setting.enabled"]??!0,"perf_metrics_setting.flush_interval":e["perf_metrics_setting.flush_interval"]??5,"perf_metrics_setting.bucket_time":e["perf_metrics_setting.bucket_time"]??"hour","perf_metrics_setting.retention_days":e["perf_metrics_setting.retention_days"]??0}})},{id:"email",titleKey:"Email & Notifications",build:e=>(0,a.jsx)(A,{defaultValues:{QuotaRemindEnabled:e.QuotaRemindEnabled,QuotaRemindThreshold:e.QuotaRemindThreshold,SMTPServer:e.SMTPServer,SMTPPort:e.SMTPPort,SMTPAccount:e.SMTPAccount,SMTPFrom:e.SMTPFrom,SMTPToken:e.SMTPToken,SMTPSSLEnabled:e.SMTPSSLEnabled,SMTPStartTLSEnabled:e.SMTPStartTLSEnabled,SMTPInsecureSkipVerify:e.SMTPInsecureSkipVerify,SMTPForceAuthLogin:e.SMTPForceAuthLogin}})},{id:"worker",titleKey:"Worker Proxy",build:e=>(0,a.jsx)(D,{defaultValues:{WorkerUrl:e.WorkerUrl,WorkerValidKey:e.WorkerValidKey,WorkerAllowHttpImageRequestEnabled:e.WorkerAllowHttpImageRequestEnabled}})},{id:"logs",titleKey:"Log Maintenance",build:e=>(0,a.jsx)(X,{defaultValues:{LogConsumeEnabled:!!e.LogConsumeEnabled,"log_setting.user_export_enabled":e["log_setting.user_export_enabled"]??!0,"log_setting.max_range_days":e["log_setting.max_range_days"]??365}})},{id:"performance",titleKey:"Performance",build:e=>(0,a.jsx)(ea,{defaultValues:{"performance_setting.disk_cache_enabled":e["performance_setting.disk_cache_enabled"]??!1,"performance_setting.disk_cache_threshold_mb":e["performance_setting.disk_cache_threshold_mb"]??10,"performance_setting.disk_cache_max_size_mb":e["performance_setting.disk_cache_max_size_mb"]??1024,"performance_setting.disk_cache_path":e["performance_setting.disk_cache_path"]??"","performance_setting.monitor_enabled":e["performance_setting.monitor_enabled"]??!1,"performance_setting.monitor_cpu_threshold":e["performance_setting.monitor_cpu_threshold"]??90,"performance_setting.monitor_memory_threshold":e["performance_setting.monitor_memory_threshold"]??90,"performance_setting.monitor_disk_threshold":e["performance_setting.monitor_disk_threshold"]??95}})},{id:"update-checker",titleKey:"System maintenance",build:(e,t,n)=>(0,a.jsx)(es,{currentVersion:t,startTime:n})}],ec=(0,er.h)({sections:el,defaultSection:"behavior",basePath:"/system-settings/operations",urlStyle:"path"}),ed=ec.sectionIds,eu=ec.defaultSection,eh=ec.getSectionNavItems,ep=ec.getSectionContent,em=ec.getSectionMeta},56792(e,t,n){"use strict";function a(e,t){switch(t){case"upstream_failure":return e("Upstream request failed");case"request_failed":return e("Request failed");case"task_failed":return e("Task failed");case"strict_session":return e("Session behavior prevents switching channels");case"attempt_budget_exhausted":return e("Total attempt budget exhausted");case"channel_error":return e("Channel error");case"unrecognized_status":return e("Unrecognized status code");case"task_accepted":return e("The task was accepted; submission cannot be replayed");case"pinned_channel":case"channel_constraint":return e("Fixed channel constraint");case"local_rejection":return e("Request rejected locally");case"non_retryable_error":case"system_retry_exclusion":return e("System retry exclusion");case"status_not_retryable":return e("Status is outside the retry rules");case"retry_status_matched":return e("Status matches the retry rules");case"session_rule_matched":return e("Session rule matched");case"channel_selected":return e("Channel selected");case"request_completed":return e("Request completed");case"stream_not_successful":return e("Stream did not complete successfully");case"channel":return e("Channel");case"global":return e("Global default");case"global_and_channel":return e("Global and channel settings");case"session_rule":return e("Session rule");case"system":return e("System constraint");case"routing":return e("Channel selection");case"upstream":return e("Upstream response");case"transport":return e("Upstream connection");case"local":return e("Local check");case"unchanged":return e("Unchanged");case"channel_disable_requested":return e("Channel disable requested");case"key_disable_requested":return e("Current key disable requested");case"off":case"":return e("Do not keep sessions");case"prefer":return e("Prefer the original channel, allow switching");case"strict":return e("Require the original channel");default:return t}}n.d(t,{x:()=>a})},21423(e,t,n){"use strict";n.d(t,{Um:()=>eV,j9:()=>eK,Xj:()=>eW,Vj:()=>ez});var a=n(72361),i=n(38159),o=n(48367),s=n(68413),r=n(86832),l=n(6702),c=n(20598),d=n(49256),u=n(63859),h=n(36710),p=n(1738),m=n(88288),g=n(38939),f=n(87212),y=n(70954),b=n(26411);function v(e){var t;let n=(e??"").toString().trim();if(0===n.length)return{ok:!0,ranges:[],tokens:[],normalized:"",invalidTokens:[]};let a=n.replace(/[,]/g,",").split(",").map(e=>e.trim()).filter(Boolean),i=[],o=[];for(let e of a){let t=function(e){let t=e.trim().replace(/\s/g,"");if(!t)return null;let n=e=>Number.isFinite(e)&&e>=100&&e<=599;if(t.includes("-")){let[e,a]=t.split("-");if(!k(e)||!k(a))return null;let i=Number.parseInt(e,10),o=Number.parseInt(a,10);return n(i)&&n(o)&&!(i>o)?{start:i,end:o}:null}if(!k(t))return null;let a=Number.parseInt(t,10);return n(a)?{start:a,end:a}:null}(e);t?i.push(t):o.push(e)}if(o.length>0)return{ok:!1,ranges:[],tokens:[],normalized:n,invalidTokens:o};let s=0===(t=i).length?[]:[...t].sort((e,t)=>e.start!==t.start?e.start-t.start:e.end-t.end).reduce((e,t)=>{let n=e[e.length-1];return!n||t.start>n.end+1?e.push({...t}):n.end=Math.max(n.end,t.end),e},[]),r=s.map(e=>e.start===e.end?`${e.start}`:`${e.start}-${e.end}`),l=r.join(",");return{ok:!0,ranges:s,tokens:r,normalized:l,invalidTokens:[]}}function k(e){return"string"==typeof e&&/^\d+$/.test(e)}var x=n(43152),w=n(31002),C=n(44724),A=n(12727),S=n(74750),P=n(96962),T=n(55667),I=n(22990),R=n(46006);async function N(){let e=await I.FH.get("/api/option/request_policy");return(0,R.oi)(e.data).data}async function j(e){let t=await I.FH.patch("/api/option/request_policy",{options:e});return(0,R.oi)(t.data).data}function M(){let e=(0,P.jE)(),{t}=(0,l.Bd)();return(0,T.n)({mutationFn:j,onSuccess:n=>{e.setQueryData(["request-policy"],n),e.invalidateQueries({queryKey:["system-options"]}),e.invalidateQueries({queryKey:["channel-ops"]}),c.oR.success(t("Saved successfully"))},onError:e=>(0,b.Q)(e),meta:{errorToast:!1}})}let D=d.Yj().refine(e=>{let t=e.trim();return!t||!Number.isNaN(Number(t))&&Number(t)>=0},"Enter a non-negative number or leave empty"),O=["scheduled_all","auto_ban_only","passive_recovery"];function L(e){return e.replaceAll("\r\n","\n")}function q(e){return"auto_ban_only"===e||"passive_recovery"===e?e:"scheduled_all"}let U=e=>({ChannelDisableThreshold:(e.ChannelDisableThreshold??"").trim(),AutomaticDisableChannelEnabled:e.AutomaticDisableChannelEnabled,AutomaticEnableChannelEnabled:e.AutomaticEnableChannelEnabled,AutomaticDisableKeywords:L(e.AutomaticDisableKeywords??""),AutomaticDisableStatusCodes:v(e.AutomaticDisableStatusCodes??"").normalized,"monitor_setting.auto_test_channel_enabled":e["monitor_setting.auto_test_channel_enabled"],"monitor_setting.auto_test_channel_minutes":e["monitor_setting.auto_test_channel_minutes"],"monitor_setting.channel_test_concurrency":e["monitor_setting.channel_test_concurrency"],"monitor_setting.channel_test_mode":q(e["monitor_setting.channel_test_mode"])});function E(e){let t,{defaultValues:n}=e,{t:i}=(0,l.Bd)(),k=M(),P=d.Ik({ChannelDisableThreshold:D,AutomaticDisableChannelEnabled:d.zM(),AutomaticEnableChannelEnabled:d.zM(),AutomaticDisableKeywords:d.Yj(),AutomaticDisableStatusCodes:d.Yj(),monitor_setting:d.Ik({auto_test_channel_enabled:d.zM(),auto_test_channel_minutes:u.ai().int().min(1,i("Interval must be at least 1 minute")),channel_test_concurrency:u.ai().int(i("Enter a positive integer")).min(1,i("Channel test concurrency must be between 1 and 32")).max(32,i("Channel test concurrency must be between 1 and 32")),channel_test_mode:d.k5(O)})}).superRefine((e,t)=>{let n=v(e.AutomaticDisableStatusCodes);n.ok||t.addIssue({code:"custom",path:["AutomaticDisableStatusCodes"],message:i("Invalid status code rules: {{tokens}}",{tokens:n.invalidTokens.join(", ")})})}),T=(0,s.useRef)(U(n)),I=(0,s.useMemo)(()=>({ChannelDisableThreshold:n.ChannelDisableThreshold??"",AutomaticDisableChannelEnabled:n.AutomaticDisableChannelEnabled,AutomaticEnableChannelEnabled:n.AutomaticEnableChannelEnabled,AutomaticDisableKeywords:L(n.AutomaticDisableKeywords??""),AutomaticDisableStatusCodes:n.AutomaticDisableStatusCodes??"",monitor_setting:{auto_test_channel_enabled:n["monitor_setting.auto_test_channel_enabled"],auto_test_channel_minutes:n["monitor_setting.auto_test_channel_minutes"],channel_test_concurrency:n["monitor_setting.channel_test_concurrency"],channel_test_mode:q(n["monitor_setting.channel_test_mode"])}}),[n]),R=(0,r.mN)({resolver:(0,o.u)(P),defaultValues:I});(0,A.j)(R,I),(0,s.useEffect)(()=>{T.current=U(n)},[n]);let N=R.watch("AutomaticDisableStatusCodes"),j=R.watch("monitor_setting.channel_test_mode");switch(j){case"auto_ban_only":t=i("Periodically checks only channels with auto-disable enabled, excluding manually disabled channels.");break;case"passive_recovery":t=i("Does not check healthy channels. It only rechecks auto-disabled channels and restores them after they recover.");break;default:t=i("Periodically checks all channels except manually disabled ones to detect failures and recover channels automatically.")}let E=(0,s.useMemo)(()=>v(N),[N]),F=async e=>{let t={ChannelDisableThreshold:e.ChannelDisableThreshold.trim(),AutomaticDisableChannelEnabled:e.AutomaticDisableChannelEnabled,AutomaticEnableChannelEnabled:e.AutomaticEnableChannelEnabled,AutomaticDisableKeywords:L(e.AutomaticDisableKeywords),AutomaticDisableStatusCodes:v(e.AutomaticDisableStatusCodes).normalized,"monitor_setting.auto_test_channel_enabled":e.monitor_setting.auto_test_channel_enabled,"monitor_setting.auto_test_channel_minutes":e.monitor_setting.auto_test_channel_minutes,"monitor_setting.channel_test_concurrency":e.monitor_setting.channel_test_concurrency,"monitor_setting.channel_test_mode":e.monitor_setting.channel_test_mode},n=Object.keys(t).filter(e=>t[e]!==T.current[e]);if(0===n.length)return void c.oR.info(i("No changes to save"));try{await k.mutateAsync(Object.fromEntries(n.map(e=>[e,String(t[e])]))),T.current=t}catch(e){(0,b.Q)(e)}};return(0,a.jsxs)(C.X,{title:i("Channel health"),children:[(0,a.jsxs)("div",{className:"text-muted-foreground space-y-1 text-sm",children:[(0,a.jsx)("p",{children:i("Source: global settings. Changes take effect after saving.")}),(0,a.jsx)("p",{children:R.watch("AutomaticDisableChannelEnabled")?i("Channels must also enable Auto Ban before automatic disabling can take effect."):i("With these settings, automatic disabling is off for all channels.")}),R.watch("AutomaticEnableChannelEnabled")&&!R.watch("monitor_setting.auto_test_channel_enabled")&&(0,a.jsx)("p",{children:i("Scheduled recovery is off. Bulk channel tests can still re-enable automatically disabled channels.")})]}),(0,a.jsx)(h.lV,{...R,children:(0,a.jsxs)(x.yt,{onSubmit:R.handleSubmit(F),children:[(0,a.jsx)(w.S2,{onSave:R.handleSubmit(F),isSaving:R.formState.isSubmitting}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Channel health checks")}),(0,a.jsxs)(x.K1,{children:[(0,a.jsxs)(x.WY,{children:[(0,a.jsx)(h.zB,{control:R.control,name:"monitor_setting.auto_test_channel_enabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(x.H,{children:[(0,a.jsxs)(x.z$,{children:[(0,a.jsx)(h.lR,{children:i("Scheduled channel tests")}),(0,a.jsx)(h.Rr,{children:i("Run background checks using the selected test mode")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(f.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsxs)(x.KF,{role:"group","aria-label":i("Scheduled test options"),className:"grid gap-x-5 gap-y-4 lg:grid-cols-2",children:[(0,a.jsx)(h.zB,{control:R.control,name:"monitor_setting.channel_test_mode",render:e=>{let{field:n}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:i("Channel test mode")}),(0,a.jsxs)(m.l6,{items:[{value:"scheduled_all",label:i("Actively check all channels")},{value:"auto_ban_only",label:i("Actively check auto-disable-enabled channels")},{value:"passive_recovery",label:i("Check channels awaiting recovery only")}],value:n.value,onValueChange:n.onChange,children:[(0,a.jsx)(h.MJ,{children:(0,a.jsx)(m.bq,{className:"w-full",children:(0,a.jsx)(m.yv,{})})}),(0,a.jsx)(m.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(m.s3,{children:[(0,a.jsx)(m.eb,{value:"scheduled_all",children:i("Actively check all channels")}),(0,a.jsx)(m.eb,{value:"auto_ban_only",children:i("Actively check auto-disable-enabled channels")}),(0,a.jsx)(m.eb,{value:"passive_recovery",children:i("Check channels awaiting recovery only")})]})})]}),(0,a.jsx)(h.Rr,{children:t}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:R.control,name:"monitor_setting.auto_test_channel_minutes",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:i("Test interval (minutes)")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(p.p,{type:"number",min:1,step:1,...(0,S.X)(t)})}),(0,a.jsx)(h.Rr,{children:"passive_recovery"===j?i("How frequently the system checks auto-disabled channels for recovery"):i("Time between scheduled channel checks")}),(0,a.jsx)(h.C5,{})]})}})]})]}),(0,a.jsx)(h.zB,{control:R.control,name:"monitor_setting.channel_test_concurrency",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:i("Channel test concurrency")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(p.p,{type:"number",min:1,max:32,step:1,...(0,S.X)(t)})}),(0,a.jsx)(h.Rr,{children:i("Maximum number of channels tested at the same time (1-32)")}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:R.control,name:"AutomaticEnableChannelEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(x.H,{children:[(0,a.jsxs)(x.z$,{children:[(0,a.jsx)(h.lR,{children:i("Re-enable on success")}),(0,a.jsx)(h.Rr,{children:i("Successful scheduled or bulk checks can restore automatically disabled channels. Manually disabled channels stay disabled.")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(f.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})]}),(0,a.jsx)(g.w,{}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium",children:i("Auto-disable rules")}),(0,a.jsxs)(x.K1,{children:[(0,a.jsx)(h.zB,{control:R.control,name:"AutomaticDisableChannelEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(x.H,{children:[(0,a.jsxs)(x.z$,{children:[(0,a.jsx)(h.lR,{children:i("Disable on failure")}),(0,a.jsx)(h.Rr,{children:i("Apply disable rules to upstream request errors and scheduled or bulk health checks")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(f.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(h.zB,{control:R.control,name:"ChannelDisableThreshold",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:i("Health check timeout threshold (seconds)")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(p.p,{type:"number",min:0,step:1,value:t.value,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(h.Rr,{children:i("Scheduled or bulk health checks can disable a channel when this duration is exceeded, if both global and channel auto-disable are enabled.")}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:R.control,name:"AutomaticDisableStatusCodes",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:i("Auto-disable status codes")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(p.p,{placeholder:i("e.g. 401, 403, 429, 500-599"),value:t.value,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsxs)(h.Rr,{children:[i("Accepts comma-separated status codes and inclusive ranges.")," ",E.ok&&E.normalized&&E.normalized!==t.value.trim()&&(0,a.jsxs)("span",{className:"text-muted-foreground",children:[i("Normalized:")," ",E.normalized]})]}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:R.control,name:"AutomaticDisableKeywords",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:i("Failure keywords")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(y.T,{rows:6,placeholder:i("one keyword per line"),...t,onChange:e=>t.onChange(e.target.value)})}),(0,a.jsx)(h.Rr,{children:i("If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.")}),(0,a.jsx)(h.C5,{})]})}})]})]})]})})]})}var F=n(43284);let _=d.Ik({CheckSensitiveEnabled:d.zM(),CheckSensitiveOnPromptEnabled:d.zM(),SensitiveWords:d.Yj().optional()});function B(e){let{defaultValues:t}=e,{t:n}=(0,l.Bd)(),i=M(),c=(0,r.mN)({resolver:(0,o.u)(_),defaultValues:t});(0,s.useEffect)(()=>{c.reset(t)},[t,c]);let d=async e=>{let n=Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]});try{n.length>0&&await i.mutateAsync(Object.fromEntries(n.map(e=>{let[t,n]=e;return[t,String(n??"")]})))}catch(e){(0,b.Q)(e)}};return(0,a.jsxs)(C.X,{title:n("Request checks"),children:[(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:n("Source: global settings. Changes take effect after saving.")}),(0,a.jsx)("h3",{className:"text-sm font-medium",children:n("Request text filtering")}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:n("Checks text extracted from supported requests against keywords, ignoring case. A match rejects the request before upstream processing and does not affect channel health. Images, audio and generated responses are not checked.")}),(0,a.jsx)(h.lV,{...c,children:(0,a.jsxs)(x.yt,{onSubmit:c.handleSubmit(d),children:[(0,a.jsx)(w.S2,{onSave:c.handleSubmit(d),isSaving:c.formState.isSubmitting,saveLabel:"Save sensitive words"}),(0,a.jsx)(F.Fc,{children:(0,a.jsx)(F.TN,{children:c.watch("CheckSensitiveEnabled")&&c.watch("CheckSensitiveOnPromptEnabled")&&c.watch("SensitiveWords")?.trim()?n("Prompt text filtering is active with the current form values."):n("Prompt text filtering needs both switches enabled and a non-empty keyword list.")})}),(0,a.jsxs)(x.WY,{children:[(0,a.jsx)(h.zB,{control:c.control,name:"CheckSensitiveEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(x.H,{children:[(0,a.jsxs)(x.z$,{children:[(0,a.jsx)(h.lR,{children:n("Enable filtering")}),(0,a.jsx)(h.Rr,{children:n("Blocks messages when sensitive keywords are detected.")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(f.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(x.KF,{children:(0,a.jsx)(h.zB,{control:c.control,name:"CheckSensitiveOnPromptEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(x.H,{children:[(0,a.jsxs)(x.z$,{children:[(0,a.jsx)(h.lR,{children:n("Inspect user prompts")}),(0,a.jsx)(h.Rr,{children:n("When enabled, prompts are scanned before reaching upstream models.")})]}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(f.d,{disabled:!c.watch("CheckSensitiveEnabled"),checked:t.value,onCheckedChange:t.onChange})})]})}})})]}),(0,a.jsx)(h.zB,{control:c.control,name:"SensitiveWords",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:n("Blocked keywords")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(y.T,{rows:12,placeholder:n("Enter one keyword per line"),...t})}),(0,a.jsx)(h.Rr,{children:n("Each line represents one keyword. Leave blank to disable the list but keep the switch states.")}),(0,a.jsx)(h.C5,{})]})}})]})})]})}var G=n(53540),V=n(24503),z=n(28305),K=n(61868),W=n(11728),H=n(67085),J=n(56275);function Q(e){let{value:t,title:n,children:i,className:o,keepMounted:s}=e;return(0,a.jsxs)(K.As,{value:t,className:(0,J.cn)(o),children:[(0,a.jsx)(K.$m,{className:"hover:no-underline",children:(0,a.jsx)("div",{className:"flex flex-col gap-1 text-left",children:(0,a.jsx)("div",{className:"text-base font-semibold",children:n})})}),(0,a.jsx)(K.ub,{className:"pt-4",keepMounted:s,children:i})]})}var $=n(68974);let Y=(0,s.memo)(function(e){let{title:t,description:n,children:i,className:o}=e;return(0,a.jsxs)($.Zp,{className:o,children:[(0,a.jsxs)($.aR,{children:[(0,a.jsx)($.ZB,{children:t}),n&&(0,a.jsx)($.BT,{children:n})]}),(0,a.jsx)($.Wu,{children:i})]})});var X=n(53425),Z=n(914),ee=n(13236),et=n(66002),en=n(11397),ea=n(54622),ei=n(14653),eo=n(73280),es=n(91460),er=n(90879),el=n(72868),ec=n(84368),ed=n(56920),eu=n(52048),eh=n(33271),ep=n(18372);let em={codexCli:{name:"codex cli trace",model_regex:["^gpt-.*$"],path_regex:["/v1/responses"],key_sources:[{type:"gjson",path:"prompt_cache_key"}],param_override_template:{operations:[{mode:"pass_headers",value:["Originator","Session_id","Thread_id","Session-Id","Thread-Id","X-Client-Request-Id","User-Agent","X-Codex-Beta-Features","X-Codex-Turn-State","X-Codex-Turn-Metadata","X-Codex-Window-Id","X-Codex-Parent-Thread-Id","X-OpenAI-Subagent","X-OpenAI-Memgen-Request","X-ResponsesAPI-Include-Timing-Metrics","X-OpenAI-Internal-Codex-Responses-Lite"],keep_origin:!0}]},value_regex:"",ttl_seconds:0,skip_retry_on_failure:!0,include_using_group:!0,include_model_name:!1,include_rule_name:!0},claudeCli:{name:"claude cli trace",model_regex:["^claude-.*$"],path_regex:["/v1/messages"],key_sources:[{type:"gjson",path:"metadata.user_id"}],param_override_template:{operations:[{mode:"pass_headers",value:["X-Stainless-Arch","X-Stainless-Lang","X-Stainless-Os","X-Stainless-Package-Version","X-Stainless-Retry-Count","X-Stainless-Runtime","X-Stainless-Runtime-Version","X-Stainless-Timeout","User-Agent","X-App","Anthropic-Beta","Anthropic-Dangerous-Direct-Browser-Access","Anthropic-Version"],keep_origin:!0}]},value_regex:"",ttl_seconds:0,skip_retry_on_failure:!0,include_using_group:!0,include_model_name:!1,include_rule_name:!0}};var eg=n(60641),ef=n(6242),ey=n(83568),eb=n(56792);let ev=["context_int","context_string","request_header","gjson"],ek=["id","token_id","token_key","token_group","group","username","user_group","user_email","specific_channel_id"],ex="channel-affinity-rule-form";function ew(e){return e.split("\n").map(e=>e.trim()).filter(e=>e.length>0)}function eC(e){let t=e?.type||"gjson";return"gjson"===t?{...e,type:t,key:"",path:e?.path||""}:{...e,type:t,key:e?.key||"",path:""}}function eA(e){let{t}=(0,l.Bd)(),n=!!e.rule?.name,i=(0,s.useRef)(0),o=e=>({...eC(e??{type:"gjson",path:""}),rowId:String(i.current++)}),[d,u]=(0,s.useState)(()=>[o()]),[h,f]=(0,s.useState)(!1),b=(0,r.mN)({defaultValues:{session_mode:"inherit",name:"",model_regex_text:"",path_regex_text:"",user_agent_include_text:"",value_regex:"",ttl_seconds:0,skip_retry_on_failure:!1,include_using_group:!0,include_model_name:!1,include_rule_name:!0,param_override_template_json:""}}),v=b.register("param_override_template_json"),k=e=>{b.reset({session_mode:e.session_mode||(e.skip_retry_on_failure?"strict":"prefer"),name:e.name||"",model_regex_text:(e.model_regex||[]).join("\n"),path_regex_text:(e.path_regex||[]).join("\n"),user_agent_include_text:(e.user_agent_include||[]).join("\n"),value_regex:e.value_regex||"",ttl_seconds:e.ttl_seconds||0,skip_retry_on_failure:!!e.skip_retry_on_failure,include_using_group:e.include_using_group??!0,include_model_name:!!e.include_model_name,include_rule_name:e.include_rule_name??!0,param_override_template_json:e.param_override_template?JSON.stringify(e.param_override_template,null,2):""});let t=(e.key_sources||[]).map(eC);u(t.length>0?t.map(o):[o()]),e.param_override_template&&f(!0)};return(0,s.useEffect)(()=>{e.open&&(e.rule?k(e.rule):e.templateKey&&em[e.templateKey]?k(em[e.templateKey]):(b.reset({session_mode:"inherit",name:"",model_regex_text:"",path_regex_text:"",user_agent_include_text:"",value_regex:"",ttl_seconds:0,skip_retry_on_failure:!1,include_using_group:!0,include_model_name:!1,include_rule_name:!0,param_override_template_json:""}),u([o()])))},[e.open,e.rule,e.templateKey]),(0,a.jsx)(eg.l,{open:e.open,onOpenChange:e.onOpenChange,title:n?t("Edit Rule"):t("Add Rule"),contentClassName:"sm:max-w-5xl",contentHeight:"auto",bodyClassName:"pr-2",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(el.$,{type:"button",variant:"outline",onClick:()=>e.onOpenChange(!1),children:t("Cancel")}),(0,a.jsx)(el.$,{type:"submit",form:ex,children:t("Save")})]}),children:(0,a.jsxs)("form",{id:ex,onSubmit:b.handleSubmit(n=>{let a=ew(n.model_regex_text);if(0===a.length)return void c.oR.error(t("At least one model regex pattern is required"));let i=d.map(e=>{let{rowId:t,...n}=e;return eC(n)}).filter(e=>e.type&&("gjson"===e.type?e.path:e.key));if(0===i.length)return void c.oR.error(t("At least one valid key source is required"));let o=null;if(n.param_override_template_json.trim())try{let e=JSON.parse(n.param_override_template_json);if("object"!=typeof e||Array.isArray(e)||null===e)return void c.oR.error(t("Parameter override template must be a JSON object"));o=e}catch{c.oR.error(t("Invalid JSON in parameter override template"));return}let s={...e.rule,session_mode:n.session_mode||"inherit",id:e.rule?.id,name:n.name.trim(),model_regex:a,path_regex:ew(n.path_regex_text),user_agent_include:ew(n.user_agent_include_text),key_sources:i,value_regex:n.value_regex.trim(),ttl_seconds:Number(n.ttl_seconds||0),skip_retry_on_failure:n.skip_retry_on_failure,include_using_group:n.include_using_group,include_model_name:n.include_model_name,include_rule_name:n.include_rule_name,param_override_template:o};e.onSave(s),e.onOpenChange(!1)}),className:"min-w-0 space-y-4 overflow-x-clip",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(W.J,{required:!0,htmlFor:"affinity-rule-name",children:t("Name")}),(0,a.jsx)(p.p,{id:"affinity-rule-name",placeholder:"prefer-by-conversation-id",...b.register("name",{required:!0})})]}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(W.J,{required:!0,children:t("Model Regex (one per line)")}),(0,a.jsx)(y.T,{rows:4,placeholder:"^gpt-4o.*$\n^claude-3.*$",...b.register("model_regex_text",{required:!0})})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(W.J,{children:t("Path Regex (one per line)")}),(0,a.jsx)(y.T,{rows:4,placeholder:"/v1/chat/completions",...b.register("path_regex_text")})]})]}),(0,a.jsxs)("div",{className:"space-y-1.5",children:[(0,a.jsx)(W.J,{htmlFor:"rule-session-mode",children:t("Session behavior")}),(0,a.jsxs)(ey.mh,{id:"rule-session-mode",className:"w-full","aria-describedby":"rule-session-mode-description",...b.register("session_mode"),children:[(0,a.jsx)(ey.$,{value:"inherit",children:t("Inherit global default")}),(0,a.jsx)(ey.$,{value:"off",children:t("Do not keep sessions")}),(0,a.jsx)(ey.$,{value:"prefer",children:t("Prefer the original channel, allow switching")}),(0,a.jsx)(ey.$,{value:"strict",children:t("Require the original channel")})]}),(0,a.jsx)("p",{id:"rule-session-mode-description",className:"text-muted-foreground text-xs",children:t("Global default: {{mode}}",{mode:(0,eb.x)(t,e.globalSessionMode||"prefer")})})]}),(0,a.jsx)(g.w,{}),(0,a.jsxs)("div",{children:[(0,a.jsxs)("div",{className:"mb-2 flex items-center justify-between",children:[(0,a.jsx)(W.J,{children:t("Key Sources")}),(0,a.jsxs)(el.$,{type:"button",variant:"outline",size:"sm",onClick:()=>u(e=>[...e,o()]),children:[(0,a.jsx)(et.A,{className:"mr-1 h-3 w-3"}),t("Add")]})]}),(0,a.jsxs)("p",{className:"text-muted-foreground mb-2 text-xs",children:[t("Common Keys"),": ",ek.join(", ")]}),(0,a.jsx)("div",{className:"space-y-2",children:d.map((e,t)=>(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-2 sm:flex-row sm:items-center",children:[(0,a.jsxs)(m.l6,{items:ev.map(e=>({value:e,label:e})),value:e.type,onValueChange:n=>{if(null===n)return;let a=[...d];a[t]={...eC({...e,type:n}),rowId:e.rowId},u(a)},children:[(0,a.jsx)(m.bq,{className:"w-full sm:w-[160px]",children:(0,a.jsx)(m.yv,{})}),(0,a.jsx)(m.gC,{alignItemWithTrigger:!1,children:(0,a.jsx)(m.s3,{children:ev.map(e=>(0,a.jsx)(m.eb,{value:e,children:e},e))})})]}),(0,a.jsx)(p.p,{className:"min-w-0 flex-1",placeholder:"gjson"===e.type?"metadata.conversation_id":"user_id",value:"gjson"===e.type?e.path||"":e.key||"",onChange:n=>{let a=[...d];"gjson"===e.type?a[t]={...e,path:n.target.value}:a[t]={...e,key:n.target.value},u(a)}}),(0,a.jsx)(el.$,{type:"button",variant:"ghost",size:"icon",onClick:()=>u(e=>e.filter((e,n)=>n!==t)),children:(0,a.jsx)(ei.A,{className:"h-4 w-4"})})]},e.rowId))})]}),(0,a.jsx)(g.w,{}),(0,a.jsxs)(ef.Nt,{open:h,onOpenChange:f,children:[(0,a.jsxs)(ef.R6,{render:(0,a.jsx)(el.$,{type:"button",variant:"ghost",className:"w-full justify-start"}),children:[h?"▼":"▶"," ",t("Advanced Settings")]}),(0,a.jsxs)(ef.Ke,{className:"space-y-3 pt-2",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(W.J,{children:t("User-Agent include (one per line)")}),(0,a.jsx)(y.T,{rows:3,placeholder:"curl\nPostmanRuntime",...b.register("user_agent_include_text")})]}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-2",children:[(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(W.J,{children:t("Value Regex")}),(0,a.jsx)(p.p,{placeholder:"^[-0-9A-Za-z._:]{1,128}$",...b.register("value_regex")})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(W.J,{children:t("TTL (seconds, 0 = default)")}),(0,a.jsx)(p.p,{type:"number",min:0,...b.register("ttl_seconds")})]})]}),(0,a.jsxs)("div",{className:"grid gap-1.5",children:[(0,a.jsx)(W.J,{htmlFor:"channel-affinity-param-override-template",children:t("Parameter Override Template (JSON)")}),(0,a.jsx)(es.B,{id:"channel-affinity-param-override-template",value:b.watch("param_override_template_json")||"",onChange:e=>b.setValue("param_override_template_json",e,{shouldDirty:!0}),name:v.name,onBlur:()=>{v.onBlur({target:{name:v.name,value:b.getValues("param_override_template_json")},type:"blur"})},textareaRef:v.ref,placeholder:'{"operations": [...]}',heightClassName:"h-40 min-h-40 max-h-40"})]}),(0,a.jsxs)("div",{className:"grid gap-3 sm:grid-cols-3",children:[(0,a.jsx)(x.ew,{checked:b.watch("include_using_group"),onCheckedChange:e=>b.setValue("include_using_group",e),label:t("Include Group"),className:"py-0"}),(0,a.jsx)(x.ew,{checked:b.watch("include_model_name"),onCheckedChange:e=>b.setValue("include_model_name",e),label:t("Include Model"),className:"py-0"}),(0,a.jsx)(x.ew,{checked:b.watch("include_rule_name"),onCheckedChange:e=>b.setValue("include_rule_name",e),label:t("Include Rule Name"),className:"py-0"})]})]})]})]})})}var eS=n(26884),eP=n(64779),eT=n(93075),eI=n(28206),eR=n(13987),eN=n(61726),ej=n(42817),eM=n(47303);function eD(e){let{t,i18n:n}=(0,l.Bd)(),i=(0,eu.Tl)(n.resolvedLanguage||n.language);return 0===e.rules.length?(0,a.jsx)(eN.p,{icon:X.A,title:t("No rules yet"),description:t("Fill a CLI template or add a blank rule."),className:"min-h-56",action:(0,a.jsxs)(el.$,{variant:"outline",onClick:e.onFillTemplates,children:[(0,a.jsx)(ee.A,{"aria-hidden":"true"}),t("Fill Templates")]})}):(0,a.jsx)(eR.hm,{className:"focus-visible:outline-ring overflow-x-auto rounded-none border-0 focus-visible:-outline-offset-2",containerProps:{role:"region","aria-label":t("Session rules table"),tabIndex:0},tableProps:{withContainer:!1},tableClassName:"min-w-[960px] table-fixed [&_th]:px-4 [&_th]:text-muted-foreground [&_td]:px-4 [&_td]:py-4 [&_code]:font-mono!",headerRowClassName:"bg-muted/35 hover:bg-muted/35",data:e.rules,getRowKey:e=>e.id??e.name,columns:[{id:"name",header:t("Name"),className:"w-[20%]",cell:e=>(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-1.5",children:[(0,a.jsx)(eR.TX,{tabIndex:0,children:e.name||"—"}),(0,a.jsx)("div",{className:"text-muted-foreground min-w-0","data-table-text":"secondary","aria-label":t("Model Regex"),children:(0,a.jsx)(eR.TX,{tabIndex:0,tooltipContent:(e.model_regex||[]).join("\n")||t("All models"),children:(0,a.jsx)("code",{children:(e.model_regex||[]).join(" · ")||t("All models")})})})]})},{id:"key-sources",header:t("Key Sources"),className:"w-[22%]",cell:e=>(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-1.5",children:[(e.key_sources||[]).map(e=>(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2",children:[(0,a.jsx)(er.E,{variant:"secondary",className:"shrink-0",children:e.type}),(0,a.jsx)(eR.TX,{tabIndex:0,tooltipContent:"gjson"===e.type?e.path:e.key,children:(0,a.jsx)("code",{children:"gjson"===e.type?e.path:e.key})})]},`${e.type}:${e.path||e.key}`)),e.key_sources?.length?null:(0,a.jsx)("span",{className:"text-muted-foreground",children:"—"})]})},{id:"session",header:t("Session behavior"),cell:n=>{let i=n.session_mode||(n.skip_retry_on_failure?"strict":"prefer"),o=t("Rule override");"inherit"===i&&(i=e.globalSessionMode||"prefer",o=t("Inherit global default")),!1===e.enabled&&(i="off",o=t("Disabled globally"));let s=eS.A;return"strict"===i&&(s=eP.A),"off"===i&&(s=eT.A),(0,a.jsxs)("div",{className:"flex min-w-0 flex-col gap-1.5",children:[(0,a.jsx)(ej.Wh,{label:(0,eb.x)(t,i),icon:s,variant:"neutral",type:"text",copyable:!1,className:"h-auto whitespace-normal [&>span]:overflow-visible [&>span]:whitespace-normal"}),(0,a.jsx)("span",{"data-table-text":"secondary",className:"text-muted-foreground whitespace-normal",children:o})]})}},{id:"ttl",header:t("TTL"),className:"w-24",cellClassName:"text-muted-foreground",cell:e=>(0,a.jsx)(eR.TX,{tabIndex:0,children:e.ttl_seconds>0?`${(0,eh.ZV)(e.ttl_seconds,i)} ${t("seconds")}`:t("Global default")})},{id:"scope",header:t("Scope"),className:"w-32",cell:e=>{let n=[e.include_using_group&&t("Group"),e.include_model_name&&t("Model"),e.include_rule_name&&t("Rule")].filter(Boolean);return(0,a.jsx)(ej.M8,{items:n,max:3,className:"flex-wrap gap-1.5",renderItem:e=>(0,a.jsx)(er.E,{variant:"outline",children:e})})}},{id:"cache",header:t("Cache"),className:"w-16 text-right",cellClassName:"text-right tabular-nums",cell:n=>n.include_rule_name?e.cacheStats?(0,eh.ZV)(e.cacheStats.by_rule_name?.[n.name]||0,i):"—":t("N/A")},{id:"actions",header:t("Actions"),className:"w-24 text-right",cell:n=>(0,a.jsxs)("div",{role:"group","aria-label":t("Actions for {{name}}",{name:n.name}),className:"flex items-center justify-end gap-0.5",children:[(0,a.jsxs)(eM.m_,{children:[(0,a.jsx)(eM.k$,{render:(0,a.jsx)(el.$,{variant:"ghost",size:"icon","aria-label":t("Edit Rule"),onClick:()=>e.onEdit(n),children:(0,a.jsx)(eI.A,{"aria-hidden":"true"})})}),(0,a.jsx)(eM.ZI,{children:t("Edit Rule")})]}),(0,a.jsx)(eR.CY,{ariaLabel:t("More actions"),children:(0,a.jsxs)(ec.I,{children:[n.include_rule_name?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(ec._2,{onClick:()=>e.onClearCache(n.name),children:[(0,a.jsx)(ei.A,{"aria-hidden":"true"}),t("Clear cache for this rule")]}),(0,a.jsx)(ec.mB,{})]}):null,(0,a.jsxs)(ec._2,{variant:"destructive",onClick:()=>e.onDelete(n),children:[(0,a.jsx)(ei.A,{"aria-hidden":"true"}),t("Delete Rule")]})]})})]})}]})}function eO(e){return JSON.stringify(e.map(e=>{let{id:t,...n}=e;return n}))}function eL(e){let{t,i18n:n}=(0,l.Bd)(),i=(0,eu.Tl)(n.resolvedLanguage||n.language),o=(0,s.useMemo)(()=>(function(e){try{let t=JSON.parse(e||"[]");if(!Array.isArray(t))return[];return t.map((e,t)=>({id:t,...e}))}catch{return[]}})(e.rulesJson),[e.rulesJson]),[r,d]=(0,s.useState)("visual"),[u,h]=(0,s.useState)(null),[p,m]=(0,s.useState)(!1),[f,y]=(0,s.useState)(!1),[v,k]=(0,s.useState)(null),[x,w]=(0,s.useState)(null),[C,A]=(0,s.useState)(null),[S,P]=(0,s.useState)(!1),[T,I]=(0,s.useState)(null),[R,N]=(0,s.useState)(!1),j=(0,s.useCallback)(async()=>{m(!0);try{let e=await (0,ep.QS)();e.success?h(e.data||null):(0,b.Q)(e)}catch(e){(0,b.Q)(e,t("Failed to refresh cache stats"))}finally{m(!1)}},[t]);(0,s.useEffect)(()=>{j()},[j]);let M=()=>{let n=new Set(o.map(e=>(e.name||"").trim()).filter(e=>e.length>0)),a=Object.values(em).map(e=>{let t=JSON.parse(JSON.stringify(e)),a=function(e,t){let n=(t||"").trim()||"rule";if(!e.has(n))return n;for(let t=2;t<1e3;t++){let a=`${n}-${t}`;if(!e.has(a))return a}return`${n}-${Date.now()}`}(n,e.name);return n.add(a),{...t,name:a}});e.onRulesChange(eO([...o,...a])),c.oR.success(t("Templates appended")),N(!1)},D=()=>{0===o.length?M():N(!0)},O=async()=>{try{let e=await (0,ep.pc)();e.success?(c.oR.success(t("Cleared")),j()):(0,b.Q)(e),P(!1)}catch(e){(0,b.Q)(e)}},L=async()=>{if(T)try{let e=await (0,ep.A4)(T);e.success?(c.oR.success(t("Cleared")),j()):(0,b.Q)(e),I(null)}catch(e){(0,b.Q)(e)}};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("section",{"aria-label":t("Session rules"),className:"bg-card min-w-0 overflow-hidden rounded-xl border",children:[(0,a.jsxs)("div",{className:"flex flex-col gap-1.5 px-4 pt-5 sm:px-5",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("h3",{className:"text-base font-semibold",children:t("Session rules")}),(0,a.jsx)(er.E,{variant:"secondary",className:"tabular-nums",children:o.length})]}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:t("How a session is identified and which channel it keeps.")})]}),(0,a.jsxs)(ed.tU,{value:r,onValueChange:n=>{"json"===n?(e.onRulesChange(JSON.stringify(o.map(e=>{let{id:t,...n}=e;return n}),null,2)),d("json")):(()=>{try{let n=JSON.parse(e.rulesJson);if(!Array.isArray(n))return void c.oR.error(t("Rules JSON must be an array"));d("visual")}catch{c.oR.error(t("Invalid rules JSON format"))}})()},className:"gap-0",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-3 px-4 py-4 sm:px-5",children:[(0,a.jsxs)(ed.j7,{"aria-label":t("Rule editor mode"),children:[(0,a.jsxs)(ed.Xi,{value:"visual",className:"px-3",children:[(0,a.jsx)(X.A,{"aria-hidden":"true"}),t("Visual")]}),(0,a.jsxs)(ed.Xi,{value:"json",className:"px-3",children:[(0,a.jsx)(Z.A,{"aria-hidden":"true"}),"JSON"]})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(el.$,{variant:"outline",onClick:D,disabled:"json"===r,children:[(0,a.jsx)(ee.A,{"aria-hidden":"true","data-icon":"inline-start"}),t("Fill Templates")]}),(0,a.jsxs)(ec.rI,{children:[(0,a.jsxs)(ec.ty,{render:(0,a.jsx)(el.$,{disabled:"json"===r}),children:[(0,a.jsx)(et.A,{"aria-hidden":"true","data-icon":"inline-start"}),t("Add Rule")]}),(0,a.jsx)(ec.SQ,{align:"end",children:(0,a.jsxs)(ec.I,{children:[(0,a.jsx)(ec._2,{onClick:()=>{k(null),w(null),y(!0)},children:t("Blank Rule")}),(0,a.jsx)(ec._2,{onClick:()=>{k(null),w("codexCli"),y(!0)},children:"Codex CLI"}),(0,a.jsx)(ec._2,{onClick:()=>{k(null),w("claudeCli"),y(!0)},children:"Claude CLI"})]})})]})]})]}),(0,a.jsx)(g.w,{}),(0,a.jsx)(ed.av,{value:"visual",className:"min-w-0",children:(0,a.jsx)(eD,{rules:o,cacheStats:u,enabled:e.enabled,globalSessionMode:e.globalSessionMode,onEdit:e=>{k(e),w(null),y(!0)},onDelete:A,onClearCache:I,onFillTemplates:D})}),(0,a.jsx)(ed.av,{value:"json",className:"min-w-0",children:(0,a.jsxs)("div",{className:"grid gap-2 p-4 sm:p-5",children:[(0,a.jsx)(W.J,{htmlFor:"channel-affinity-rules-json",children:t("Rules JSON")}),(0,a.jsx)("p",{className:"text-muted-foreground text-xs",children:t("Switch to visual mode to add rules or apply templates.")}),(0,a.jsx)(es.B,{id:"channel-affinity-rules-json",value:e.rulesJson,onChange:e.onRulesChange,heightClassName:"h-[300px] min-h-[300px] max-h-[300px]"})]})})]}),(0,a.jsx)(g.w,{}),(0,a.jsxs)("div",{className:"bg-muted/25 flex flex-wrap items-center justify-between gap-3 px-4 py-3 sm:px-5",children:[(0,a.jsxs)("div",{role:"status",className:"flex min-w-0 items-center gap-2 text-sm",children:[(0,a.jsx)(en.A,{"aria-hidden":"true",className:"text-muted-foreground size-4 shrink-0"}),(0,a.jsx)("span",{className:"text-muted-foreground",children:t("Cache Entries")}),u?(0,a.jsxs)("span",{className:"flex flex-wrap items-baseline gap-1 font-medium tabular-nums",children:[(0,eh.ZV)(u.total,i),(0,a.jsxs)("span",{className:"text-muted-foreground font-normal",children:["/ ",(0,eh.ZV)(u.cache_capacity,i)]})]}):(0,a.jsx)("span",{className:"text-muted-foreground",children:p?t("Loading..."):t("Unavailable")})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-1",children:[(0,a.jsxs)(el.$,{variant:"ghost",size:"sm",onClick:j,disabled:p,"aria-busy":p,children:[(0,a.jsx)(ea.A,{"aria-hidden":"true",className:(0,J.cn)(p&&"animate-spin motion-reduce:animate-none")}),t("Refresh Cache")]}),(0,a.jsxs)(el.$,{variant:"ghost",size:"sm",onClick:()=>P(!0),children:[(0,a.jsx)(ei.A,{"aria-hidden":"true"}),t("Clear All Cache")]})]})]})]}),null!==C&&(0,a.jsx)(eo.T,{open:!0,onOpenChange:e=>!e&&A(null),title:t("Delete Rule"),desc:t("Delete session rule “{{name}}”? Save your changes to apply the removal.",{name:C.name}),confirmText:t("Delete Rule"),handleConfirm:()=>{e.onRulesChange(eO(o.filter(e=>e.id!==C.id))),A(null)},destructive:!0}),(0,a.jsx)(eA,{open:f,onOpenChange:y,rule:v,onSave:t=>{let n=o.findIndex(e=>e.id===v?.id),a=[...o];n>=0?a[n]=t:a.push(t),e.onRulesChange(eO(a)),k(null)},templateKey:x,globalSessionMode:e.globalSessionMode}),(0,a.jsx)(eo.T,{open:S,onOpenChange:P,title:t("Confirm clearing all channel affinity cache"),desc:t("This will delete all channel affinity cache entries still in memory."),handleConfirm:O,destructive:!0}),null!==T&&(0,a.jsx)(eo.T,{open:!0,onOpenChange:e=>!e&&I(null),title:t("Confirm clearing cache for this rule"),desc:`${t("Rule")}: ${T}`,handleConfirm:L,destructive:!0}),(0,a.jsx)(eo.T,{open:R,onOpenChange:N,title:t("Fill Codex CLI / Claude CLI Templates"),desc:t("This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list."),handleConfirm:M})]})}function eq(){let{t:e}=(0,l.Bd)(),t=(0,r.xW)();return(0,a.jsx)(Y,{title:e("Retry budget"),className:"shadow-none",children:(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsx)(h.zB,{control:t.control,name:"RetryTimes",render:t=>{let{field:n}=t;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:e("Maximum retries")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(p.p,{type:"number",min:0,max:99,step:1,...(0,S.X)(n)})}),(0,a.jsx)(h.Rr,{children:e("Excludes the first attempt. Counted per group.")}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:t.control,name:"AutomaticRetryStatusCodes",render:t=>{let{field:n}=t;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:e("Auto-retry status codes")}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(p.p,{...n,placeholder:e("e.g. 401, 403, 429, 500-599")})}),(0,a.jsx)(h.Rr,{children:e("2xx, 504 and 524 are always excluded.")}),(0,a.jsx)(h.C5,{})]})}})]})})}function eU(e){return{RetryTimes:Number(e.RetryTimes),AutomaticRetryStatusCodes:e.AutomaticRetryStatusCodes,channel_affinity_setting:{enabled:"true"===e["channel_affinity_setting.enabled"],session_mode:e["channel_affinity_setting.session_mode"]||"",switch_on_success:"true"===e["channel_affinity_setting.switch_on_success"],keep_on_channel_disabled:"true"===e["channel_affinity_setting.keep_on_channel_disabled"],max_entries:Number(e["channel_affinity_setting.max_entries"]),default_ttl_seconds:Number(e["channel_affinity_setting.default_ttl_seconds"]),rules:e["channel_affinity_setting.rules"]||"[]"}}}function eE(){let{t:e}=(0,l.Bd)(),t=(0,G.I)({queryKey:["request-policy"],queryFn:N,staleTime:1/0});return t.isPending?(0,a.jsx)(z.G,{}):t.isError?(0,a.jsx)(V.W,{title:e("Failed to load settings"),onRetry:()=>void t.refetch()}):(0,a.jsx)(eF,{config:t.data})}function eF(e){let{t}=(0,l.Bd)(),n=M(),i=(0,s.useMemo)(()=>d.Ik({RetryTimes:d.ai().int().min(0).max(99),AutomaticRetryStatusCodes:d.Yj().refine(e=>v(e).ok,t("Invalid status code rules")),channel_affinity_setting:d.Ik({enabled:d.zM(),session_mode:d.k5(["","off","prefer","strict"]),switch_on_success:d.zM(),keep_on_channel_disabled:d.zM(),max_entries:d.ai().int().min(0),default_ttl_seconds:d.ai().int().min(0),rules:d.Yj().superRefine((e,n)=>{try{let a=JSON.parse(e);Array.isArray(a)||n.addIssue({code:"custom",message:t("Rules JSON must be an array")})}catch{n.addIssue({code:"custom",message:t("Invalid rules JSON format")})}})})}),[t]),u=(0,s.useMemo)(()=>eU(e.config.options),[e.config.options]),p=(0,r.mN)({resolver:(0,o.u)(i),defaultValues:u}),{dirtyFields:m}=p.formState;(0,s.useEffect)(()=>{p.reset(u,{keepDirtyValues:!0})},[u,p]);let g=(0,r.FH)({control:p.control,compute:e=>e}),f=async a=>{let i={RetryTimes:String(a.RetryTimes),AutomaticRetryStatusCodes:a.AutomaticRetryStatusCodes,...Object.fromEntries(Object.entries(a.channel_affinity_setting).map(e=>{let[t,n]=e;return[`channel_affinity_setting.${t}`,String(n)]}))};i.AutomaticRetryStatusCodes=v(i.AutomaticRetryStatusCodes).normalized;let o=Object.fromEntries(Object.entries(i).filter(t=>{let[n,a]=t,i=e.config.options[n];return"channel_affinity_setting.rules"===n?JSON.stringify(JSON.parse(a))!==JSON.stringify(JSON.parse(i||"[]")):"AutomaticRetryStatusCodes"===n?a!==v(i).normalized:a!==i}));if(0===Object.keys(o).length)return void c.oR.info(t("No changes to save"));try{let e=await n.mutateAsync(o);p.reset(eU(e.options))}catch(e){(0,b.Q)(e)}},y=p.handleSubmit(e=>f(e));return(0,a.jsx)(h.lV,{...p,children:(0,a.jsxs)("div",{className:"min-w-0 space-y-5",children:[(0,a.jsx)(w.S2,{onSave:y,isSaving:n.isPending}),(0,a.jsxs)("div",{className:"min-w-0 space-y-4",children:[(0,a.jsx)(e_,{}),(0,a.jsx)(h.zB,{control:p.control,name:"channel_affinity_setting.rules",render:e=>{let{field:t}=e;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(eL,{rulesJson:t.value,onRulesChange:t.onChange,enabled:g.channel_affinity_setting.enabled,globalSessionMode:g.channel_affinity_setting.session_mode}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(eq,{}),n.isError?(0,a.jsx)("p",{role:"alert",className:"text-destructive text-sm",children:n.error.message}):null,Object.keys(m).length>0&&!i.safeParse(g).success?(0,a.jsx)(F.Fc,{children:(0,a.jsx)(F.TN,{children:t("Correct the invalid settings before saving.")})}):null]})]})})}function e_(){let{t:e}=(0,l.Bd)(),t=(0,r.xW)(),n=(0,r.FH)({control:t.control,name:"channel_affinity_setting.enabled"});return(0,a.jsxs)(Y,{title:e("Session defaults"),description:e("Rules can inherit or override these defaults."),className:"shadow-none",children:[(0,a.jsx)(h.zB,{control:t.control,name:"channel_affinity_setting.enabled",render:t=>{let{field:n}=t;return(0,a.jsx)(x.ew,{controlId:"channel_affinity_setting.enabled",checked:n.value,onCheckedChange:n.onChange,label:e("Enable session affinity")})}}),(0,a.jsx)(h.zB,{control:t.control,name:"channel_affinity_setting.session_mode",render:i=>{let{field:o}=i;return(0,a.jsxs)(h.eI,{className:"mt-4",children:[(0,a.jsx)(h.MJ,{children:(0,a.jsx)(H.z,{"aria-label":e("Session behavior"),value:o.value||"prefer",onValueChange:o.onChange,className:"gap-2 sm:grid-cols-3",children:["off","prefer","strict"].map(t=>(0,a.jsx)("div",{className:"rounded-lg border",children:(0,a.jsxs)(W.J,{htmlFor:`global-session-${t}`,className:"hover:bg-muted/30 flex h-full cursor-pointer items-center gap-3 rounded-lg px-4 py-3 font-normal",children:[(0,a.jsx)(H.C,{id:`global-session-${t}`,"aria-labelledby":`global-session-${t}-label`,"aria-describedby":"prefer"===t?"global-session-prefer-description":void 0,value:t,onClick:()=>o.onChange(t)}),(0,a.jsxs)("span",{className:"flex min-w-0 flex-wrap items-baseline gap-x-2 gap-y-1",children:[(0,a.jsx)("span",{id:`global-session-${t}-label`,children:(0,eb.x)(e,t)}),"prefer"===t?(0,a.jsx)("span",{id:"global-session-prefer-description",className:"text-muted-foreground text-xs font-normal",children:e("Reduces cache hit rate")}):null]})]})},t))})}),(0,a.jsx)(x.KF,{role:"group","aria-label":e("Channel switching options"),className:"mt-3",children:(0,a.jsx)(h.zB,{control:t.control,name:"channel_affinity_setting.switch_on_success",render:t=>{let{field:i}=t;return(0,a.jsx)(x.ew,{controlId:"channel_affinity_setting.switch_on_success",disabled:!n,checked:i.value,onCheckedChange:i.onChange,label:e("Update the session binding after a successful switch"),description:e("Later requests follow the new channel.")})}})}),(0,a.jsx)(h.C5,{})]})}}),(0,a.jsx)(h.zB,{control:t.control,name:"channel_affinity_setting.keep_on_channel_disabled",render:t=>{let{field:i}=t;return(0,a.jsx)(x.ew,{controlId:"channel_affinity_setting.keep_on_channel_disabled",className:"mt-4",disabled:!n,checked:i.value,onCheckedChange:i.onChange,label:e("Keep the session binding when the channel is unavailable"),description:e("Otherwise the binding is removed.")})}}),(0,a.jsx)(K.nD,{className:"mt-4",children:(0,a.jsx)(Q,{value:"session-advanced",title:e("Affinity cache settings"),keepMounted:!0,children:(0,a.jsx)("div",{className:"space-y-4",children:(0,a.jsx)("div",{className:"grid gap-4 sm:grid-cols-2",children:[{name:"channel_affinity_setting.max_entries",label:e("Maximum cached sessions")},{name:"channel_affinity_setting.default_ttl_seconds",label:e("Default session lifetime (seconds)")}].map(e=>(0,a.jsx)(h.zB,{control:t.control,name:e.name,render:t=>{let{field:n}=t;return(0,a.jsxs)(h.eI,{children:[(0,a.jsx)(h.lR,{children:e.label}),(0,a.jsx)(h.MJ,{children:(0,a.jsx)(p.p,{type:"number",min:0,step:1,...(0,S.X)(n)})}),(0,a.jsx)(h.C5,{})]})}},e.name))})})})})]})}let eB=[{id:"filtering",titleKey:"Request checks",build:e=>(0,a.jsx)(B,{defaultValues:{CheckSensitiveEnabled:e.CheckSensitiveEnabled,CheckSensitiveOnPromptEnabled:e.CheckSensitiveOnPromptEnabled,SensitiveWords:e.SensitiveWords}})},{id:"routing",titleKey:"Sessions and retries",build:()=>(0,a.jsx)(eE,{})},{id:"health",titleKey:"Channel health",build:e=>(0,a.jsx)(E,{defaultValues:e})}],eG=(0,i.h)({sections:eB,defaultSection:"routing",basePath:"/system-settings/request-policies",urlStyle:"path"}),eV=eG.sectionIds,ez=eG.getSectionNavItems,eK=eG.getSectionContent,eW=eG.getSectionMeta},20729(e,t,n){"use strict";n.d(t,{r1:()=>J,_f:()=>H,Pz:()=>$,lM:()=>Y,lt:()=>Q});var a=n(72361),i=n(48367),o=n(1417),s=n(72527),r=n(68413),l=n(86832),c=n(6702),d=n(49256),u=n(91460),h=n(72868),p=n(36710),m=n(1738),g=n(87212),f=n(43152),y=n(31002),b=n(44724),v=n(47182),k=n(38766),x=n(66002),w=n(32348),C=n(21505),A=n(24518),S=n(86358),P=n(60641);let T=d.Ik({groupName:d.Yj().min(1,"Group name is required"),maxRequests:d.ai().min(0,"Must be ≥ 0").max(0x7fffffff,"Must be ≤ 2,147,483,647"),maxSuccess:d.ai().min(1,"Must be ≥ 1").max(0x7fffffff,"Must be ≤ 2,147,483,647")}),I="rate-limit-form";function R(e){let{open:t,onOpenChange:n,onSave:o,editData:s}=e,{t:d}=(0,c.Bd)(),u=!!s,g=(0,l.mN)({resolver:(0,i.u)(T),defaultValues:{groupName:"",maxRequests:0,maxSuccess:1}});return(0,r.useEffect)(()=>{s?g.reset(s):g.reset({groupName:"",maxRequests:0,maxSuccess:1})},[s,g,t]),(0,a.jsx)(P.l,{open:t,onOpenChange:n,title:u?d("Edit group rate limit"):d("Add group rate limit"),description:d("Configure rate limiting rules for a specific user group."),contentClassName:"sm:max-w-[500px]",contentHeight:"auto",bodyClassName:"space-y-4",footer:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(h.$,{type:"button",variant:"outline",onClick:()=>n(!1),children:d("Cancel")}),(0,a.jsx)(h.$,{type:"submit",form:I,children:u?d("Update"):d("Add")})]}),children:(0,a.jsx)(p.lV,{...g,children:(0,a.jsxs)("form",{id:I,onSubmit:g.handleSubmit(e=>{o(e),g.reset(),n(!1)}),className:"space-y-4",children:[(0,a.jsx)(p.zB,{control:g.control,name:"groupName",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsx)(p.lR,{children:d("Group Name")}),(0,a.jsx)(p.MJ,{children:(0,a.jsx)(m.p,{placeholder:d("e.g., default, vip, premium"),...t,disabled:u})}),(0,a.jsx)(p.Rr,{children:u?d("Group name cannot be changed when editing."):d("Unique identifier for this group.")}),(0,a.jsx)(p.C5,{})]})}}),(0,a.jsx)(p.zB,{control:g.control,name:"maxRequests",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsx)(p.lR,{children:d("Max Requests (including failures)")}),(0,a.jsx)(p.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(m.p,{type:"number",min:0,max:0x7fffffff,step:1,...t,onChange:e=>t.onChange(parseInt(e.target.value)||0)}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:d("times")})]})}),(0,a.jsx)(p.Rr,{children:d("Total requests allowed per period. 0 = unlimited.")}),(0,a.jsx)(p.C5,{})]})}}),(0,a.jsx)(p.zB,{control:g.control,name:"maxSuccess",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsx)(p.lR,{children:d("Max Successful Requests")}),(0,a.jsx)(p.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(m.p,{type:"number",min:1,max:0x7fffffff,step:1,...t,onChange:e=>t.onChange(parseInt(e.target.value)||1)}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:d("times")})]})}),(0,a.jsx)(p.Rr,{children:d("Only successful requests count toward this limit.")}),(0,a.jsx)(p.C5,{})]})}})]})})})}function N(e){let{value:t,onChange:n}=e,{t:i}=(0,c.Bd)(),[o,s]=(0,r.useState)(""),[l,d]=(0,r.useState)(!1),[u,p]=(0,r.useState)(null),g=(0,r.useMemo)(()=>t&&""!==t.trim()?Object.entries((0,A.Cz)(t,{fallback:{},validator:S.LK,validatorMessage:"Rate limits must be a JSON object",context:"rate limits"})).map(e=>{let[t,n]=e;return Array.isArray(n)&&2===n.length&&"number"==typeof n[0]&&"number"==typeof n[1]?{groupName:t,maxRequests:n[0],maxSuccess:n[1]}:null}).filter(e=>null!==e):[],[t]),f=(0,r.useMemo)(()=>{if(!o)return g;let e=o.toLowerCase();return g.filter(t=>t.groupName.toLowerCase().includes(e))},[g,o]);return(0,a.jsxs)("div",{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center gap-4",children:[(0,a.jsxs)("div",{className:"relative flex-1",children:[(0,a.jsx)(k.A,{className:"text-muted-foreground absolute top-2.5 left-2.5 h-4 w-4"}),(0,a.jsx)(m.p,{placeholder:i("Search group names..."),value:o,onChange:e=>s(e.target.value),className:"pl-9"})]}),(0,a.jsxs)(h.$,{onClick:()=>{p(null),d(!0)},children:[(0,a.jsx)(x.A,{className:"mr-2 h-4 w-4"}),i("Add group")]})]}),(0,a.jsx)(w.h,{data:f,getRowKey:e=>e.groupName,emptyContent:o?i("No groups match your search"):i('No group-based rate limits configured. Click "Add group" to get started.'),columns:[{id:"group",header:i("Group Name"),cellClassName:"font-medium",cell:e=>e.groupName},{id:"max-requests",header:i("Max Requests (incl. failures)"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)("span",{className:"font-mono",children:0===e.maxRequests?i("Unlimited"):e.maxRequests.toLocaleString()})},{id:"max-success",header:i("Max Success"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)("span",{className:"font-mono",children:e.maxSuccess.toLocaleString()})},{id:"actions",header:i("Actions"),className:"text-right",cellClassName:"text-right",cell:e=>(0,a.jsx)(C._,{editLabel:i("Edit"),deleteLabel:i("Delete"),menuLabel:i("Open menu"),onEdit:()=>{p(e),d(!0)},onDelete:()=>{var a;let i;return a=e.groupName,i=(0,A.Cz)(t,{fallback:{},validator:S.LK,silent:!0}),void(delete i[a],n(JSON.stringify(i,null,2)))}})}]}),(0,a.jsx)(R,{open:l,onOpenChange:d,onSave:e=>{let a=(0,A.Cz)(t,{fallback:{},validator:S.LK,silent:!0});u&&u.groupName!==e.groupName&&delete a[u.groupName],a[e.groupName]=[e.maxRequests,e.maxSuccess],n(JSON.stringify(a,null,2))},editData:u})]})}let j=e=>{if(!e||""===e.trim())return!0;try{let t=JSON.parse(e);if("object"!=typeof t||Array.isArray(t))return!1;for(let[,e]of Object.entries(t))if(!Array.isArray(e)||2!==e.length||"number"!=typeof e[0]||"number"!=typeof e[1]||e[0]<0||e[1]<1||e[0]>0x7fffffff||e[1]>0x7fffffff)return!1;return!0}catch{return!1}};function M(e){let{defaultValues:t}=e,{t:n}=(0,c.Bd)(),k=(0,v.M)(),[x,w]=(0,r.useState)(!0),C=d.Ik({ModelRequestRateLimitEnabled:d.zM(),ModelRequestRateLimitDurationMinutes:d.ai().min(0),ModelRequestRateLimitCount:d.ai().min(0).max(1e8),ModelRequestRateLimitSuccessCount:d.ai().min(1).max(1e8),ModelRequestRateLimitGroup:d.Yj().optional().refine(j,{message:n("Invalid JSON format or values out of allowed range")})}),A=(0,l.mN)({resolver:(0,i.u)(C),mode:"onChange",defaultValues:t});(0,r.useEffect)(()=>{A.reset(t)},[t,A]);let S=async e=>{for(let[n,a]of Object.entries(e).filter(e=>{let[n,a]=e;return a!==t[n]}))await k.mutateAsync({key:n,value:a??""})};return(0,a.jsx)(b.X,{title:n("Rate Limiting"),children:(0,a.jsx)(p.lV,{...A,children:(0,a.jsxs)(f.yt,{onSubmit:A.handleSubmit(S),children:[(0,a.jsx)(y.S2,{onSave:A.handleSubmit(S),isSaving:k.isPending,saveLabel:"Save rate limits"}),(0,a.jsx)(p.zB,{control:A.control,name:"ModelRequestRateLimitEnabled",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.H,{children:[(0,a.jsxs)(f.z$,{children:[(0,a.jsx)(p.lR,{children:n("Enable rate limiting")}),(0,a.jsx)(p.Rr,{children:n("This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.")})]}),(0,a.jsx)(p.MJ,{children:(0,a.jsx)(g.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsxs)("div",{className:"grid gap-4 md:grid-cols-3",children:[(0,a.jsx)(p.zB,{control:A.control,name:"ModelRequestRateLimitDurationMinutes",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsx)(p.lR,{children:n("Limit period")}),(0,a.jsx)(p.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(m.p,{type:"number",min:0,step:1,...t,onChange:e=>t.onChange(parseInt(e.target.value)||0)}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:n("minutes")})]})}),(0,a.jsx)(p.Rr,{children:n("Time window for rate limiting")}),(0,a.jsx)(p.C5,{})]})}}),(0,a.jsx)(p.zB,{control:A.control,name:"ModelRequestRateLimitCount",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsx)(p.lR,{children:n("Max requests per period")}),(0,a.jsx)(p.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(m.p,{type:"number",min:0,max:1e8,step:1,...t,onChange:e=>t.onChange(parseInt(e.target.value)||0)}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:n("times")})]})}),(0,a.jsx)(p.Rr,{children:n("Including failed requests, 0 = unlimited")}),(0,a.jsx)(p.C5,{})]})}}),(0,a.jsx)(p.zB,{control:A.control,name:"ModelRequestRateLimitSuccessCount",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsx)(p.lR,{children:n("Max successful requests")}),(0,a.jsx)(p.MJ,{children:(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(m.p,{type:"number",min:1,max:1e8,step:1,...t,onChange:e=>t.onChange(parseInt(e.target.value)||1)}),(0,a.jsx)("span",{className:"text-muted-foreground text-sm",children:n("times")})]})}),(0,a.jsx)(p.Rr,{children:n("Only successful requests")}),(0,a.jsx)(p.C5,{})]})}})]}),(0,a.jsx)(p.zB,{control:A.control,name:"ModelRequestRateLimitGroup",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsx)(p.lR,{children:n("Group-based rate limits")}),(0,a.jsx)(h.$,{type:"button",variant:"outline",size:"sm",onClick:()=>w(!x),children:x?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.A,{className:"mr-2 h-4 w-4"}),n("JSON Mode")]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.A,{className:"mr-2 h-4 w-4"}),n("Visual Mode")]})})]}),(0,a.jsx)(p.MJ,{children:x?(0,a.jsx)(N,{value:t.value||"",onChange:t.onChange}):(0,a.jsx)(u.B,{value:t.value||"",onChange:t.onChange,name:t.name,onBlur:t.onBlur,textareaRef:t.ref,placeholder:`{ "default": [200, 100], "vip": [0, 1000] }`,"aria-invalid":!!A.formState.errors.ModelRequestRateLimitGroup})}),!x&&(0,a.jsx)(p.Rr,{children:(0,a.jsxs)("div",{className:"space-y-1 text-xs",children:[(0,a.jsx)("p",{className:"font-semibold",children:n("Format:")}),(0,a.jsxs)("ul",{className:"list-inside list-disc space-y-0.5 pl-2",children:[(0,a.jsxs)("li",{children:[n("JSON object:")," ",'{"groupName": [maxRequests, maxSuccess]}']}),(0,a.jsxs)("li",{children:[n("Example:")," ",'{"default": [200, 100], "vip": [0, 1000]}']}),(0,a.jsx)("li",{children:n("maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647")}),(0,a.jsx)("li",{children:n("Group config overrides global limits, shares the same period")})]})]})}),(0,a.jsx)(p.C5,{})]})}})]})})})}var D=n(20598),O=n(88288),L=n(70954);let q=d.Ik({fetch_setting:d.Ik({enable_ssrf_protection:d.zM(),allow_private_ip:d.zM(),domain_filter_mode:d.zM(),ip_filter_mode:d.zM(),domain_list:d.Yj(),ip_list:d.Yj(),allowed_ports:d.Yj(),apply_ip_filter_for_domain:d.zM()})}),U=e=>e.split("\n").map(e=>e.trim()).filter(Boolean),E=e=>({fetch_setting:{enable_ssrf_protection:e["fetch_setting.enable_ssrf_protection"],allow_private_ip:e["fetch_setting.allow_private_ip"],domain_filter_mode:e["fetch_setting.domain_filter_mode"],ip_filter_mode:e["fetch_setting.ip_filter_mode"],domain_list:e["fetch_setting.domain_list"].join("\n"),ip_list:e["fetch_setting.ip_list"].join("\n"),allowed_ports:e["fetch_setting.allowed_ports"].join(","),apply_ip_filter_for_domain:e["fetch_setting.apply_ip_filter_for_domain"]}}),F=e=>({"fetch_setting.enable_ssrf_protection":e["fetch_setting.enable_ssrf_protection"],"fetch_setting.allow_private_ip":e["fetch_setting.allow_private_ip"],"fetch_setting.domain_filter_mode":e["fetch_setting.domain_filter_mode"],"fetch_setting.ip_filter_mode":e["fetch_setting.ip_filter_mode"],"fetch_setting.domain_list":e["fetch_setting.domain_list"],"fetch_setting.ip_list":e["fetch_setting.ip_list"],"fetch_setting.allowed_ports":e["fetch_setting.allowed_ports"],"fetch_setting.apply_ip_filter_for_domain":e["fetch_setting.apply_ip_filter_for_domain"]});function _(e){let{defaultValues:t}=e,{t:n}=(0,c.Bd)(),o=(0,v.M)(),s=(0,r.useRef)(F(t)),d=(0,r.useMemo)(()=>E(t),[t]),u=(0,l.mN)({resolver:(0,i.u)(q),defaultValues:d});(0,r.useEffect)(()=>{s.current=F(t),u.reset(E(t))},[t,u]);let h=async e=>{let t,a={"fetch_setting.enable_ssrf_protection":(t=e).fetch_setting.enable_ssrf_protection,"fetch_setting.allow_private_ip":t.fetch_setting.allow_private_ip,"fetch_setting.domain_filter_mode":t.fetch_setting.domain_filter_mode,"fetch_setting.ip_filter_mode":t.fetch_setting.ip_filter_mode,"fetch_setting.domain_list":U(t.fetch_setting.domain_list),"fetch_setting.ip_list":U(t.fetch_setting.ip_list),"fetch_setting.allowed_ports":t.fetch_setting.allowed_ports.split(",").map(e=>Number.parseInt(e.trim(),10)).filter(e=>Number.isFinite(e)),"fetch_setting.apply_ip_filter_for_domain":t.fetch_setting.apply_ip_filter_for_domain},i=Object.keys(a).filter(e=>{var t,n;return t=a[e],n=s.current[e],Array.isArray(t)&&Array.isArray(n)?JSON.stringify(t)!==JSON.stringify(n):t!==n});if(0===i.length)return void D.oR.info(n("No changes to save"));for(let e of i){let t=a[e];await o.mutateAsync({key:e,value:Array.isArray(t)?JSON.stringify(t):t})}s.current=a},k=u.watch("fetch_setting.domain_filter_mode"),x=u.watch("fetch_setting.ip_filter_mode");return(0,a.jsx)(b.X,{title:n("SSRF Protection"),children:(0,a.jsx)(p.lV,{...u,children:(0,a.jsxs)(f.yt,{onSubmit:u.handleSubmit(h),children:[(0,a.jsx)(y.S2,{onSave:u.handleSubmit(h),isSaving:o.isPending,saveLabel:"Save SSRF settings"}),(0,a.jsx)(p.zB,{control:u.control,name:"fetch_setting.enable_ssrf_protection",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.H,{children:[(0,a.jsxs)(f.z$,{children:[(0,a.jsx)(p.lR,{children:n("Enable SSRF Protection")}),(0,a.jsx)(p.Rr,{children:n("Prevent server-side request forgery attacks")})]}),(0,a.jsx)(p.MJ,{children:(0,a.jsx)(g.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(p.zB,{control:u.control,name:"fetch_setting.allow_private_ip",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.H,{children:[(0,a.jsxs)(f.z$,{children:[(0,a.jsx)(p.lR,{children:n("Allow Private IPs")}),(0,a.jsx)(p.Rr,{children:n("Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)")})]}),(0,a.jsx)(p.MJ,{children:(0,a.jsx)(g.d,{checked:t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(p.zB,{control:u.control,name:"fetch_setting.domain_filter_mode",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsx)(p.lR,{children:n("Domain Filter Mode")}),(0,a.jsxs)(O.l6,{items:[{value:"false",label:n("Blacklist (Block listed domains)")},{value:"true",label:n("Whitelist (Only allow listed domains)")}],onValueChange:e=>t.onChange("true"===e),value:t.value?"true":"false",children:[(0,a.jsx)(p.MJ,{children:(0,a.jsx)(O.bq,{children:(0,a.jsx)(O.yv,{})})}),(0,a.jsx)(O.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(O.s3,{children:[(0,a.jsx)(O.eb,{value:"false",children:n("Blacklist (Block listed domains)")}),(0,a.jsx)(O.eb,{value:"true",children:n("Whitelist (Only allow listed domains)")})]})})]}),(0,a.jsx)(p.Rr,{children:n("Choose how to filter domains")})]})}}),(0,a.jsx)(p.zB,{control:u.control,name:"fetch_setting.domain_list",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsxs)(p.lR,{children:[n("Domain")," ",k?n("Whitelist"):n("Blacklist")]}),(0,a.jsx)(p.MJ,{children:(0,a.jsx)(L.T,{placeholder:n("example.com blocked-site.com"),rows:4,...t})}),(0,a.jsx)(p.Rr,{children:n("One domain per line")}),(0,a.jsx)(p.C5,{})]})}}),(0,a.jsx)(p.zB,{control:u.control,name:"fetch_setting.ip_filter_mode",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsx)(p.lR,{children:n("IP Filter Mode")}),(0,a.jsxs)(O.l6,{items:[{value:"false",label:n("Blacklist (Block listed IPs)")},{value:"true",label:n("Whitelist (Only allow listed IPs)")}],onValueChange:e=>t.onChange("true"===e),value:t.value?"true":"false",children:[(0,a.jsx)(p.MJ,{children:(0,a.jsx)(O.bq,{children:(0,a.jsx)(O.yv,{})})}),(0,a.jsx)(O.gC,{alignItemWithTrigger:!1,children:(0,a.jsxs)(O.s3,{children:[(0,a.jsx)(O.eb,{value:"false",children:n("Blacklist (Block listed IPs)")}),(0,a.jsx)(O.eb,{value:"true",children:n("Whitelist (Only allow listed IPs)")})]})})]}),(0,a.jsx)(p.Rr,{children:n("Choose how to filter IP addresses")})]})}}),(0,a.jsx)(p.zB,{control:u.control,name:"fetch_setting.ip_list",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsxs)(p.lR,{children:[n("IP")," ",x?n("Whitelist"):n("Blacklist")]}),(0,a.jsx)(p.MJ,{children:(0,a.jsx)(L.T,{placeholder:n("192.168.1.1 10.0.0.0/8"),rows:4,...t})}),(0,a.jsx)(p.Rr,{children:n("One IP or CIDR range per line")}),(0,a.jsx)(p.C5,{})]})}}),(0,a.jsx)(p.zB,{control:u.control,name:"fetch_setting.allowed_ports",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsx)(p.lR,{children:n("Allowed Ports")}),(0,a.jsx)(p.MJ,{children:(0,a.jsx)(m.p,{placeholder:n("80,443,8080"),...t})}),(0,a.jsx)(p.Rr,{children:n("Comma-separated list of allowed ports (empty = all ports)")}),(0,a.jsx)(p.C5,{})]})}}),(0,a.jsx)(p.zB,{control:u.control,name:"fetch_setting.apply_ip_filter_for_domain",render:e=>{let{field:t}=e;return(0,a.jsxs)(f.H,{children:[(0,a.jsxs)(f.z$,{children:[(0,a.jsx)(p.lR,{children:n("Apply IP Filter to Resolved Domains")}),(0,a.jsx)(p.Rr,{children:n("Check resolved IPs against IP filters even when accessing by domain")})]}),(0,a.jsx)(p.MJ,{children:(0,a.jsx)(g.d,{checked:t.value,onCheckedChange:t.onChange})})]})}})]})})})}let B=d.Ik({token_setting:d.Ik({max_user_tokens:d.ai().min(1)})}),G=e=>({token_setting:{max_user_tokens:e["token_setting.max_user_tokens"]}});function V(e){let{defaultValues:t}=e,{t:n}=(0,c.Bd)(),o=(0,v.M)(),s=(0,l.mN)({resolver:(0,i.u)(B),mode:"onChange",defaultValues:G(t)});(0,r.useEffect)(()=>{s.reset(G(t))},[t,s]);let d=async e=>{let n="token_setting.max_user_tokens",a={"token_setting.max_user_tokens":e.token_setting.max_user_tokens}[n];a!==t[n]&&await o.mutateAsync({key:n,value:a})};return(0,a.jsx)(b.X,{title:n("Token Limits"),children:(0,a.jsx)(p.lV,{...s,children:(0,a.jsxs)(f.yt,{onSubmit:s.handleSubmit(d),children:[(0,a.jsx)(y.S2,{onSave:s.handleSubmit(d),isSaving:o.isPending,saveLabel:"Save token limits"}),(0,a.jsx)(p.zB,{control:s.control,name:"token_setting.max_user_tokens",render:e=>{let{field:t}=e;return(0,a.jsxs)(p.eI,{children:[(0,a.jsx)(p.lR,{children:n("Maximum tokens per user")}),(0,a.jsx)(p.MJ,{children:(0,a.jsx)(m.p,{type:"number",min:1,step:1,...t,onChange:e=>t.onChange(Number.parseInt(e.target.value)||1)})}),(0,a.jsx)(p.Rr,{children:n("Maximum number of tokens each user can create. Default 1000. Setting too large may affect performance.")}),(0,a.jsx)(p.C5,{})]})}})]})})})}var z=n(38159);let K=[{id:"rate-limit",titleKey:"Rate Limiting",build:e=>(0,a.jsx)(M,{defaultValues:{ModelRequestRateLimitEnabled:e.ModelRequestRateLimitEnabled,ModelRequestRateLimitCount:e.ModelRequestRateLimitCount,ModelRequestRateLimitSuccessCount:e.ModelRequestRateLimitSuccessCount,ModelRequestRateLimitDurationMinutes:e.ModelRequestRateLimitDurationMinutes,ModelRequestRateLimitGroup:e.ModelRequestRateLimitGroup}})},{id:"ssrf",titleKey:"SSRF Protection",build:e=>(0,a.jsx)(_,{defaultValues:{"fetch_setting.enable_ssrf_protection":e["fetch_setting.enable_ssrf_protection"],"fetch_setting.allow_private_ip":e["fetch_setting.allow_private_ip"],"fetch_setting.domain_filter_mode":e["fetch_setting.domain_filter_mode"],"fetch_setting.ip_filter_mode":e["fetch_setting.ip_filter_mode"],"fetch_setting.domain_list":e["fetch_setting.domain_list"],"fetch_setting.ip_list":e["fetch_setting.ip_list"],"fetch_setting.allowed_ports":e["fetch_setting.allowed_ports"],"fetch_setting.apply_ip_filter_for_domain":e["fetch_setting.apply_ip_filter_for_domain"]}})},{id:"token-limits",titleKey:"Token Limits",build:e=>(0,a.jsx)(V,{defaultValues:{"token_setting.max_user_tokens":e["token_setting.max_user_tokens"]}})}],W=(0,z.h)({sections:K,defaultSection:"rate-limit",basePath:"/system-settings/security",urlStyle:"path"}),H=W.sectionIds,J=W.defaultSection,Q=W.getSectionNavItems,$=W.getSectionContent,Y=W.getSectionMeta},98500(e,t,n){"use strict";n.d(t,{O0:()=>_,$K:()=>F,ob:()=>G,gk:()=>V,o3:()=>B});var a=n(72361),i=n(48367),o=n(6702),s=n(49256),r=n(36710),l=n(1738),c=n(70954),d=n(27784),u=n(41064),h=n(43152),p=n(31002),m=n(44724),g=n(75033),f=n(47182);function y(e){if(""===e)return!0;if(e!==e.trim()||!/^https?:\/\//i.test(e)||e.includes("?")||e.includes("#"))return!1;for(let t of e){let e=t.codePointAt(0)??0;if(e<=31||127===e||"\\"===t)return!1}try{let t=new URL(e),n=e.indexOf("//")+2,a=e.indexOf("/",n),i=e.slice(n,-1===a?e.length:a);return("https:"===t.protocol||"http:"===t.protocol)&&t.hostname.length>0&&!i.includes("@")&&""===t.username&&""===t.password&&""===t.search&&""===t.hash}catch{return!1}}function b(e){return null==e?"":"string"==typeof e?e:String(e)}function v(e){let{defaultValues:t}=e,{t:n}=(0,o.Bd)(),v=(0,f.M)(),k={SystemName:b(t.SystemName),ServerAddress:b(t.ServerAddress),TaskPublicAddress:b(t.TaskPublicAddress),Logo:b(t.Logo),Footer:b(t.Footer),About:b(t.About),HomePageContent:b(t.HomePageContent),general_setting:{docs_link:b(t.general_setting?.docs_link)},legal:{user_agreement:b(t.legal?.user_agreement),privacy_policy:b(t.legal?.privacy_policy)}},x=s.Ik({SystemName:s.Yj().min(1,{error:()=>n("System name is required")}),ServerAddress:s.Yj().optional(),TaskPublicAddress:s.Yj().refine(y,{error:()=>n("Enter an absolute HTTP(S) URL without credentials, query parameters, or fragments")}),Logo:s.Yj().url().optional().or(s.eu("")),Footer:s.Yj().optional(),About:s.Yj().optional(),HomePageContent:s.Yj().optional(),general_setting:s.Ik({docs_link:s.Yj()}),legal:s.Ik({user_agreement:s.Yj().optional(),privacy_policy:s.Yj().optional()})}),{form:w,handleSubmit:C,handleReset:A,isDirty:S,isSubmitting:P}=(0,g.T)({resolver:(0,i.u)(x),defaultValues:k,onSubmit:async(e,t)=>{for(let[e,n]of Object.entries(t)){let t=b(n);("ServerAddress"===e||"TaskPublicAddress"===e)&&(t=t.replace(/\/+$/,"")),await v.mutateAsync({key:e,value:t})}}});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(u.s,{when:S}),(0,a.jsx)(m.X,{title:n("System Information"),children:(0,a.jsx)(r.lV,{...w,children:(0,a.jsxs)(h.yt,{onSubmit:C,children:[(0,a.jsx)(p.S2,{onSave:C,onReset:A,isSaving:P||v.isPending,isResetDisabled:!S}),(0,a.jsx)(d._,{isDirty:S}),(0,a.jsxs)(h.K1,{children:[(0,a.jsx)(r.zB,{control:w.control,name:"SystemName",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("System Name")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(l.p,{placeholder:n("New API"),...t})}),(0,a.jsx)(r.Rr,{children:n("The name displayed across the application")}),(0,a.jsx)(r.C5,{})]})}}),(0,a.jsx)(r.zB,{control:w.control,name:"ServerAddress",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("Server Address")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(l.p,{placeholder:"https://yourdomain.com",...t})}),(0,a.jsx)(r.Rr,{children:n("The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations")}),(0,a.jsx)(r.C5,{})]})}}),(0,a.jsx)(r.zB,{control:w.control,name:"TaskPublicAddress",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("Async Task Public Address")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(l.p,{placeholder:"https://media.example.com/tasks",...t})}),(0,a.jsx)(r.Rr,{children:n("Public base URL for async task media. Supports a dedicated media domain, port, or Nginx path prefix; falls back to Server Address when empty.")}),(0,a.jsx)(r.C5,{})]})}}),(0,a.jsx)(r.zB,{control:w.control,name:"Logo",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("Logo URL")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(l.p,{placeholder:n("https://example.com/logo.png"),...t})}),(0,a.jsx)(r.Rr,{children:n("URL to your logo image (optional)")}),(0,a.jsx)(r.C5,{})]})}}),(0,a.jsx)(r.zB,{control:w.control,name:"general_setting.docs_link",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("Documentation Link")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(l.p,{placeholder:n("https://docs.example.com"),...t})}),(0,a.jsx)(r.Rr,{children:n("Link to your documentation site")}),(0,a.jsx)(r.C5,{})]})}}),(0,a.jsx)(r.zB,{control:w.control,name:"Footer",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("Footer")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(c.T,{placeholder:n("© 2025 Your Company. All rights reserved."),rows:4,...t})}),(0,a.jsx)(r.Rr,{children:n("Footer text displayed at the bottom of pages")}),(0,a.jsx)(r.C5,{})]})}}),(0,a.jsx)(r.zB,{control:w.control,name:"About",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("About")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(c.T,{placeholder:n("Enter HTML code (e.g.,

About us...

) or a URL (e.g., https://example.com) to embed as iframe"),rows:4,...t})}),(0,a.jsx)(r.Rr,{children:n("Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.")}),(0,a.jsx)(r.C5,{})]})}}),(0,a.jsx)(h.vF,{span:"full",children:(0,a.jsx)(r.zB,{control:w.control,name:"HomePageContent",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("Home Page Content")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(c.T,{placeholder:n("Welcome to our New API..."),rows:6,...t})}),(0,a.jsx)(r.Rr,{children:n("Content displayed on the home page (supports Markdown)")}),(0,a.jsx)(r.C5,{})]})}})}),(0,a.jsx)(r.zB,{control:w.control,name:"legal.user_agreement",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("User Agreement")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(c.T,{placeholder:n("Provide Markdown, HTML, or an external URL for the user agreement"),rows:6,...t})}),(0,a.jsx)(r.Rr,{children:n("Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.")}),(0,a.jsx)(r.C5,{})]})}}),(0,a.jsx)(r.zB,{control:w.control,name:"legal.privacy_policy",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("Privacy Policy")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(c.T,{placeholder:n("Provide Markdown, HTML, or an external URL for the privacy policy"),rows:6,...t})}),(0,a.jsx)(r.Rr,{children:n("Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.")}),(0,a.jsx)(r.C5,{})]})}})]})]})})})]})}s.Ik({SystemName:s.Yj().min(1),ServerAddress:s.Yj().optional(),TaskPublicAddress:s.Yj().refine(y),Logo:s.Yj().url().optional().or(s.eu("")),Footer:s.Yj().optional(),About:s.Yj().optional(),HomePageContent:s.Yj().optional(),general_setting:s.Ik({docs_link:s.Yj()}),legal:s.Ik({user_agreement:s.Yj().optional(),privacy_policy:s.Yj().optional()})});let k={home:!0,console:!0,pricing:{enabled:!0,requireAuth:!1},rankings:{enabled:!0,requireAuth:!1},docs:!0,about:!0},x={chat:{enabled:!0,playground:!0,chat:!0},console:{enabled:!0,detail:!0,token:!0,log:!0,audit:!0,midjourney:!0,task:!0},personal:{enabled:!0,topup:!0,personal:!0,security:!0},admin:{enabled:!0,channel:!0,models:!0,redemption:!0,user:!0,setting:!0,subscription:!0}},w=(e,t)=>{if("boolean"==typeof e)return e;if("number"==typeof e)return 1===e;if("string"==typeof e){let t=e.trim().toLowerCase();if("true"===t||"1"===t)return!0;if("false"===t||"0"===t)return!1}return t},C=(e,t)=>"boolean"==typeof e||"string"==typeof e||"number"==typeof e?{enabled:w(e,t.enabled),requireAuth:t.requireAuth}:e&&"object"==typeof e?{enabled:w(e.enabled,t.enabled),requireAuth:w(e.requireAuth,t.requireAuth)}:{...t};function A(e){return JSON.stringify(e)}function S(e){return JSON.stringify(e)}var P=n(68413),T=n(86832),I=n(87212);let R=s.Ik({home:s.zM(),console:s.zM(),pricingEnabled:s.zM(),pricingRequireAuth:s.zM(),rankingsEnabled:s.zM(),rankingsRequireAuth:s.zM(),docs:s.zM(),about:s.zM()}),N=e=>({home:void 0===e.home?k.home:!!e.home,console:void 0===e.console?k.console:!!e.console,pricingEnabled:e.pricing?.enabled===void 0?k.pricing.enabled:!!e.pricing.enabled,pricingRequireAuth:e.pricing?.requireAuth===void 0?k.pricing.requireAuth:!!e.pricing.requireAuth,rankingsEnabled:e.rankings?.enabled===void 0?k.rankings.enabled:!!e.rankings.enabled,rankingsRequireAuth:e.rankings?.requireAuth===void 0?k.rankings.requireAuth:!!e.rankings.requireAuth,docs:void 0===e.docs?k.docs:!!e.docs,about:void 0===e.about?k.about:!!e.about});function j(e){let{config:t,initialSerialized:n}=e,{t:s}=(0,o.Bd)(),l=(0,f.M)(),c=(0,P.useMemo)(()=>N(t),[t]),d=(0,T.mN)({resolver:(0,i.u)(R),defaultValues:c});(0,P.useEffect)(()=>{d.reset(c)},[c,d]);let u=async e=>{let a=A({...t,home:e.home,console:e.console,docs:e.docs,about:e.about,pricing:{...t.pricing??k.pricing,enabled:e.pricingEnabled,requireAuth:e.pricingRequireAuth},rankings:{...t.rankings??k.rankings,enabled:e.rankingsEnabled,requireAuth:e.rankingsRequireAuth}});a!==n&&await l.mutateAsync({key:"HeaderNavModules",value:a})},g=[{key:"home",title:s("Home"),description:s("Landing page with system overview.")},{key:"console",title:s("Console"),description:s("User dashboard and quota controls.")},{key:"docs",title:s("Docs"),description:s("Documentation or external knowledge base.")},{key:"about",title:s("About"),description:s("Static page describing the platform.")}],y=[{enabledKey:"pricingEnabled",requireAuthKey:"pricingRequireAuth",requireAuthDependsOn:"pricingEnabled",title:s("Model Square"),description:s("Public model catalog and pricing page."),requireAuthTitle:s("Require login to view models"),requireAuthDescription:s("Visitors must authenticate before accessing the pricing directory.")},{enabledKey:"rankingsEnabled",requireAuthKey:"rankingsRequireAuth",requireAuthDependsOn:"rankingsEnabled",title:s("Rankings"),description:s("Public rankings page based on live usage data."),requireAuthTitle:s("Require login to view rankings"),requireAuthDescription:s("Visitors must authenticate before accessing the rankings page.")}];return(0,a.jsx)(m.X,{title:s("Header navigation"),children:(0,a.jsx)(r.lV,{...d,children:(0,a.jsxs)(h.yt,{onSubmit:d.handleSubmit(u),children:[(0,a.jsx)(p.S2,{onSave:d.handleSubmit(u),onReset:()=>{d.reset(N(k))},isSaving:l.isPending,resetLabel:"Reset to default",saveLabel:"Save navigation"}),(0,a.jsx)("div",{className:"grid gap-4 md:grid-cols-2",children:g.map(e=>(0,a.jsx)(r.zB,{control:d.control,name:e.key,render:t=>{let{field:n}=t;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(r.lR,{children:e.title}),(0,a.jsx)(r.Rr,{children:e.description})]}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(I.d,{checked:n.value,onCheckedChange:n.onChange})}),(0,a.jsx)(r.C5,{})]})}},e.key))}),(0,a.jsx)("div",{className:"grid gap-4 lg:grid-cols-2",children:y.map(e=>(0,a.jsxs)(h.WY,{children:[(0,a.jsx)(r.zB,{control:d.control,name:e.enabledKey,render:t=>{let{field:n}=t;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(r.lR,{children:e.title}),(0,a.jsx)(r.Rr,{children:e.description})]}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(I.d,{checked:n.value,onCheckedChange:n.onChange})}),(0,a.jsx)(r.C5,{})]})}}),(0,a.jsx)(r.zB,{control:d.control,name:e.requireAuthKey,render:t=>{let{field:n}=t;return(0,a.jsx)(h.KF,{children:(0,a.jsxs)(h.H,{className:"py-2",children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(r.lR,{children:e.requireAuthTitle}),(0,a.jsx)(r.Rr,{children:e.requireAuthDescription})]}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(I.d,{checked:n.value,onCheckedChange:n.onChange,disabled:!d.watch(e.requireAuthDependsOn)})}),(0,a.jsx)(r.C5,{})]})})}})]},e.enabledKey))})]})})})}let M=s.Ik({Notice:s.Yj().optional()});function D(e){let{defaultValue:t}=e,{t:n}=(0,o.Bd)(),s=(0,f.M)(),l=(0,T.mN)({resolver:(0,i.u)(M),defaultValues:{Notice:t??""}});(0,P.useEffect)(()=>{l.reset({Notice:t??""})},[t,l]);let d=async e=>{let n=e.Notice??"";n!==(t??"")&&await s.mutateAsync({key:"Notice",value:n})};return(0,a.jsx)(m.X,{title:n("System Notice"),children:(0,a.jsx)(r.lV,{...l,children:(0,a.jsxs)(h.yt,{onSubmit:l.handleSubmit(d),children:[(0,a.jsx)(p.S2,{onSave:l.handleSubmit(d),isSaving:s.isPending,saveLabel:"Save notice"}),(0,a.jsx)(r.zB,{control:l.control,name:"Notice",render:e=>{let{field:t}=e;return(0,a.jsxs)(r.eI,{children:[(0,a.jsx)(r.lR,{children:n("Announcement content")}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(c.T,{rows:8,placeholder:n("Planned maintenance on Friday at 22:00 UTC..."),...t})}),(0,a.jsx)(r.C5,{})]})}})]})})})}let O=e=>e.replaceAll(/[_-]+/g," ").replaceAll(/\b\w/g,e=>e.toUpperCase());function L(e){let{config:t,initialSerialized:n}=e,{t:i}=(0,o.Bd)(),s=(0,f.M)(),l={chat:{title:i("Chat area"),description:i("Playground experiments and live conversations.")},console:{title:i("Console area"),description:i("Dashboards, tokens, and usage analytics.")},personal:{title:i("Personal area"),description:i("Wallet management and personal preferences.")},admin:{title:i("Admin area"),description:i("Global configuration and administrative tools.")}},c={chat:{playground:{title:i("Playground"),description:i("Experiment with prompts and models in real time.")},chat:{title:i("Chat"),description:i("Access previous conversations and start new ones.")}},console:{detail:{title:i("Dashboard"),description:i("Aggregated usage metrics and trend charts.")},token:{title:i("Token management"),description:i("Create, revoke, and audit API tokens.")},log:{title:i("Usage logs"),description:i("Detailed request logs for investigations.")},audit:{title:i("Audit Logs"),description:i("Login, security and access records")},midjourney:{title:i("Drawing logs"),description:i("History of MjProxy-style image tasks.")},task:{title:i("Task logs"),description:i("Background job tracker for queued work.")}},personal:{topup:{title:i("Wallet"),description:i("Top up balance and view billing history.")},personal:{title:i("Profile"),description:i("Personal settings and profile management.")},security:{title:i("Security & Access"),description:i("Manage your security settings and account access")}},admin:{channel:{title:i("Channels"),description:i("Configure upstream providers and routing.")},models:{title:i("Models"),description:i("Manage catalog visibility and pricing.")},redemption:{title:i("Redeem codes"),description:i("Create and review invite or credit codes.")},user:{title:i("Users"),description:i("Administer user accounts and roles.")},setting:{title:i("System settings"),description:i("Advanced platform configuration.")},subscription:{title:i("Subscription Management"),description:i("Manage subscription plans and pricing.")}}},d=(0,P.useMemo)(()=>t,[t]),u=(0,T.mN)({defaultValues:d});(0,P.useEffect)(()=>{u.reset(d)},[d,u]);let g=async e=>{let t=S(e);t!==n&&await s.mutateAsync({key:"SidebarModulesAdmin",value:t})},y=Object.entries(t);return(0,a.jsx)(m.X,{title:i("Sidebar modules"),children:(0,a.jsx)(r.lV,{...u,children:(0,a.jsxs)(h.yt,{onSubmit:u.handleSubmit(g),children:[(0,a.jsx)(p.S2,{onSave:u.handleSubmit(g),onReset:()=>{u.reset(x)},isSaving:s.isPending,resetLabel:"Reset to default",saveLabel:"Save sidebar modules"}),y.map(e=>{let[t,n]=e,o=l[t]??{title:O(t),description:i("Custom sidebar section")},s=Object.entries(n).filter(e=>{let[t]=e;return"enabled"!==t});return(0,a.jsxs)(h.WY,{children:[(0,a.jsx)(r.zB,{control:u.control,name:`${t}.enabled`,render:e=>{let{field:t}=e;return(0,a.jsxs)(h.H,{children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(r.lR,{children:o.title}),(0,a.jsx)(r.Rr,{children:o.description})]}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(I.d,{checked:!!t.value,onCheckedChange:t.onChange})})]})}}),(0,a.jsx)(h.KF,{className:"grid gap-3 md:grid-cols-2",children:s.map(e=>{let[n]=e,o=c[t]?.[n]??{title:O(n),description:i("Custom module")};return(0,a.jsx)(r.zB,{control:u.control,name:`${t}.${n}`,render:e=>{let{field:n}=e;return(0,a.jsxs)(h.H,{className:"py-2",children:[(0,a.jsxs)(h.z$,{children:[(0,a.jsx)(r.lR,{children:o.title}),(0,a.jsx)(r.Rr,{children:o.description})]}),(0,a.jsx)(r.MJ,{children:(0,a.jsx)(I.d,{checked:!!n.value,onCheckedChange:n.onChange,disabled:!u.watch(`${t}.enabled`)})})]})}},`${t}.${n}`)})})]},t)})]})})})}var q=n(38159);let U=[{id:"system-info",titleKey:"System Information",build:e=>(0,a.jsx)(v,{defaultValues:{SystemName:e.SystemName,Logo:e.Logo,Footer:e.Footer,About:e.About,HomePageContent:e.HomePageContent,ServerAddress:e.ServerAddress,TaskPublicAddress:e.TaskPublicAddress,general_setting:{docs_link:e["general_setting.docs_link"]},legal:{user_agreement:e["legal.user_agreement"],privacy_policy:e["legal.privacy_policy"]}}})},{id:"notice",titleKey:"System Notice",build:e=>(0,a.jsx)(D,{defaultValue:e.Notice??""})},{id:"header-navigation",titleKey:"Header navigation",build:e=>{let t=function(e){let t={...k,pricing:{...k.pricing},rankings:{...k.rankings}};if(!e)return t;try{let n=JSON.parse(e),a={...t,pricing:{...t.pricing},rankings:{...t.rankings}};return Object.entries(n).forEach(e=>{let[n,i]=e;if("pricing"===n){a.pricing=C(i,t.pricing);return}if("rankings"===n){a.rankings=C(i,t.rankings);return}if("boolean"==typeof i){a[n]=i;return}if("string"==typeof i||"number"==typeof i){a[n]=w(i,!!t[n]);return}}),a}catch{return t}}(e.HeaderNavModules),n=A(t);return(0,a.jsx)(j,{config:t,initialSerialized:n})}},{id:"sidebar-modules",titleKey:"Sidebar modules",build:e=>{let t=function(e){let t=Object.entries(x).reduce((e,t)=>{let[n,a]=t;return e[n]={...a},e},{});if(!e||""===e.trim())return t;try{let n=JSON.parse(e),a={};return Object.entries(n).forEach(e=>{let[n,i]=e;if(!i||"object"!=typeof i)return;let o=t[n]??{enabled:!0},s={enabled:w(i.enabled,o.enabled??!0)};Object.entries(i).forEach(e=>{let[t,n]=e;"enabled"!==t&&(s[t]=w(n,o[t]??!0))}),a[n]=s}),Object.entries(t).forEach(e=>{let[t,n]=e;if(!a[t]){a[t]={...n};return}Object.entries(n).forEach(e=>{let[n,i]=e;n in a[t]||(a[t][n]=i)})}),a}catch{return t}}(e.SidebarModulesAdmin),n=S(t);return(0,a.jsx)(L,{config:t,initialSerialized:n})}}],E=(0,q.h)({sections:U,defaultSection:"system-info",basePath:"/system-settings/site",urlStyle:"path"}),F=E.sectionIds,_=E.defaultSection,B=E.getSectionNavItems,G=E.getSectionContent,V=E.getSectionMeta},24518(e,t,n){"use strict";function a(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{fallback:n,silent:a=!1,context:i}=t;if(!e||""===e.trim())return n??null;let o=e.trim();try{return JSON.parse(o)}catch(e){return n??null}}function i(e,t){let{fallback:n,validator:i,validatorMessage:o,context:s,silent:r=!1}=t,l=a(e,{fallback:n,silent:!0,context:s});return i(l)?l:n}n.d(t,{Cz:()=>i,jD:()=>a})},86358(e,t,n){"use strict";n.d(t,{},{LK:e=>"object"==typeof e&&null!==e&&!Array.isArray(e),cy:e=>Array.isArray(e)})},74750(e,t,n){"use strict";var a=n(49256);function i(e){return a.ai().int(e).positive(e)}function o(e){let t=e.value;return{value:"number"==typeof t&&Number.isFinite(t)?t:"",onChange:t=>{let n=t.target.valueAsNumber;Number.isFinite(n)&&e.onChange(n)},onBlur:e.onBlur,name:e.name,ref:e.ref}}n.d(t,{X:()=>o,d:()=>i})},38159(e,t,n){"use strict";function a(e){let{sections:t,defaultSection:n,basePath:a,urlStyle:i="query"}=e;function o(e){return t.find(t=>t.id===e)??t[0]}return{sectionIds:t.map(e=>e.id),defaultSection:n,getSectionNavItems:function(e){return t.map(t=>({title:e(t.titleKey),url:"path"===i?`${a}/${t.id}`:`${a}?section=${t.id}`}))},getSectionContent:function(e,t){for(var n=arguments.length,a=Array(n>2?n-2:0),i=2;ia})},19729(e,t,n){"use strict";n.d(t,{t:()=>et});var a=n(72361),i=n(4895),o=n(58787),s=n(54666),r=n(74401),l=n(68413),c=n(6702),d=n(90879),u=n(72868),h=n(81825),p=n(89795),m=n(56275),g=n(52523),f=n(60641),y=n(43284),b=n(97785),v=n(33271),k=n(49256),x=n(83077);let w=k.Ik({tag_name:k.Yj().trim().min(1),name:k.Yj().nullable().optional(),body:k.Yj().nullable().optional(),published_at:x.w$().nullable().optional(),prerelease:k.zM()}),C={alpha:0,beta:1,rc:2,stable:3,patch:4};function A(e){let t=e?.trim().match(/^v?(\d+(?:\.\d+){2,})(?:-(alpha|beta|rc|patch)(?:\.(\d+))?(?:-i18nfix\.(\d+))?)?(?:\+[\da-zA-Z.-]+)?$/);if(!t||t[4]&&"rc"!==t[2])return null;let n=t[1].split(".").map(e=>BigInt(e));return n.every(e=>0n===e)?null:{core:n,stage:C[t[2]??"stable"],sequence:BigInt(t[3]??"0"),revision:BigInt(t[4]??"0")}}function S(e,t){let n=A(e),a=A(t);if(!n||!a)return null;for(let e=0;et.abort();e.addEventListener("abort",n,{once:!0}),e.aborted&&t.abort();let a=setTimeout(n,1e4);try{let e=await fetch("https://api.github.com/repos/QuantumNous/new-api/releases?per_page=100",{credentials:"omit",headers:{Accept:"application/vnd.github+json"},signal:t.signal});if(403===e.status||429===e.status)throw new L("rate-limit");if(!e.ok)throw new L("network");try{return function(e){if(!Array.isArray(e))throw Error("Unexpected release payload");let t=null,n=0===e.length;for(let a of e){let e=P.safeParse(a);if(!e.success)continue;n=!0;let i=e.data;!i.draft&&A(i.tag_name)&&(t&&1!==S(i.tag_name,t.tag_name)||(t=w.parse(i)))}if(!n)throw Error("Unexpected release payload");return t}(await e.json())}catch(e){if(t.signal.aborted)throw e;throw new L("payload")}}catch(n){if(e.aborted)throw n;if(t.signal.aborted)throw new L("timeout");if(n instanceof L)throw n;throw new L("network")}finally{clearTimeout(a),e.removeEventListener("abort",n)}}var U=n(79540),E=n(71795);let F=k.Ik({release:w.nullable(),lastCheckedAt:k.ai().finite().nonnegative(),lastAttemptAt:k.ai().finite().nonnegative(),error:k.k5(["network","rate-limit","timeout","payload"]).nullable()}).refine(e=>e.lastCheckedAt<=e.lastAttemptAt&&e.lastAttemptAt<=Date.now()),_={getItem:e=>{try{return localStorage.getItem(e)}catch{return null}},setItem:(e,t)=>{try{localStorage.setItem(e,t)}catch{}},removeItem:e=>{try{localStorage.removeItem(e)}catch{}}},B=(0,U.v)()((0,E.Zr)(e=>({snapshot:null,setSnapshot:t=>e({snapshot:t})}),{name:"system-update:v1",storage:(0,E.KU)(()=>_),partialize:e=>({snapshot:e.snapshot}),merge:(e,t)=>{let n=k.Ik({snapshot:F.nullable()}).safeParse(e);return{...t,snapshot:n.success?n.data.snapshot:null}}})),G="system-update-preferences:v1",V=k.Ik({ignoredVersionsByUserId:k.g1(k.Yj().regex(/^[1-9]\d*$/),k.YO(k.Yj().min(1)))}),z=(0,U.v)()((0,E.Zr)(e=>({ignoredVersionsByUserId:{},setVersionIgnored:(t,n,a)=>{e(e=>{let i=e.ignoredVersionsByUserId[t]??[];if(i.includes(n)===a)return e;let o={...e.ignoredVersionsByUserId},s=a?[...i,n]:i.filter(e=>e!==n);return s.length?o[t]=s:delete o[t],{ignoredVersionsByUserId:o}})}}),{name:G,storage:(0,E.KU)(()=>_),partialize:e=>({ignoredVersionsByUserId:e.ignoredVersionsByUserId}),merge:(e,t)=>{let n=V.safeParse(e);return{...t,ignoredVersionsByUserId:n.success?n.data.ignoredVersionsByUserId:{}}}})),K=0;function W(e){(e.key===G||null===e.key)&&z.persist.rehydrate()}function H(e){let t=z.subscribe(e);return 0==K++&&(window.addEventListener("storage",W),z.persist.rehydrate()),()=>{t(),0==--K&&window.removeEventListener("storage",W)}}let J=["system-update"];function Q(e,t){switch(e){case"rate-limit":return t("GitHub rate limit reached. Try again later.");case"timeout":return t("Update check timed out. Try again.");case"payload":return t("Unexpected release payload");default:return t("Failed to check for updates")}}let $=(0,T.j)({queryKey:J,queryFn:async e=>{let t,{signal:n,client:a}=e;a.fetchQuery({...O.d6,meta:{errorToast:!1}}).catch(()=>void 0);try{let e=await q(n);n.throwIfAborted();let a=Date.now();t={release:e,lastCheckedAt:a,lastAttemptAt:a,error:null}}catch(a){if(n.aborted)throw a;let e=B.getState().snapshot;t={release:e?.release??null,lastCheckedAt:e?.lastCheckedAt??0,lastAttemptAt:Date.now(),error:a instanceof L?a.code:"network"}}return B.getState().setSnapshot(t),t},initialData:()=>B.getState().snapshot??void 0,initialDataUpdatedAt:()=>B.getState().snapshot?.lastAttemptAt,staleTime:36e5,gcTime:864e5,retry:!1,meta:{errorToast:!1},refetchOnWindowFocus:!0,refetchOnReconnect:!0,refetchIntervalInBackground:!1,refetchInterval:e=>"fetching"!==e.state.fetchStatus&&Math.max(1e3,36e5-(Date.now()-(e.state.data?.lastAttemptAt??0)))});function Y(){return I.m.isFocused()}function X(){return R.t.isOnline()&&("u"Promise.all([n.e(35875),n.e(74400)]).then(n.bind(n,26403)).then(e=>({default:e.Markdown})));function ee(e){let{t}=(0,c.Bd)(),n=e.update,i=n.release,o=n.snapshot,s=i?`https://github.com/QuantumNous/new-api/releases/tag/${encodeURIComponent(i.tag_name)}`:null,r=i&&(i.prerelease||(A(i.tag_name)?.stage??3)<3),h=i&&(n.hasUpdate||null===n.comparison),p=t("Updates have not been checked yet.");return n.checking?p=t("Checking updates..."):i?p=n.isIgnored?t("This version is ignored"):null===n.comparison?"":n.hasUpdate?t("New version available: {{version}}",{version:i.tag_name}):t("No newer version available."):o?.lastCheckedAt&&(p=t("No releases found.")),(0,a.jsxs)(f.l,{open:e.open,onOpenChange:e.onOpenChange,trigger:e.trigger,title:t("System updates"),bodyClassName:"space-y-4",footerClassName:"sm:flex-wrap",footer:(0,a.jsxs)(a.Fragment,{children:[(h||n.isIgnored)&&(0,a.jsx)(u.$,{type:"button",variant:"ghost",className:"sm:me-auto",onClick:()=>n.setIgnored(!n.isIgnored),children:t(n.isIgnored?"Restore notifications":"Ignore this version")}),(0,a.jsx)(u.$,{type:"button",variant:"outline",disabled:n.checking||!n.online,onClick:()=>void n.checkNow(),children:t(n.checking?"Checking updates...":"Check again")}),s&&(0,a.jsx)(u.$,{nativeButton:!1,role:"link",render:(0,a.jsx)("a",{href:s,target:"_blank",rel:"noopener noreferrer"}),children:t("Go to GitHub")})]}),children:[(0,a.jsxs)("dl",{className:"grid min-w-0 gap-3 text-sm sm:grid-cols-2",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("dt",{className:"text-muted-foreground",children:t("Current version")}),(0,a.jsx)("dd",{className:"font-medium break-all",children:n.currentVersion||t("Unknown version")})]}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("dt",{className:"text-muted-foreground",children:t("Latest version")}),(0,a.jsxs)("dd",{className:"flex flex-wrap items-center gap-2 font-medium break-all",children:[i?.tag_name||t("Unknown"),r&&(0,a.jsx)(d.E,{variant:"warning",children:t("Pre-release")})]})]}),i?.published_at&&(0,a.jsxs)("div",{children:[(0,a.jsx)("dt",{className:"text-muted-foreground",children:t("Published at")}),(0,a.jsx)("dd",{children:(0,v.fk)(Date.parse(i.published_at),"milliseconds")})]})]}),p&&(0,a.jsx)("p",{role:"status","aria-live":"polite",className:"text-sm",children:p}),!n.online&&(0,a.jsx)(y.Fc,{children:(0,a.jsx)(y.TN,{children:t("You are offline. Updates will be checked when you reconnect.")})}),o?.error&&(0,a.jsx)(y.Fc,{variant:"destructive",children:(0,a.jsxs)(y.TN,{children:[Q(o.error,t),i&&(0,a.jsx)("p",{children:t("Showing the last successfully checked release.")})]})}),e.open&&i&&(0,a.jsx)(l.Suspense,{fallback:(0,a.jsx)(b.E,{className:"h-24 w-full"}),children:i.body?(0,a.jsx)(Z,{baseUrl:s??void 0,children:i.body}):(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:t("No release notes provided.")})})]})}function et(e){return(0,g.n)(e=>(e.auth.user?.role??0)>=p.z7.ADMIN)?(0,a.jsx)(en,{...e}):null}function en(e){let{t}=(0,c.Bd)(),n=function(){let{t:e}=(0,c.Bd)(),t=(0,g.n)(e=>e.auth.user),n=(t?.role??0)>=p.z7.ADMIN,a=(0,l.useSyncExternalStore)(I.m.subscribe,Y),i=(0,l.useSyncExternalStore)(R.t.subscribe,X),{status:o}=(0,M.s)(),s=(0,N.jE)(),r=(0,j.I)({...$,enabled:n&&a&&i});(0,l.useEffect)(()=>{n||s.cancelQueries({queryKey:J})},[n,s]);let d=o?.version?.trim(),u="v0.0.0"===d||"0.0.0"===d?void 0:d||void 0,h=r.data?.release??null,m=S(u,h?.tag_name),f=-1===m,y=(0,l.useSyncExternalStore)(H,()=>!!(t&&h&&z.getState().ignoredVersionsByUserId[t.id]?.includes(h.tag_name))),b=async()=>{if(!n||!i)return;let t=await r.refetch({cancelRefetch:!1});t.data?.error&&(0,D.Q)(Error(Q(t.data.error,e)))};return{currentVersion:u,release:h,comparison:m,hasUpdate:f,isIgnored:y,shouldNotify:n&&f&&!y,setIgnored:e=>{n&&t&&h&&z.getState().setVersionIgnored(t.id,h.tag_name,e)},checking:r.isFetching,online:i,snapshot:r.data,checkNow:b}}(),[f,y]=(0,l.useState)(!1),b=e.compact??!0,v="version"===e.presentation,k=n.currentVersion?.trim()||t("Unknown version"),x=t(n.shouldNotify?"Update available":"Check for updates"),w=x;n.shouldNotify?w=t("New version available: {{version}}",{version:n.release?.tag_name}):n.snapshot?.error&&(w=t("Failed to check for updates"));let C=n.shouldNotify?w:"";if(v){let e=t("System updates, current version: {{version}}",{version:k});w=n.shouldNotify||n.snapshot?.error?`${e} ${w}`:e}let A=(0,a.jsxs)(a.Fragment,{children:[n.checking?(0,a.jsx)(h.y,{"data-icon":"inline-start","aria-hidden":"true"}):(0,a.jsx)(r.n,{icon:n.shouldNotify?i.A:o.A,"data-icon":"inline-start","aria-hidden":"true"}),(0,a.jsx)("span",{className:(0,m.cn)(b&&"hidden lg:inline"),children:x})]});return v&&(A=(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(r.n,{icon:n.shouldNotify?i.A:s.A,className:(0,m.cn)("@min-[22rem]/system-brand:hidden",n.shouldNotify&&"text-primary"),"aria-hidden":"true"}),(0,a.jsx)("span",{className:"hidden max-w-32 truncate font-mono text-xs @min-[22rem]/system-brand:inline",children:k}),n.shouldNotify&&(0,a.jsx)(d.E,{variant:"secondary",className:"bg-primary/10 text-primary hidden h-5 px-1.5 text-[10px] @min-[22rem]/system-brand:inline-flex",children:t("Update available")})]})),(0,a.jsx)(ee,{open:f,onOpenChange:y,update:n,trigger:(0,a.jsxs)(u.$,{type:"button",variant:!v&&n.shouldNotify?"outline":"ghost","aria-label":w,title:w,"aria-busy":n.checking,className:(0,m.cn)("relative",v&&"text-muted-foreground size-8 px-0 @min-[22rem]/system-brand:h-7 @min-[22rem]/system-brand:w-auto @min-[22rem]/system-brand:gap-1.5 @min-[22rem]/system-brand:px-1.5",!v&&b&&"size-8 px-0 lg:w-auto lg:gap-1.5 lg:px-2.5",!v&&n.shouldNotify&&"border-primary/40 bg-primary/10 text-primary"),children:[A,n.shouldNotify&&(v||b)&&(0,a.jsx)(d.E,{"aria-hidden":"true",className:(0,m.cn)("absolute -end-0.5 -top-0.5 size-1.5 min-w-0 p-0",v?"@min-[22rem]/system-brand:hidden":"lg:hidden")}),(0,a.jsx)("span",{className:"sr-only",role:"status","aria-live":"polite",children:C})]})})}},42685(e,t,n){"use strict";n.d(t,{d:()=>m});var a=n(72361),i=n(53540),o=n(68413),s=n(22990),r=n(3976),l=n(56275);function c(e,t){let n=`/api/plugin/task/${encodeURIComponent(e)}/icon`;return t?`${n}?version=${encodeURIComponent(t)}`:n}function d(e){if(e.iconSrc)return{kind:"image",src:e.iconSrc};if(e.hasIcon)return{kind:"image",src:c(e.key)};let t=e.icon?.trim();if(t){if("text"===t||t.startsWith("text:")){let n=t.startsWith("text:")?t.slice(5).trim():"";return{kind:"text",label:n?n.slice(0,4):u(e),colorSeed:e.key}}if(!t.startsWith("data:")&&!t.includes("://"))return{kind:"lobe",name:t}}return{kind:"text",label:u(e),colorSeed:e.key}}function u(e){return[...e.name?.trim()||e.key.trim()].slice(0,2).join("").toUpperCase()}let h=["bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-100","bg-emerald-100 text-emerald-800 dark:bg-emerald-900 dark:text-emerald-100","bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-100","bg-violet-100 text-violet-800 dark:bg-violet-900 dark:text-violet-100","bg-rose-100 text-rose-800 dark:bg-rose-900 dark:text-rose-100","bg-cyan-100 text-cyan-800 dark:bg-cyan-900 dark:text-cyan-100","bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-100","bg-indigo-100 text-indigo-800 dark:bg-indigo-900 dark:text-indigo-100"];function p(e){let t=(0,i.I)({queryKey:["task-plugin",e.plugin.key,"icon"],queryFn:async t=>{let{signal:n}=t,a=await s.FH.get(c(e.plugin.key),{responseType:"blob",signal:n,disableDuplicate:!0,skipErrorHandler:!0,skipBusinessError:!0});return a.data.type.startsWith("image/")?a.data:null},staleTime:3e5,retry:!1,meta:{errorToast:!1}}),[n,r]=(0,o.useState)(null);return(0,o.useEffect)(()=>{if(!t.data)return;let e=URL.createObjectURL(t.data);return r({blob:t.data,src:e}),()=>URL.revokeObjectURL(e)},[t.data]),(0,a.jsx)(m,{plugin:{...e.plugin,hasIcon:!1,iconSrc:n?.blob===t.data?n?.src:void 0},size:e.size})}function m(e){let t=e.size??20,[n,i]=(0,o.useState)(null);if(e.plugin.hasIcon&&!e.plugin.iconSrc)return(0,a.jsx)(p,{...e},e.plugin.key);let s=d(e.plugin);if("image"===s.kind&&s.src===n&&(s=d({...e.plugin,iconSrc:void 0,hasIcon:!1})),"lobe"===s.kind)return(0,a.jsx)(a.Fragment,{children:(0,r.Y)(s.name,t)});if("image"===s.kind){let e=s.src;return(0,a.jsx)("span",{"aria-hidden":"true",className:"bg-muted/40 inline-flex shrink-0 items-center justify-center overflow-hidden rounded-md",style:{width:t,height:t},children:(0,a.jsx)("img",{src:e,alt:"",width:t,height:t,draggable:!1,className:"h-full w-full object-contain",onError:()=>i(e)})})}return(0,a.jsx)("div",{"aria-hidden":"true",className:(0,l.cn)("flex items-center justify-center rounded-md font-semibold select-none",function(e){let t=0;for(let n=0;nnull},{id:"drawing",titleKey:"Drawing Logs",build:()=>null},{id:"task",titleKey:"Task Logs",build:()=>null}],defaultSection:"common",basePath:"/usage-logs",urlStyle:"path"}),i=a.sectionIds,o=a.defaultSection;function s(e){return i.includes(e)}a.getSectionNavItems,n.d(t,{Dk:()=>s},{Ck:o})},42115(e,t,n){"use strict";var a=n(22990),i=n(46006);function o(e){return e?{headers:{"X-Security-Proof":e},singleUseAuthorization:!0}:{}}async function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{p:t=1,page_size:n=10,sort_by:i,sort_order:o}=e;return(await a.FH.get("/api/user/",{params:{p:t,page_size:n,sort_by:i,sort_order:o}})).data}async function r(e){let{keyword:t="",group:n="",role:i="",status:o="",p:s=1,page_size:r=10,sort_by:l,sort_order:c}=e,d=new URLSearchParams;return d.set("keyword",t),d.set("group",n),i&&d.set("role",i),o&&d.set("status",o),d.set("p",String(s)),d.set("page_size",String(r)),l&&d.set("sort_by",l),c&&d.set("sort_order",c),(await a.FH.get(`/api/user/search?${d.toString()}`)).data}async function l(e){return(await a.FH.get(`/api/user/${e}`)).data}async function c(e,t){return(await a.FH.post("/api/user/",e,o(t))).data}async function d(e,t){return(await a.FH.put("/api/user/",e,o(t))).data}async function u(e,t){return(await a.FH.delete(`/api/user/${e}/`,o(t))).data}async function h(e,t,n){return(await a.FH.post("/api/user/manage",{id:e,action:t},o(n))).data}async function p(e){return(await a.FH.post("/api/user/manage",e)).data}async function m(e,t){return(await a.FH.delete(`/api/user/${e}/reset_passkey`,o(t))).data}async function g(e,t){return(await a.FH.delete(`/api/user/${e}/2fa`,o(t))).data}async function f(){return(await a.FH.get("/api/group/")).data}async function y(){let e=await a.FH.get("/api/authz/catalog");return(0,i.oi)(e.data),{resources:e.data?.data?.resources??[],roles:e.data?.data?.roles??[]}}async function b(e){return(await a.FH.get(`/api/user/${e}/oauth/bindings`)).data}async function v(e,t,n){return(await a.FH.delete(`/api/user/${e}/bindings/${t}`,o(n))).data}async function k(e,t,n){return(await a.FH.delete(`/api/user/${e}/oauth/bindings/${t}`,o(n))).data}n.d(t,{OP:()=>k,PQ:()=>y,S$:()=>g,TK:()=>d,XD:()=>b,Xw:()=>p,ZC:()=>h,f:()=>f,hG:()=>u,kg:()=>c,lo:()=>s,tg:()=>m,wz:()=>l,x5:()=>r,zm:()=>v})},56625(e,t,n){"use strict";let a={ALIPAY:"alipay",WECHAT:"wxpay",STRIPE:"stripe",CREEM:"creem",WAFFO:"waffo",WAFFO_PANCAKE:"waffo_pancake"},i=a.ALIPAY,o={[a.ALIPAY]:"#1677FF",[a.WECHAT]:"#07C160",[a.STRIPE]:"#635BFF",[a.CREEM]:"#6366F1",[a.WAFFO]:"#2563EB",[a.WAFFO_PANCAKE]:"#F97316"};n.d(t,{},{Ar:i,J1:a,mi:o,r0:[1,5,10,30,50,100,300,500]})},15165(e,t,n){"use strict";function a(e,t){return`${"EUR"===t?"€":"$"}${e.toFixed(2)}`}function i(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:e.toString()}function o(e){let t="number"==typeof e?e:Number.parseFloat(String(e));return Number.isFinite(t)?new Intl.NumberFormat(void 0,{minimumFractionDigits:0,maximumFractionDigits:Math.abs(t)>=1?2:4}).format(t):"-"}function s(e,t){return e>=1?"":t("{{percent}}% OFF",{percent:Math.round((1-e)*100)})}function r(e,t,n){let a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=e*t,o=i*n;return{displayValue:e*a,originalPrice:i,actualPrice:o,savedAmount:i-o,hasDiscount:n<1}}n(56625),n.d(t,{Bg:()=>a,aE:()=>i,gU:()=>s,k:()=>r,vv:()=>o})},80750(e,t,n){"use strict";var a=n(46006),i=n(56625);function o(e){if(e&&"object"==typeof e&&"string"==typeof e.message_key&&e.message_key)return(0,a.VB)(e)}function s(e,t){let n=document.createElement("form");n.action=e,n.method="POST",navigator.userAgent.includes("Safari")&&!navigator.userAgent.includes("Chrome")||(n.target="_blank"),Object.entries(t).forEach(e=>{let[t,a]=e,i=document.createElement("input");i.type="hidden",i.name=t,i.value=String(a),n.appendChild(i)}),document.body.appendChild(n),n.submit(),document.body.removeChild(n)}function r(e){return e===i.J1.STRIPE}function l(e){return e===i.J1.WAFFO}function c(e){return e===i.J1.WAFFO_PANCAKE}async function d(e,t,n,a){return l(e.type)?null!==n&&a.waffo(t,n):c(e.type)?a.waffoPancake(t):a.regular(t,e.type)}function u(e){return e?e.pay_methods?.length>0?e.pay_methods[0].type:e.enable_stripe_topup?i.J1.STRIPE:e.enable_waffo_topup?i.J1.WAFFO:e.enable_waffo_pancake_topup?i.J1.WAFFO_PANCAKE:i.Ar:i.Ar}function h(e){return e?e.enable_online_topup?e.min_topup:e.enable_stripe_topup?e.stripe_min_topup:e.enable_waffo_topup?e.waffo_min_topup||1:e.enable_waffo_pancake_topup&&e.waffo_pancake_min_topup||1:1}function p(e){return i.r0.map(t=>({value:e*t}))}function m(e,t){return e&&0!==e.length?e.map(e=>({value:e,discount:t[e]||1})):[]}n.d(t,{DV:()=>m,KX:()=>u,L7:()=>c,Og:()=>l,Px:()=>h,W5:()=>p,ck:()=>o,jC:()=>s,m3:()=>r,ol:()=>d})},88753(e,t,n){"use strict";n(57129),n(9276),n(75035);var a=n(38088),i=n(91518);n.d(t,{Ub:()=>i.U,d7:()=>a.d})},29625(e,t,n){"use strict";var a=n(68413),i=n(6702),o=n(20598),s=n(11768);function r(e){let{notify:t=!0,successMessage:n,errorMessage:r,resetAfterMs:l=2e3}=e||{},{t:c}=(0,i.Bd)(),[d,u]=(0,a.useState)(null),h=(0,a.useRef)(void 0);return(0,a.useEffect)(()=>()=>{h.current&&clearTimeout(h.current)},[]),{copiedText:d,copyToClipboard:(0,a.useCallback)(async e=>{let a=n??c("Copied to clipboard"),i=r??c("Failed to copy to clipboard");return await (0,s.l)(e)?(u(e),t&&o.oR.success(a),h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{u(null)},l),!0):(console.warn("All copy methods failed"),t&&o.oR.error(i),u(null),!1)},[t,n,r,l,c])}}n.d(t,{C:()=>r})},38088(e,t,n){"use strict";var a=n(68413);function i(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,[n,i]=(0,a.useState)(e);return(0,a.useEffect)(()=>{let n=setTimeout(()=>{i(e)},t);return()=>{clearTimeout(n)}},[e,t]),n}n.d(t,{d:()=>i})},91518(e,t,n){"use strict";var a=n(68413);function i(e){return(0,a.useSyncExternalStore)(t=>{if("u"{};let n=window.matchMedia(e);return n.addEventListener("change",t),()=>n.removeEventListener("change",t)},()=>"u">typeof window&&window.matchMedia(e).matches,()=>!1)}n.d(t,{U:()=>i})},75035(e,t,n){"use strict";n.d(t,{E:()=>h});var a=n(53540),i=n(68413),o=n(13289),s=n(22990),r=n(46006),l=n(79540),c=n(71795);let d=(0,l.v)()((0,c.Zr)((e,t)=>({lastReadNotice:"",readAnnouncementKeys:[],closedUntilDate:null,markNoticeRead:t=>{e({lastReadNotice:t.trim()})},markAnnouncementsRead:t=>{e(e=>({readAnnouncementKeys:[...new Set([...e.readAnnouncementKeys,...t])]}))},setClosedUntilDate:t=>{e({closedUntilDate:t})},isAnnouncementRead:e=>t().readAnnouncementKeys.includes(e),isNoticeClosed:()=>{let{closedUntilDate:e}=t();return!!e&&e===new Date().toDateString()}}),{name:"notification-storage",partialize:e=>({lastReadNotice:e.lastReadNotice,readAnnouncementKeys:e.readAnnouncementKeys,closedUntilDate:e.closedUntilDate})}));function u(e){if(!e)return"";if(void 0!==e.id&&null!==e.id)return`id:${e.id}`;let t=JSON.stringify({publishDate:e?.publishDate||"",content:(e?.content||"").trim(),extra:(e?.extra||"").trim(),type:e?.type||"",title:(e?.title||"").trim(),link:(e?.link||"").trim()});return`hash:${function(e){let t=0;if(!e)return"0";for(let n=0;n(0,r.oi)(await (0,s.jU)()),staleTime:3e5}),{status:m,loading:g}=(0,o.s)(),f=m?.announcements_enabled??!1,y=(0,i.useMemo)(()=>f?(m?.announcements||[]).slice(0,20):[],[f,m?.announcements]),{lastReadNotice:b,markNoticeRead:v,markAnnouncementsRead:k,isAnnouncementRead:x}=d(),w=c?.success?(c.data||"").trim():"",C=(0,i.useMemo)(()=>{let e=w&&w!==b?1:0,t=y.filter(e=>!x(u(e))).length;return{notice:e,announcements:t,total:e+t}},[w,b,y,x]),A=()=>{y.length>0&&k(y.map(e=>u(e)))},S=e=>{let a=e||n;w&&v(w),"announcements"===a&&A(),l(a),t(!0)};return{notice:w,announcements:y,loading:h||g,unreadCount:C.total,unreadNoticeCount:C.notice,unreadAnnouncementsCount:C.announcements,popoverOpen:e,setPopoverOpen:e=>{e?S(n):t(!1)},activeTab:n,setActiveTab:e=>{l(e),"announcements"===e&&A()},openPopover:S,closePopover:()=>t(!1),refetchNotice:p}}},13289(e,t,n){"use strict";var a=n(53540),i=n(8927);function o(){let{data:e,isLoading:t,error:n}=(0,a.I)({...i.d6,placeholderData:(0,i.bf)()??void 0});return{status:e??null,loading:t,error:n}}n.d(t,{s:()=>o})},57129(e,t,n){"use strict";var a=n(96962),i=n(68413),o=n(24567),s=n(98562),r=n(8927),l=n(43919);function c(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{autoLoad:t=!1}=e,n=(0,a.jE)(),{config:c,loading:d,loadedLogoUrl:u,setLoadedLogoUrl:h,setLoading:p}=(0,l.Eh)(),m=(0,i.useCallback)(async()=>{try{p(!0),await (0,r.JW)(n)}catch(e){console.error("Failed to load system config:",e)}finally{p(!1)}},[n,p]);return(0,i.useEffect)(()=>{t&&m()},[t,m]),(0,i.useEffect)(()=>{let{logo:e}=c;if(e&&e!==u){var t,n;let a;return t=()=>{h(e),(0,s.K)(e)},n=()=>{e!==o.Gs&&console.error("Failed to load logo:",e),h(e)},(a=new Image).onload=t,a.onerror=n,a.src=e,()=>{a.onload=null,a.onerror=null}}},[c.logo,u,h]),{...c,loading:d,logoLoaded:c.logo===u&&!!u}}n.d(t,{R:()=>c})},9276(e,t,n){"use strict";var a=n(68413),i=n(6702),o=n(13289),s=n(6695),r=n(52523);function l(){let{t:e}=(0,i.Bd)(),{status:t}=(0,o.s)(),{auth:n}=(0,r.n)(),l=(0,a.useMemo)(()=>(0,s.L1)(t),[t]),c=t?.docs_link,d=!!n?.user,u=[];l?.home!==!1&&u.push({title:e("Home"),href:"/",external:!0}),l?.console!==!1&&u.push({title:e("Console"),href:"/dashboard"});let h=l?.pricing;if(h&&"object"==typeof h&&h.enabled){let t=h.requireAuth&&!d;u.push({title:e("Model Square"),href:"/pricing",requiresAuth:t})}let p=l?.rankings;if(p&&"object"==typeof p&&p.enabled){let t=p.requireAuth&&!d;u.push({title:e("Rankings"),href:"/rankings",requiresAuth:t})}return l?.docs!==!1&&u.push({title:e("Docs"),href:"/docs",external:!0}),l?.about!==!1&&u.push({title:e("About"),href:"/about"}),u}n.d(t,{v:()=>l})},52048(e,t,n){"use strict";let a=[{code:"zhCN",label:"简体中文"},{code:"en",label:"English"},{code:"fr",label:"Français"},{code:"ru",label:"Русский"},{code:"ja",label:"日本語"},{code:"vi",label:"Tiếng Việt"},{code:"zhTW",label:"繁體中文"}];function i(e){if(!e)return"en";let t=e.trim().replaceAll("_","-").toLowerCase();return("zh-TW"===e||"zh-HK"===e||"zh-MO"===e||"zhTW"===e)&&(t="zhTW"),("zh-CN"===e||"zh-Hans"===e||"zhCN"===e)&&(t="zhCN"),a.some(e=>e.code===t)?t:"en"}function o(e){let t=e.trim().replaceAll("_","-").toLowerCase();return t.startsWith("zh")?"zhtw"===t||"zh-tw"===t||"zh-hk"===t||"zh-mo"===t||t.startsWith("zh-hant")?"zhTW":"zhCN":e}function s(e){if(e){switch(e){case"zhCN":return"zh-CN";case"zhTW":return"zh-TW"}try{return Intl.getCanonicalLocales(e)[0]}catch{return}}}n.d(t,{LL:()=>i,Tl:()=>s,wz:()=>o},{iX:a})},22990(e,t,n){"use strict";n.d(t,{FH:()=>c,F4:()=>o.F4,BR:()=>o.BR,cy:()=>o.cy,m7:()=>v,DU:()=>o.DU,jU:()=>b,Ng:()=>m,BS:()=>y,K4:()=>f,QK:()=>g,lV:()=>o.lV,C6:()=>o.C6,Ac:()=>k});var a=n(25500),i=n(19376),o=n(8620),s=n(26411),r=n(46006),l=n(52523);let c=a.A.create({baseURL:"",withCredentials:!0,headers:{"Cache-Control":"no-cache, no-store"}}),d=new Map,u=c.get.bind(c);function h(){"u">typeof window&&"/sign-in"!==window.location.pathname&&window.location.replace("/sign-in")}c.get=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t.disableDuplicate)return u(e,t);let n=t.params?JSON.stringify(t.params):"{}",a=l.n.getState().auth.session?.sid||"anonymous",i=`${a}:${e}?${n}`,o=d.get(i);if(o)return o;let s=u(e,t).finally(()=>{d.delete(i)});return d.set(i,s),s},c.interceptors.response.use(e=>(e.config.acceptAuthRotation&&e.data?.success===!0&&(0,o.XY)(e.data.data),e),async e=>{let t=e?.config,n=t?.skipErrorHandler;if(401===e?.response?.status)if(!t||t.skipAuthRefresh||t.authRetry)t?.authRetry?((0,o.cy)(!1),n||(0,s.Q)({message:(0,i.t)("Session expired!"),[r.Cp]:!0,cause:e}),h()):n||(0,s.Q)({message:(0,i.t)("Session expired!"),[r.Cp]:!0,cause:e});else{t.authRetry=!0;let a=await (0,o.C6)();if("authenticated"===a.kind){let e=l.n.getState().auth.accessToken;return e&&(t.headers={...t.headers,Authorization:`Bearer ${e}`}),c.request(t)}("anonymous"===a.kind||"out_of_sync"===a.kind)&&(n||(0,s.Q)({message:(0,i.t)("Session expired!"),[r.Cp]:!0,cause:e}),h())}throw a.A.isAxiosError(e)&&(e.message=(0,r.r7)(e)),e}),c.interceptors.request.use(async e=>{if(e.singleUseAuthorization||e.headers.has("X-Security-Proof")){e.skipAuthRefresh=!0;try{let t=await (0,o.DU)();for(let[n,a]of Object.entries(t))e.headers.set(n,a)}catch(t){throw a.A.AxiosError.from(t,void 0,e)}return e}let t=l.n.getState().auth.accessToken;return t&&(e.headers.Authorization=`Bearer ${t}`),e});var p=n(42245);async function m(){return(await c.get("/api/user/self",{skipErrorHandler:!0})).data}async function g(){return(await c.get("/api/user/models")).data}async function f(){return(await c.get("/api/user/self/groups")).data}async function y(){let e=await c.get("/api/status");return(0,r.oi)(e.data)?.data}async function b(){return(await c.get("/api/notice",{headers:{"Cache-Control":null}})).data}function v(e,t){return(0,p.sq)(c.post("/api/user/2fa/disable",{},{...p.OR,headers:{"X-Security-Proof":e},acceptAuthRotation:!0,singleUseAuthorization:!0,signal:t}))}function k(e,t){return(0,p.sq)(c.post("/api/user/2fa/backup_codes",{},{...p.OR,headers:{"X-Security-Proof":e},acceptAuthRotation:!0,singleUseAuthorization:!0,signal:t}))}},22583(e,t,n){"use strict";let a="new-api:auth-session",i="new-api:auth-session:event";function o(){return"function"==typeof globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}let s=o(),r=null;function l(e,t){if("u"typeof BroadcastChannel)return void(r??=new BroadcastChannel(a)).postMessage(n);try{window.localStorage.setItem(i,JSON.stringify(n)),window.localStorage.removeItem(i)}catch{}}function c(e){if("u"void 0;let t=t=>{t&&"object"==typeof t&&("authenticated"===t.kind||"signed_out"===t.kind)&&"string"==typeof t.sid&&t.sid.length>0&&"string"==typeof t.source&&"string"==typeof t.nonce&&"number"==typeof t.timestamp&&t.source!==s&&6e4>Math.abs(Date.now()-t.timestamp)&&e(t)};if("u">typeof BroadcastChannel){let e=new BroadcastChannel(a),n=e=>{t(e.data)};return e.addEventListener("message",n),()=>{e.removeEventListener("message",n),e.close()}}let n=e=>{if(e.key===i&&e.newValue)try{t(JSON.parse(e.newValue))}catch{}};return window.addEventListener("storage",n),()=>{window.removeEventListener("storage",n)}}n.d(t,{m:()=>c,s:()=>l})},8620(e,t,n){"use strict";n.d(t,{F4:()=>y,XY:()=>b,T7:()=>I,BR:()=>k,cy:()=>v,DU:()=>N,lV:()=>f,C6:()=>S,BF:()=>T});var a=n(25500),i=n(19376),o=n(22583),s=n(52523);class r extends Error{constructor(e){super(e),this.name="AuthRotationError"}}let l=a.A.create({baseURL:"",withCredentials:!0,headers:{"Cache-Control":"no-cache, no-store"}}),c=[80,200,500],d=null,u=0;class h extends Error{constructor(){super("Authentication refresh was superseded"),this.name="AuthRefreshSupersededError"}}function p(e){return!!e&&"object"==typeof e}function m(e){return!!p(e)&&"string"==typeof e.sid&&e.sid.length>0&&"boolean"==typeof e.current&&"string"==typeof e.login_method&&"string"==typeof e.ip&&"string"==typeof e.user_agent&&"number"==typeof e.created_at&&"number"==typeof e.last_active_at&&"number"==typeof e.expires_at}function g(e){return"string"==typeof e.access_token&&e.access_token.length>0&&"string"==typeof e.token_type&&e.token_type.length>0&&"number"==typeof e.access_expires_at&&Number.isFinite(e.access_expires_at)&&e.access_expires_at>0}function f(e){var t;return!!p(e)&&g(e)&&!!p(t=e.user)&&Number.isInteger(t.id)&&Number(t.id)>0&&"string"==typeof t.username&&"number"==typeof t.role&&m(e.session)}function y(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1],n=s.n.getState().auth.session?.sid;u+=1,s.n.getState().auth.setBundle(e),t&&n!==e.session.sid&&(0,o.s)("authenticated",e.session.sid)}function b(e){if(!(p(e)&&g(e)&&"Bearer"===e.token_type&&m(e.session)&&e.session.current))throw new r("Invalid authentication rotation response");let t=s.n.getState().auth;if(!t.user||!t.session)throw new r("Authentication rotation has no active session");if(e.session.sid!==t.session.sid)throw new r("Authentication rotation session mismatch");y({access_token:e.access_token,token_type:e.token_type,access_expires_at:e.access_expires_at,session:e.session,user:t.user},!1)}function v(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"complete",n=s.n.getState().auth.session?.sid;u+=1,s.n.getState().auth.reset(t),e&&n&&(0,o.s)("signed_out",n)}function k(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];e.clear(),v(t)}function x(e){return new Promise(t=>globalThis.setTimeout(t,e))}async function w(e){try{let t=await l.post("/api/user/auth/refresh",void 0,{headers:e?{"X-Auth-Session":e}:void 0});return{status:t.status,data:t.data}}catch(e){if(!a.A.isAxiosError(e))return{status:0,error:e};return{status:e.response?.status??0,data:e.response?.data,error:e}}}function C(e){var t;let n,a;return(t={request:w,getExpectedSID:()=>s.n.getState().auth.session?.sid,parseBundle:e=>f(e)?e:null,acceptBundle:e=>y(e,!1),clear:(e,t)=>{e||"idle"!==t?v(e,t):s.n.getState().auth.reset("idle")},markTransient:()=>s.n.getState().auth.setBootstrapState("idle"),wait:x,isCurrent:()=>u===e},n=()=>({kind:"transient_error",error:new h}),a=async(e,i)=>{if(t.isCurrent&&!t.isCurrent())return n();let o=await t.request(t.getExpectedSID());if(t.isCurrent&&!t.isCurrent())return n();let s=p(o.data)?o.data:void 0,r="string"==typeof s?.code?s.code:void 0,l=t.parseBundle(s?.data);if(s?.success===!0&&l)return t.acceptBundle(l),{kind:"authenticated",bundle:l};if(409===o.status&&"AUTH_REFRESH_RACE"===r){let n=c[e];return void 0!==n?(await t.wait(n),a(e+1,i)):(t.clear(!1),{kind:"out_of_sync",code:r})}return 409===o.status&&"AUTH_SESSION_MISMATCH"===r?i?(t.clear(!1,"idle"),a(0,!1)):(t.clear(!1),{kind:"out_of_sync",code:r}):401===o.status?(t.clear(!0),{kind:"anonymous"}):!o.status||o.status>=500||429===o.status?(t.markTransient(),{kind:"transient_error",error:o.error??o.data}):(t.clear(!1),{kind:"out_of_sync",code:r??"AUTH_INVALID_REFRESH_RESPONSE"})},()=>a(0,!0))()}async function A(e){try{if("u"C(e))}catch(e){return s.n.getState().auth.setBootstrapState("idle"),{kind:"transient_error",error:e}}}function S(){return d||(d=A(u).finally(()=>{d=null})),d}function P(){let e=s.n.getState().auth;return!e.user||!e.accessToken||!e.accessExpiresAt||!e.session||e.accessExpiresAt<=Math.floor(Date.now()/1e3)?null:{access_token:e.accessToken,token_type:"Bearer",access_expires_at:e.accessExpiresAt,user:e.user,session:e.session}}async function T(){let e=P();if(e)return s.n.getState().auth.setBootstrapState("complete"),{kind:"authenticated",bundle:e};let t=s.n.getState().auth,n=!!(t.user&&t.session);return"complete"!==t.bootstrapState||n?(t.setBootstrapState("checking"),S()):{kind:"anonymous"}}async function I(){if(!P()&&!("u"t)return R();let n=await S();if("authenticated"===n.kind)return R();let a=s.n.getState().auth;if(a.accessToken&&a.accessExpiresAt&&a.accessExpiresAt>Math.floor(Date.now()/1e3))return R();if("transient_error"===n.kind)throw Error((0,i.t)("Request failed"),{cause:n.error});throw Error((0,i.t)("Session expired!"))}},85468(e,t,n){"use strict";let a={blue:"bg-blue-500",green:"bg-green-500",cyan:"bg-cyan-500",purple:"bg-purple-500",pink:"bg-pink-500",red:"bg-red-500",orange:"bg-orange-500",amber:"bg-amber-500",yellow:"bg-yellow-500",lime:"bg-lime-500","light-green":"bg-green-400",teal:"bg-teal-500","light-blue":"bg-sky-400",indigo:"bg-indigo-500",violet:"bg-violet-500",grey:"bg-gray-400",slate:"bg-slate-500"};function i(e){return e&&a[e]||a.blue}let o={default:"bg-neutral",ongoing:"bg-info",success:"bg-success",warning:"bg-warning",error:"bg-destructive"};function s(e){return o[e||"default"]||o.default}let r=["amber","blue","cyan","green","grey","indigo","light-blue","lime","orange","pink","purple","red","teal","violet","yellow"];function l(e){let t=0;for(let n=0;ni,qA:()=>l,zv:()=>s})},24567(e,t,n){"use strict";n.d(t,{},{Gs:"/logo.png",It:"New API"})},82033(e,t,n){"use strict";function a(e){if("u"2&&void 0!==arguments[2]?arguments[2]:604800;"u">typeof document&&(document.cookie=`${e}=${t}; path=/; max-age=${n}`)}function o(e){"u">typeof document&&(document.cookie=`${e}=; path=/; max-age=0`)}n.d(t,{Ri:()=>a,TV:()=>i,zs:()=>o})},11768(e,t,n){"use strict";function a(e){let t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.left="-999999px",t.style.top="-999999px",t.style.opacity="0",t.setAttribute("readonly",""),document.body.appendChild(t);try{t.focus(),t.select();let n=document.createRange();n.selectNodeContents(t);let a=window.getSelection();a&&(a.removeAllRanges(),a.addRange(n)),t.setSelectionRange(0,e.length);let i=document.execCommand("copy");document.body.removeChild(t);let o=window.getSelection();return o&&o.removeAllRanges(),i}catch(e){return console.error("Fallback copy failed:",e),document.body.removeChild(t),!1}}async function i(e){if("u"i})},43459(e,t,n){"use strict";var a=n(43919);let i={digitsLarge:2,digitsSmall:4,abbreviate:!0,minimumNonZero:0,compact:!1,showSymbol:!0,locale:void 0},o=["USD","CNY","TOKENS","CUSTOM"];function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"USD";return"string"==typeof e&&o.includes(e)?e:t}function r(e){switch(e.quotaDisplayType){case"CNY":return{kind:"currency",symbol:"¥",currencyCode:"CNY",exchangeRate:e.usdExchangeRate};case"CUSTOM":return{kind:"custom",symbol:e.customCurrencySymbol,exchangeRate:e.customCurrencyExchangeRate};case"TOKENS":return{kind:"tokens",quotaPerUnit:e.quotaPerUnit};default:return{kind:"currency",symbol:"$",currencyCode:"USD",exchangeRate:1}}}function l(e){let t=r(e);return"tokens"===t.kind?{kind:"currency",symbol:"$",currencyCode:"USD",exchangeRate:1}:t}function c(e){return e?{digitsLarge:e.digitsLarge??i.digitsLarge,digitsSmall:e.digitsSmall??i.digitsSmall,abbreviate:e.abbreviate??i.abbreviate,minimumNonZero:e.minimumNonZero??i.minimumNonZero,compact:e.compact??i.compact,showSymbol:e.showSymbol??i.showSymbol,locale:e.locale??i.locale}:i}function d(e,t,n){return Math.abs(e)>=1?t:n}function u(e,t){let n=c(t);return d(e,n.digitsLarge,n.digitsSmall)}function h(e){return e.includes(".")?e.replace(/(\.[0-9]*?)0+$/,"$1").replace(/\.$/,""):e}function p(e,t,n,a){let i=Math.abs(e);if(a&&i>=1e3){let t=e/1e3;return`${h(t.toFixed(1))}k`}let o=d(e,t,n);return h(e.toFixed(o))}function m(e,t,n){if("tokens"===n.kind)return t.compact?new Intl.NumberFormat(t.locale,{notation:"compact",maximumFractionDigits:1}).format(e):p(e,t.digitsLarge,t.digitsSmall,t.abbreviate);let a=d(e,t.digitsLarge,t.digitsSmall),i=function(e,t,n){if(0===e)return e;let a=n>0?n:Math.pow(10,-t),i=Math.abs(e);return i>0&&i0?a:-a:e}(e,a,t.minimumNonZero);if("currency"===n.kind)return t.showSymbol?new Intl.NumberFormat(t.locale,{style:"currency",currency:n.currencyCode,currencyDisplay:"narrowSymbol",notation:t.compact?"compact":"standard",minimumFractionDigits:0,maximumFractionDigits:t.compact?1:a}).format(i):new Intl.NumberFormat(t.locale,{notation:t.compact?"compact":"standard",minimumFractionDigits:0,maximumFractionDigits:t.compact?1:a}).format(i);let o=new Intl.NumberFormat(t.locale,{notation:t.compact?"compact":"standard",minimumFractionDigits:0,maximumFractionDigits:t.compact?1:a}).format(i);return t.showSymbol?`${n.symbol} ${o}`:o}function g(){let e=function(){let{config:e}=a.Eh.getState(),t=e?.currency??a.tV;return{...a.tV,...t,quotaPerUnit:t?.quotaPerUnit&&t.quotaPerUnit>0?t.quotaPerUnit:a.tV.quotaPerUnit,usdExchangeRate:t?.usdExchangeRate&&t.usdExchangeRate>0?t.usdExchangeRate:a.tV.usdExchangeRate,customCurrencyExchangeRate:t?.customCurrencyExchangeRate&&t.customCurrencyExchangeRate>0?t.customCurrencyExchangeRate:a.tV.customCurrencyExchangeRate,customCurrencySymbol:t?.customCurrencySymbol?.trim()||a.tV.customCurrencySymbol}}(),t=r(e);return{config:e,meta:t}}function f(e,t){if(null==e||Number.isNaN(e))return"-";let{config:n,meta:a}=g(),i=c(t);if("tokens"===a.kind){let t=e*n.quotaPerUnit;return i.compact?new Intl.NumberFormat(i.locale,{notation:"compact",maximumFractionDigits:1}).format(t):p(t,0,i.digitsSmall,i.abbreviate)}return m((a.kind,e*a.exchangeRate),i,a)}function y(e,t){if(null==e||Number.isNaN(e))return"-";let{config:n}=g(),a=l(n),i=c(t);return m("currency"===a.kind||"custom"===a.kind?e*a.exchangeRate:e,i,a)}function b(e,t){if(null==e||Number.isNaN(e))return"-";let{config:n}=g();return f(e/n.quotaPerUnit,t)}function v(){let{config:e,meta:t}=g();if("tokens"===t.kind)return"Tokens";switch(e.quotaDisplayType){case"CNY":return"CNY";case"CUSTOM":return"custom"===t.kind?t.symbol:"Custom";default:return"USD"}}function k(){let{meta:e}=g();return"tokens"!==e.kind}function x(e,t){if(null==e||Number.isNaN(e))return"-";let{config:n}=g(),a=l(n);return m(e,c(t),a)}n.d(t,{AM:()=>y,EJ:()=>u,J5:()=>f,LC:()=>s,QO:()=>x,cw:()=>g,rP:()=>b,yz:()=>v,zj:()=>k})},84935(e,t,n){"use strict";var a=n(61356),i=n.n(a),o=n(92806),s=n.n(o);i().extend(s()),t.A=i()},98562(e,t,n){"use strict";function a(e){if("u">typeof document&&e)try{let t=new URL(e,window.location.href).href,n=document.querySelectorAll('link[rel~="icon"]');if(1===n.length&&n[0].href===t)return;let a=document.createElement("link");a.rel="icon",a.href=e,n.forEach(e=>e.remove()),document.head.appendChild(a)}catch{}}n.d(t,{K:()=>a})},33271(e,t,n){"use strict";var a=n(84935),i=n(43459);function o(e,t){return null==e||Number.isNaN(e)?"-":Intl.NumberFormat(t,{maximumFractionDigits:2}).format(e)}function s(e,t){return null==e||Number.isNaN(e)?"-":Intl.NumberFormat(t,{notation:"compact",maximumFractionDigits:1}).format(e)}function r(e){return(0,i.rP)(e,{digitsLarge:2,digitsSmall:4,abbreviate:!0})}function l(e){if(!Number.isFinite(e))return 0;let{config:t,meta:n}=(0,i.cw)();if("tokens"===n.kind)return Math.round(e);let a="currency"===n.kind||"custom"===n.kind?n.exchangeRate:1;return Math.round((a>0?e/a:e)*t.quotaPerUnit)}function c(e){let{config:t,meta:n}=(0,i.cw)();return d(e,t.quotaPerUnit,n)}function d(e,t,n){return"tokens"===n.kind?e:e/t*n.exchangeRate}function u(e){let{config:t,meta:n}=(0,i.cw)(),a=d(e,t.quotaPerUnit,n);return"tokens"===n.kind?Math.round(a):Number(a.toFixed((0,i.EJ)(a)))}function h(){let{meta:e}=(0,i.cw)();return"tokens"===e.kind?1:10**-(0,i.EJ)(0)}function p(e){return -1===e?"Never":m(e)}function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"seconds";return e&&-1!==e&&0!==e?(0,a.A)("seconds"===t?1e3*e:e).format("YYYY-MM-DD HH:mm:ss"):"-"}function g(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"seconds",n=arguments.length>2?arguments[2]:void 0;if(!e||-1===e||0===e)return"-";let a=Math.round((("seconds"===t?1e3*e:e)-Date.now())/1e3),i=Math.abs(a),o=new Intl.RelativeTimeFormat(n,{numeric:"always"});return i<60?o.format(a,"second"):i<3600?o.format(Math.round(a/60),"minute"):i<86400?o.format(Math.round(a/3600),"hour"):i<2592e3?o.format(Math.round(a/86400),"day"):i<31536e3?o.format(Math.round(a/2592e3),"month"):o.format(Math.round(a/31536e3),"year")}function f(e){return(0,a.A)(e).format("YYYY-MM-DD HH:mm:ss")}function y(e){return(0,i.rP)(e,{digitsLarge:4,digitsSmall:6,abbreviate:!1})}function b(e){return 0===e?"-":e<1e3?e.toString():e<1e6?`${(e/1e3).toFixed(1)}K`:`${(e/1e6).toFixed(2)}M`}function v(e){if(e<60)return`${e.toFixed(1)}s`;let t=Math.floor(e/60),n=e%60;return`${t}m ${n.toFixed(0)}s`}n.d(t,{D8:()=>u,Ey:()=>p,K3:()=>g,KK:()=>v,Nf:()=>h,Sh:()=>c,Sz:()=>f,ZV:()=>o,_y:()=>b,dD:()=>l,eN:()=>r,fk:()=>m,qW:()=>y,wk:()=>s})},26411(e,t,n){"use strict";var a=n(20598),i=n(46006);let o=new WeakSet;function s(e,t,n){if((0,i.x5)(e))return;let s=(0,i.gT)(e).some(e=>o.has(e));for(let t of(0,i.gT)(e))o.add(t);if(s)return;let r=n?.title||(0,i.r7)(e,t);n?.description?a.oR.error(r,{description:n.description}):a.oR.error(r)}n.d(t,{Q:()=>s})},3976(e,t,n){"use strict";n.d(t,{Y:()=>p,O:()=>m});var a=n(72361),i=n(10053),o=n(68413),s=n.p+"static/svg/sglang.6716313208.svg",r=n.p+"static/image/wan.b17e5bf065.png";let l={SGLang:e=>(0,a.jsx)("img",{src:s,alt:"","aria-hidden":"true",width:e.size??20,height:e.size??20,className:"object-contain"}),Sub2API:function(e){let{size:t=20,...n}=e,i=(0,o.useId)();return(0,a.jsxs)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:t,height:t,...n,children:[(0,a.jsx)("defs",{children:(0,a.jsxs)("linearGradient",{id:i,x1:"4",y1:"4",x2:"20",y2:"20",gradientUnits:"userSpaceOnUse",children:[(0,a.jsx)("stop",{stopColor:"#67EDB1"}),(0,a.jsx)("stop",{offset:".48",stopColor:"#2FD3E1"}),(0,a.jsx)("stop",{offset:"1",stopColor:"#2E68EA"})]})}),(0,a.jsxs)("g",{fill:"none",stroke:`url(#${i})`,strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2.7",children:[(0,a.jsx)("path",{d:"m19.25 7.65-2.55-3.2a1.33 1.33 0 0 0-1.03-.5H8.58c-.34 0-.67.13-.91.37L4.15 7.65c-.93.88-.6 1.52.65 2.3l9.55 5.97"}),(0,a.jsx)("path",{d:"m4.75 16.35 2.55 3.2c.25.31.63.5 1.03.5h7.09c.34 0 .67-.13.91-.37l3.52-3.33c.93-.88.6-1.52-.65-2.3L9.65 8.08"})]})]})},Wan:function(e){return(0,a.jsx)("img",{src:r,alt:"",width:e.size??20,height:e.size??20})}},c=new Map(i.R.map(e=>[e.id,e])),d={Avatar:"hasAvatar",Brand:"hasBrand",BrandColor:"hasBrandColor",Color:"hasColor",Combine:"hasCombine",Text:"hasText",TextCn:"hasTextCn",TextColor:"hasTextColor"},u=new Map;function h(e,t){return(0,a.jsx)("div",{className:"bg-muted text-muted-foreground flex items-center justify-center rounded-full text-xs font-medium",style:{width:t,height:t},children:e.charAt(0).toUpperCase()||"?"})}function p(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,i="string"==typeof e?e.trim():"",s=h(i,t);if(!i)return s;let r=i.split("."),p=r[0],m=l[p];if(m)return(0,a.jsx)(m,{size:t});let g=c.get(p);if(!g)return s;let f=r[1],y=d[f],b=y&&g.param[y]?f:"Mono";("Gemma"===p&&"Simple"===r[1]||"LobeHub"===p&&"Morden"===r[1])&&(b=r[1]);let v=r.length>1&&/^[A-Z]/.test(r[1])?2:1,k=`${p}.${b}`,x=u.get(k);x||(x=(0,o.lazy)(()=>n(96254)(`./${p}/components/${b}.js`).catch(()=>({default:e=>h(p,"number"==typeof e.size||"string"==typeof e.size?e.size:20)}))),u.set(k,x));let w={};for(let e=v;ee.param.hasColor?[e.id,`${e.id}.Color`]:[e.id]),...Object.keys(l)])].sort()}},68155(e,t,n){"use strict";function a(e,t){let n,a,i;if(null==e)return"";if("string"==typeof e)return e;if("object"!=typeof e||Array.isArray(e))return"";let o=new Map;for(let[t,n]of Object.entries(e)){if("string"!=typeof n||""===n.trim())continue;let e=t.trim().replaceAll("_","-").toLowerCase();e&&o.set(e,n)}if(0===o.size)return"";for(let e of(n=t.trim().replaceAll("_","-").toLowerCase(),a=[],(i=e=>{e&&!a.includes(e)&&a.push(e)})(n),"zhcn"===n&&i("zh-cn"),"zhtw"===n&&i("zh-tw"),n.includes("-")?i(n.slice(0,n.indexOf("-"))):("zhcn"===n||"zhtw"===n)&&i("zh"),i("en"),a)){let t=o.get(e);if(void 0!==t)return t}let s=[...o.keys()].sort((e,t)=>e.localeCompare(t))[0];return s?o.get(s)??"":""}n.d(t,{z:()=>a})},60770(e,t,n){"use strict";let a=[.33,1,.68,1],i={default:{duration:.25,ease:a},fast:{duration:.15,ease:a},slow:{duration:.35,ease:a},spring:{type:"spring",damping:20,stiffness:300},none:{duration:0}},o={initial:{opacity:0,y:8},animate:{opacity:1,y:0,transition:i.default}};i.fast;let s={initial:{opacity:0,y:12,scale:.98},animate:{opacity:1,y:0,scale:1,transition:i.default}};i.fast,n.d(t,{},{AK:{initial:{},animate:{transition:{staggerChildren:.05}}},DX:o,fI:i,j0:{initial:{},animate:{transition:{staggerChildren:.04}}},mL:{pageEnter:{initial:{opacity:0,y:8,filter:"blur(4px)"},animate:{opacity:1,y:0,filter:"blur(0.01px)",transitionEnd:{filter:"none"}},exit:{opacity:0,y:-4,filter:"blur(2px)"}},fadeIn:{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0}},scaleIn:{initial:{opacity:0,scale:.96},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.96}},slideUp:{initial:{opacity:0,y:16},animate:{opacity:1,y:0},exit:{opacity:0,y:16}},slideDown:{initial:{opacity:0,y:-16},animate:{opacity:1,y:0},exit:{opacity:0,y:-16}},tableRow:{initial:{opacity:0,y:4},animate:{opacity:1,y:0}},cardItem:{initial:{opacity:0,y:12,scale:.98},animate:{opacity:1,y:0,scale:1}},sidebarSlide:{initial:{opacity:0,x:-8},animate:{opacity:1,x:0},exit:{opacity:0,x:-8}}},mz:s})},6695(e,t,n){"use strict";var a=n(8927);let i={home:!0,console:!0,pricing:{enabled:!0,requireAuth:!1},rankings:{enabled:!0,requireAuth:!1},docs:!0,about:!0},o={pricing:i.pricing,rankings:i.rankings};function s(e,t){if("boolean"==typeof e)return e;if("number"==typeof e)return 1===e||0!==e&&t;if("string"==typeof e){let t=e.trim().toLowerCase();if("true"===t||"1"===t)return!0;if("false"===t||"0"===t)return!1}return t}function r(e,t){return"boolean"==typeof e||"number"==typeof e||"string"==typeof e?{enabled:s(e,t.enabled),requireAuth:t.requireAuth}:e&&"object"==typeof e?{enabled:s(e.enabled,t.enabled),requireAuth:s(e.requireAuth,t.requireAuth)}:{...t}}function l(e){var t;let n,a;return t=e?.HeaderNavModules,n={...i,pricing:{...i.pricing},rankings:{...i.rankings}},(a=function(e){if(!e||""===String(e).trim())return null;if(e&&"object"==typeof e)return e;try{return JSON.parse(String(e))}catch{return null}}(t))&&Object.entries(a).forEach(e=>{let[t,a]=e;if("pricing"===t){n.pricing=r(a,n.pricing);return}if("rankings"===t){n.rankings=r(a,n.rankings);return}let i=n[t];("boolean"==typeof i||"boolean"==typeof a||"number"==typeof a||"string"==typeof a)&&(n[t]=s(a,"boolean"!=typeof i||i))}),n}async function c(e,t){try{var n;return n=await e.fetchQuery(a.d6),l(n)[t]??o[t]}catch{return{enabled:!1,requireAuth:!0}}}function d(e,t){let n=(0,a.bf)();if(!n)return!0;let i=n.SidebarModulesAdmin;if(!i||""===String(i).trim())return!0;try{let n=JSON.parse(String(i))[e];if(!n)return!0;if(!1===n.enabled||!1===n[t])return!1;return!0}catch{return!0}}n.d(t,{L1:()=>l,QT:()=>d,vL:()=>c})},89795(e,t,n){"use strict";var a=n(19376);let i={GUEST:0,USER:1,ADMIN:10,SUPER_ADMIN:100},o=i.GUEST,s={[i.SUPER_ADMIN]:"Super Admin",[i.ADMIN]:"Admin",[i.USER]:"User",[i.GUEST]:"Guest"};function r(e){return(0,a.t)(s[e]??s[o])}n.d(t,{d9:()=>r},{z7:i})},42245(e,t,n){"use strict";var a=n(25500),i=n(46006);class o extends Error{code;[i.Cp]=!0;constructor(e,t,n){super(e,n),this.code=t,this.name="AuthOperationError"}static from(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Verification failed. Please try again.";return e instanceof o?e:a.A.isAxiosError(e)?new o((0,i.I5)(e)||(e.response&&e.response.status>=500?"Please try again later.":void 0)||(0,i.VB)(e.response?.data)||e.message||t,e.response?.data?.code,{cause:e}):new o(e instanceof Error?e.message:t,void 0,{cause:e})}}async function s(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"Verification failed. Please try again.";try{let{data:n}=await e;if(!n.success||void 0===n.data)throw new o((0,i.I5)(n)||(0,i.VB)(n)||t,n.code);return n.data}catch(e){throw o.from(e,t)}}n.d(t,{Kh:()=>o,sq:()=>s},{OR:{skipBusinessError:!0,skipErrorHandler:!0}})},46006(e,t,n){"use strict";var a=n(40505),i=n(45227),o=n(19376);let s=Symbol("safeServerErrorMessage"),r={TELEGRAM_OAUTH_NOT_CONFIGURED:"Telegram OAuth is not configured or enabled. Please contact your administrator.",TELEGRAM_OAUTH_CONFLICT:"The telegram OAuth provider name is reserved. Ask your administrator to rename the conflicting custom provider.",TELEGRAM_OAUTH_FAILED:"Telegram authorization failed. Please try again.",TELEGRAM_ACCOUNT_NOT_BOUND:"This Telegram account is not linked. Sign in using another method and link it first.",TELEGRAM_LEGACY_AUTH_REMOVED:"Telegram login has changed. Reload the page and start Telegram OAuth again.",AUTH_INTERNAL_ERROR:"Please try again later.",SECURITY_VERIFICATION_FAILED:"Verification failed. Please try again.",PASSKEY_RP_ID_UNAVAILABLE:"This Passkey domain is not available on this website. Use its original website or another verification method.",PASSKEY_RP_ID_INVALID:"Invalid Passkey domain. Enter a domain without a scheme, port, path or wildcard.",SECURITY_VERIFICATION_FLOW_REQUIRED:"This verification method requires its dedicated verification flow.",SECURITY_VERIFICATION_LOCKED:"Two-factor authentication is temporarily locked.",OAUTH_ACCOUNT_MISMATCH:"The OAuth account does not match the account linked to your profile.",TWOFA_CODE_INVALID:"The authenticator code is incorrect.",TWOFA_ALREADY_ENABLED:"Two-factor authentication is already enabled.",TWOFA_NOT_ENABLED:"Two-factor authentication is not enabled.",PASSKEY_NOT_FOUND:"No Passkey is registered.",AUTH_FLOW_INVALID:"Verification flow expired",SECURITY_PROOF_REQUIRED:"Additional verification required",SECURITY_PROOF_EXPIRED:"Security verification has expired. Please verify again.",SECURITY_PROOF_INVALID:"Security verification is no longer valid. Please verify again.",SECURITY_PROOF_SCOPE_MISMATCH:"Verification does not match this action.",SECURITY_PROOF_CONSUMED:"This verification has already been used. Please verify again.",SECURITY_PROOF_CONTEXT_MISMATCH:"Verification does not match this action's details. Please verify again.",SECURITY_CONTEXT_INVALID:"The action details are invalid.",SECURITY_ACTION_FORBIDDEN:"You do not have permission to perform this action.",SECURITY_PROOF_METHOD_MISMATCH:"This verification method is not allowed for this action.",SECURITY_METHOD_UNAVAILABLE:"This verification method is currently unavailable.",TWOFA_SETUP_INVALID:"The two-factor setup has expired or changed. Start setup again.",AUTH_SESSION_LIMIT:"Too many active login sessions. On a device where you are already signed in, open Login sessions and use “Sign out other sessions” to revoke them. If you cannot access a signed-in device, reset your password to sign out all sessions.",AUTH_SESSION_ISSUANCE_LIMIT:"Too many login sessions were created recently. Please wait for the rolling window to pass, then try again.",TELEGRAM_BIND_DISABLED:"Telegram binding is disabled.",TELEGRAM_BIND_INVALID_REQUEST:"The Telegram authorization request is invalid or expired.",TELEGRAM_BIND_FLOW_INVALID:"This Telegram binding request has expired or has already been used.",TELEGRAM_BIND_SESSION_INVALID:"The login session that started this Telegram binding is no longer valid.",TELEGRAM_BIND_ALREADY_BOUND:"This Telegram account is already bound.",TELEGRAM_BIND_USER_DELETED:"This user account no longer exists.",TELEGRAM_BIND_USER_DISABLED:"This user account is disabled.",TELEGRAM_BIND_INTERNAL_ERROR:"Telegram binding failed. Please try again."};function l(e){return!!e&&"object"==typeof e}function c(e){let t=[],n=[e],a=new Set;for(let e=0;e(0,i.FZ)(e)||(0,a.wm)(e)||"AbortError"===e.name)}function p(e){if("string"==typeof e&&e.trim()&&"success"!==e.trim()&&!/^\s*(?:])/i.test(e))return e}function m(e){if(l(e))return"string"==typeof e.message_key&&e.message_key?o.Ay.t(e.message_key,l(e.message_params)?e.message_params:void 0):p(e.message)}function g(e,t){return e(t,{skipInterpolation:!0})}function f(e,t){let n=c(e),a=n.find(e=>e[s]);if(a)return o.Ay.t(d(a)||p(a.message)||t||"Something went wrong!");let i=d(e);if(i)return o.Ay.t(i);for(let e of n){if(e instanceof Error||e.isAxiosError||l(e.response))continue;let t=l(e.error)?p(e.error.message):p(e.error),n=m(e)||t||p(e.title);if(n)return n}let r=u(e);if(304===r)return o.Ay.t("Content not modified!");if(204===r)return o.Ay.t("Content not found.");for(let e of n){let t=p(e.message);if(t)return t}return p(e)||(t??o.Ay.t("Something went wrong!"))}function y(e,t){return Error(f(e,t??""),{cause:e})}function b(e){if(l(e)&&!1===e.success)throw y(e);return e}n.d(t,{I5:()=>d,VB:()=>m,_m:()=>u,gT:()=>c,ic:()=>y,nv:()=>g,oi:()=>b,r7:()=>f,x5:()=>h},{Cp:s})},8927(e,t,n){"use strict";var a=n(2884),i=n(22990),o=n(24567),s=n(43919);let r="status";function l(e,t){if("number"==typeof e&&!Number.isNaN(e))return e;if("string"==typeof e){let t=Number(e);if(!Number.isNaN(t))return t}return t}function c(){try{if("u"typeof window&&e&&window.localStorage.setItem(r,JSON.stringify(e))}catch{}}return e}let u=(0,a.j)({queryKey:["status"],queryFn:d,staleTime:3e5,gcTime:18e5});async function h(e){return e.ensureQueryData({...u,revalidateIfStale:!0})}n.d(t,{JW:()=>h,bf:()=>c},{d6:u})},86603(e,t,n){"use strict";let a=[{value:"default",name:"Default",swatches:["oklch(0.72 0.18 250)","oklch(0.7 0.12 280)"]},{value:"anthropic",name:"Anthropic",swatches:["oklch(0.984 0.005 95)","oklch(0.685 0.142 38)"]},{value:"simple-large",name:"Simple Large-font",swatches:["oklch(0.15 0 0)","oklch(0.99 0 0)"]},{value:"underground",name:"Underground",swatches:["oklch(0.5315 0.0694 156.19)","oklch(0.5748 0.0862 336.52)"]},{value:"rose-garden",name:"Rose Garden",swatches:["oklch(0.5827 0.2418 12.23)","oklch(0.8131 0.1129 5.67)"]},{value:"lake-view",name:"Lake View",swatches:["oklch(0.765 0.177 163.22)","oklch(0.551 0.0899 200.52)"]},{value:"sunset-glow",name:"Sunset Glow",swatches:["oklch(0.5591 0.1882 25.33)","oklch(0.7938 0.1248 42.42)"]},{value:"forest-whisper",name:"Forest Whisper",swatches:["oklch(0.5276 0.1072 182.22)","oklch(0.5236 0.0505 250.18)"]},{value:"ocean-breeze",name:"Ocean Breeze",swatches:["oklch(0.5461 0.2152 262.88)","oklch(0.5854 0.2041 277.12)"]},{value:"lavender-dream",name:"Lavender Dream",swatches:["oklch(0.5709 0.1808 306.89)","oklch(0.811 0.0589 201.14)"]}],i=new Set(a.map(e=>e.value)),o=new Set(["default","sans","serif"]),s=new Set(["default","none","sm","md","lg","xl"]),r=new Set(["default","sm","lg","xl"]),l=new Set(["full","centered"]),c={anthropic:"serif"};function d(e,t){return"default"===e?c[t]??"system":e}n.d(t,{HN:()=>d},{Ev:s,Se:l,XN:o,b3:a,dX:i,oI:r,oi:{preset:"default",font:"default",radius:"default",scale:"default",contentLayout:"full"}})},21747(e,t,n){"use strict";function a(e,t,n){if("u"typeof window)try{null===t?window.localStorage.removeItem(e):window.localStorage.setItem(e,t)}catch{}}n.d(t,{V$:()=>a,qO:()=>i},{tm:{mode:"newapi:theme:v1:mode",preset:"newapi:theme:v1:preset",font:"newapi:theme:v1:font",radius:"newapi:theme:v1:radius",scale:"newapi:theme:v1:scale",contentLayout:"newapi:theme:v1:content-layout"}})},56275(e,t,n){"use strict";var a=n(18333),i=n(88521);function o(){for(var e=arguments.length,t=Array(e),n=0;n=t-1?(n.push("..."),n.push(t-1,t)):(n.push("..."),n.push(e),n.push("...",t));return n}function r(e,t){return!e||e.length<=t?e:e.slice(0,t)+"..."}n.d(t,{EJ:()=>r,cn:()=>o,ml:()=>s})},53978(e,t,n){"use strict";var a,i=n(72361),o=n(96962),s=n(40601),r=n(1384),l=n(68413),c=n(34869);let d="2k6e8r7p",u=!1;var h=n(98562);n(84935);var p=n(21747);let m="default-v1",g="newapi:default:cache-version",f=new Set([g,...Object.values(p.tm),"user","uid","aff","oauth:binding:result"]);var y=n(77839),b=n(98995),v=n(40376),k=n(26411),x=n(46006),w=n(8927),C=n(89411);let A=["inter","manrope","system"];var S=n(82033);let P="font",T=(0,l.createContext)(null);var I=n(48707),R=n(19376),N=n(58862),j=n(6702),M=n(52048),D=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","{{count}} outside this view":"{{count}} outside this view","_copy":"_copy",",":", ",", and":", and",",and ":", and ","、":", ","? This action cannot be undone.":"? This action cannot be undone.",". Please fix the JSON before saving.":". Please fix the JSON before saving.",". This action cannot be undone.":". This action cannot be undone.","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"({{total}} total, {{omit}} omitted)","(billed as vip itself, so base ratio of vip)":"(billed as vip itself, so base ratio of vip)","(falls back to billing as vip, so base ratio of vip)":"(falls back to billing as vip, so base ratio of vip)","(hits the override rule above)":"(hits the override rule above)","(ID: {{id}})":"(ID: {{id}})","(instead of {{ratio}})":"(instead of {{ratio}})","(Leave empty to dissolve tag)":"(Leave empty to dissolve tag)","(matrix cell vip × premium is set)":"(matrix cell vip × premium is set)","(no matrix cell, so base ratio of default; the vip 0.8 is irrelevant)":"(no matrix cell, so base ratio of default; the vip 0.8 is irrelevant)","(no override rule, so base ratio of default; the 0.8 of vip plays no part)":"(no override rule, so base ratio of default; the 0.8 of vip plays no part)","(Optional: redirect model names)":"(Optional: redirect model names)","(Override all channels\' groups)":"(Override all channels\' groups)","(Override all channels\' models)":"(Override all channels\' models)","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{bytes}} bytes":"{{bytes}} bytes","{{category}} Models":"{{category}} Models","{{channels}} channels, {{tasks}} in-flight tasks":"{{channels}} channels, {{tasks}} in-flight tasks","{{completed}}/{{total}} completed":"{{completed}}/{{total}} completed","{{condition}} ({{timezone}})":"{{condition}} ({{timezone}})","{{count}} / {{max}} groups selected":"{{count}} / {{max}} groups selected","{{count}} announcements will be removed from the list.":"{{count}} announcements will be removed from the list.","{{count}} API shortcuts will be removed from the list.":"{{count}} API shortcuts will be removed from the list.","{{count}} available channels":"{{count}} available channels","{{count}} channel(s) deleted":"{{count}} channel(s) deleted","{{count}} channel(s) disabled":"{{count}} channel(s) disabled","{{count}} channel(s) enabled":"{{count}} channel(s) enabled","{{count}} channel(s) failed to disable":"{{count}} channel(s) failed to disable","{{count}} channel(s) failed to enable":"{{count}} channel(s) failed to enable","{{count}} combinations":"{{count}} combinations","{{count}} days ago":"{{count}} days ago","{{count}} days remaining":"{{count}} days remaining","{{count}} disabled channel(s) deleted":"{{count}} disabled channel(s) deleted","{{count}} enabled channels and {{tasks}} in-flight tasks still use this plugin.":"{{count}} enabled channels and {{tasks}} in-flight tasks still use this plugin.","{{count}} enabled groups":"{{count}} enabled groups","{{count}} FAQ entries will be removed from the list.":"{{count}} FAQ entries will be removed from the list.","{{count}} hours ago":"{{count}} hours ago","{{count}} incidents":"{{count}} incidents","{{count}} incidents in the last 24 hours":"{{count}} incidents in the last 24 hours","{{count}} incidents in the last 30 days":"{{count}} incidents in the last 30 days","{{count}} IP(s)":"{{count}} IP(s)","{{count}} linked model records":"{{count}} linked model records","{{count}} log entries removed.":"{{count}} log entries removed.","{{count}} minutes ago":"{{count}} minutes ago","{{count}} model mapping(s)":"{{count}} model mapping(s)","{{count}} model(s) redirected":"{{count}} model(s) redirected","{{count}} model(s) skipped because another model derives the same request name":"{{count}} model(s) skipped because another model derives the same request name","{{count}} model(s) unchanged by the rule were skipped":"{{count}} model(s) unchanged by the rule were skipped","{{count}} models":"{{count}} models","{{count}} months ago":"{{count}} months ago","{{count}} override":"{{count}} override","{{count}} permissions":"{{count}} permissions","{{count}} permissions are no longer available":"{{count}} permissions are no longer available","{{count}} providers":"{{count}} providers","{{count}} records selected. Bulk actions are available.":"{{count}} records selected. Bulk actions are available.","{{count}} selected":"{{count}} selected","{{count}} selected models":"{{count}} selected models","{{count}} selected outside the current filters":"{{count}} selected outside the current filters","{{count}} selected targets available for bulk copy.":"{{count}} selected targets available for bulk copy.","{{count}} tiers":"{{count}} tiers","{{count}} Uptime Kuma groups will be removed from the list.":"{{count}} Uptime Kuma groups will be removed from the list.","{{count}} vendors":"{{count}} vendors","{{count}} weeks ago":"{{count}} weeks ago","{{created}} models created, {{updated}} models updated, {{vendors}} vendors created.":"{{created}} models created, {{updated}} models updated, {{vendors}} vendors created.","{{currency}} / {{unit}} tokens":"{{currency}} / {{unit}} tokens","{{currency}} price per 1M input tokens.":"{{currency}} price per 1M input tokens.","{{currency}} price per 1M tokens.":"{{currency}} price per 1M tokens.","{{field}} updated to {{value}}":"{{field}} updated to {{value}}","A channel test task is already running or queued. Cannot start this manual task":"A channel test task is already running or queued. Cannot start this manual task","a dashboard login session is required":"a dashboard login session is required","{{field}} updated to {{value}} for tag: {{tag}}":"{{field}} updated to {{value}} for tag: {{tag}}","{{first}} and {{second}}":"{{first}} and {{second}}","A model update task is already running or queued. Cannot start this manual task":"A model update task is already running or queued. Cannot start this manual task","{{first}} or {{second}}":"{{first}} or {{second}}","A repair task is already running. Please try again later":"A repair task is already running. Please try again later","{{key}} · from {{source}}":"{{key}} · from {{source}}","{{key}} · version {{version}} · from {{source}}":"{{key}} · version {{version}} · from {{source}}","A token can select at most {{max}} Auto groups":"A token can select at most {{max}} Auto groups","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"{{modality}} not supported","{{modality}} supported":"{{modality}} supported","{{n}} model(s) selected":"{{n}} model(s) selected","{{operation}} (ID: {{id}})":"{{operation}} (ID: {{id}})","{{percent}}% OFF":"{{percent}}% OFF","{{processed}} of {{total}} log entries processed.":"{{processed}} of {{total}} log entries processed.","{{protocol}} auth name":"{{protocol}} auth name","{{protocol}} auth value":"{{protocol}} auth value","{{protocol}} authentication":"{{protocol}} authentication","{{selected}} of {{total}} changed fields selected":"{{selected}} of {{total}} changed fields selected","{{start}}–{{end}}":"{{start}}–{{end}}","{{success}} succeeded, {{failed}} failed":"{{success}} succeeded, {{failed}} failed","{{target}} test failed":"{{target}} test failed","{{target}} test succeeded":"{{target}} test succeeded","{{total}} models · {{syncable}} syncable · {{skipped}} skipped this time":"{{total}} models · {{syncable}} syncable · {{skipped}} skipped this time","{{unit}} tokens":"{{unit}} tokens","{{value}} tokens/s":"{{value}} tokens/s","{{value}}ms":"{{value}}ms","{{value}}s":"{{value}}s","@lobehub/icons key":"@lobehub/icons key","@lobehub/icons key name":"@lobehub/icons key name","/status/":"/status/","/your/endpoint":"/your/endpoint","#1 App":"#1 App","#1 by usage":"#1 by usage","Access token expiry must be at least one hour from now.":"Access token expiry must be at least one hour from now.","Access token name must be 1 to 64 characters.":"Access token name must be 1 to 64 characters.","access token not found":"access token not found","#1 Model":"#1 Model","% off":"% off","`, `-nothinking`, and effort suffixes such as `-high` while routing to the correct Gemini variant. When off, model names are sent upstream unchanged.":"`, `-nothinking`, and effort suffixes such as `-high` while routing to the correct Gemini variant. When off, model names are sent upstream unchanged.","© 2025 Your Company. All rights reserved.":"© 2025 Your Company. All rights reserved.","+{{count}} more":"+{{count}} more","| Based on":"| Based on","0 means data is kept permanently":"0 means data is kept permanently","0 means unlimited":"0 means unlimited","1 Day":"1 Day","1 day ago":"1 day ago","1 hour":"1 hour","1 Hour":"1H","1 hour ago":"1 hour ago","1 minute":"1 minute","1 minute ago":"1 minute ago","1 Month":"1M","1 month ago":"1 month ago","1 week ago":"1 week ago","1 year":"1 year","1 year ago":"1 year ago","1. Create an application in your Gotify server":"1. Create an application in your Gotify server","1. Select models users call":"1. Select models users call","1. Select upstream models":"1. Select upstream models","10 / page":"10 / page","100 / page":"100 / page","14 Days":"14 Days","Action {{action}}":"Action {{action}}","180 days":"180 days","192.168.1.1 10.0.0.0/8":"192.168.1.1 10.0.0.0/8","1M":"1M","1M token":"1M token","1W":"1W","2. Copy the application token":"2. Copy the application token","2. Set names users call":"2. Set names users call","2. Set upstream model names":"2. Set upstream model names","20 / page":"20 / page","24 Hours":"24 Hours","24 hours ago":"24 hours ago","29 Days":"29 Days","2xx, 504 and 524 are always excluded.":"2xx, 504 and 524 are always excluded.","3. Enter your Gotify server URL and token above":"3. Enter your Gotify server URL and token above","3. Review mappings":"3. Review mappings","30 days":"30 days","30 Days":"30 Days","30 days ago":"30 days ago","30d change":"30d change","5 minutes":"5 minutes","5-Hour Window":"5-Hour Window","50 / page":"50 / page","7 Days":"7 Days","7 days ago":"7 days ago","80,443,8080":"80,443,8080","90 days":"90 days","A billing multiplier. Lower ratios mean lower API call costs.":"A billing multiplier. Lower ratios mean lower API call costs.","A focused home for keys, balance, routing, and service health.":"A focused home for keys, balance, routing, and service health.","A matching hash confirms the published file, not the safety of its code.":"A matching hash confirms the published file, not the safety of its code.","A Passkey created for www.example.com cannot be used on example.com. Keep the old website available so users can still verify there.":"A Passkey created for www.example.com cannot be used on example.com. Keep the old website available so users can still verify there.","A security operation is already in progress.":"A security operation is already in progress.","A selected model no longer exists. Reload the model list.":"A selected model no longer exists. Reload the model list.","A token that never expires stays valid until you revoke it. Set an expiration date when possible.":"A token that never expires stays valid until you revoke it. Set an expiration date when possible.","A vendor with this name already exists.":"A vendor with this name already exists.","About":"About","About {{days}} days left":"About {{days}} days left","About pricing currency":"About pricing currency","Accept Unpriced Models":"Accept Unpriced Models","Accept upstream certificates that fail validation, such as self-signed ones. Only enable for trusted internal upstreams.":"Accept upstream certificates that fail validation, such as self-signed ones. Only enable for trusted internal upstreams.","Accepts a JSON array of model identifiers that support the Imagine API.":"Accepts a JSON array of model identifiers that support the Imagine API.","Accepts comma-separated status codes and inclusive ranges.":"Accepts comma-separated status codes and inclusive ranges.","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.","Access Baidu Qianfan models through the legacy API":"Access Baidu Qianfan models through the legacy API","Access Baidu Qianfan models through the V2 API":"Access Baidu Qianfan models through the V2 API","Access Codex using ChatGPT subscription credentials":"Access Codex using ChatGPT subscription credentials","Access Denied Message":"Access Denied Message","Access Forbidden":"Access Forbidden","Access hosted model predictions through Replicate":"Access hosted model predictions through Replicate","Access model services through MokaAI":"Access model services through MokaAI","Access model services through the OhMyGPT gateway":"Access model services through the OhMyGPT gateway","Access models from multiple providers through OpenRouter":"Access models from multiple providers through OpenRouter","Access models through Amazon Bedrock":"Access models through Amazon Bedrock","Access models through Cloudflare Workers AI":"Access models through Cloudflare Workers AI","Access models through Google Cloud Vertex AI":"Access models through Google Cloud Vertex AI","Access Policy (JSON)":"Access Policy (JSON)","Access previous conversations and start new ones.":"Access previous conversations and start new ones.","Access records":"Access records","Access Token":"Access Token","Access token expired":"Access token expired","Access token revoked":"Access token revoked","Access tokens":"Access tokens","Access tokens cannot use this feature":"Access tokens cannot use this feature","Access Zhipu models through the legacy API":"Access Zhipu models through the legacy API","Access Zhipu models through the V4 API":"Access Zhipu models through the V4 API","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Actions":"Account Actions","Account binding":"Account binding","Account Binding Management":"Account Binding Management","Account binding request":"Account binding request","Account Bindings":"Account Bindings","Account bindings have changed. Start this operation again.":"Account bindings have changed. Start this operation again.","Account created! Please sign in":"Account created! Please sign in","Account deleted successfully":"Account deleted successfully","Account deletion":"Account deletion","Account ID":"Account ID","Account ID *":"Account ID *","Account Info":"Account Info","Account password change":"Account password change","Account security":"Account security","Account unlinking":"Account unlinking","Account used when authenticating with the SMTP server":"Account used when authenticating with the SMTP server","acknowledge the related legal risks":"acknowledge the related legal risks","Across all groups":"Across all groups","Action":"Action","Action confirmation":"Action Confirmation","Actions":"Actions","Actions for {{name}}":"Actions for {{name}}","Activate / Roll back":"Activate / Roll back","Activate now":"Activate now","Activating...":"Activating...","active":"active","Active":"Active","Active apps":"Active apps","Active Cache Count":"Active Cache Count","Active Files":"Active Files","Active models":"Active models","Active Tasks":"Active Tasks","active users":"active users","Active version":"Active version","Actively check all channels":"Actively check all channels","Actively check auto-disable-enabled channels":"Actively check auto-disable-enabled channels","Actual Amount":"Actual Amount","Actual Model":"Actual Model","Actual Model:":"Actual Model:","Adapt `-thinking`, `-nothinking`, and effort suffixes such as `-high` to Anthropic native thinking behavior while keeping billing predictable. When off, model names are sent upstream unchanged.":"Adapt `-thinking`, `-nothinking`, and effort suffixes such as `-high` to Anthropic native thinking behavior while keeping billing predictable. When off, model names are sent upstream unchanged.","Add":"Add","Add \\"{{value}}\\"":"Add \\"{{value}}\\"","Add {{added}} models and remove {{removed}} models":"Add {{added}} models and remove {{removed}} models","Add {{count}} mapping(s)":"Add {{count}} mapping(s)","Add {{title}}":"Add {{title}}","Add a group identifier to the auto assignment list.":"Add a group identifier to the auto assignment list.","Add a new API key by providing necessary info.":"Add a new API key by providing necessary info.","Add a new channel by providing the necessary information.":"Add a new channel by providing the necessary information.","Add a new model to the system by providing the necessary information.":"Add a new model to the system by providing the necessary information.","Add a new user by providing necessary info.":"Add a new user by providing necessary info.","Add a new vendor to the system":"Add a new vendor to the system","Add a vendor or adjust your search.":"Add a vendor or adjust your search.","Add an extra layer of security to your account":"Add an extra layer of security to your account","Add an index URL to browse installable plugins.":"Add an index URL to browse installable plugins.","Add and submit":"Add and submit","Add Announcement":"Add Announcement","Add another login method before unlinking this account.":"Add another login method before unlinking this account.","Add API":"Add API","Add API Shortcut":"Add API Shortcut","Add at least one condition to this group.":"Add at least one condition to this group.","Add auto group":"Add auto group","Add Auto group":"Add Auto group","Adjusted by the channel adaptor":"Adjusted by the channel adaptor","Add chat preset":"Add chat preset","Add condition":"Add condition","Add Condition":"Add Condition","Add condition group":"Add condition group","Add credits":"Add credits","Add custom model \\"{{value}}\\"":"Add custom model \\"{{value}}\\"","Add discount tier":"Add discount tier","Add each model or tag you want to include.":"Add each model or tag you want to include.","Add FAQ":"Add FAQ","Add from available models...":"Add from available models...","Add Funds":"Add Funds","Add group":"Add group","Administrator completed the order, amount added: {{quota}}, payment amount: {{amount}}":"Administrator completed the order, amount added: {{quota}}, payment amount: {{amount}}","Administrator reset the quota of subscription plan {{plan_title}} (ID: {{plan_id}})":"Administrator reset the quota of subscription plan {{plan_title}} (ID: {{plan_id}})","Add Group":"Add Group","Add group rate limit":"Add group rate limit","Add group rules":"Add group rules","Add groups in the order they should be tried.":"Add groups in the order they should be tried.","Add management route":"Add management route","Add Mapping":"Add Mapping","Add metadata":"Add metadata","Add metadata to all selected models first.":"Add metadata to all selected models first.","Add method":"Add method","Add missing models":"Add missing models","Add Mode":"Add Mode","Add model":"Add model","Add Model":"Add Model","Add model pricing":"Add model pricing","Add Models":"Add Models","Add new amount":"Add new amount","Add new redemption code(s) by providing necessary info.":"Add new redemption code(s) by providing necessary info.","Add OAuth Provider":"Add OAuth Provider","Add param/header":"Add param/header","Add payment method":"Add payment method","Add photos or files":"Add photos or files","Add prefix":"Add prefix","Add pricing branch":"Add pricing branch","Add product":"Add product","Add Provider":"Add Provider","Add Quota":"Add Quota","Add ratio override":"Add ratio override","Add route":"Add route","Add routes individually or replace them from a template.":"Add routes individually or replace them from a template.","Add Row":"Add Row","Add rule":"Add rule","Add Rule":"Add Rule","Add rule group":"Add rule group","Add rules for a user group":"Add rules for a user group","Add selectable group":"Add selectable group","Add source":"Add source","Add split":"Add split","Add subscription":"Add subscription","Add suffix":"Add suffix","Add tags...":"Add tags...","Add template":"Add template","Add tier":"Add tier","Add time condition":"Add time condition","Add time rule group":"Add time rule group","Add to group {{path}}":"Add to group {{path}}","Add Uptime Kuma Group":"Add Uptime Kuma Group","Add User":"Add User","Add user group":"Add user group","Add Vendor":"Add Vendor","Add your API keys, set up channels and configure access permissions":"Add your API keys, set up channels and configure access permissions","Added":"Added","Added {{count}} model(s)":"Added {{count}} model(s)","Added {{count}} models from \\"{{name}}\\"":"Added {{count}} models from \\"{{name}}\\"","Added models":"Added models","Added once per request. Set to 0 for usage-only billing.":"Added once per request. Set to 0 for usage-only billing.","Added successfully":"Added successfully","Added to the usage cost. Set to 0 for no additional charge.":"Added to the usage cost. Set to 0 for no additional charge.","Additional charge":"Additional charge","Additional Conditions":"Additional Conditions","Additional information":"Additional information","Additional Information":"Additional Information","Additional Limit":"Additional Limit","Additional Limits":"Additional Limits","Additional metered capability":"Additional metered capability","Additional request domains":"Additional request domains","Additional verification required":"Additional verification required","Adjust filters, then search to refresh the logs.":"Adjust filters, then search to refresh the logs.","Adjust Quota":"Adjust Quota","Adjust quota for user “{{name}}”":"Adjust quota for user “{{name}}”","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"Adjust response formatting, prompt behavior, proxy, and upstream automation.","Adjust the appearance and layout to suit your preferences.":"Adjust the appearance and layout to suit your preferences.","Adjust user quota":"Adjust user quota","Adjustment mode":"Adjustment mode","Admin":"Admin","Admin access required":"Admin access required","Admin area":"Admin area","Admin Channel Permissions":"Admin Channel Permissions","Admin notes (only visible to admins)":"Admin notes (only visible to admins)","Admin Only":"Admin Only","Admin Permissions":"Admin Permissions","Admin permissions updated":"Admin permissions updated","Administer user accounts and roles.":"Administer user accounts and roles.","Administration":"Administration","Administrator account":"Administrator account","Administrator username":"Administrator username","Advance next reset time":"Advance next reset time","Advanced":"Advanced","Advanced Configuration":"Advanced Configuration","Advanced Custom":"Advanced Custom","Advanced custom configuration is required":"Advanced custom configuration is required","Advanced custom configuration requires at least one route":"Advanced custom configuration requires at least one route","Advanced Custom Routes":"Advanced Custom Routes","Advanced options":"Advanced options","Advanced Options":"Advanced Options","Advanced platform configuration.":"Advanced platform configuration.","Advanced Settings":"Advanced Settings","Advanced text editing":"Advanced text editing","Aesthetic style":"Aesthetic style","Affected windows:":"Affected windows:","Affinity cache settings":"Affinity cache settings","After clicking the button, you\'ll be asked to authorize the bot":"After clicking the button, you\'ll be asked to authorize the bot","After conversion":"After conversion","After conversion, expression reservation and rounding rules apply. Effective unit prices are preserved; individual rounded charges may differ.":"After conversion, expression reservation and rounding rules apply. Effective unit prices are preserved; individual rounded charges may differ.","Allow users to export logs":"Allow users to export logs","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?","After enabling, client request headers are forwarded to the upstream, excluding standard authentication headers, cookies and transport headers:":"After enabling, client request headers are forwarded to the upstream, excluding standard authentication headers, cookies and transport headers:","After enabling, the original request body is forwarded to the upstream without gateway rewriting:":"After enabling, the original request body is forwarded to the upstream without gateway rewriting:","After enabling, the plan will be shown to users. Continue?":"After enabling, the plan will be shown to users. Continue?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?","Agent ID":"Agent ID","Agent ID *":"Agent ID *","Aggregate tokens delivered across the platform":"Aggregate tokens delivered across the platform","Aggregate traffic across every category":"Aggregate traffic across every category","Aggregated across enabled groups":"Aggregated across enabled groups","Aggregated across the apps below":"Aggregated across the apps below","Aggregated traffic by upstream model provider":"Aggregated traffic by upstream model provider","Aggregated usage metrics and trend charts.":"Aggregated usage metrics and trend charts.","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.","Aggregation bucket":"Aggregation bucket","AGPL v3.0 License":"AGPL v3.0 License","AI Application Infrastructure Foundation":"AI Application Infrastructure Foundation","Already checked in today":"Already checked in today","AI model testing environment":"AI model testing environment","AI models":"AI models","AI models supported":"AI models supported","AI Proxy":"AI Proxy","AI Proxy Library":"AI Proxy Library","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"AK/SK mode: use AccessKey|SecretAccessKey|Region","Ali":"Alibaba Bailian","Alipay":"Alipay","All":"All","All API tokens":"All API tokens","All categories":"All categories","All combinations are priced at zero. Matching requests will be billed as free.":"All combinations are priced at zero. Matching requests will be billed as free.","All conditions":"All conditions","All conditions must match before this tier is used.":"All conditions must match before this tier is used.","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"All edits are overwrite operations. Leave fields empty to keep current values unchanged.","All files exceed the maximum size.":"All files exceed the maximum size.","All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.":"All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.","All Groups":"All Groups","All groups share one pool of names managed in the pricing group table, but a name plays two different roles: as a user group it describes the user, as a token group it decides routing and billing.":"All groups share one pool of names managed in the pricing group table, but a name plays two different roles: as a user group it describes the user, as a token group it decides routing and billing.","All models":"All models","Announcement #{{index}} content cannot exceed 500 characters":"Announcement #{{index}} content cannot exceed 500 characters","Announcement #{{index}} has an invalid publish date format":"Announcement #{{index}} has an invalid publish date format","Announcement #{{index}} has an invalid type value":"Announcement #{{index}} has an invalid type value","Announcement #{{index}} is missing the content field":"Announcement #{{index}} is missing the content field","Announcement #{{index}} is missing the publish date field":"Announcement #{{index}} is missing the publish date field","Announcement #{{index}} note cannot exceed 100 characters":"Announcement #{{index}} note cannot exceed 100 characters","Announcement #{{index}} publish date cannot be empty":"Announcement #{{index}} publish date cannot be empty","All Models":"All Models","All models in use are properly configured.":"All models in use are properly configured.","All Must Match (AND)":"All Must Match (AND)","All nodes":"All nodes","All playground messages saved in this browser will be removed. This cannot be undone.":"All playground messages saved in this browser will be removed. This cannot be undone.","All requests":"All requests","All requests must include":"All requests must include","Announcements cannot exceed 100 entries":"Announcements cannot exceed 100 entries","All results":"All results","Another log export is running. Try again after it finishes.":"Another log export is running. Try again after it finishes.","All routes":"All routes","All Status":"All Status","All Sync Status":"All Sync Status","All systems operational":"All systems operational","All Tags":"All Tags","All tokens":"All tokens","All Types":"All Types","All upstream data is trusted":"All upstream data is trusted","All users":"All users","All Vendors":"All Vendors","All-time":"All-time","Allocated Memory":"Allocated Memory","Allow accountFilter parameter":"Allow accountFilter parameter","Allow balance redemption":"Allow balance redemption","Allow Claude beta query passthrough":"Allow Claude beta query passthrough","Allow clients to query configured prices via `/api/ratio`.":"Allow clients to query configured prices via `/api/ratio`.","Allow clients to query configured ratios via `/api/ratio`.":"Allow clients to query configured ratios via `/api/ratio`.","API info #{{index}} contains disallowed content":"API info #{{index}} contains disallowed content","API info #{{index}} description cannot exceed 200 characters":"API info #{{index}} description cannot exceed 200 characters","API info #{{index}} has a URL that cannot be parsed: {{error}}":"API info #{{index}} has a URL that cannot be parsed: {{error}}","API info #{{index}} has an invalid color value":"API info #{{index}} has an invalid color value","API info #{{index}} has an invalid URL format":"API info #{{index}} has an invalid URL format","API info #{{index}} is missing the color field":"API info #{{index}} is missing the color field","API info #{{index}} is missing the description field":"API info #{{index}} is missing the description field","API info #{{index}} is missing the route description field":"API info #{{index}} is missing the route description field","API info #{{index}} is missing the URL field":"API info #{{index}} is missing the URL field","API info #{{index}} route description cannot exceed 100 characters":"API info #{{index}} route description cannot exceed 100 characters","API info #{{index}} URL cannot exceed 500 characters":"API info #{{index}} URL cannot exceed 500 characters","Allow HTTP image requests":"Allow HTTP image requests","API info cannot exceed 50 entries":"API info cannot exceed 50 entries","Allow include usage obfuscation passthrough":"Allow include usage obfuscation passthrough","Allow inference geography passthrough":"Allow inference geography passthrough","Allow inference_geo passthrough":"Allow inference_geo passthrough","Allow Insecure Origins":"Allow Insecure Origins","Allow listing when a channel is available and the user has group access. This does not change API access.":"Allow listing when a channel is available and the user has group access. This does not change API access.","Allow metadata sync":"Allow metadata sync","Allow new users to register":"Allow new users to register","Allow Private IPs":"Allow Private IPs","Allow querying user quota":"Allow querying user quota","Allow registration with password":"Allow registration with password","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"Allow Retry","Allow safety_identifier passthrough":"Allow safety_identifier passthrough","Allow self-signed or hostname-mismatched SMTP certificates":"Allow self-signed or hostname-mismatched SMTP certificates","Allow service_tier passthrough":"Allow service_tier passthrough","Allow speed passthrough":"Allow speed passthrough","Allow updates":"Allow updates","Allow upstream callbacks":"Allow upstream callbacks","Allow users to check in daily for random quota rewards":"Allow users to check in daily for random quota rewards","Allow users to enter promo codes":"Allow users to enter promo codes","Allow users to log in with password":"Allow users to log in with password","Allow users to register and sign in with Passkey (WebAuthn)":"Allow users to register and sign in with Passkey (WebAuthn)","Allow users to sign in with Discord":"Allow users to sign in with Discord","Allow users to sign in with GitHub":"Allow users to sign in with GitHub","Allow users to sign in with LinuxDO":"Allow users to sign in with LinuxDO","Allow users to sign in with OpenID Connect":"Allow users to sign in with OpenID Connect","Allow users to sign in with Telegram":"Allow users to sign in with Telegram","Allow users to sign in with this provider":"Allow users to sign in with this provider","Allow users to sign in with WeChat":"Allow users to sign in with WeChat","Allow using models without price configuration":"Allow using models without price configuration","Allow wallet balance after quota used up":"Allow wallet balance after quota used up","Allowed":"Allowed","Allowed hosts":"Allowed hosts","Allowed Origins":"Allowed Origins","Allowed Passkey websites":"Allowed Passkey websites","Allowed Ports":"Allowed Ports","Allows selected fields to be overwritten after a sync preview. No automatic synchronization.":"Allows selected fields to be overwritten after a sync preview. No automatic synchronization.","Already have an account?":"Already have an account?","Also remove custom pricing":"Also remove custom pricing","Also remove from all channels":"Also remove from all channels","Also remove pricing":"Also remove pricing","Always matches (default tier).":"Always matches (default tier).","Amount":"Amount","Amount cannot be changed when editing.":"Amount cannot be changed when editing.","Amount discount":"Amount discount","Amount Due":"Amount Due","Amount must be a whole number":"Amount must be a whole number","Amount must be greater than 0":"Amount must be greater than 0","Amount of quota to credit to user account.":"Amount of quota to credit to user account.","Amount options must be a JSON array":"Amount options must be a JSON array","Amount the user pays to purchase this plan (USD).":"Amount the user pays to purchase this plan (USD).","Amount the user pays to purchase this plan; the actual currency depends on the payment gateway.":"Amount the user pays to purchase this plan; the actual currency depends on the payment gateway.","Amount to pay:":"Amount to pay:","An empty field uses the system website address. If Passkeys already work, keep the existing domain.":"An empty field uses the system website address. If Passkeys already work, keep the existing domain.","An expression draft already exists. Open the Expression tab to keep editing it.":"An expression draft already exists. Open the Expression tab to keep editing it.","An unexpected error occurred":"An unexpected error occurred","An unknown error occurred":"An unknown error occurred","Analyze data":"Analyze data","and":"and","Announcement added. Click \\"Save Settings\\" to apply.":"Announcement added. Click \\"Save Settings\\" to apply.","Announcement content":"Announcement content","Announcement deleted. Click \\"Save Settings\\" to apply.":"Announcement deleted. Click \\"Save Settings\\" to apply.","Announcement Details":"Announcement Details","Announcement displayed to users (supports Markdown & HTML)":"Announcement displayed to users (supports Markdown & HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"Announcement updated. Click \\"Save Settings\\" to apply.","Announcements":"Announcements","Announcements saved successfully":"Announcements saved successfully","Answer":"Answer","Answers for common access and billing questions":"Answers for common access and billing questions","Anthropic":"Anthropic","Anthropic Messages to OpenAI Chat":"Anthropic Messages to OpenAI Chat","Anthropic Messages to OpenAI Responses":"Anthropic Messages to OpenAI Responses","Any condition":"Any condition","Any Match (OR)":"Any Match (OR)","Anyone can publish an index. A plugin installed from a third-party source has the same access as one you upload by hand: review its source before installing.":"Anyone can publish an index. A plugin installed from a third-party source has the same access as one you upload by hand: review its source before installing.","API":"API","API Access":"API Access","API Addresses":"API Addresses","API Base URL":"API Base URL","API Base URL (Important: Not Chat API)":"API Base URL (Important: Not Chat API)","API Base URL (Important: Not Chat API) *":"API Base URL (Important: Not Chat API) *","API Base URL *":"API Base URL *","API Endpoints":"API Endpoints","API Info":"API Info","API info added. Click \\"Save Settings\\" to apply.":"API info added. Click \\"Save Settings\\" to apply.","API info deleted. Click \\"Save Settings\\" to apply.":"API info deleted. Click \\"Save Settings\\" to apply.","API info saved successfully":"API info saved successfully","API info updated. Click \\"Save Settings\\" to apply.":"API info updated. Click \\"Save Settings\\" to apply.","API key":"API key","API Key":"API Key","API Key (one per line for batch mode)":"API Key (one per line for batch mode)","API Key (Production)":"API Key (Production)","API Key (Sandbox)":"API Key (Sandbox)","API Key *":"API Key *","API Key created successfully":"API Key created successfully","API Key deleted successfully":"API Key deleted successfully","API Key disabled successfully":"API Key disabled successfully","API Key enabled successfully":"API Key enabled successfully","API key from the provider":"API key from the provider","API key is loading, please try again in a moment":"API key is loading, please try again in a moment","API key is required":"API key is required","API Key mode (does not support batch creation)":"API Key mode (does not support batch creation)","API Key mode: use APIKey|Region":"API Key mode: use APIKey|Region","API Key Quota":"API Key Quota","API Key updated successfully":"API Key updated successfully","API keys":"API keys","API Keys":"API Keys","API Private Key":"API Private Key","API Requests":"API Requests","API secret":"API secret","API token batch deletion":"API token batch deletion","API token batch key access":"API token batch key access","API token configuration update":"API token configuration update","API token creation":"API token creation","API token deletion":"API token deletion","API token key access":"API token key access","API token management":"API token management","API token status update":"API token status update","API URL":"API URL","API usage records":"API usage records","API version":"API version","API Version":"API Version","API2GPT":"API2GPT","Ascending":"Ascending","Audio input cost {{quota}}":"Audio input cost {{quota}}","App":"App","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.","Append":"Append","Append mode: New keys will be added to the end of the existing key list":"Append mode: New keys will be added to the end of the existing key list","Append Template":"Append Template","Append to channel":"Append to channel","Append to End":"Append to End","Append to existing keys":"Append to existing keys","Append value to array / string / object end":"Append value to array / string / object end","appended":"appended","Applicable channels":"Applicable channels","Applicable conditions":"Applicable conditions","Application":"Application","Applied {{name}} pricing to {{count}} models":"Applied {{name}} pricing to {{count}} models","Applied changes":"Applied changes","Applied upstream model changes to {{count}} channels":"Applied upstream model changes to {{count}} channels","Applied upstream model changes to channel (ID: {{id}})":"Applied upstream model changes to channel (ID: {{id}})","Applies to custom completion endpoints. JSON map of model → ratio.":"Applies to custom completion endpoints. JSON map of model → ratio.","Apply":"Apply","Apply {{count}} model changes":"Apply {{count}} model changes","Apply {{field}} for {{name}}":"Apply {{field}} for {{name}}","Apply All Upstream Updates":"Apply All Upstream Updates","Apply changes":"Apply changes","Apply disable rules to upstream request errors and scheduled or bulk health checks":"Apply disable rules to upstream request errors and scheduled or bulk health checks","Apply Filters":"Apply Filters","Apply IP Filter to Resolved Domains":"Apply IP Filter to Resolved Domains","Apply Overwrite":"Apply Overwrite","Apply plan":"Apply plan","Apply reset":"Apply reset","Apply selected changes":"Apply selected changes","Apply Sync":"Apply Sync","Apply to all rows":"Apply to all rows","Apply to draft":"Apply to draft","Applying...":"Applying...","Approx.":"Approx.","Approximate prices for common specs.":"Approximate prices for common specs.","apps":"apps","Apps":"Apps","apps tracked":"apps tracked","Apps using the most tokens through new-api":"Apps using the most tokens through new-api","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.","Are you sure you want to delete":"Are you sure you want to delete","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"Are you sure you want to delete {{count}} model(s)? This action cannot be undone.","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"Are you sure you want to delete all auto-disabled keys? This action cannot be undone.","Are you sure you want to delete channel \\"{{name}}\\"? This action cannot be undone.":"Are you sure you want to delete channel \\"{{name}}\\"? This action cannot be undone.","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.","Are you sure you want to delete group \\"{{name}}\\"? This action cannot be undone.":"Are you sure you want to delete group \\"{{name}}\\"? This action cannot be undone.","Auto group {{group}} is duplicated":"Auto group {{group}} is duplicated","Auto group {{group}} is unavailable or unauthorized":"Auto group {{group}} is unavailable or unauthorized","Are you sure you want to delete model \\"{{name}}\\"? This action cannot be undone.":"Are you sure you want to delete model \\"{{name}}\\"? This action cannot be undone.","Are you sure you want to delete this key? This action cannot be undone.":"Are you sure you want to delete this key? This action cannot be undone.","Are you sure you want to disable all enabled keys?":"Are you sure you want to disable all enabled keys?","Are you sure you want to enable all keys?":"Are you sure you want to enable all keys?","Are you sure you want to enable plugin {{name}} ({{key}})?":"Are you sure you want to enable plugin {{name}} ({{key}})?","Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.":"Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.","Are you sure you want to sign out? You will need to sign in again to access your account.":"Are you sure you want to sign out? You will need to sign in again to access your account.","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.","Are you sure?":"Are you sure?","Area Chart":"Area Chart","Args (space separated)":"Args (space separated)","Arguments JSON":"Arguments JSON","Arguments must be a JSON array":"Arguments must be a JSON array","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.","Artifacts":"Artifacts","Asc":"Asc","Ask anything":"Ask anything","Assign models from the model list to see them here.":"Assign models from the model list to see them here.","Assigned by administrator only":"Assigned by administrator only","Assigned by administrators and used to represent a user level, such as default or vip.":"Assigned by administrators and used to represent a user level, such as default or vip.","Async":"Async","Async task polling":"Async task polling","Async Task Public Address":"Async Task Public Address","Async task refund":"Async task refund","At least one model regex pattern is required":"At least one model regex pattern is required","At least one valid key source is required":"At least one valid key source is required","Attach":"Attach","Attempt":"Attempt","Audio":"Audio","Audio and Realtime pricing must be converted manually.":"Audio and Realtime pricing must be converted manually.","Audio and text-only requests keep their respective pricing.":"Audio and text-only requests keep their respective pricing.","Audio comp.":"Audio comp.","Audio completion ratio":"Audio completion ratio","Audio In":"Audio In","Audio input":"Audio input","Audio Input":"Audio Input","Audio input price":"Audio input price","Audio Input Price":"Audio Input Price","Audio Out":"Audio Out","Audio output":"Audio output","Audio Output":"Audio Output","Audio output price":"Audio output price","Audio output price requires an audio input price.":"Audio output price requires an audio input price.","Audio playback failed":"Audio playback failed","Audio Preview":"Audio Preview","Audio ratio":"Audio ratio","Audio requests":"Audio requests","Audio Tokens":"Audio Tokens","Audit access changed. Showing only your records.":"Audit access changed. Showing only your records.","Audit Logs":"Audit Logs","Audit metadata is unavailable":"Audit metadata is unavailable","Audit records start after this feature was enabled. Earlier records remain in Common Logs.":"Audit records start after this feature was enabled. Earlier records remain in Common Logs.","Auth":"Auth","Auth configured":"Auth configured","Auth name":"Auth name","Auth name is required":"Auth name is required","Auth Style":"Auth Style","Auth type is invalid":"Auth type is invalid","Auth value":"Auth value","Auth value is required":"Auth value is required","auth.resetPasswordConfirm.backToLogin":"Return to login","auth.resetPasswordConfirm.confirm":"Confirm reset password","auth.resetPasswordConfirm.description":"Confirm the reset request to generate a new password.","auth.resetPasswordConfirm.retry":"Retry ({{seconds}}s)","auth.resetPasswordConfirm.success":"Your password has been reset successfully","Authentication":"Authentication","Authentication for upstream requests; channel credentials may still be used.":"Authentication for upstream requests; channel credentials may still be used.","Authentication Method":"Authentication Method","Authenticator code":"Authenticator code","Authenticator code or backup code":"Authenticator code or backup code","Authorization callback URL":"Authorization callback URL","Authorization Endpoint":"Authorization Endpoint","Authorization Endpoint (Optional)":"Authorization Endpoint (Optional)","Authorize":"Authorize","Auto":"Auto","Auto (Circuit Breaker)":"Auto (Circuit Breaker)","Auto assignment order":"Auto assignment order","Auto Ban":"Auto Ban","Auto detect (default)":"Auto detect (default)","Auto Disabled":"Auto Disabled","Bark push URL cannot be empty":"Bark push URL cannot be empty","Auto group behavior":"Auto group behavior","Auto Group Chain":"Auto Group Chain","Auto group order":"Auto group order","Auto groups must not contain duplicates":"Auto groups must not contain duplicates","Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.":"Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.","Auto refresh":"Auto refresh","Auto refresh (5s)":"Auto refresh (5s)","Auto Sync Upstream Models":"Auto Sync Upstream Models","Auto-disable channel":"Auto-disable channel","Auto-disable disabled":"Auto-disable disabled","Auto-disable enabled":"Auto-disable enabled","Auto-disable rules":"Auto-disable rules","Auto-disable status codes":"Auto-disable status codes","Auto-disable-enabled channels only":"Auto-disable-enabled channels only","Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.":"Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.","Auto-discover":"Auto-discover","Auto-discovers endpoints from the provider":"Auto-discovers endpoints from the provider","Auto-fill when one field exists and another is missing":"Auto-fill when one field exists and another is missing","Auto-refreshing every {{seconds}}s":"Auto-refreshing every {{seconds}}s","Auto-retry status codes":"Auto-retry status codes","Automatic from system website address":"Automatic from system website address","Automatic selection":"Automatic selection","Automatically disable channel on repeated failures":"Automatically disable channel on repeated failures","Automatically disable channels exceeding this response time":"Automatically disable channels exceeding this response time","Automatically disable channels when tests fail":"Automatically disable channels when tests fail","Automatically probe all channels in the background":"Automatically probe all channels in the background","Automatically replaces upstream callback URLs with the server address.":"Automatically replaces upstream callback URLs with the server address.","Automatically selects the best available group with circuit breaker mechanism":"Automatically selects the best available group with circuit breaker mechanism","Automatically sync model list when upstream changes are detected":"Automatically sync model list when upstream changes are detected","Availability (last 24h)":"Availability (last 24h)","Available":"Available","Available Balance":"Available Balance","Available channels: {{count}}":"Available channels: {{count}}","Available credits are ordered by soonest expiration.":"Available credits are ordered by soonest expiration.","Available disk space":"Available disk space","Available Models":"Available Models","Available reset credits":"Available reset credits","Available Rewards":"Available Rewards","Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.":"Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.","Average latency":"Average latency","Average latency, TTFT, and success rate by group":"Average latency, TTFT, and success rate by group","Average latency, TTFT, TPS, and success rate":"Average latency, TTFT, TPS, and success rate","Average RPM":"Average RPM","Average time-to-first-token (TTFT) by group":"Average time-to-first-token (TTFT) by group","Average tokens per second sustained per group":"Average tokens per second sustained per group","Average TPM":"Average TPM","Average TTFT":"Average TTFT","Awake engines":"Awake engines","Batch-adding Vertex AI keys requires a JSON array, for example {{example}}. Check the input: {{error}}":"Batch-adding Vertex AI keys requires a JSON array, for example {{example}}. Check the input: {{error}}","AWS":"AWS","AWS API":"AWS API","AWS Bedrock Claude Compat":"AWS Bedrock Claude Compat","AWS Key Format":"AWS Key Format","Azure":"Azure","AZURE_OPENAI_ENDPOINT":"AZURE_OPENAI_ENDPOINT","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"Back","Back to configuration":"Back to configuration","Back to Dashboard":"Back to Dashboard","Billed per request":"Billed per request","Back to footnote {{id}} reference":"Back to footnote {{id}} reference","Back to Home":"Back to Home","Back to login":"Back to login","Back to Models":"Back to Models","Backed up":"Backed up","Billing expressions must be a JSON object mapping models to expressions: {{error}}":"Billing expressions must be a JSON object mapping models to expressions: {{error}}","Background":"Background","Background job tracker for queued work.":"Background job tracker for queued work.","Backup Code":"Backup Code","Backup code must be in format XXXX-XXXX":"Backup code must be in format XXXX-XXXX","Backup codes regenerated successfully":"Backup codes regenerated successfully","Backup codes remaining: {{count}}":"Backup codes remaining: {{count}}","Bad Request":"Bad Request","Badge Color":"Badge Color","Billing parameters: {{params}}":"Billing parameters: {{params}}","Baidu":"Baidu","Baidu V2":"Baidu V2","Balance":"Balance","Balance and top-up management":"Balance and top-up management","Balance depleted":"Balance depleted","Balance is shown in quota units":"Balance is shown in quota units","Balance queried successfully":"Balance queried successfully","Balance Query":"Balance Query","Balance Query route does not support pass-through":"Balance Query route does not support pass-through","Balance response not recognized":"Balance response not recognized","Balance updated successfully":"Balance updated successfully","Balance updated: {{balance}}":"Balance updated: {{balance}}","Bar Chart":"Bar Chart","Bark Push URL":"Bark Push URL","Binding successful":"Binding successful","Base":"Base","Base address provided by your Epay service":"Base address provided by your Epay service","Base amount. Actual deduction = base amount × system group rate.":"Base amount. Actual deduction = base amount × system group rate.","Base charge":"Base charge","Base group ratios apply until you add an override.":"Base group ratios apply until you add an override.","Base input and output token prices for this tier.":"Base input and output token prices for this tier.","Base input price only":"Base input price only","Base Limits":"Base Limits","Base multipliers applied when users select specific groups.":"Base multipliers applied when users select specific groups.","Base Price":"Base Price","Base rate limit windows for this account.":"Base rate limit windows for this account.","Base URL":"Base URL","Base URL *":"Base URL *","Base URL is required for this channel type":"Base URL is required for this channel type","Bonus for inviting a user {{quota}}":"Bonus for inviting a user {{quota}}","Base URL is required when an advanced route uses an upstream path":"Base URL is required when an advanced route uses an upstream path","Base URL of your Uptime Kuma instance":"Base URL of your Uptime Kuma instance","Basic Authentication":"Basic Authentication","Basic Configuration":"Basic Configuration","Basic Info":"Basic Info","Basic Information":"Basic Information","Basic Templates":"Basic Templates","Batch Add":"Batch Add","Batch Add (one key per line)":"Batch Add (one key per line)","Batch add mappings":"Batch add mappings","Batch channel test":"Batch channel test","Batch delete API tokens":"Batch delete API tokens","Batch delete failed":"Batch delete failed","Batch deleted {{count}} channels":"Batch deleted {{count}} channels","Batch deleted {{count}} redemption codes":"Batch deleted {{count}} redemption codes","Batch deleted redemption codes (count not recorded)":"Batch deleted redemption codes (count not recorded)","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed","Batch detection failed":"Batch detection failed","Batch disable failed":"Batch disable failed","Batch Edit":"Batch Edit","Batch edit all channels with this tag. Leave fields empty to keep current values.":"Batch edit all channels with this tag. Leave fields empty to keep current values.","Batch Edit by Tag":"Batch Edit by Tag","Batch enable failed":"Batch enable failed","Batch Operations":"Batch Operations","Batch processing failed":"Batch processing failed","Batch redirect":"Batch redirect","Batch set tag for {{count}} channels":"Batch set tag for {{count}} channels","Batch test completed: {{count}} succeeded":"Batch test completed: {{count}} succeeded","Batch test completed: {{success}} succeeded, {{failed}} failed":"Batch test completed: {{success}} succeeded, {{failed}} failed","Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed":"Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed","Batch testing models...":"Batch testing models...","Batch updated channel status ({{count}}/{{total}} changed)":"Batch updated channel status ({{count}}/{{total}} changed)","Batch upstream model update":"Batch upstream model update","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed","Before conversion":"Before conversion","Best for single-tenant deployments. Pricing and billing options stay hidden.":"Best for single-tenant deployments. Pricing and billing options stay hidden.","Best TTFT":"Best TTFT","Billable image count":"Billable image count","Billable input tokens":"Billable input tokens","Billable output tokens":"Billable output tokens","Billable token breakdown":"Billable token breakdown","Billed as default. No cell for this combination, so the base ratio of default applies — the 0.8 of vip plays no part.":"Billed as default. No cell for this combination, so the base ratio of default applies — the 0.8 of vip plays no part.","Billed as premium. The highlighted cell matches, so the override 0.3 applies.":"Billed as premium. The highlighted cell matches, so the override 0.3 applies.","Billing":"Billing","Billing & Payment":"Billing & Payment","Billing currency":"Billing currency","Billing Details":"Billing Details","Billing expression":"Billing expression","Billing group":"Billing group","Billing group = default (the token has a group, so use it)":"Billing group = default (the token has a group, so use it)","Billing group = premium (the token has a group, so use it)":"Billing group = premium (the token has a group, so use it)","Billing group = vip (the token has no group, so use the user group)":"Billing group = vip (the token has no group, so use the user group)","Billing History":"Billing History","Billing management":"Billing management","Billing Mode":"Billing Mode","Billing parameters":"Billing parameters","Billing Path":"Billing Path","Billing Process":"Billing Process","Billing rule: each call is billed as the token group (falling back to the user group when the token has none). The base ratio always comes from that billing group, not from the user group. To give a user group a special price on another billing group, add an entry in the override matrix.":"Billing rule: each call is billed as the token group (falling back to the user group when the token has none). The base ratio always comes from that billing group, not from the user group. To give a user group a special price on another billing group, add an entry in the override matrix.","Billing Source":"Billing Source","Billing values must be finite and non-negative.":"Billing values must be finite and non-negative.","Bind":"Bind","Bind a Pancake store + product":"Bind a Pancake store + product","Bind an email address to your account.":"Bind an email address to your account.","Bind Email":"Bind Email","Bind task plugins":"Bind task plugins","Bind Telegram Account":"Bind Telegram Account","Bind WeChat":"Bind WeChat","Bind WeChat Account":"Bind WeChat Account","Binding Information":"Binding Information","Binding successful!":"Binding successful!","Binding Type":"Binding Type","Binding your {{provider}} account":"Binding your {{provider}} account","Binding...":"Binding...","Bindings":"Bindings","Calculating priority...":"Calculating priority...","Callback URL configuration error":"Callback URL configuration error","Blacklist":"Blacklist","Blacklist (Block listed domains)":"Blacklist (Block listed domains)","Blacklist (Block listed IPs)":"Blacklist (Block listed IPs)","Blank Rule":"Blank Rule","Cannot create users with permission level equal to or higher than yourself":"Cannot create users with permission level equal to or higher than yourself","Cannot delete super administrator account":"Cannot delete super administrator account","Cannot delete the last key":"Cannot delete the last key","Cannot demote super administrator user":"Cannot demote super administrator user","Cannot disable super administrator user":"Cannot disable super administrator user","Cannot enable the email domain restriction. Enter the allowed email domains first.":"Cannot enable the email domain restriction. Enter the allowed email domains first.","Cannot enable Turnstile verification. Enter the Turnstile settings first.":"Cannot enable Turnstile verification. Enter the Turnstile settings first.","Cannot enable WeChat login. Enter the WeChat login settings first.":"Cannot enable WeChat login. Enter the WeChat login settings first.","Cannot enable {{provider}}. Enter the {{provider}} Client ID and Client Secret first.":"Cannot enable {{provider}}. Enter the {{provider}} Client ID and Client Secret first.","Blend":"Blend","Block email aliases (e.g., user+alias@domain.com)":"Block email aliases (e.g., user+alias@domain.com)","Blocked keywords":"Blocked keywords","Blocks messages when sensitive keywords are detected.":"Blocks messages when sensitive keywords are detected.","Body param":"Body param","Boolean":"Boolean","Border radius":"Border radius","Bot Name":"Bot Name","Bot Protection":"Bot Protection","Bot Token":"Bot Token","Bot:":"Bot:","Bound":"Bound","Bound a subscription":"Bound a subscription","Bound Channels":"Bound Channels","Bound Only":"Bound Only","Bound product:":"Bound product:","Bound store:":"Bound store:","Branch actions {{path}}":"Branch actions {{path}}","Bring channels back online after successful checks":"Bring channels back online after successful checks","Browse and compare":"Browse and compare","Browse available models and pricing":"Browse available models and pricing","Browse rankings by category":"Browse rankings by category","Browser":"Browser","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.","Budget Tokens Ratio":"Budget Tokens Ratio","Budgets":"Budgets","Build on your API gateway in minutes":"Build on your API gateway in minutes","Built for developers,":"Built for developers,","Built-in":"Built-in","Built-in Device":"Built-in Device","Built-in is v{{factory}}; delete the custom version to return to it":"Built-in is v{{factory}}; delete the custom version to return to it","Built-in pricing may become effective again.":"Built-in pricing may become effective again.","Built-in v{{factory}} / marketplace v{{market}}":"Built-in v{{factory}} / marketplace v{{market}}","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"Built-in: phone fingerprint/face, or Windows Hello; External: USB security key","Bulk actions for {{count}} selected records":"Bulk actions for {{count}} selected records","by":"by","By category":"By category","By model author":"By model author","By quota":"By quota","By requests":"By requests","By tokens":"By tokens","Changes save on drop. You can undo the last move.":"Changes save on drop. You can undo the last move.","Channel affinity settings are not initialized":"Channel affinity settings are not initialized","Cache":"Cache","Cache create (1h) price":"Cache create (1h) price","Cache create price":"Cache create price","Cache Creation":"Cache Creation","Cache Creation (1h)":"Cache Creation (1h)","Cache Creation (5m)":"Cache Creation (5m)","Cache Directory":"Cache Directory","Cache Directory Disk Space":"Cache Directory Disk Space","Cache Directory Info":"Cache Directory Info","Channel does not exist":"Channel does not exist","Cache Entries":"Cache Entries","Cache mode":"Cache mode","Cache pricing":"Cache pricing","Cache ratio":"Cache ratio","Cache Read":"Cache Read","Cache read price":"Cache read price","Cache repeated prompt prefixes for cheaper, faster reuse":"Cache repeated prompt prefixes for cheaper, faster reuse","Cache write":"Cache write","Cache Write":"Cache Write","Cache Write (1h)":"Cache Write (1h)","Cache Write (5m)":"Cache Write (5m)","Cache write price":"Cache write price","Cached":"Cached","Cached input":"Cached input","Cached tokens":"Cached tokens","Calculated price: ${{price}} per 1M tokens":"Calculated price: ${{price}} per 1M tokens","Calculated ratio: {{ratio}}":"Calculated ratio: {{ratio}}","Calculating...":"Calculating...","Call 1: the token group is premium":"Call 1: the token group is premium","Call 2: the token group is default":"Call 2: the token group is default","Call 3: the token has no group":"Call 3: the token has no group","Call Count Distribution":"Call Count Distribution","Call Count Ranking":"Call Count Ranking","Call Proportion":"Call Proportion","Call Trend":"Call Trend","Callback address":"Callback address","Callback Caller IP":"Callback Caller IP","Callback notification URL":"Callback notification URL","Callback Payment Method":"Callback Payment Method","Callback URL format":"Callback URL format","Cancel":"Cancel","Cancelled":"Cancelled","Cancelled at":"Cancelled at","Capabilities":"Capabilities","Caps the response length":"Caps the response length","Capture a reusable bundle of models, tags, or endpoints.":"Capture a reusable bundle of models, tags, or endpoints.","Card view":"Card view","Cascade disable channels":"Cascade disable channels","Catalog visibility":"Catalog visibility","Catch-all route must be last for the same incoming path":"Catch-all route must be last for the same incoming path","Category":"Category","Category Name":"Category Name","Category name is required":"Category name is required","Category name must be less than 50 characters":"Category name must be less than 50 characters","Caution":"Caution","CC Switch":"CC Switch","Centered":"Centered","Chain":"Chain","Change":"Change","Change domain":"Change domain","Change language":"Change language","Change model vendor":"Change model vendor","Change Password":"Change Password","Change provider":"Change provider","Change system settings and custom OAuth providers, and sync prices.":"Change system settings and custom OAuth providers, and sync prices.","Change the Passkey domain?":"Change the Passkey domain?","Change To":"Change To","Change upstream model names":"Change upstream model names","Change vendor":"Change vendor","Change your display name and personal settings.":"Change your display name and personal settings.","Changed":"Changed","Changed / Total":"Changed / Total","Channel notifications":"Channel notifications","Channel priorities changed. Refresh and try again.":"Channel priorities changed. Refresh and try again.","Channel priorities saved":"Channel priorities saved","Channel priority is outside the sortable range":"Channel priority is outside the sortable range","Check-in failed, please try again later":"Check-in failed, please try again later","Check-in failed: quota update error":"Check-in failed: quota update error","Check-in feature is not enabled":"Check-in feature is not enabled","Changed access token permissions":"Changed access token permissions","Changed Fields":"Changed Fields","Check-in successful":"Check-in successful","Changed fields: {{fields}}":"Changed fields: {{fields}}","Changelog":"Changelog","Changes are written to the settings draft on save.":"Changes are written to the settings draft on save.","Changes declared endpoint types and custom paths shown to users.":"Changes declared endpoint types and custom paths shown to users.","Changes visibility in the model catalog. Channels remain configured separately.":"Changes visibility in the model catalog. Channels remain configured separately.","Changes visibility in the model square. Channel status and existing API access are unchanged.":"Changes visibility in the model square. Channel status and existing API access are unchanged.","Changes which model names inherit this metadata. Prices are not inherited.":"Changes which model names inherit this metadata. Prices are not inherited.","Changing...":"Changing...","Channel":"Channel","Channel {{name}}":"Channel {{name}}","Channel {{name}} model {{model}}":"Channel {{name}} model {{model}}","Channel Affinity":"Channel Affinity","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.","Channel Affinity: Upstream Cache Hit":"Channel Affinity: Upstream Cache Hit","Channel availability and group access are derived from enabled channels. Importing metadata does not create a callable channel.":"Channel availability and group access are derived from enabled channels. Importing metadata does not create a callable channel.","Choose a time range of up to {{days}} days. The other filters on this page also apply.":"Choose a time range of up to {{days}} days. The other filters on this page also apply.","Channel configuration":"Channel configuration","Channel consistency repaired: {{success}} succeeded, {{fails}} failed":"Channel consistency repaired: {{success}} succeeded, {{fails}} failed","Channel copied successfully":"Channel copied successfully","Channel created successfully":"Channel created successfully","Channel deleted successfully":"Channel deleted successfully","Channel disable requested":"Channel disable requested","Channel disabled successfully":"Channel disabled successfully","Channel enabled successfully":"Channel enabled successfully","Channel error":"Channel error","Channel Extra Settings":"Channel Extra Settings","Channel health":"Channel health","Channel health checks":"Channel health checks","Channel ID":"Channel ID","Channel ID is required":"Channel ID is required","Channel is not selected":"Channel is not selected","Channel key":"Channel key","Channel key unlocked":"Channel key unlocked","Channel Management":"Channel Management","Channel models":"Channel models","Channel name is required":"Channel name is required","Channel selected":"Channel selected","Channel selection":"Channel selection","Channel switching options":"Channel switching options","Channel test completed":"Channel test completed","Channel test concurrency":"Channel test concurrency","Channel test concurrency must be between 1 and 32":"Channel test concurrency must be between 1 and 32","Channel test mode":"Channel test mode","Channel type":"Channel type","Channel type does not match the status endpoint":"Channel type does not match the status endpoint","Channel type is required":"Channel type is required","Channel types":"Channel types","Channel types you can use when binding this plugin.":"Channel types you can use when binding this plugin.","Channel updated successfully":"Channel updated successfully","Channel-specific settings (JSON format)":"Channel-specific settings (JSON format)","Channel:":"Channel:","channel(s)? This action cannot be undone.":"channel(s)? This action cannot be undone.","Channels":"Channels","Channels {{channels}} · Groups {{groups}}":"Channels {{channels}} · Groups {{groups}}","Channels and groups":"Channels and groups","Channels deleted successfully":"Channels deleted successfully","Channels must also enable Auto Ban before automatic disabling can take effect.":"Channels must also enable Auto Ban before automatic disabling can take effect.","Character chat, storytelling, persona":"Character chat, storytelling, persona","Charge.":"Charge.","Chart Preferences":"Chart Preferences","Chart Settings":"Chart Settings","Chat":"Chat","Chat area":"Chat area","Chat Area":"Chat Area","Chat Client Name":"Chat Client Name","Chat client name is required":"Chat client name is required","Chat configuration JSON":"Chat configuration JSON","Chat preset not found":"Chat preset not found","Chat Presets":"Chat Presets","Chat session management":"Chat session management","ChatCompletions -> Responses Compatibility":"ChatCompletions -> Responses Compatibility","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Check again":"Check again","Check channels awaiting recovery only":"Check channels awaiting recovery only","Check for new upstream models":"Check for new upstream models","Check for updates":"Check for updates","Check in daily to receive random quota rewards":"Check in daily to receive random quota rewards","Check in now":"Check in now","Check line {{line}} for a missing comma.":"Check line {{line}} for a missing comma.","Check out the Quick Start":"Check out the Quick Start","Check resolved IPs against IP filters even when accessing by domain":"Check resolved IPs against IP filters even when accessing by domain","Check the override matrix at row = user group, column = billing group. If that cell is set, use it. Otherwise use the billing group base ratio from the pricing table.":"Check the override matrix at row = user group, column = billing group. If that cell is set, use it. Otherwise use the billing group base ratio from the pricing table.","Check-in failed":"Check-in failed","Check-in Rewards":"Check-in Rewards","Check-in Settings":"Check-in Settings","Check-in successful! Received":"Check-in successful! Received","Checked in":"Checked in","Checking connection":"Checking connection","Checking file integrity...":"Checking file integrity...","Checking name...":"Checking name...","Checking updates...":"Checking updates...","Checking upstream models. Channel models will only change after confirmation.":"Checking upstream models. Channel models will only change after confirmation.","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","Checks hourly while you are online, including pre-releases.":"Checks hourly while you are online, including pre-releases.","Checks text extracted from supported requests against keywords, ignoring case. A match rejects the request before upstream processing and does not affect channel health. Images, audio and generated responses are not checked.":"Checks text extracted from supported requests against keywords, ignoring case. A match rejects the request before upstream processing and does not affect channel health. Images, audio and generated responses are not checked.","Chinese":"Chinese","Choose a complete upstream protocol plan or edit individual route groups.":"Choose a complete upstream protocol plan or edit individual route groups.","Choose a provider or plugin to configure your channel.":"Choose a provider or plugin to configure your channel.","Choose a time at least one hour from now":"Choose a time at least one hour from now","Choose a username":"Choose a username","Choose a valid IANA timezone.":"Choose a valid IANA timezone.","Choose an amount and payment method":"Choose an amount and payment method","Choose and order the groups this API key will try.":"Choose and order the groups this API key will try.","Choose another file":"Choose another file","Choose between default expanded, compact icon-only, or full layout mode":"Choose between default expanded, compact icon-only, or full layout mode","Choose between inset, floating, or standard sidebar layout":"Choose between inset, floating, or standard sidebar layout","Choose between left-to-right or right-to-left site direction":"Choose between left-to-right or right-to-left site direction","Choose between system preference, light mode, or dark mode":"Choose between system preference, light mode, or dark mode","Choose channels to sync upstream ratio configurations from":"Choose channels to sync upstream ratio configurations from","Choose file":"Choose file","Choose Group":"Choose Group","Choose how flow widths are calculated.":"Choose how flow widths are calculated.","Choose how quota values are shown to users":"Choose how quota values are shown to users","Choose how the platform will operate":"Choose how the platform will operate","Choose how to filter domains":"Choose how to filter domains","Choose how to filter IP addresses":"Choose how to filter IP addresses","Choose one SMTP transport security mode":"Choose one SMTP transport security mode","Choose price sources":"Choose price sources","Choose the bundle type and define the items inside it.":"Choose the bundle type and define the items inside it.","Choose the default charts, range, and time granularity for model analytics.":"Choose the default charts, range, and time granularity for model analytics.","Choose the domain used when this Passkey was created, then try again.":"Choose the domain used when this Passkey was created, then try again.","Choose where to fetch upstream metadata.":"Choose where to fetch upstream metadata.","Choose which charts are selected by default when opening model analytics.":"Choose which charts are selected by default when opening model analytics.","Clamped to":"Clamped to","Claude":"Claude","Claude CLI Header Passthrough":"Claude CLI Header Passthrough","Claude only":"Claude only","Clean":"Clean","Clean history logs":"Clean history logs","Clean logs":"Clean logs","Clean task history":"Clean task history","Clean up inactive cache":"Clean up inactive cache","Clean Up Log Files":"Clean Up Log Files","Cleaned up {{count}} log files, freed {{size}}":"Cleaned up {{count}} log files, freed {{size}}","Cleaning...":"Cleaning...","Cleanup failed":"Cleanup failed","Cleanup Mode":"Cleanup Mode","Clear":"Clear","Clear all":"Clear all","Clear All":"Clear All","Clear All Cache":"Clear All Cache","Clear all filters":"Clear all filters","Clear cache for this rule":"Clear cache for this rule","Clear chat history":"Clear chat history","Clear chat history?":"Clear chat history?","Clear field selection":"Clear field selection","Clear filters":"Clear filters","Clear Mapping":"Clear Mapping","Clear mode flags in prompts":"Clear mode flags in prompts","Clear node filters":"Clear node filters","Clear search":"Clear search","Clear selection":"Clear selection","Clear selection (Escape)":"Clear selection (Escape)","Clear vendor":"Clear vendor","Cleared":"Cleared","Cleared {{bindingType}} binding for user {{username}}":"Cleared {{bindingType}} binding for user {{username}}","Cleared all models":"Cleared all models","Cleared channel affinity cache":"Cleared channel affinity cache","Cleared disk cache":"Cleared disk cache","Cleared historical logs":"Cleared historical logs","Cleared log files":"Cleared log files","Click \\"Create Plan\\" to create your first subscription plan":"Click \\"Create Plan\\" to create your first subscription plan","Click \\"Generate\\" to create a token":"Click \\"Generate\\" to create a token","Click a stage to show or hide that column":"Click a stage to show or hide that column","Click any category to drill into its models, apps, and trends":"Click any category to drill into its models, apps, and trends","Click for details":"Click for details","Click save when you\'re done.":"Click save when you\'re done.","Click save when you're done.":"Click save when you're done.","Click the button below to bind your Telegram account":"Click the button below to bind your Telegram account","Click to copy":"Click to copy","Click to open deployment":"Click to open deployment","Click to preview audio":"Click to preview audio","Click to preview video":"Click to preview video","Click to update balance":"Click to update balance","Click to view Codex usage":"Click to view Codex usage","Compliance confirmation fields cannot be changed through the general settings API":"Compliance confirmation fields cannot be changed through the general settings API","Click to view full details":"Click to view full details","Click to view full error message":"Click to view full error message","Click to view full prompt":"Click to view full prompt","Composition failed":"Composition failed","Click to view image":"Click to view image","Client":"Client","Client header value":"Client header value","Client headers override the gateway defaults and may cause upstream errors":"Client headers override the gateway defaults and may cause upstream errors","Client ID":"Client ID","Client information such as User-Agent and IP is exposed to the upstream":"Client information such as User-Agent and IP is exposed to the upstream","Client model":"Client model","Client model matching":"Client model matching","Client model matching help":"Client model matching help","Client Secret":"Client Secret","Close":"Close","Close dialog":"Close dialog","Close menu":"Close menu","Close panel":"Close panel","Close the panel to edit here":"Close the panel to edit here","Close Today":"Close Today","Cloudflare":"Cloudflare","CNY":"CNY","CNY per USD":"CNY per USD","Code":"Code","Code generation, refactoring, autocomplete":"Code generation, refactoring, autocomplete","Code interpreter":"Code interpreter","Code samples":"Code samples","Codes copied!":"Codes copied!","Codex":"Codex","Codex Account & Usage":"Codex Account & Usage","Codex Account Status":"Codex Account Status","Codex channels do not support batch creation":"Codex channels do not support batch creation","Codex channels use an OAuth JSON credential as the key.":"Codex channels use an OAuth JSON credential as the key.","Codex CLI Header Passthrough":"Codex CLI Header Passthrough","Codex credential must be a JSON object with access_token and account_id":"Codex credential must be a JSON object with access_token and account_id","Cohere":"Cohere","Collapse":"Collapse","Collapse all":"Collapse all","Collapse All":"Collapse All","Collapse panel":"Collapse panel","Collect relay latency and success-rate metrics for the model square.":"Collect relay latency and success-rate metrics for the model square.","Color":"Color","Color is required":"Color is required","Color preset":"Color preset","Color:":"Color:","Comfortable":"Comfortable","Coming Soon!":"Coming Soon!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"Comma-separated exact model names. Prefix with regex: to ignore by regular expression.","Comma-separated list of allowed ports (empty = all ports)":"Comma-separated list of allowed ports (empty = all ports)","Comma-separated model names (leave empty to keep current)":"Comma-separated model names (leave empty to keep current)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo","Command":"Command","Common":"Common","Common Keys":"Common Keys","Common Logs":"Common Logs","Common pitfall: the user group base ratio is NOT a personal discount. It only applies when the user group itself is the billing group.":"Common pitfall: the user group base ratio is NOT a personal discount. It only applies when the user group itself is the billing group.","Common ports include 25, 465, and 587":"Common ports include 25, 465, and 587","Common User":"Common User","Community driven, self-hosted, and extensible":"Community driven, self-hosted, and extensible","Compact":"Compact","Compare each vendor\'s token share across the past few weeks":"Compare each vendor\'s token share across the past few weeks","Compare each vendor\'s token share across the past year":"Compare each vendor\'s token share across the past year","Compare each vendor\'s token share over the past 24 hours":"Compare each vendor\'s token share over the past 24 hours","Compare each vendor\'s token share over the past month":"Compare each vendor\'s token share over the past month","Compare each vendor\'s token share since launch":"Compare each vendor\'s token share since launch","Compare prices and choose a source for each model.":"Compare prices and choose a source for each model.","Compare the most popular models on the platform":"Compare the most popular models on the platform","Comparison operator":"Comparison operator","compatible API routes":"compatible API routes","Compatible API routes for common AI application workflows":"Compatible API routes for common AI application workflows","Compatible Passkey domains":"Compatible Passkey domains","Compilation failed":"Compilation failed","Complete API documentation with multi-language SDK support":"Complete API documentation with multi-language SDK support","Complete Order":"Complete Order","Complete sign-in":"Complete sign-in","Complete the invalid fields before saving or switching modes. The last valid expression is preserved.":"Complete the invalid fields before saving or switching modes. The last valid expression is preserved.","Complete these steps to finish the initial installation.":"Complete these steps to finish the initial installation.","Complete top-up orders and manage subscription plans and user subscriptions.":"Complete top-up orders and manage subscription plans and user subscriptions.","Completed":"Completed","Completed security verification":"Completed security verification","Completed top-up order for the user":"Completed top-up order for the user","Completion":"Completion","Completion price":"Completion price","Completion price ($/1M tokens)":"Completion price ($/1M tokens)","Completion ratio":"Completion ratio","Compliance confirmation required":"Compliance confirmation required","Compliance confirmed":"Compliance confirmed","Compliance confirmed successfully":"Compliance confirmed successfully","Concatenate channel system prompt with user's prompt":"Concatenate channel system prompt with user's prompt","Condition {{path}}":"Condition {{path}}","Condition actions {{path}}":"Condition actions {{path}}","Condition group":"Condition group","Condition group {{path}}":"Condition group {{path}}","Condition input":"Condition input","Condition Path":"Condition Path","Condition Settings":"Condition Settings","Condition value":"Condition value","Condition Value":"Condition Value","Conditional multipliers":"Conditional multipliers","Conditions":"Conditions","Conditions (AND)":"Conditions (AND)","Confidence":"Confidence","Configuration":"Configuration","Configuration File":"Configuration File","Configuration for Creem payment integration":"Configuration for Creem payment integration","Configuration for Epay payment integration":"Configuration for Epay payment integration","Configuration for Stripe payment integration":"Configuration for Stripe payment integration","Configuration required":"Configuration required","Configure":"Configure","Configure a Creem product for user recharge options.":"Configure a Creem product for user recharge options.","Configure a custom ratio for \\"{{userGroup}}\\" users when using a specific token group.":"Configure a custom ratio for \\"{{userGroup}}\\" users when using a specific token group.","Configure a custom ratio for when users use a specific token group.":"Configure a custom ratio for when users use a specific token group.","Configure a group that users can select when creating API keys.":"Configure a group that users can select when creating API keys.","Configure a new custom OAuth provider for user authentication.":"Configure a new custom OAuth provider for user authentication.","Configure a payment method for user recharge options.":"Configure a payment method for user recharge options.","Configure a predefined chat link for end users.":"Configure a predefined chat link for end users.","Configure an input price before converting this model.":"Configure an input price before converting this model.","Configure and deploy a new container instance.":"Configure and deploy a new container instance.","Configure API documentation links for the dashboard":"Configure API documentation links for the dashboard","Configure at:":"Configure at:","Configure available payment methods. Provide a JSON array.":"Configure available payment methods. Provide a JSON array.","Configure Creem products. Provide a JSON array.":"Configure Creem products. Provide a JSON array.","Configure discount rates based on recharge amounts":"Configure discount rates based on recharge amounts","Configure endpoint routing, authentication and protocol conversion for different upstream services":"Configure endpoint routing, authentication and protocol conversion for different upstream services","Configure experimental data export for the dashboard":"Configure experimental data export for the dashboard","Configure in your Creem dashboard":"Configure in your Creem dashboard","Configure keyword filtering for prompts and responses.":"Configure keyword filtering for prompts and responses.","Configure model, caching, and group ratios used for billing":"Configure model, caching, and group ratios used for billing","Configure Models":"Configure Models","Configure monitoring status page groups for the dashboard":"Configure monitoring status page groups for the dashboard","Configure NODE_NAME":"Configure NODE_NAME","Configure per-model ratio for image inputs or outputs.":"Configure per-model ratio for image inputs or outputs.","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.","Configure pricing ratios for a specific model.":"Configure pricing ratios for a specific model.","Configure rate limiting rules for a specific user group.":"Configure rate limiting rules for a specific user group.","Configure routes":"Configure routes","Configure task pricing":"Configure task pricing","Configure the connection and models, then create the channel.":"Configure the connection and models, then create the channel.","Configure the ratio for this group.":"Configure the ratio for this group.","Configure upstream providers and routing.":"Configure upstream providers and routing.","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"Configure Waffo Pancake hosted checkout integration for USD-priced top-ups","Configure Waffo payment aggregation platform integration":"Configure Waffo payment aggregation platform integration","Configure your account behavior preferences":"Configure your account behavior preferences","Configure your account preferences and integrations":"Configure your account preferences and integrations","Configured":"Configured","Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.":"Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.","Configured routes and latency checks":"Configured routes and latency checks","Confirm":"Confirm","Confirm Action":"Confirm Action","Confirm and enable":"Confirm and enable","Confirm Batch Update":"Confirm Batch Update","Confirm Billing Conflicts":"Confirm Billing Conflicts","Confirm both your current and new email addresses to finish this change.":"Confirm both your current and new email addresses to finish this change.","Confirm changes":"Confirm changes","Confirm Changes":"Confirm Changes","Confirm Cleanup":"Confirm Cleanup","Confirm cleanup of inactive disk cache?":"Confirm cleanup of inactive disk cache?","Confirm clearing all channel affinity cache":"Confirm clearing all channel affinity cache","Confirm clearing cache for this rule":"Confirm clearing cache for this rule","Confirm compliance":"Confirm compliance","Confirm compliance terms":"Confirm compliance terms","Confirm Creem Purchase":"Confirm Creem Purchase","Confirm delete":"Confirm delete","Confirm disable":"Confirm Disable","Confirm email":"Confirm email","Confirm enable":"Confirm Enable","Confirm invalidate":"Confirm Invalidate","Confirm log cleanup":"Confirm log cleanup","Confirm log file cleanup?":"Confirm log file cleanup?","Confirm model changes":"Confirm model changes","Confirm New Password":"Confirm New Password","Confirm password":"Confirm password","Confirm Payment":"Confirm Payment","Confirm Selection":"Confirm Selection","Confirm settings and finish setup":"Confirm settings and finish setup","confirm that I bear legal responsibility arising from deployment":"confirm that I bear legal responsibility arising from deployment","Confirm the final prices and removed settings. Metadata and channel access are not changed.":"Confirm the final prices and removed settings. Metadata and channel access are not changed.","Confirm the verification code sent to your new email address.":"Confirm the verification code sent to your new email address.","Confirm Unbind":"Confirm Unbind","Confirm usage reset":"Confirm usage reset","Confirm your identity before accessing this sensitive action.":"Confirm your identity before accessing this sensitive action.","Confirm your identity before changing the account {{username}}.":"Confirm your identity before changing the account {{username}}.","Confirm your identity before creating an administrator account.":"Confirm your identity before creating an administrator account.","Confirm your identity before permanently deleting the account {{username}}.":"Confirm your identity before permanently deleting the account {{username}}.","Confirm your identity before removing this Passkey from your account.":"Confirm your identity before removing this Passkey from your account.","Confirm your identity before unbinding {{provider}} from this user.":"Confirm your identity before unbinding {{provider}} from this user.","Confirm your identity with Two-factor Authentication before registering a Passkey.":"Confirm your identity with Two-factor Authentication before registering a Passkey.","Confirmed at {{time}} by user #{{userId}}":"Confirmed at {{time}} by user #{{userId}}","Confirmed payment compliance":"Confirmed payment compliance","Confirmed removal of Passkey domains: {{domains}}; affected {{known}}; unknown {{unknown}}":"Confirmed removal of Passkey domains: {{domains}}; affected {{known}}; unknown {{unknown}}","Confirming the account linked to your profile.":"Confirming the account linked to your profile.","Conflict":"Conflict","Connect":"Connect","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"Connect through OpenAI, Claude, Gemini, and other compatible API routes","Connect to 360 model services":"Connect to 360 model services","Connect to Alibaba Cloud Bailian model services":"Connect to Alibaba Cloud Bailian model services","Connect to Cohere model services":"Connect to Cohere model services","Connect to Coze bots":"Connect to Coze bots","Connect to DeepSeek model services":"Connect to DeepSeek model services","Connect to Dify applications and workflows":"Connect to Dify applications and workflows","Connect to Doubao Seedance video and Seedream image generation through Volcengine Ark":"Connect to Doubao Seedance video and Seedream image generation through Volcengine Ark","Connect to FastGPT applications":"Connect to FastGPT applications","Connect to iFlytek Spark model services":"Connect to iFlytek Spark model services","Connect to Jimeng image and video generation services":"Connect to Jimeng image and video generation services","Connect to Jina embedding and reranking services":"Connect to Jina embedding and reranking services","Connect to Kling video generation services":"Connect to Kling video generation services","Connect to LingYiWanWu model services":"Connect to LingYiWanWu model services","Connect to local or self-hosted Ollama models":"Connect to local or self-hosted Ollama models","Connect to MiniMax model services":"Connect to MiniMax model services","Connect to Mistral AI model services":"Connect to Mistral AI model services","Connect to model services through a Sub2API gateway":"Connect to model services through a Sub2API gateway","Connect to models through the Google Gemini API":"Connect to models through the Google Gemini API","Connect to Moonshot AI model services":"Connect to Moonshot AI model services","Connect to New API model services with support for multiple task plugins":"Connect to New API model services with support for multiple task plugins","Connect to OpenAI models deployed on Azure":"Connect to OpenAI models deployed on Azure","Connect to OpenAI Sora video generation services":"Connect to OpenAI Sora video generation services","Connect to Perplexity model services":"Connect to Perplexity model services","Connect to self-hosted models served by SGLang":"Connect to self-hosted models served by SGLang","Connect to self-hosted models served by vLLM":"Connect to self-hosted models served by vLLM","Connect to self-hosted models served by Xinference":"Connect to self-hosted models served by Xinference","Connect to SiliconFlow model inference services":"Connect to SiliconFlow model inference services","Connect to Submodel model services":"Connect to Submodel model services","Connect to Tencent Hunyuan model services":"Connect to Tencent Hunyuan model services","Connect to the Anthropic API or compatible services":"Connect to the Anthropic API or compatible services","Connect to the OpenAI API or compatible services":"Connect to the OpenAI API or compatible services","Connect to Vidu video generation services":"Connect to Vidu video generation services","Connect to Volcengine Ark model services":"Connect to Volcengine Ark model services","Connect to xAI Grok model services":"Connect to xAI Grok model services","Connected to io.net service normally.":"Connected to io.net service normally.","Connection & Models":"Connection & Models","Connection closed":"Connection closed","Connection error":"Connection error","Connection failed":"Connection failed","Connection info detected in clipboard":"Connection info detected in clipboard","Connection info filled in":"Connection info filled in","Connection settings":"Connection settings","Connection settings changed. Fetch models again to refresh the list.":"Connection settings changed. Fetch models again to refresh the list.","Connection successful":"Connection successful","Console":"Console","Console area":"Console area","Console Area":"Console Area","Console Content":"Console Content","Consume":"Consume","Consumed in the last 24 hours":"Consumed in the last 24 hours","Container":"Container","Container name":"Container name","Containers":"Containers","Contains":"Contains","Contains Match":"Contains Match","Content":"Content","Content displayed on the home page (supports Markdown)":"Content displayed on the home page (supports Markdown)","Content not found.":"Content not found.","Content not modified!":"Content not modified!","Content width":"Content width","Context":"Context","Continue":"Continue","Continue account binding":"Continue account binding","Continue with {{name}}":"Continue with {{name}}","Continue with an account already linked to your profile.":"Continue with an account already linked to your profile.","Continue with Discord":"Continue with Discord","Continue with GitHub":"Continue with GitHub","Continue with LinuxDO":"Continue with LinuxDO","Continue with OIDC":"Continue with OIDC","Continue with Telegram":"Continue with Telegram","Continue with WeChat":"Continue with WeChat","Contract review, compliance, summarisation":"Contract review, compliance, summarisation","Control which models are exposed and which groups may use them.":"Control which models are exposed and which groups may use them.","Controls catalog visibility. Channel availability is configured separately.":"Controls catalog visibility. Channel availability is configured separately.","Controls how much the model thinks before answering":"Controls how much the model thinks before answering","Controls randomness and creativity":"Controls randomness and creativity","Controls visibility in the model square. Channel status and existing API access are unchanged.":"Controls visibility in the model square. Channel status and existing API access are unchanged.","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"Controls whether user verification (biometrics/PIN) is required during Passkey flows.","Conversation cleared":"Conversation cleared","Conversion rate from USD to your custom currency":"Conversion rate from USD to your custom currency","Convert reasoning_content to tag in content":"Convert reasoning_content to tag in content","Convert string to lowercase":"Convert string to lowercase","Convert string to uppercase":"Convert string to uppercase","Convert to expression":"Convert to expression","Converter":"Converter","Converter does not match incoming path":"Converter does not match incoming path","Converter is not registered":"Converter is not registered","Copied":"Copied","Copied {{count}} key(s)":"Copied {{count}} key(s)","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})","Copied to clipboard":"Copied to clipboard","Copied: {{model}}":"Copied: {{model}}","Copied!":"Copied!","Copy":"Copy","Copy {{field}}":"Copy {{field}}","Copy {{name}} pricing":"Copy {{name}} pricing","Copy a request header":"Copy a request header","Copy All":"Copy All","Copy all backup codes":"Copy all backup codes","Copy All Codes":"Copy All Codes","Copy all models":"Copy all models","Copy API key":"Copy API key","Copy API URL":"Copy API URL","Copy base URL":"Copy base URL","Copy billing expression":"Copy billing expression","Copy callback URL":"Copy callback URL","Copy Channel":"Copy Channel","Copy code":"Copy code","Copy Connection Info":"Copy Connection Info","Copy endpoint path":"Copy endpoint path","Copy failed":"Copy failed","Copy Field":"Copy Field","Copy Header":"Copy Header","Copy homepage URL":"Copy homepage URL","Copy Key":"Copy Key","Copy Link":"Copy Link","Copy model name":"Copy model name","Copy model names":"Copy model names","Copy plugin key":"Copy plugin key","Copy prompt":"Copy prompt","Copy ready-to-run curl":"Copy ready-to-run curl","Copy redemption code":"Copy redemption code","Copy redirect URL":"Copy redirect URL","Copy referral link":"Copy referral link","Copy Request Header":"Copy Request Header","Copy secret key":"Copy secret key","Copy selected codes":"Copy selected codes","Copy selected keys":"Copy selected keys","Copy selected models":"Copy selected models","Copy selected models separated by commas (e.g. a,b)":"Copy selected models separated by commas (e.g. a,b)","Copy source field to target field":"Copy source field to target field","Copy the key and paste it here":"Copy the key and paste it here","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.","Copy this token now. It will not be shown again.":"Copy this token now. It will not be shown again.","Copy to clipboard":"Copy to clipboard","Copy token":"Copy token","Copy URL":"Copy URL","Copying...":"Copying...","Copywriting, ad creative, SEO":"Copywriting, ad creative, SEO","Core concepts":"Core concepts","Core Configuration":"Core Configuration","Core Features":"Core Features","Core pricing":"Core pricing","Correct the invalid settings before saving.":"Correct the invalid settings before saving.","Cost":"Cost","Cost = 10 × 0.3 = 3":"Cost = 10 × 0.3 = 3","Cost = 10 × 0.8 = 8":"Cost = 10 × 0.8 = 8","Cost = 10 × 1.0 = 10":"Cost = 10 × 1.0 = 10","Cost = model price × that one ratio. Nothing else from the group settings enters the formula.":"Cost = model price × that one ratio. Nothing else from the group settings enters the formula.","Cost calculator":"Cost calculator","Creem webhook is not configured":"Creem webhook is not configured","CreemProductId is not configured for this plan":"CreemProductId is not configured for this plan","Cost in {{currency}} per request, regardless of tokens used.":"Cost in {{currency}} per request, regardless of tokens used.","Cost in USD per request, regardless of tokens used.":"Cost in USD per request, regardless of tokens used.","Cost Tracking":"Cost Tracking","Could not fetch the plugin source from this browser. The host may block cross-origin requests or be unreachable.":"Could not fetch the plugin source from this browser. The host may block cross-origin requests or be unreachable.","Could not fetch this URL from the browser. The host may block cross-origin requests or be unreachable. Download the file and paste its source below.":"Could not fetch this URL from the browser. The host may block cross-origin requests or be unreachable. Download the file and paste its source below.","Could not load the changelog":"Could not load the changelog","Could not load this source":"Could not load this source","Count":"Count","Count must be between {{min}} and {{max}}":"Count must be between {{min}} and {{max}}","Counters and averages cover the period since the upstream metrics were initialized or reset.":"Counters and averages cover the period since the upstream metrics were initialized or reset.","Coze":"Coze","CPU":"CPU","CPU Threshold (%)":"CPU Threshold (%)","Create":"Create","Create a copy of:":"Create a copy of:","Create a key for your app or service":"Create a key for your app or service","Create a new user group to configure ratio overrides for.":"Create a new user group to configure ratio overrides for.","Create access token":"Create access token","Create account":"Create account","Create aliases for users":"Create aliases for users","Create an account":"Create an account","Create an API key to unlock the real request":"Create an API key to unlock the real request","Create and review invite or credit codes.":"Create and review invite or credit codes.","Create API Key":"Create API Key","Create API token":"Create API token","Create API token “{{name}}”":"Create API token “{{name}}”","Create cache":"Create cache","Create cache ratio":"Create cache ratio","Create Channel":"Create Channel","Create channels or edit keys, base URLs, and overrides.":"Create channels or edit keys, base URLs, and overrides.","Create Code":"Create Code","Create credentials for the root user":"Create credentials for the root user","Create deployment":"Create deployment","Create metadata":"Create metadata","Create Model":"Create Model","Create multiple API keys at once (random suffix will be added to names)":"Create multiple API keys at once (random suffix will be added to names)","Create multiple channels from multiple keys":"Create multiple channels from multiple keys","Create multiple redemption codes at once (1-100)":"Create multiple redemption codes at once (1-100)","Create new subscription plan":"Create New Subscription Plan","Create or update frequently asked questions for users":"Create or update frequently asked questions for users","Create or update system announcements for the dashboard":"Create or update system announcements for the dashboard","Create Plan":"Create Plan","Create Prefill Group":"Create Prefill Group","Create Provider":"Create Provider","Create Redemption Code":"Create Redemption Code","Create request parameter override rules with a visual editor or raw JSON.":"Create request parameter override rules with a visual editor or raw JSON.","Create request parameter override rules without editing raw JSON.":"Create request parameter override rules without editing raw JSON.","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.","Create succeeded":"Create succeeded","Create Vendor":"Create Vendor","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.","Create, edit, and delete API keys.":"Create, edit, and delete API keys.","Create, edit, and delete deployments, and test connections.":"Create, edit, and delete deployments, and test connections.","Create, edit, and delete prefill groups.":"Create, edit, and delete prefill groups.","Create, edit, and delete redemption codes.":"Create, edit, and delete redemption codes.","Create, edit, disable, and delete users, and reset their security settings.":"Create, edit, disable, and delete users, and reset their security settings.","Create, revoke, and audit API tokens.":"Create, revoke, and audit API tokens.","Created":"Created","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"Created {{count}} redemption codes named {{name}} ({{quota}} each)","Created {{time}}":"Created {{time}}","Custom reset cycle must be greater than 0 seconds":"Custom reset cycle must be greater than 0 seconds","Created a custom OAuth provider":"Created a custom OAuth provider","Created a deployment":"Created a deployment","Created a model":"Created a model","Created a prefill group":"Created a prefill group","Created a subscription plan":"Created a subscription plan","Created a vendor":"Created a vendor","Created an access token":"Created an access token","Created At":"Created At","Daily check-in, received {{quota}}":"Daily check-in, received {{quota}}","Created channel {{name}} (type {{type}}, count {{count}})":"Created channel {{name}} (type {{type}}, count {{count}})","Created user {{username}} (role {{role}})":"Created user {{username}} (role {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.","Creating...":"Creating...","Creation failed":"Creation failed","Credential refreshed":"Credential refreshed","Credentials":"Credentials","Credentials verification failed":"Credentials verification failed","Credentials verification failed — double-check Merchant ID and API private key.":"Credentials verification failed — double-check Merchant ID and API private key.","credit":"credit","Credit remaining":"Credit remaining","Creem API key (leave blank unless updating)":"Creem API key (leave blank unless updating)","Creem Gateway":"Creem Gateway","Creem Payment":"Creem Payment","Creem product ID from your Creem dashboard.":"Creem product ID from your Creem dashboard.","Creem products must be a JSON array":"Creem products must be a JSON array","Database connection failed":"Database connection failed","Database error, please contact the administrator":"Database error, please contact the administrator","Cross-group":"Cross-group","Cross-group retry":"Cross-group retry","Cumulative usage":"Cumulative usage","Currency":"Currency","Currency & Display":"Currency & Display","Current":"Current","Current Balance":"Current Balance","Current Billing":"Current Billing","Current Cache Size":"Current Cache Size","Current domain":"Current domain","Current domain: {{domain}}":"Current domain: {{domain}}","Current email verification code":"Current email verification code","Current email: {{email}}. Enter a new email to change.":"Current email: {{email}}. Enter a new email to change.","Current exchange rate: 1 USD = {{rate}} {{currency}}":"Current exchange rate: 1 USD = {{rate}} {{currency}}","Current key":"Current key","Current key disable requested":"Current key disable requested","Current legacy JSON is invalid, cannot append":"Current legacy JSON is invalid, cannot append","Current Level Only":"Current Level Only","Current load":"Current load","Current models for the longest channel in this tag. May not include all models from all channels.":"Current models for the longest channel in this tag. May not include all models from all channels.","Current models: {{count}}":"Current models: {{count}}","Current month":"Current month","Current Password":"Current Password","Current password is incorrect.":"Current password is incorrect.","Current period price":"Current period price","Current Price":"Current Price","Default group":"Default group","Current pricing conditions":"Current pricing conditions","Current quota":"Current quota","Current site: {{origin}}":"Current site: {{origin}}","Current time":"Current time","Current token":"Current token","Current total = used + remaining. Changing the remaining quota updates the total and percentage.":"Current total = used + remaining. Changing the remaining quota updates the total and percentage.","Current total quota":"Current total quota","Current v{{from}} → install v{{to}}":"Current v{{from}} → install v{{to}}","Current value":"Current value","Current Value":"Current Value","Current vendor":"Current vendor","Current version":"Current version","Current:":"Current:","Custom":"Custom","Custom (overrides factory {{version}})":"Custom (overrides factory {{version}})","Custom (seconds)":"Custom (seconds)","Custom Amount":"Custom Amount","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.","Custom API base URL. Leave empty to use provider default.":"Custom API base URL. Leave empty to use provider default.","Custom Currency":"Custom Currency","Custom Currency Symbol":"Custom Currency Symbol","Custom currency symbol is required":"Custom currency symbol is required","Custom database driver detected.":"Custom database driver detected.","Custom endpoints":"Custom endpoints","Custom Epay method":"Custom Epay method","Custom Error Response":"Custom Error Response","Custom Home Page":"Custom Home Page","Custom message shown when access is denied":"Custom message shown when access is denied","Custom model (comma-separated)":"Custom model (comma-separated)","Custom model icon":"Custom model icon","Custom module":"Custom module","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.","Custom OAuth":"Custom OAuth","Custom OAuth Providers":"Custom OAuth Providers","Custom Seconds":"Custom Seconds","Custom sidebar section":"Custom sidebar section","Custom task plugin setting updated":"Custom task plugin setting updated","Custom Time Range":"Custom Time Range","Custom Zoom":"Custom Zoom","Customize sidebar display content":"Customize sidebar display content","Daily":"Daily","Daily Check-in":"Daily Check-in","Daily token usage by model across the past few weeks":"Daily token usage by model across the past few weeks","Daily token usage by model across the past month":"Daily token usage by model across the past month","Daily token usage by model over the past month":"Daily token usage by model over the past month","Daily uptime over the last 30 days":"Daily uptime over the last 30 days","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes","Dark":"Dark","Dashboard":"Dashboard","Dashboard Preferences":"Dashboard Preferences","Dashboards, tokens, and usage analytics.":"Dashboards, tokens, and usage analytics.","Data Dashboard":"Data Dashboard","Data directory:":"Data directory:","Data is stored locally on this device. Use system backups to keep a safe copy.":"Data is stored locally on this device. Use system backups to keep a safe copy.","Data management and log viewing":"Data management and log viewing","Data retention":"Data retention","Database":"Database","Database check":"Database check","Date and time when this announcement should be displayed":"Date and time when this announcement should be displayed","Date Range":"Date Range","Day":"Day","Day of month":"Day of month","days":"days","Days to Retain":"Days to Retain","decides the top-up ratio, which groups the user can pick for tokens, and whether an override ratio applies.":"decides the top-up ratio, which groups the user can pick for tokens, and whether an override ratio applies.","decides which channels are used and which base ratio applies.":"decides which channels are used and which base ratio applies.","Declared capabilities":"Declared capabilities","Decrease quota for user “{{name}}”":"Decrease quota for user “{{name}}”","Decrease user quota":"Decrease user quota","Decreased user quota by {{quota}}":"Decreased user quota by {{quota}}","Deducted by subscription":"Deducted by subscription","DeepSeek":"DeepSeek","default":"default","Default":"Default","Default / range":"Default / range","Default administrator permissions can be overridden for this user.":"Default administrator permissions can be overridden for this user.","Default API address":"Default API address","Default API Version":"Default API Version","Default API Version *":"Default API Version *","Default API version for this channel":"Default API version for this channel","Default base URL":"Default base URL","Default Bearer":"Default Bearer","Default Collapse Sidebar":"Default Collapse Sidebar","Default consumption chart":"Default consumption chart","Default Max Tokens":"Default Max Tokens","Default model call chart":"Default model call chart","Default placeholder":"Default placeholder","Default range":"Default range","Default reminder threshold":"Default reminder threshold","Default Responses API version, if empty, will use the API version above":"Default Responses API version, if empty, will use the API version above","Deleted {{count}} auto-disabled keys":"Deleted {{count}} auto-disabled keys","Default session lifetime (seconds)":"Default session lifetime (seconds)","Default system prompt for this channel":"Default system prompt for this channel","Default time granularity":"Default time granularity","Default to auto groups":"Default to auto groups","Default TTL (seconds)":"Default TTL (seconds)","Defaults to \\"OIDC\\" if left blank":"Defaults to \\"OIDC\\" if left blank","Defaults to the wallet page when empty":"Defaults to the wallet page when empty","Define API endpoints for this model (JSON format)":"Define API endpoints for this model (JSON format)","Define endpoint mappings for each provider.":"Define endpoint mappings for each provider.","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"Define per-group rules to add, remove, or append selectable groups for specific user groups.","Degraded performance recently":"Degraded performance recently","Delete":"Delete","Delete (":"Delete (","Delete {{count}} API key(s)?":"Delete {{count}} API key(s)?","Delete {{count}} models?":"Delete {{count}} models?","Delete {{count}} redemption codes?":"Delete {{count}} redemption codes?","Delete {{count}} selected vendor records? Vendors with linked models cannot be deleted.":"Delete {{count}} selected vendor records? Vendors with linked models cannot be deleted.","Delete {{count}} stale instance records? Online instances will not be deleted.":"Delete {{count}} stale instance records? Online instances will not be deleted.","Delete a runtime request header":"Delete a runtime request header","Delete Account":"Delete Account","Deployment region cannot be empty":"Deployment region cannot be empty","Deployment region must be valid JSON, for example {{example}}":"Deployment region must be valid JSON, for example {{example}}","Deployment region must include a default field":"Deployment region must include a default field","Delete active custom version":"Delete active custom version","Delete All Disabled":"Delete All Disabled","Delete All Disabled Channels?":"Delete All Disabled Channels?","Delete all stale":"Delete all stale","Delete API token":"Delete API token","Delete API token “{{name}}”":"Delete API token “{{name}}”","Delete Auto-Disabled":"Delete Auto-Disabled","Delete Channel":"Delete Channel","Delete Channels?":"Delete Channels?","Delete completed tasks matching the current filters across all pages? Active tasks and the latest run of each task type are retained for scheduling. This cannot be undone.":"Delete completed tasks matching the current filters across all pages? Active tasks and the latest run of each task type are retained for scheduling. This cannot be undone.","Delete condition":"Delete condition","Delete Condition":"Delete Condition","Delete failed":"Delete failed","Delete failed models":"Delete failed models","Delete failed models ({{count}})":"Delete failed models ({{count}})","Delete Field":"Delete Field","Delete group":"Delete group","Delete Header":"Delete Header","Delete Invalid":"Delete Invalid","Delete invalid codes":"Delete invalid codes","Delete invalid codes (used/disabled/expired)":"Delete invalid codes (used/disabled/expired)","Delete invalid redemption codes":"Delete invalid redemption codes","Delete Invalid Redemption Codes?":"Delete Invalid Redemption Codes?","Delete logs":"Delete logs","Delete mapping":"Delete mapping","Delete metadata and custom pricing for {{count}} models?":"Delete metadata and custom pricing for {{count}} models?","Delete metadata for \\"{{name}}\\"? Pricing and channel configurations will be retained.":"Delete metadata for \\"{{name}}\\"? Pricing and channel configurations will be retained.","Delete metadata for \\"{{name}}\\"? Pricing will be retained.":"Delete metadata for \\"{{name}}\\"? Pricing will be retained.","Delete metadata for {{count}} models? Pricing will be retained.":"Delete metadata for {{count}} models? Pricing will be retained.","Delete Model":"Delete Model","Delete model \\"{{name}}\\"?":"Delete model \\"{{name}}\\"?","Delete Models?":"Delete Models?","Delete plugin version?":"Delete plugin version?","Delete Provider":"Delete Provider","Delete Request Header":"Delete Request Header","Delete rule":"Delete rule","Delete Rule":"Delete Rule","Delete selected API keys":"Delete selected API keys","Delete selected channels":"Delete selected channels","Delete selected models":"Delete selected models","Delete selected redemption codes":"Delete selected redemption codes","Delete session rule “{{name}}”? Save your changes to apply the removal.":"Delete session rule “{{name}}”? Save your changes to apply the removal.","Delete stale instance":"Delete stale instance","Delete stale instance \\"{{name}}\\"? If it has reported again, it will not be deleted.":"Delete stale instance \\"{{name}}\\"? If it has reported again, it will not be deleted.","Delete stale instances":"Delete stale instances","Delete vendor record":"Delete vendor record","Delete vendors":"Delete vendors","Deleted":"Deleted","Deleted \\"{{name}}\\"":"Deleted \\"{{name}}\\"","Deleted ({{id}})":"Deleted ({{id}})","Deleted {{count}} failed models":"Deleted {{count}} failed models","Deleted {{count}} historical system tasks":"Deleted {{count}} historical system tasks","Deleted {{count}} stale instances":"Deleted {{count}} stale instances","Deleted a custom OAuth provider":"Deleted a custom OAuth provider","Deleted a deployment":"Deleted a deployment","Deleted a model":"Deleted a model","Deleted a passkey":"Deleted a passkey","Descending":"Descending","Disable tag grouping to drag channels":"Disable tag grouping to drag channels","Disabled {{count}} keys":"Disabled {{count}} keys","Deleted a prefill group":"Deleted a prefill group","Deleted a redemption code":"Deleted a redemption code","Deleted a vendor":"Deleted a vendor","Deleted all disabled channels ({{count}})":"Deleted all disabled channels ({{count}})","Deleted channel {{name}} (ID: {{id}})":"Deleted channel {{name}} (ID: {{id}})","Deleted invalid redemption codes":"Deleted invalid redemption codes","Deleted stale instance":"Deleted stale instance","Discord ID is empty!":"Discord ID is empty!","Deleted successfully":"Deleted successfully","Deleted tokens":"Deleted tokens","Deleted user {{username}} (ID: {{id}})":"Deleted user {{username}} (ID: {{id}})","Deleted: {{processed}}":"Deleted: {{processed}}","Deleting this custom version does not disable the platform. The same-name factory plugin will be restored automatically.":"Deleting this custom version does not disable the platform. The same-name factory plugin will be restored automatically.","Deleting will permanently remove this subscription record (including benefit details). Continue?":"Deleting will permanently remove this subscription record (including benefit details). Continue?","Deleting...":"Deleting...","Demo site":"Demo site","Demo site mode":"Demo site mode","Demo Site Mode":"Demo Site Mode","Demote":"Demote","Density":"Density","Deploy your own gateway and start routing requests through your configured upstream services.":"Deploy your own gateway and start routing requests through your configured upstream services.","Deployment created successfully":"Deployment created successfully","Deployment details":"Deployment details","Deployment ID":"Deployment ID","Deployment location":"Deployment location","Deployment logs":"Deployment logs","Deployment Region":"Deployment Region","Deployment Region *":"Deployment Region *","Deployment requested":"Deployment requested","Deployments":"Deployments","Deprecated":"Deprecated","Derives the request names your users call":"Derives the request names your users call","Derives the upstream names sent to the provider":"Derives the upstream names sent to the provider","Desc":"Desc","Describe":"Describe","Describe this model...":"Describe this model...","Describe this vendor...":"Describe this vendor...","Description":"Description","Description is required":"Description is required","Designed and Developed by":"Designed and Developed by","designed for scale":"designed for scale","Destroyed":"Destroyed","Detail":"Detail","Detailed request logs for investigations.":"Detailed request logs for investigations.","Details":"Details","Detect All Upstream Updates":"Detect All Upstream Updates","Detect model updates":"Detect model updates","Detected database":"Detected database","Detected high-risk status code redirect rules":"The following high-risk status code redirect rules were detected:","Detection complete: {{add}} to add, {{remove}} to remove":"Detection complete: {{add}} to add, {{remove}} to remove","Detection failed":"Detection failed","Determines how this group is applied elsewhere.":"Determines how this group is applied elsewhere.","Deterministic sampling seed (best-effort)":"Deterministic sampling seed (best-effort)","Developer Friendly":"Developer Friendly","Device Type Preference":"Device Type Preference","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Dify channels only support chatflow and agent, and agent does not support images","Digest:":"Digest:","Direction":"Direction","Directory File Count":"Directory File Count","Directory Total Size":"Directory Total Size","Disable":"Disable","Disable 2FA":"Disable 2FA","Downgrade group does not exist":"Downgrade group does not exist","Disable All":"Disable All","Disable channels on repeated failures":"Disable channels on repeated failures","Disable custom task plugins?":"Disable custom task plugins?","Disable on failure":"Disable on failure","Disable plugin {{name}} ({{key}})? Requests using this plugin may be affected.":"Disable plugin {{name}} ({{key}})? Requests using this plugin may be affected.","Disable plugin?":"Disable plugin?","Disable selected channels":"Disable selected channels","Disable selected models":"Disable selected models","Disable store passthrough":"Disable store passthrough","Disable task plugins?":"Disable task plugins?","Disable this key?":"Disable this key?","Disable threshold (seconds)":"Disable threshold (seconds)","Disable Two-Factor Authentication":"Disable Two-Factor Authentication","disabled":"disabled","Disabled":"Disabled","Disabled all channels with tag: {{tag}}":"Disabled all channels with tag: {{tag}}","Disabled channels with tag {{tag}}":"Disabled channels with tag {{tag}}","Disabled globally":"Disabled globally","Disabled lanes are omitted on save.":"Disabled lanes are omitted on save.","Disabled Reason":"Disabled Reason","Disabled Time":"Disabled Time","Disabled two-factor authentication":"Disabled two-factor authentication","Disabled; fell back to factory":"Disabled; fell back to factory","Disabled; platform unavailable":"Disabled; platform unavailable","Disabling...":"Disabling...","Discard changes":"Discard changes","Discard unsaved changes?":"Discard unsaved changes?","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.","Discord":"Discord","Discount":"Discount","Discount map by recharge amount (JSON object)":"Discount map by recharge amount (JSON object)","Discount Rate":"Discount Rate","Discount rate must be ≤ 1":"Discount rate must be ≤ 1","Discount rate must be greater than 0":"Discount rate must be greater than 0","Discount Rate:":"Discount Rate:","Discount ratio for cache hits.":"Discount ratio for cache hits.","Discouraged":"Discouraged","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.","Discover the leading models in each domain":"Discover the leading models in each domain","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"Discover the most-used models and rising vendors on the platform, updated from live usage data.","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.","Discovering...":"Discovering...","Disk cache cleared":"Disk cache cleared","Disk Cache Settings":"Disk Cache Settings","Disk Cache Threshold (MB)":"Disk Cache Threshold (MB)","Disk cache, system performance monitoring, and operation statistics":"Disk cache, system performance monitoring, and operation statistics","Disk Hits":"Disk Hits","Disk Threshold (%)":"Disk Threshold (%)","Display in Currency":"Display in Currency","Display limit":"Display limit","Display Mode":"Display Mode","Display name":"Display name","Display Name":"Display Name","Display name and email used in outgoing messages":"Display name and email used in outgoing messages","Display Name Field":"Display Name Field","Display name for this chat client.":"Display name for this chat client.","Display name for this monitoring group (max 50 characters)":"Display name for this monitoring group (max 50 characters)","Display name for this payment method.":"Display name for this payment method.","Display name shown to users.":"Display name shown to users.","Display Options":"Display Options","Display policy":"Display policy","Display Token Statistics":"Display Token Statistics","Displayed":"Displayed","Displayed in":"Displayed in","Displays the mobile sidebar.":"Displays the mobile sidebar.","Do not keep sessions":"Do not keep sessions","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.","Do not repeat check-in; only once per day":"Do not repeat check-in; only once per day","Do not wait one second between polling async tasks for this channel":"Do not wait one second between polling async tasks for this channel","Do regex replacement in the target field":"Do regex replacement in the target field","Do string replacement in the target field":"Do string replacement in the target field","Docs":"Docs","Documentation Link":"Documentation Link","Documentation or external knowledge base.":"Documentation or external knowledge base.","Does not check healthy channels. It only rechecks auto-disabled channels and restores them after they recover.":"Does not check healthy channels. It only rechecks auto-disabled channels and restores them after they recover.","does not exist or might have been removed.":"does not exist or might have been removed.","Domain":"Domain","Domain Filter Mode":"Domain Filter Mode","Don\'t have an account?":"Don\'t have an account?","Done":"Done","Doubao":"Doubao","Doubao custom API address editing unlocked":"Doubao custom API address editing unlocked","Double check the configuration below. Your system will be locked until initialization is complete.":"Double check the configuration below. Your system will be locked until initialization is complete.","Downgrade Group":"Downgrade Group","Downgrade to pre-purchase group":"Downgrade to pre-purchase group","Downgrade to this group after the subscription expires":"Downgrade to this group after the subscription expires","Download":"Download","Drag {{group}} to reorder":"Drag {{group}} to reorder","Drag mode":"Drag mode","Drag mode help":"Drag mode help","Drag the handle to move a channel.":"Drag the handle to move a channel.","Drag to change priority. Use arrow keys to move, Escape to cancel.":"Drag to change priority. Use arrow keys to move, Escape to cancel.","Drag to move":"Drag to move","Drag to resize":"Drag to resize","Drag to set channel priority":"Drag to set channel priority","Draw":"Draw","Drawing":"Drawing","Drawing logs":"Drawing logs","Drawing Logs":"Drawing Logs","Drawing task polling":"Drawing task polling","Drawing task records":"Drawing task records","Drop a JavaScript plugin file here":"Drop a JavaScript plugin file here","Drop at an edge to create a different priority.":"Drop at an edge to create a different priority.","Drop between tiers to change priority, or in the center to join a tier":"Drop between tiers to change priority, or in the center to join a tier","Drop in the center to use the same priority.":"Drop in the center to use the same priority.","Dry run result":"Dry run result","Duplicate":"Duplicate","Duplicate group names: {{names}}":"Duplicate group names: {{names}}","Duplicate model in route models":"Duplicate model in route models","Duplicate source model mappings are not allowed":"Duplicate source model mappings are not allowed","Duplicate source model(s): {{models}}":"Duplicate source model(s): {{models}}","Duration":"Duration","Duration (hours)":"Duration (hours)","Duration Settings":"Duration Settings","Duration Unit":"Duration Unit","Duration Value":"Duration Value","Dynamic declarations cannot be previewed. Retry or review the source below.":"Dynamic declarations cannot be previewed. Retry or review the source below.","Dynamic multiplier":"Dynamic multiplier","Dynamic operation":"Dynamic operation","Dynamic Pricing":"Dynamic Pricing","e.g. ¥ or HK$":"e.g. ¥ or HK$","e.g. 401, 403, 429, 500-599":"e.g. 401, 403, 429, 500-599","e.g. 8 means 1 USD = 8 units":"e.g. 8 means 1 USD = 8 units","e.g. Basic Plan":"e.g. Basic Plan","e.g. Clean tool parameters to avoid upstream validation errors":"e.g. Clean tool parameters to avoid upstream validation errors","e.g. Company SSO":"e.g. Company SSO","e.g. example.com":"e.g. example.com","e.g. gpt-4o, gemini-2.5-flash":"e.g. gpt-4o, gemini-2.5-flash","e.g. llama3.1:8b":"e.g. llama3.1:8b","e.g. My GitLab":"e.g. My GitLab","e.g. my-gitlab":"e.g. my-gitlab","e.g. New API Console":"e.g. New API Console","e.g. openid profile email":"e.g. openid profile email","e.g. Requires level {{required}}; your current level is {{current}}":"e.g. Requires level {{required}}; your current level is {{current}}","e.g. Suitable for light usage":"e.g. Suitable for light usage","e.g. This request does not meet access policy":"e.g. This request does not meet access policy","e.g., 0.95":"e.g., 0.95","Email & Notifications":"Email & Notifications","Email address is already in use":"Email address is already in use","e.g., 100":"e.g., 100","e.g., 123456":"e.g., 123456","e.g., 2025-04-01-preview":"e.g., 2025-04-01-preview","e.g., 50":"e.g., 50","e.g., 500000":"e.g., 500000","e.g., 7342866812345":"e.g., 7342866812345","Email is empty!":"Email is empty!","Email or password is empty!":"Email or password is empty!","e.g., 8 means 8 local currency per USD":"e.g., 8 means 8 local currency per USD","e.g., Alipay, WeChat":"e.g., Alipay, WeChat","e.g., Basic Package":"e.g., Basic Package","Email verification is enabled, please enter email address and verification code":"Email verification is enabled, please enter email address and verification code","e.g., CN2 GIA":"e.g., CN2 GIA","e.g., Core APIs, OpenAI, Claude":"e.g., Core APIs, OpenAI, Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"e.g., d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"e.g., default, vip, premium","e.g., gpt-4, claude-3":"e.g., gpt-4, claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"e.g., https://api.example.com (path before /suno)","e.g., https://api.openai.com/v1/chat/completions":"e.g., https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"e.g., https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"e.g., https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"e.g., https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"e.g., OpenAI GPT-4 Production","e.g., preview":"e.g., preview","e.g., prod_xxx":"e.g., prod_xxx","e.g., Recommended for China Mainland Users":"e.g., Recommended for China Mainland Users","e.g., SiAlipay":"e.g., SiAlipay","e.g., us-central1 or JSON format for model-specific regions":"e.g., us-central1 or JSON format for model-specific regions","e.g., v2.1":"e.g., v2.1","Each backup code can only be used once.":"Each backup code can only be used once.","Each item must be an object with a single key-value pair.":"Each item must be an object with a single key-value pair.","Each item must have exactly one key-value pair.":"Each item must have exactly one key-value pair.","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"Each line represents one keyword. Leave blank to disable the list but keep the switch states.","Each matrix cell is one rule: users of this row group pay this ratio when billed as this column group. In JSON the row is the outer key and the column is the inner key.":"Each matrix cell is one rule: users of this row group pay this ratio when billed as this column group. In JSON the row is the outer key and the column is the inner key.","Each row prices one combination of {{fields}}.":"Each row prices one combination of {{fields}}.","Each rule reads as a sentence: users of one group pay a special ratio when billed as another group. Without a rule, the billing group base ratio applies.":"Each rule reads as a sentence: users of one group pay a special ratio when billed as another group. Without a rule, the billing group base ratio applies.","Each source serves an index.json listing installable plugins. Indexes are fetched by your browser; the gateway makes no outbound requests.":"Each source serves an index.json listing installable plugins. Indexes are fetched by your browser; the gateway makes no outbound requests.","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"Each tier supports up to 2 conditions. The last tier without conditions is the fallback.","Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.":"Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.","Earnings":"Earnings","Edit":"Edit","Edit {{title}}":"Edit {{title}}","Edit access token":"Edit access token","Edit all channels with tag:":"Edit all channels with tag:","Edit Announcement":"Edit Announcement","Edit API Shortcut":"Edit API Shortcut","Edit billing ratios and user-selectable groups in one table.":"Edit billing ratios and user-selectable groups in one table.","Edit Channel":"Edit Channel","Edit channel routing":"Edit channel routing","Edit chat preset":"Edit chat preset","Edit discount tier":"Edit discount tier","Edit FAQ":"Edit FAQ","Edit group":"Edit group","Edit group rate limit":"Edit group rate limit","Edit group settings as JSON. Changes are shared with the visual editor.":"Edit group settings as JSON. Changes are shared with the visual editor.","Edit JSON object directly. Suitable for simple parameter overrides.":"Edit JSON object directly. Suitable for simple parameter overrides.","Edit JSON text directly. Format will be validated on save.":"Edit JSON text directly. Format will be validated on save.","Edit mapping":"Edit mapping","Edit model":"Edit model","Edit Model":"Edit Model","Edit model pricing":"Edit model pricing","Edit models and vendors, and sync them from upstream.":"Edit models and vendors, and sync them from upstream.","Edit non-sensitive settings such as models, groups, and routing rules.":"Edit non-sensitive settings such as models, groups, and routing rules.","Edit OAuth Provider":"Edit OAuth Provider","Edit payment method":"Edit payment method","Edit Prefill Group":"Edit Prefill Group","Edit pricing rule {{name}}":"Edit pricing rule {{name}}","Edit product":"Edit product","Edit ratio override":"Edit ratio override","Edit Rule":"Edit Rule","Edit selectable group":"Edit selectable group","Edit sensitive channel settings":"Edit sensitive channel settings","Edit Tag":"Edit Tag","Edit Tag:":"Edit Tag:","Edit Uptime Kuma Group":"Edit Uptime Kuma Group","Edit Vendor":"Edit Vendor","Enabled {{count}} keys":"Enabled {{count}} keys","edit_this":"edit_this","Edited channels with tag {{tag}}":"Edited channels with tag {{tag}}","Editor mode":"Editor mode","Education":"Education","Effective icon":"Effective icon","Email":"Email","Email (required for verification)":"Email (required for verification)","Email Address":"Email Address","Email Alias Restriction":"Email Alias Restriction","Email bound successfully!":"Email bound successfully!","Email confirmation code resend":"Email confirmation code resend","Email Domain Restriction":"Email Domain Restriction","Email Domain Whitelist":"Email Domain Whitelist","Email Field":"Email Field","Email Verification":"Email Verification","Email verification code is incorrect.":"Email verification code is incorrect.","Email verification has ended. Start again to continue.":"Email verification has ended. Start again to continue.","Email, summarisation, knowledge work":"Email, summarisation, knowledge work","Embeddings":"Embeddings","Empty":"Empty","Empty value will be saved as {}.":"Empty value will be saved as {}.","Enable":"Enable","Enable {{parameter}}":"Enable {{parameter}}","Enable 2FA":"Enable 2FA","Enable All":"Enable All","Enable check-in feature":"Enable check-in feature","Enable custom task plugins":"Enable custom task plugins","Enable Data Dashboard":"Enable Data Dashboard","Enable demo mode with limited functionality":"Enable demo mode with limited functionality","Enable Discord OAuth":"Enable Discord OAuth","Enable Disk Cache":"Enable Disk Cache","Enable drawing features":"Enable drawing features","Enable filtering":"Enable filtering","Enable FunctionCall thoughtSignature Fill":"Enable FunctionCall thoughtSignature Fill","Enable GitHub OAuth":"Enable GitHub OAuth","Enable Groups":"Enable Groups","Enable if this is an OpenRouter enterprise account with special response format":"Enable if this is an OpenRouter enterprise account with special response format","Enable io.net deployments":"Enable io.net deployments","Enable io.net model deployment service in console":"Enable io.net model deployment service in console","Enable LinuxDO OAuth":"Enable LinuxDO OAuth","Enable model performance metrics":"Enable model performance metrics","Enable OIDC":"Enable OIDC","Enable only if the upstream supports Responses WebSocket. HTTP requests are unaffected when disabled.":"Enable only if the upstream supports Responses WebSocket. HTTP requests are unaffected when disabled.","Enable or disable this channel":"Enable or disable this channel","Enable or disable this model":"Enable or disable this model","Enable Passkey":"Enable Passkey","Enable passthrough":"Enable passthrough","Enable Performance Monitoring":"Enable Performance Monitoring","Enable plugin {{key}}":"Enable plugin {{key}}","Enable plugin?":"Enable plugin?","Enable rate limiting":"Enable rate limiting","Enable request body passthrough?":"Enable request body passthrough?","Enable request header passthrough?":"Enable request header passthrough?","Enable Request Passthrough":"Enable Request Passthrough","Enable Responses WebSocket":"Enable Responses WebSocket","Enable selected channels":"Enable selected channels","Enable selected models":"Enable selected models","Enable session affinity":"Enable session affinity","Enable SSL/TLS":"Enable SSL/TLS","Enable SSRF Protection":"Enable SSRF Protection","Enable STARTTLS":"Enable STARTTLS","Enable streaming mode for the test request.":"Enable streaming mode for the test request.","Enable task plugins":"Enable task plugins","Enable Telegram OAuth":"Enable Telegram OAuth","Enable test mode for Creem payments":"Enable test mode for Creem payments","Enable this key?":"Enable this key?","Enable Turnstile":"Enable Turnstile","Enable Two-factor Authentication or Passkey in Security & Access to continue.":"Enable Two-factor Authentication or Passkey in Security & Access to continue.","Enable Two-factor Authentication or Passkey in Security & Access to unlock sensitive operations.":"Enable Two-factor Authentication or Passkey in Security & Access to unlock sensitive operations.","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.","Enable unlimited quota for this API key":"Enable unlimited quota for this API key","Enable violation deduction":"Enable violation deduction","Enable Waffo":"Enable Waffo","Enable Waffo Pancake":"Enable Waffo Pancake","Enable WeChat Auth":"Enable WeChat Auth","Enable when proxying workers that fetch images over HTTP.":"Enable when proxying workers that fetch images over HTTP.","Enable when the client and upstream use the same API format and you need to preserve upstream-specific or new fields the gateway does not yet support. Usually leave this off.":"Enable when the client and upstream use the same API format and you need to preserve upstream-specific or new fields the gateway does not yet support. Usually leave this off.","Enable when the upstream needs client information from Codex or Claude Code headers; may expose client information":"Enable when the upstream needs client information from Codex or Claude Code headers; may expose client information","Enable when the upstream needs information from clients such as Codex or Claude Code, including User-Agent, client version or session headers. Usually leave this off.":"Enable when the upstream needs information from clients such as Codex or Claude Code, including User-Agent, client version or session headers. Usually leave this off.","Enabled":"Enabled","Enabled all channels with tag: {{tag}}":"Enabled all channels with tag: {{tag}}","Enabled channels with tag {{tag}}":"Enabled channels with tag {{tag}}","Enabled Status":"Enabled Status","Enabled two-factor authentication":"Enabled two-factor authentication","Enabling...":"Enabling...","Encourages introducing new topics":"Encourages introducing new topics","Encourages new topics":"Encourages new topics","End":"End","End Error":"End Error","End Reason":"End Reason","End Time":"End Time","End time must be after start time":"End time must be after start time","Enter the Discovery URL or Issuer URL first":"Enter the Discovery URL or Issuer URL first","End weekday":"End weekday","End-user identifier for abuse monitoring":"End-user identifier for abuse monitoring","Endpoint":"Endpoint","Endpoint config":"Endpoint config","Endpoint Configuration":"Endpoint Configuration","Endpoint Type":"Endpoint Type","Endpoint, provider-specific settings, and credentials.":"Endpoint, provider-specific settings, and credentials.","Endpoint:":"Endpoint:","Endpoints":"Endpoints","English":"English","Ensure Prefix":"Ensure Prefix","Ensure Suffix":"Ensure Suffix","Ensure the string has a specified prefix":"Ensure the string has a specified prefix","Ensure the string has a specified suffix":"Ensure the string has a specified suffix","Enter 6-digit code":"Enter 6-digit code","Enter a domain such as example.com or localhost, without a protocol, port or path. Put addresses with ports in Allowed Passkey websites.":"Enter a domain such as example.com or localhost, without a protocol, port or path. Put addresses with ports in Allowed Passkey websites.","Enter a finite, non-negative price":"Enter a finite, non-negative price","Enter a finite, non-negative price.":"Enter a finite, non-negative price.","Enter a name":"Enter a name","Enter a new name":"Enter a new name","Enter a positive integer":"Enter a positive integer","Enter a positive or negative amount to adjust the quota":"Enter a positive or negative amount to adjust the quota","Enter a react-icons component name. Invalid names show no icon.":"Enter a react-icons component name. Invalid names show no icon.","Enter a rule to preview mappings.":"Enter a rule to preview mappings.","Enter a valid condition value.":"Enter a valid condition value.","Enter a valid email or leave blank":"Enter a valid email or leave blank","Enter a value and press Enter":"Enter a value and press Enter","Enter amount in {{currency}}":"Enter amount in {{currency}}","Enter amount in tokens":"Enter amount in tokens","Enter an absolute HTTP(S) URL without credentials, query parameters, or fragments":"Enter an absolute HTTP(S) URL without credentials, query parameters, or fragments","Enter an absolute http(s) URL.":"Enter an absolute http(s) URL.","Enter an ISO date and time with a timezone offset.":"Enter an ISO date and time with a timezone offset.","Enter announcement content (supports Markdown & HTML)":"Enter announcement content (supports Markdown & HTML)","Enter announcement content (supports Markdown/HTML)":"Enter announcement content (supports Markdown/HTML)","Enter API Key":"Enter API Key","Enter API key for this channel":"Enter API key for this channel","Enter API Key, format: APIKey|Region":"Enter API Key, format: APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"Enter API Key, one per line, format: APIKey|Region","Enter application token":"Enter application token","Enter authenticator code":"Enter authenticator code","Enter backup code (e.g., CAWD-OQDV)":"Enter backup code (e.g., CAWD-OQDV)","Enter code":"Enter code","Enter code or backup code":"Enter code or backup code","Enter Completion price to calculate ratio":"Enter Completion price to calculate ratio","Enter Creem API key":"Enter Creem API key","Enter custom API endpoint URL":"Enter custom API endpoint URL","Enter deployment region or JSON mapping:":"Enter deployment region or JSON mapping:","Enter display name":"Enter display name","Enter HTML code (e.g.,

About us...

) or a URL (e.g., https://example.com) to embed as iframe":"Enter HTML code (e.g.,

About us...

) or a URL (e.g., https://example.com) to embed as iframe","Enter Input price to calculate ratio":"Enter Input price to calculate ratio","Enter JSON to override request headers":"Enter JSON to override request headers","Enter key, format: AccessKey|SecretAccessKey|Region":"Enter key, format: AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"Enter key, one per line, format: AccessKey|SecretAccessKey|Region","Enter model name":"Enter model name","Enter new key to update":"Enter new key to update","Enter new key to update, or leave empty to keep current key":"Enter new key to update, or leave empty to keep current key","Enter new tag name (leave empty to disband tag)":"Enter new tag name (leave empty to disband tag)","Enter new tag name or leave empty":"Enter new tag name or leave empty","Enter new token to update":"Enter new token to update","Enter one API key per line for batch creation":"Enter one API key per line for batch creation","Enter one key per line for batch creation":"Enter one key per line for batch creation","Enter one keyword per line":"Enter one keyword per line","Enter one website address per line, such as https://example.com. Do not include a page path.":"Enter one website address per line, such as https://example.com. Do not include a page path.","Enter only a top-level callback domain, for example https://api.example.com, without any path.":"Enter only a top-level callback domain, for example https://api.example.com, without any path.","Enter only the domain, such as example.com, without https://, a port or a page path. If you use both example.com and api.example.com, you can enter example.com.":"Enter only the domain, such as example.com, without https://, a port or a page path. If you use both example.com and api.example.com, you can enter example.com.","Enter only the domain, without https://, a port or a page path. example.com and www.example.com are different Passkey domains; changing between them does not migrate existing Passkeys.":"Enter only the domain, without https://, a port or a page path. example.com and www.example.com are different Passkey domains; changing between them does not migrate existing Passkeys.","Enter password":"Enter password","Enter password (8-20 characters)":"Enter password (8-20 characters)","Enter password (8–128 characters)":"Enter password (8–128 characters)","Enter previous domains, one per line, without a protocol, port or path. Different ports on the same domain do not need compatible domains.":"Enter previous domains, one per line, without a protocol, port or path. Different ports on the same domain do not need compatible domains.","Enter previous Passkey domains, one per line. Existing Passkeys can still verify with these domains; new Passkeys use the primary domain.":"Enter previous Passkey domains, one per line. Existing Passkeys can still verify with these domains; new Passkeys use the primary domain.","Enter quota in {{currency}}":"Enter quota in {{currency}}","Enter quota in tokens":"Enter quota in tokens","Enter sample usage to estimate the cost. Group and request multipliers are not included.":"Enter sample usage to estimate the cost. Group and request multipliers are not included.","Enter secret key":"Enter secret key","Enter system prompt (user prompt takes priority)":"Enter system prompt (user prompt takes priority)","Enter tag name (optional)":"Enter tag name (optional)","Enter the 6-digit authenticator code or an unused backup code.":"Enter the 6-digit authenticator code or an unused backup code.","Enter the 6-digit authenticator code.":"Enter the 6-digit authenticator code.","Enter the 6-digit code from your authenticator app":"Enter the 6-digit code from your authenticator app","Enter the 6-digit email verification code.":"Enter the 6-digit email verification code.","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.","Enter the complete URL, supports":"Enter the complete URL, supports","Expiration time cannot be earlier than current time":"Expiration time cannot be earlier than current time","Enter the Coze agent ID":"Enter the Coze agent ID","Enter the full URL of your Gotify server":"Enter the full URL of your Gotify server","Enter the knowledge base ID":"Enter the knowledge base ID","Enter the path before /suno, usually just the domain":"Enter the path before /suno, usually just the domain","Enter the quota amount in {{currency}}":"Enter the quota amount in {{currency}}","Enter the quota amount in tokens":"Enter the quota amount in tokens","Enter the verification code":"Enter the verification code","Enter the website domain, such as example.com.":"Enter the website domain, such as example.com.","Export":"Export","Export logs":"Export logs","Exported {{count}} logs":"Exported {{count}} logs","Enter token counts to preview the estimated cost (excluding group multipliers).":"Enter token counts to preview the estimated cost (excluding group multipliers).","Enter URL...":"Enter URL...","Enter username":"Enter username","Enter verification code":"Enter verification code","Enter webhook secret":"Enter webhook secret","Enter your authenticator code or a backup code":"Enter your authenticator code or a backup code","Enter your email":"Enter your email","Enter your redemption code":"Enter your redemption code","Enter your registered email and we will send you a link to reset your password.":"Enter your registered email and we will send you a link to reset your password.","Enter your username":"Enter your username","Enter your username or email":"Enter your username or email","Enterprise Account":"Enterprise Account","Enterprise-grade security with comprehensive permission management":"Enterprise-grade security with comprehensive permission management","Entries configured in Request Header Override still take priority":"Entries configured in Request Header Override still take priority","Entrypoint (space separated)":"Entrypoint (space separated)","Enum":"Enum","Enum values":"Enum values","Env (JSON object)":"Env (JSON object)","Environment variables":"Environment variables","Environment variables (JSON)":"Environment variables (JSON)","Epay Alipay":"Epay Alipay","Epay endpoint":"Epay endpoint","Epay Gateway":"Epay Gateway","Epay is a payment protocol, not a specific official website. Verify the provider yourself and do not trust random third-party Epay deployments.":"Epay is a payment protocol, not a specific official website. Verify the provider yourself and do not trust random third-party Epay deployments.","Epay merchant ID":"Epay merchant ID","Epay safety reminder":"Epay safety reminder","Epay secret key":"Epay secret key","Epay WeChat Pay":"Epay WeChat Pay","Equals":"Equals","Error":"Error","Error Code (optional)":"Error Code (optional)","Error establishing connection":"Error establishing connection","Error Message":"Error Message","Error Message (required)":"Error Message (required)","Error parsing response data":"Error parsing response data","Error Type (optional)":"Error Type (optional)","Estimated cost":"Estimated cost","Estimated quota cost":"Estimated quota cost","Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.":"Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.","Event":"Event","Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.":"Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.","Failed to check user bindings, please try again later":"Failed to check user bindings, please try again later","Every other device will lose access immediately. This device will remain signed in.":"Every other device will lose access immediately. This device will remain signed in.","Everything configured for this group, in one place.":"Everything configured for this group, in one place.","Exact":"Exact","Exact Match":"Exact Match","Exact match only and case-sensitive. Prefixes, regex, and * wildcards are not supported.":"Exact match only and case-sensitive. Prefixes, regex, and * wildcards are not supported.","Example":"Example","Example (all channels):":"Example (all channels):","Failed to copy channel. Please try again later":"Failed to copy channel. Please try again later","Example (specific channels):":"Example (specific channels):","Example price":"Example price","Example spec":"Example spec","Failed to count channel types. Please try again later":"Failed to count channel types. Please try again later","Failed to count channels. Please try again later":"Failed to count channels. Please try again later","Failed to count tags. Please try again later":"Failed to count tags. Please try again later","Example:":"Example:","Example: users call gpt-4o; upstream receives gpt-4o-all.":"Example: users call gpt-4o; upstream receives gpt-4o-all.","example.com blocked-site.com":"example.com blocked-site.com","Failed to create default token":"Failed to create default token","example.com company.com":"example.com company.com","Failed to create order":"Failed to create order","Excellent":"Excellent","Exchange rate is required":"Exchange rate is required","Failed to create redemption code, please try again later":"Failed to create redemption code, please try again later","Failed to create the administrator account: {{error}}":"Failed to create the administrator account: {{error}}","Failed to create the Discovery request: {{error}}":"Failed to create the Discovery request: {{error}}","Failed to create the plan product":"Failed to create the plan product","Exchange rate must be greater than 0":"Exchange rate must be greater than 0","Excludes the first attempt. Counted per group.":"Excludes the first attempt. Counted per group.","Execute code in a sandbox during the response":"Execute code in a sandbox during the response","Executor":"Executor","Exhausted":"Exhausted","Existing account will be reused":"Existing account will be reused","Existing Models ({{count}})":"Existing Models ({{count}})","Existing models: select fields to replace their current values with the values on the right. Unselected fields stay unchanged.":"Existing models: select fields to replace their current values with the values on the right. Unselected fields stay unchanged.","Existing Passkeys remain tied to the old domain and may stop working. Keep the old domain to preserve access, or confirm only if you have a recovery plan.":"Existing Passkeys remain tied to the old domain and may stop working. Keep the old domain to preserve access, or confirm only if you have a recovery plan.","Exists":"Exists","Expand":"Expand","Expand All":"Expand All","Expand panel":"Expand panel","Expected a JSON array of group identifiers":"Expected a JSON array of group identifiers","Expected a JSON array.":"Expected a JSON array.","Experiment with prompts and models in real time.":"Experiment with prompts and models in real time.","Expiration":"Expiration","Expiration Time":"Expiration Time","expired":"expired","Expired":"Expired","Expired at":"Expired at","Expired time cannot be earlier than current time":"Expired time cannot be earlier than current time","Expires":"Expires","Expires {{time}}":"Expires {{time}}","Expires at":"Expires at","Expires in":"Expires in","Export snapshot":"Export snapshot","Failed to encode Vertex AI key JSON: {{error}}":"Failed to encode Vertex AI key JSON: {{error}}","Failed to export logs":"Failed to export logs","Expose ratio API":"Expose ratio API","Failed to fetch channel. Please try again later":"Failed to fetch channel. Please try again later","Failed to fetch channels with this tag. Please try again later":"Failed to fetch channels with this tag. Please try again later","Failed to fetch channels. Please try again later":"Failed to fetch channels. Please try again later","Exposes the pricing/models catalog in the top navigation.":"Exposes the pricing/models catalog in the top navigation.","Expression":"Expression","Expression - Task pricing":"Expression - Task pricing","Failed to fetch models: {{error}}":"Failed to fetch models: {{error}}","Expression argument types do not match.":"Expression argument types do not match.","Failed to fetch Ollama version: {{error}}":"Failed to fetch Ollama version: {{error}}","Expression based":"Expression based","Failed to fetch reset credit details. Please try again later":"Failed to fetch reset credit details. Please try again later","Failed to fetch tags. Please try again later":"Failed to fetch tags. Please try again later","Failed to fetch the catalog":"Failed to fetch the catalog","Failed to fetch the Discovery configuration: {{error}}":"Failed to fetch the Discovery configuration: {{error}}","Failed to fetch the product list":"Failed to fetch the product list","Expression billing":"Expression billing","Expression compatibility will be checked when saving.":"Expression compatibility will be checked when saving.","Expression editor":"Expression editor","Failed to fetch usage. Please try again later":"Failed to fetch usage. Please try again later","Expression error":"Expression error","Expression pricing":"Expression pricing","Failed to generate default token":"Failed to generate default token","Extend":"Extend","Failed to get the channel information. Please contact the administrator":"Failed to get the channel information. Please contact the administrator","Failed to get the token count":"Failed to get the token count","Failed to get the user group":"Failed to get the user group","Failed to get token from {{provider}}, please check settings":"Failed to get token from {{provider}}, please check settings","Failed to get user information":"Failed to get user information","Extend deployment":"Extend deployment","Extend failed":"Extend failed","Extended successfully":"Extended successfully","Failed to initialize the system: {{error}}":"Failed to initialize the system: {{error}}","External Device":"External Device","External link for users to purchase quota":"External link for users to purchase quota","External operations":"External operations","External operations mode":"External operations mode","External Speed Test":"External Speed Test","Extra":"Extra","Extra destinations beyond the channel API address. The channel address remains accessible.":"Extra destinations beyond the channel API address. The channel address remains accessible.","Extra Notes (Optional)":"Extra Notes (Optional)","Extra visible":"Extra visible","Extra visible to {{group}}":"Extra visible to {{group}}","extras":"extras","Factory":"Factory","Factory and custom plugin behavior":"Factory and custom plugin behavior","Factory and custom plugins all stop serving immediately. In-flight tasks will be handled by timeout cleanup.":"Factory and custom plugins all stop serving immediately. In-flight tasks will be handled by timeout cleanup.","Factory plugins cannot be deleted or disabled individually. A custom version can override them; deleting or disabling that version restores the factory plugin. Third-party-only platforms become unavailable when their plugin is deleted or disabled.":"Factory plugins cannot be deleted or disabled individually. A custom version can override them; deleting or disabling that version restores the factory plugin. Third-party-only platforms become unavailable when their plugin is deleted or disabled.","Fail Reason":"Fail Reason","Fail Reason Details":"Fail Reason Details","failed":"failed","Failed":"Failed","Failed to {{action}} user":"Failed to {{action}} user","Failed to adjust quota":"Failed to adjust quota","Failed to apply overwrite.":"Failed to apply overwrite.","Failed to apply vendor changes":"Failed to apply vendor changes","Failed to batch delete redemption codes":"Failed to batch delete redemption codes","Failed to bind email":"Failed to bind email","Failed to change password":"Failed to change password","Failed to check for updates":"Failed to check for updates","Failed to clean logs":"Failed to clean logs","Failed to complete order":"Failed to complete order","Failed to complete Passkey login":"Failed to complete Passkey login","Failed to confirm compliance":"Failed to confirm compliance","Failed to parse appended keys: {{error}}":"Failed to parse appended keys: {{error}}","Failed to parse credentials. Please check the channel configuration":"Failed to parse credentials. Please check the channel configuration","Failed to contact GitHub releases API":"Failed to contact GitHub releases API","Failed to copy":"Failed to copy","Failed to parse the Discovery configuration: {{error}}":"Failed to parse the Discovery configuration: {{error}}","Failed to parse tool price \\"{{name}}\\": {{error}}":"Failed to parse tool price \\"{{name}}\\": {{error}}","Failed to parse tool prices: {{error}}":"Failed to parse tool prices: {{error}}","Failed to copy channel":"Failed to copy channel","Failed to copy keys":"Failed to copy keys","Failed to copy model names":"Failed to copy model names","Failed to copy to clipboard":"Failed to copy to clipboard","Failed to query channels":"Failed to query channels","Failed to query logs":"Failed to query logs","Failed to query statistics":"Failed to query statistics","Failed to query the upstream task status":"Failed to query the upstream task status","Failed to create account":"Failed to create account","Failed to create API key":"Failed to create API key","Failed to refresh credentials. Please try again later":"Failed to refresh credentials. Please try again later","Failed to create channel":"Failed to create channel","Failed to create deployment":"Failed to create deployment","Failed to create provider":"Failed to create provider","Failed to create redemption code":"Failed to create redemption code","Failed to create user":"Failed to create user","Failed to delete {{count}} model(s)":"Failed to delete {{count}} model(s)","Failed to delete {{count}} redemption codes":"Failed to delete {{count}} redemption codes","Failed to delete account":"Failed to delete account","Failed to reset usage. Please try again later":"Failed to reset usage. Please try again later","Failed to delete API key":"Failed to delete API key","Failed to delete API keys":"Failed to delete API keys","Failed to delete channel":"Failed to delete channel","Failed to delete disabled channels":"Failed to delete disabled channels","Failed to save backup codes":"Failed to save backup codes","Failed to save configuration":"Failed to save configuration","Failed to delete failed models":"Failed to delete failed models","Failed to delete group":"Failed to delete group","Failed to save the demo site mode setting: {{error}}":"Failed to save the demo site mode setting: {{error}}","Failed to save the self-use mode setting: {{error}}":"Failed to save the self-use mode setting: {{error}}","Failed to delete invalid redemption codes":"Failed to delete invalid redemption codes","Failed to delete model":"Failed to delete model","Failed to delete provider":"Failed to delete provider","Failed to search tokens":"Failed to search tokens","Failed to search top-up records":"Failed to search top-up records","Failed to delete redemption code":"Failed to delete redemption code","Failed to delete user":"Failed to delete user","Failed to delete vendor":"Failed to delete vendor","Failed to disable {{count}} model(s)":"Failed to disable {{count}} model(s)","Failed to disable 2FA":"Failed to disable 2FA","Failed to set the audio completion ratio: {{error}}":"Failed to set the audio completion ratio: {{error}}","Failed to set the audio ratio: {{error}}":"Failed to set the audio ratio: {{error}}","Failed to set the cache creation ratio: {{error}}":"Failed to set the cache creation ratio: {{error}}","Failed to set the image ratio: {{error}}":"Failed to set the image ratio: {{error}}","Failed to disable channels":"Failed to disable channels","Failed to disable model":"Failed to disable model","Failed to disable tag channels":"Failed to disable tag channels","Failed to discover OIDC endpoints":"Failed to discover OIDC endpoints","Failed to enable {{count}} model(s)":"Failed to enable {{count}} model(s)","Failed to enable 2FA":"Failed to enable 2FA","Failed to enable channels":"Failed to enable channels","Failed to enable model":"Failed to enable model","Failed to enable tag channels":"Failed to enable tag channels","Failed to fetch channel key":"Failed to fetch channel key","Failed to start payment":"Failed to start payment","Failed to fetch checkin status":"Failed to fetch check-in status","Failed to fetch deployment details":"Failed to fetch deployment details","Failed to fetch models":"Failed to fetch models","Failed to fetch OIDC configuration. Please check the URL and network status":"Failed to fetch OIDC configuration. Please check the URL and network status","Failed to fetch reset credit details":"Failed to fetch reset credit details","Failed to fetch upstream prices":"Failed to fetch upstream prices","Failed to fetch upstream ratios":"Failed to fetch upstream ratios","Failed to fetch usage":"Failed to fetch usage","Failed to fetch user information":"Failed to fetch user information","Failed to fix abilities":"Failed to repair channel consistency","Failed to generate token":"Failed to generate token","Failed to hide model from model square":"Failed to hide model from model square","Failed to initialize OAuth":"Failed to initialize OAuth","Failed to initialize system":"Failed to initialize system","Failed to load":"Failed to load","Failed to load access tokens":"Failed to load access tokens","Failed to load API keys":"Failed to load API keys","Failed to load artifacts":"Failed to load artifacts","Failed to load audit records":"Failed to load audit records","Failed to load billing history":"Failed to load billing history","Failed to load channel":"Failed to load channel","Failed to load enabled models":"Failed to load enabled models","Failed to load home page content":"Failed to load home page content","Failed to load image":"Failed to load image","Failed to load key status":"Failed to load key status","Failed to load login sessions":"Failed to load login sessions","Failed to load logs":"Failed to load logs","Failed to load model":"Failed to load model","Failed to load model pricing":"Failed to load model pricing","Failed to load models":"Failed to load models","Failed to load Passkey status":"Failed to load Passkey status","Failed to load playground groups":"Failed to load playground groups","Failed to load playground models":"Failed to load playground models","FAQ #{{index}} answer cannot exceed 1000 characters":"FAQ #{{index}} answer cannot exceed 1000 characters","FAQ #{{index}} is missing the answer field":"FAQ #{{index}} is missing the answer field","FAQ #{{index}} is missing the question field":"FAQ #{{index}} is missing the question field","FAQ #{{index}} question cannot exceed 200 characters":"FAQ #{{index}} question cannot exceed 200 characters","Failed to load plugins":"Failed to load plugins","FAQ cannot exceed 100 entries":"FAQ cannot exceed 100 entries","Failed to load profile":"Failed to load profile","Failed to load redemption codes":"Failed to load redemption codes","Failed to load settings":"Failed to load settings","Failed to load setup data":"Failed to load setup data","Failed to load setup status":"Failed to load setup status","Failed to load SGLang status":"Failed to load SGLang status","Failed to load tag data":"Failed to load tag data","Failed to load users":"Failed to load users","Failed to load vendor":"Failed to load vendor","Failed to load vendors":"Failed to load vendors","Failed to load vLLM status":"Failed to load vLLM status","Failed to parse group items":"Failed to parse group items","Failed to parse JSON file: {{name}}":"Failed to parse JSON file: {{name}}","Failed to prepare pricing conversion":"Failed to prepare pricing conversion","Fetched successfully":"Fetched successfully","Failed to preview metadata":"Failed to preview metadata","Failed to preview vendor changes":"Failed to preview vendor changes","Failed to query balance":"Failed to query balance","Failed to refresh cache stats":"Failed to refresh cache stats","Failed to refresh credential":"Failed to refresh credential","Failed to regenerate backup codes":"Failed to regenerate backup codes","Failed to register Passkey":"Failed to register Passkey","Failed to remove Passkey":"Failed to remove Passkey","Failed to repair channel consistency":"Failed to repair channel consistency","Failed to reset 2FA":"Failed to reset 2FA","Failed to reset model ratios":"Failed to reset model ratios","Failed to reset Passkey":"Failed to reset Passkey","Failed to reset usage":"Failed to reset usage","Failed to revoke token":"Failed to revoke token","Failed to save":"Failed to save","Failed to save announcements":"Failed to save announcements","Failed to save API info":"Failed to save API info","Failed to save FAQ":"Failed to save FAQ","Failed to save model pricing":"Failed to save model pricing","Failed to save Uptime Kuma groups":"Failed to save Uptime Kuma groups","Failed to search API keys":"Failed to search API keys","Failed to search redemption codes":"Failed to search redemption codes","Failed to search users":"Failed to search users","Failed to send reset email":"Failed to send reset email","Failed to send verification code":"Failed to send verification code","Failed to send verification email":"Failed to send verification email","Failed to set tag":"Failed to set tag","Failed to setup 2FA":"Failed to setup 2FA","Failed to show model in model square":"Failed to show model in model square","Failed to sign out other sessions":"Failed to sign out other sessions","Failed to sign out session":"Failed to sign out session","Failed to start {{provider}} login":"Failed to start {{provider}} login","Failed to start Discord login":"Failed to start Discord login","Failed to start GitHub login":"Failed to start GitHub login","Failed to start LinuxDO login":"Failed to start LinuxDO login","Failed to start OIDC login":"Failed to start OIDC login","Failed to start Passkey login":"Failed to start Passkey login","Failed to start Passkey registration":"Failed to start Passkey registration","Failed to start Telegram binding":"Failed to start Telegram binding","Failed to start testing all channels":"Failed to start testing all channels","Failed to start verification":"Failed to start verification","Failed to sync prices":"Failed to sync prices","Failed to sync ratios":"Failed to sync ratios","Failed to test all channels":"Failed to test all channels","Failed to test channel":"Failed to test channel","Failed to update all balances":"Failed to update all balances","Failed to update API key":"Failed to update API key","Failed to update API key status":"Failed to update API key status","Failed to update balance":"Failed to update balance","Failed to update channel":"Failed to update channel","Failed to update models":"Failed to update models","Failed to update profile":"Failed to update profile","Failed to update provider":"Failed to update provider","Failed to update redemption code":"Failed to update redemption code","Failed to update redemption code status":"Failed to update redemption code status","Failed to update setting":"Failed to update setting","Failed to update settings":"Failed to update settings","Failed to update tag":"Failed to update tag","Failed to update user":"Failed to update user","Failure keywords":"Failure keywords","Failure reason":"Failure reason","Fair":"Fair","Fallback":"Fallback","Fallback base URL":"Fallback base URL","Fallback for remaining models":"Fallback for remaining models","Fallback must be last":"Fallback must be last","Fallback route":"Fallback route","Fallback tier":"Fallback tier","FAQ":"FAQ","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ added. Click \\"Save Settings\\" to apply.","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ deleted. Click \\"Save Settings\\" to apply.","FAQ saved successfully":"FAQ saved successfully","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ updated. Click \\"Save Settings\\" to apply.","FastGPT":"FastGPT","Feature in development":"Feature in development","Fee":"Fee","Fee Amount":"Fee Amount","Fetch":"Fetch","Fetch available models for:":"Fetch available models for:","Fetch available models from upstream":"Fetch available models from upstream","Fetch from Upstream":"Fetch from Upstream","Fetch mode":"Fetch mode","Fetch Models":"Fetch Models","Fetched {{count}} model(s) from upstream":"Fetched {{count}} model(s) from upstream","Fetched {{count}} models":"Fetched {{count}} models","Fetched in your browser and placed in the source field below for review. GitHub and gist page URLs are rewritten to their raw URL automatically.":"Fetched in your browser and placed in the source field below for review. GitHub and gist page URLs are rewritten to their raw URL automatically.","Fetching models...":"Fetching models...","Fetching plugin source...":"Fetching plugin source...","Fetching prefill groups...":"Fetching prefill groups...","Fetching upstream prices...":"Fetching upstream prices...","Fetching upstream ratios...":"Fetching upstream ratios...","Fetching...":"Fetching...","field":"field","Field":"Field","Field change details were not recorded":"Field change details were not recorded","Field Mapping":"Field Mapping","Field passthrough controls":"Field passthrough controls","Field Path":"Field Path","Fields":"Fields","File":"File","File could not be verified":"File could not be verified","File integrity verified":"File integrity verified","File Search":"File Search","File verification":"File verification","Files to Retain":"Files to Retain","Fill a CLI template or add a blank rule.":"Fill a CLI template or add a blank rule.","Fill All Models":"Fill All Models","Fill Codex CLI / Claude CLI Templates":"Fill Codex CLI / Claude CLI Templates","Fill entire column":"Fill entire column","Fill example (all channels)":"Fill example (all channels)","Fill example (specific channels)":"Fill example (specific channels)","Fill in":"Fill in","Fill in both Merchant ID and API Private Key before creating.":"Fill in both Merchant ID and API Private Key before creating.","Fill in the credentials above to begin.":"Fill in the credentials above to begin.","Fill in the following info to create a new subscription plan":"Fill in the following info to create a new subscription plan","Fill in this website":"Fill in this website","Fill Related Models":"Fill Related Models","Fill Template":"Fill Template","Fill template: level and active":"Fill template: level and active","Fill template: level message":"Fill template: level message","Fill template: organization message":"Fill template: organization message","Fill template: organization or role":"Fill template: organization or role","Fill Templates":"Fill Templates","Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.":"Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format","Filled {{count}} model(s)":"Filled {{count}} model(s)","Filled {{count}} related model(s)":"Filled {{count}} related model(s)","Filter":"Filter","Filter by API key...":"Filter by API key...","Filter by channel ID":"Filter by channel ID","Filter by group":"Filter by group","Filter by MjProxy task ID":"Filter by MjProxy task ID","Filter by model name":"Filter by model name","Filter by model name...":"Filter by model name...","Filter by model...":"Filter by model...","Filter by name or ID...":"Filter by name or ID...","Filter by name, ID, or key...":"Filter by name, ID, or key...","Filter by name...":"Filter by name...","Filter by node":"Filter by node","Filter by price field":"Filter by price field","Filter by ratio type":"Filter by ratio type","Filter by request ID":"Filter by request ID","Filter by task ID":"Filter by task ID","Filter by token name":"Filter by token name","Filter by username":"Filter by username","Filter by username, name or email...":"Filter by username, name or email...","Filter Dashboard Models":"Filter Dashboard Models","Filter mappings":"Filter mappings","Filter models by provider, group, type, endpoint, and tags.":"Filter models by provider, group, type, endpoint, and tags.","Filter models by type, endpoint, vendor, group and tags":"Filter models by type, endpoint, vendor, group and tags","Filter models...":"Filter models...","Filter plugins...":"Filter plugins...","Filter the model analytics view by time range and user.":"Filter the model analytics view by time range and user.","Filter the traffic flow view by time range and user.":"Filter the traffic flow view by time range and user.","Filter...":"Filter...","Filters":"Filters","Filters active":"Filters active","Final Consumed":"Final Consumed","Final cost = base × multiplier when conditions match":"Final cost = base × multiplier when conditions match","Final price multiplier (0.95 = 5% discount":"Final price multiplier (0.95 = 5% discount","Finance":"Finance","Find":"Find","Find the billing group.":"Find the billing group.","Find the ratio.":"Find the ratio.","Finish reordering":"Finish reordering","Finish Time":"Finish Time","Finished requests":"Finished requests","First API request":"First API request","First token":"First token","First/Last Frame to Video":"First/Last Frame to Video","Fix Abilities":"Repair Channel Consistency","Fix order":"Fix order","Fix the Request Header Override JSON first":"Fix the Request Header Override JSON first","Fuzzy search keywords must be at least 2 characters long":"Fuzzy search keywords must be at least 2 characters long","Fixed":"Fixed","Fixed abilities: {{success}} succeeded, {{fails}} failed":"Channel consistency repaired: {{success}} succeeded, {{fails}} failed","Fixed channel constraint":"Fixed channel constraint","Fixed fee per request":"Fixed fee per request","Fixed price":"Fixed price","Fixed price (USD)":"Fixed price (USD)","Fixed request price":"Fixed request price","Flexible integration":"Flexible integration","Floating":"Floating","Flow":"Flow","Flow Filters":"Flow Filters","Flow width metric":"Flow width metric","FluentRead extension not detected. Please ensure it is installed and active.":"FluentRead extension not detected. Please ensure it is installed and active.","Flush interval (minutes)":"Flush interval (minutes)","Follow the guided steps to prepare your workspace before the first login.":"Follow the guided steps to prepare your workspace before the first login.","Follow user group":"Follow user group","Font":"Font","Footer":"Footer","Footer text displayed at the bottom of pages":"Footer text displayed at the bottom of pages","footer.columns.about.links.aboutProject":"About Project","footer.columns.about.links.contact":"Contact Us","footer.columns.about.links.features":"Features","footer.columns.about.title":"About Us","footer.columns.docs.links.apiDocs":"API Documentation","footer.columns.docs.links.installation":"Installation Guide","footer.columns.docs.links.quickStart":"Quick Start","footer.columns.docs.title":"Documentation","footer.columns.related.links.midjourney":"MjProxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"One API","footer.columns.related.title":"Related Projects","footer.defaultCopyright":"All rights reserved.","footer.newapi.projectAttributionSuffix":"All rights reserved. Designed and developed by the project contributors.","For advanced custom channels this applies only to /v1/responses routes without protocol conversion.":"For advanced custom channels this applies only to /v1/responses routes without protocol conversion.","GitHub ID is empty!":"GitHub ID is empty!","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment","For private deployments, format: https://fastgpt.run/api/openapi":"For private deployments, format: https://fastgpt.run/api/openapi","For this channel, map the model name in client requests to the model name sent upstream.":"For this channel, map the model name in client requests to the model name sent upstream.","For this website, you can enter: {{domain}}":"For this website, you can enter: {{domain}}","Force a syntactically valid JSON response":"Force a syntactically valid JSON response","Force AUTH LOGIN":"Force AUTH LOGIN","Force Format":"Force Format","Force format response to OpenAI standard (OpenAI channel only)":"Force format response to OpenAI standard (OpenAI channel only)","Force JSON object or schema-conforming output":"Force JSON object or schema-conforming output","Force operation":"Force operation","Force SMTP authentication using AUTH LOGIN method":"Force SMTP authentication using AUTH LOGIN method","Force-disabled two-factor authentication for the user":"Force-disabled two-factor authentication for the user","Forest Whisper":"Forest Whisper","Forgot password":"Forgot password","Forgot password?":"Forgot password?","Form reset to saved values":"Form reset to saved values","Format":"Format","Format conversion is unavailable; the client must use a format the upstream supports":"Format conversion is unavailable; the client must use a format the upstream supports","Format JSON":"Format JSON","Format:":"Format:","Format: Access Key ID|Secret Access Key":"Format: Access Key ID|Secret Access Key","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)","Format: Ak|Sk|Region":"Format: Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"Format: APIKey|SecretKey","Format: APPID|APISecret|APIKey":"Format: APPID|APISecret|APIKey","Format: TokenHub API Key, or legacy AppId|SecretId|SecretKey":"Format: TokenHub API Key, or legacy AppId|SecretId|SecretKey","Got it":"Got it","Gotify server URL cannot be empty":"Gotify server URL cannot be empty","Gotify token cannot be empty":"Gotify token cannot be empty","Forward requests directly to upstream providers without any post-processing.":"Forward requests directly to upstream providers without any post-processing.","Forwarding Routes":"Forwarding Routes","Frames per second":"Frames per second","Free":"Free","Free: {{free}} / Total: {{total}}":"Free: {{free}} / Total: {{total}}","Frequency Penalty":"Frequency Penalty","Friendly name to identify this channel":"Friendly name to identify this channel","From Address":"From Address","From IO.NET deployment":"From IO.NET deployment","From marketplace index":"From marketplace index","From model redirect, not yet added to models list":"From model redirect, not yet added to models list","Full API Key":"Full API Key","Full Base URL (supports":"Full Base URL (supports","Group #{{index}} category name cannot exceed 50 characters":"Group #{{index}} category name cannot exceed 50 characters","Group #{{index}} category name duplicates another group":"Group #{{index}} category name duplicates another group","Group #{{index}} contains disallowed content":"Group #{{index}} contains disallowed content","Group #{{index}} description cannot exceed 200 characters":"Group #{{index}} description cannot exceed 200 characters","Group #{{index}} has a URL that cannot be parsed: {{error}}":"Group #{{index}} has a URL that cannot be parsed: {{error}}","Group #{{index}} has an invalid URL format":"Group #{{index}} has an invalid URL format","Group #{{index}} is missing the category name field":"Group #{{index}} is missing the category name field","Group #{{index}} is missing the slug field":"Group #{{index}} is missing the slug field","Group #{{index}} is missing the URL field":"Group #{{index}} is missing the URL field","Group #{{index}} slug can only contain letters, numbers, underscores and hyphens":"Group #{{index}} slug can only contain letters, numbers, underscores and hyphens","Group #{{index}} slug cannot exceed 100 characters":"Group #{{index}} slug cannot exceed 100 characters","Group #{{index}} URL cannot exceed 500 characters":"Group #{{index}} URL cannot exceed 500 characters","Full Code":"Full Code","Full input length":"Full input length","Full input length override":"Full input length override","Full JSON":"Full JSON","Full layout":"Full layout","Full source":"Full source","Full upstream catalog":"Full upstream catalog","Full width":"Full width","Function calling":"Function calling","Functions":"Functions","Gateways":"Gateways","Group name already exists":"Group name already exists","Group name and type cannot be empty":"Group name and type cannot be empty","GC Count":"GC Count","GC executed":"GC executed","GC execution failed":"GC execution failed","Gemini":"Gemini","Gemini and OpenAI audio prices differ for this model. Use separate billing model names to convert them.":"Gemini and OpenAI audio prices differ for this model. Use separate billing model names to convert them.","Gemini Generate Content to OpenAI Chat":"Gemini Generate Content to OpenAI Chat","Gemini Generate Content to OpenAI Responses":"Gemini Generate Content to OpenAI Responses","Gemini Image 4K":"Gemini Image 4K","Gemini only":"Gemini only","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.","General":"General","General Settings":"General Settings","Generate":"Generate","Generate Lyrics":"Generate Lyrics","Generate Midjourney images through MjProxy":"Generate Midjourney images through MjProxy","Generate Midjourney images through MjProxyPlus":"Generate Midjourney images through MjProxyPlus","Generate Music":"Generate Music","Generate music and lyrics through SunoAPI":"Generate music and lyrics through SunoAPI","Generate new backup codes for account recovery":"Generate new backup codes for account recovery","Generate New Codes":"Generate New Codes","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.","Generated image":"Generated image","Generating new codes will invalidate all existing backup codes.":"Generating new codes will invalidate all existing backup codes.","Generating...":"Generating...","Generation quality preset":"Generation quality preset","Generation was interrupted":"Generation was interrupted","Generic cache":"Generic cache","Get advice":"Get advice","Get one here":"Get one here","Get started":"Get started","Get Started":"Get Started","GitHub":"GitHub","GitHub rate limit reached. Try again later.":"GitHub rate limit reached. Try again later.","Give the group a recognizable name and optional description.":"Give the group a recognizable name and optional description.","Give this group a recognizable name.":"Give this group a recognizable name.","Header override must be valid JSON format":"Header override must be valid JSON format","Global and channel settings":"Global and channel settings","Global configuration and administrative tools.":"Global configuration and administrative tools.","Global Coverage":"Global Coverage","Global default":"Global default","Global default: {{mode}}":"Global default: {{mode}}","Global Model Configuration":"Global Model Configuration","Global throughput":"Global throughput","Go Back":"Go Back","Go back and edit":"Go back and edit","Go to Dashboard":"Go to Dashboard","Go to first page":"Go to first page","Go to GitHub":"Go to GitHub","Go to home":"Go to home","Go to io.net API Keys":"Go to io.net API Keys","Go to last page":"Go to last page","Go to next page":"Go to next page","Go to page {{page}}":"Go to page {{page}}","Go to previous page":"Go to previous page","Go to settings":"Go to settings","Go to Settings":"Go to Settings","Good":"Good","Gotify Application Token":"Gotify Application Token","Gotify Documentation":"Gotify Documentation","Gotify Server URL":"Gotify Server URL","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus, etc.","GPU count":"GPU count","Granted at":"Granted at","Greater than":"Greater than","Greater Than":"Greater Than","Greater than or equal":"Greater than or equal","Greater Than or Equal":"Greater Than or Equal","Grok":"Grok","Grok Settings":"Grok Settings","Group":"Group","Group {{path}}":"Group {{path}}","Group & Quota":"Group & Quota","Group added. Click \\"Save Settings\\" to apply.":"Group added. Click \\"Save Settings\\" to apply.","Group channels by tag for batch operations":"Group channels by tag for batch operations","Group config overrides global limits, shares the same period":"Group config overrides global limits, shares the same period","Group deleted. Click \\"Save Settings\\" to apply.":"Group deleted. Click \\"Save Settings\\" to apply.","Group description":"Group description","Group details":"Group details","Group identifier":"Group identifier","Group is required":"Group is required","Group name":"Group name","Group Name":"Group Name","Group name cannot be changed when editing.":"Group name cannot be changed when editing.","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"Group prices cannot be expanded because this expression is not a standard tiered pricing expression.","Group Pricing":"Group Pricing","Group pricing usage guide":"Group pricing usage guide","group ratio":"group ratio","Group Ratio":"Group Ratio","Group ratios":"Group ratios","Group settings":"Group settings","Group updated. Click \\"Save Settings\\" to apply.":"Group updated. Click \\"Save Settings\\" to apply.","Group visibility":"Group visibility","Group-based rate limits":"Group-based rate limits","Group:":"Group:","Group: {{ratio}}x":"Group: {{ratio}}x","Grouped monitor status from Uptime Kuma":"Grouped monitor status from Uptime Kuma","Groups":"Groups","Groups *":"Groups *","Groups that users can select when creating API keys.":"Groups that users can select when creating API keys.","Growth":"Growth","Guardrails":"Guardrails","Guest":"Guest","h":"h","Haiku Model":"Haiku Model","Hang tight while we finish connecting your account.":"Hang tight while we finish connecting your account.","Hang tight while we securely link this account to your profile.":"Hang tight while we securely link this account to your profile.","Hardware":"Hardware","Hardware type":"Hardware type","Has been disabled":"Disabled successfully","Has been enabled":"Enabled successfully","Has been invalidated":"Invalidated successfully","Have a Code?":"Have a Code?","Header":"Header","header instead.":"header instead.","Header Name":"Header Name","Header navigation":"Header navigation","Header Override":"Header Override","Header Passthrough (X-Request-Id)":"Header Passthrough (X-Request-Id)","Header Value (supports string or JSON mapping)":"Header Value (supports string or JSON mapping)","header. Anthropic-formatted endpoints accept the":"header. Anthropic-formatted endpoints accept the","Health":"Health","Health check timeout threshold (seconds)":"Health check timeout threshold (seconds)","Healthy":"Healthy","Hidden":"Hidden","Hidden — verify to reveal":"Hidden — verify to reveal","Hidden {{count}} models from model square":"Hidden {{count}} models from model square","Hidden from {{group}}":"Hidden from {{group}}","Hidden from catalog":"Hidden from catalog","Hidden from the model square by metadata policy.":"Hidden from the model square by metadata policy.","Hide":"Hide","Hide API key":"Hide API key","Hide from catalog":"Hide from catalog","Hide from model square":"Hide from model square","Hide redirect panel":"Hide redirect panel","ID is empty":"ID is empty","ID is empty!":"ID is empty!","Hide selected models from model square":"Hide selected models from model square","Hide sensitive data":"Hide sensitive data","Hide setup guide":"Hide setup guide","High Performance":"High Performance","High-risk operation confirmation":"High-risk Operation Confirmation","High-risk status code retry confirmation text":"I understand the multiple billing and crash risks, and confirm enabling it","High-risk status code retry input mismatch":"The input does not match the required text.","High-risk status code retry input placeholder":"Please type the exact text above","High-risk status code retry risk check 1":"I have fully read and understood all of the warnings above, including the destructive consequences of forcing retries for status codes 504 and 524.","High-risk status code retry risk check 2":"I have communicated with the upstream provider and confirmed that the current timeout is caused by an upstream service bottleneck that cannot be resolved upstream at this time, so forced retry is only a compromise.","High-risk status code retry risk check 3":"I voluntarily accept all duplicate or multiple billing risks and will not file issues or complaints in this project repository about billing anomalies caused by these retries.","High-risk status code retry risk check 4":"I voluntarily accept the system stability risks, including severe client timeouts and possible service crashes, and take responsibility for any resulting request backlog or service outage.","High-risk status code retry risk disclaimer":"### ⚠️ High-risk operation: 504/524 status code retry risk notice and disclaimer\\n\\nBy default, this project does not retry status codes `400` (bad request), `504` (gateway timeout), or `524` (a timeout occurred). Status codes 504 and 524 usually mean that **the request successfully reached the upstream AI service and upstream processing had begun, but the connection was closed because upstream processing took too long**. This usually points to an upstream service bottleneck.\\n\\nEnabling redirection/retry for these timeout status codes is an **extremely high-risk operation**. Before enabling it, you must carefully read and understand the following consequences:\\n\\n#### 1. Core risks (read carefully)\\n\\n1. 💸 Duplicate or multiple billing: Most upstream AI providers **still charge** for requests that started processing but were interrupted by a network timeout (504/524). A retry sends a brand-new upstream request and can result in **duplicate or multiple charges**.\\n2. ⏳ Severe client timeout: Once a request has already timed out, adding retries can multiply total latency and cause severe or unacceptable timeouts for the final client or caller.\\n3. 💥 Request backlog and service crash: Forced retries keep threads and connections occupied for longer. Under high concurrency, this can cause a serious **request backlog**, exhaust system resources, trigger cascading failures, and crash the proxy service.\\n\\n#### 2. Risk acknowledgement\\n\\nIf you still choose to enable this feature, you acknowledge all of the following:","Higher priority channels are selected first":"Higher priority channels are selected first","Historical capitalization":"Historical capitalization","Historical tokens":"Historical tokens","Historical Usage":"Historical Usage","History of MjProxy-style image tasks.":"History of MjProxy-style image tasks.","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"Hit criteria: If cached tokens exist in usage, it counts as a hit.","Image count {{count}}":"Image count {{count}}","Hit Rate":"Hit Rate","Hit tier":"Hit tier","Home":"Home","Home Page Content":"Home Page Content","Homepage URL":"Homepage URL","Hook":"Hook","Hostname or IP of your SMTP provider":"Hostname or IP of your SMTP provider","Hour":"Hour","Hour of day":"Hour of day","Hourly token usage by model across the last 24 hours":"Hourly token usage by model across the last 24 hours","Hourly token usage by model over the past 24 hours":"Hourly token usage by model over the past 24 hours","hours":"hours","How a call is priced":"How a call is priced","How a session is identified and which channel it keeps.":"How a session is identified and which channel it keeps.","How client credentials are sent to the token endpoint":"How client credentials are sent to the token endpoint","How frequently the system checks auto-disabled channels for recovery":"How frequently the system checks auto-disabled channels for recovery","How frequently the system tests all channels":"How frequently the system tests all channels","How It Works":"How It Works","How model mapping works":"How model mapping works","How much to charge for each US dollar of balance (Epay)":"How much to charge for each US dollar of balance (Epay)","How this model name should match requests":"How this model name should match requests","How to deliver the resulting image":"How to deliver the resulting image","Inactive disk cache cleared":"Inactive disk cache cleared","How to get an io.net API Key":"How to get an io.net API Key","How to reset my quota?":"How to reset my quota?","How to select keys: random or sequential polling":"How to select keys: random or sequential polling","How to set up Passkey domains":"How to set up Passkey domains","How will you use the platform?":"How will you use the platform?","HTTP Protocol":"HTTP Protocol","HTTP protocol must be Auto or HTTP/1.1":"HTTP protocol must be Auto or HTTP/1.1","HTTP/1.1":"HTTP/1.1","HTTP/2 Connection Shards":"HTTP/2 Connection Shards","HTTP/2 connection shards are unavailable when HTTP/1.1 is selected.":"HTTP/2 connection shards are unavailable when HTTP/1.1 is selected.","HTTP/2 connection shards must be 1 when HTTP/1.1 is selected":"HTTP/2 connection shards must be 1 when HTTP/1.1 is selected","HTTP/2 connection shards must be between 1 and 8":"HTTP/2 connection shards must be between 1 and 8","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"Human-readable name shown to users during Passkey prompts.","I confirm enabling high-risk retry":"I Confirm Enabling High-risk Retry","I have read and agree to the":"I have read and agree to the","I have read and understood the above compliance reminder":"I have read and understood the above compliance reminder","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.","I understand that disabling 2FA removes its authenticator and backup codes.":"I understand that disabling 2FA removes its authenticator and backup codes.","I understand that disabling 2FA will remove all protection and backup codes":"I understand that disabling 2FA will remove all protection and backup codes","Icon":"Icon","Icon file must be 100 KB or smaller":"Icon file must be 100 KB or smaller","Icon identifier (e.g. github, gitlab)":"Icon identifier (e.g. github, gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"If default auto group is enabled, newly created tokens start with auto instead of an empty group.","If left blank, the system may use a different website address and Passkey sign-in can fail here.":"If left blank, the system may use a different website address and Passkey sign-in can fail here.","If no preceding rule matched: {{condition}}":"If no preceding rule matched: {{condition}}","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.","If this keeps happening, please report it on GitHub Issues.":"If this keeps happening, please report it on GitHub Issues.","If users already have Passkeys, changing this domain may require them to sign in another way and set up their Passkeys again.":"If users already have Passkeys, changing this domain may require them to sign in another way and set up their Passkeys again.","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.","If your Passkey belongs to another website, start sign-in there:":"If your Passkey belongs to another website, start sign-in there:","Ignore":"Ignore","Ignore this version":"Ignore this version","Ignored upstream models":"Ignored upstream models","image":"image","Image":"Image","Image Cache":"Image Cache","Image cache input price":"Image cache input price","Image count":"Image count","Image Generation":"Image Generation","Image In":"Image In","Image input":"Image input","Image input price":"Image input price","Image not available":"Image not available","Image Out":"Image Out","Image output price":"Image output price","Image Preview":"Image Preview","Image prices with count, size or quality adjustments must be converted manually.":"Image prices with count, size or quality adjustments must be converted manually.","Image ratio":"Image ratio","Image to Video":"Image to Video","Image Tokens":"Image Tokens","Imagine the pricing table has three groups: default (ratio 1.0), premium (ratio 0.5), and vip (ratio 0.8). Users whose account is in the vip group get user-level perks, and premium is a cheaper channel pool that users can pick for their tokens.":"Imagine the pricing table has three groups: default (ratio 1.0), premium (ratio 0.5), and vip (ratio 0.8). Users whose account is in the vip group get user-level perks, and premium is a cheaper channel pool that users can pick for their tokens.","Import from URL":"Import from URL","Import to CC Switch":"Import to CC Switch","Input Price: High to Low":"Input Price: High to Low","Input Price: Low to High":"Input Price: Low to High","Insert a new priority tier":"Insert a new priority tier","Invalid announcements format: {{error}}":"Invalid announcements format: {{error}}","Invalid API info format: {{error}}":"Invalid API info format: {{error}}","Invalid authorization code":"Invalid authorization code","Invalid Bark push URL":"Invalid Bark push URL","Invalid billing expression for model {{model}}: {{error}}":"Invalid billing expression for model {{model}}: {{error}}","Important":"Important","Invalid channel ID":"Invalid channel ID","Importing metadata does not add channels, enable model access, or configure prices.":"Importing metadata does not add channels, enable model access, or configure prices.","Invalid channel priority move":"Invalid channel priority move","Invalid channel settings format: {{error}}":"Invalid channel settings format: {{error}}","In BotFather, open Login Widget, register this callback URL, and copy the Client ID and Client Secret. Existing Telegram bindings will continue to work after configuration.":"In BotFather, open Login Widget, register this callback URL, and copy the Client ID and Client Secret. Existing Telegram bindings will continue to work after configuration.","In JSON, the user group is the outer key and the billing group is the inner key. The example below means: vip users pay 0.8 when billed as standard, and 0.3 when billed as premium.":"In JSON, the user group is the outer key and the billing group is the inner key. The example below means: vip users pay 0.8 when billed as standard, and 0.3 when billed as premium.","In Progress":"In Progress","Invalid Discovery URL. Only http and https are supported":"Invalid Discovery URL. Only http and https are supported","Invalid email address":"Invalid email address","In the visual editor these appear as Extra visible and Hidden. In JSON, +: (or no prefix) adds a group and -: removes one.":"In the visual editor these appear as Extra visible and Hidden. In JSON, +: (or no prefix) adds a group and -: removes one.","Invalid FAQ format: {{error}}":"Invalid FAQ format: {{error}}","Invalid Gotify server URL":"Invalid Gotify server URL","Invalid ID":"Invalid ID","In:":"In:","Invalid input":"Invalid input","Invalid input {{error}}":"Invalid input {{error}}","incident":"incident","incidents":"incidents","Incidents":"Incidents","Include {{price}}":"Include {{price}}","Include at least one price variable.":"Include at least one price variable.","Include Group":"Include Group","Include Model":"Include Model","Invalid parameters":"Invalid parameters","Include name":"Include name","Invalid Passkey login state":"Invalid Passkey login state","Include quota":"Include quota","Include Rule Name":"Include Rule Name","Invalid Passkey verification request":"Invalid Passkey verification request","Includes changes that require security verification, such as password, two-factor settings, and account deletion.":"Includes changes that require security verification, such as password, two-factor settings, and account deletion.","Includes request rules":"Includes request rules","Invalid provider ID":"Invalid provider ID","Invalid request":"Invalid request","Invalid request body.":"Invalid request body.","Invalid request parameter format":"Invalid request parameter format","Invalid request parameters: {{error}}":"Invalid request parameters: {{error}}","Includes tool-call surcharge":"Includes tool-call surcharge","Including failed requests, 0 = unlimited":"Including failed requests, 0 = unlimited","Incoming path":"Incoming path","Incoming path is required":"Incoming path is required","Incoming path must be unique":"Incoming path must be unique","Incoming path must not include query":"Incoming path must not include query","Incoming path must start with /":"Incoming path must start with /","Invalid subscription ID":"Invalid subscription ID","Invalid top-up amount":"Invalid top-up amount","Invalid top-up quota":"Invalid top-up quota","Invalid Uptime Kuma group settings format: {{error}}":"Invalid Uptime Kuma group settings format: {{error}}","Invalid user ID":"Invalid user ID","Incomplete":"Incomplete","Invalid warning type":"Invalid warning type","Invalid Webhook URL":"Invalid Webhook URL","Increase quota for user “{{name}}”":"Increase quota for user “{{name}}”","Increase user quota":"Increase user quota","Increased user quota by {{quota}}":"Increased user quota by {{quota}}","Index":"Index","Invitation code bonus {{quota}}":"Invitation code bonus {{quota}}","Index request failed with HTTP {{status}}":"Index request failed with HTTP {{status}}","Invitation quota is insufficient!":"Invitation quota is insufficient!","Index URL":"Index URL","Information unavailable":"Information unavailable","Inherit global Auto order":"Inherit global Auto order","Inherit global default":"Inherit global default","Inherit vendor icon":"Inherit vendor icon","Inherited":"Inherited","Inherited from {{vendor}}":"Inherited from {{vendor}}","Initial quota given to new users":"Initial quota given to new users","Initial quota given to new users ({{formattedQuota}})":"Initial quota given to new users ({{formattedQuota}})","Initialization failed, please try again.":"Initialization failed, please try again.","Initialize":"Initialize","Initialize system":"Initialize system","Initializing…":"Initializing…","Inpaint":"Inpaint","Input":"Input","Input mode":"Input mode","Input pre-consume multiplier":"Input pre-consume multiplier","Input price":"Input price","Input price is required before saving dependent prices.":"Input price is required before saving dependent prices.","Input token rate":"Input token rate","Input tokens":"Input tokens","Input Tokens":"Input Tokens","Inset":"Inset","Inspect requests, errors, and billing details":"Inspect requests, errors, and billing details","Inspect user prompts":"Inspect user prompts","Install":"Install","Install {{name}}":"Install {{name}}","Install and enable":"Install and enable","Install, configure, test, and remove task plugins.":"Install, configure, test, and remove task plugins.","Installed":"Installed","Installed {{name}} v{{version}}":"Installed {{name}} v{{version}}","Installed v{{from}} → marketplace v{{to}}":"Installed v{{from}} → marketplace v{{to}}","Installed v{{installed}} not listed":"Installed v{{installed}} not listed","Installed version is not in this index":"Installed version is not in this index","Installing...":"Installing...","Instance":"Instance","Instances":"Instances","Insufficient balance":"Insufficient balance","Insufficient permission to adjust this user":"Insufficient permission to adjust this user","Integrations":"Integrations","Integrity check failed":"Integrity check failed","Integrity hash":"Integrity hash","Integrity verification unavailable in this environment":"Integrity verification unavailable in this environment","Inter-group overrides":"Inter-group overrides","Inter-group ratio overrides":"Inter-group ratio overrides","Interface Language":"Interface Language","Internal Notes":"Internal Notes","Internal notes (not shown to users)":"Internal notes (not shown to users)","Internal Server Error!":"Internal Server Error!","Interval must be at least 1 minute":"Interval must be at least 1 minute","Invalid (NaN)":"Invalid (NaN)","Invalid adjustment parameters":"Invalid adjustment parameters","Invalid channel header override":"Invalid channel header override","Invalid channel proxy":"Invalid channel proxy","Invalid chat link. Please contact the administrator.":"Invalid chat link. Please contact the administrator.","Invalid chat link. Please contact your administrator.":"Invalid chat link. Please contact your administrator.","Invalid code":"Invalid code","Invalid expression syntax":"Invalid expression syntax","Invalid inference server address":"Invalid inference server address","Invalid items format":"Invalid items format","Invalid JSON":"Invalid JSON","Invalid JSON format":"Invalid JSON format","Invalid JSON format or values out of allowed range":"Invalid JSON format or values out of allowed range","Invalid JSON in parameter override template":"Invalid JSON in parameter override template","Invalid JSON string.":"Invalid JSON string.","Invalid model mapping format":"Invalid model mapping format","Invalid Passkey domain. Enter a domain without a scheme, port, path or wildcard.":"Invalid Passkey domain. Enter a domain without a scheme, port, path or wildcard.","Join the same priority tier":"Join the same priority tier","Key deleted":"Key deleted","Key disabled":"Key disabled","Key enabled":"Key enabled","Invalid Passkey registration response":"Invalid Passkey registration response","Key index out of range":"Key index out of range","Invalid Passkey response":"Invalid Passkey response","Invalid payment redirect URL":"Invalid payment redirect URL","Invalid pricing value":"Invalid pricing value","Invalid reset link, please request a new password reset":"Invalid reset link, please request a new password reset","Invalid reset link, please request a new password reset.":"Invalid reset link, please request a new password reset.","Invalid response":"Invalid response","Invalid rules JSON format":"Invalid rules JSON format","Invalid status code mapping entries: {{entries}}":"Invalid status code mapping entries: {{entries}}","Invalid status code rules":"Invalid status code rules","Invalid status code rules: {{tokens}}":"Invalid status code rules: {{tokens}}","Invalid vLLM server address":"Invalid vLLM server address","Invalidate":"Invalidate","Invalidated":"Invalidated","Invert match":"Invert match","Invitation Code":"Invitation Code","Invitation Quota":"Invitation Quota","Invite Info":"Invite Info","Invited":"Invited","Invited {{count}} users":"Invited {{count}} users","Invited by user ID":"Invited by user ID","Invited Users":"Invited Users","Invitee Reward":"Invitee Reward","Inviter":"Inviter","Inviter ID: {{id}}":"Inviter ID: {{id}}","Inviter Reward":"Inviter Reward","Invites":"Invites","Invoke developer-defined functions with structured arguments":"Invoke developer-defined functions with structured arguments","InvokeModel (legacy)":"InvokeModel (legacy)","io.net API Key":"io.net API Key","io.net Deployments":"io.net Deployments","IP":"IP","IP Address":"IP Address","IP Filter Mode":"IP Filter Mode","IP Restriction":"IP Restriction","IP Whitelist (supports CIDR)":"IP Whitelist (supports CIDR)","IP: {{ip}} · Method: {{method}}":"IP: {{ip}} · Method: {{method}}","is less than the configured maximum cache size":"is less than the configured maximum cache size","is the default price; ":"is the default price; ","It seems like the page you\'re looking for":"It seems like the page you\'re looking for","Items":"Items","Japanese":"Japanese","JavaScript file":"JavaScript file","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"JSON array of group identifiers. When enabled below, new tokens rotate through this list.","JSON Editor":"JSON Editor","JSON format error":"JSON format error","JSON format supports service account JSON files":"JSON format supports service account JSON files","JSON is invalid at line {{line}}, column {{column}}.":"JSON is invalid at line {{line}}, column {{column}}.","JSON is invalid at position {{position}}.":"JSON is invalid at position {{position}}.","JSON is invalid. Please check the syntax.":"JSON is invalid. Please check the syntax.","JSON keys are request model names; values are upstream model names.":"JSON keys are request model names; values are upstream model names.","JSON map of group → description exposed when users create API keys.":"JSON map of group → description exposed when users create API keys.","JSON map of group → ratio applied when the user selects the group explicitly.":"JSON map of group → ratio applied when the user selects the group explicitly.","JSON map of model → multiplier applied to quota billing.":"JSON map of model → multiplier applied to quota billing.","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"JSON map of model → USD cost per request. Takes precedence over ratio based billing.","JSON mode":"JSON mode","JSON Mode":"JSON Mode","JSON must be an object":"JSON must be an object","JSON object:":"JSON object:","JSON structure is invalid":"JSON structure is invalid","JSON Text":"JSON Text","Leave empty to use the site default ({{amount}})":"Leave empty to use the site default ({{amount}})","Legacy access tokens have been retired. Create a new access token in security settings":"Legacy access tokens have been retired. Create a new access token in security settings","JSON-based access control rules. Leave empty to allow all users.":"JSON-based access control rules. Leave empty to allow all users.","Just now":"Just now","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"Keep affinity when channel is disabled","Keep enabled if you need to proxy requests for different upstream accounts.":"Keep enabled if you need to proxy requests for different upstream accounts.","Keep enough balance before production traffic":"Keep enough balance before production traffic","Keep existing domain":"Keep existing domain","Keep local":"Keep local","Keep original value":"Keep original value","Keep original value (skip if target exists)":"Keep original value (skip if target exists)","Keep the domains used by existing Passkeys, one per line. If the primary domain changed from www.example.com to example.com, enter www.example.com here.":"Keep the domains used by existing Passkeys, one per line. If the primary domain changed from www.example.com to example.com, enter www.example.com here.","Keep the names users call; change what is sent upstream.":"Keep the names users call; change what is sent upstream.","Keep the platform ready":"Keep the platform ready","Keep the session binding when the channel is unavailable":"Keep the session binding when the channel is unavailable","Keep this above 1 minute to avoid heavy database load":"Keep this above 1 minute to avoid heavy database load","Keep this vendor":"Keep this vendor","Keep upstream names; choose what users call.":"Keep upstream names; choose what users call.","Keep-alive Ping":"Keep-alive Ping","Keeps compatible responses more repeatable":"Keeps compatible responses more repeatable","Key":"Key","Key Fingerprint":"Key Fingerprint","Key Sources":"Key Sources","Key Summary":"Key Summary","Key Update Mode":"Key Update Mode","Keys, OAuth credentials, and multi-key update behavior.":"Keys, OAuth credentials, and multi-key update behavior.","Kind":"Kind","Linux DO trust level does not meet the minimum required by administrator":"Linux DO trust level does not meet the minimum required by administrator","Kling":"Kling","Knowledge Base ID":"Knowledge Base ID","Knowledge Base ID *":"Knowledge Base ID *","Knowledge cutoff":"Knowledge cutoff","Lake View":"Lake View","Landing page with system overview.":"Landing page with system overview.","Language preference saved":"Language preference saved","Language Preferences":"Language Preferences","Language preferences sync across your signed-in devices and affect API error messages.":"Language preferences sync across your signed-in devices and affect API error messages.","Last 24h usage":"Last 24h usage","Last 30 days uptime":"Last 30 days uptime","Last active {{time}} · Expires {{expires}}":"Last active {{time}} · Expires {{expires}}","Last check time":"Last check time","Last detected addable models":"Last detected addable models","Last Login":"Last Login","Last Seen":"Last Seen","Last successful check":"Last successful check","Last Tested":"Last Tested","Last updated":"Last updated","Last updated:":"Last updated:","Last Used":"Last Used","Last used {{time}}":"Last used {{time}}","Last used:":"Last used:","Latency":"Latency","Latency check":"Latency check","Latency short":"Lat.","Latency trend (last 24h)":"Latency trend (last 24h)","Later":"Later","Later requests follow the new channel.":"Later requests follow the new channel.","Latest platform updates and notices":"Latest platform updates and notices","Latest version":"Latest version","Lavender Dream":"Lavender Dream","Layout":"Layout","lead":"lead","Leaderboards":"Leaderboards","Learn more":"Learn more","Learn more:":"Learn more:","Leave":"Leave","Leave blank to keep the existing credential":"Leave blank to keep the existing credential","Leave blank to keep the existing key":"Leave blank to keep the existing key","Leave blank unless rotating the secret":"Leave blank unless rotating the secret","Leave empty for fallback":"Leave empty for fallback","Leave empty for never expires":"Leave empty for never expires","Leave empty only for the final fallback split.":"Leave empty only for the final fallback split.","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.","Log export is disabled":"Log export is disabled","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.","Leave empty to disband the tag":"Leave empty to disband the tag","Leave empty to keep existing key":"Leave empty to keep existing key","Leave empty to keep unchanged":"Leave empty to keep unchanged","Log recording":"Log recording","Log search and export":"Log search and export","Leave empty to match all models":"Leave empty to match all models","Leave empty to use account email":"Leave empty to use account email","Leave empty to use default":"Leave empty to use default","Leave empty to use system temp directory":"Leave empty to use system temp directory","Leave empty to use username":"Leave empty to use username","Leave the final split empty as the fallback for models not matched above.":"Leave the final split empty as the fallback for models not matched above.","Leave this empty only for the final fallback split; it catches client models not matched above.":"Leave this empty only for the final fallback split; it catches client models not matched above.","Left to Right":"Left to Right","Legacy Format (JSON Object)":"Legacy Format (JSON Object)","Legacy format must be a JSON object":"Legacy format must be a JSON object","Legacy Format Template":"Legacy Format Template","Legacy full-URL integration; use Advanced Custom for new channels":"Legacy full-URL integration; use Advanced Custom for new channels","Legacy pricing is deprecated. Convert the current prices to an expression draft, then save to apply it.":"Legacy pricing is deprecated. Convert the current prices to an expression draft, then save to apply it.","Legacy token":"Legacy token","Legal":"Legal","Less":"Less","Longest log time range (days)":"Longest log time range (days)","Less than":"Less than","Less Than":"Less Than","Less than 1 day left":"Less than 1 day left","Less than or equal":"Less than or equal","Less Than or Equal":"Less Than or Equal","License":"License","Light":"Light","Lightning Fast":"Lightning Fast","Limit period":"Limit period","Limit Reached":"Limit Reached","Limit which models can be used with this key":"Limit which models can be used with this key","Limited":"Limited","Limits only token-specific Auto snapshots. Global Auto inheritance remains unlimited.":"Limits only token-specific Auto snapshots. Global Auto inheritance remains unlimited.","Limits token selection to a probability mass":"Limits token selection to a probability mass","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"Link to your documentation site","Linked account":"Linked account","Linked models":"Linked models","Linked records are counted once. Matching rules show their covered models separately.":"Linked records are counted once. Matching rules show their covered models separately.","LinuxDO":"LinuxDO","LinuxDO Client ID":"LinuxDO Client ID","LinuxDO Client Secret":"LinuxDO Client Secret","List of models supported by this channel. Use comma to separate multiple models.":"List of models supported by this channel. Use comma to separate multiple models.","List of origins (one per line) allowed for Passkey registration and authentication.":"List of origins (one per line) allowed for Passkey registration and authentication.","List registered task plugins and bind them when creating or editing task plugin channels.":"List registered task plugins and bind them when creating or editing task plugin channels.","List view":"List view","Listing also depends on metadata visibility and the user’s group access.":"Listing also depends on metadata visibility and the user’s group access.","Listing hidden":"Listing hidden","Live refresh pauses when no task is running":"Live refresh pauses when no task is running","LLM Leaderboard":"LLM Leaderboard","LLM prompt helper":"LLM prompt helper","Load Balancing":"Load Balancing","Load metadata preview":"Load metadata preview","Load template...":"Load template...","Loader":"Loader","Loading":"Loading","Loading channel details":"Loading channel details","Loading configuration":"Loading configuration","Loading content settings...":"Loading content settings...","Loading conversation...":"Loading conversation...","Loading current models...":"Loading current models...","Loading failed":"Loading failed","Loading installed source...":"Loading installed source...","Loading maintenance settings...":"Loading maintenance settings...","Loading plugins...":"Loading plugins...","Loading settings...":"Loading settings...","Loading setup status…":"Loading setup status…","Loading verification methods...":"Loading verification methods...","Loading...":"Loading...","Local":"Local","Local Billing":"Local Billing","Local check":"Local check","Local Estimate (billing-usage-anthropic)":"Local Estimate (billing-usage-anthropic)","Local Estimate (billing-usage-gemini)":"Local Estimate (billing-usage-gemini)","Local Estimate (billing-usage-openai)":"Local Estimate (billing-usage-openai)","Local models":"Local models","Locations":"Locations","Locked":"Locked","log":"log","Log cleanup":"Log cleanup","Log cleanup progress":"Log cleanup progress","Log cleanup task started.":"Log cleanup task started.","Log Details":"Log Details","Log Directory":"Log Directory","Log File Count":"Log File Count","Log files older than {{value}} days will be deleted.":"Log files older than {{value}} days will be deleted.","Log IP address for usage and error logs":"Log IP address for usage and error logs","Log Maintenance":"Log Maintenance","Log Type":"Log Type","Low balance reminder":"Low balance reminder","Maximum 100 redemption codes can be generated at once":"Maximum 100 redemption codes can be generated at once","Logged in successfully via {{method}}":"Logged in successfully via {{method}}","Logic":"Logic","Login":"Login","Login & Authentication":"Login & Authentication","Login failed":"Login failed","Login flow expired. Please sign in again.":"Login flow expired. Please sign in again.","Login Info":"Login Info","Login Method":"Login Method","Login session":"Login session","Login sessions":"Login sessions","Maximum number of tokens reached ({{max}})":"Maximum number of tokens reached ({{max}})","Login, security and access records":"Login, security and access records","Logo":"Logo","Logo URL":"Logo URL","Logs":"Logs","Long passwords are unavailable until the password storage upgrade is complete.":"Long passwords are unavailable until the password storage upgrade is complete.","Look for a special ratio rule matching this user group and this billing group. If one exists, use its ratio. Otherwise use the billing group base ratio from the pricing table.":"Look for a special ratio rule matching this user group and this billing group. If one exists, use its ratio. Otherwise use the billing group base ratio from the pricing table.","Low balance":"Low balance","Lowest median first-token latency":"Lowest median first-token latency","m":"m","Maintenance":"Maintenance","Make extra groups visible to, or hide default groups from, users of a specific group.":"Make extra groups visible to, or hide default groups from, users of a specific group.","Make it easier for teammates to pick the right group.":"Make it easier for teammates to pick the right group.","Make sure you understand these effects before enabling.":"Make sure you understand these effects before enabling.","Manage":"Manage","Manage account bindings for this user":"Manage account bindings for this user","Manage Bindings":"Manage Bindings","Manage catalog visibility and pricing.":"Manage catalog visibility and pricing.","Manage custom OAuth providers for user authentication":"Manage custom OAuth providers for user authentication","Manage Keys":"Manage Keys","Manage local models for:":"Manage local models for:","Manage metadata, pricing, and channel connections. Each section saves separately.":"Manage metadata, pricing, and channel connections. Each section saves separately.","Manage multi-key status and configuration for this channel":"Manage multi-key status and configuration for this channel","Manage Ollama Models":"Manage Ollama Models","Manage pricing, visibility and automatic routing for your groups.":"Manage pricing, visibility and automatic routing for your groups.","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.","Manage sources":"Manage sources","Manage subscription plans and pricing.":"Manage subscription plans and pricing.","Manage Subscriptions":"Manage Subscriptions","Manage vendor details and linked model records.":"Manage vendor details and linked model records.","Manage Vendors":"Manage Vendors","Manage your LinuxDO OAuth app":"Manage your LinuxDO OAuth app","Manage your security settings and account access":"Manage your security settings and account access","Mantle (Messages API)":"Mantle (Messages API)","Manual Disabled":"Manual Disabled","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.","Map request model names to actual provider model names (JSON format)":"Map request model names to actual provider model names (JSON format)","Map response status codes (JSON format)":"Map response status codes (JSON format)","Map upstream status codes to different codes":"Map upstream status codes to different codes","Market Share":"Market Share","Marketing":"Marketing","Marketplace":"Marketplace","Marketplace installs never force past a conflict. Resolve it on the task plugins page, then install again.":"Marketplace installs never force past a conflict. Resolve it on the task plugins page, then install again.","Marketplace sources":"Marketplace sources","Marketplace sources updated":"Marketplace sources updated","Master instances run scheduled background tasks.":"Master instances run scheduled background tasks.","Match All (AND)":"Match All (AND)","Match Any (OR)":"Match Any (OR)","Match Mode":"Match Mode","Minimum transfer quota is {{min}}!":"Minimum transfer quota is {{min}}!","Match model name exactly":"Match model name exactly","Match models containing this name":"Match models containing this name","Match models ending with this name":"Match models ending with this name","Match models starting with this name":"Match models starting with this name","Match Text":"Match Text","Match Type":"Match Type","Match Value":"Match Value","Match Value (optional)":"Match Value (optional)","Missing group ID":"Missing group ID","Matched":"Matched","Missing model ID":"Missing model ID","Matched models":"Matched models","Missing parameter rule_name, or use all=true to clear everything":"Missing parameter rule_name, or use all=true to clear everything","Matched Tier":"Matched Tier","Missing vendor ID":"Missing vendor ID","Matches models not claimed by earlier splits.":"Matches models not claimed by earlier splits.","Matching Rules":"Matching Rules","Matching rules apply to metadata. Pricing is configured for each concrete model.":"Matching rules apply to metadata. Pricing is configured for each concrete model.","Max context tokens":"Max context tokens","Max Disk Cache Size (MB)":"Max Disk Cache Size (MB)","Max Entries":"Max Entries","Max output":"Max output","Max Requests (incl. failures)":"Max Requests (incl. failures)","Max Requests (including failures)":"Max Requests (including failures)","Max requests per period":"Max requests per period","Max Retries":"Max Retries","Max Success":"Max Success","Max successful requests":"Max successful requests","Max Successful Requests":"Max Successful Requests","Max Tokens":"Max Tokens","Maximum {{max}} groups selected":"Maximum {{max}} groups selected","Maximum 1000 characters. Supports Markdown and HTML.":"Maximum 1000 characters. Supports Markdown and HTML.","Maximum 200 characters":"Maximum 200 characters","Maximum 500 characters. Supports Markdown and HTML.":"Maximum 500 characters. Supports Markdown and HTML.","Maximum cached sessions":"Maximum cached sessions","Maximum check-in quota":"Maximum check-in quota","Maximum custom groups per token":"Maximum custom groups per token","Maximum input window":"Maximum input window","Maximum number of channels tested at the same time (1-32)":"Maximum number of channels tested at the same time (1-32)","Maximum number of tokens each user can create. Default 1000. Setting too large may affect performance.":"Maximum number of tokens each user can create. Default 1000. Setting too large may affect performance.","Maximum number of tokens in the response":"Maximum number of tokens in the response","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}":"Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}, ID {{id}}":"Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}, ID {{id}}","Maximum quota amount awarded for check-in":"Maximum quota amount awarded for check-in","Maximum retries":"Maximum retries","Maximum tokens including hidden reasoning tokens":"Maximum tokens including hidden reasoning tokens","Maximum tokens per response":"Maximum tokens per response","Maximum tokens per user":"Maximum tokens per user","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647","May be used for training by upstream provider":"May be used for training by upstream provider","Mean queue time":"Mean queue time","Mean request latency":"Mean request latency","Mean time per output token":"Mean time per output token","Mean time to first token":"Mean time to first token","Media access expired. Please try again.":"Media access expired. Please try again.","Media preview failed. Please try again.":"Media preview failed. Please try again.","Media pricing":"Media pricing","Median time-to-first-token (TTFT) sampled hourly per group":"Median time-to-first-token (TTFT) sampled hourly per group","Medical Q&A, mental health support":"Medical Q&A, mental health support","Memory":"Memory","Memory Hits":"Memory Hits","Memory Threshold (%)":"Memory Threshold (%)","Merchant ID":"Merchant ID","Merchant ID is required":"Merchant ID is required","Merge into Other":"Merge into Other","Model name already exists":"Model name already exists","Model name cannot be empty":"Model name cannot be empty","Merge vendors":"Merge vendors","Model name is too long: {{model}}":"Model name is too long: {{model}}","Message Priority":"Message Priority","Metadata":"Metadata","Metadata changes":"Metadata changes","Metadata language":"Metadata language","Metadata only":"Metadata only","Metadata sync completed":"Metadata sync completed","Model price {{model_price}}, group ratio {{group_ratio}}":"Model price {{model_price}}, group ratio {{group_ratio}}","Metadata sync disabled":"Metadata sync disabled","Metadata sync failed":"Metadata sync failed","Method":"Method","Migration notes":"Migration notes","min downtime":"min downtime","Min Top-up":"Min Top-up","Min Top-up:":"Min Top-up:","Model ratio {{model_ratio}}, completion ratio {{completion_ratio}}, audio ratio {{audio_ratio}}, audio completion ratio {{audio_completion_ratio}}, group ratio {{group_ratio}}":"Model ratio {{model_ratio}}, completion ratio {{completion_ratio}}, audio ratio {{audio_ratio}}, audio completion ratio {{audio_completion_ratio}}, group ratio {{group_ratio}}","MiniMax":"MiniMax","Model ratios reset":"Model ratios reset","Minimum {{amount}}":"Minimum {{amount}}","Minimum check-in quota":"Minimum check-in quota","Minimum LinuxDO trust level required":"Minimum LinuxDO trust level required","Minimum quota amount awarded for check-in":"Minimum quota amount awarded for check-in","Minimum recharge amount in USD":"Minimum recharge amount in USD","Minimum recharge amount to qualify for this discount.":"Minimum recharge amount to qualify for this discount.","Minimum top-up (optional)":"Minimum top-up (optional)","Minimum top-up (USD)":"Minimum top-up (USD)","Minimum top-up amount must be at least 1":"Minimum top-up amount must be at least 1","Minimum top-up quantity":"Minimum top-up quantity","Minimum topup amount: {{amount}}":"Minimum topup amount: {{amount}}","Minimum Trust Level":"Minimum Trust Level","Minimum:":"Minimum:","Model test":"Model test","Minor blips in the last 30 days":"Minor blips in the last 30 days","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"Mint a fresh pair below — or pick an existing one further down. Click Save when ready.","Minute":"Minute","minutes":"minutes","Missing code":"Missing code","Missing metadata":"Missing metadata","Missing Models":"Missing Models","Missing user data from Passkey login response":"Missing user data from Passkey login response","Mistral":"Mistral","MjProxy":"MjProxy","MjProxyPlus":"MjProxyPlus","Modalities":"Modalities","Modality":"Modality","Mode":"Mode","model":"model","Model":"Model","Model {{model}}":"Model {{model}}","Model Access":"Model Access","Model Analytics":"Model Analytics","Model Analytics Defaults":"Model Analytics Defaults","Model Analytics Filters":"Model Analytics Filters","Model assignments":"Model assignments","model billing support":"model billing support","Model Call Analytics":"Model Call Analytics","Model context usage":"Model context usage","Model deleted":"Model deleted","Model deleted successfully":"Model deleted successfully","Model Deployment":"Model Deployment","Model deployment service is disabled":"Model deployment service is disabled","Model Description":"Model Description","Model details":"Model details","Model disabled successfully":"Model disabled successfully","Model discovery uses the first key; other keys are not tested.":"Model discovery uses the first key; other keys are not tested.","Model discovery uses the saved channel connection settings.":"Model discovery uses the saved channel connection settings.","Model enabled successfully":"Model enabled successfully","Model fixed pricing":"Model fixed pricing","Model Group":"Model Group","Model hidden from model square":"Model hidden from model square","Model ID is required":"Model ID is required","Model Limits":"Model Limits","Model limits enabled":"Model limits enabled","Model List":"Model List","Model management":"Model management","Model Mapping":"Model Mapping","Model Mapping (JSON)":"Model Mapping (JSON)","Model Mapping must be a JSON object like":"Model Mapping must be a JSON object like","Model mapping must be a JSON object with string values":"Model mapping must be a JSON object with string values","Model mapping must be a valid JSON object":"Model mapping must be a valid JSON object","Model mapping must be valid JSON":"Model mapping must be valid JSON","Model mapping must be valid JSON format":"Model mapping must be valid JSON format","Model mapping values must be strings":"Model mapping values must be strings","Model mappings are being edited in the floating panel.":"Model mappings are being edited in the floating panel.","Model metadata":"Model metadata","Model metadata saved":"Model metadata saved","Model name":"Model name","Model Name":"Model Name","Model Name *":"Model Name *","Model name is required":"Model name is required","Model names copied to clipboard":"Model names copied to clipboard","Model not found":"Model not found","Model performance metrics":"Model performance metrics","Model Price":"Model Price","Model price is not configured. Please complete model pricing in settings.":"Model price is not configured. Please complete model pricing in settings.","Model Price Not Configured":"Model Price Not Configured","Model prices":"Model prices","Model prices reset successfully":"Model prices reset successfully","Model Pricing":"Model Pricing","Model pricing is managed by a super administrator.":"Model pricing is managed by a super administrator.","Model pricing saved":"Model pricing saved","Model pull failed: {{msg}}":"Model pull failed: {{msg}}","Move channels into a priority tier or between tiers. Priority values update automatically.":"Move channels into a priority tier or between tiers. Priority values update automatically.","Multi-key channels do not support balance queries":"Multi-key channels do not support balance queries","Model ratio":"Model ratio","Model ratios":"Model ratios","Model ratios reset successfully":"Model ratios reset successfully","Model redirect is unavailable":"Model redirect is unavailable","Model redirects":"Model redirects","Model Regex":"Model Regex","Model Regex (one per line)":"Model Regex (one per line)","Model regex cannot be empty":"Model regex cannot be empty","Model scope":"Model scope","Model selected":"Model selected","Model shown in model square":"Model shown in model square","Model source":"Model source","Model Square":"Model Square","Model square visibility":"Model square visibility","Model Tags":"Model Tags","Model to use for testing":"Model to use for testing","Model to use when testing channel connectivity":"Model to use when testing channel connectivity","Model Version":"Model Version","Model Version *":"Model Version *","Model-scoped only":"Model-scoped only","model(s) selected out of":"model(s) selected out of","model(s)? This action cannot be undone.":"model(s)? This action cannot be undone.","models":"models","Models":"Models","Models *":"Models *","Models & Groups":"Models & Groups","Models & Routing":"Models & Routing","Models appended successfully":"Models appended successfully","Models are required":"Models are required","Models climbing the leaderboard":"Models climbing the leaderboard","Models climbing the leaderboard fastest":"Models climbing the leaderboard fastest","Models directory":"Models directory","Models Directory":"Models Directory","Models exposed by this channel":"Models exposed by this channel","Models fetched successfully":"Models fetched successfully","Models filled to form":"Models filled to form","Models listed here skip automatic -thinking / -nothinking suffix handling. Matched names are also exempt from @-modifier parsing and 400 validation. Prefix an entry with re: to match the full model name as a Go regular expression, for example re:.*@sha256:.*":"Models listed here skip automatic -thinking / -nothinking suffix handling. Matched names are also exempt from @-modifier parsing and 400 validation. Prefix an entry with re: to match the full model name as a Go regular expression, for example re:.*@sha256:.*","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"Models listed here will not automatically append or remove -thinking / -nothinking suffixes.","Models losing positions":"Models losing positions","Models losing the most positions":"Models losing the most positions","Models not in list, may fail to invoke":"Models not in list, may fail to invoke","Models source":"Models source","Models that are being used but not configured in the system":"Models that are being used but not configured in the system","Models that skip thinking suffix processing":"Models that skip thinking suffix processing","Models updated successfully":"Models updated successfully","Models used on this site":"Models used on this site","models.dev pricing preset":"models.dev pricing preset","Modify existing subscription plan configuration":"Modify existing subscription plan configuration","Module availability":"Module availability","MokaAI":"MokaAI","Monitor":"Monitor","Monitor balance, usage, and request volume":"Monitor balance, usage, and request volume","Monitored relay requests":"Monitored relay requests","Month":"Month","Month number":"Month number","Monthly":"Monthly","Monthly tokens":"Monthly tokens","months":"months","Moonshot":"Moonshot","More":"More","More actions":"More actions","More Apps":"More Apps","more mapping":"more mapping","More models ({{count}})":"More models ({{count}})","More rules":"More rules","More templates...":"More templates...","More than 999 days left":"More than 999 days left","More...":"More...","Most-used models in the selected period and category":"Most-used models in the selected period and category","Move":"Move","Move {{group}} down":"Move {{group}} down","Move {{group}} up":"Move {{group}} up","Move a request header":"Move a request header","Move affiliate rewards to your main balance":"Move affiliate rewards to your main balance","Move fallback to end":"Move fallback to end","Move Field":"Move Field","Move Header":"Move Header","Move Request Header":"Move Request Header","Move route down":"Move route down","Move route up":"Move route up","Move source field to target field":"Move source field to target field","ms":"ms","Multi-key channel: Keys will be":"Multi-key channel: Keys will be","Multi-Key Management":"Multi-Key Management","New priority: {{priority}}":"New priority: {{priority}}","New priority: {{priority}} · {{count}} channels affected":"New priority: {{priority}} · {{count}} channels affected","New user registration has been disabled by administrator":"New user registration has been disabled by administrator","New user sign-up bonus {{quota}}":"New user sign-up bonus {{quota}}","Multi-key management {{action}} on channel (ID: {{id}})":"Multi-key management {{action}} on channel (ID: {{id}})","Multi-Key Mode (multiple keys, one channel)":"Multi-Key Mode (multiple keys, one channel)","Multi-Key Strategy":"Multi-Key Strategy","Multi-key: Polling rotation":"Multi-key: Polling rotation","Multi-key: Random rotation":"Multi-key: Random rotation","Multi-protocol Compatible":"Multi-protocol Compatible","Multi-region deployment for stable global access":"Multi-region deployment for stable global access","Multi-step thinking before final answer":"Multi-step thinking before final answer","Multi-user management with flexible permission allocation":"Multi-user management with flexible permission allocation","Multilingual translation and localisation":"Multilingual translation and localisation","Multimodal":"Multimodal","Multiplier":"Multiplier","Multiplier applied when":"Multiplier applied when","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"Multiplier applied when {{userGroup}} uses {{targetGroup}}","Multiplier for audio inputs.":"Multiplier for audio inputs.","Multiplier for audio outputs.":"Multiplier for audio outputs.","Multiplier for completion tokens.":"Multiplier for completion tokens.","Multiplier for image processing.":"Multiplier for image processing.","Multiplier for prompt tokens.":"Multiplier for prompt tokens.","Multipliers for recharge pricing based on user groups.":"Multipliers for recharge pricing based on user groups.","Must be a valid URL":"Must be a valid URL","Must be at least 8 characters":"Must be at least 8 characters","Must be greater than 0":"Must be greater than 0","Must be greater than or equal to 0":"Must be greater than or equal to 0","My Subscriptions":"My Subscriptions","my-status":"my-status","MySQL detected":"MySQL detected","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL is a production-ready relational database. Keep your credentials secure.","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.","No auto-disabled keys to delete":"No auto-disabled keys to delete","N/A":"N/A","Name":"Name","Name *":"Name *","Name for this redemption code (1-20 characters)":"Name for this redemption code (1-20 characters)","Name is available":"Name is available","Name is not available":"Name is not available","Name Matching Rule":"Name Matching Rule","Name must be 64 characters or fewer":"Name must be 64 characters or fewer","Name must be between {{min}} and {{max}} characters":"Name must be between {{min}} and {{max}} characters","Name Rule":"Name Rule","Name Suffix":"Name Suffix","Name the channel and choose the upstream provider.":"Name the channel and choose the upstream provider.","Name the channel, choose the provider, configure API access, and set credentials.":"Name the channel, choose the provider, configure API access, and set credentials.","Name, provider type, and availability.":"Name, provider type, and availability.","name@example.com":"name@example.com","Native Claude Messages plus OpenAI Chat compatibility forwarding.":"Native Claude Messages plus OpenAI Chat compatibility forwarding.","Native format":"Native format","Native forwarding":"Native forwarding","Native Gemini routes plus OpenAI Chat and Responses compatibility forwarding.":"Native Gemini routes plus OpenAI Chat and Responses compatibility forwarding.","Native OpenAI routes plus optional Claude and Gemini compatibility routes.":"Native OpenAI routes plus optional Claude and Gemini compatibility routes.","Native routes":"Native routes","Need a redemption code?":"Need a redemption code?","Needs API key":"Needs API key","Negate condition":"Negate condition","Negated group":"Negated group","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.","Nested JSON: source group →":"Nested JSON: source group →","Network connection failed or server not responding":"Network connection failed or server not responding","Network proxy for this channel (supports HTTP, HTTPS, SOCKS5, and SOCKS5H)":"Network proxy for this channel (supports HTTP, HTTPS, SOCKS5, and SOCKS5H)","Never":"Never","Never expires":"Never expires","Never used":"Never used","Never used an API Gateway?":"Never used an API Gateway?","NEW":"NEW","New API":"New API","New API <noreply@example.com>":"New API <noreply@example.com>","New API Project Repository:":"New API Project Repository:","New API\'s flexible channel lets you configure upstream addresses and authentication per endpoint, choose native forwarding or supported protocol conversions, and configure model listing and balance queries independently":"New API\'s flexible channel lets you configure upstream addresses and authentication per endpoint, choose native forwarding or supported protocol conversions, and configure model listing and balance queries independently","New domain: {{domain}}":"New domain: {{domain}}","New email verification code":"New email verification code","New Format Template":"New Format Template","New Group":"New Group","New metadata":"New metadata","New model":"New model","New Models ({{count}})":"New Models ({{count}})","New models: all metadata shown below will be imported automatically. No selection is needed.":"New models: all metadata shown below will be imported automatically. No selection is needed.","New name will be:":"New name will be:","New Passkeys use the primary domain. Compatible domains keep existing Passkeys working.":"New Passkeys use the primary domain. Compatible domains keep existing Passkeys working.","New Passkeys use this domain. Enter a domain without https://, a port or a path. An empty field uses the system website address.":"New Passkeys use this domain. Enter a domain without https://, a port or a path. An empty field uses the system website address.","New Passkeys will use the new primary domain. The previous domain will be kept so existing Passkeys can still verify.":"New Passkeys will use the new primary domain. The previous domain will be kept so existing Passkeys can still verify.","New password":"New password","New Password":"New Password","New password must be different from current password":"New password must be different from current password","New records include the fields below. Existing fields are kept unless explicitly selected.":"New records include the fields below. Existing fields are kept unless explicitly selected.","New User Quota":"New User Quota","New value":"New value","New vendors":"New vendors","New version available: {{version}}":"New version available: {{version}}","NewAPI":"NewAPI","Newly released":"Newly released","Next":"Next","Next branch":"Next branch","Next page":"Next page","Next reset":"Next reset","No":"No","No About Content Set":"No About Content Set","No access tokens":"No access tokens","No key index specified to delete":"No key index specified to delete","No key index specified to disable":"No key index specified to disable","No key index specified to enable":"No key index specified to enable","No Active":"No Active","No keys to disable":"No keys to disable","No active login sessions":"No active login sessions","No active system tasks.":"No active system tasks.","No additional type-specific settings for this channel type.":"No additional type-specific settings for this channel type.","No amount options configured. Add amounts below to get started.":"No amount options configured. Add amounts below to get started.","No announcements at this time":"No announcements at this time","No announcements yet. Click \\"Add Announcement\\" to create one.":"No announcements yet. Click \\"Add Announcement\\" to create one.","No API Domains yet. Click \\"Add API\\" to create one.":"No API Domains yet. Click \\"Add API\\" to create one.","No API key yet":"No API key yet","No API keys available. Create your first API key to get started.":"No API keys available. Create your first API key to get started.","No API Keys Found":"No API Keys Found","No API routes configured":"No API routes configured","No API tokens":"No API tokens","No app usage data available for this model.":"No app usage data available for this model.","No apps match the selected filters":"No apps match the selected filters","No Auth":"No Auth","No auto groups configured":"No auto groups configured","No available channels":"No available channels","No available groups in the global Auto order.":"No available groups in the global Auto order.","No available models":"No available models","No available Web chat links":"No available Web chat links","No backup":"No backup","No base input price":"No base input price","No billing parameters declared":"No billing parameters declared","No billing records found":"No billing records found","No capabilities reported for this model.":"No capabilities reported for this model.","No Change":"No Change","No changelog for this version.":"No changelog for this version.","No changes":"No changes","No changes made":"No changes made","No changes to save":"No changes to save","No channel is configured. This model will not appear in the model square.":"No channel is configured. This model will not appear in the model square.","No channel is currently available. This model will not appear in the model square.":"No channel is currently available. This model will not appear in the model square.","No channel selected":"No channel selected","No channel type found.":"No channel type found.","No channels available. Create your first channel to get started.":"No channels available. Create your first channel to get started.","No channels found":"No channels found","No Channels Found":"No Channels Found","No channels selected":"No channels selected","No chat presets configured. Click \\"Add chat preset\\" to get started.":"No chat presets configured. Click \\"Add chat preset\\" to get started.","No chat presets match your search":"No chat presets match your search","No configured channel models match this metadata rule.":"No configured channel models match this metadata rule.","No conflict entries available.":"No conflict entries available.","No conflicts match your search.":"No conflicts match your search.","No connection info found in clipboard":"No connection info found in clipboard","No console output":"No console output","No containers":"No containers","No content to copy":"No content to copy","No custom groups. Saving will inherit the complete global Auto order.":"No custom groups. Saving will inherit the complete global Auto order.","No custom OAuth providers configured yet.":"No custom OAuth providers configured yet.","No data":"No data","No Data":"No Data","No data available":"No data available","No deployments available. Create one to get started.":"No deployments available. Create one to get started.","No Deployments Found":"No Deployments Found","No description available.":"No description available.","No notifications are available to you right now":"No notifications are available to you right now","No permission to access users of same or higher level":"No permission to access users of same or higher level","No permission to change the 2FA settings of users at the same or higher level":"No permission to change the 2FA settings of users at the same or higher level","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"No discount tiers configured. Click \\"Add discount tier\\" to get started.","No permission to update users of same or higher permission level":"No permission to update users of same or higher permission level","No duplicate keys found":"No duplicate keys found","No enabled channel key":"No enabled channel key","No enabled groups":"No enabled groups","No enabled tokens available":"No enabled tokens available","No encryption":"No encryption","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"No endpoints configured. Switch to JSON mode or add rows to define endpoints.","No endpoints inferred from channels":"No endpoints inferred from channels","No extra domains declared":"No extra domains declared","No FAQ entries available":"No FAQ entries available","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"No FAQ entries yet. Click \\"Add FAQ\\" to create one.","No files match the accepted types.":"No files match the accepted types.","No flow data available":"No flow data available","No group":"No group","No group found.":"No group found.","No group-based rate limits configured. Click \\"Add group\\" to get started.":"No group-based rate limits configured. Click \\"Add group\\" to get started.","No groups match your search":"No groups match your search","No groups yet. Add a group to get started.":"No groups yet. Add a group to get started.","No header overrides configured.":"No header overrides configured.","No historical system tasks.":"No historical system tasks.","No history data available":"No history data available","No incidents in the last 24 hours":"No incidents in the last 24 hours","No incidents in the last 30 days":"No incidents in the last 30 days","No instances have reported yet.":"No instances have reported yet.","No integrity hash":"No integrity hash","No integrity verification":"No integrity verification","No Inviter":"No Inviter","No IP restriction":"No IP restriction","No keys found":"No keys found","No latency data available":"No latency data available","No linked models":"No linked models","No linked OAuth provider is available.":"No linked OAuth provider is available.","No log entries matched the selected time.":"No log entries matched the selected time.","No logs":"No logs","No Logs Found":"No Logs Found","No mappings configured. Click \\"Add Row\\" to get started.":"No mappings configured. Click \\"Add Row\\" to get started.","No marketplace sources configured.":"No marketplace sources configured.","No matches found":"No matches found","No matching channels":"No matching channels","No matching icons":"No matching icons","No matching items":"No matching items","No matching provider":"No matching provider","No matching results":"No matching results","No matching rules":"No matching rules","No matching token and channel usage was found.":"No matching token and channel usage was found.","No messages yet":"No messages yet","No missing models found.":"No missing models found.","No model found.":"No model found.","No model mappings configured. Click \\"Add Mapping\\" to get started.":"No model mappings configured. Click \\"Add Mapping\\" to get started.","No model price changes to save":"No model price changes to save","No models available":"No models available","No models available in this category":"No models available in this category","No models available. Create your first model to get started.":"No models available. Create your first model to get started.","No models can be synced with the current filters. Adjust the search or sync scope.":"No models can be synced with the current filters. Adjust the search or sync scope.","No models configured. Use Add model to get started.":"No models configured. Use Add model to get started.","No models fetched from upstream":"No models fetched from upstream","No models fetched yet.":"No models fetched yet.","No models found":"No models found","No Models Found":"No Models Found","No models found.":"No models found.","No models match the selected filters":"No models match the selected filters","No models match these filters":"No models match these filters","No valid upstream channel":"No valid upstream channel","No models match your current filters.":"No models match your current filters.","No models match your search":"No models match your search","No models matched your search.":"No models matched your search.","No models returned by the upstream":"No models returned by the upstream","No models selected":"No models selected","No models to add":"No models to add","No models to copy":"No models to copy","No models to remove":"No models to remove","No models with unset prices":"No models with unset prices","No new models to add":"No new models to add","No new models yet":"No new models yet","No newer version available.":"No newer version available.","No nodes":"No nodes","No notable climbers right now":"No notable climbers right now","No notable drops right now":"No notable drops right now","No parameter overrides configured.":"No parameter overrides configured.","No Passkey is registered.":"No Passkey is registered.","No payment methods available. Please contact administrator.":"No payment methods available. Please contact administrator.","No payment methods configured":"No payment methods configured","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"No payment methods configured. Click \\"Add method\\" or use templates to get started.","No payment methods match your search":"No payment methods match your search","No performance data available":"No performance data available","No permission to perform this action":"No permission to perform this action","No plans available":"No plans available","No plugins available for binding":"No plugins available for binding","No preceding rule matched":"No preceding rule matched","No preference":"No preference","No prefill groups yet":"No prefill groups yet","Not implemented yet":"Not implemented yet","No price differences found":"No price differences found","No processable upstream model updates for this channel":"No processable upstream model updates for this channel","No products configured. Click \\"Add product\\" to get started.":"No products configured. Click \\"Add product\\" to get started.","No products match your search":"No products match your search","Not logged in":"Not logged in","No providers available":"No providers available","No Quota":"No Quota","No quota limit":"No quota limit","No ratio differences found":"No ratio differences found","No recent usage":"No recent usage","No records":"No records","No records found. Try adjusting your filters.":"No records found. Try adjusting your filters.","No redemption codes available. Create your first redemption code to get started.":"No redemption codes available. Create your first redemption code to get started.","No Redemption Codes Found":"No Redemption Codes Found","No related models available for this channel type":"No related models available for this channel type","No release notes provided.":"No release notes provided.","No releases found.":"No releases found.","No Reset":"No Reset","No reset credits":"No reset credits","No reset credits available":"No reset credits available","No restriction":"No restriction","No results for \\"{{query}}\\". Try adjusting your search or filters.":"No results for \\"{{query}}\\". Try adjusting your search or filters.","No results found":"No results found","No results found.":"No results found.","No Retry":"No Retry","No rule for vip billed as default → use the base ratio of default, 1.0 (the 0.8 of vip is not used)":"No rule for vip billed as default → use the base ratio of default, 1.0 (the 0.8 of vip is not used)","No rule for vip billed as vip → use the base ratio of vip, 0.8":"No rule for vip billed as vip → use the base ratio of vip, 0.8","No rules yet":"No rules yet","No rules yet. Add a group below to get started.":"No rules yet. Add a group below to get started.","No separate media pricing configured.":"No separate media pricing configured.","No source available":"No source available","No source changes":"No source changes","No special ratios configured":"No special ratios configured","No status code mappings configured.":"No status code mappings configured.","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"No stores on this merchant yet. Set a return URL and click Create to mint your first pair.","No subscription plans yet":"No subscription plans yet","No subscription records":"No subscription records","No Sync":"No Sync","No syncable models":"No syncable models","No system announcements":"No system announcements","No system tasks yet.":"No system tasks yet.","No task plugins found":"No task plugins found","No token found.":"No token found.","No tools configured":"No tools configured","No Upgrade":"No Upgrade","No upstream price differences found":"No upstream price differences found","No upstream ratio differences found":"No upstream ratio differences found","Notifications to receive":"Notifications to receive","OAuth provider not found":"OAuth provider not found","No uptime data available":"No uptime data available","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.","No uptime monitoring configured":"No uptime monitoring configured","No usage logs available. Logs will appear here once API calls are made.":"No usage logs available. Logs will appear here once API calls are made.","No user information available":"No user information available","No user selected":"No user selected","No users":"No users","No users available. Try adjusting your search or filters.":"No users available. Try adjusting your search or filters.","No Users Found":"No Users Found","No valid custom Auto groups remain. Add a group or restore global Auto.":"No valid custom Auto groups remain. Add a group or restore global Auto.","No vendor":"No vendor","No vendor data available":"No vendor data available","No vendors found":"No vendors found","No verification method is available for this action.":"No verification method is available for this action.","No version history":"No version history","No X Found":"No X Found","Node":"Node","Node filters":"Node filters","Node Name":"Node Name","Node role":"Node role","Nodes reporting from this deployment and their latest heartbeat.":"Nodes reporting from this deployment and their latest heartbeat.","Non-stream":"Non-stream","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.","None":"None","None (plugin declaration)":"None (plugin declaration)","noreply@example.com":"noreply@example.com","Normalized:":"Normalized:","Not available":"Not available","Not backed up":"Not backed up","Not bound":"Not bound","OIDC ID is empty!":"OIDC ID is empty!","Not configured":"Not configured","Not configured for some providers":"Not configured for some providers","Not configured for this provider":"Not configured for this provider","Not declared":"Not declared","Not declared by this plugin":"Not declared by this plugin","Not declared; an API key may still be required.":"Not declared; an API key may still be required.","Not Equals":"Not Equals","Not found upstream":"Not found upstream","Not in pricing table":"Not in pricing table","Not included":"Not included","Not installed":"Not installed","Not listed":"Not listed","Not matched":"Not matched","Online top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"Online top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}","Not provided by this source":"Not provided by this source","Not recorded":"Not recorded","Not registered":"Not registered","Not set":"Not set","Not Set":"Not Set","Not set yet":"Not set yet","Not shown":"Not shown","Not Started":"Not Started","Not Submitted":"Not Submitted","Not tested":"Not tested","Not used for upstream training by default":"Not used for upstream training by default","Not used yet":"Not used yet","Note":"Note","Notice":"Notice","Notification Email":"Notification Email","Notification Method":"Notification Method","Notifications":"Notifications","Now a user whose user group is vip creates tokens with different groups and makes one call with each:":"Now a user whose user group is vip creates tokens with different groups and makes one call with each:","Nucleus sampling probability mass":"Nucleus sampling probability mass","Number":"Number","Number of codes to create":"Number of codes to create","Number of completions to generate":"Number of completions to generate","Number of images to generate":"Number of images to generate","Number of keys to create":"Number of keys to create","Number of times to retry failed requests (0-10)":"Number of times to retry failed requests (0-10)","Number of tokens per unit quota":"Number of tokens per unit quota","Number of top log probabilities returned per token":"Number of top log probabilities returned per token","Number of users invited":"Number of users invited","OAuth":"OAuth","OAuth 2.0 service account":"OAuth 2.0 service account","OAuth authorization timed out. Please try again.":"OAuth authorization timed out. Please try again.","OAuth authorization was cancelled.":"OAuth authorization was cancelled.","OAuth binding timed out. Please try again.":"OAuth binding timed out. Please try again.","OAuth binding window is no longer available":"OAuth binding window is no longer available","OAuth callback URL":"OAuth callback URL","OAuth Client ID":"OAuth Client ID","OAuth Client Secret":"OAuth Client Secret","OAuth failed":"OAuth failed","OAuth Integrations":"OAuth Integrations","OAuth pop-up was blocked":"OAuth pop-up was blocked","OAuth popup storage is unavailable.":"OAuth popup storage is unavailable.","OAuth window is no longer available.":"OAuth window is no longer available.","Object Prune Rules":"Object Prune Rules","Observability":"Observability","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: /api/waffo-pancake/webhook":"Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: /api/waffo-pancake/webhook","Ocean Breeze":"Ocean Breeze","of":"of","of 3:":"of 3:","off":"off","Official":"Official","Official Claude Messages":"Official Claude Messages","Official documentation":"Official documentation","Official Gemini from OpenAI Chat":"Official Gemini from OpenAI Chat","Official Gemini Native":"Official Gemini Native","Official OpenAI Chat":"Official OpenAI Chat","Official OpenAI Embeddings":"Official OpenAI Embeddings","Official OpenAI Images":"Official OpenAI Images","Official OpenAI Responses":"Official OpenAI Responses","Official pricing preset":"Official pricing preset","Official Repository":"Official Repository","Official Sync":"Official Sync","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"OIDC Client ID","OIDC Client Secret":"OIDC Client Secret","OIDC configuration fetched successfully":"OIDC configuration fetched successfully","OIDC discovery can fill the endpoint fields automatically when the provider supports it.":"OIDC discovery can fill the endpoint fields automatically when the provider supports it.","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.","OIDC Display Name":"OIDC Display Name","OIDC endpoints discovered successfully":"OIDC endpoints discovered successfully","Old Format Template":"Old Format Template","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.","Ollama":"Ollama","Ollama Models":"Ollama Models","One API":"One API","One domain per line":"One domain per line","One domain per line (only used when domain restriction is enabled)":"One domain per line (only used when domain restriction is enabled)","One IP or CIDR range per line":"One IP or CIDR range per line","One IP per line (empty for no restriction)":"One IP per line (empty for no restriction)","one keyword per line":"one keyword per line","online":"online","Online":"Online","Online payment is not enabled. Please contact the administrator.":"Online payment is not enabled. Please contact the administrator.","Online topup is not enabled. Please use redemption code or contact administrator.":"Online topup is not enabled. Please use redemption code or contact administrator.","Only allow specific email domains":"Only allow specific email domains","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.","Only available for exact matching":"Only available for exact matching","Only configured combinations are overridden. All other calls keep the billing group base ratio.":"Only configured combinations are overridden. All other calls keep the billing group base ratio.","Only configured combinations are overridden. All other calls keep the token group base ratio.":"Only configured combinations are overridden. All other calls keep the token group base ratio.","Only enabled parameters are sent with the request.":"Only enabled parameters are sent with the request.","Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.":"Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.","Only exact model names are removed from enabled and disabled channels. Matching rules are not expanded, and channel records are retained.":"Only exact model names are removed from enabled and disabled channels. Matching rules are not expanded, and channel records are retained.","Only Mine":"Only Mine","Only one catch-all route is allowed for the same incoming path":"Only one catch-all route is allowed for the same incoming path","Order is not pending payment and cannot be completed":"Order is not pending payment and cannot be completed","Order number not provided":"Order number not provided","Only one OpenAI Models route is allowed":"Only one OpenAI Models route is allowed","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.":"Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.","Only show syncable models":"Only show syncable models","Only successful requests":"Only successful requests","Only successful requests count toward this limit.":"Only successful requests count toward this limit.","Only the changes listed here will be committed. If any write fails, none of these changes are applied.":"Only the changes listed here will be committed. If any write fails, none of these changes are applied.","Only the first {{shown}} IDs were recorded":"Only the first {{shown}} IDs were recorded","Only the first {{shown}} IDs were recorded ({{total}} requested)":"Only the first {{shown}} IDs were recorded ({{total}} requested)","Only the last {{value}} log files will be retained; the rest will be deleted.":"Only the last {{value}} log files will be retained; the rest will be deleted.","Only used to find historical logs. New records are available in Audit Logs.":"Only used to find historical logs. New records are available in Audit Logs.","Oops! Page Not Found!":"Oops! Page Not Found!","Oops! Something went wrong":"Oops! Something went wrong","Open":"Open","Open a source model first":"Open a source model first","Open CC Switch":"Open CC Switch","Open filtered model list":"Open filtered model list","Open in chat":"Open in chat","Open in new tab":"Open in new tab","Open in New Tab":"Open in New Tab","Open menu":"Open menu","Open Query Balance to view the upstream JSON response":"Open Query Balance to view the upstream JSON response","Open release":"Open release","Open source":"Open source","Open Source":"Open Source","Open the io.net console API Keys page":"Open the io.net console API Keys page","Open theme settings":"Open theme settings","Open weights":"Open weights","OpenAI":"OpenAI","OpenAI Chat Completions":"OpenAI Chat Completions","OpenAI Chat to Anthropic Messages":"OpenAI Chat to Anthropic Messages","OpenAI Chat to Gemini Generate Content":"OpenAI Chat to Gemini Generate Content","OpenAI Chat to OpenAI Responses":"OpenAI Chat to OpenAI Responses","OpenAI Compatible":"OpenAI Compatible","OpenAI Compatible Upstream":"OpenAI Compatible Upstream","OpenAI Models route does not support client model rules":"OpenAI Models route does not support client model rules","OpenAI Models route does not support pass-through":"OpenAI Models route does not support pass-through","OpenAI Models route is required to enable upstream model checks":"OpenAI Models route is required to enable upstream model checks","OpenAI Models route must use native forwarding":"OpenAI Models route must use native forwarding","OpenAI Models upstream path must not contain {model}":"OpenAI Models upstream path must not contain {model}","OpenAI only":"OpenAI only","OpenAI Organization":"OpenAI Organization","OpenAI Organization ID (optional)":"OpenAI Organization ID (optional)","OpenAI Responses to Gemini Generate Content":"OpenAI Responses to Gemini Generate Content","OpenAI Responses to OpenAI Chat":"OpenAI Responses to OpenAI Chat","OpenAI, Anthropic, etc.":"OpenAI, Anthropic, etc.","OpenAI, Anthropic, Google, etc.":"OpenAI, Anthropic, Google, etc.","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.","Operate channels":"Operate channels","Operation":"Operation","operation and charging behavior":"operation and charging behavior","Operation audit":"Operation audit","Operation Audit Info":"Operation Audit Info","Operation cancelled":"Operation cancelled","Operation failed":"Operation failed","Operation successful":"Operation successful","Operation Type":"Operation Type","Operations":"Operations","Operator":"Operator","Operator Admin":"Operator Admin","Optimize system for self-hosted single-user usage":"Optimize system for self-hosted single-user usage","Optimized network architecture ensures millisecond response times":"Optimized network architecture ensures millisecond response times","Optional callback override. Leave blank to use server address":"Optional callback override. Leave blank to use server address","Optional icon identifier for the login button":"Optional icon identifier for the login button","Optional icon.svg or icon.png shipped next to plugin.js, up to 512 KiB. Stored separately from the source.":"Optional icon.svg or icon.png shipped next to plugin.js, up to 512 KiB. Stored separately from the source.","Optional JSON policy to restrict access based on user info fields":"Optional JSON policy to restrict access based on user info fields","Optional minimum recharge amount for this method.":"Optional minimum recharge amount for this method.","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as","Optional note describing this version":"Optional note describing this version","Optional notes about this channel":"Optional notes about this channel","Optional notes about when to use this group":"Optional notes about when to use this group","Optional ratio used when upstream cache hits occur.":"Optional ratio used when upstream cache hits occur.","Optional request-rule multiplier expression. Leave empty when no request rule applies.":"Optional request-rule multiplier expression. Leave empty when no request rule applies.","Optional rule description":"Optional rule description","Optional settings for advanced container configuration.":"Optional settings for advanced container configuration.","Optional supplementary information (max 100 characters)":"Optional supplementary information (max 100 characters)","Optional tag for grouping channels":"Optional tag for grouping channels","Optional. Without it, Google picks the region; with it, requests go to the deployment region below.":"Optional. Without it, Google picks the region; with it, requests go to the deployment region below.","Opus Model":"Opus Model","Or continue with":"Or continue with","Or enter this key manually:":"Or enter this key manually:","or pick existing":"or pick existing","Order completed successfully":"Order completed successfully","Order History":"Order History","Order Payment Method":"Order Payment Method","org-...":"org-...","Original Model":"Original Model","Original value":"Original value","Other":"Other","Other cases":"Other cases","Other channels":"Other channels","Other groups":"Other groups","Other models":"Other models","Other nodes":"Other nodes","Other sessions signed out":"Other sessions signed out","Other Settings":"Other Settings","Other tokens":"Other tokens","Other users":"Other users","Otherwise (the preceding conditions do not match)":"Otherwise (the preceding conditions do not match)","Otherwise → {{name}}":"Otherwise → {{name}}","Otherwise the binding is removed.":"Otherwise the binding is removed.","Outage":"Outage","Output":"Output","Output aspect ratio":"Output aspect ratio","Output image size":"Output image size","Output price":"Output price","Output Price: High to Low":"Output Price: High to Low","Output Price: Low to High":"Output Price: Low to High","Output token price for generated tokens.":"Output token price for generated tokens.","Output token rate":"Output token rate","Output tokens":"Output tokens","Output Tokens":"Output Tokens","Outside these times: {{condition}}":"Outside these times: {{condition}}","Overage limited":"Overage limited","overall":"overall","Overflow":"Overflow","Overflow items":"Overflow items","override":"override","Override":"Override","Override auto-discovered endpoint":"Override auto-discovered endpoint","Override matrix":"Override matrix","Override quota for user “{{name}}”":"Override quota for user “{{name}}”","Override request headers":"Override request headers","Override request headers (JSON format)":"Override request headers (JSON format)","Override request parameters":"Override request parameters","Override request parameters (JSON format)":"Override request parameters (JSON format)","Override request parameters. Cannot override":"Override request parameters. Cannot override","Override request parameters. Cannot override stream parameter.":"Override request parameters. Cannot override stream parameter.","Override rule: when a vip user is billed as premium, the ratio is 0.3 instead of 0.5":"Override rule: when a vip user is billed as premium, the ratio is 0.3 instead of 0.5","Override Rules":"Override Rules","Password login has been disabled by administrator":"Password login has been disabled by administrator","Override the endpoint used for testing. Leave empty to auto detect.":"Override the endpoint used for testing. Leave empty to auto detect.","Override user quota":"Override user quota","overrides for matching model prefix.":"overrides for matching model prefix.","Overrode user quota from {{from}} to {{to}}":"Overrode user quota from {{from}} to {{to}}","Overview":"Overview","Password registration has been disabled by administrator, please use third-party account verification":"Password registration has been disabled by administrator, please use third-party account verification","Overwritten":"Overwritten","Password reset link is invalid or has expired":"Password reset link is invalid or has expired","Page":"Page","Page {{current}} of {{total}}":"Page {{current}} of {{total}}","PaLM":"PaLM","Pan":"Pan","Pancake":"Pancake","Param Override":"Param Override","Parameter":"Parameter","Parameter configuration error":"Parameter configuration error","Parameter Override":"Parameter Override","Parameter override and system prompt are unavailable":"Parameter override and system prompt are unavailable","Parameter override must be a valid JSON object":"Parameter override must be a valid JSON object","Parameter override must be valid JSON format":"Parameter override must be valid JSON format","Parameter Override Template (JSON)":"Parameter Override Template (JSON)","Parameter override template must be a JSON object":"Parameter override template must be a JSON object","Parameter settings":"Parameter settings","parameter.":"parameter.","Parameters":"Parameters","Parsed {{count}} service account file(s)":"Parsed {{count}} service account file(s)","Pause drag demo":"Pause drag demo","Payment amount is too low":"Payment amount is too low","Payment cancel redirect URL is not in the trusted domain list":"Payment cancel redirect URL is not in the trusted domain list","Parsed plugin metadata":"Parsed plugin metadata","Payment configuration error":"Payment configuration error","Partial Submission":"Partial Submission","Payment information has not been configured by administrator":"Payment information has not been configured by administrator","Partly shown":"Partly shown","Pass Headers":"Pass Headers","Payment method does not exist":"Payment method does not exist","Pass specified request headers to upstream":"Pass specified request headers to upstream","Pass Through Body":"Pass Through Body","Pass Through Headers":"Pass Through Headers","Pass Through Request Headers":"Pass Through Request Headers","Pass through the anthropic-beta header for beta features":"Pass through the anthropic-beta header for beta features","Pass through the include field for usage obfuscation":"Pass through the include field for usage obfuscation","Pass through the inference_geo field for Claude data residency region control":"Pass through the inference_geo field for Claude data residency region control","Pass through the inference_geo field for geographic routing":"Pass through the inference_geo field for geographic routing","Pass through the safety_identifier field":"Pass through the safety_identifier field","Pass through the service_tier field":"Pass through the service_tier field","Pass through the speed field for Claude inference speed mode control":"Pass through the speed field for Claude inference speed mode control","Pass when key is missing":"Pass when key is missing","Payment success redirect URL is not in the trusted domain list":"Payment success redirect URL is not in the trusted domain list","Pass-through":"Pass-through","Pass-Through":"Pass-Through","Pass-through Headers (comma-separated or JSON array)":"Pass-through Headers (comma-separated or JSON array)","Payment, redemption, subscription, and invitation reward features are disabled. The administrator must confirm compliance terms before enabling them.":"Payment, redemption, subscription, and invitation reward features are disabled. The administrator must confirm compliance terms before enabling them.","Pass-through help":"Pass-through help","Pass-through requires native forwarding":"Pass-through requires native forwarding","Passive recovery only":"Passive recovery only","Passkey":"Passkey","Passkey Authentication":"Passkey Authentication","Passkey authentication is disabled.":"Passkey authentication is disabled.","Passkey display name":"Passkey display name","Passkey domain change blocked: {{domains}}; affected {{known}}; unknown {{unknown}}":"Passkey domain change blocked: {{domains}}; affected {{known}}; unknown {{unknown}}","Passkey domain update failed":"Passkey domain update failed","Passkey domains":"Passkey domains","Passkey is not available in this browser":"Passkey is not available in this browser","Passkey is not supported in this environment":"Passkey is not supported in this environment","Passkey is not supported on this device":"Passkey is not supported on this device","Passkey is not supported on this device.":"Passkey is not supported on this device.","Passkey Login":"Passkey Login","Passkey login failed":"Passkey login failed","Passkey login was cancelled":"Passkey login was cancelled","Passkey login was cancelled or timed out":"Passkey login was cancelled or timed out","Passkey not supported on this device":"Passkey not supported on this device","Passkey registered successfully":"Passkey registered successfully","Passkey registration was cancelled":"Passkey registration was cancelled","Passkey removed successfully":"Passkey removed successfully","Passkey reset successfully":"Passkey reset successfully","Passkey verification failed":"Passkey verification failed","Passkey verification is not available in the current state":"Passkey verification is not available in the current state","Passkey verification is not supported in this environment":"Passkey verification is not supported in this environment","Passkey verification was cancelled":"Passkey verification was cancelled","Passkey verification was cancelled or timed out":"Passkey verification was cancelled or timed out","Passkey website domain":"Passkey website domain","Passkeys for removed domains will stop working. Confirm only if affected users can sign in another way.":"Passkeys for removed domains will stop working. Confirm only if affected users can sign in another way.","Passkeys known to use removed domains: {{amount}}":"Passkeys known to use removed domains: {{amount}}","Passkeys only work on the website they were created for. This helps prevent other websites from misusing them.":"Passkeys only work on the website they were created for. This helps prevent other websites from misusing them.","Passkeys with an unknown domain that may be affected: {{amount}}":"Passkeys with an unknown domain that may be affected: {{amount}}","Passthrough Template":"Passthrough Template","Password":"Password","Password / Access Token":"Password / Access Token","Password authentication is disabled.":"Password authentication is disabled.","Password changed successfully":"Password changed successfully","Password copied to clipboard: {{password}}":"Password copied to clipboard: {{password}}","Password has been copied to clipboard":"Password has been copied to clipboard","Password Login":"Password Login","Password must be at least 8 characters":"Password must be at least 8 characters","Password must be at most 20 characters long":"Password must be at most 20 characters long","Password must be between 8 and 20 characters":"Password must be between 8 and 20 characters","Password must contain between 8 and 128 characters.":"Password must contain between 8 and 128 characters.","Password Registration":"Password Registration","Password reset and copied to clipboard: {{password}}":"Password reset and copied to clipboard: {{password}}","Password reset: {{password}}":"Password reset: {{password}}","Password set successfully":"Password set successfully","Password settings have changed. Reload the page and try again.":"Password settings have changed. Reload the page and try again.","Passwords do not match":"Passwords do not match","Passwords don\'t match.":"Passwords don\'t match.","Paste Connection Info":"Paste Connection Info","Paste JavaScript source here...":"Paste JavaScript source here...","Path":"Path","Path not set":"Path not set","Path Regex (one per line)":"Path Regex (one per line)","Path:":"Path:","Pay":"Pay","Pay {{amount}}":"Pay {{amount}}","Per-request Price: High to Low":"Per-request Price: High to Low","Per-request Price: Low to High":"Per-request Price: Low to High","Plan amount is too low":"Plan amount is too low","Pay {{amount}} • Save {{saved}}":"Pay {{amount}} • Save {{saved}}","Pay with Balance":"Pay with Balance","Plan name cannot be empty":"Plan name cannot be empty","Pay-as-you-go with real-time usage monitoring":"Pay-as-you-go with real-time usage monitoring","Plan price cannot be empty":"Plan price cannot be empty","Payment":"Payment","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.","Payment Channel":"Payment Channel","Payment Gateway":"Payment Gateway","Payment initiated":"Payment initiated","Payment Method":"Payment Method","Payment method identifier":"Payment method identifier","Payment method identifier is required":"Payment method identifier is required","Payment method name":"Payment method name","Payment method name is required":"Payment method name is required","Payment method type":"Payment method type","Payment method type is required":"Payment method type is required","Payment methods":"Payment methods","Payment Methods":"Payment Methods","Please confirm the compliance statement":"Please confirm the compliance statement","Payment page opened":"Payment page opened","Payment request failed":"Payment request failed","Payment return URL":"Payment return URL","Payment return URL is empty. Create the product without a SuccessURL redirect?":"Payment return URL is empty. Create the product without a SuccessURL redirect?","Payment type key":"Payment type key","Payment type key is required":"Payment type key is required","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.","Peak":"Peak","Peak KV cache usage":"Peak KV cache usage","Peak throughput":"Peak throughput","Peak token pool usage":"Peak token pool usage","Penalises repetition of frequent tokens":"Penalises repetition of frequent tokens","pending":"pending","Pending":"Pending","per":"per","Per 1K tokens":"Per 1K tokens","Per 1M tokens":"Per 1M tokens","Per image":"Per image","Per matched model":"Per matched model","per request":"per request","Per request":"Per request","Per Request":"Per Request","Per Second":"Per Second","Per token":"Per token","Per Unit":"Per Unit","Per-call":"Per-call","Per-feature metered windows split by model or capability.":"Per-feature metered windows split by model or capability.","Per-group performance":"Per-group performance","Per-request":"Per-request","Per-request (deprecated)":"Per-request (deprecated)","Per-request (fixed price)":"Per-request (fixed price)","Per-token":"Per-token","Per-token (deprecated)":"Per-token (deprecated)","Per-token (ratio based)":"Per-token (ratio based)","Per-token logit bias map":"Per-token logit bias map","Percentage:":"Percentage:","Performance":"Performance","Please select a product":"Please select a product","Performance data is not yet available for this model.":"Performance data is not yet available for this model.","Performance health":"Performance health","Performance metrics for the last 24 hours":"Performance metrics for the last 24 hours","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.","Performance Monitor":"Performance Monitor","Performance Settings":"Performance Settings","Performed {{action}} on user {{username}} (ID: {{id}})":"Performed {{action}} on user {{username}} (ID: {{id}})","Period":"Period","Periodically check for upstream model changes":"Periodically check for upstream model changes","Periodically checks all channels except manually disabled ones to detect failures and recover channels automatically.":"Periodically checks all channels except manually disabled ones to detect failures and recover channels automatically.","Periodically checks only channels with auto-disable enabled, excluding manually disabled channels.":"Periodically checks only channels with auto-disable enabled, excluding manually disabled channels.","Periodically send ping frames to keep streaming connections active.":"Periodically send ping frames to keep streaming connections active.","Permanently delete your account and all data":"Permanently delete your account and all data","Permissions":"Permissions","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"Permit Passkey registration on non-HTTPS origins (only recommended for development)","Please wait {{seconds}} seconds before requesting another verification code.":"Please wait {{seconds}} seconds before requesting another verification code.","Perplexity":"Perplexity","Persist your data file":"Persist your data file","Personal":"Personal","Personal area":"Personal area","Personal Center Area":"Personal Center Area","Personal info settings":"Personal info settings","Personal Settings":"Personal Settings","Personal settings and profile management.":"Personal settings and profile management.","Personal use":"Personal use","Personal use mode":"Personal use mode","Pick a date":"Pick a date","Pick models and derive the other side with a rule to create request-to-upstream mappings.":"Pick models and derive the other side with a rule to create request-to-upstream mappings.","Pick or create both a store and a product before saving.":"Pick or create both a store and a product before saving.","Ping Interval (seconds)":"Ping Interval (seconds)","Plan":"Plan","Plugin metadata contains an unknown field \\"{{field}}\\". If this plugin was downloaded from the official marketplace, it may require a newer version of new-api. Try updating new-api and installing the plugin again.":"Plugin metadata contains an unknown field \\"{{field}}\\". If this plugin was downloaded from the official marketplace, it may require a newer version of new-api. Try updating new-api and installing the plugin again.","Plan ID":"Plan ID","Plan Name":"Plan Name","Plan Price":"Plan Price","Plan price must be greater than zero":"Plan price must be greater than zero","Plan Quota":"Plan Quota","Plan Subtitle":"Plan Subtitle","Plan Title":"Plan Title","Plan title is required":"Plan title is required","Planned action":"Planned action","Planned maintenance on Friday at 22:00 UTC...":"Planned maintenance on Friday at 22:00 UTC...","Platform":"Platform","Playground":"Playground","Playground and chat functions":"Playground and chat functions","Playground experiments and live conversations.":"Playground experiments and live conversations.","Please agree to the legal terms first":"Please agree to the legal terms first","Please complete the security check to continue.":"Please complete the security check to continue.","Please confirm that you understand the consequences":"Please confirm that you understand the consequences","Please confirm your password":"Please confirm your password","Possibly an upstream timeout":"Possibly an upstream timeout","Please enable io.net model deployment service and configure an API key in System Settings.":"Please enable io.net model deployment service and configure an API key in System Settings.","Please enable Two-factor Authentication or Passkey before proceeding":"Please enable Two-factor Authentication or Passkey before proceeding","Please enter a code.":"Please enter a code.","Please enter a name":"Please enter a name","Please enter a new password":"Please enter a new password","Please enter a redemption code":"Please enter a redemption code","Please enter a valid duration":"Please enter a valid duration","Please enter a valid email address":"Please enter a valid email address","Please enter a valid number":"Please enter a valid number","Please enter a Well-Known URL first":"Please enter a Well-Known URL first","Please enter amount":"Please enter amount","Please enter an administrator username":"Please enter an administrator username","Please enter API key first":"Please enter API key first","Please enter chat client name":"Please enter chat client name","Please enter email and verification code":"Please enter email and verification code","Please enter keys first":"Please enter keys first","Please enter model name":"Please enter model name","Please enter plan title":"Please enter plan title","Please enter the authentication code.":"Please enter the authentication code.","Please enter the URL":"Please enter the URL","Please enter the verification code":"Please enter the verification code","Please enter the verification code or backup code":"Please enter the verification code or backup code","Please enter your current password":"Please enter your current password","Please enter your email":"Please enter your email","Please enter your email first":"Please enter your email first","Please enter your password":"Please enter your password","Please enter your username":"Please enter your username","Please enter your username or email":"Please enter your username or email","Please enter your verification code":"Please enter your verification code","Please enter your verification code or backup code":"Please enter your verification code or backup code","Please fix JSON errors before saving":"Please fix JSON errors before saving","Please fix the highlighted fields before saving":"Please fix the highlighted fields before saving","Please log in with the appropriate credentials":"Please log in with the appropriate credentials","Please select a container":"Please select a container","Please select a payment method":"Please select a payment method","Please select a primary model":"Please select a primary model","Please select a subscription plan":"Please select a subscription plan","Please select at least one channel":"Please select at least one channel","Please select at least one model":"Please select at least one model","Please select items to delete":"Please select items to delete","Please Select user groups that can access this channel.":"Please Select user groups that can access this channel.","Please set Ollama API Base URL first":"Please set Ollama API Base URL first","Please sign in to view {{module}}.":"Please sign in to view {{module}}.","Please try again later.":"Please try again later.","Please type the following text to confirm:":"Please type the following text to confirm:","Please upload key file(s)":"Please upload key file(s)","Please wait a moment before trying again.":"Please wait a moment before trying again.","Please wait a moment, human check is initializing...":"Please wait a moment, human check is initializing...","Please wait before editing to avoid overwriting saved values.":"Please wait before editing to avoid overwriting saved values.","Please wait before requesting another verification code.":"Please wait before requesting another verification code.","Please wait for the current generation to complete":"Please wait for the current generation to complete","Plugin":"Plugin","Plugin activation failed":"Plugin activation failed","Plugin author":"Plugin author","Plugin default":"Plugin default","Plugin details":"Plugin details","Plugin extensions":"Plugin extensions","Plugin Generation":"Plugin Generation","Plugin icon":"Plugin icon","Plugin icon exceeds the 512 KiB limit.":"Plugin icon exceeds the 512 KiB limit.","Plugin icon must be an .svg or .png file.":"Plugin icon must be an .svg or .png file.","Plugin indexes are fetched by your browser. Installing runs the same review and admission pipeline as a manual upload.":"Plugin indexes are fetched by your browser. Installing runs the same review and admission pipeline as a manual upload.","Plugin installation failed":"Plugin installation failed","Plugin is still in use":"Plugin is still in use","Plugin key":"Plugin key","Plugin metadata":"Plugin metadata","Plugin sandbox":"Plugin sandbox","Plugin saved, activation required":"Plugin saved, activation required","Plugin source":"Plugin source","Plugin source exceeds the 8 MiB limit.":"Plugin source exceeds the 8 MiB limit.","Plugin uploaded successfully":"Plugin uploaded successfully","Plugin version activated":"Plugin version activated","Price cannot be negative":"Price cannot be negative","Price cannot exceed 9999":"Price cannot exceed 9999","Plugin version deleted":"Plugin version deleted","Plugin website":"Plugin website","Plugin-defined interfaces":"Plugin-defined interfaces","Plugins":"Plugins","Plugins can access channel credentials. Review the source and differences before installing.":"Plugins can access channel credentials. Review the source and differences before installing.","Policy JSON":"Policy JSON","Polling":"Polling","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded","Poor":"Poor","Port":"Port","Port must be a positive integer":"Port must be a positive integer","Position {{position}}":"Position {{position}}","Post Delta":"Post Delta","PostgreSQL detected":"PostgreSQL detected","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL offers advanced reliability and data integrity for production workloads.","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.","Power AI applications, manage digital assets, connect the Future":"Power AI applications, manage digital assets, connect the Future","Powerful API Management Platform":"Powerful API Management Platform","Pre-Consume for Free Models":"Pre-Consume for Free Models","Pre-consumed":"Pre-consumed","Pre-Consumed Quota":"Pre-Consumed Quota","Pre-release":"Pre-release","Prefer the original channel, allow switching":"Prefer the original channel, allow switching","Preference saved as {{pref}}, but no active subscription. Requests will be rejected.":"Preference saved as {{pref}}, but no active subscription. Requests will be rejected.","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.","Preferences":"Preferences","Prefill Group Management":"Prefill Group Management","Prefill Groups":"Prefill Groups","Prefill groups help you keep complex configurations in sync.":"Prefill groups help you keep complex configurations in sync.","Prefix":"Prefix","Prefix cache hit rate":"Prefix cache hit rate","Prefix Match":"Prefix Match","Prefix used when displaying prices":"Prefix used when displaying prices","Prefix/Suffix Text":"Prefix/Suffix Text","Premium chat models":"Premium chat models","Premium plan, half price":"Premium plan, half price","Preparing chat keys…":"Preparing chat keys…","Preparing conversion...":"Preparing conversion...","Preparing your chat link, please try again in a moment.":"Preparing your chat link, please try again in a moment.","Preparing your chat link…":"Preparing your chat link…","Prepend":"Prepend","Prepend to Start":"Prepend to Start","Prepend value to array / string / object start":"Prepend value to array / string / object start","Presence Penalty":"Presence Penalty","Preserve the original field when applying this rule":"Preserve the original field when applying this rule","Preserve upstream-specific fields when API formats match; bypasses model redirect, parameter override and format conversion":"Preserve upstream-specific fields when API formats match; bypasses model redirect, parameter override and format conversion","Preset groups":"Preset groups","Preset recharge amounts (JSON array)":"Preset recharge amounts (JSON array)","Preset recharge amounts displayed to users":"Preset recharge amounts displayed to users","Preset Template":"Preset Template","Preset templates":"Preset templates","preset.anthropic":"Anthropic","preset.default":"Default","preset.forest-whisper":"Forest Whisper","Product configuration error":"Product configuration error","Product does not exist":"Product does not exist","preset.lake-view":"Lake View","preset.lavender-dream":"Lavender Dream","preset.ocean-breeze":"Ocean Breeze","preset.rose-garden":"Rose Garden","preset.simple-large":"Simple Large-font","preset.sunset-glow":"Sunset Glow","preset.underground":"Underground","Press Enter or comma to add tags":"Press Enter or comma to add tags","Press Enter to use \\"{{value}}\\"":"Press Enter to use \\"{{value}}\\"","Prevent server-side request forgery attacks":"Prevent server-side request forgery attacks","Preview":"Preview","Preview again":"Preview again","Preview changes":"Preview changes","Preview excludes group ratios and request rule multipliers.":"Preview excludes group ratios and request rule multipliers.","Preview fields":"Preview fields","Preview is unavailable for custom expressions.":"Preview is unavailable for custom expressions.","Preview metadata first":"Preview metadata first","Preview price changes":"Preview price changes","Preview pricing conversion":"Preview pricing conversion","Preview selected changes":"Preview selected changes","Preview unavailable":"Preview unavailable","Preview upstream model changes":"Preview upstream model changes","Previous":"Previous","Previous branch":"Previous branch","Previous page":"Previous page","Previous permissions":"Previous permissions","Previous value":"Previous value","Price":"Price","Price ($/1K calls)":"Price ($/1K calls)","Price (local currency / USD)":"Price (local currency / USD)","Price display":"Price display","Price display mode":"Price display mode","Price estimation":"Price estimation","Price estimation description":"After completing the hardware type, deployment location, replica count, etc., the price will be automatically calculated.","Price examples":"Price examples","Price ID":"Price ID","Price mode (USD per 1M tokens)":"Price mode (USD per 1M tokens)","Price per image":"Price per image","Price per request":"Price per request","Price source":"Price source","Price summary":"Price summary","price_xxx":"price_xxx","Price:":"Price:","Prices are in {{currency}}, with units shown below. Use USD when editing expressions directly.":"Prices are in {{currency}}, with units shown below. Use USD when editing expressions directly.","Prices changed while preparing the conversion. Try again.":"Prices changed while preparing the conversion. Try again.","Prices for each set of conditions":"Prices for each set of conditions","Prices shown per":"Prices shown per","Prices shown per {{unit}} tokens":"Prices shown per {{unit}} tokens","Prices shown per usage unit":"Prices shown per usage unit","Prices synced successfully":"Prices synced successfully","Prices vary by usage tier and request conditions":"Prices vary by usage tier and request conditions","Pricing":"Pricing","Pricing & Display":"Pricing & Display","Pricing by condition":"Pricing by condition","Pricing by Group":"Pricing by Group","Pricing conditions":"Pricing conditions","Pricing Configuration":"Pricing Configuration","Purchase limit cannot be negative":"Purchase limit cannot be negative","Purchase limit for this plan has been reached":"Purchase limit for this plan has been reached","Pricing currency":"Pricing currency","Pricing group example":"Pricing group example","Pricing groups":"Pricing groups","Pricing mode":"Pricing mode","Quality {{quality}}":"Quality {{quality}}","Pricing must be a JSON object":"Pricing must be a JSON object","Pricing Ratios":"Pricing Ratios","Pricing rule {{number}}":"Pricing rule {{number}}","Pricing rules":"Pricing rules","Pricing tier {{name}}":"Pricing tier {{name}}","Pricing Type":"Pricing Type","Primary Model":"Primary Model","Primary Passkey domain":"Primary Passkey domain","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)","Priority":"Priority","Priority (Default)":"Priority (Default)","Priority level from 0 (lowest) to 10 (highest), default is 5":"Priority level from 0 (lowest) to 10 (highest), default is 5","Priority order for automatic group assignment. New tokens rotate through this list.":"Priority order for automatic group assignment. New tokens rotate through this list.","Priority order for tokens in the auto group. The system tries groups from top to bottom.":"Priority order for tokens in the auto group. The system tries groups from top to bottom.","Privacy":"Privacy","Privacy Policy":"Privacy Policy","Private Deployment URL":"Private Deployment URL","Processed requests":"Processed requests","Processing OAuth response...":"Processing OAuth response...","Processing...":"Processing...","Quota change amount cannot be zero":"Quota change amount cannot be zero","Product":"Product","Product ID":"Product ID","Product ID is required":"Product ID is required","Product Name":"Product Name","Productivity":"Productivity","Products":"Products","Professional team providing 24/7 technical support":"Professional team providing 24/7 technical support","Profile":"Profile","Profile updated successfully":"Profile updated successfully","Programming":"Programming","Progress":"Progress","Project":"Project","Promote":"Promote","Promotion codes":"Promotion codes","Prompt":"Prompt","Prompt (EN)":"Prompt (EN)","Quota unit is misconfigured":"Quota unit is misconfigured","Prompt cache ratio":"Prompt cache ratio","Quota value cannot be negative":"Quota value cannot be negative","Quota value exceeds valid range, maximum is {{max}}":"Quota value exceeds valid range, maximum is {{max}}","Prompt caching":"Prompt caching","Prompt Caching":"Prompt Caching","Prompt Details":"Prompt Details","Prompt price ($/1M tokens)":"Prompt price ($/1M tokens)","Prompt text filtering is active with the current form values.":"Prompt text filtering is active with the current form values.","Prompt text filtering needs both switches enabled and a non-empty keyword list.":"Prompt text filtering needs both switches enabled and a non-empty keyword list.","Proprietary":"Proprietary","Protect login and registration with Cloudflare Turnstile":"Protect login and registration with Cloudflare Turnstile","Provide a JSON object where each key maps to an endpoint definition.":"Provide a JSON object where each key maps to an endpoint definition.","Provide a valid URL starting with http:// or https://":"Provide a valid URL starting with http:// or https://","Provide Markdown, HTML, or an external URL for the privacy policy":"Provide Markdown, HTML, or an external URL for the privacy policy","Provide Markdown, HTML, or an external URL for the user agreement":"Provide Markdown, HTML, or an external URL for the user agreement","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"Provide per-category safety overrides as JSON. Use `default` for fallback values.","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.","Provider":"Provider","Provider & data privacy":"Provider & data privacy","Provider created successfully":"Provider created successfully","Provider deleted successfully":"Provider deleted successfully","Provider ID":"Provider ID","Provider Name":"Provider Name","Provider source":"Provider source","Provider type (OpenAI, Anthropic, etc.)":"Provider type (OpenAI, Anthropic, etc.)","Provider updated successfully":"Provider updated successfully","Provider-specific endpoint, account, and compatibility settings.":"Provider-specific endpoint, account, and compatibility settings.","Proxy Address":"Proxy Address","Proxy address must use HTTP, HTTPS, SOCKS5, or SOCKS5H and include a valid host":"Proxy address must use HTTP, HTTPS, SOCKS5, or SOCKS5H and include a valid host","Prune Object Items":"Prune Object Items","Prune object items by conditions":"Prune object items by conditions","Prune Rule (string or JSON object)":"Prune Rule (string or JSON object)","Public base URL for async task media. Supports a dedicated media domain, port, or Nginx path prefix; falls back to Server Address when empty.":"Public base URL for async task media. Supports a dedicated media domain, port, or Nginx path prefix; falls back to Server Address when empty.","Public model catalog and pricing page.":"Public model catalog and pricing page.","Public rankings page based on live usage data.":"Public rankings page based on live usage data.","Publish Date":"Publish Date","Publish the request names and remove the raw upstream names from the model list":"Publish the request names and remove the raw upstream names from the model list","Published":"Published","Published as {{model}}":"Published as {{model}}","Published at":"Published at","Published models, groups, and model remapping rules.":"Published models, groups, and model remapping rules.","Recalculated from tokens: tokens {{tokens}}, model ratio {{model_ratio}}, group ratio {{group_ratio}}, other multiplier {{other_multiplier}}":"Recalculated from tokens: tokens {{tokens}}, model ratio {{model_ratio}}, group ratio {{group_ratio}}, other multiplier {{other_multiplier}}","Published:":"Published:","Pull":"Pull","Pull model":"Pull model","Pulling...":"Pulling...","Purchase Limit":"Purchase Limit","Purchase limit reached":"Purchase limit reached","Purchase Subscription":"Purchase Subscription","QR Code Image URL":"QR Code Image URL","QR code is not configured. Please contact support.":"QR code is not configured. Please contact support.","Quantity":"Quantity","QuantumNous":"QuantumNous","Query":"Query","Query Balance":"Query Balance","Query Param":"Query Param","Querying...":"Querying...","Question":"Question","Queued":"Queued","Quick actions":"Quick actions","Quick insert common payment methods":"Quick insert common payment methods","Quick insert payment entries":"Quick insert payment entries","Quick options":"Quick options","Quick Range":"Quick Range","Quick Setup from Preset":"Quick Setup from Preset","Quota":"Quota","Quota ({{currency}})":"Quota ({{currency}})","Quota adjusted successfully":"Quota adjusted successfully","Quota adjustment details":"Quota adjustment details","Redemption code count must be greater than 0":"Redemption code count must be greater than 0","Quota after adjustment":"Quota after adjustment","Quota before adjustment":"Quota before adjustment","Quota clamped":"Quota clamped","Redemption code name length must be between 1-20":"Redemption code name length must be between 1-20","Quota consumed before charging users":"Quota consumed before charging users","Quota Distribution":"Quota Distribution","Quota given to invited users":"Quota given to invited users","Quota given to invited users ({{formattedQuota}})":"Quota given to invited users ({{formattedQuota}})","Quota given to users who invite others":"Quota given to users who invite others","Quota given to users who invite others ({{formattedQuota}})":"Quota given to users who invite others ({{formattedQuota}})","Quota must be a positive number":"Quota must be a positive number","Quota must be zero or greater":"Quota must be zero or greater","Redemption failed, please try again later":"Redemption failed, please try again later","Redemption quota must be positive":"Redemption quota must be positive","Quota Per Unit":"Quota Per Unit","Quota Reset":"Quota Reset","Quota saturation protection triggered":"Quota saturation protection triggered","Quota Settings":"Quota Settings","Quota Types":"Quota Types","Quota unchanged":"Quota unchanged","Quota update failed":"Quota update failed","Quota:":"Quota:","Radius":"Radius","Random":"Random","Randomly select a key from the pool for each request":"Randomly select a key from the pool for each request","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.","Rankings":"Rankings","Rate Limit Windows":"Rate Limit Windows","Rate Limited":"Rate Limited","Rate Limiting":"Rate Limiting","Rate limits":"Rate limits","Ratio":"Ratio","Ratio applied to audio completions for streaming models.":"Ratio applied to audio completions for streaming models.","Ratio applied to audio inputs where supported by the upstream model.":"Ratio applied to audio inputs where supported by the upstream model.","Ratio applied when creating cache entries for supported models.":"Ratio applied when creating cache entries for supported models.","Ratio mode":"Ratio mode","Ratio overrides for users of this group":"Ratio overrides for users of this group","Ratio overrides when billed as this group":"Ratio overrides when billed as this group","Ratio Type":"Ratio Type","Ratio: {{value}}":"Ratio: {{value}}","Ratios synced successfully":"Ratios synced successfully","Raw expression":"Raw expression","Raw expressions and presets use USD. Currency selection only converts visual price inputs and monetary previews.":"Raw expressions and presets use USD. Currency selection only converts visual price inputs and monetary previews.","Raw JSON":"Raw JSON","Raw Quota":"Raw Quota","Raw response":"Raw response","Re-enable on success":"Re-enable on success","Re-login":"Re-login","Read channels":"Read channels","Ready":"Ready","Ready to initialize":"Ready to initialize","Ready to simplify":"Ready to simplify","Real exchange rate between USD and your payment gateway currency":"Real exchange rate between USD and your payment gateway currency","Realtime pricing must be converted manually.":"Realtime pricing must be converted manually.","Reason":"Reason","Reason:":"Reason:","Reasoning":"Reasoning","Reasoning Effort":"Reasoning Effort","Received":"Received","Regular administrators cannot promote other users to administrator":"Regular administrators cannot promote other users to administrator","Received amount":"Received amount","Recent maintenance tasks running across instances and their execution status.":"Recent maintenance tasks running across instances and their execution status.","Recent success-rate samples; gray bars indicate missing data.":"Recent success-rate samples; gray bars indicate missing data.","Recently completed or failed system task runs.":"Recently completed or failed system task runs.","Recently launched models":"Recently launched models","Recently launched models gaining traction":"Recently launched models gaining traction","Recharge":"Recharge","Recharge Amount":"Recharge Amount","Recharge Amount (USD)":"Recharge Amount (USD)","Recommended":"Recommended","Recommended actions":"Recommended actions","Recommended to keep this high to avoid upstream throttling.":"Recommended to keep this high to avoid upstream throttling.","Record IP Address":"Record IP Address","Record quota usage":"Record quota usage","Recover auto-disabled channels only":"Recover auto-disabled channels only","Recursion Strategy":"Recursion Strategy","Recursive":"Recursive","Redeem":"Redeem","Redeem codes":"Redeem codes","Redeemed":"Redeemed","Redeemed at":"Redeemed at","Redeemed By":"Redeemed By","Redeemed:":"Redeemed:","redemption code":"redemption code","Redemption Code":"Redemption Code","Redemption code deleted successfully":"Redemption code deleted successfully","Redemption code disabled successfully":"Redemption code disabled successfully","Redemption code enabled successfully":"Redemption code enabled successfully","Redemption code updated successfully":"Redemption code updated successfully","Redemption code(s) created successfully":"Redemption code(s) created successfully","Redemption codes":"Redemption codes","Redemption Codes":"Redemption Codes","Redemption codes are disabled until the administrator confirms compliance terms.":"Redemption codes are disabled until the administrator confirms compliance terms.","Redemption codes created":"Redemption codes created","redemption codes.":"redemption codes.","Redemption failed":"Redemption failed","Redemption successful! Added: {{quota}}":"Redemption successful! Added: {{quota}}","Redirect {{model}}":"Redirect {{model}}","Redirect fetched upstream names to the names your users call.":"Redirect fetched upstream names to the names your users call.","Redirect panel":"Redirect panel","Redirect URL":"Redirect URL","Redirecting to chat page...":"Redirecting to chat page...","Redirecting to Creem checkout...":"Redirecting to Creem checkout...","Redirecting to GitHub...":"Redirecting to GitHub...","Redirecting to payment page...":"Redirecting to payment page...","Redirecting to sign in in {{seconds}} seconds.":"Redirecting to sign in in {{seconds}} seconds.","Redirects to {{model}}":"Redirects to {{model}}","Reduces cache hit rate":"Reduces cache hit rate","Reduces repeated wording":"Reduces repeated wording","Reference Video":"Reference Video","Referral link:":"Referral link:","Referral Program":"Referral Program","Referral reward transfer is disabled until the administrator confirms compliance terms.":"Referral reward transfer is disabled until the administrator confirms compliance terms.","Refine models by provider, group, type, and tags.":"Refine models by provider, group, type, and tags.","Refresh":"Refresh","Refresh Cache":"Refresh Cache","Refresh credential":"Refresh credential","Refresh details":"Refresh details","Refresh failed":"Refresh failed","Refresh failed. Showing the last successful snapshot.":"Refresh failed. Showing the last successful snapshot.","Refresh interval (minutes)":"Refresh interval (minutes)","Refresh preview":"Refresh preview","Refresh Stats":"Refresh Stats","Refresh the list and try again.":"Refresh the list and try again.","Refresh the preview before trying again; some changes may already have been saved.":"Refresh the preview before trying again; some changes may already have been saved.","Refreshing...":"Refreshing...","Refund":"Refund","Refund Details":"Refund Details","Regenerate":"Regenerate","Regenerate Backup Codes":"Regenerate Backup Codes","Regenerated two-factor backup codes":"Regenerated two-factor backup codes","Regenerating immediately invalidates any existing token.":"Regenerating immediately invalidates any existing token.","Regex":"Regex","Regex Pattern":"Regex Pattern","Regex Replace":"Regex Replace","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.","Register Passkey":"Register Passkey","Registered":"Registered","Registered a passkey":"Registered a passkey","Registration Enabled":"Registration Enabled","Registration flow expired. Please try again.":"Registration flow expired. Please try again.","Registry (optional)":"Registry (optional)","Registry secret":"Registry secret","Registry username":"Registry username","Reinstall latest":"Reinstall latest","Reject Reason":"Reject Reason","Release details":"Release details","Release to insert a new priority tier":"Release to insert a new priority tier","Release to join priority {{priority}}":"Release to join priority {{priority}}","Released":"Released","Reload pricing":"Reload pricing","Reload vendor details":"Reload vendor details","Relying Party Display Name":"Relying Party Display Name","Relying Party ID":"Relying Party ID","Remaining":"Remaining","Remaining percentage":"Remaining percentage","Remaining quota":"Remaining quota","Remaining Quota ({{currency}})":"Remaining Quota ({{currency}})","Remaining quota units":"Remaining quota units","Remaining:":"Remaining:","Remark":"Remark","Remind me once when my balance drops below the threshold":"Remind me once when my balance drops below the threshold","Remind users through their chosen notification method when their balance drops below the threshold":"Remind users through their chosen notification method when their balance drops below the threshold","Reminder threshold":"Reminder threshold","Reminder threshold cannot be negative":"Reminder threshold cannot be negative","Remove":"Remove","Remove {{group}}":"Remove {{group}}","Remove {{value}}":"Remove {{value}}","Remove ${{amount}}":"Remove ${{amount}}","Remove all custom prices, ratios and billing expressions for these exact model names. Built-in pricing may become effective again.":"Remove all custom prices, ratios and billing expressions for these exact model names. Built-in pricing may become effective again.","Remove all log entries created before the selected timestamp.":"Remove all log entries created before the selected timestamp.","Remove attachment":"Remove attachment","Remove branch":"Remove branch","Remove compatible Passkey domains?":"Remove compatible Passkey domains?","Remove condition":"Remove condition","Remove domains":"Remove domains","Remove Duplicates":"Remove Duplicates","Remove end condition":"Remove end condition","Remove filter":"Remove filter","Remove functionResponse.id field":"Remove functionResponse.id field","Remove mapped targets":"Remove mapped targets","Remove Models":"Remove Models","Remove negation":"Remove negation","Remove node filter":"Remove node filter","Remove Passkey":"Remove Passkey","Remove Passkey?":"Remove Passkey?","Remove rule group":"Remove rule group","Remove saved price":"Remove saved price","Remove source {{name}}":"Remove source {{name}}","Remove start condition":"Remove start condition","Remove string prefix":"Remove string prefix","Remove string suffix":"Remove string suffix","Remove the target field":"Remove the target field","Remove this model’s custom pricing and use the built-in defaults. A model without a default may become unpriced.":"Remove this model’s custom pricing and use the built-in defaults. A model without a default may become unpriced.","Remove tier":"Remove tier","Removed":"Removed","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}","Removed an OAuth binding for the user":"Removed an OAuth binding for the user","Removed models":"Removed models","Removed Models ({{count}})":"Removed Models ({{count}})","Removed models will no longer be available through this channel. Select removals explicitly.":"Removed models will no longer be available through this channel. Select removals explicitly.","Removed settings":"Removed settings","Removes MjProxy flags such as --fast, --relax, and --turbo from user prompts.":"Removes MjProxy flags such as --fast, --relax, and --turbo from user prompts.","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"Removing Passkey will require you to sign in with your password next time. You can re-register anytime.","Rename":"Rename","Rename deployment":"Rename deployment","Rename failed":"Rename failed","Renamed an access token":"Renamed an access token","Renamed successfully":"Renamed successfully","Renaming metadata does not rename channel models or move pricing. Existing prices stay with the original model name.":"Renaming metadata does not rename channel models or move pricing. Existing prices stay with the original model name.","Reorder channel {{id}}":"Reorder channel {{id}}","Repair":"Repair","Repair Channel Consistency":"Repair Channel Consistency","Repair channel consistency?":"Repair channel consistency?","Repeat the administrator password":"Repeat the administrator password","Replace":"Replace","Replace {{find}} with {{replaceWith}}":"Replace {{find}} with {{replaceWith}}","Replace all existing keys":"Replace all existing keys","Replace channel models":"Replace channel models","Replace forwarding routes?":"Replace forwarding routes?","Replace mode: Will completely replace all existing keys":"Replace mode: Will completely replace all existing keys","Replace text":"Replace text","Replace with":"Replace with","Replace With":"Replace With","replaced":"replaced","Replacement Model":"Replacement Model","Replay drag demo":"Replay drag demo","Replica count":"Replica count","Replicate":"Replicate","Report an issue":"Report an issue","request":"request","Request":"Request","Request & Response":"Request & Response","Request Body Disk Cache":"Request Body Disk Cache","Request Body Field":"Request Body Field","Request Body Memory Cache":"Request Body Memory Cache","Request body must be a JSON object.":"Request body must be a JSON object.","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.","Request checks":"Request checks","Request completed":"Request completed","Request conversion":"Request conversion","Request Conversion":"Request Conversion","Request Count":"Request Count","Request decision flow":"Request decision flow","Request error occurred":"Request error occurred","Request failed":"Request failed","Request flow":"Request flow","Request Header Field":"Request Header Field","Request Header Override":"Request Header Override","Request Header Overrides":"Request Header Overrides","Request headers must be a JSON object with string values.":"Request headers must be a JSON object with string values.","Request ID":"Request ID","Request Limits":"Request Limits","Request Model":"Request Model","Request Model Name":"Request Model Name","Request Model:":"Request Model:","Request names your users call":"Request names your users call","Request overrides, routing behavior, and upstream model automation":"Request overrides, routing behavior, and upstream model automation","Request Path":"Request Path","Request policies":"Request policies","Request policy decisions":"Request policy decisions","Request processing":"Request processing","Request rejected locally":"Request rejected locally","Request retry":"Request retry","Request rule pricing":"Request rule pricing","Request rules apply on top of this amount.":"Request rules apply on top of this amount.","Request simulation":"Request simulation","Request success rate sampled over the last 24 hours":"Request success rate sampled over the last 24 hours","Request success rate; {{incidents}} incident buckets in the last 24 hours":"Request success rate; {{incidents}} incident buckets in the last 24 hours","Request text filtering":"Request text filtering","Request timed out, please refresh and restart GitHub login":"Request timed out, please refresh and restart GitHub login","Request-based":"Request-based","Requested items":"Requested items","Requested quota":"Requested quota","Requested quota: {{quota}}":"Requested quota: {{quota}}","Requested redemption code IDs":"Requested redemption code IDs","Requested token IDs":"Requested token IDs","Requested token IDs truncated":"Requested token IDs truncated","Requested: {{total}}":"Requested: {{total}}","Requested: {{total}} · Deleted: {{processed}}":"Requested: {{total}} · Deleted: {{processed}}","Requested: {{total}} · Returned: {{processed}}":"Requested: {{total}} · Returned: {{processed}}","Requests":"Requests","Requests (24h)":"Requests (24h)","Requests / 24h":"Requests / 24h","Requests per minute":"Requests per minute","requests served":"requests served","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"Requests will be forwarded to this worker. Trailing slashes are removed automatically.","Requests:":"Requests:","Require email verification for new accounts":"Require email verification for new accounts","Require job success before follow-up actions":"Require job success before follow-up actions","Require login to view models":"Require login to view models","Require login to view rankings":"Require login to view rankings","Require the original channel":"Require the original channel","required":"required","Required":"Required","Required events:":"Required events:","Required permission":"Required permission","Required provider, authentication, model, and group settings":"Required provider, authentication, model, and group settings","Required to expose MjProxy-style image generation to end users.":"Required to expose MjProxy-style image generation to end users.","Requires an available channel and access to its group.":"Requires an available channel and access to its group.","Requires global auto-disable and this channel option.":"Requires global auto-disable and this channel option.","Requires upstream WebSocket support":"Requires upstream WebSocket support","Rerank":"Rerank","Reroll":"Reroll","Research, analysis, scientific reasoning":"Research, analysis, scientific reasoning","Resend ({{seconds}}s)":"Resend ({{seconds}}s)","Resend codes":"Resend codes","Resend in {{seconds}}s":"Resend in {{seconds}}s","Reserve requested images; settle returned images.":"Reserve requested images; settle returned images.","Reserve the estimated input cost multiplied by this value, without estimating output tokens. Defaults to 1; positive decimals such as 0.5 and 1.5 are supported. Final charges use actual usage. Per-request and task prices are unaffected.":"Reserve the estimated input cost multiplied by this value, without estimating output tokens. Defaults to 1; positive decimals such as 0.5 and 1.5 are supported. Final charges use actual usage. Per-request and task prices are unaffected.","Reserved for viewing complete channel keys after secure verification.":"Reserved for viewing complete channel keys after secure verification.","Reset":"Reset","Reset {{count}} active subscriptions":"Reset {{count}} active subscriptions","Reset 2FA":"Reset 2FA","Reset 2FA for {{username}}? The user must set up 2FA again to continue using it.":"Reset 2FA for {{username}}? The user must set up 2FA again to continue using it.","Reset active {{plan}} subscriptions for this user?":"Reset active {{plan}} subscriptions for this user?","Reset all active subscriptions under {{plan}}?":"Reset all active subscriptions under {{plan}}?","Reset all model prices?":"Reset all model prices?","Reset all model ratios?":"Reset all model ratios?","Resume drag demo":"Resume drag demo","Review the affected Passkeys and confirm the domain removal. If the settings or impact have changed, confirmation is required again.":"Review the affected Passkeys and confirm the domain removal. If the settings or impact have changed, confirmation is required again.","Reset all settings to default values":"Reset all settings to default values","Reset at:":"Reset at:","Reset balance and used quota":"Reset balance and used quota","Reset completed":"Reset completed","Reset completed. Latest usage has been refreshed.":"Reset completed. Latest usage has been refreshed.","Reset Count":"Reset Count","Reset count:":"Reset count:","Reset Credit":"Reset Credit","Reset Credits":"Reset Credits","Reset Cycle":"Reset Cycle","Reset email sent, please check your inbox":"Reset email sent, please check your inbox","Reset failed":"Reset failed","Reset model ratios":"Reset model ratios","Reset Passkey":"Reset Passkey","Reset Passkey for {{username}}? The user will need to register a new Passkey before using passwordless login.":"Reset Passkey for {{username}}? The user will need to register a new Passkey before using passwordless login.","Reset password":"Reset password","Reset Period":"Reset Period","Reset prices":"Reset prices","Reset quota":"Reset quota","Reset ratios":"Reset ratios","Reset Stats":"Reset Stats","Reset subscription quota":"Reset subscription quota","Reset the user passkey":"Reset the user passkey","Reset to default":"Reset to default","Reset to Default":"Reset to Default","Reset to default configuration":"Reset to default configuration","Reset Two-Factor Authentication":"Reset Two-Factor Authentication","Reset usage window":"Reset usage window","Resets in:":"Resets in:","Resetting...":"Resetting...","Resize column":"Resize column","Resolve Conflicts":"Resolve Conflicts","Resource Configuration":"Resource Configuration","Resources":"Resources","Responding...":"Responding...","Response":"Response","Response Model":"Response Model","Response model mismatch":"Response model mismatch","Response model: {{model}}":"Response model: {{model}}","Response Time":"Response Time","Response time: {{duration}}":"Response time: {{duration}}","Response too large":"Response too large","Responses API Version":"Responses API Version","Responses WebSocket":"Responses WebSocket","Restore default pricing":"Restore default pricing","Restore defaults":"Restore defaults","Restore global Auto":"Restore global Auto","Restore notifications":"Restore notifications","Restrict user model request frequency (may impact high concurrency performance)":"Restrict user model request frequency (may impact high concurrency performance)","Result":"Result","Result not retained":"Result not retained","Retain last N days":"Retain last N days","Retain last N files":"Retain last N files","Retention days":"Retention days","Retrieve result":"Retrieve result","Retry":"Retry","rule_name cannot be empty":"rule_name cannot be empty","Retry budget":"Retry budget","Retry Chain":"Retry Chain","Retry Settings":"Retry Settings","Retry Suggestion":"Retry Suggestion","Retry Times":"Retry Times","Return a custom error immediately":"Return a custom error immediately","Return Custom Error":"Return Custom Error","Return data conforming to a JSON schema":"Return data conforming to a JSON schema","Return Error":"Return Error","Return per-token log probabilities":"Return per-token log probabilities","Return to dashboard":"Return to dashboard","Return to the original window to continue.":"Return to the original window to continue.","Return vector embeddings for inputs":"Return vector embeddings for inputs","Returned keys":"Returned keys","Returned token IDs":"Returned token IDs","Returned: {{processed}}":"Returned: {{processed}}","Reveal API key":"Reveal API key","Reveal full keys":"Reveal full keys","Reveal key":"Reveal key","Revenue":"Revenue","Review & initialize":"Review & initialize","Review and confirm the selected prices.":"Review and confirm the selected prices.","Review and sign out devices currently using your account.":"Review and sign out devices currently using your account.","Review and upgrade":"Review and upgrade","Review confirmation":"Review confirmation","Review every addition and overwrite before applying. Pricing, channels, and group access are not changed.":"Review every addition and overwrite before applying. Pricing, channels, and group access are not changed.","Review model rates before scaling traffic":"Review model rates before scaling traffic","Review selected changes":"Review selected changes","Review the affected records before applying. Pricing, channels, and model names are preserved.":"Review the affected records before applying. Pricing, channels, and model names are preserved.","Review the compatible domains and allowed websites, then save changes on the settings page.":"Review the compatible domains and allowed websites, then save changes on the settings page.","Review the model changes before applying. Unselected models stay unchanged and will not be ignored.":"Review the model changes before applying. Unselected models stay unchanged and will not be ignored.","Review the prices and billing expression. Confirming updates the draft; save model pricing to apply it.":"Review the prices and billing expression. Confirming updates the draft; save model pricing to apply it.","Review your payment details":"Review your payment details","Review your purchase details before proceeding.":"Review your purchase details before proceeding.","Revoke":"Revoke","Revoke session?":"Revoke session?","Revoke this access token? Scripts using it stop working immediately.":"Revoke this access token? Scripts using it stop working immediately.","Revoked access tokens":"Revoked access tokens","Revoked an access token":"Revoked an access token","Rewards will be added directly to your balance":"Rewards will be added directly to your balance","Rewrite callback URLs to the local server":"Rewrite callback URLs to the local server","Right to Left":"Right to Left","Role":"Role","Roleplay":"Roleplay","Root":"Root","Root Diagnostics":"Root Diagnostics","Rose Garden":"Rose Garden","Route":"Route","Route active":"Route active","Route Description":"Route Description","Route group":"Route group","Route is required":"Route is required","Route models must be unique for the same incoming path":"Route models must be unique for the same incoming path","Route, auth, and balance check in one place":"Route, auth, and balance check in one place","Routes":"Routes","Routes in this plan":"Routes in this plan","Routes with the same incoming path are matched by model. Leave the model scope empty only for the final fallback route.":"Routes with the same incoming path are matched by model. Leave the model scope empty only for the final fallback route.","Routes with the same incoming path are split by client model rules. Unmatched requests use the final fallback.":"Routes with the same incoming path are split by client model rules. Unmatched requests use the final fallback.","Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.":"Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.","Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.":"Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.","Routing & Mapping":"Routing & Mapping","Routing & Overrides":"Routing & Overrides","Routing Group":"Routing Group","Routing Reliability":"Routing Reliability","Routing Strategy":"Routing Strategy","Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.":"Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.","Rows per page":"Rows per page","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.","RSA Private Key (Production)":"RSA Private Key (Production)","RSA Private Key (Sandbox)":"RSA Private Key (Sandbox)","Rule":"Rule","Rule {{line}} is missing source field":"Rule {{line}} is missing source field","Rule {{line}} is missing target field":"Rule {{line}} is missing target field","Rule {{line}} is missing target path":"Rule {{line}} is missing target path","Rule {{line}} is missing value":"Rule {{line}} is missing value","Rule {{line}} pass_headers format is invalid":"Rule {{line}} pass_headers format is invalid","Rule {{line}} pass_headers is missing header names":"Rule {{line}} pass_headers is missing header names","Rule {{line}} prune_objects is missing conditions":"Rule {{line}} prune_objects is missing conditions","Rule {{line}} return_error requires a message field":"Rule {{line}} return_error requires a message field","Rule Description (optional)":"Rule Description (optional)","Rule editor mode":"Rule editor mode","Rule group":"Rule group","Rule override":"Rule override","rules":"rules","Rules":"Rules","Rules are checked in order. The first match determines the price.":"Rules are checked in order. The first match determines the price.","Rules can inherit or override these defaults.":"Rules can inherit or override these defaults.","Rules for {{group}}":"Rules for {{group}}","Rules JSON":"Rules JSON","Rules JSON must be an array":"Rules JSON must be an array","Rules match the original model value from the client request body.":"Rules match the original model value from the client request body.","Run and manage maintenance tasks and performance settings.":"Run and manage maintenance tasks and performance settings.","Run background checks using the selected test mode":"Run background checks using the selected test mode","Run dry run":"Run dry run","Run GC":"Run GC","Run tests for the selected models":"Run tests for the selected models","running":"running","Running":"Running","Running dry run":"Running dry run","Running requests":"Running requests","Runtime":"Runtime","Runtime status":"Runtime status","Runway":"Runway","s":"s","Safety Settings":"Safety Settings","Same as Local":"Same as Local","Sample interval: {{seconds}} seconds":"Sample interval: {{seconds}} seconds","Sampling temperature; lower is more deterministic":"Sampling temperature; lower is more deterministic","Sandbox":"Sandbox","Sandbox mode":"Sandbox mode","Save":"Save","Save & Submit":"Save & Submit","Save all settings":"Save all settings","Save as a file":"Save as a file","Save as Markdown":"Save as Markdown","Save as TXT":"Save as TXT","Save Backup Codes":"Save Backup Codes","Save changes":"Save changes","Save Changes":"Save Changes","Save chat settings":"Save chat settings","Save check-in settings":"Save check-in settings","Save Creem settings":"Save Creem settings","Save drawing settings":"Save drawing settings","Save Epay settings":"Save Epay settings","Save failed":"Save failed","Save failed, please retry":"Save failed, please retry","Save general settings":"Save general settings","Save group ratios":"Save group ratios","Save group settings":"Save group settings","Save io.net settings":"Save io.net settings","Save log settings":"Save log settings","Save metadata":"Save metadata","Save model prices":"Save model prices","Save model ratios":"Save model ratios","Save Models":"Save Models","Save monitoring rules":"Save monitoring rules","Save navigation":"Save navigation","Save notice":"Save notice","Save or discard pricing changes before renaming metadata.":"Save or discard pricing changes before renaming metadata.","Save Preferences":"Save Preferences","Save preview":"Save preview","Save rate limits":"Save rate limits","Save redemption codes":"Save redemption codes","Save sensitive words":"Save sensitive words","Save Settings":"Save Settings","Save sidebar modules":"Save sidebar modules","Save SSRF settings":"Save SSRF settings","Save Stripe settings":"Save Stripe settings","Save these backup codes in a safe place. Each code can only be used once.":"Save these backup codes in a safe place. Each code can only be used once.","Save these codes in a safe place. Each code can only be used once.":"Save these codes in a safe place. Each code can only be used once.","Save token limits":"Save token limits","Save tool prices":"Save tool prices","Save Waffo Pancake settings":"Save Waffo Pancake settings","Save Worker settings":"Save Worker settings","Saved successfully":"Saved successfully","Saving permission changes requires security verification":"Saving permission changes requires security verification","Saving...":"Saving...","Scan QR Code":"Scan QR Code","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"Scan the QR code to follow the official account and send the message “验证码” to receive your verification code.","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)","Scenario Templates":"Scenario Templates","Scheduled channel tests":"Scheduled channel tests","Scheduled full test":"Scheduled full test","Scheduled full test probes non-manually-disabled channels; passive recovery only checks auto-disabled channels after real request failures.":"Scheduled full test probes non-manually-disabled channels; passive recovery only checks auto-disabled channels after real request failures.","Scheduled or bulk health checks can disable a channel when this duration is exceeded, if both global and channel auto-disable are enabled.":"Scheduled or bulk health checks can disable a channel when this duration is exceeded, if both global and channel auto-disable are enabled.","Scheduled recovery is off. Bulk channel tests can still re-enable automatically disabled channels.":"Scheduled recovery is off. Bulk channel tests can still re-enable automatically disabled channels.","Scheduled test options":"Scheduled test options","scheduling controls":"scheduling controls","Science":"Science","Scope":"Scope","Scopes":"Scopes","Search":"Search","Search by name or URL...":"Search by name or URL...","Select at least one valid permission.":"Select at least one valid permission.","Search by order number...":"Search by order number...","Search channel type...":"Search channel type...","Search chat presets...":"Search chat presets...","Search colors...":"Search colors...","Search conflicting models or fields":"Search conflicting models or fields","Search deployments...":"Search deployments...","Search feature in development":"Search feature in development","Search group names...":"Search group names...","Search groups by name or description":"Search groups by name or description","Search groups...":"Search groups...","Search icons or enter an icon key":"Search icons or enter an icon key","Search method identifiers...":"Search method identifiers...","Search missing models":"Search missing models","Search model name, provider, endpoint, or tag...":"Search model name, provider, endpoint, or tag...","Search model name...":"Search model name...","Search models":"Search models","Search models or fields...":"Search models or fields...","Search models...":"Search models...","Search payment methods...":"Search payment methods...","Search payment type keys...":"Search payment type keys...","Search payment types...":"Search payment types...","Search products...":"Search products...","Search providers, plugins, or type numbers":"Search providers, plugins, or type numbers","Search rules...":"Search rules...","Search tags...":"Search tags...","Search the public web at inference time":"Search the public web at inference time","Search vendor names or descriptions":"Search vendor names or descriptions","Search vendors":"Search vendors","Search vendors...":"Search vendors...","Search, add, and edit model vendors.":"Search, add, and edit model vendors.","Search...":"Search...","second":"second","Second":"Second","seconds":"seconds","Secret env (JSON object)":"Secret env (JSON object)","Secret environment variables (JSON)":"Secret environment variables (JSON)","Secret Key":"Secret Key","Secure & Reliable":"Secure & Reliable","Secured":"Secured","Security":"Security","Security & Access":"Security & Access","Security & Limits":"Security & Limits","Security Check":"Security Check","Security verification":"Security verification","Security verification has expired. Please verify again.":"Security verification has expired. Please verify again.","Security verification is no longer valid. Please verify again.":"Security verification is no longer valid. Please verify again.","Seed":"Seed","Select":"Select","Select {{name}}":"Select {{name}}","Select a color":"Select a color","Select a complete plan, then keep only the routes you need.":"Select a complete plan, then keep only the routes you need.","Select a concrete model to configure pricing. Metadata matching does not propagate prices.":"Select a concrete model to configure pricing. Metadata matching does not propagate prices.","Select a group":"Select a group","Select a group type":"Select a group type","Select a model to edit pricing":"Select a model to edit pricing","Select a preset...":"Select a preset...","Select a price source and review pricing changes. Model metadata and channel access are not changed.":"Select a price source and review pricing changes. Model metadata and channel access are not changed.","Select a product":"Select a product","Select a role":"Select a role","Select a rule to edit.":"Select a rule to edit.","Select a saved vendor.":"Select a saved vendor.","Select a store":"Select a store","Select a suggested icon or keep an existing advanced icon key.":"Select a suggested icon or keep an existing advanced icon key.","Select a timestamp before clearing logs.":"Select a timestamp before clearing logs.","Select a usage mode to continue":"Select a usage mode to continue","Select a verification method first":"Select a verification method first","Select a version to compare":"Select a version to compare","Select active subscription plan":"Select active subscription plan","Select all":"Select all","Select all (filtered)":"Select all (filtered)","Select all changed fields":"Select all changed fields","Select all matching models":"Select all matching models","Select all models":"Select all models","Select all models in {{category}}":"Select all models in {{category}}","Select all prices from {{source}}":"Select all prices from {{source}}","Select all syncable models (all pages, {{count}})":"Select all syncable models (all pages, {{count}})","Select All Visible":"Select All Visible","Select an operation mode and enter the amount":"Select an operation mode and enter the amount","Select announcement type":"Select announcement type","Select at least one Auto group or restore global Auto.":"Select at least one Auto group or restore global Auto.","Select at least one field to overwrite.":"Select at least one field to overwrite.","Select at least one model to preview mappings.":"Select at least one model to preview mappings.","Select at least one permission":"Select at least one permission","Select at least one route":"Select at least one route","Select at least one target model":"Select at least one target model","Select at most {{max}} Auto groups":"Select at most {{max}} Auto groups","Select body font":"Select body font","Select border radius":"Select border radius","Select channel type":"Select channel type","Select color preset":"Select color preset","Select content width":"Select content width","Select corner radius":"Select corner radius","Select currency":"Select currency","Select date":"Select date","Select default chart":"Select default chart","Select default range":"Select default range","Select display mode":"Select display mode","Select end time":"Select end time","Select from presets or type custom identifier.":"Select from presets or type custom identifier.","Select granularity":"Select granularity","Select groups (leave empty to keep current)":"Select groups (leave empty to keep current)","Select interface density":"Select interface density","Select items...":"Select items...","Select key format":"Select key format","Select language":"Select language","Select Language":"Select Language","Select layout style":"Select layout style","Select locations":"Select locations","Select model":"Select model","Select Model":"Select Model","Select model {{model}}":"Select model {{model}}","Select models":"Select models","Select models (empty for allow all)":"Select models (empty for allow all)","Select models and apply to channel models list.":"Select models and apply to channel models list.","Select models or add custom ones":"Select models or add custom ones","Select models to process. Unselected \\"add\\" models will be ignored.":"Select models to process. Unselected \\"add\\" models will be ignored.","Select models to run batch tests.":"Select models to run batch tests.","Select or enter color value":"Select or enter color value","Select or enter method identifier":"Select or enter method identifier","Select or enter model name":"Select or enter model name","Select or enter payment type":"Select or enter payment type","Select or enter payment type key":"Select or enter payment type key","Select payment method":"Select payment method","Select preset or enter custom CSS color value.":"Select preset or enter custom CSS color value.","Select price for {{model}} from {{source}}":"Select price for {{model}} from {{source}}","Select price sources":"Select price sources","Select publish date":"Select publish date","Select requirement":"Select requirement","Select row":"Select row","Select row {{number}}":"Select row {{number}}","Select sidebar style":"Select sidebar style","Select site direction":"Select site direction","Select start time":"Select start time","Select subscription plan":"Select subscription plan","Select successful models ({{count}})":"Select successful models ({{count}})","Select Sync Channels":"Select Sync Channels","Select sync channels to compare prices":"Select sync channels to compare prices","Select sync channels to compare ratios":"Select sync channels to compare ratios","Select Sync Source":"Select Sync Source","Select syncable models on this page":"Select syncable models on this page","Select task plugin":"Select task plugin","Select the API endpoint region":"Select the API endpoint region","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.","Select the models to keep in this channel.":"Select the models to keep in this channel.","Select the task plugins installed on the upstream gateway":"Select the task plugins installed on the upstream gateway","Settings updated":"Settings updated","Select theme preference":"Select theme preference","Settled by the task usage expression":"Settled by the task usage expression","Select theme preset":"Select theme preset","Select time granularity":"Select time granularity","Select vendor":"Select vendor","Select version":"Select version","Selectable groups":"Selectable groups","selected":"selected","Selected {{count}}":"Selected {{count}}","Selected {{selected}} / {{total}}":"Selected {{selected}} / {{total}}","selected channel(s). Leave empty to remove tag.":"selected channel(s). Leave empty to remove tag.","Selected conflicts were overwritten successfully.":"Selected conflicts were overwritten successfully.","Selected names are":"Selected names are","Selected nodes":"Selected nodes","Selected when creating a token and used as the default billing group for API calls.":"Selected when creating a token and used as the default billing group for API calls.","Selecting a plugin fills its declared models and default base URL.":"Selecting a plugin fills its declared models and default base URL.","Self-Use Mode":"Self-Use Mode","Send":"Send","Send a request":"Send a request","Send chat completions to the OpenAI-compatible /v1/chat/completions instead of the native Ollama /api/chat":"Send chat completions to the OpenAI-compatible /v1/chat/completions instead of the native Ollama /api/chat","Send code":"Send code","Send reset email":"Send reset email","Send the original request body to upstream without conversion. Only available for native forwarding routes.":"Send the original request body to upstream without conversion. Only available for native forwarding routes.","Sending...":"Sending...","Sensitive channel settings are read-only for your account.":"Sensitive channel settings are read-only for your account.","Sensitive Words":"Sensitive Words","Sent the API key to FluentRead.":"Sent the API key to FluentRead.","Separate image/audio prices are enabled.":"Separate image/audio prices are enabled.","Separate multiple rules with English commas. For regex patterns that need commas, switch to JSON Text.":"Separate multiple rules with English commas. For regex patterns that need commas, switch to JSON Text.","Separate several values with commas":"Separate several values with commas","Serve multiple users or teams with billing and quota control.":"Serve multiple users or teams with billing and quota control.","Server Address":"Server Address","Server IP":"Server IP","Server Log Management":"Server Log Management","Server logging is not enabled (log directory not configured)":"Server logging is not enabled (log directory not configured)","Server Token":"Server Token","Service account JSON file(s)":"Service account JSON file(s)","Session":"Session","Session behavior":"Session behavior","Session behavior prevents switching channels":"Session behavior prevents switching channels","Session defaults":"Session defaults","Session expired!":"Session expired!","Session expired?":"Session expired?","Session rule":"Session rule","Session rule matched":"Session rule matched","Session rules":"Session rules","Session rules table":"Session rules table","Session signed out":"Session signed out","Sessions & Access":"Sessions & Access","Sign in to bind an account":"Sign in to bind an account","Sessions and retries":"Sessions and retries","Set":"Set","Set a discount rate for a specific recharge amount threshold.":"Set a discount rate for a specific recharge amount threshold.","Set a secure password (min. 8 characters)":"Set a secure password (min. 8 characters)","Set a tag for":"Set a tag for","Set API key access restrictions":"Set API key access restrictions","Set API key basic information":"Set API key basic information","Set default ranges and charts for model analytics.":"Set default ranges and charts for model analytics.","Set Field":"Set Field","Set filters to customize your dashboard statistics and charts.":"Set filters to customize your dashboard statistics and charts.","Set filters to narrow down your log search results.":"Set filters to narrow down your log search results.","Set Header":"Set Header","Set Password":"Set Password","Set prices for each set of conditions below. Cost = usage × unit price + additional charge. Token prices are per million tokens.":"Set prices for each set of conditions below. Cost = usage × unit price + additional charge. Token prices are per million tokens.","Set prices for each set of conditions below. Cost = usage × unit price + fixed fee. Token prices are per million tokens.":"Set prices for each set of conditions below. Cost = usage × unit price + fixed fee. Token prices are per million tokens.","Set Project to io.cloud when creating/selecting key":"Set Project to io.cloud when creating/selecting key","Set quota amount and limits":"Set quota amount and limits","Set Request Header":"Set Request Header","Set runtime request header: override entire value, or manipulate comma-separated tokens":"Set runtime request header: override entire value, or manipulate comma-separated tokens","Set separate prices for cache reads and writes.":"Set separate prices for cache reads and writes.","Set separately for this provider":"Set separately for this provider","Set Tag":"Set Tag","Set tag for selected channels":"Set tag for selected channels","Set the language used across the interface":"Set the language used across the interface","Set the user\'s role (cannot be Root)":"Set the user\'s role (cannot be Root)","Set the website where users will use their Passkeys.":"Set the website where users will use their Passkeys.","Set these values in the provider application before enabling login.":"Set these values in the provider application before enabling login.","Set up model redirects":"Set up model redirects","Set up redirect":"Set up redirect","Setting Key":"Setting Key","Setting saved":"Setting saved","Size {{size}}":"Size {{size}}","Setting up 2FA...":"Setting up 2FA...","Setting updated successfully":"Setting updated successfully","Settings":"Settings","Settings & Preferences":"Settings & Preferences","Settings updated successfully":"Settings updated successfully","Setup expired. Scan the new QR code and save the new backup codes.":"Setup expired. Scan the new QR code and save the new backup codes.","Setup guide":"Setup guide","Setup guide complete":"Setup guide complete","Setup guide is collapsed. Expand it anytime.":"Setup guide is collapsed. Expand it anytime.","Setup Instructions":"Setup Instructions","Setup progress: {{completed}}/{{total}}":"Setup progress: {{completed}}/{{total}}","Setup Two-Factor Authentication":"Setup Two-Factor Authentication","Setup: three groups and one override matrix cell.":"Setup: three groups and one override matrix cell.","Setup: three groups and one override rule.":"Setup: three groups and one override rule.","SGLang":"SGLang","SMTP server is not configured":"SMTP server is not configured","SGLang API key, or EMPTY if authentication is disabled":"SGLang API key, or EMPTY if authentication is disabled","SGLang channel base URL cannot be empty":"SGLang channel base URL cannot be empty","SGLang server address, without /v1":"SGLang server address, without /v1","SGLang status":"SGLang status","Some files could not be deleted ({{failed}}/{{total}})":"Some files could not be deleted ({{failed}}/{{total}})","Share":"Share","Share your link and earn rewards":"Share your link and earn rewards","Shared configuration for all payment gateways":"Shared configuration for all payment gateways","Shorten":"Shorten","Show":"Show","Show All":"Show All","Show all providers including unbound":"Show all providers including unbound","Show all tags":"Show all tags","Show in model catalog":"Show in model catalog","Show in model square":"Show in model square","Show only bound providers":"Show only bound providers","Show or hide flow columns":"Show or hide flow columns","Show preview":"Show preview","Show prices in currency instead of quota.":"Show prices in currency instead of quota.","Show selected models in model square":"Show selected models in model square","Show sensitive data":"Show sensitive data","Show setup guide":"Show setup guide","Show source":"Show source","Show token usage statistics in the UI":"Show token usage statistics in the UI","Showcase core capabilities with demo credentials and limited access.":"Showcase core capabilities with demo credentials and limited access.","Showing":"Showing","Showing {{shown}} of {{total}} mappings":"Showing {{shown}} of {{total}} mappings","showing •":"showing •","Showing the last successfully checked release.":"Showing the last successfully checked release.","Shown":"Shown","Shown {{count}} models in model square":"Shown {{count}} models in model square","Sidebar":"Sidebar","Sidebar collapsed by default for new users":"Sidebar collapsed by default for new users","Sidebar modules":"Sidebar modules","Sidebar Personal Settings":"Sidebar Personal Settings","Sign in":"Sign in","Sign In":"Sign In","Sign in now":"Sign in now","Sign in required":"Sign in required","Sign in with Passkey":"Sign in with Passkey","Sign out":"Sign out","Sign out other sessions":"Sign out other sessions","Sign out other sessions?":"Sign out other sessions?","Sign out others":"Sign out others","Sign out this device?":"Sign out this device?","Sign up":"Sign up","Signed in":"Signed in","Signed in successfully!":"Signed in successfully!","Signed in via WeChat":"Signed in via WeChat","Signed in with Passkey":"Signed in with Passkey","Signed out":"Signed out","Significant outages detected":"Significant outages detected","Signing you in with {{provider}}":"Signing you in with {{provider}}","SiliconFlow":"SiliconFlow","Simple":"Simple","Simple mode only returns message; status code and error type use system defaults.":"Simple mode only returns message; status code and error type use system defaults.","Simple mode: prune objects by type, e.g. redacted_thinking.":"Simple mode: prune objects by type, e.g. redacted_thinking.","Simulate a request including request rules and excluding group multipliers. Empty objects represent an empty request.":"Simulate a request including request rules and excluding group multipliers. Empty objects represent an empty request.","Simulated request body":"Simulated request body","Simulated request cost":"Simulated request cost","Simulated request headers":"Simulated request headers","Sort by priority to drag channels":"Sort by priority to drag channels","Sort channels by":"Sort channels by","State parameter is empty or mismatched":"State parameter is empty or mismatched","Simulation context is missing.":"Simulation context is missing.","Simulation time":"Simulation time","Since previous sample":"Since previous sample","Single .js file, up to 8 MiB. Its source is shown below before upload.":"Single .js file, up to 8 MiB. Its source is shown below before upload.","Single Key":"Single Key","Site & Branding":"Site & Branding","Site currency ({{currency}})":"Site currency ({{currency}})","Site Key":"Site Key","Site URL":"Site URL","Size:":"Size:","sk_xxx or rk_xxx":"sk_xxx or rk_xxx","Skip async task polling delay":"Skip async task polling delay","Skip pre-consumption when the wallet balance and limited API key balance both exceed this amount. Set to 0 to always pre-consume. Subscriptions and asynchronous tasks always reserve quota.":"Skip pre-consumption when the wallet balance and limited API key balance both exceed this amount. Set to 0 to always pre-consume. Subscriptions and asynchronous tasks always reserve quota.","Skip retry on failure":"Skip retry on failure","Skip SMTP TLS certificate verification":"Skip SMTP TLS certificate verification","Skip to Main":"Skip to Main","Skip Upstream TLS Verification":"Skip Upstream TLS Verification","Slug":"Slug","Slug can only contain letters, numbers, hyphens, and underscores":"Slug can only contain letters, numbers, hyphens, and underscores","Slug is required":"Slug is required","Slug must be less than 100 characters":"Slug must be less than 100 characters","Smallest USD amount users can recharge (Epay)":"Smallest USD amount users can recharge (Epay)","SMTP encryption":"SMTP encryption","SMTP Host":"SMTP Host","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"Soft Errors","Some channels failed: {{errorMsg}}":"Some channels failed: {{errorMsg}}","Some matching models are hidden or have no available channel.":"Some matching models are hidden or have no available channel.","Some plugin information could not be read":"Some plugin information could not be read","Something went wrong!":"Something went wrong!","Sonnet Model":"Sonnet Model","Sora":"Sora","Sort":"Sort","Sort by ID":"Sort by ID","Sort Order":"Sort Order","Sort priority":"Sort priority","Source":"Source","Source diff":"Source diff","Source Endpoint":"Source Endpoint","Source Field":"Source Field","Source Header":"Source Header","Source ID":"Source ID","Source name":"Source name","Source vendors":"Source vendors","Source vendors will be deleted after their model assignments are moved. The target vendor’s details are preserved.":"Source vendors will be deleted after their model assignments are moved. The target vendor’s details are preserved.","Source: global settings. Changes take effect after saving.":"Source: global settings. Changes take effect after saving.","sources":"sources","Space-separated OAuth scopes":"Space-separated OAuth scopes","Spark model version, e.g., v2.1 (version number in API URL)":"Spark model version, e.g., v2.1 (version number in API URL)","Spec":"Spec","Special billing expression":"Special billing expression","Stripe is not configured or key is invalid":"Stripe is not configured or key is invalid","Special group":"Special group","Stripe webhook is not configured":"Stripe webhook is not configured","Special ratio rules":"Special ratio rules","StripePriceId is not configured for this plan":"StripePriceId is not configured for this plan","Special ratios override the token group ratio for specific user group and token group combinations.":"Special ratios override the token group ratio for specific user group and token group combinations.","Special usable group rules":"Special usable group rules","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"Special usable group rules can add, remove, or append selectable token groups for a specific user group.","Special usable group rules make extra token groups visible to, or hide default ones from, users of a specific user group.":"Special usable group rules make extra token groups visible to, or hide default ones from, users of a specific user group.","Special visibility rules":"Special visibility rules","Specified time":"Specified time","Speculative decoding acceptance rate":"Speculative decoding acceptance rate","Spend limited":"Spend limited","Spread HTTP/2 traffic across multiple reusable connections to the same upstream origin (1-8).":"Spread HTTP/2 traffic across multiple reusable connections to the same upstream origin (1-8).","SQLite stores all data in a single file. Make sure that file is persisted when running in containers.":"SQLite stores all data in a single file. Make sure that file is persisted when running in containers.","SSL/TLS":"SSL/TLS","SSRF Protection":"SSRF Protection","stale":"stale","Standard":"Standard","Standard price":"Standard price","Standard protocol interfaces":"Standard protocol interfaces","Start":"Start","Start ≤ end: within the day; start > end: across midnight":"Start ≤ end: within the day; start > end: across midnight","Subscription plan is not enabled":"Subscription plan is not enabled","Subscription plan title cannot be empty":"Subscription plan title cannot be empty","Start a conversation to see messages here":"Start a conversation to see messages here","Start a playground chat":"Start a playground chat","Start again":"Start again","Subscription purchased with balance, plan: {{plan}}, payment amount: {{amount}}, quota deducted: {{quota}}":"Subscription purchased with balance, plan: {{plan}}, payment amount: {{amount}}, quota deducted: {{quota}}","Subscription purchased, plan: {{plan}}, payment amount: {{amount}}, payment method: {{method}}":"Subscription purchased, plan: {{plan}}, payment amount: {{amount}}, payment method: {{method}}","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.","Start for free with generous limits. No credit card required.":"Start for free with generous limits. No credit card required.","Start SGLang with --enable-metrics to expose Prometheus metrics.":"Start SGLang with --enable-metrics to expose Prometheus metrics.","Start Time":"Start Time","Start weekday":"Start weekday","Started":"Started","Started two-factor authentication setup":"Started two-factor authentication setup","STARTTLS":"STARTTLS","State changed":"State changed","State unchanged: {{status}}":"State unchanged: {{status}}","Static page describing the platform.":"Static page describing the platform.","Statistical count":"Statistical count","Statistical quota":"Statistical quota","Statistical tokens":"Statistical tokens","Statistics reset":"Statistics reset","Status":"Status","Status & Sync":"Status & Sync","Status change":"Status change","Status Code":"Status Code","Status Code Mapping":"Status Code Mapping","Status code mapping must use valid HTTP status codes":"Status code mapping must use valid HTTP status codes","Status is outside the retry rules":"Status is outside the retry rules","Status matches the retry rules":"Status matches the retry rules","Status Page Slug":"Status Page Slug","Status short":"Status","Status:":"Status:","Stay":"Stay","Stay tuned though!":"Stay tuned though!","Steer behaviour with a system instruction":"Steer behaviour with a system instruction","Step":"Step","Step {{current}} of {{total}}: {{label}}":"Step {{current}} of {{total}}: {{label}}","Still pending addition":"Still pending addition","Still pending removal":"Still pending removal","Stop":"Stop","Stop Retry":"Stop Retry","Stop testing":"Stop testing","Stopping batch test...":"Stopping batch test...","Stopping...":"Stopping...","Storage":"Storage","Store":"Store","Store + product created":"Store + product created","Store ID":"Store ID","Store ID is required":"Store ID is required","Stored configuration with effective defaults":"Stored configuration with effective defaults","Stored value is not echoed back for security":"Stored value is not echoed back for security","stream":"stream","Stream":"Stream","Stream did not complete successfully":"Stream did not complete successfully","Stream Mode":"Stream Mode","Stream Status":"Stream Status","Stream tokens incrementally as they are generated":"Stream tokens incrementally as they are generated","Stream tokens via Server-Sent Events":"Stream tokens via Server-Sent Events","Streaming":"Streaming","String Replace":"String Replace","Strip {{affix}}":"Strip {{affix}}","Strip prefix":"Strip prefix","Strip suffix":"Strip suffix","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Stripe API key (leave blank unless updating)","Stripe Dashboard":"Stripe Dashboard","Stripe Gateway":"Stripe Gateway","Stripe product price ID":"Stripe product price ID","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem requires creating products on the third-party platform and entering the ID","Structured output":"Structured output","Submit":"Submit","Submit directly":"Submit directly","Submit request":"Submit request","Submit Result":"Submit Result","Submit Time":"Submit Time","Submitted":"Submitted","Submitting":"Submitting","Submitting...":"Submitting...","Submodel":"Submodel","Subscribe Now":"Subscribe Now","Subscribe to a plan for model access":"Subscribe to a plan for model access","Subscription":"Subscription","Subscription Billing":"Subscription Billing","Subscription First":"Subscription First","Subscription Management":"Subscription Management","Subscription Only":"Subscription Only","System error: {{error}}":"System error: {{error}}","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.","Subscription Plans":"Subscription Plans","System initialized successfully":"System initialized successfully","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).","Subscription purchased successfully":"Subscription purchased successfully","Subscriptions":"Subscriptions","Subtract":"Subtract","succeeded":"succeeded","Success":"Success","Success rate":"Success rate","Success rate excludes business rejections and includes the current partial hour.":"Success rate excludes business rejections and includes the current partial hour.","Successful scheduled or bulk checks can restore automatically disabled channels. Manually disabled channels stay disabled.":"Successful scheduled or bulk checks can restore automatically disabled channels. Manually disabled channels stay disabled.","Successfully created {{count}} API Key(s)":"Successfully created {{count}} API Key(s)","Successfully created {{count}} redemption codes":"Successfully created {{count}} redemption codes","Successfully deleted {{count}} API key(s)":"Successfully deleted {{count}} API key(s)","Successfully deleted {{count}} invalid redemption codes":"Successfully deleted {{count}} invalid redemption codes","Successfully deleted {{count}} model(s)":"Successfully deleted {{count}} model(s)","Successfully deleted {{count}} redemption codes":"Successfully deleted {{count}} redemption codes","Successfully disabled {{count}} model(s)":"Successfully disabled {{count}} model(s)","Successfully enabled {{count}} model(s)":"Successfully enabled {{count}} model(s)","Suffix":"Suffix","Suffix Match":"Suffix Match","Suggested rules":"Suggested rules","Summarize text":"Summarize text","SunoAPI":"SunoAPI","Sunset Glow":"Sunset Glow","Super admin":"Super admin","Super Admin":"Super Admin","Tag cannot be empty":"Tag cannot be empty","Super Large":"Super Large","Support for high concurrency with automatic load balancing":"Support for high concurrency with automatic load balancing","Supported Applications":"Supported Applications","Supported endpoints":"Supported endpoints","Supported Imagine Models":"Supported Imagine Models","Supported interfaces":"Supported interfaces","Supported modalities":"Supported modalities","Supported models":"Supported models","Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.":"Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.","Supported parameters":"Supported parameters","Supported variables":"Supported variables","Supports `-thinking`, `-thinking-":"Supports `-thinking`, `-thinking-","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.","Supports plugin extensions":"Supports plugin extensions","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.","Surprise me":"Surprise me","Sustained tokens per second":"Sustained tokens per second","Swap Face":"Swap Face","Switch affinity on success":"Switch affinity on success","Switch to JSON":"Switch to JSON","Switch to Visual":"Switch to Visual","Switch to visual editor":"Switch to visual editor","Switch to visual mode to add rules or apply templates.":"Switch to visual mode to add rules or apply templates.","Switch to visual pricing?":"Switch to visual pricing?","Switching regenerates the expression from the price table and replaces its original formatting and tier names. Changes apply only after saving.":"Switching regenerates the expression from the price table and replaces its original formatting and tier names. Changes apply only after saving.","Sync":"Sync","Sync Endpoint":"Sync Endpoint","Sync Endpoints":"Sync Endpoints","Sync Fields":"Sync Fields","Sync from the public upstream metadata repository.":"Sync from the public upstream metadata repository.","Sync metadata":"Sync metadata","Sync missing metadata":"Sync missing metadata","Sync model metadata":"Sync model metadata","Sync model pricing":"Sync model pricing","Sync models":"Sync models","Sync Now":"Sync Now","Task timed out":"Task timed out","Task timed out (a task left by the old system is not refunded; contact the administrator)":"Task timed out (a task left by the old system is not refunded; contact the administrator)","Sync policy":"Sync policy","Sync pricing":"Sync pricing","Sync results":"Sync results","Sync scope":"Sync scope","Sync steps":"Sync steps","Sync this model with official upstream":"Sync this model with official upstream","Sync Upstream":"Sync Upstream","Sync Upstream Models":"Sync Upstream Models","Synced upstream models":"Synced upstream models","Synchronize models and vendors from an upstream source":"Synchronize models and vendors from an upstream source","Synchronous":"Synchronous","Telegram ID is empty!":"Telegram ID is empty!","Syncing prices, please wait...":"Syncing prices, please wait...","Syncing...":"Syncing...","System":"System","System Administration":"System Administration","System Announcements":"System Announcements","System Behavior":"System Behavior","System constraint":"System constraint","System data statistics":"System data statistics","System default":"System default","System Info":"System Info","System Information":"System Information","System initialized successfully! Redirecting…":"System initialized successfully! Redirecting…","System logo":"System logo","System maintenance":"System maintenance","System Memory":"System Memory","System Memory Stats":"System Memory Stats","System Name":"System Name","System name is required":"System name is required","System Notice":"System Notice","System Performance Monitoring":"System Performance Monitoring","System prompt":"System prompt","System Prompt":"System Prompt","System Prompt Concatenation":"System Prompt Concatenation","System Prompt Override":"System Prompt Override","System retry exclusion":"System retry exclusion","System settings":"System settings","System Settings":"System Settings","System setup wizard":"System setup wizard","System task records":"System task records","System Tasks":"System Tasks","System updates":"System updates","System updates, current version: {{version}}":"System updates, current version: {{version}}","System Version":"System Version","Table view":"Table view","Tag":"Tag","Tag Aggregate":"Tag Aggregate","Tag Mode":"Tag Mode","Tag Name":"Tag Name","Tag set successfully":"Tag set successfully","Tag updated successfully":"Tag updated successfully","The access token lacks the required permission: {{scope}}":"The access token lacks the required permission: {{scope}}","Tag:":"Tag:","Tags":"Tags","Take photo":"Take photo","Take screenshot":"Take screenshot","Target":"Target","Target Endpoint":"Target Endpoint","Target Field":"Target Field","Target Field Path":"Target Field Path","Target group":"Target group","Target Header":"Target Header","Target not recorded":"Target not recorded","Target Path (optional)":"Target Path (optional)","Target User":"Target User","Target user not found":"Target user not found","Target username":"Target username","Target vendor":"Target vendor","The Classic frontend has been removed. The theme can only be set to default":"The Classic frontend has been removed. The theme can only be set to default","Task":"Task","Task billing":"Task billing","The current sign-in method does not support security verification":"The current sign-in method does not support security verification","Task Details":"Task Details","Task failed":"Task failed","Task History":"Task History","Task ID":"Task ID","Task ID:":"Task ID:","Task logs":"Task logs","Task Logs":"Task Logs","Task Plugin":"Task Plugin","Task plugin *":"Task plugin *","Task plugin setting updated":"Task plugin setting updated","Task plugins":"Task plugins","Task Plugins":"Task Plugins","The longest log time range must be at least 1 day":"The longest log time range must be at least 1 day","The longest time range a user can view at once in the logs and on the dashboard, and the longest range any export can cover.":"The longest time range a user can view at once in the logs and on the dashboard, and the longest range any export can cover.","Task pricing":"Task pricing","Task pricing must be converted manually using the task usage schema.":"Task pricing must be converted manually using the task usage schema.","Task pricing not configured":"Task pricing not configured","Task usage data is required to estimate this expression. Check the model\'s task plugin configuration.":"Task usage data is required to estimate this expression. Check the model\'s task plugin configuration.","Task usage metadata is unavailable. Pricing details cannot be displayed.":"Task usage metadata is unavailable. Pricing details cannot be displayed.","Task usage prices are USD per declared unit. They are not token prices and are not divided by one million.":"Task usage prices are USD per declared unit. They are not token prices and are not divided by one million.","Task usage prices are USD per declared unit. Token fields use dollars per 1M tokens; the editor writes / 1000000 into the expression. Other units are not divided by one million.":"Task usage prices are USD per declared unit. Token fields use dollars per 1M tokens; the editor writes / 1000000 into the expression. Other units are not divided by one million.","Tasks currently pending or running.":"Tasks currently pending or running.","Team Collaboration":"Team Collaboration","The ratio config API is not enabled":"The ratio config API is not enabled","Technical Support":"Technical Support","Telegram":"Telegram","Telegram authorization failed. Please try again.":"Telegram authorization failed. Please try again.","The search pattern can contain at most 2 % wildcards":"The search pattern can contain at most 2 % wildcards","The search pattern cannot contain consecutive % wildcards":"The search pattern cannot contain consecutive % wildcards","Telegram binding failed. Please try again.":"Telegram binding failed. Please try again.","Telegram binding is disabled.":"Telegram binding is disabled.","Telegram login has changed. Reload the page and start Telegram OAuth again.":"Telegram login has changed. Reload the page and start Telegram OAuth again.","Telegram Login Widget":"Telegram Login Widget","Telegram OAuth Client ID from BotFather":"Telegram OAuth Client ID from BotFather","Telegram OAuth Client Secret from BotFather":"Telegram OAuth Client Secret from BotFather","Telegram OAuth is not configured or enabled. Please contact your administrator.":"Telegram OAuth is not configured or enabled. Please contact your administrator.","Temperature":"Temperature","Template":"Template","The system is already initialized":"The system is already initialized","Template variables:":"Template variables:","Templates":"Templates","Templates appended":"Templates appended","The time range cannot exceed {{days}} days":"The time range cannot exceed {{days}} days","Tencent":"Tencent","Termination requested":"Termination requested","Test":"Test","Test {{count}} matching models":"Test {{count}} matching models","Test {{count}} selected":"Test {{count}} selected","Test a model with a starter prompt, or write your own request below.":"Test a model with a starter prompt, or write your own request below.","Test all {{count}} models":"Test all {{count}} models","Test All Channels":"Test All Channels","Test Channel Connection":"Test Channel Connection","Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.":"Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.","Test Connection":"Test Connection","Test connectivity for:":"Test connectivity for:","Test failed":"Test failed","Test interval (minutes)":"Test interval (minutes)","Test Latency":"Test Latency","Test Mode":"Test Mode","Test Model":"Test Model","Test models and prompts from the browser":"Test models and prompts from the browser","Test selected models":"Test selected models","Testing all enabled channels started. Please refresh to see results.":"Testing all enabled channels started. Please refresh to see results.","Testing...":"Testing...","Text":"Text","Text description of the desired image":"Text description of the desired image","Text description of the desired video":"Text description of the desired video","Text Input":"Text Input","Text or array of texts to embed":"Text or array of texts to embed","Text Output":"Text Output","Text to Video":"Text to Video","Text-only requests":"Text-only requests","The access token lacks the required permission":"The access token lacks the required permission","The action details are invalid.":"The action details are invalid.","The admin configured three groups and one special ratio rule:":"The admin configured three groups and one special ratio rule:","The admin wants vip users to pay even less when they use premium. That needs an override rule: in the override matrix, set the cell at row vip, column premium to 0.3.":"The admin wants vip users to pay even less when they use premium. That needs an override rule: in the override matrix, set the cell at row vip, column premium to 0.3.","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"The administrator account is already initialized. You can keep your existing credentials and continue to the next step.","The administrator configured an external link for this document.":"The administrator configured an external link for this document.","The administrator has not configured a privacy policy yet.":"The administrator has not configured a privacy policy yet.","The administrator has not configured a user agreement yet.":"The administrator has not configured a user agreement yet.","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.","The API key used for the requests":"The API key used for the requests","The authenticator code is incorrect.":"The authenticator code is incorrect.","The binding will complete automatically after authorization":"The binding will complete automatically after authorization","This API is deprecated":"This API is deprecated","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.","The button fills in this website and keeps any existing website addresses. Save changes on the settings page to apply.":"The button fills in this website and keeps any existing website addresses. Save changes on the settings page to apply.","The change succeeded, but the notification email could not be sent.":"The change succeeded, but the notification email could not be sent.","The changelog could not be fetched or parsed. Please try again.":"The changelog could not be fetched or parsed. Please try again.","The converted price must be a finite, non-negative number.":"The converted price must be a finite, non-negative number.","The current setting could not be loaded. You can still enter the website domain yourself.":"The current setting could not be loaded. You can still enter the website domain yourself.","The deployment node that handled the requests":"The deployment node that handled the requests","This channel is not in multi-key mode":"This channel is not in multi-key mode","The downloaded source does not match the sha256 declared in the index. Do not install it.":"The downloaded source does not match the sha256 declared in the index. Do not install it.","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"The effective domain for Passkey registration. Must match the current domain or be its parent domain.","The entered text does not match the required text.":"The entered text does not match the required text.","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.","The exact model identifier as used in API requests.":"The exact model identifier as used in API requests.","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:","The gateway rejected this plugin":"The gateway rejected this plugin","The index could not be fetched or parsed: {{message}}. The host may block cross-origin requests.":"The index could not be fetched or parsed: {{message}}. The host may block cross-origin requests.","The legacy token stops working on {{date}}. Create a new token to replace it.":"The legacy token stops working on {{date}}. Create a new token to replace it.","The login session that started this Telegram binding is no longer valid.":"The login session that started this Telegram binding is no longer valid.","The mapped upstream model(s)":"The mapped upstream model(s)","The model routing configuration could not be verified.":"The model routing configuration could not be verified.","The model that was requested":"The model that was requested","The model you\'re looking for doesn\'t exist.":"The model you\'re looking for doesn\'t exist.","The model-level expression cannot be evaluated by: {{plugins}}":"The model-level expression cannot be evaluated by: {{plugins}}","The name displayed across the application":"The name displayed across the application","The new token will only be shown once. Copy it and store it securely.":"The new token will only be shown once. Copy it and store it securely.","The OAuth account does not match the account linked to your profile.":"The OAuth account does not match the account linked to your profile.","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations","The requested chat preset does not exist or has been removed.":"The requested chat preset does not exist or has been removed.","The reset request stays disabled until a credit is available.":"The reset request stays disabled until a credit is available.","The result was returned in the API response and was not saved as an artifact":"The result was returned in the API response and was not saved as an artifact","The server returned the following result. Unselected models remain pending.":"The server returned the following result. Unselected models remain pending.","The setup wizard will use this database during initialization.":"The setup wizard will use this database during initialization.","The site exchange rate is invalid. Prices are shown in USD.":"The site exchange rate is invalid. Prices are shown in USD.","The site is not available at the moment.":"The site is not available at the moment.","The slug is appended to the URL:":"The slug is appended to the URL:","The source is unavailable or this browser cannot calculate SHA-256. The gateway checks the published hash during installation.":"The source is unavailable or this browser cannot calculate SHA-256. The gateway checks the published hash during installation.","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.","The system always bills in USD. Site currency makes entering and converting prices easier; amounts are converted to USD using the site exchange rate. Switching currencies does not change the actual price. Raw billing expressions always use USD.":"The system always bills in USD. Site currency makes entering and converting prices easier; amounts are converted to USD using the site exchange rate. Switching currencies does not change the actual price. Raw billing expressions always use USD.","The system currently uses: {{domain}}":"The system currently uses: {{domain}}","The task was accepted; submission cannot be replayed":"The task was accepted; submission cannot be replayed","The Telegram authorization request is invalid or expired.":"The Telegram authorization request is invalid or expired.","The telegram OAuth provider name is reserved. Ask your administrator to rename the conflicting custom provider.":"The telegram OAuth provider name is reserved. Ask your administrator to rename the conflicting custom provider.","The token group that will have a custom ratio":"The token group that will have a custom ratio","The token has no group, so it is billed as the user group vip, using the base ratio of vip.":"The token has no group, so it is billed as the user group vip, using the base ratio of vip.","The two roles of a group":"The two roles of a group","The two-factor setup has expired or changed. Start setup again.":"The two-factor setup has expired or changed. Start setup again.","The unique identifier for this model":"The unique identifier for this model","This OAuth provider still has linked users and cannot be deleted. Unbind all users first.":"This OAuth provider still has linked users and cannot be deleted. Unbind all users first.","The unique name for this vendor":"The unique name for this vendor","The upstream address this plugin sends requests to. The plugin declares no default, so it must be filled in.":"The upstream address this plugin sends requests to. The plugin declares no default, so it must be filled in.","The upstream channel that served the requests":"The upstream channel that served the requests","The upstream key has unlimited quota. Turn on \\"Allow querying user quota\\" for this key on the upstream to see the real balance.":"The upstream key has unlimited quota. Turn on \\"Allow querying user quota\\" for this key on the upstream to see the real balance.","The upstream natively supports all three protocols; every selected route is forwarded without conversion.":"The upstream natively supports all three protocols; every selected route is forwarded without conversion.","The upstream response is valid JSON, but it does not match the OpenAI credit_summary format. The channel balance was not updated.":"The upstream response is valid JSON, but it does not match the OpenAI credit_summary format. The channel balance was not updated.","The upstream returned a model name different from both the requested and upstream models. Aliases or dated versions may also cause this; this warning alone does not prove model substitution.":"The upstream returned a model name different from both the requested and upstream models. Aliases or dated versions may also cause this; this warning alone does not prove model substitution.","The URL for this chat client.":"The URL for this chat client.","The URL returned HTTP {{status}}. Check the address, or download the file and paste its source below.":"The URL returned HTTP {{status}}. Check the address, or download the file and paste its source below.","The user group applied to the requests":"The user group applied to the requests","The user who made the requests":"The user who made the requests","The vendor no longer exists. Reload the vendor list.":"The vendor no longer exists. Reload the vendor list.","Theme":"Theme","Theme preset":"Theme preset","Theme Settings":"Theme Settings","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?","This rule does not have include_rule_name enabled, so its cache cannot be cleared by rule":"This rule does not have include_rule_name enabled, so its cache cannot be cleared by rule","There is a rule for vip billed as premium → use its ratio 0.3":"There is a rule for vip billed as premium → use its ratio 0.3","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.","This slug conflicts with a built-in OAuth provider":"This slug conflicts with a built-in OAuth provider","This slug is already in use":"This slug is already in use","These models were not returned by the upstream. Uncheck to remove them, or select them again before saving. Model mapping source aliases are excluded.":"These models were not returned by the upstream. Uncheck to remove them, or select them again before saving. Model mapping source aliases are excluded.","These plugins use this channel\'s connection settings.":"These plugins use this channel\'s connection settings.","These toggles affect whether certain request fields are passed through to the upstream provider.":"These toggles affect whether certain request fields are passed through to the upstream provider.","These values come from the source index and are shown for review only. The gateway admits the plugin based on the metadata compiled from its source.":"These values come from the source index and are shown for review only. The gateway admits the plugin based on the metadata compiled from its source.","Thinking Suffix Adapter":"Thinking Suffix Adapter","Thinking to Content":"Thinking to Content","Thinking...":"Thinking...","Third-party":"Third-party","Third-party — use at your own risk":"Third-party — use at your own risk","Third-party account bindings (read-only, managed by user in profile settings)":"Third-party account bindings (read-only, managed by user in profile settings)","Third-party account bindings (read-only, managed by user in Security & Access)":"Third-party account bindings (read-only, managed by user in Security & Access)","This user has no active subscription to this plan":"This user has no active subscription to this plan","Third-party Payment Config":"Third-party Payment Config","This user is already a common user":"This user is already a common user","This user is already an administrator":"This user is already an administrator","Third-party plugin risk":"Third-party plugin risk","Third-party source risk":"Third-party source risk","Third-party-only plugins become unavailable immediately. In-flight tasks will be handled by timeout cleanup.":"Third-party-only plugins become unavailable immediately. In-flight tasks will be handled by timeout cleanup.","This action cannot be undone.":"This action cannot be undone.","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"This action cannot be undone. This will permanently delete your account and remove all your data from our servers.","This action will permanently remove 2FA protection from your account.":"This action will permanently remove 2FA protection from your account.","This announcement will be removed from the list.":"This announcement will be removed from the list.","This API key has no quota limit. Requests still require available wallet or subscription quota.":"This API key has no quota limit. Requests still require available wallet or subscription quota.","This API shortcut will be removed from the list.":"This API shortcut will be removed from the list.","This base URL points at a private or local network host. Make sure it is an upstream you control.":"This base URL points at a private or local network host. Make sure it is an upstream you control.","This base URL uses plain HTTP, so the channel key is sent unencrypted.":"This base URL uses plain HTTP, so the channel key is sent unencrypted.","This callback URL updates from the slug field and is the value to register with your provider.":"This callback URL updates from the slug field and is the value to register with your provider.","This changelog is not available in your language. Showing English.":"This changelog is not available in your language. Showing English.","This channel has no configured models.":"This channel has no configured models.","This channel is not an Ollama channel.":"This channel is not an Ollama channel.","This channel serves the models of every selected plugin. The upstream New API gateway must have the same plugins installed.":"This channel serves the models of every selected plugin. The upstream New API gateway must have the same plugins installed.","This channel type does not support fetching models":"This channel type does not support fetching models","This channel type requires additional configuration":"This channel type requires additional configuration","This combination will be billed as free.":"This combination will be billed as free.","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.","This data may be unreliable, use with caution":"This data may be unreliable, use with caution","This device does not support Passkey":"This device does not support Passkey","This device does not support Passkey verification.":"This device does not support Passkey verification.","This domain does not match the current website. Passkeys may not work here.":"This domain does not match the current website. Passkeys may not work here.","This email address is already in use.":"This email address is already in use.","This {{provider}} account cannot be linked to an existing account automatically, please sign in or register another way and then link {{provider}} in account settings":"This {{provider}} account cannot be linked to an existing account automatically, please sign in or register another way and then link {{provider}} in account settings","This {{provider}} account has already been bound":"This {{provider}} account has already been bound","This email address is not allowed by the administrator\'s email policy.":"This email address is not allowed by the administrator\'s email policy.","This expression cannot be edited visually without losing information.":"This expression cannot be edited visually without losing information.","This expression cannot be expanded into a price table. View the original expression below.":"This expression cannot be expanded into a price table. View the original expression below.","This expression cannot be represented by the price table. Switching discards the entire expression, including request rules, and resets all prices to zero. Configure prices before saving.":"This expression cannot be represented by the price table. Switching discards the entire expression, including request rules, and resets all prices to zero. Configure prices before saving.","This expression cannot be represented by the price table. You can switch to visual editing by confirming that the expression will be discarded.":"This expression cannot be represented by the price table. You can switch to visual editing by confirming that the expression will be discarded.","This expression cannot be simulated in the browser.":"This expression cannot be simulated in the browser.","This expression does not price each combination exactly once, so it opens as a raw expression. Sparse or custom pricing stays in this editor.":"This expression does not price each combination exactly once, so it opens as a raw expression. Sparse or custom pricing stays in this editor.","This expression exceeds the browser simulation limits.":"This expression exceeds the browser simulation limits.","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"This expression is too complex for the visual editor. Please switch to expression mode to edit.","This external account is already bound.":"This external account is already bound.","This FAQ entry will be removed from the list.":"This FAQ entry will be removed from the list.","This feature is experimental. Configuration format and behavior may change.":"This feature is experimental. Configuration format and behavior may change.","This feature requires signing in to the dashboard":"This feature requires signing in to the dashboard","This field does not support wildcards or regular expressions.":"This field does not support wildcards or regular expressions.","This historical record predates audit-info tracking and cannot be backfilled. The current instance already records server IP, callback IP, payment method, and system version for new top-ups going forward.":"This historical record predates audit-info tracking and cannot be backfilled. The current instance already records server IP, callback IP, payment method, and system version for new top-ups going forward.","This identifier is sent to the payment backend when creating an order. Use alipay for Alipay, wxpay for WeChat Pay, stripe for Stripe. Custom values must be supported by your payment provider.":"This identifier is sent to the payment backend when creating an order. Use alipay for Alipay, wxpay for WeChat Pay, stripe for Stripe. Custom values must be supported by your payment provider.","This instance is using an automatic hostname. Set NODE_NAME to a stable unique value for multi-instance management.":"This instance is using an automatic hostname. Set NODE_NAME to a stable unique value for multi-instance management.","This is a task model billed by usage (e.g. seconds, resolution). Prices entered here act as a per-call base rate, not per-token prices.":"This is a task model billed by usage (e.g. seconds, resolution). Prices entered here act as a per-call base rate, not per-token prices.","This list does not include the current website. Add {{origin}} if users sign in here.":"This list does not include the current website. Add {{origin}} if users sign in here.","This may cause cache failures.":"This may cause cache failures.","This may take a few moments while we validate the request and update your session.":"This may take a few moments while we validate the request and update your session.","This model already uses an expression.":"This model already uses an expression.","This model has both fixed price and ratio billing conflicts":"This model has both fixed price and ratio billing conflicts","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.","This model has provider-specific billing and must be converted manually.":"This model has provider-specific billing and must be converted manually.","This model is billed by usage, but the administrator has not configured its pricing yet.":"This model is billed by usage, but the administrator has not configured its pricing yet.","This model is not available in any group, or no group pricing information is configured.":"This model is not available in any group, or no group pricing information is configured.","This month":"This month","This OpenRouter Claude price derives cache-write usage from upstream cost and must be converted manually.":"This OpenRouter Claude price derives cache-write usage from upstream cost and must be converted manually.","This operation is only supported for vLLM channels":"This operation is only supported for vLLM channels","This operation is only supported for vLLM or SGLang channels":"This operation is only supported for vLLM or SGLang channels","This page has not been created yet.":"This page has not been created yet.","This Passkey domain is not available on this website. Use its original website or another verification method.":"This Passkey domain is not available on this website. Use its original website or another verification method.","This plan does not allow balance redemption":"This plan does not allow balance redemption","This plugin has no factory fallback. Deleting or disabling it makes this platform unavailable.":"This plugin has no factory fallback. Deleting or disabling it makes this platform unavailable.","This plugin path does not resolve within the source repository.":"This plugin path does not resolve within the source repository.","This preview reads static plugin declarations. The gateway validates the plugin during installation.":"This preview reads static plugin declarations. The gateway validates the plugin during installation.","This project must be used in compliance with the":"This project must be used in compliance with the","This provider is unavailable for this model.":"This provider is unavailable for this model.","This removes {{count}} failed models from this channel. This action cannot be undone.":"This removes {{count}} failed models from this channel. This action cannot be undone.","This route discovers upstream OpenAI models and cannot be split or matched by client model rules.":"This route discovers upstream OpenAI models and cannot be split or matched by client model rules.","This route is used only by channel management to discover upstream models.":"This route is used only by channel management to discover upstream models.","This route is used only by channel management to query the upstream balance.":"This route is used only by channel management to query the upstream balance.","This session will lose access immediately and must sign in again.":"This session will lose access immediately and must sign in again.","This site currently has {{count}} models enabled":"This site currently has {{count}} models enabled","This source does not publish a sha256 for this version, so the downloaded source cannot be pinned to what the source intended.":"This source does not publish a sha256 for this version, so the downloaded source cannot be pinned to what the source intended.","This source lists no installable task plugins.":"This source lists no installable task plugins.","This Telegram account is already bound.":"This Telegram account is already bound.","This Telegram account is not linked. Sign in using another method and link it first.":"This Telegram account is not linked. Sign in using another method and link it first.","This Telegram binding request has expired or has already been used.":"This Telegram binding request has expired or has already been used.","This tier catches any request that did not match earlier tiers.":"This tier catches any request that did not match earlier tiers.","this token group":"this token group","This Uptime Kuma group will be removed from the list.":"This Uptime Kuma group will be removed from the list.","This user account is disabled.":"This user account is disabled.","This user account no longer exists.":"This user account no longer exists.","this user group":"this user group","Token count exceeds the limit. Only exact search is allowed, do not use the % wildcard":"Token count exceeds the limit. Only exact search is allowed, do not use the % wildcard","This user has no bindings":"This user has no bindings","This verification has already been used. Please verify again.":"This verification has already been used. Please verify again.","This verification method is currently unavailable.":"This verification method is currently unavailable.","This verification method is not allowed for this action.":"This verification method is not allowed for this action.","Token has expired and cannot be enabled. Please modify the expiration time or set it to never expire":"Token has expired and cannot be enabled. Please modify the expiration time or set it to never expire","This verification method requires its dedicated verification flow.":"This verification method requires its dedicated verification flow.","This version is ignored":"This version is ignored","Token ID or user ID is empty":"Token ID or user ID is empty","This version is saved but not active. Activate it to replace the current version, or activate it later from the Versions tab.":"This version is saved but not active. Activate it to replace the current version, or activate it later from the Versions tab.","Token IDs cannot be empty":"Token IDs cannot be empty","This week":"This week","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.","This will clear custom pricing ratios and revert to upstream defaults.":"This will clear custom pricing ratios and revert to upstream defaults.","This will delete all":"This will delete all","This will delete all used, disabled, and expired redemption codes.":"This will delete all used, disabled, and expired redemption codes.","This will delete all channel affinity cache entries still in memory.":"This will delete all channel affinity cache entries still in memory.","Token name is too long":"Token name is too long","This will delete temporary cache files that have not been used for more than 10 minutes":"This will delete temporary cache files that have not been used for more than 10 minutes","This will extend the deployment by the specified hours.":"This will extend the deployment by the specified hours.","This will permanently delete all manually and automatically disabled channels. This action cannot be undone.":"This will permanently delete all manually and automatically disabled channels. This action cannot be undone.","This will permanently delete API key":"This will permanently delete API key","This will permanently delete redemption code":"This will permanently delete redemption code","This will permanently delete user":"This will permanently delete user","This will permanently remove all log entries created before {{date}}.":"This will permanently remove all log entries created before {{date}}.","This will permanently remove log entries before the selected timestamp.":"This will permanently remove log entries before the selected timestamp.","This will rebuild the channel routing index from every channel configuration, including supported models, groups, priorities, and weights. Routing may be briefly incomplete while the rebuild is running. Continue?":"This will rebuild the channel routing index from every channel configuration, including supported models, groups, priorities, and weights. Routing may be briefly incomplete while the rebuild is running. Continue?","Token quota is exhausted and cannot be enabled. Please modify the remaining quota or set it to unlimited":"Token quota is exhausted and cannot be enabled. Please modify the remaining quota or set it to unlimited","This will remove {{removed}} forwarding routes and create {{created}} selected routes. Model list and balance routes will be preserved.":"This will remove {{removed}} forwarding routes and create {{created}} selected routes. Model list and balance routes will be preserved.","This will remove {{removed}} forwarding routes and replace them with the {{template}} template ({{created}} routes). Model list and balance routes will be preserved.":"This will remove {{removed}} forwarding routes and replace them with the {{template}} template ({{created}} routes). Model list and balance routes will be preserved.","This will update the priority to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"This will update the priority to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?","This will update the weight to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"This will update the weight to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?","This year":"This year","Thought for {{duration}} seconds":"Thought for {{duration}} seconds","Three calls made by the same user, whose user group is vip:":"Three calls made by the same user, whose user group is vip:","Three calls made by the same vip user. Assume the base price of one call is 10.":"Three calls made by the same vip user. Assume the base price of one call is 10.","Three groups; the override matrix has exactly one cell filled in (highlighted).":"Three groups; the override matrix has exactly one cell filled in (highlighted).","Three steps to get started":"Three steps to get started","Throughput":"Throughput","Throughput by group":"Throughput by group","Throughput short":"TPS","Throughput trend":"Throughput trend","Tier":"Tier","Tier billing mode":"Tier billing mode","Tier conditions":"Tier conditions","Tier name":"Tier name","Tiered":"Tiered","Tiered (billing expression)":"Tiered (billing expression)","Tiered price table":"Tiered price table","Tiered pricing":"Tiered pricing","tiers":"tiers","Too many items in batch request, maximum is {{max}}":"Too many items in batch request, maximum is {{max}}","Time":"Time","Time between scheduled channel checks":"Time between scheduled channel checks","Time functions use the timezone written in the expression.":"Time functions use the timezone written in the expression.","Time Granularity":"Time Granularity","Tool price \\"{{name}}\\" must be a finite non-negative number":"Tool price \\"{{name}}\\" must be a finite non-negative number","Tool price \\"{{name}}\\" must be a non-negative number":"Tool price \\"{{name}}\\" must be a non-negative number","Time range":"Time range","Time remaining":"Time remaining","Tool prices must be a JSON object":"Tool prices must be a JSON object","Time window for rate limiting":"Time window for rate limiting","Time-based":"Time-based","Time-sliced cache (Claude)":"Time-sliced cache (Claude)","Time:":"Time:","Timeline":"Timeline","times":"times","Timezone":"Timezone","Timing":"Timing","Tip":"Tip","Tip: after configuring one model, select others in the table and use bulk copy.":"Tip: after configuring one model, select others in the table and use bulk copy.","to":"to","to access this resource.":"to access this resource.","To Anthropic Messages":"To Anthropic Messages","to confirm":"to confirm","To Gemini Generate Content":"To Gemini Generate Content","To Lower":"To Lower","To Lowercase":"To Lowercase","Top-up amount cannot be less than {{min}}":"Top-up amount cannot be less than {{min}}","Top-up amount cannot exceed {{max}}":"Top-up amount cannot exceed {{max}}","To OpenAI Chat":"To OpenAI Chat","To OpenAI Responses":"To OpenAI Responses","to override billing when a user in one group uses a token of another group.":"to override billing when a user in one group uses a token of another group.","Top-up is processing, please try again later":"Top-up is processing, please try again later","to the Models list so users can use them before the mapping sends traffic upstream.":"to the Models list so users can use them before the mapping sends traffic upstream.","Top-up order does not exist":"Top-up order does not exist","Top-up quota exceeds the range the system can represent":"Top-up quota exceeds the range the system can represent","Top-up quota limit exceeded":"Top-up quota limit exceeded","Top-up quota must be greater than 0":"Top-up quota must be greater than 0","To Upper":"To Upper","To Uppercase":"To Uppercase","Topped up {{quota}} with a redemption code, code ID {{id}}":"Topped up {{quota}} with a redemption code, code ID {{id}}","to view this resource.":"to view this resource.","Today":"Today","Toggle columns":"Toggle columns","Toggle navigation menu":"Toggle navigation menu","Toggle plan":"Toggle plan","Toggle theme":"Toggle theme","token":"token","Token":"Token","token (unit)":"token","Token Breakdown":"Token Breakdown","Token Endpoint":"Token Endpoint","Token Endpoint (Optional)":"Token Endpoint (Optional)","Token estimator":"Token estimator","Token group":"Token group","Token has no group":"Token has no group","Token ID":"Token ID","Token identifier":"Token identifier","Total quota cannot be negative":"Total quota cannot be negative","Token Limits":"Token Limits","Token management":"Token management","Token Management":"Token Management","Token Mgmt":"Token Mgmt","Token name":"Token name","Token Name":"Token Name","Token obtained from your Gotify application":"Token obtained from your Gotify application","Token operation details":"Token operation details","Token or per-call pricing":"Token or per-call pricing","Token price for audio input.":"Token price for audio input.","Token price for audio output.":"Token price for audio output.","Token price for cache reads.":"Token price for cache reads.","Token price for creating cache entries.":"Token price for creating cache entries.","Token price for image input.":"Token price for image input.","Token prices":"Token prices","Token regenerated and copied to clipboard":"Token regenerated and copied to clipboard","Token scope":"Token scope","Token share by model author across the last 24 hours":"Token share by model author across the last 24 hours","Token share by model author across the past few weeks":"Token share by model author across the past few weeks","Token share by model author across the past month":"Token share by model author across the past month","Token share by model author across the past year":"Token share by model author across the past year","Transfer failed {{error}}":"Transfer failed {{error}}","Token share by model author since launch":"Token share by model author since launch","Token unit":"Token unit","Token usage by model since launch":"Token usage by model since launch","Token-based":"Token-based","Tokenizer":"Tokenizer","tokens":"tokens","Tokens":"Tokens","tokens / mo":"tokens / mo","Tokens by category":"Tokens by category","Tokens Only":"Tokens Only","Tokens per minute":"Tokens per minute","Tokens since launch":"Tokens since launch","Tokens_usage":"Tokens","Tokens-only mode will show raw quota values regardless of this toggle.":"Tokens-only mode will show raw quota values regardless of this toggle.","Too many active login sessions. On a device where you are already signed in, open Login sessions and use “Sign out other sessions” to revoke them. If you cannot access a signed-in device, reset your password to sign out all sessions.":"Too many active login sessions. On a device where you are already signed in, open Login sessions and use “Sign out other sessions” to revoke them. If you cannot access a signed-in device, reset your password to sign out all sessions.","Too many files. Some were not added.":"Too many files. Some were not added.","Too many incorrect codes. Start email verification again.":"Too many incorrect codes. Start email verification again.","Too many login sessions were created recently. Please wait for the rolling window to pass, then try again.":"Too many login sessions were created recently. Please wait for the rolling window to pass, then try again.","Too many requests":"Too many requests","Tool / function declarations the model may call":"Tool / function declarations the model may call","Tool identifier":"Tool identifier","Tool price settings":"Tool price settings","Tool prices":"Tool prices","Tool-choice policy or specific tool name":"Tool-choice policy or specific tool name","Tools":"Tools","Top {{count}}":"Top {{count}}","Turnstile token is empty":"Turnstile token is empty","Turnstile verification failed, please refresh and try again!":"Turnstile verification failed, please refresh and try again!","Top app":"Top app","Top apps":"Top apps","Top Apps":"Top Apps","Top integrations using this model":"Top integrations using this model","Top model":"Top model","Top models":"Top models","Top Models":"Top Models","Top models by traffic":"Top models by traffic","Top P":"Top P","Top up balance and view billing history.":"Top up balance and view billing history.","Top up, pay for subscriptions, check in, and transfer referral rewards.":"Top up, pay for subscriptions, check in, and transfer referral rewards.","Top Users":"Top Users","Top vendors":"Top vendors","Top-up":"Top-up","Top-up amount options":"Top-up amount options","Top-up Audit Info":"Top-up Audit Info","Top-up group ratios":"Top-up group ratios","Top-Up Link":"Top-Up Link","top-up ratio":"top-up ratio","Top-up ratio":"Top-up ratio","Topup Amount":"Topup Amount","Total":"Total","Unable to connect to {{provider}} server, please try again later":"Unable to connect to {{provider}} server, please try again later","Unable to create the Passkey credential":"Unable to create the Passkey credential","Total {{count}} records":"Total {{count}} records","Total = used + remaining. It is not an initial allocation or a periodic budget; changing the remaining quota changes the total and percentage.":"Total = used + remaining. It is not an initial allocation or a periodic budget; changing the remaining quota changes the total and percentage.","Total Allocated":"Total Allocated","Total attempt budget exhausted":"Total attempt budget exhausted","Total check-ins":"Total check-ins","Total consumed":"Total consumed","Total consumed quota":"Total consumed quota","Total cost":"Total cost","Total Cost":"Total Cost","Total Count":"Total Count","Total earned":"Total earned","Total Earned":"Total Earned","Total GPUs":"Total GPUs","Unauthorized, insufficient privileges":"Unauthorized, insufficient privileges","Unauthorized, invalid access token":"Unauthorized, invalid access token","Unauthorized, invalid user info":"Unauthorized, invalid user info","Unauthorized, not logged in and no access token provided":"Unauthorized, not logged in and no access token provided","Unauthorized, the access token has expired":"Unauthorized, the access token has expired","Total invitation revenue":"Total invitation revenue","Total Log Size":"Total Log Size","Total Quota":"Total Quota","Unbound successfully":"Unbound successfully","Total quota included in the plan, usable per billing period. 0 means unlimited.":"Total quota included in the plan, usable per billing period. 0 means unlimited.","Total requests allowed per period. 0 = unlimited.":"Total requests allowed per period. 0 = unlimited.","Total requests made":"Total requests made","Total Revenue":"Total Revenue","Total time":"Total time","Total tokens":"Total tokens","Total Tokens":"Total Tokens","Total Usage":"Total Usage","Total Used":"Total Used","Total:":"Total:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"Track per-request consumption to power usage analytics. Keeping this on increases database writes.","Track usage, costs and performance with real-time analytics":"Track usage, costs and performance with real-time analytics","Tracked apps":"Tracked apps","Tracks current account base limits and additional metered usage on Codex upstream.":"Tracks current account base limits and additional metered usage on Codex upstream.","Trading insights, accounting, advisory":"Trading insights, accounting, advisory","Traditional Chinese":"Traditional Chinese","Transfer":"Transfer","Undo":"Undo","Unknown OAuth provider":"Unknown OAuth provider","Unknown rule name":"Unknown rule name","Unknown setting type: {{type}}":"Unknown setting type: {{type}}","Transfer Amount":"Transfer Amount","Transfer failed":"Transfer failed","Transfer Rewards":"Transfer Rewards","Transfer successful":"Transfer successful","Transfer to Balance":"Transfer to Balance","Translation":"Translation","Transparent Billing":"Transparent Billing","Trend":"Trend","Trending down":"Trending down","Unsupported add mode":"Unsupported add mode","Unsupported operation":"Unsupported operation","Unsupported payment channel":"Unsupported payment channel","Unsupported payment method":"Unsupported payment method","Trending up":"Trending up","Triggered garbage collection":"Triggered garbage collection","Trim leading/trailing whitespace":"Trim leading/trailing whitespace","Trim Prefix":"Trim Prefix","Trim Space":"Trim Space","Trim Suffix":"Trim Suffix","Truncate embeddings to this many dimensions":"Truncate embeddings to this many dimensions","Trusted":"Trusted","Try adjusting your search":"Try adjusting your search","Try adjusting your search to locate a missing model.":"Try adjusting your search to locate a missing model.","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"TTFT percentiles, throughput, and 30-day uptime by group","TTL":"TTL","TTL (seconds, 0 = default)":"TTL (seconds, 0 = default)","TTL (seconds)":"TTL (seconds)","Tune selection priority, testing, status handling, and request overrides.":"Tune selection priority, testing, status handling, and request overrides.","Turnstile is enabled but site key is empty.":"Turnstile is enabled but site key is empty.","Tutoring, learning aids, assessment":"Tutoring, learning aids, assessment","Two-factor Authentication":"Two-factor Authentication","Two-Factor Authentication":"Two-Factor Authentication","Two-factor authentication disabled":"Two-factor authentication disabled","Two-factor authentication enabled successfully!":"Two-factor authentication enabled successfully!","Two-factor authentication is already enabled.":"Two-factor authentication is already enabled.","Two-factor authentication is not enabled.":"Two-factor authentication is not enabled.","Two-factor authentication is temporarily locked.":"Two-factor authentication is temporarily locked.","Two-factor authentication reset":"Two-factor authentication reset","Two-Step Verification":"Two-Step Verification","Update successful":"Update successful","Type":"Type","Type (common)":"Type (common)","Type *":"Type *","Type to confirm":"Type to confirm","Type a command or search...":"Type a command or search...","Type the confirmation text here":"Type the confirmation text here","Type-Specific Settings":"Type-Specific Settings","Type:":"Type:","UI granularity only — data is still aggregated hourly":"UI granularity only — data is still aggregated hourly","Unable to build Passkey assertion":"Unable to build Passkey assertion","Unable to compare versions":"Unable to compare versions","Unable to confirm the update result":"Unable to confirm the update result","Unable to estimate price for this deployment.":"Unable to estimate price for this deployment.","Unable to generate chat link. Please contact your administrator.":"Unable to generate chat link. Please contact your administrator.","Unable to load groups":"Unable to load groups","Unable to load login sessions":"Unable to load login sessions","Unable to load rankings":"Unable to load rankings","Unable to load rankings data":"Unable to load rankings data","Unable to open chat":"Unable to open chat","Unable to parse Passkey login options from response":"Unable to parse Passkey login options from response","Unable to parse structured pricing":"Unable to parse structured pricing","Unable to prepare chat link. Please ensure you have an enabled API key.":"Unable to prepare chat link. Please ensure you have an enabled API key.","Unable to read clipboard":"Unable to read clipboard","Unauthorized":"Unauthorized","Unauthorized Access":"Unauthorized Access","Unavailable":"Unavailable","Unbind":"Unbind","Unbind failed":"Unbind failed","Unbound {{provider}}":"Unbound {{provider}}","Unchanged":"Unchanged","Underflow":"Underflow","Underground":"Underground","Understand how user groups, token groups, ratios, and special rules work together.":"Understand how user groups, token groups, ratios, and special rules work together.","Upgrade group does not exist":"Upgrade group does not exist","Understand image inputs alongside text":"Understand image inputs alongside text","Unexpected release payload":"Unexpected release payload","Unified API Gateway for":"Unified API Gateway for","Unique identifier for this group.":"Unique identifier for this group.","unit":"unit","Unit":"Unit","Unit price (local currency / USD)":"Unit price (local currency / USD)","Unit price (USD)":"Unit price (USD)","Unit price must be greater than 0":"Unit price must be greater than 0","Unit price: {{field}}":"Unit price: {{field}}","Units per USD":"Units per USD","Unknown":"Unknown","Unknown device":"Unknown device","Unknown version":"Unknown version","Unlimited":"Unlimited","Unlimited Quota":"Unlimited Quota","Unrecognized status code":"Unrecognized status code","Unsaved changes":"Unsaved changes","Unset legacy prices use the billing engine defaults.":"Unset legacy prices use the billing engine defaults.","Unset price":"Unset price","Unset price models":"Unset price models","Unsupported account password hashing configuration.":"Unsupported account password hashing configuration.","Unsupported verification method: {{method}}":"Unsupported verification method: {{method}}","Until":"Until","Untitled":"Untitled","Untrusted upstream data:":"Untrusted upstream data:","Unused":"Unused","Up to 4 strings that stop generation":"Up to 4 strings that stop generation","Up to date":"Up to date","Update":"Update","Update All Balances":"Update All Balances","Update API Key":"Update API Key","Update API token":"Update API token","Update API token “{{name}}”":"Update API token “{{name}}”","Update available":"Update available","Update Balance":"Update Balance","Update balance for:":"Update balance for:","Update Channel":"Update Channel","Update channel configuration and click save when you\'re done.":"Update channel configuration and click save when you\'re done.","Update check timed out. Try again.":"Update check timed out. Try again.","Update completed":"Update completed","Update configuration":"Update configuration","Update failed":"Update failed","Update Model":"Update Model","Update model configuration and click save when you\'re done.":"Update model configuration and click save when you\'re done.","Update plan info":"Update Plan Info","Update Provider":"Update Provider","Update Redemption Code":"Update Redemption Code","Update results":"Update results","Update selected fields":"Update selected fields","Upstream returned no usage":"Upstream returned no usage","Upstream returned no usage, so nothing was charged (possibly an upstream timeout)":"Upstream returned no usage, so nothing was charged (possibly an upstream timeout)","Update succeeded":"Update succeeded","Update the API key by providing necessary info.":"Update the API key by providing necessary info.","Upstream task not found":"Upstream task not found","Update the configuration for this custom OAuth provider.":"Update the configuration for this custom OAuth provider.","Upstream task timed out (over 1 hour)":"Upstream task timed out (over 1 hour)","Update the redemption code by providing necessary info.":"Update the redemption code by providing necessary info.","Update the reusable bundle below.":"Update the reusable bundle below.","Update the session binding after a successful switch":"Update the session binding after a successful switch","Update the user by providing necessary info.":"Update the user by providing necessary info.","Update vendor information for {{name}}":"Update vendor information for {{name}}","Update your password for account:":"Update your password for account:","Update your password to keep your account secure":"Update your password to keep your account secure","Updated":"Updated","Updated {{models}} model assignments and deleted {{vendors}} vendor records.":"Updated {{models}} model assignments and deleted {{vendors}} vendor records.","Uptime Kuma groups cannot exceed 20 entries":"Uptime Kuma groups cannot exceed 20 entries","Updated a custom OAuth provider":"Updated a custom OAuth provider","Updated a deployment":"Updated a deployment","Updated a model":"Updated a model","Updated a prefill group":"Updated a prefill group","Updated a redemption code":"Updated a redemption code","URL must start with http:// or https://":"URL must start with http:// or https://","Updated a subscription plan":"Updated a subscription plan","Updated a vendor":"Updated a vendor","Updated At":"Updated At","Updated channel {{name}} (ID: {{id}})":"Updated channel {{name}} (ID: {{id}})","Updated channel status (ID: {{id}})":"Updated channel status (ID: {{id}})","Updated daily":"Updated daily","Updated Passkey domains: removed {{domains}}; affected {{known}}; unknown {{unknown}}":"Updated Passkey domains: removed {{domains}}; affected {{known}}; unknown {{unknown}}","Updated successfully":"Updated successfully","Updated system setting {{key}}":"Updated system setting {{key}}","Updated user {{username}} (ID: {{id}})":"Updated user {{username}} (ID: {{id}})","Updates have not been checked yet.":"Updates have not been checked yet.","Updates with the system":"Updates with the system","Updating all channel balances. This may take a while. Please refresh to see results.":"Updating all channel balances. This may take a while. Please refresh to see results.","Updating...":"Updating...","Upgrade {{name}}":"Upgrade {{name}}","Upgrade and enable":"Upgrade and enable","Upgrade available: v{{installed}} to v{{latest}}":"Upgrade available: v{{installed}} to v{{latest}}","Upgrade Group":"Upgrade Group","Upgrade plaintext SMTP connection with STARTTLS before authentication":"Upgrade plaintext SMTP connection with STARTTLS before authentication","Upload":"Upload","Upload a JavaScript task platform plugin.":"Upload a JavaScript task platform plugin.","Upload a single service account JSON file":"Upload a single service account JSON file","Upload a task plugin to add a platform.":"Upload a task plugin to add a platform.","Upload file":"Upload file","Upload files":"Upload files","Upload multiple JSON files in batch modes":"Upload multiple JSON files in batch modes","Upload new plugin version":"Upload new plugin version","Upload new version":"Upload new version","Upload or reference a local configuration file.":"Upload or reference a local configuration file.","Upload photo":"Upload photo","Upload plugin":"Upload plugin","Upload task plugin":"Upload task plugin","Uploading a plugin is an administrator-level trust decision. A plugin can access channel credentials and shape upstream requests. Review its source and diff before activation.":"Uploading a plugin is an administrator-level trust decision. A plugin can access channel credentials and shape upstream requests. Review its source and diff before activation.","Uploading...":"Uploading...","Upscale":"Upscale","Upstream":"Upstream","Upstream authentication":"Upstream authentication","Upstream connection":"Upstream connection","Upstream did not return reset credit details.":"Upstream did not return reset credit details.","Upstream JSON response":"Upstream JSON response","Upstream Model":"Upstream Model","Upstream Model Detection Settings":"Upstream Model Detection Settings","Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.":"Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.","Upstream model list":"Upstream model list","Upstream Model Name":"Upstream Model Name","Upstream Model Update Check":"Upstream Model Update Check","Upstream Model Updates":"Upstream Model Updates","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models","Upstream names returned by the provider":"Upstream names returned by the provider","Upstream path":"Upstream path","Upstream path is required":"Upstream path is required","Upstream path must be a full URL or a path starting with /":"Upstream path must be a full URL or a path starting with /","Upstream price sync":"Upstream price sync","Upstream prices fetched successfully":"Upstream prices fetched successfully","Upstream protocol plan":"Upstream protocol plan","Upstream ratios fetched successfully":"Upstream ratios fetched successfully","Upstream receives":"Upstream receives","Upstream request failed":"Upstream request failed","Upstream Request ID":"Upstream Request ID","Upstream response":"Upstream response","Upstream Response":"Upstream Response","Upstream Response (billing-usage-anthropic-estimated)":"Upstream Response (billing-usage-anthropic-estimated)","Upstream Response (billing-usage-anthropic)":"Upstream Response (billing-usage-anthropic)","Upstream Response (billing-usage-gemini-estimated)":"Upstream Response (billing-usage-gemini-estimated)","Upstream Response (billing-usage-gemini)":"Upstream Response (billing-usage-gemini)","Upstream Response (billing-usage-openai-estimated)":"Upstream Response (billing-usage-openai-estimated)","Upstream Response (billing-usage-openai)":"Upstream Response (billing-usage-openai)","upstream services integrated":"upstream services integrated","Upstream Task ID":"Upstream Task ID","Upstream task plugins":"Upstream task plugins","Upstream Updates":"Upstream Updates","Upstream URL":"Upstream URL","Upstream URL must be a full URL":"Upstream URL must be a full URL","Upstream vendor missing":"Upstream vendor missing","uptime":"uptime","Uptime":"Uptime","Uptime (30d)":"Uptime (30d)","Uptime (last 30 days)":"Uptime (last 30 days)","Uptime Kuma":"Uptime Kuma","Uptime Kuma groups saved successfully":"Uptime Kuma groups saved successfully","Uptime Kuma URL":"Uptime Kuma URL","Uptime since":"Uptime since","URL":"URL","URL is required":"URL is required","URL to your logo image (optional)":"URL to your logo image (optional)","Use the same priority as the highlighted channels":"Use the same priority as the highlighted channels","User does not exist":"User does not exist","US dollar (USD)":"US dollar (USD)","Usage":"Usage","Usage · {{price}}":"Usage · {{price}}","Usage at a glance":"Usage at a glance","Usage guide":"Usage guide","User group will be reverted to {{group}}":"User group will be reverted to {{group}}","User group will be upgraded to {{group}}":"User group will be upgraded to {{group}}","Usage logs":"Usage logs","Usage Logs":"Usage Logs","Usage mode":"Usage mode","User has been banned":"User has been banned","User has been deleted":"User has been deleted","Usage parameters":"Usage parameters","Usage percentage":"Usage percentage","Usage prices":"Usage prices","Usage-based":"Usage-based","Usage-based billing":"Usage-based billing","Usage-based billing · price not configured":"Usage-based billing · price not configured","USD":"USD","USD Exchange Rate":"USD Exchange Rate","USD price per 1M input tokens.":"USD price per 1M input tokens.","User registration failed or user ID retrieval failed":"User registration failed or user ID retrieval failed","USD price per 1M tokens.":"USD price per 1M tokens.","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.","Use 8–128 characters.":"Use 8–128 characters.","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"Use a compatible browser or device with biometric authentication or a security key to register a Passkey.","Use a different stable value for each instance, then restart the service.":"Use a different stable value for each instance, then restart the service.","Use a Passkey from another website":"Use a Passkey from another website","Use a path to append it to the channel Base URL, or enter a full URL to override the Base URL for this route.":"Use a path to append it to the channel Base URL, or enter a full URL to override the Base URL for this route.","Username already exists or has been deleted":"Username already exists or has been deleted","Use access tokens to call the dashboard API from scripts. Each token only has the permissions you select.":"Use access tokens to call the dashboard API from scripts. Each token only has the permissions you select.","Use an HTTPS domain (or localhost for development) to configure Passkey.":"Use an HTTPS domain (or localhost for development) to configure Passkey.","Username must be {{max}} characters or fewer":"Username must be {{max}} characters or fewer","Use authenticator code":"Use authenticator code","Username or password is incorrect, or user has been banned":"Username or password is incorrect, or user has been banned","Use backup code":"Use backup code","Use Bearer for all protocols":"Use Bearer for all protocols","Use channel type {{type}}":"Use channel type {{type}}","Users can download their own logs from the usage log page. Administrators can always export.":"Users can download their own logs from the usage log page. Administrators can always export.","Use default":"Use default","Use disk cache when request body exceeds this size":"Use disk cache when request body exceeds this size","Use exact client model names, separated by commas. Prefixes and wildcards are not supported.":"Use exact client model names, separated by commas. Prefixes and wildcards are not supported.","Use exact model names such as gpt-4o, or regex rules prefixed with re: such as re:^gemini-.":"Use exact model names such as gpt-4o, or regex rules prefixed with re: such as re:^gemini-.","Use expression pricing when a dependent price is non-zero and its base price is zero.":"Use expression pricing when a dependent price is non-zero and its base price is zero.","Use external tools to extend capabilities":"Use external tools to extend capabilities","Use Mantle for supported Claude models and automatic prompt caching. Keep InvokeModel for older models and Amazon Nova.":"Use Mantle for supported Claude models and automatic prompt caching. Keep InvokeModel for older models and Amazon Nova.","Use model-level expression":"Use model-level expression","Use model-level pricing":"Use model-level pricing","Use one available reset credit for this channel. The reset request is sent only after confirmation.":"Use one available reset credit for this channel. The reset request is sent only after confirmation.","Use one available reset credit to refresh the current Codex usage windows.":"Use one available reset credit to refresh the current Codex usage windows.","Use OpenAI-compatible Ollama chat API":"Use OpenAI-compatible Ollama chat API","Use our unified OpenAI-compatible endpoint in your applications":"Use our unified OpenAI-compatible endpoint in your applications","Use Passkey or 2FA to confirm your identity before revealing this channel key.":"Use Passkey or 2FA to confirm your identity before revealing this channel key.","Use Passkey to sign in without entering your password.":"Use Passkey to sign in without entering your password.","Use presets or upstream discovery to populate the model list faster.":"Use presets or upstream discovery to populate the model list faster.","Use secure connection when sending emails":"Use secure connection when sending emails","Use sidebar shortcut":"Use sidebar shortcut","Use the existing token total":"Use the existing token total","Use the full-width table to scan prices, then select a row to edit it here.":"Use the full-width table to scan prices, then select a row to edit it here.","Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.":"Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.","Use the group set on the token. If the token has no group, use the user group. The auto group tries the configured groups from top to bottom.":"Use the group set on the token. If the token has no group, use the user group. The auto group tries the configured groups from top to bottom.","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.","Use this callback URL pattern when registering a custom OAuth provider.":"Use this callback URL pattern when registering a custom OAuth provider.","Use this token for API authentication":"Use this token for API authentication","Use tier(name, fixed(amount)) for a USD price per request. Group and request multipliers still apply.":"Use tier(name, fixed(amount)) for a USD price per request. Group and request multipliers still apply.","Use your Passkey":"Use your Passkey","used":"used","Used":"Used","Used {{used}} of {{total}} ({{percent}}%)":"Used {{used}} of {{total}} ({{percent}}%)","Used / Remaining":"Used / Remaining","Used amount":"Used","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.","Used by route auth templates":"Used by route auth templates","Used for load balancing. Higher weight = more requests":"Used for load balancing. Higher weight = more requests","Used in URLs and API routes":"Used in URLs and API routes","Used Quota":"Used Quota","Used reset credits cannot be restored.":"Used reset credits cannot be restored.","Used to authenticate with io.net deployment API":"Used to authenticate with io.net deployment API","Used to authenticate with the worker. Leave blank to keep the existing secret.":"Used to authenticate with the worker. Leave blank to keep the existing secret.","Used to decide the payment flow. Built-in keys include stripe for Stripe and waffo_pancake for Waffo Pancake; other values are sent to Epay as the type parameter.":"Used to decide the payment flow. Built-in keys include stripe for Stripe and waffo_pancake for Waffo Pancake; other values are sent to Epay as the type parameter.","Used when a Task Plugin channel has no API address configured.":"Used when a Task Plugin channel has no API address configured.","Used:":"Used:","Verification code is incorrect or has expired":"Verification code is incorrect or has expired","User":"User","User {{id}}":"User {{id}}","User Agent":"User Agent","User Agreement":"User Agreement","User Analytics":"User Analytics","User Consumption Ranking":"User Consumption Ranking","User Consumption Trend":"User Consumption Trend","User Count":"User Count","User created successfully":"User created successfully","User dashboard and quota controls.":"User dashboard and quota controls.","User deleted successfully":"User deleted successfully","User demoted to regular user successfully":"User demoted to regular user successfully","User disabled successfully":"User disabled successfully","User enabled successfully":"User enabled successfully","User Exclusive Ratio":"User Exclusive Ratio","User group":"User group","User Group":"User Group","User group name":"User group name","User Group: {{ratio}}x":"User Group: {{ratio}}x","User groups that can access channels with this tag":"User groups that can access channels with this tag","User groups that can access this channel. ":"User groups that can access this channel. ","User ID":"User ID","User ID Field":"User ID Field","User ID:":"User ID:","User Info Endpoint":"User Info Endpoint","User Info Endpoint (Optional)":"User Info Endpoint (Optional)","User Information":"User Information","User Menu":"User Menu","User personal functions":"User personal functions","User promoted to admin successfully":"User promoted to admin successfully","User selectable":"User selectable","User Subscription Management":"User Subscription Management","User updated successfully":"User updated successfully","User Verification":"User Verification","User-Agent include (one per line)":"User-Agent include (one per line)","Username":"Username","Username confirmation does not match":"Username confirmation does not match","Username Field":"Username Field","Username or Email":"Username or Email","Users":"Users","Users call":"Users call","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"Users call the model on the left. The platform forwards the request to the upstream model on the right.","Users in {{group}}":"Users in {{group}}","Users must wait for a successful drawing before upscales or variations.":"Users must wait for a successful drawing before upscales or variations.","Users of vip, when billed as premium, pay ratio":"Users of vip, when billed as premium, pay ratio","Vertex AI keys for batch adding cannot be empty":"Vertex AI keys for batch adding cannot be empty","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.","uses":"uses","Using built-in or default pricing":"Using built-in or default pricing","Using the complete global Auto order ({{count}} groups)":"Using the complete global Auto order ({{count}} groups)","v{{installed}} is installed but this source does not list it. Installing replaces it with v{{target}}.":"v{{installed}} is installed but this source does not list it. Installing replaces it with v{{target}}.","Validity":"Validity","Validity Period":"Validity Period","Value":"Value","Value (supports JSON or plain text)":"Value (supports JSON or plain text)","Value is required":"Value is required","Value metric":"Value metric","Value must be at least 0":"Value must be at least 0","Value Regex":"Value Regex","variable":"variable","variable)":"variable)","variable) *":"variable) *","Variables":"Variables","Vary":"Vary","Vary (Strong)":"Vary (Strong)","Vary (Subtle)":"Vary (Subtle)","Vast Range of AI Models":"Vast Range of AI Models","vendor":"vendor","Vendor":"Vendor","Vendor created successfully":"Vendor created successfully","Vendor data changed. Preview again before applying.":"Vendor data changed. Preview again before applying.","Vendor deleted successfully":"Vendor deleted successfully","Vendor details":"Vendor details","Vendor management":"Vendor management","Vendor Name":"Vendor Name","Vendor Name *":"Vendor Name *","Vendor name and icon must not exceed 128 characters.":"Vendor name and icon must not exceed 128 characters.","Vendor name is required":"Vendor name is required","Vendor updated successfully":"Vendor updated successfully","Vendor:":"Vendor:","Vendors":"Vendors","Vendors ranked by aggregated token volume":"Vendors ranked by aggregated token volume","Vendors source":"Vendors source","Vendors still have {{count}} linked model records. Transfer or clear their assignments first.":"Vendors still have {{count}} linked model records. Transfer or clear their assignments first.","Verification code":"Verification code","Verification Code":"Verification Code","Verification code must be 6 digits":"Verification code must be 6 digits","Verification code sent! Please check your email.":"Verification code sent! Please check your email.","Verification code updates every 30 seconds.":"Verification code updates every 30 seconds.","Verification does not match this action.":"Verification does not match this action.","Verification does not match this action\'s details. Please verify again.":"Verification does not match this action\'s details. Please verify again.","Verification email could not be sent. Start email verification again.":"Verification email could not be sent. Start email verification again.","Verification email sent":"Verification email sent","Verification failed":"Verification failed","Verification failed. Please try again.":"Verification failed. Please try again.","Verification flow expired":"Verification flow expired","Verification is not configured properly":"Verification is not configured properly","Verification method":"Verification method","Verification proof was not returned":"Verification proof was not returned","Verification required to reveal the saved key.":"Verification required to reveal the saved key.","Verification scope is missing":"Verification scope is missing","Violation fee charged":"Violation fee charged","Verify":"Verify","Verify again before retrying this action.":"Verify again before retrying this action.","VIP group":"VIP group","Verify and Sign In":"Verify and Sign In","Verify routing with Playground or your client":"Verify routing with Playground or your client","Verify Setup":"Verify Setup","Verify to create administrator":"Verify to create administrator","Verify to delete user":"Verify to delete user","Verify to demote user":"Verify to demote user","Verify to disable user":"Verify to disable user","Verify to enable user":"Verify to enable user","Verify to promote user":"Verify to promote user","Verify to reset 2FA":"Verify to reset 2FA","Verify to reset Passkey":"Verify to reset Passkey","Verify to unbind account":"Verify to unbind account","Verify to update user credentials":"Verify to update user credentials","Verify to view channel key":"Verify to view channel key","Verify upstream pricing":"Verify upstream pricing","Verify your database connection":"Verify your database connection","Verify your identity to finish signing in.":"Verify your identity to finish signing in.","Verifying credentials and pulling stores from your Pancake account...":"Verifying credentials and pulling stores from your Pancake account...","Verifying your {{provider}} account":"Verifying your {{provider}} account","Version":"Version","Version differences":"Version differences","Version history":"Version history","Version Overrides":"Version Overrides","Versions":"Versions","Vertex AI":"Vertex AI","Waffo Pancake configuration is incomplete":"Waffo Pancake configuration is incomplete","Waffo Pancake credentials are not configured":"Waffo Pancake credentials are not configured","Vertex AI API Key mode does not support batch creation":"Vertex AI API Key mode does not support batch creation","Waffo Pancake is not configured or key is invalid":"Waffo Pancake is not configured or key is invalid","Waffo Pancake is not fully configured. Complete the gateway binding in payment settings first.":"Waffo Pancake is not fully configured. Complete the gateway binding in payment settings first.","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.","Vertex AI Key Format":"Vertex AI Key Format","Vertex AI Project ID":"Vertex AI Project ID","e.g., my-project-123":"e.g., my-project-123","Vertex AI service account key must be valid JSON":"Vertex AI service account key must be valid JSON","Video":"Video","Video length in seconds":"Video length in seconds","Video pricing must be converted manually.":"Video pricing must be converted manually.","Video Remix":"Video Remix","Vidu":"Vidu","Waffo payment is not enabled":"Waffo payment is not enabled","View":"View","View all currently available models":"View all currently available models","WaffoPancakeProductId is not configured for this plan":"WaffoPancakeProductId is not configured for this plan","View all top-up records, subscription plans, and user subscriptions.":"View all top-up records, subscription plans, and user subscriptions.","View all users\' usage logs, statistics, and tasks.":"View all users\' usage logs, statistics, and tasks.","View API keys and their settings without the full key.":"View API keys and their settings without the full key.","View API token key":"View API token key","View API token keys in batch":"View API token keys in batch","View audit records from user and admin roles. Root records are always excluded.":"View audit records from user and admin roles. Root records are always excluded.","View balance, top-up records, subscriptions, and referral information.":"View balance, top-up records, subscriptions, and referral information.","View changelog source":"View changelog source","View channel lists and details without secrets.":"View channel lists and details without secrets.","View channel secrets":"View channel secrets","View complete API keys.":"View complete API keys.","View deployments and price estimates.":"View deployments and price estimates.","View detailed information about this user including balance, usage statistics, and invitation details.":"View detailed information about this user including balance, usage statistics, and invitation details.","View details":"View details","View document":"View document","View groups and prefill groups.":"View groups and prefill groups.","View installed task plugins and their settings.":"View installed task plugins and their settings.","View issued reset credits, grant dates, and expiration.":"View issued reset credits, grant dates, and expiration.","View key for API token “{{name}}”":"View key for API token “{{name}}”","View logs":"View logs","View mapping":"View mapping","View mode":"View mode","View model statistics and charts":"View model statistics and charts","View models":"View models","View models and vendors, and preview upstream sync.":"View models and vendors, and preview upstream sync.","View other accounts\' audit logs":"View other accounts\' audit logs","View Passkey, two-factor, and sign-in binding status.":"View Passkey, two-factor, and sign-in binding status.","View performance, system tasks, and system information.":"View performance, system tasks, and system information.","View Pricing":"View Pricing","View pricing for {{model}}":"View pricing for {{model}}","View redemption codes.":"View redemption codes.","View scope":"View scope","View system settings, custom OAuth providers, and price sync sources.":"View system settings, custom OAuth providers, and price sync sources.","View the complete details for this":"View the complete details for this","Webhook URL cannot be empty":"Webhook URL cannot be empty","View the complete details for this log entry":"View the complete details for this log entry","View the complete details for this task":"View the complete details for this task","View the complete error message and details":"View the complete error message and details","WeChat ID is empty!":"WeChat ID is empty!","View the complete prompt and its English translation":"View the complete prompt and its English translation","View the generated image":"View the generated image","View users, their sign-in bindings, and permission settings.":"View users, their sign-in bindings, and permission settings.","View your profile, groups, and available models.":"View your profile, groups, and available models.","View your topup transaction records and payment history":"View your topup transaction records and payment history","View your usage logs, statistics, tasks, and audit logs.":"View your usage logs, statistics, tasks, and audit logs.","Viewed channel key {{name}} (ID: {{id}})":"Viewed channel key {{name}} (ID: {{id}})","Violation Code":"Violation Code","Violation deduction amount":"Violation deduction amount","Violation Fee":"Violation Fee","Violation Marker":"Violation Marker","vip":"vip","VIP users with premium access":"VIP users with premium access","Visible":"Visible","Visible only to users with access to the model’s groups.":"Visible only to users with access to the model’s groups.","Vision":"Vision","Vision, image / video, document chat":"Vision, image / video, document chat","Visit Settings → General and adjust quota options...":"Visit Settings → General and adjust quota options...","Visitors must authenticate before accessing the pricing directory.":"Visitors must authenticate before accessing the pricing directory.","Visitors must authenticate before accessing the rankings page.":"Visitors must authenticate before accessing the rankings page.","Visual":"Visual","Visual edit":"Visual edit","Visual editor":"Visual editor","Visual Editor":"Visual Editor","Visual indicator color for the API card":"Visual indicator color for the API card","Visual Mode":"Visual Mode","Visual Parameter Override":"Visual Parameter Override","Visual prices use {{currency}} per declared unit; token prices are per 1M tokens. Raw expressions always use USD, with token terms divided by 1000000.":"Visual prices use {{currency}} per declared unit; token prices are per 1M tokens. Raw expressions always use USD, with token terms divided by 1000000.","vLLM":"vLLM","vLLM API key, or EMPTY if authentication is disabled":"vLLM API key, or EMPTY if authentication is disabled","vLLM server address, without /v1":"vLLM server address, without /v1","vLLM status":"vLLM status","VolcEngine":"VolcEngine","vs. previous":"vs. previous","Waffo":"Waffo","Waffo Aggregator Gateway":"Waffo Aggregator Gateway","Waffo Pancake Dashboard":"Waffo Pancake Dashboard","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Waffo Pancake payment gateway","Waffo Pancake product created":"Waffo Pancake product created","Waffo Pancake product creation failed":"Waffo Pancake product creation failed","Waffo Pancake save failed":"Waffo Pancake save failed","Waffo Pancake settings saved":"Waffo Pancake settings saved","Waffo Payment":"Waffo Payment","Waffo Payment Gateway":"Waffo Payment Gateway","Waffo Public Key (Production)":"Waffo Public Key (Production)","Waffo Public Key (Sandbox)":"Waffo Public Key (Sandbox)","Waiting":"Waiting","Waiting for email...":"Waiting for email...","Waiting for two comparable samples. Counter resets restart the sampling window.":"Waiting for two comparable samples. Counter resets restart the sampling window.","Waiting requests":"Waiting requests","Wallet":"Wallet","Wallet First":"Wallet First","Wallet Management":"Wallet Management","Wallet management and personal preferences.":"Wallet management and personal preferences.","Wallet Only":"Wallet Only","Wallet pre-consume bypass threshold (USD)":"Wallet pre-consume bypass threshold (USD)","Wallet quota limit exceeded":"Wallet quota limit exceeded","Warning":"Warning","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.","Warning: Disabling 2FA will make your account less secure.":"Warning: Disabling 2FA will make your account less secure.","Warning: This action is permanent and irreversible!":"Warning: This action is permanent and irreversible!","We apologize for the inconvenience.":"We apologize for the inconvenience.","We could not load instances.":"We could not load instances.","We could not load system tasks.":"We could not load system tasks.","We could not load the setup status.":"We could not load the setup status.","We will prompt your device to confirm using biometrics or your hardware key.":"We will prompt your device to confirm using biometrics or your hardware key.","We\'ll be back online shortly.":"We\'ll be back online shortly.","Web search":"Web search","Web Search":"Web Search","Webhook Configuration:":"Webhook Configuration:","Webhook public key (production)":"Webhook public key (production)","Webhook public key (production) is required":"Webhook public key (production) is required","Webhook public key (sandbox)":"Webhook public key (sandbox)","When a channel is disabled or re-enabled automatically, or a test of all channels finishes":"When a channel is disabled or re-enabled automatically, or a test of all channels finishes","You can create at most {{count}} access tokens":"You can create at most {{count}} access tokens","Webhook public key (sandbox) is required":"Webhook public key (sandbox) is required","Webhook secret":"Webhook secret","Webhook Secret":"Webhook Secret","Webhook signing secret (leave blank unless updating)":"Webhook signing secret (leave blank unless updating)","You cannot grant one or more of these permissions.":"You cannot grant one or more of these permissions.","Webhook URL":"Webhook URL","Webhook URL (Production):":"Webhook URL (Production):","Webhook URL (Test):":"Webhook URL (Test):","Webhook URL:":"Webhook URL:","Website is under maintenance!":"Website is under maintenance!","WeChat":"WeChat","WeChat login QR code":"WeChat login QR code","WeChat Pay":"WeChat Pay","WeChat sign in":"WeChat sign in","Week":"Week","Weekday":"Weekday","Weekly":"Weekly","Weekly token usage by model across the past few weeks":"Weekly token usage by model across the past few weeks","Weekly token usage by model across the past year":"Weekly token usage by model across the past year","Weekly token usage by model since launch":"Weekly token usage by model since launch","Weekly Window":"Weekly Window","Weight":"Weight","Weighted by request count":"Weighted by request count","Welcome back!":"Welcome back!","Welcome to our New API...":"Welcome to our New API...","Well-Known URL":"Well-Known URL","Well-Known URL must start with http:// or https://":"Well-Known URL must start with http:// or https://","What do you want to change?":"What do you want to change?","What would you like to know?":"What would you like to know?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.","When billed as {{group}}":"When billed as {{group}}","When conditions match":"When conditions match","When conditions match → {{name}}":"When conditions match → {{name}}","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.","When disabled, all uploaded custom plugins are ignored and every platform falls back to its built-in factory plugin.":"When disabled, all uploaded custom plugins are ignored and every platform falls back to its built-in factory plugin.","When disabled, the entire task plugin system stops serving, including factory and custom plugins.":"When disabled, the entire task plugin system stops serving, including factory and custom plugins.","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"When enabled, if channels in the current group fail, it will try channels in the next group in order.","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.":"When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.","When enabled, MjProxy callbacks are accepted (reveals server IP).":"When enabled, MjProxy callbacks are accepted (reveals server IP).","When enabled, newly created tokens start in the first auto group.":"When enabled, newly created tokens start in the first auto group.","When enabled, prompts are scanned before reaching upstream models.":"When enabled, prompts are scanned before reaching upstream models.","When enabled, the store field will be blocked":"When enabled, the store field will be blocked","When enabled, this API key can be used to check your account\'s remaining and used quota.":"When enabled, this API key can be used to check your account\'s remaining and used quota.","When enabled, users can pick this group when creating tokens.":"When enabled, users can pick this group when creating tokens.","When enabled, violation requests will incur additional charges.":"When enabled, violation requests will incur additional charges.","When enabled, zero-cost models also pre-consume quota before final settlement.":"When enabled, zero-cost models also pre-consume quota before final settlement.","When no conditions are set, the operation always executes.":"When no conditions are set, the operation always executes.","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.","When the primary domain changes, the previous domain is automatically kept in the compatible domains list.":"When the primary domain changes, the previous domain is automatically kept in the compatible domains list.","Whitelist":"Whitelist","Whitelist (Only allow listed domains)":"Whitelist (Only allow listed domains)","Whitelist (Only allow listed IPs)":"Whitelist (Only allow listed IPs)","whsec_xxx":"whsec_xxx","Why only one store + product?":"Why only one store + product?","Why set a website domain?":"Why set a website domain?","Why set this?":"Why set this?","Window:":"Window:","Wire encoding for the embedding vectors":"Wire encoding for the embedding vectors","with conflicts":"with conflicts","With linked models":"With linked models","with the API key from your token settings.":"with the API key from your token settings.","With these settings, automatic disabling is off for all channels.":"With these settings, automatic disabling is off for all channels.","Without additional conditions, only the type above is used for pruning.":"Without additional conditions, only the type above is used for pruning.","Without linked models":"Without linked models","Worked example":"Worked example","Worker Access Key":"Worker Access Key","Worker instances do not run master-only background tasks.":"Worker instances do not run master-only background tasks.","Worker metrics":"Worker metrics","Worker Proxy":"Worker Proxy","Worker URL":"Worker URL","Workspaces":"Workspaces","Write value to the target field":"Write value to the target field","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"Xunfei","Year":"Year","years":"years","Yes":"Yes","You are about to delete {{count}} API key(s).":"You are about to delete {{count}} API key(s).","You are offline. Updates will be checked when you reconnect.":"You are offline. Updates will be checked when you reconnect.","You are running the latest version ({{version}}).":"You are running the latest version ({{version}}).","You can add models manually or try fetching again.":"You can add models manually or try fetching again.","You can close this tab once the binding completes or a success message appears in the original window.":"You can close this tab once the binding completes or a success message appears in the original window.","You can create up to {{count}} access tokens":"You can create up to {{count}} access tokens","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.","You can only check in once per day":"You can only check in once per day","You can still edit non-sensitive operations fields such as models, groups, priority, and weight.":"You can still edit non-sensitive operations fields such as models, groups, priority, and weight.","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.","You do not have permission to edit channels":"You do not have permission to edit channels","You do not have permission to edit sensitive channel settings.":"You do not have permission to edit sensitive channel settings.","You do not have permission to perform this action.":"You do not have permission to perform this action.","You don\'t have necessary permission":"You don\'t have necessary permission","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.","You have unsaved changes":"You have unsaved changes","You have unsaved changes. Are you sure you want to leave?":"You have unsaved changes. Are you sure you want to leave?","You Pay":"You Pay","You save":"You save","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.","You will be redirected to Telegram to complete the binding process.":"You will be redirected to Telegram to complete the binding process.","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.","Your account can edit sensitive channel settings.":"Your account can edit sensitive channel settings.","Your account cannot edit sensitive channel settings.":"Your account cannot edit sensitive channel settings.","{{name}} called {{count}} times, cost {{quota}}":"{{name}} called {{count}} times, cost {{quota}}","your AI integration?":"your AI integration?","Your Azure OpenAI endpoint URL":"Your Azure OpenAI endpoint URL","Your Bot Name":"Your Bot Name","Your changes have not been saved.":"Your changes have not been saved.","Your Cloudflare Account ID":"Your Cloudflare Account ID","Your Discord OAuth Client ID":"Your Discord OAuth Client ID","Your Discord OAuth Client Secret":"Your Discord OAuth Client Secret","{{provider}} login and registration has not been enabled by administrator":"{{provider}} login and registration has not been enabled by administrator","{{provider}} returned empty user info, please check settings":"{{provider}} returned empty user info, please check settings","{{provider}} top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"{{provider}} top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}","Your GitHub OAuth Client ID":"Your GitHub OAuth Client ID","Your GitHub OAuth Client Secret":"Your GitHub OAuth Client Secret","Your identity has been verified. Continue to the provider to finish linking your account.":"Your identity has been verified. Continue to the provider to finish linking your account.","Your new backup codes are ready":"Your new backup codes are ready","Your Referral Link":"Your Referral Link","Your setup guide is collapsed so usage stays in focus.":"Your setup guide is collapsed so usage stays in focus.","Your Telegram Bot Token":"Your Telegram Bot Token","Your transaction history will appear here":"Your transaction history will appear here","Your Turnstile secret key":"Your Turnstile secret key","Your Turnstile site key":"Your Turnstile site key","Zero retention":"Zero retention","Zhipu":"Zhipu","Zhipu GLM":"Zhipu GLM","Zhipu V4":"Zhipu V4","Zoom":"Zoom"}}'),O=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","{{count}} outside this view":"{{count}} hors de cette vue","_copy":"_copie",",":", ",", and":", et",",and ":" et ","、":", ","? This action cannot be undone.":"? Cette action ne peut pas être annulée.",". Please fix the JSON before saving.":". Veuillez corriger le JSON avant d\'enregistrer.",". This action cannot be undone.":". Cette action ne peut pas être annulée.","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"({{total}} au total, {{omit}} omis)","(billed as vip itself, so base ratio of vip)":"(facturé comme vip lui-même, donc taux de base de vip)","(falls back to billing as vip, so base ratio of vip)":"(retombe sur la facturation vip, donc taux de base de vip)","(hits the override rule above)":"(correspond à la règle de remplacement ci-dessus)","(ID: {{id}})":"(ID : {{id}})","(instead of {{ratio}})":"(au lieu de {{ratio}})","(Leave empty to dissolve tag)":"(Laisser vide pour dissoudre le tag)","(matrix cell vip × premium is set)":"(la cellule vip × premium est définie)","(no matrix cell, so base ratio of default; the vip 0.8 is irrelevant)":"(pas de cellule, donc taux de base de default ; le 0,8 de vip est sans effet)","(no override rule, so base ratio of default; the 0.8 of vip plays no part)":"(pas de règle de remplacement, donc taux de base de default ; le 0,8 de vip ne joue aucun rôle)","(Optional: redirect model names)":"(Facultatif : rediriger les noms de modèles)","(Override all channels\' groups)":"(Remplacer les groupes de tous les canaux)","(Override all channels\' models)":"(Remplacer les modèles de tous les canaux)","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{bytes}} bytes":"{{bytes}} octets","{{category}} Models":"Modèles {{category}}","{{channels}} channels, {{tasks}} in-flight tasks":"{{channels}} canaux, {{tasks}} tâches en cours","{{completed}}/{{total}} completed":"{{completed}}/{{total}} terminé(s)","{{condition}} ({{timezone}})":"{{condition}} ({{timezone}})","{{count}} / {{max}} groups selected":"{{count}} groupes sélectionnés sur {{max}}","{{count}} announcements will be removed from the list.":"{{count}} annonces seront retirées de la liste.","{{count}} API shortcuts will be removed from the list.":"{{count}} raccourcis API seront retirés de la liste.","{{count}} available channels":"{{count}} canaux disponibles","{{count}} channel(s) deleted":"{{count}} canal(canaux) supprimé(s)","{{count}} channel(s) disabled":"{{count}} canal(canaux) désactivé(s)","{{count}} channel(s) enabled":"{{count}} canal(canaux) activé(s)","{{count}} channel(s) failed to disable":"{{count}} canal(canaux) n\'ont pas pu être désactivé(s)","{{count}} channel(s) failed to enable":"{{count}} canal(canaux) n\'ont pas pu être activé(s)","{{count}} combinations":"{{count}} combinaisons","{{count}} days ago":"il y a {{count}} jours","{{count}} days remaining":"{{count}} days remaining","{{count}} disabled channel(s) deleted":"{{count}} canal(canaux) désactivé(s) supprimé(s)","{{count}} enabled channels and {{tasks}} in-flight tasks still use this plugin.":"{{count}} canaux actifs et {{tasks}} tâches en cours utilisent encore ce plugin.","{{count}} enabled groups":"{{count}} groupes activés","{{count}} FAQ entries will be removed from the list.":"{{count}} entrées de FAQ seront retirées de la liste.","{{count}} hours ago":"il y a {{count}} heures","{{count}} incidents":"{{count}} incidents","{{count}} incidents in the last 24 hours":"{{count}} incidents au cours des dernières 24 heures","{{count}} incidents in the last 30 days":"{{count}} incidents au cours des 30 derniers jours","{{count}} IP(s)":"{{count}} IP","{{count}} linked model records":"{{count}} fiches de modèles associées","{{count}} log entries removed.":"{{count}} entrées de journal supprimées.","{{count}} minutes ago":"il y a {{count}} minutes","{{count}} model mapping(s)":"{{count}} correspondance(s) de modèle","{{count}} model(s) redirected":"{{count}} modèle(s) redirigé(s)","{{count}} model(s) skipped because another model derives the same request name":"{{count}} modèle(s) ignoré(s) car un autre modèle produit le même nom de requête","{{count}} model(s) unchanged by the rule were skipped":"{{count}} modèle(s) non modifié(s) par la règle ont été ignoré(s)","{{count}} models":"{{count}} modèles","{{count}} months ago":"il y a {{count}} mois","{{count}} override":"{{count}} remplacement","{{count}} permissions":"{{count}} autorisations","{{count}} permissions are no longer available":"{{count}} autorisations ne sont plus disponibles","{{count}} providers":"{{count}} fournisseurs","{{count}} records selected. Bulk actions are available.":"{{count}} fiches sélectionnées. Actions groupées disponibles.","{{count}} selected":"{{count}} sélectionnés","{{count}} selected models":"{{count}} modèles sélectionnés","{{count}} selected outside the current filters":"{{count}} modèles sélectionnés hors des filtres actuels","{{count}} selected targets available for bulk copy.":"{{count}} cibles sélectionnées disponibles pour la copie en lot.","{{count}} tiers":"{{count}} paliers","{{count}} Uptime Kuma groups will be removed from the list.":"{{count}} groupes Uptime Kuma seront retirés de la liste.","{{count}} vendors":"{{count}} fournisseurs","{{count}} weeks ago":"il y a {{count}} semaines","{{created}} models created, {{updated}} models updated, {{vendors}} vendors created.":"{{created}} modèles créés, {{updated}} modèles mis à jour, {{vendors}} fournisseurs créés.","{{currency}} / {{unit}} tokens":"{{currency}} / {{unit}} jetons","{{currency}} price per 1M input tokens.":"Prix en {{currency}} par million de tokens en entrée.","{{currency}} price per 1M tokens.":"Prix en {{currency}} par million de tokens.","{{field}} updated to {{value}}":"{{field}} mis à jour en {{value}}","A channel test task is already running or queued. Cannot start this manual task":"Une tâche de test des canaux est déjà en cours ou en attente. Impossible de lancer cette tâche manuelle","a dashboard login session is required":"une session de connexion au tableau de bord est requise","{{field}} updated to {{value}} for tag: {{tag}}":"{{field}} mis à jour en {{value}} pour le tag : {{tag}}","{{first}} and {{second}}":"{{first}} et {{second}}","A model update task is already running or queued. Cannot start this manual task":"Une tâche de mise à jour des modèles est déjà en cours ou en attente. Impossible de lancer cette tâche manuelle","{{first}} or {{second}}":"{{first}} ou {{second}}","A repair task is already running. Please try again later":"Une tâche de réparation est déjà en cours. Veuillez réessayer plus tard","{{key}} · from {{source}}":"{{key}} · source : {{source}}","{{key}} · version {{version}} · from {{source}}":"{{key}} · version {{version}} · depuis {{source}}","A token can select at most {{max}} Auto groups":"Un jeton peut sélectionner au plus {{max}} groupes Auto","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"{{modality}} non pris en charge","{{modality}} supported":"{{modality}} pris en charge","{{n}} model(s) selected":"{{n}} modèle(s) sélectionné(s)","{{operation}} (ID: {{id}})":"{{operation}} (ID : {{id}})","{{percent}}% OFF":"-{{percent}} %","{{processed}} of {{total}} log entries processed.":"{{processed}} sur {{total}} entrées de journal traitées.","{{protocol}} auth name":"Nom d’authentification {{protocol}}","{{protocol}} auth value":"Valeur d’authentification {{protocol}}","{{protocol}} authentication":"Authentification {{protocol}}","{{selected}} of {{total}} changed fields selected":"{{selected}} / {{total}} champs modifiés sélectionnés","{{start}}–{{end}}":"{{start}}–{{end}}","{{success}} succeeded, {{failed}} failed":"{{success}} réussi(s), {{failed}} échoué(s)","{{target}} test failed":"Échec du test de {{target}}","{{target}} test succeeded":"Test de {{target}} réussi","{{total}} models · {{syncable}} syncable · {{skipped}} skipped this time":"{{total}} modèles · {{syncable}} synchronisables · {{skipped}} ignorés cette fois","{{unit}} tokens":"{{unit}} jetons","{{value}} tokens/s":"{{value}} tokens/s","{{value}}ms":"{{value}} ms","{{value}}s":"{{value}} s","@lobehub/icons key":"@lobehub/icons clé","@lobehub/icons key name":"@lobehub/icons nom de la clé","/status/":"/status/","/your/endpoint":"/votre/endpoint","#1 App":"#1 App","#1 by usage":"N° 1 d\'utilisation","Access token expiry must be at least one hour from now.":"L’expiration du jeton d’accès doit être au moins une heure après maintenant.","Access token name must be 1 to 64 characters.":"Le nom du jeton d’accès doit comporter entre 1 et 64 caractères.","access token not found":"Jeton d’accès introuvable","#1 Model":"#1 Modèle","% off":"% de réduction","`, `-nothinking`, and effort suffixes such as `-high` while routing to the correct Gemini variant. When off, model names are sent upstream unchanged.":"`, `-nothinking` et les suffixes d’effort tels que `-high` lors du routage vers la variante Gemini correcte. Désactivé, les noms de modèle sont envoyés en amont tels quels.","© 2025 Your Company. All rights reserved.":"© 2025 Votre entreprise. Tous droits réservés.","+{{count}} more":"+{{count}} de plus","| Based on":"| Basé sur","0 means data is kept permanently":"0 signifie que les données sont conservées indéfiniment","0 means unlimited":"0 signifie illimité","1 Day":"1 jour","1 day ago":"Il y a 1 jour","1 hour":"1 heure","1 Hour":"1H","1 hour ago":"Il y a 1 heure","1 minute":"1 minute","1 minute ago":"Il y a 1 minute","1 Month":"1M","1 month ago":"Il y a 1 mois","1 week ago":"Il y a 1 semaine","1 year":"1 an","1 year ago":"Il y a 1 an","1. Create an application in your Gotify server":"1. Créez une application sur votre serveur Gotify","1. Select models users call":"1. Sélectionner les modèles appelés","1. Select upstream models":"1. Sélectionner les modèles en amont","10 / page":"10 / page","100 / page":"100 / page","14 Days":"14 jours","Action {{action}}":"Action {{action}}","180 days":"180 jours","192.168.1.1 10.0.0.0/8":"192.168.1.1 10.0.0.0/8","1M":"1M","1M token":"1M token","1W":"1S","2. Copy the application token":"2. Copiez le jeton de l\'application","2. Set names users call":"2. Définir les noms pour les utilisateurs","2. Set upstream model names":"2. Définir les noms envoyés en amont","20 / page":"20 / page","24 Hours":"24 heures","24 hours ago":"Il y a 24 heures","29 Days":"29 jours","2xx, 504 and 524 are always excluded.":"2xx, 504 et 524 sont toujours exclus.","3. Enter your Gotify server URL and token above":"3. Saisissez l\'URL de votre serveur Gotify et le jeton ci-dessus","3. Review mappings":"3. Vérifier les correspondances","30 days":"30 jours","30 Days":"30 jours","30 days ago":"Il y a 30 jours","30d change":"Variation 30 j","5 minutes":"5 minutes","5-Hour Window":"Fenêtre de 5 heures","50 / page":"50 / page","7 Days":"7 jours","7 days ago":"Il y a 7 jours","80,443,8080":"80,443,8080","90 days":"90 jours","A billing multiplier. Lower ratios mean lower API call costs.":"Un multiplicateur de facturation. Plus le ratio est faible, plus le coût des appels API est bas.","A focused home for keys, balance, routing, and service health.":"Un accueil dédié aux clés, au solde, au routage et à l\'état du service.","A matching hash confirms the published file, not the safety of its code.":"Une empreinte identique confirme le fichier publié, pas la sécurité de son code.","A Passkey created for www.example.com cannot be used on example.com. Keep the old website available so users can still verify there.":"Une clé d’accès créée pour www.example.com ne fonctionne pas sur example.com. Gardez l’ancien site accessible pour permettre aux utilisateurs de s’y authentifier.","A security operation is already in progress.":"Une opération de sécurité est déjà en cours.","A selected model no longer exists. Reload the model list.":"Un modèle sélectionné n’existe plus. Rechargez la liste.","A token that never expires stays valid until you revoke it. Set an expiration date when possible.":"Un jeton qui n’expire jamais reste valide jusqu’à sa révocation. Définissez une date d’expiration si possible.","A vendor with this name already exists.":"Un fournisseur porte déjà ce nom.","About":"À propos","About {{days}} days left":"Environ {{days}} jours restants","About pricing currency":"À propos de la devise de tarification","Accept Unpriced Models":"Accepter les modèles non tarifés","Accept upstream certificates that fail validation, such as self-signed ones. Only enable for trusted internal upstreams.":"Accepte les certificats amont qui échouent à la validation, comme les certificats auto-signés. À n\'activer que pour des serveurs amont internes de confiance.","Accepts a JSON array of model identifiers that support the Imagine API.":"Accepte un tableau JSON d\'identifiants de modèles qui prennent en charge l\'API Imagine.","Accepts comma-separated status codes and inclusive ranges.":"Accepte les codes de statut séparés par des virgules et les plages inclusives.","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"Accédez à une vaste sélection de modèles via un protocole API standard et unifié. Propulsez les applications d\'IA, gérez les actifs numériques et connectez le futur.","Access Baidu Qianfan models through the legacy API":"Accéder aux modèles Baidu Qianfan via l’ancienne API","Access Baidu Qianfan models through the V2 API":"Accéder aux modèles Baidu Qianfan via l’API V2","Access Codex using ChatGPT subscription credentials":"Accéder à Codex avec les identifiants d’un abonnement ChatGPT","Access Denied Message":"Message d\'accès refusé","Access Forbidden":"Accès interdit","Access hosted model predictions through Replicate":"Accéder aux prédictions de modèles hébergés sur Replicate","Access model services through MokaAI":"Accéder aux modèles via MokaAI","Access model services through the OhMyGPT gateway":"Accéder aux modèles via la passerelle OhMyGPT","Access models from multiple providers through OpenRouter":"Accéder aux modèles de plusieurs fournisseurs via OpenRouter","Access models through Amazon Bedrock":"Accéder aux modèles via Amazon Bedrock","Access models through Cloudflare Workers AI":"Accéder aux modèles via Cloudflare Workers AI","Access models through Google Cloud Vertex AI":"Accéder aux modèles via Google Cloud Vertex AI","Access Policy (JSON)":"Politique d\'accès (JSON)","Access previous conversations and start new ones.":"Accéder aux conversations précédentes et en démarrer de nouvelles.","Access records":"Historique d’accès","Access Token":"Jeton d\'accès","Access token expired":"Jeton d’accès expiré","Access token revoked":"Jeton d’accès révoqué","Access tokens":"Jetons d’accès","Access tokens cannot use this feature":"Les jetons d’accès ne peuvent pas utiliser cette fonctionnalité","Access Zhipu models through the legacy API":"Accéder aux modèles Zhipu via l’ancienne API","Access Zhipu models through the V4 API":"Accéder aux modèles Zhipu via l’API V4","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Actions":"Actions sur le compte","Account binding":"Liaison de compte","Account Binding Management":"Gestion des liaisons de compte","Account binding request":"Demande de liaison de compte","Account Bindings":"Associations de compte","Account bindings have changed. Start this operation again.":"Les comptes liés ont changé. Recommencez cette opération.","Account created! Please sign in":"Compte créé ! Veuillez vous connecter","Account deleted successfully":"Compte supprimé avec succès","Account deletion":"Suppression du compte","Account ID":"ID de compte","Account ID *":"ID de compte *","Account Info":"Informations du compte","Account password change":"Modification du mot de passe","Account security":"Sécurité du compte","Account unlinking":"Dissociation de compte","Account used when authenticating with the SMTP server":"Compte utilisé lors de l\'authentification auprès du serveur SMTP","acknowledge the related legal risks":"reconnais les risques juridiques associés","Across all groups":"Tous groupes confondus","Action":"Action","Action confirmation":"Confirmation de l\'action","Actions":"Actions","Actions for {{name}}":"Actions pour {{name}}","Activate / Roll back":"Activer / Restaurer","Activate now":"Activer maintenant","Activating...":"Activation...","active":"actif","Active":"Actif","Active apps":"Applications actives","Active Cache Count":"Nombre de caches actifs","Active Files":"Fichiers actifs","Active models":"Modèles actifs","Active Tasks":"Tâches actives","active users":"utilisateurs actifs","Active version":"Version active","Actively check all channels":"Vérifier activement tous les canaux","Actively check auto-disable-enabled channels":"Vérifier activement les canaux avec désactivation automatique","Actual Amount":"Montant réel","Actual Model":"Modèle réel","Actual Model:":"Modèle réel :","Adapt `-thinking`, `-nothinking`, and effort suffixes such as `-high` to Anthropic native thinking behavior while keeping billing predictable. When off, model names are sent upstream unchanged.":"Adapter les requêtes avec les suffixes `-thinking`, `-nothinking` et les suffixes d’effort tels que `-high` au comportement de pensée natif d’Anthropic tout en gardant une facturation prévisible. Désactivé, les noms de modèle sont envoyés en amont tels quels.","Add":"Ajouter","Add \\"{{value}}\\"":"Ajouter \\"{{value}}\\"","Add {{added}} models and remove {{removed}} models":"Ajouter {{added}} modèles et en retirer {{removed}}","Add {{count}} mapping(s)":"Ajouter {{count}} correspondance(s)","Add {{title}}":"Ajouter {{title}}","Add a group identifier to the auto assignment list.":"Ajouter un identifiant de groupe à la liste d\'affectation automatique.","Add a new API key by providing necessary info.":"Ajoutez une nouvelle clé API en fournissant les informations nécessaires.","Add a new channel by providing the necessary information.":"Ajoutez un nouveau canal en fournissant les informations nécessaires.","Add a new model to the system by providing the necessary information.":"Ajoutez un nouveau modèle au système en fournissant les informations nécessaires.","Add a new user by providing necessary info.":"Ajouter un nouvel utilisateur en fournissant les informations nécessaires.","Add a new vendor to the system":"Ajouter un nouveau fournisseur au système","Add a vendor or adjust your search.":"Ajoutez un fournisseur ou modifiez la recherche.","Add an extra layer of security to your account":"Ajouter une couche de sécurité supplémentaire à votre compte","Add an index URL to browse installable plugins.":"Ajoutez une URL d’index pour parcourir les plugins installables.","Add and submit":"Ajouter et soumettre","Add Announcement":"Ajouter une annonce","Add another login method before unlinking this account.":"Ajoutez un autre mode de connexion avant de dissocier ce compte.","Add API":"Ajouter une API","Add API Shortcut":"Ajouter un raccourci API","Add at least one condition to this group.":"Ajoutez au moins une condition à ce groupe.","Add auto group":"Ajouter un groupe automatique","Add Auto group":"Ajouter un groupe Auto","Adjusted by the channel adaptor":"Ajusté par l\'adaptateur du canal","Add chat preset":"Ajouter un préréglage de chat","Add condition":"Ajouter une condition","Add Condition":"Ajouter une condition","Add condition group":"Ajouter un groupe","Add credits":"Ajouter des crédits","Add custom model \\"{{value}}\\"":"Ajouter le modèle personnalisé « {{value}} »","Add discount tier":"Ajouter un niveau de réduction","Add each model or tag you want to include.":"Ajoutez chaque modèle ou étiquette que vous souhaitez inclure.","Add FAQ":"Ajouter une FAQ","Add from available models...":"Ajouter à partir des modèles disponibles...","Add Funds":"Ajouter des fonds","Add group":"Ajouter un groupe","Administrator completed the order, amount added: {{quota}}, payment amount: {{amount}}":"Commande complétée par l\'administrateur, montant ajouté : {{quota}}, montant payé : {{amount}}","Administrator reset the quota of subscription plan {{plan_title}} (ID: {{plan_id}})":"L\'administrateur a réinitialisé le quota de l\'offre d\'abonnement {{plan_title}} (ID : {{plan_id}})","Add Group":"Ajouter un groupe","Add group rate limit":"Ajouter une limite de taux de groupe","Add group rules":"Ajouter des règles de groupe","Add groups in the order they should be tried.":"Ajoutez les groupes dans l’ordre des tentatives.","Add management route":"Ajouter une route de gestion","Add Mapping":"Ajouter un mappage","Add metadata":"Compléter","Add metadata to all selected models first.":"Complétez d’abord les métadonnées de tous les modèles sélectionnés.","Add method":"Ajouter une méthode","Add missing models":"Ajouter les modèles manquants","Add Mode":"Ajouter un mode","Add model":"Ajouter un modèle","Add Model":"Ajouter un modèle","Add model pricing":"Ajouter une tarification de modèle","Add Models":"Ajouter des modèles","Add new amount":"Ajouter un nouveau montant","Add new redemption code(s) by providing necessary info.":"Ajouter de nouveaux codes de réduction en fournissant les informations nécessaires.","Add OAuth Provider":"Ajouter un fournisseur OAuth","Add param/header":"Ajouter un param / un en-tête","Add payment method":"Ajouter un mode de paiement","Add photos or files":"Ajouter des photos ou des fichiers","Add prefix":"Ajouter un préfixe","Add pricing branch":"Ajouter une branche tarifaire","Add product":"Ajouter un produit","Add Provider":"Ajouter un fournisseur","Add Quota":"Ajouter un quota","Add ratio override":"Ajouter un remplacement de ratio","Add route":"Ajouter une route","Add routes individually or replace them from a template.":"Ajoutez des routes individuellement ou remplacez-les à partir d’un modèle.","Add Row":"Ajouter une ligne","Add rule":"Ajouter une règle","Add Rule":"Ajouter une règle","Add rule group":"Ajouter un groupe de règles","Add rules for a user group":"Ajouter des règles pour un groupe d’utilisateurs","Add selectable group":"Ajouter un groupe sélectionnable","Add source":"Ajouter une source","Add split":"Ajouter une branche","Add subscription":"Ajouter un abonnement","Add suffix":"Ajouter un suffixe","Add tags...":"Ajouter des étiquettes...","Add template":"Ajouter un modèle","Add tier":"Ajouter un palier","Add time condition":"Ajouter une condition temporelle","Add time rule group":"Ajouter un groupe de règles temporelles","Add to group {{path}}":"Ajouter au groupe {{path}}","Add Uptime Kuma Group":"Ajouter un groupe Uptime Kuma","Add User":"Ajouter un utilisateur","Add user group":"Ajouter un groupe d\'utilisateurs","Add Vendor":"Ajouter un fournisseur","Add your API keys, set up channels and configure access permissions":"Ajoutez vos clés API, configurez les canaux et les permissions d\'accès","Added":"Ajouts","Added {{count}} model(s)":"{{count}} modèle(s) ajouté(s)","Added {{count}} models from \\"{{name}}\\"":"{{count}} modèles ajoutés depuis « {{name}} »","Added models":"Modèles ajoutés","Added once per request. Set to 0 for usage-only billing.":"Ajoutés une fois par requête. Saisissez 0 pour facturer uniquement l’usage.","Added successfully":"Ajouté avec succès","Added to the usage cost. Set to 0 for no additional charge.":"Montant ajouté au coût d’usage. Saisissez 0 pour ne rien ajouter.","Additional charge":"Supplément","Additional Conditions":"Conditions supplémentaires","Additional information":"Informations supplémentaires","Additional Information":"Informations supplémentaires","Additional Limit":"Limite supplémentaire","Additional Limits":"Limites supplémentaires","Additional metered capability":"Fonctionnalité supplémentaire facturée à l’usage","Additional request domains":"Domaines supplémentaires","Additional verification required":"Vérification supplémentaire requise","Adjust filters, then search to refresh the logs.":"Ajustez les filtres, puis lancez la recherche pour actualiser les journaux.","Adjust Quota":"Ajuster le quota","Adjust quota for user “{{name}}”":"Modifier le quota de « {{name}} »","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"Ajustez le formatage des réponses, le comportement des prompts, le proxy et l’automatisation amont.","Adjust the appearance and layout to suit your preferences.":"Ajustez l\'apparence et la mise en page selon vos préférences.","Adjust user quota":"Modifier le quota utilisateur","Adjustment mode":"Mode de modification","Admin":"Administrateur","Admin access required":"Accès administrateur requis","Admin area":"Espace administrateur","Admin Channel Permissions":"Autorisations des canaux administrateur","Admin notes (only visible to admins)":"Notes d\'administration (visibles uniquement par les administrateurs)","Admin Only":"Administrateur uniquement","Admin Permissions":"Autorisations administrateur","Admin permissions updated":"Autorisations administrateur mises à jour","Administer user accounts and roles.":"Gérer les comptes d\'utilisateurs et les rôles.","Administration":"Administration","Administrator account":"Compte administrateur","Administrator username":"Nom d\'utilisateur administrateur","Advance next reset time":"Avancer la prochaine réinitialisation","Advanced":"Avancé","Advanced Configuration":"Configuration avancée","Advanced Custom":"Personnalisé avancé","Advanced custom configuration is required":"La configuration personnalisée avancée est requise","Advanced custom configuration requires at least one route":"La configuration personnalisée avancée nécessite au moins une route","Advanced Custom Routes":"Routes personnalisées avancées","Advanced options":"Options avancées","Advanced Options":"Options avancées","Advanced platform configuration.":"Configuration avancée de la plateforme.","Advanced Settings":"Paramètres avancés","Advanced text editing":"Édition de texte avancée","Aesthetic style":"Style esthétique","Affected windows:":"Fenêtres affectées :","Affinity cache settings":"Cache d’affinité","After clicking the button, you\'ll be asked to authorize the bot":"Après avoir cliqué sur le bouton, il vous sera demandé d\'autoriser le bot","After conversion":"Après conversion","After conversion, expression reservation and rounding rules apply. Effective unit prices are preserved; individual rounded charges may differ.":"Après conversion, les règles de réservation et d’arrondi des expressions s’appliquent. Les prix unitaires effectifs sont conservés, mais les montants arrondis peuvent différer.","Allow users to export logs":"Autoriser les utilisateurs à exporter les journaux","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"Après désactivation, il ne sera plus affiché aux utilisateurs, mais les commandes historiques ne sont pas affectées. Continuer ?","After enabling, client request headers are forwarded to the upstream, excluding standard authentication headers, cookies and transport headers:":"Une fois activé, les en-têtes du client sont transmis au service amont, sauf les en-têtes d\'authentification standard, les cookies et les en-têtes de transport :","After enabling, the original request body is forwarded to the upstream without gateway rewriting:":"Une fois activé, le corps original de la requête est transmis au service amont sans réécriture par la passerelle :","After enabling, the plan will be shown to users. Continue?":"Après activation, le plan sera affiché aux utilisateurs. Continuer ?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"Après l\'invalidation, cet abonnement sera immédiatement désactivé. Les enregistrements historiques ne sont pas affectés. Continuer ?","Agent ID":"ID d\'agent","Agent ID *":"ID d\'agent *","Aggregate tokens delivered across the platform":"Jetons cumulés livrés sur la plateforme","Aggregate traffic across every category":"Trafic cumulé sur toutes les catégories","Aggregated across enabled groups":"Agrégé sur les groupes activés","Aggregated across the apps below":"Agrégé sur les applications ci-dessous","Aggregated traffic by upstream model provider":"Trafic agrégé par fournisseur de modèle amont","Aggregated usage metrics and trend charts.":"Métriques d\'utilisation agrégées et graphiques de tendances.","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"agrège plus de 50 fournisseurs IA derrière une API unifiée. Gérez l\'accès, suivez les coûts et évoluez sans effort.","Aggregation bucket":"Fenêtre d’agrégation","AGPL v3.0 License":"Licence AGPL v3.0","AI Application Infrastructure Foundation":"Socle d\'infrastructure pour applications d\'IA","Already checked in today":"Vous avez déjà fait l\'enregistrement aujourd\'hui","AI model testing environment":"Environnement de test de modèle IA","AI models":"Modèles d\'IA","AI models supported":"Modèles d\'IA pris en charge","AI Proxy":"AI Proxy","AI Proxy Library":"Bibliothèque AI Proxy","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"Mode AK/SK : utiliser AccessKey|SecretAccessKey|Region","Ali":"Alibaba Bailian","Alipay":"Alipay","All":"Tout","All API tokens":"Tous les jetons API","All categories":"Toutes catégories","All combinations are priced at zero. Matching requests will be billed as free.":"Toutes les combinaisons ont un prix nul. Les requêtes correspondantes ne seront pas facturées.","All conditions":"Toutes les conditions","All conditions must match before this tier is used.":"Toutes les conditions doivent correspondre avant que ce palier soit utilisé.","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"Toutes les modifications sont des opérations d\'écrasement. Laissez les champs vides pour conserver les valeurs actuelles inchangées.","All files exceed the maximum size.":"Tous les fichiers dépassent la taille maximale.","All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.":"Tous les noms de groupes sont gérés ici. Le taux s’applique lorsque les appels sont facturés sous ce groupe ; le taux de recharge s’applique aux utilisateurs appartenant à ce groupe.","All Groups":"Tous les groupes","All groups share one pool of names managed in the pricing group table, but a name plays two different roles: as a user group it describes the user, as a token group it decides routing and billing.":"Tous les groupes partagent un même ensemble de noms géré dans le tableau des groupes tarifaires, mais un nom joue deux rôles distincts : en tant que groupe d’utilisateurs il décrit l’utilisateur, en tant que groupe de jetons il détermine le routage et la facturation.","All models":"Tous les modèles","Announcement #{{index}} content cannot exceed 500 characters":"Le contenu de l\'annonce n° {{index}} ne peut pas dépasser 500 caractères","Announcement #{{index}} has an invalid publish date format":"L\'annonce n° {{index}} a un format de date de publication invalide","Announcement #{{index}} has an invalid type value":"L\'annonce n° {{index}} a une valeur de type invalide","Announcement #{{index}} is missing the content field":"L\'annonce n° {{index}} n\'a pas de champ de contenu","Announcement #{{index}} is missing the publish date field":"L\'annonce n° {{index}} n\'a pas de champ de date de publication","Announcement #{{index}} note cannot exceed 100 characters":"La note de l\'annonce n° {{index}} ne peut pas dépasser 100 caractères","Announcement #{{index}} publish date cannot be empty":"La date de publication de l\'annonce n° {{index}} ne peut pas être vide","All Models":"Tous les modèles","All models in use are properly configured.":"Tous les modèles utilisés sont correctement configurés.","All Must Match (AND)":"Toutes doivent correspondre (AND)","All nodes":"Tous les nœuds","All playground messages saved in this browser will be removed. This cannot be undone.":"Tous les messages du Playground enregistrés dans ce navigateur seront supprimés. Cette action est irréversible.","All requests":"Toutes les requêtes","All requests must include":"Toutes les requêtes doivent inclure","Announcements cannot exceed 100 entries":"Les annonces ne peuvent pas dépasser 100 entrées","All results":"Tous les résultats","Another log export is running. Try again after it finishes.":"Une autre exportation de journaux est en cours. Réessayez quand elle sera terminée.","All routes":"Toutes les routes","All Status":"Tous les statuts","All Sync Status":"Tous les statuts de synchronisation","All systems operational":"Tous les systèmes opérationnels","All Tags":"Tous les tags","All tokens":"Tous les jetons","All Types":"Tous les types","All upstream data is trusted":"Toutes les données en amont sont fiables","All users":"Tous les utilisateurs","All Vendors":"Tous les fournisseurs","All-time":"Tous temps","Allocated Memory":"Mémoire allouée","Allow accountFilter parameter":"Autoriser le paramètre accountFilter","Allow balance redemption":"Autoriser le paiement avec le solde","Allow Claude beta query passthrough":"Autoriser le passage des requêtes bêta Claude","Allow clients to query configured prices via `/api/ratio`.":"Autoriser les clients à consulter les prix configurés via `/api/ratio`.","Allow clients to query configured ratios via `/api/ratio`.":"Autoriser les clients à interroger les ratios configurés via `/api/ratio`.","API info #{{index}} contains disallowed content":"L\'information API n° {{index}} contient du contenu non autorisé","API info #{{index}} description cannot exceed 200 characters":"La description de l\'information API n° {{index}} ne peut pas dépasser 200 caractères","API info #{{index}} has a URL that cannot be parsed: {{error}}":"L\'URL de l\'information API n° {{index}} ne peut pas être analysée : {{error}}","API info #{{index}} has an invalid color value":"L\'information API n° {{index}} a une valeur de couleur invalide","API info #{{index}} has an invalid URL format":"L\'information API n° {{index}} a un format d\'URL invalide","API info #{{index}} is missing the color field":"L\'information API n° {{index}} n\'a pas de champ de couleur","API info #{{index}} is missing the description field":"L\'information API n° {{index}} n\'a pas de champ de description","API info #{{index}} is missing the route description field":"L\'information API n° {{index}} n\'a pas de champ de description de la route","API info #{{index}} is missing the URL field":"L\'information API n° {{index}} n\'a pas de champ URL","API info #{{index}} route description cannot exceed 100 characters":"La description de la route de l\'information API n° {{index}} ne peut pas dépasser 100 caractères","API info #{{index}} URL cannot exceed 500 characters":"L\'URL de l\'information API n° {{index}} ne peut pas dépasser 500 caractères","Allow HTTP image requests":"Autoriser les requêtes d\'images HTTP","API info cannot exceed 50 entries":"Les informations API ne peuvent pas dépasser 50 entrées","Allow include usage obfuscation passthrough":"Autoriser le passage de l\'obfuscation d\'utilisation","Allow inference geography passthrough":"Autoriser le passage de la géographie d\'inférence","Allow inference_geo passthrough":"Autoriser la transmission de inference_geo","Allow Insecure Origins":"Autoriser les origines non sécurisées","Allow listing when a channel is available and the user has group access. This does not change API access.":"Autorise l’affichage si un canal est disponible et son groupe accessible. Ne modifie pas l’accès API.","Allow metadata sync":"Autoriser la synchronisation des métadonnées","Allow new users to register":"Autoriser les nouveaux utilisateurs à s\'inscrire","Allow Private IPs":"Autoriser les IP privées","Allow querying user quota":"Autoriser la consultation du quota utilisateur","Allow registration with password":"Autoriser l\'inscription avec mot de passe","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"Autoriser les requêtes vers les plages d\'adresses IP privées (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"Autoriser la relance","Allow safety_identifier passthrough":"Autoriser la transmission de safety_identifier","Allow self-signed or hostname-mismatched SMTP certificates":"Autoriser les certificats SMTP auto-signés ou dont le nom d\'hôte ne correspond pas","Allow service_tier passthrough":"Autoriser la transmission de service_tier","Allow speed passthrough":"Autoriser la transmission de speed","Allow updates":"Autoriser les mises à jour","Allow upstream callbacks":"Autoriser les callbacks en amont","Allow users to check in daily for random quota rewards":"Permettre aux utilisateurs de se connecter quotidiennement pour des récompenses de quota aléatoires","Allow users to enter promo codes":"Autoriser les utilisateurs à saisir des codes promotionnels","Allow users to log in with password":"Autoriser les utilisateurs à se connecter avec un mot de passe","Allow users to register and sign in with Passkey (WebAuthn)":"Autoriser les utilisateurs à s\'inscrire et se connecter avec une clé d\'accès (Passkey) (WebAuthn)","Allow users to sign in with Discord":"Autoriser les utilisateurs à se connecter avec Discord","Allow users to sign in with GitHub":"Autoriser les utilisateurs à se connecter avec GitHub","Allow users to sign in with LinuxDO":"Autoriser les utilisateurs à se connecter avec LinuxDO","Allow users to sign in with OpenID Connect":"Autoriser les utilisateurs à se connecter avec OpenID Connect","Allow users to sign in with Telegram":"Autoriser les utilisateurs à se connecter avec Telegram","Allow users to sign in with this provider":"Autoriser les utilisateurs à se connecter avec ce fournisseur","Allow users to sign in with WeChat":"Autoriser les utilisateurs à se connecter avec WeChat","Allow using models without price configuration":"Autoriser l\'utilisation de modèles sans configuration de prix","Allow wallet balance after quota used up":"Autoriser le solde du portefeuille une fois le quota épuisé","Allowed":"Autorisé","Allowed hosts":"Hôtes autorisés","Allowed Origins":"Origines autorisées","Allowed Passkey websites":"Sites autorisés pour les Passkeys","Allowed Ports":"Ports autorisés","Allows selected fields to be overwritten after a sync preview. No automatic synchronization.":"Autorise l’écrasement des champs sélectionnés après aperçu. Aucune synchronisation automatique.","Already have an account?":"Vous avez déjà un compte ?","Also remove custom pricing":"Supprimer aussi les prix personnalisés","Also remove from all channels":"Retirer aussi de tous les canaux","Also remove pricing":"Supprimer aussi les prix","Always matches (default tier).":"Toujours appliqué (palier par défaut).","Amount":"Montant","Amount cannot be changed when editing.":"Le montant ne peut pas être modifié lors de la modification.","Amount discount":"Remise sur le montant","Amount Due":"Montant dû","Amount must be a whole number":"Le montant doit être un nombre entier","Amount must be greater than 0":"Le montant doit être supérieur à 0","Amount of quota to credit to user account.":"Montant du quota à créditer sur le compte utilisateur.","Amount options must be a JSON array":"Les options de montant doivent être un tableau JSON","Amount the user pays to purchase this plan (USD).":"Montant que l\'utilisateur paie pour acheter ce forfait (USD).","Amount the user pays to purchase this plan; the actual currency depends on the payment gateway.":"Montant que l\'utilisateur paie pour acheter ce forfait ; la devise réelle dépend de la passerelle de paiement.","Amount to pay:":"Montant à payer :","An empty field uses the system website address. If Passkeys already work, keep the existing domain.":"Si ce champ est vide, l’adresse du site système est utilisée. Si les clés d’accès fonctionnent déjà, conservez le domaine actuel.","An expression draft already exists. Open the Expression tab to keep editing it.":"Un brouillon d’expression existe déjà. Ouvrez l’onglet Expression pour continuer à le modifier.","An unexpected error occurred":"Une erreur inattendue est survenue","An unknown error occurred":"Une erreur inconnue est survenue","Analyze data":"Analyser les données","and":"et","Announcement added. Click \\"Save Settings\\" to apply.":"Annonce ajoutée. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Announcement content":"Contenu de l\'annonce","Announcement deleted. Click \\"Save Settings\\" to apply.":"Annonce supprimée. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Announcement Details":"Détails de l\'annonce","Announcement displayed to users (supports Markdown & HTML)":"Annonce affichée aux utilisateurs (prend en charge Markdown et HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"Annonce mise à jour. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Announcements":"Annonces","Announcements saved successfully":"Annonces enregistrées avec succès","Answer":"Réponse","Answers for common access and billing questions":"Réponses aux questions courantes sur l\'accès et la facturation","Anthropic":"Anthropic","Anthropic Messages to OpenAI Chat":"Anthropic Messages vers OpenAI Chat","Anthropic Messages to OpenAI Responses":"Anthropic Messages vers OpenAI Responses","Any condition":"Au moins une condition","Any Match (OR)":"N\'importe laquelle (OR)","Anyone can publish an index. A plugin installed from a third-party source has the same access as one you upload by hand: review its source before installing.":"N’importe qui peut publier un index. Un plugin installé depuis une source tierce a exactement les mêmes accès qu’un plugin importé à la main : examinez son code avant de l’installer.","API":"API","API Access":"Accès API","API Addresses":"Adresses API","API Base URL":"URL de base de l\'API","API Base URL (Important: Not Chat API)":"URL de base de l\'API (Important : Pas l\'API de Chat)","API Base URL (Important: Not Chat API) *":"URL de base de l\'API (Important : Pas l\'API de Chat) *","API Base URL *":"URL de base de l\'API *","API Endpoints":"Points de terminaison API","API Info":"Infos API","API info added. Click \\"Save Settings\\" to apply.":"Informations API ajoutées. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","API info deleted. Click \\"Save Settings\\" to apply.":"Informations API supprimées. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","API info saved successfully":"Informations API enregistrées avec succès","API info updated. Click \\"Save Settings\\" to apply.":"Informations API mises à jour. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","API key":"Clé API","API Key":"Clé API","API Key (one per line for batch mode)":"Clé API (une par ligne pour le mode batch)","API Key (Production)":"Clé API (Production)","API Key (Sandbox)":"Clé API (Sandbox)","API Key *":"Clé API *","API Key created successfully":"Clé API créée avec succès","API Key deleted successfully":"Clé API supprimée avec succès","API Key disabled successfully":"Clé API désactivée avec succès","API Key enabled successfully":"Clé API activée avec succès","API key from the provider":"Clé API du fournisseur","API key is loading, please try again in a moment":"La clé API est en cours de chargement, veuillez réessayer dans un instant","API key is required":"La clé API est requise","API Key mode (does not support batch creation)":"Mode clé API (ne prend pas en charge la création par lots)","API Key mode: use APIKey|Region":"Mode clé API : utiliser APIKey|Region","API Key Quota":"Quota de la clé API","API Key updated successfully":"Clé API mise à jour avec succès","API keys":"Clés API","API Keys":"Clés API","API Private Key":"Clé privée de l\'API","API Requests":"Requêtes API","API secret":"Secret API","API token batch deletion":"Suppression groupée de jetons API","API token batch key access":"Consultation groupée des clés de jetons API","API token configuration update":"Modification de la configuration du jeton API","API token creation":"Création de jeton API","API token deletion":"Suppression de jeton API","API token key access":"Consultation de la clé du jeton API","API token management":"Gestion des tokens API","API token status update":"Modification du statut du jeton API","API URL":"URL de l\'API","API usage records":"Historique d\'utilisation de l\'API","API version":"Version API","API Version":"Version de l\'API","API2GPT":"API2GPT","Ascending":"Croissant","Audio input cost {{quota}}":"Coût de l\'entrée audio {{quota}}","App":"Application","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"Les classements d\'applications présentés ici sont simulés à des fins de prévisualisation et seront remplacés par des données réelles une fois l\'intégration du backend terminée.","Append":"Ajouter à la fin","Append mode: New keys will be added to the end of the existing key list":"Mode d\'ajout : Les nouvelles clés seront ajoutées à la fin de la liste de clés existante","Append Template":"Ajouter le modèle","Append to channel":"Ajouter au canal","Append to End":"Ajouter à la fin","Append to existing keys":"Ajouter aux clés existantes","Append value to array / string / object end":"Ajouter la valeur à la fin du tableau / chaîne / objet","appended":"ajouté","Applicable channels":"Canaux compatibles","Applicable conditions":"Conditions applicables","Application":"Application","Applied {{name}} pricing to {{count}} models":"Tarification de {{name}} appliquée à {{count}} modèles","Applied changes":"Modifications appliquées","Applied upstream model changes to {{count}} channels":"Modifications des modèles en amont appliquées à {{count}} canaux","Applied upstream model changes to channel (ID: {{id}})":"Modifications des modèles en amont appliquées au canal (ID : {{id}})","Applies to custom completion endpoints. JSON map of model → ratio.":"S\'applique aux points de terminaison de complétion personnalisés. Mappage JSON de modèle → ratio.","Apply":"Appliquer","Apply {{count}} model changes":"Appliquer les modifications à {{count}} modèles","Apply {{field}} for {{name}}":"Appliquer {{field}} à {{name}}","Apply All Upstream Updates":"Appliquer toutes les mises à jour upstream","Apply changes":"Appliquer","Apply disable rules to upstream request errors and scheduled or bulk health checks":"Appliquer les règles aux erreurs en amont et aux contrôles périodiques ou groupés","Apply Filters":"Appliquer les filtres","Apply IP Filter to Resolved Domains":"Appliquer le filtre IP aux domaines résolus","Apply Overwrite":"Appliquer l\'écrasement","Apply plan":"Appliquer le plan","Apply reset":"Appliquer la réinitialisation","Apply selected changes":"Appliquer les changements sélectionnés","Apply Sync":"Appliquer la synchronisation","Apply to all rows":"Appliquer à toutes les lignes","Apply to draft":"Appliquer au brouillon","Applying...":"Application en cours...","Approx.":"Environ.","Approximate prices for common specs.":"Prix approximatifs pour les spécifications courantes.","apps":"applications","Apps":"Applications","apps tracked":"applications suivies","Apps using the most tokens through new-api":"Applications consommant le plus de jetons via new-api","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"sont également listés ici. Supprimez-les des Modèles pour que la réponse `/v1/models` reste conviviale et pour masquer les noms spécifiques aux fournisseurs.","Are you sure you want to delete":"Êtes-vous sûr de vouloir supprimer","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer {{count}} modèle(s) ? Cette action ne peut pas être annulée.","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer toutes les clés automatiquement désactivées ? Cette action ne peut pas être annulée.","Are you sure you want to delete channel \\"{{name}}\\"? This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer le canal \\"{{name}}\\" ? Cette action ne peut pas être annulée.","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer le déploiement \\"{{name}}\\" ? Cette action est irréversible.","Are you sure you want to delete group \\"{{name}}\\"? This action cannot be undone.":"Voulez-vous vraiment supprimer le groupe \\"{{name}}\\" ? Cette action est irréversible.","Auto group {{group}} is duplicated":"Le groupe Auto {{group}} est en double","Auto group {{group}} is unavailable or unauthorized":"Le groupe Auto {{group}} est indisponible ou non autorisé","Are you sure you want to delete model \\"{{name}}\\"? This action cannot be undone.":"Voulez-vous vraiment supprimer le modèle \\"{{name}}\\" ? Cette action est irréversible.","Are you sure you want to delete this key? This action cannot be undone.":"Êtes-vous sûr de vouloir supprimer cette clé ? Cette action ne peut pas être annulée.","Are you sure you want to disable all enabled keys?":"Êtes-vous sûr de vouloir désactiver toutes les clés activées ?","Are you sure you want to enable all keys?":"Êtes-vous sûr de vouloir activer toutes les clés ?","Are you sure you want to enable plugin {{name}} ({{key}})?":"Voulez-vous activer le plugin {{name}} ({{key}}) ?","Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.":"Êtes-vous sûr de vouloir compléter manuellement cette commande ? L\'utilisateur sera crédité du quota correspondant.","Are you sure you want to sign out? You will need to sign in again to access your account.":"Êtes-vous sûr de vouloir vous déconnecter ? Vous devrez vous reconnecter pour accéder à votre compte.","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"Êtes-vous sûr de vouloir dissocier {{provider}} de cet utilisateur ? L\'utilisateur ne pourra plus se connecter via cette méthode.","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"Êtes-vous sûr de vouloir dissocier {{provider}} ? Vous ne pourrez plus vous connecter via cette méthode.","Are you sure?":"Êtes-vous sûr ?","Area Chart":"Graphique en aires","Args (space separated)":"Arguments (séparés par des espaces)","Arguments JSON":"Arguments JSON","Arguments must be a JSON array":"Les arguments doivent être un tableau JSON","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"Tableau de préréglages de clients de chat. Chaque élément est un objet avec une paire clé-valeur : nom du client et son URL.","Artifacts":"Artefacts","Asc":"Asc","Ask anything":"Demandez n\'importe quoi","Assign models from the model list to see them here.":"Attribuez des modèles à ce fournisseur depuis la liste des modèles.","Assigned by administrator only":"Attribué uniquement par l\'administrateur","Assigned by administrators and used to represent a user level, such as default or vip.":"Attribué par les administrateurs pour représenter un niveau utilisateur, comme default ou vip.","Async":"Asynchrone","Async task polling":"Interrogation des tâches asynchrones","Async Task Public Address":"Adresse publique des tâches asynchrones","Async task refund":"Remboursement de tâche asynchrone","At least one model regex pattern is required":"Au moins un modèle de regex est requis","At least one valid key source is required":"Au moins une source de clé valide est requise","Attach":"Joindre","Attempt":"Tentative","Audio":"Audio","Audio and Realtime pricing must be converted manually.":"Les tarifs audio et Realtime doivent être convertis manuellement.","Audio and text-only requests keep their respective pricing.":"Les requêtes audio et texte seul conservent leurs tarifs respectifs.","Audio comp.":"Comp. audio","Audio completion ratio":"Ratio de complétion audio","Audio In":"Entrée audio","Audio input":"Entrée audio","Audio Input":"Entrée audio","Audio input price":"Prix d’entrée audio","Audio Input Price":"Prix entrée audio","Audio Out":"Sortie audio","Audio output":"Sortie audio","Audio Output":"Sortie audio","Audio output price":"Prix de sortie audio","Audio output price requires an audio input price.":"Le prix de sortie audio nécessite un prix d’entrée audio.","Audio playback failed":"Échec de la lecture audio","Audio Preview":"Aperçu audio","Audio ratio":"Ratio audio","Audio requests":"Requêtes audio","Audio Tokens":"Jetons audio","Audit access changed. Showing only your records.":"Les droits d’accès aux audits ont changé. Seuls vos événements sont affichés.","Audit Logs":"Journaux d’audit","Audit metadata is unavailable":"Les informations supplémentaires de cet audit sont indisponibles","Audit records start after this feature was enabled. Earlier records remain in Common Logs.":"Les audits commencent à l’activation de cette fonction. Les anciens événements restent dans les journaux généraux.","Auth":"Auth","Auth configured":"Authentification configurée","Auth name":"Nom auth","Auth name is required":"Le nom auth est requis","Auth Style":"Style d\'authentification","Auth type is invalid":"Le type auth est invalide","Auth value":"Valeur auth","Auth value is required":"La valeur auth est requise","auth.resetPasswordConfirm.backToLogin":"Retour à la connexion","auth.resetPasswordConfirm.confirm":"Confirmer la réinitialisation du mot de passe","auth.resetPasswordConfirm.description":"Confirmez la demande de réinitialisation pour générer un nouveau mot de passe.","auth.resetPasswordConfirm.retry":"Réessayer ({{seconds}}s)","auth.resetPasswordConfirm.success":"Votre mot de passe a été réinitialisé avec succès","Authentication":"Authentification","Authentication for upstream requests; channel credentials may still be used.":"Authentification des requêtes au fournisseur ; les identifiants du canal peuvent rester nécessaires.","Authentication Method":"Méthode d\'authentification","Authenticator code":"Code d\'authentification","Authenticator code or backup code":"Code d’authentification ou de secours","Authorization callback URL":"URL de rappel d\'autorisation","Authorization Endpoint":"Point de terminaison d\'autorisation","Authorization Endpoint (Optional)":"Point de terminaison d\'autorisation (Facultatif)","Authorize":"Autoriser","Auto":"Auto","Auto (Circuit Breaker)":"Auto (Disjoncteur)","Auto assignment order":"Ordre d\'affectation automatique","Auto Ban":"Bannissement automatique","Auto detect (default)":"Détection automatique (par défaut)","Auto Disabled":"Désactivé automatiquement","Bark push URL cannot be empty":"L’URL de notification Bark ne peut pas être vide","Auto group behavior":"Comportement du groupe auto","Auto Group Chain":"Chaîne de groupes automatique","Auto group order":"Ordre des groupes Auto","Auto groups must not contain duplicates":"Les groupes Auto ne doivent pas contenir de doublons","Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.":"Le mode Auto négocie HTTP/2 lorsque c’est disponible. HTTP/1.1 force plusieurs connexions keep-alive en concurrence.","Auto refresh":"Actualisation automatique","Auto refresh (5s)":"Actualiser auto (5 s)","Auto Sync Upstream Models":"Synchronisation automatique des modèles en amont","Auto-disable channel":"Désactivation auto","Auto-disable disabled":"Désactivation automatique inactive","Auto-disable enabled":"Désactivation automatique active","Auto-disable rules":"Règles de désactivation automatique","Auto-disable status codes":"Codes de statut de désactivation auto","Auto-disable-enabled channels only":"Canaux avec désactivation automatique uniquement","Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.":"Ce mode sonde uniquement les canaux dont la désactivation automatique est activée et qui ne sont pas désactivés manuellement.","Auto-discover":"Découverte automatique","Auto-discovers endpoints from the provider":"Découvre automatiquement les points de terminaison du fournisseur","Auto-fill when one field exists and another is missing":"Remplissage automatique si un champ existe et l\'autre est manquant","Auto-refreshing every {{seconds}}s":"Actualisation automatique toutes les {{seconds}} s","Auto-retry status codes":"Codes de statut de nouvelle tentative auto","Automatic from system website address":"Automatique depuis l’adresse du site système","Automatic selection":"Sélection auto","Automatically disable channel on repeated failures":"Désactiver automatiquement le canal en cas d\'échecs répétés","Automatically disable channels exceeding this response time":"Désactiver automatiquement les canaux dépassant ce temps de réponse","Automatically disable channels when tests fail":"Désactiver automatiquement les canaux lorsque les tests échouent","Automatically probe all channels in the background":"Sonder automatiquement tous les canaux en arrière-plan","Automatically replaces upstream callback URLs with the server address.":"Remplace automatiquement les URL des callbacks en amont par l\'adresse du serveur.","Automatically selects the best available group with circuit breaker mechanism":"Sélectionne automatiquement le meilleur groupe disponible avec un mécanisme de disjoncteur de circuit","Automatically sync model list when upstream changes are detected":"Synchroniser automatiquement la liste des modèles lorsque des changements en amont sont détectés","Availability (last 24h)":"Disponibilité (dernières 24 h)","Available":"Disponible","Available Balance":"Solde disponible","Available channels: {{count}}":"Canaux : {{count}}","Available credits are ordered by soonest expiration.":"Les crédits disponibles sont triés par expiration la plus proche.","Available disk space":"Espace disque disponible","Available Models":"Modèles disponibles","Available reset credits":"Crédits de réinitialisation disponibles","Available Rewards":"Récompenses disponibles","Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.":"Variables disponibles : {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, ainsi que des chemins comme {{current.roles}}.","Average latency":"Latence moyenne","Average latency, TTFT, and success rate by group":"Latence moyenne, TTFT et taux de réussite par groupe","Average latency, TTFT, TPS, and success rate":"Latence moyenne, TTFT, TPS et taux de réussite","Average RPM":"RPM moyen","Average time-to-first-token (TTFT) by group":"Temps moyen jusqu’au premier token (TTFT) par groupe","Average tokens per second sustained per group":"Tokens par seconde soutenus en moyenne par groupe","Average TPM":"TPM moyen","Average TTFT":"TTFT moyen","Awake engines":"Moteurs actifs","Batch-adding Vertex AI keys requires a JSON array, for example {{example}}. Check the input: {{error}}":"L\'ajout groupé de clés Vertex AI nécessite un tableau JSON, par exemple {{example}}. Vérifiez la saisie : {{error}}","AWS":"AWS","AWS API":"API AWS","AWS Bedrock Claude Compat":"AWS Bedrock Claude Compat","AWS Key Format":"Format de clé AWS","Azure":"Azure","AZURE_OPENAI_ENDPOINT":"AZURE_OPENAI_ENDPOINT","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"Retour","Back to configuration":"Revenir à la configuration","Back to Dashboard":"Retour au tableau de bord","Billed per request":"Facturé par requête","Back to footnote {{id}} reference":"Retour à la référence de la note {{id}}","Back to Home":"Retour à l\'accueil","Back to login":"Retour à la connexion","Back to Models":"Retour aux modèles","Backed up":"Sauvegardé","Billing expressions must be a JSON object mapping models to expressions: {{error}}":"Les expressions de facturation doivent être un objet JSON associant les modèles aux expressions : {{error}}","Background":"En arrière-plan","Background job tracker for queued work.":"Suivi des tâches en arrière-plan pour les travaux en file d\'attente.","Backup Code":"Code de secours","Backup code must be in format XXXX-XXXX":"Le code de sauvegarde doit être au format XXXX-XXXX","Backup codes regenerated successfully":"Codes de sauvegarde régénérés avec succès","Backup codes remaining: {{count}}":"Codes de secours restants : {{count}}","Bad Request":"Requête invalide","Badge Color":"Couleur du badge","Billing parameters: {{params}}":"Paramètres de facturation : {{params}}","Baidu":"Baidu","Baidu V2":"Baidu V2","Balance":"Solde","Balance and top-up management":"Gestion du solde et des recharges","Balance depleted":"Solde épuisé","Balance is shown in quota units":"Le solde est affiché en unités de quota","Balance queried successfully":"Solde interrogé avec succès","Balance Query":"Consultation du solde","Balance Query route does not support pass-through":"La route de consultation du solde ne prend pas en charge la transmission directe","Balance response not recognized":"Réponse de solde non reconnue","Balance updated successfully":"Solde mis à jour avec succès","Balance updated: {{balance}}":"Solde mis à jour : {{balance}}","Bar Chart":"Graphique en barres","Bark Push URL":"URL de notification Bark","Binding successful":"Liaison réussie","Base":"Base","Base address provided by your Epay service":"Adresse de base fournie par votre service Epay","Base amount. Actual deduction = base amount × system group rate.":"Montant de base. Déduction réelle = montant de base × taux du groupe système.","Base charge":"Frais de base","Base group ratios apply until you add an override.":"Les coefficients de base s’appliquent en l’absence de règle spécifique.","Base input and output token prices for this tier.":"Prix de base des tokens en entrée et en sortie pour ce palier.","Base input price only":"Prix d’entrée de base uniquement","Base Limits":"Limites de base","Base multipliers applied when users select specific groups.":"Multiplicateurs de base appliqués lorsque les utilisateurs sélectionnent des groupes spécifiques.","Base Price":"Prix de base","Base rate limit windows for this account.":"Fenêtres de limitation de débit de base pour ce compte.","Base URL":"URL de base","Base URL *":"URL de base *","Base URL is required for this channel type":"L\'URL de base est requise pour ce type de canal","Bonus for inviting a user {{quota}}":"Bonus pour l\'invitation d\'un utilisateur {{quota}}","Base URL is required when an advanced route uses an upstream path":"La Base URL est requise lorsqu’une route avancée utilise un chemin amont","Base URL of your Uptime Kuma instance":"URL de base de votre instance Uptime Kuma","Basic Authentication":"Authentification de base","Basic Configuration":"Configuration de base","Basic Info":"Informations de base","Basic Information":"Informations de base","Basic Templates":"Modèles de base","Batch Add":"Ajout groupé","Batch Add (one key per line)":"Ajout par lots (une clé par ligne)","Batch add mappings":"Ajouter des correspondances en lot","Batch channel test":"Test groupé des canaux","Batch delete API tokens":"Supprimer des jetons API par lot","Batch delete failed":"Échec de la suppression par lots","Batch deleted {{count}} channels":"{{count}} canaux supprimés par lot","Batch deleted {{count}} redemption codes":"{{count}} codes d’échange supprimés en lot","Batch deleted redemption codes (count not recorded)":"Codes d’échange supprimés en lot (nombre non enregistré)","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"Détection par lots terminée : {{channels}} canaux, {{add}} à ajouter, {{remove}} à supprimer, {{fails}} échoués","Batch detection failed":"Échec de la détection par lot","Batch disable failed":"Échec de la désactivation par lots","Batch Edit":"Modification par lot","Batch edit all channels with this tag. Leave fields empty to keep current values.":"Modifiez par lot tous les canaux avec ce tag. Laissez les champs vides pour conserver les valeurs actuelles.","Batch Edit by Tag":"Modification par lot par tag","Batch enable failed":"Échec de l\'activation par lots","Batch Operations":"Opérations par lots","Batch processing failed":"Échec du traitement par lot","Batch redirect":"Redirection groupée","Batch set tag for {{count}} channels":"Étiquette définie par lot pour {{count}} canaux","Batch test completed: {{count}} succeeded":"Test par lots terminé : {{count}} réussi(s)","Batch test completed: {{success}} succeeded, {{failed}} failed":"Test par lots terminé : {{success}} réussi(s), {{failed}} échoué(s)","Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed":"Test par lots arrêté : {{completed}}/{{total}} terminé(s), {{success}} réussi(s), {{failed}} échoué(s)","Batch testing models...":"Test des modèles par lots...","Batch updated channel status ({{count}}/{{total}} changed)":"Statuts des canaux mis à jour par lot ({{count}}/{{total}} modifiés)","Batch upstream model update":"Mise à jour groupée des modèles en amont","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"Mises à jour par lot des modèles en amont appliquées : {{channels}} canaux, {{added}} ajoutés, {{removed}} supprimés, {{fails}} échoués","Before conversion":"Avant conversion","Best for single-tenant deployments. Pricing and billing options stay hidden.":"Idéal pour les déploiements mono-utilisateur. Les options de tarification et de facturation restent masquées.","Best TTFT":"Meilleur TTFT","Billable image count":"Nombre d’images facturées","Billable input tokens":"Tokens d’entrée facturables","Billable output tokens":"Tokens de sortie facturables","Billable token breakdown":"Détail des tokens facturables","Billed as default. No cell for this combination, so the base ratio of default applies — the 0.8 of vip plays no part.":"Facturé sous default. Aucune cellule pour cette combinaison, donc le taux de base de default s’applique — le 0,8 de vip ne joue aucun rôle.","Billed as premium. The highlighted cell matches, so the override 0.3 applies.":"Facturé sous premium. La cellule surlignée correspond, donc le remplacement 0,3 s’applique.","Billing":"Facturation","Billing & Payment":"Facturation et paiement","Billing currency":"Devise de facturation","Billing Details":"Détails de facturation","Billing expression":"Expression de facturation","Billing group":"Groupe de facturation","Billing group = default (the token has a group, so use it)":"Groupe de facturation = default (le jeton a un groupe, on l’utilise)","Billing group = premium (the token has a group, so use it)":"Groupe de facturation = premium (le jeton a un groupe, on l’utilise)","Billing group = vip (the token has no group, so use the user group)":"Groupe de facturation = vip (le jeton n’a pas de groupe, on utilise le groupe de l’utilisateur)","Billing History":"Historique de facturation","Billing management":"Gestion de la facturation","Billing Mode":"Mode de facturation","Billing parameters":"Paramètres de facturation","Billing Path":"Chemin de facturation","Billing Process":"Processus de facturation","Billing rule: each call is billed as the token group (falling back to the user group when the token has none). The base ratio always comes from that billing group, not from the user group. To give a user group a special price on another billing group, add an entry in the override matrix.":"Règle de facturation : chaque appel est facturé selon le groupe du jeton (à défaut, le groupe de l’utilisateur). Le taux de base provient toujours de ce groupe de facturation, pas du groupe de l’utilisateur. Pour accorder à un groupe d’utilisateurs un tarif spécial sur un autre groupe de facturation, ajoutez une entrée dans la matrice de remplacement.","Billing Source":"Source de facturation","Billing values must be finite and non-negative.":"Les valeurs de facturation doivent être finies et positives ou nulles.","Bind":"Lier","Bind a Pancake store + product":"Associer une boutique et un produit Pancake","Bind an email address to your account.":"Associez une adresse e-mail à votre compte.","Bind Email":"Lier l\'e-mail","Bind task plugins":"Lier des plugins de tâche","Bind Telegram Account":"Lier le compte Telegram","Bind WeChat":"Lier WeChat","Bind WeChat Account":"Lier le compte WeChat","Binding Information":"Informations de liaison","Binding successful!":"Liaison réussie !","Binding Type":"Type de liaison","Binding your {{provider}} account":"Liaison de votre compte {{provider}}","Binding...":"Liaison en cours...","Bindings":"Liages","Calculating priority...":"Calcul de la priorité…","Callback URL configuration error":"Erreur de configuration de l\'URL de rappel","Blacklist":"Liste noire","Blacklist (Block listed domains)":"Liste noire (Bloquer les domaines listés)","Blacklist (Block listed IPs)":"Liste noire (Bloquer les adresses IP listées)","Blank Rule":"Règle vide","Cannot create users with permission level equal to or higher than yourself":"Impossible de créer un utilisateur de niveau d’autorisation égal ou supérieur au vôtre","Cannot delete super administrator account":"Impossible de supprimer le compte super administrateur","Cannot delete the last key":"Impossible de supprimer la dernière clé","Cannot demote super administrator user":"Impossible de rétrograder le super administrateur","Cannot disable super administrator user":"Impossible de désactiver le super administrateur","Cannot enable the email domain restriction. Enter the allowed email domains first.":"Impossible d\'activer la restriction de domaine e-mail. Saisissez d\'abord les domaines autorisés.","Cannot enable Turnstile verification. Enter the Turnstile settings first.":"Impossible d\'activer la vérification Turnstile. Saisissez d\'abord les paramètres Turnstile.","Cannot enable WeChat login. Enter the WeChat login settings first.":"Impossible d\'activer la connexion WeChat. Saisissez d\'abord les paramètres de connexion WeChat.","Cannot enable {{provider}}. Enter the {{provider}} Client ID and Client Secret first.":"Impossible d\'activer {{provider}}. Saisissez d\'abord le Client ID et le Client Secret de {{provider}}.","Blend":"Fusion","Block email aliases (e.g., user+alias@domain.com)":"Bloquer les alias d\'e-mail (par exemple, utilisateur+alias@domaine.com)","Blocked keywords":"Mots-clés bloqués","Blocks messages when sensitive keywords are detected.":"Bloque les messages lorsque des mots-clés sensibles sont détectés.","Body param":"Paramètre de corps","Boolean":"Booléen","Border radius":"Rayon de bordure","Bot Name":"Nom du bot","Bot Protection":"Protection des bots","Bot Token":"Jeton du bot","Bot:":"Bot :","Bound":"Lié","Bound a subscription":"Abonnement lié","Bound Channels":"Canaux liés","Bound Only":"Liés uniquement","Bound product:":"Produit associé :","Bound store:":"Boutique associée :","Branch actions {{path}}":"Actions de la branche {{path}}","Bring channels back online after successful checks":"Remettre les canaux en ligne après des vérifications réussies","Browse and compare":"Parcourir et comparer","Browse available models and pricing":"Parcourir les modèles disponibles et les tarifs","Browse rankings by category":"Parcourir les classements par catégorie","Browser":"Navigateur","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"Jetons budgétaires = jetons max × ratio. Accepte un nombre décimal entre 0,002 et 1. Il est recommandé de rester aligné avec la facturation en amont.","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"Jetons budgétaires = jetons max × ratio. Accepte un nombre décimal entre 0,1 et 1.","Budget Tokens Ratio":"Ratio de jetons budgétaires","Budgets":"Budgets","Build on your API gateway in minutes":"Construisez sur votre passerelle API en quelques minutes","Built for developers,":"Conçu pour les développeurs,","Built-in":"Intégré","Built-in Device":"Appareil intégré","Built-in is v{{factory}}; delete the custom version to return to it":"La version intégrée est v{{factory}} ; supprimez la version personnalisée pour y revenir","Built-in pricing may become effective again.":"Les prix intégrés peuvent redevenir actifs.","Built-in v{{factory}} / marketplace v{{market}}":"Intégré v{{factory}} / marché v{{market}}","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"Intégré : empreinte digitale/visage du téléphone, ou Windows Hello ; Externe : clé de sécurité USB","Bulk actions for {{count}} selected records":"Actions groupées pour {{count}} fiches","by":"par","By category":"Par catégorie","By model author":"Par auteur du modèle","By quota":"Par quota","By requests":"Par requêtes","By tokens":"Par jetons","Changes save on drop. You can undo the last move.":"Les changements sont enregistrés au dépôt. Vous pouvez annuler le dernier déplacement.","Channel affinity settings are not initialized":"Les paramètres d\'affinité de canal ne sont pas initialisés","Cache":"Cache","Cache create (1h) price":"Prix de création du cache (1 h)","Cache create price":"Prix de création du cache","Cache Creation":"Création cache","Cache Creation (1h)":"Création cache (1h)","Cache Creation (5m)":"Création cache (5m)","Cache Directory":"Répertoire de cache","Cache Directory Disk Space":"Espace disque du répertoire de cache","Cache Directory Info":"Infos du répertoire de cache","Channel does not exist":"Le canal n\'existe pas","Cache Entries":"Entrées de cache","Cache mode":"Mode de cache","Cache pricing":"Tarification du cache","Cache ratio":"Ratio de cache","Cache Read":"Lecture du cache","Cache read price":"Prix de lecture du cache","Cache repeated prompt prefixes for cheaper, faster reuse":"Mettre en cache les préfixes répétés pour une réutilisation plus rapide et moins coûteuse","Cache write":"Écriture du cache","Cache Write":"Écriture du cache","Cache Write (1h)":"Écriture cache (1h)","Cache Write (5m)":"Écriture cache (5m)","Cache write price":"Prix d’écriture du cache","Cached":"Cache","Cached input":"Entrée mise en cache","Cached tokens":"Tokens en cache","Calculated price: ${{price}} per 1M tokens":"Prix calculé : ${{price}} par 1M tokens","Calculated ratio: {{ratio}}":"Ratio calculé : {{ratio}}","Calculating...":"Calcul en cours...","Call 1: the token group is premium":"Appel 1 : le groupe du jeton est premium","Call 2: the token group is default":"Appel 2 : le groupe du jeton est default","Call 3: the token has no group":"Appel 3 : le jeton n’a pas de groupe","Call Count Distribution":"Distribution du nombre d\'appels","Call Count Ranking":"Classement du nombre d\'appels","Call Proportion":"Proportion d\'appels","Call Trend":"Tendance des appels","Callback address":"Adresse de rappel","Callback Caller IP":"IP de l’appelant du callback","Callback notification URL":"URL de notification de rappel","Callback Payment Method":"Moyen de paiement (callback)","Callback URL format":"Format de l\'URL de rappel","Cancel":"Annuler","Cancelled":"Annulé","Cancelled at":"Annulé le","Capabilities":"Capacités","Caps the response length":"Limite la longueur de la réponse","Capture a reusable bundle of models, tags, or endpoints.":"Capturez un ensemble réutilisable de modèles, d\'étiquettes ou de points de terminaison.","Card view":"Vue cartes","Cascade disable channels":"Désactiver aussi les canaux","Catalog visibility":"Visibilité dans le catalogue","Catch-all route must be last for the same incoming path":"Le routage de secours doit être le dernier pour le même chemin d\'entrée","Category":"Catégorie","Category Name":"Nom de la catégorie","Category name is required":"Le nom de la catégorie est requis","Category name must be less than 50 characters":"Le nom de la catégorie doit contenir moins de 50 caractères","Caution":"Attention","CC Switch":"CC Switch","Centered":"Centré","Chain":"Chaîne","Change":"Modifier","Change domain":"Changer de domaine","Change language":"Changer de langue","Change model vendor":"Changer le fournisseur des modèles","Change Password":"Changer le mot de passe","Change provider":"Changer de fournisseur","Change system settings and custom OAuth providers, and sync prices.":"Modifier les paramètres système et les fournisseurs OAuth personnalisés, et synchroniser les prix.","Change the Passkey domain?":"Changer le domaine des clés d’accès ?","Change To":"Changer en","Change upstream model names":"Modifier les noms envoyés en amont","Change vendor":"Changer de fournisseur","Change your display name and personal settings.":"Modifier votre nom d’affichage et vos paramètres personnels.","Changed":"Modifications","Changed / Total":"Modifiés / Total","Channel notifications":"Notifications des canaux","Channel priorities changed. Refresh and try again.":"Les priorités ont changé. Actualisez et réessayez.","Channel priorities saved":"Priorités des canaux enregistrées","Channel priority is outside the sortable range":"La priorité dépasse la plage de tri","Check-in failed, please try again later":"Échec de l\'enregistrement, veuillez réessayer plus tard","Check-in failed: quota update error":"Échec de l\'enregistrement : erreur de mise à jour du quota","Check-in feature is not enabled":"La fonction d\'enregistrement n\'est pas activée","Changed access token permissions":"Autorisations du jeton d’accès modifiées","Changed Fields":"Champs modifiés","Check-in successful":"Enregistrement réussi","Changed fields: {{fields}}":"Champs modifiés : {{fields}}","Changelog":"Journal des modifications","Changes are written to the settings draft on save.":"Les modifications sont écrites dans le brouillon des paramètres lors de l’enregistrement.","Changes declared endpoint types and custom paths shown to users.":"Modifie les types de points de terminaison et les chemins personnalisés affichés aux utilisateurs.","Changes visibility in the model catalog. Channels remain configured separately.":"Modifie la visibilité dans le catalogue. Les canaux restent configurés séparément.","Changes visibility in the model square. Channel status and existing API access are unchanged.":"Modifie la visibilité dans la galerie des modèles sans changer les canaux ni les accès API existants.","Changes which model names inherit this metadata. Prices are not inherited.":"Modifie les noms de modèles qui héritent de ces métadonnées. Les prix ne sont pas hérités.","Changing...":"Modification en cours...","Channel":"Canal","Channel {{name}}":"Canal {{name}}","Channel {{name}} model {{model}}":"Canal {{name}} modèle {{model}}","Channel Affinity":"Affinité de canal","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"L\'affinité de canal réutilise le dernier canal ayant réussi, en se basant sur les clés extraites du contexte de la requête ou du corps JSON.","Channel Affinity: Upstream Cache Hit":"Affinité de canal : hit de cache en amont","Channel availability and group access are derived from enabled channels. Importing metadata does not create a callable channel.":"La disponibilité et l’accès des groupes dépendent des canaux activés. Importer des métadonnées ne crée pas de canal utilisable.","Choose a time range of up to {{days}} days. The other filters on this page also apply.":"Choisissez une plage d\'au plus {{days}} jours. Les autres filtres de la page s\'appliquent aussi.","Channel configuration":"Configuration du canal","Channel consistency repaired: {{success}} succeeded, {{fails}} failed":"Cohérence des canaux réparée : {{success}} réussie(s), {{fails}} échouée(s)","Channel copied successfully":"Canal copié avec succès","Channel created successfully":"Canal créé avec succès","Channel deleted successfully":"Canal supprimé avec succès","Channel disable requested":"Désactivation du canal demandée","Channel disabled successfully":"Canal désactivé avec succès","Channel enabled successfully":"Canal activé avec succès","Channel error":"Erreur de canal","Channel Extra Settings":"Paramètres supplémentaires du canal","Channel health":"État des canaux","Channel health checks":"Contrôles de santé des canaux","Channel ID":"ID du Canal","Channel ID is required":"L\'ID du canal est requis","Channel is not selected":"Aucun canal sélectionné","Channel key":"Clé du canal","Channel key unlocked":"Clé de canal déverrouillée","Channel Management":"Gestion des canaux","Channel models":"Modèles de canaux","Channel name is required":"Le nom du canal est requis","Channel selected":"Canal sélectionné","Channel selection":"Sélection du canal","Channel switching options":"Options de changement de canal","Channel test completed":"Test du canal terminé","Channel test concurrency":"Parallélisme des tests de canaux","Channel test concurrency must be between 1 and 32":"Le parallélisme des tests de canaux doit être compris entre 1 et 32","Channel test mode":"Mode de test des canaux","Channel type":"Type de canal","Channel type does not match the status endpoint":"Le type de canal ne correspond pas au point d’accès d’état","Channel type is required":"Le type de canal est requis","Channel types":"Types de canaux","Channel types you can use when binding this plugin.":"Types de canaux utilisables pour associer ce plugin.","Channel updated successfully":"Canal mis à jour avec succès","Channel-specific settings (JSON format)":"Paramètres spécifiques aux canaux (format JSON)","Channel:":"Canal :","channel(s)? This action cannot be undone.":"canal(aux) ? Cette action ne peut pas être annulée.","Channels":"Canaux","Channels {{channels}} · Groups {{groups}}":"Canaux {{channels}} · Groupes {{groups}}","Channels and groups":"Canaux et groupes","Channels deleted successfully":"Canaux supprimés avec succès","Channels must also enable Auto Ban before automatic disabling can take effect.":"Chaque canal doit aussi activer la désactivation automatique pour que les règles s’appliquent.","Character chat, storytelling, persona":"Discussion de personnages, narration, persona","Charge.":"Facturer.","Chart Preferences":"Préférences des graphiques","Chart Settings":"Paramètres du graphique","Chat":"Discuter","Chat area":"Zone de chat","Chat Area":"Zone de chat","Chat Client Name":"Nom du client de chat","Chat client name is required":"Le nom du client de chat est requis","Chat configuration JSON":"Configuration du chat JSON","Chat preset not found":"Préréglage de chat introuvable","Chat Presets":"Préréglages de chat","Chat session management":"Gestion des sessions de chat","ChatCompletions -> Responses Compatibility":"Compatibilité ChatCompletions -> Réponses","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Check again":"Vérifier à nouveau","Check channels awaiting recovery only":"Vérifier uniquement les canaux en attente de rétablissement","Check for new upstream models":"Rechercher les nouveaux modèles en amont","Check for updates":"Vérifier les mises à jour","Check in daily to receive random quota rewards":"Connectez-vous quotidiennement pour recevoir des récompenses de quota aléatoires","Check in now":"Se connecter maintenant","Check line {{line}} for a missing comma.":"Vérifiez la ligne {{line}} pour une virgule manquante.","Check out the Quick Start":"Consultez le démarrage rapide","Check resolved IPs against IP filters even when accessing by domain":"Vérifier les adresses IP résolues par rapport aux filtres IP même lors de l\'accès par domaine","Check the override matrix at row = user group, column = billing group. If that cell is set, use it. Otherwise use the billing group base ratio from the pricing table.":"Consultez la matrice de remplacement à la ligne = groupe d’utilisateurs, colonne = groupe de facturation. Si la cellule est définie, utilisez-la ; sinon utilisez le taux de base du groupe de facturation du tableau tarifaire.","Check-in failed":"Échec de la connexion","Check-in Rewards":"Récompenses de connexion quotidienne","Check-in Settings":"Paramètres de connexion","Check-in successful! Received":"Connexion réussie ! Reçu","Checked in":"Vérifié","Checking connection":"Vérification de la connexion","Checking file integrity...":"Vérification du fichier…","Checking name...":"Vérification du nom...","Checking updates...":"Vérification des mises à jour...","Checking upstream models. Channel models will only change after confirmation.":"Vérification des modèles en amont. Les modèles du canal ne seront modifiés qu’après confirmation.","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","Checks hourly while you are online, including pre-releases.":"Vérification chaque heure en ligne, versions préliminaires incluses.","Checks text extracted from supported requests against keywords, ignoring case. A match rejects the request before upstream processing and does not affect channel health. Images, audio and generated responses are not checked.":"Compare les textes extraits des requêtes prises en charge aux mots-clés, sans tenir compte de la casse. Une correspondance rejette la requête avant son envoi au fournisseur, sans affecter la santé du canal. Images, audio et réponses générées ne sont pas vérifiés.","Chinese":"Chinois","Choose a complete upstream protocol plan or edit individual route groups.":"Choisissez un plan de protocole amont complet ou modifiez les groupes de routes.","Choose a provider or plugin to configure your channel.":"Choisissez un fournisseur ou une extension pour configurer le canal.","Choose a time at least one hour from now":"Choisissez une heure au moins une heure plus tard","Choose a username":"Choisir un nom d\'utilisateur","Choose a valid IANA timezone.":"Choisissez un fuseau horaire IANA valide.","Choose an amount and payment method":"Choisir un montant et un mode de paiement","Choose and order the groups this API key will try.":"Sélectionnez et ordonnez les groupes que cette clé API essaiera.","Choose another file":"Choisir un autre fichier","Choose between default expanded, compact icon-only, or full layout mode":"Choisissez entre le mode d\'affichage étendu par défaut, compact (icône uniquement) ou complet","Choose between inset, floating, or standard sidebar layout":"Choisissez entre la disposition de la barre latérale intégrée, flottante ou standard","Choose between left-to-right or right-to-left site direction":"Choisissez entre la direction du site de gauche à droite ou de droite à gauche","Choose between system preference, light mode, or dark mode":"Choisissez entre la préférence système, le mode clair ou le mode sombre","Choose channels to sync upstream ratio configurations from":"Choisissez les canaux à partir desquels synchroniser les configurations de ratio amont","Choose file":"Choisir un fichier","Choose Group":"Choisir un groupe","Choose how flow widths are calculated.":"Choisissez comment l\'épaisseur des flux est calculée.","Choose how quota values are shown to users":"Choisissez comment les valeurs de quota sont affichées aux utilisateurs","Choose how the platform will operate":"Choisissez le mode de fonctionnement de la plateforme","Choose how to filter domains":"Choisissez comment filtrer les domaines","Choose how to filter IP addresses":"Choisissez comment filtrer les adresses IP","Choose one SMTP transport security mode":"Choisissez un mode de sécurité de transport SMTP","Choose price sources":"Choisissez les sources de prix","Choose the bundle type and define the items inside it.":"Choisissez le type de bundle et définissez les éléments qu\'il contient.","Choose the default charts, range, and time granularity for model analytics.":"Choisissez les graphiques, la plage et la granularité temporelle par défaut pour l\'analyse des modèles.","Choose the domain used when this Passkey was created, then try again.":"Choisissez le domaine utilisé lors de la création de cette clé d’accès, puis réessayez.","Choose where to fetch upstream metadata.":"Choisissez où récupérer les métadonnées amont.","Choose which charts are selected by default when opening model analytics.":"Choisissez les graphiques sélectionnés par défaut à l\'ouverture de l\'analyse des modèles.","Clamped to":"Limité à","Claude":"Claude","Claude CLI Header Passthrough":"Passthrough en-tête Claude CLI","Claude only":"Claude uniquement","Clean":"Sans conflit","Clean history logs":"Nettoyer les journaux d\'historique","Clean logs":"Nettoyer les logs","Clean task history":"Nettoyer l’historique des tâches","Clean up inactive cache":"Nettoyer le cache inactif","Clean Up Log Files":"Nettoyer les fichiers journaux","Cleaned up {{count}} log files, freed {{size}}":"{{count}} fichiers journaux nettoyés, {{size}} libérés","Cleaning...":"Nettoyage en cours...","Cleanup failed":"Échec du nettoyage","Cleanup Mode":"Mode de nettoyage","Clear":"Effacer","Clear all":"Tout effacer","Clear All":"Tout effacer","Clear All Cache":"Vider tout le cache","Clear all filters":"Effacer tous les filtres","Clear cache for this rule":"Vider le cache de cette règle","Clear chat history":"Effacer l\'historique du chat","Clear chat history?":"Effacer l\'historique du chat ?","Clear field selection":"Tout désélectionner","Clear filters":"Effacer les filtres","Clear Mapping":"Effacer le mappage","Clear mode flags in prompts":"Effacer les indicateurs de mode dans les prompts","Clear node filters":"Effacer les filtres de nœuds","Clear search":"Effacer la recherche","Clear selection":"Effacer la sélection","Clear selection (Escape)":"Effacer la sélection (Échap)","Clear vendor":"Retirer le fournisseur","Cleared":"Vidé","Cleared {{bindingType}} binding for user {{username}}":"Liaison {{bindingType}} de l\'utilisateur {{username}} supprimée","Cleared all models":"Tous les modèles effacés","Cleared channel affinity cache":"Cache d\'affinité des canaux vidé","Cleared disk cache":"Cache disque vidé","Cleared historical logs":"Journaux historiques effacés","Cleared log files":"Fichiers journaux effacés","Click \\"Create Plan\\" to create your first subscription plan":"Cliquez sur « Créer un plan » pour créer votre premier abonnement","Click \\"Generate\\" to create a token":"Cliquez sur \\"Générer\\" pour créer un jeton","Click a stage to show or hide that column":"Cliquez sur une étape pour afficher ou masquer cette colonne","Click any category to drill into its models, apps, and trends":"Cliquez sur une catégorie pour explorer ses modèles, applications et tendances","Click for details":"Cliquez pour les détails","Click save when you\'re done.":"Cliquez sur Enregistrer lorsque vous avez terminé.","Click save when you're done.":"Cliquez sur Enregistrer lorsque vous avez terminé.","Click the button below to bind your Telegram account":"Cliquez sur le bouton ci-dessous pour lier votre compte Telegram","Click to copy":"Cliquer pour copier","Click to open deployment":"Cliquez pour ouvrir le déploiement","Click to preview audio":"Cliquer pour prévisualiser l\'audio","Click to preview video":"Cliquer pour prévisualiser la vidéo","Click to update balance":"Cliquez pour mettre à jour le solde","Click to view Codex usage":"Cliquer pour voir l\'utilisation Codex","Compliance confirmation fields cannot be changed through the general settings API":"Les champs de confirmation de conformité ne peuvent pas être modifiés via l\'API des paramètres généraux","Click to view full details":"Cliquez pour voir les détails complets","Click to view full error message":"Cliquez pour voir le message d\'erreur complet","Click to view full prompt":"Cliquez pour voir l\'invite complète","Composition failed":"Échec de la composition","Click to view image":"Cliquer pour voir l’image","Client":"Client","Client header value":"Valeur d\'en-tête client","Client headers override the gateway defaults and may cause upstream errors":"Les en-têtes du client remplacent ceux de la passerelle et peuvent provoquer des erreurs en amont","Client ID":"ID client","Client information such as User-Agent and IP is exposed to the upstream":"Les informations du client, comme le User-Agent et l\'IP, sont exposées à l\'amont","Client model":"Modèle client","Client model matching":"Correspondance du model client","Client model matching help":"Aide sur la correspondance du model client","Client Secret":"Secret client","Close":"Fermer","Close dialog":"Fermer la boîte de dialogue","Close menu":"Fermer le menu","Close panel":"Fermer le panneau","Close the panel to edit here":"Fermer le panneau pour modifier ici","Close Today":"Fermer aujourd\'hui","Cloudflare":"Cloudflare","CNY":"CNY","CNY per USD":"CNY par USD","Code":"Code","Code generation, refactoring, autocomplete":"Génération de code, refactorisation, autocomplétion","Code interpreter":"Interpréteur de code","Code samples":"Exemples de code","Codes copied!":"Codes copiés !","Codex":"Codex","Codex Account & Usage":"Compte et utilisation Codex","Codex Account Status":"Statut du compte Codex","Codex channels do not support batch creation":"Les canaux Codex ne prennent pas en charge la création par lot","Codex channels use an OAuth JSON credential as the key.":"Les canaux Codex utilisent un identifiant OAuth JSON comme clé.","Codex CLI Header Passthrough":"Passthrough en-tête Codex CLI","Codex credential must be a JSON object with access_token and account_id":"L\'identifiant Codex doit être un objet JSON avec access_token et account_id","Cohere":"Cohere","Collapse":"Réduire","Collapse all":"Tout replier","Collapse All":"Tout réduire","Collapse panel":"Réduire le panneau","Collect relay latency and success-rate metrics for the model square.":"Collecte les métriques de latence Relay et de taux de réussite pour la place des modèles.","Color":"Couleur","Color is required":"La couleur est requise","Color preset":"Préréglage de couleur","Color:":"Couleur :","Comfortable":"Confortable","Coming Soon!":"Bientôt disponible !","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"Noms exacts de modèles séparés par des virgules. Préfixez avec regex: pour ignorer par expression régulière.","Comma-separated list of allowed ports (empty = all ports)":"Liste des ports autorisés séparés par des virgules (vide = tous les ports)","Comma-separated model names (leave empty to keep current)":"Noms de modèles séparés par des virgules (laissez vide pour conserver l\'actuel)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"Noms de modèles séparés par des virgules, p. ex., gpt-4,gpt-3.5-turbo","Command":"Commande","Common":"Commun","Common Keys":"Clés courantes","Common Logs":"Journaux courants","Common pitfall: the user group base ratio is NOT a personal discount. It only applies when the user group itself is the billing group.":"Piège courant : le taux de base du groupe d’utilisateurs n’est PAS une remise personnelle. Il ne s’applique que lorsque ce groupe est lui-même le groupe de facturation.","Common ports include 25, 465, and 587":"Les ports courants incluent 25, 465 et 587","Common User":"Utilisateur commun","Community driven, self-hosted, and extensible":"Piloté par la communauté, auto-hébergé et extensible","Compact":"Compact","Compare each vendor\'s token share across the past few weeks":"Comparer la part de tokens de chaque fournisseur sur les dernières semaines","Compare each vendor\'s token share across the past year":"Comparer la part de tokens de chaque fournisseur sur l’année écoulée","Compare each vendor\'s token share over the past 24 hours":"Comparer la part de tokens de chaque fournisseur sur les dernières 24 heures","Compare each vendor\'s token share over the past month":"Comparer la part de tokens de chaque fournisseur sur le dernier mois","Compare each vendor\'s token share since launch":"Comparer la part de tokens de chaque fournisseur depuis le lancement","Compare prices and choose a source for each model.":"Comparez les prix et choisissez une source par modèle.","Compare the most popular models on the platform":"Comparez les modèles les plus populaires de la plateforme","Comparison operator":"Opérateur de comparaison","compatible API routes":"routes API compatibles","Compatible API routes for common AI application workflows":"Routes API compatibles pour les workflows courants des applications d\'IA","Compatible Passkey domains":"Domaines compatibles des clés d’accès","Compilation failed":"Échec de compilation","Complete API documentation with multi-language SDK support":"Documentation API complète avec support SDK multilingue","Complete Order":"Compléter la commande","Complete sign-in":"Finaliser la connexion","Complete the invalid fields before saving or switching modes. The last valid expression is preserved.":"Corrigez les champs invalides avant de sauvegarder ou de changer de mode. La dernière expression valide est conservée.","Complete these steps to finish the initial installation.":"Suivez ces étapes pour terminer l\'installation initiale.","Complete top-up orders and manage subscription plans and user subscriptions.":"Finaliser les commandes de recharge et gérer les plans d’abonnement et les abonnements des utilisateurs.","Completed":"Terminé","Completed security verification":"Vérification de sécurité terminée","Completed top-up order for the user":"Commande de recharge complétée pour l\'utilisateur","Completion":"Achèvement","Completion price":"Prix de complétion","Completion price ($/1M tokens)":"Prix de la complétion (USD/1M jetons)","Completion ratio":"Ratio de complétion","Compliance confirmation required":"Confirmation de conformité requise","Compliance confirmed":"Conformité confirmée","Compliance confirmed successfully":"Conformité confirmée avec succès","Concatenate channel system prompt with user's prompt":"Concaténer l\'invite système du canal avec l\'invite de l\'utilisateur","Condition {{path}}":"Condition {{path}}","Condition actions {{path}}":"Actions de la condition {{path}}","Condition group":"Groupe de conditions","Condition group {{path}}":"Groupe de conditions {{path}}","Condition input":"Variable de condition","Condition Path":"Chemin de condition","Condition Settings":"Paramètres de condition","Condition value":"Valeur de condition","Condition Value":"Valeur de condition","Conditional multipliers":"Multiplicateurs conditionnels","Conditions":"Conditions","Conditions (AND)":"Conditions (ET)","Confidence":"Confiance","Configuration":"Configuration","Configuration File":"Fichier de configuration","Configuration for Creem payment integration":"Configuration pour l\'intégration de paiement Creem","Configuration for Epay payment integration":"Configuration pour l\'intégration de paiement Epay","Configuration for Stripe payment integration":"Configuration pour l\'intégration de paiement Stripe","Configuration required":"Configuration requise","Configure":"Configurer","Configure a Creem product for user recharge options.":"Configurez un produit Creem pour les options de recharge utilisateur.","Configure a custom ratio for \\"{{userGroup}}\\" users when using a specific token group.":"Définissez un coefficient personnalisé pour les utilisateurs de « {{userGroup}} » utilisant un groupe de jetons précis.","Configure a custom ratio for when users use a specific token group.":"Configurer un ratio personnalisé lorsque les utilisateurs utilisent un groupe de jetons spécifique.","Configure a group that users can select when creating API keys.":"Configurer un groupe que les utilisateurs peuvent sélectionner lors de la création de clés API.","Configure a new custom OAuth provider for user authentication.":"Configurer un nouveau fournisseur OAuth personnalisé pour l\'authentification des utilisateurs.","Configure a payment method for user recharge options.":"Configurer un mode de paiement pour les options de recharge utilisateur.","Configure a predefined chat link for end users.":"Configurer un lien de chat prédéfini pour les utilisateurs finaux.","Configure an input price before converting this model.":"Configurez un prix d’entrée avant de convertir ce modèle.","Configure and deploy a new container instance.":"Configurer et déployer une nouvelle instance de conteneur.","Configure API documentation links for the dashboard":"Configurer les liens de documentation API pour le tableau de bord","Configure at:":"Configurer à :","Configure available payment methods. Provide a JSON array.":"Configurer les méthodes de paiement disponibles. Fournir un tableau JSON.","Configure Creem products. Provide a JSON array.":"Configurez les produits Creem. Fournissez un tableau JSON.","Configure discount rates based on recharge amounts":"Configurer les taux de réduction basés sur les montants de recharge","Configure endpoint routing, authentication and protocol conversion for different upstream services":"Configurer le routage, l’authentification et la conversion de protocoles pour différents services amont","Configure experimental data export for the dashboard":"Configurer l\'exportation de données expérimentales pour le tableau de bord","Configure in your Creem dashboard":"Configurez dans votre tableau de bord Creem","Configure keyword filtering for prompts and responses.":"Configurer le filtrage par mots-clés pour les invites et les réponses.","Configure model, caching, and group ratios used for billing":"Configurer les ratios de modèle, de mise en cache et de groupe utilisés pour la facturation","Configure Models":"Configurer les modèles","Configure monitoring status page groups for the dashboard":"Configurer les groupes de pages d\'état de surveillance pour le tableau de bord","Configure NODE_NAME":"Configurer NODE_NAME","Configure per-model ratio for image inputs or outputs.":"Configurer le ratio par modèle pour les entrées ou sorties d\'images.","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"Définissez le prix unitaire de chaque outil ($/1K appels). Les modèles facturés à la requête n\'entraînent pas de frais d\'outils supplémentaires.","Configure pricing ratios for a specific model.":"Configurer les ratios de tarification pour un modèle spécifique.","Configure rate limiting rules for a specific user group.":"Configurer les règles de limitation de débit pour un groupe d\'utilisateurs spécifique.","Configure routes":"Configurer les routes","Configure task pricing":"Configurer la tarification des tâches","Configure the connection and models, then create the channel.":"Configurez la connexion et les modèles, puis créez le canal.","Configure the ratio for this group.":"Configurer le ratio pour ce groupe.","Configure upstream providers and routing.":"Configurer les fournisseurs en amont et le routage.","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"Configurer l\'intégration du parcours de paiement hébergé Waffo Pancake pour les rechargements en USD","Configure Waffo payment aggregation platform integration":"Configurer l\'intégration de la plateforme d\'agrégation de paiement Waffo","Configure your account behavior preferences":"Configurer les préférences de comportement de votre compte","Configure your account preferences and integrations":"Configurer les préférences et les intégrations de votre compte","Configured":"Configuré","Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.":"Enregistré comme JSON PayMethods. La valeur type décide du flux de paiement utilisé : stripe pour Stripe, waffo_pancake pour Waffo Pancake, et les autres valeurs sont envoyées à Epay comme paramètre type.","Configured routes and latency checks":"Routes configurées et contrôles de latence","Confirm":"Confirmer","Confirm Action":"Confirmer l\'action","Confirm and enable":"Confirmer et activer","Confirm Batch Update":"Confirmer la mise à jour par lot","Confirm Billing Conflicts":"Confirmer les conflits de facturation","Confirm both your current and new email addresses to finish this change.":"Confirmez votre adresse actuelle et la nouvelle pour terminer cette modification.","Confirm changes":"Confirmer les modifications","Confirm Changes":"Confirmer les modifications","Confirm Cleanup":"Confirmer le nettoyage","Confirm cleanup of inactive disk cache?":"Confirmer le nettoyage du cache disque inactif ?","Confirm clearing all channel affinity cache":"Confirmer la suppression de tout le cache d\'affinité de canal","Confirm clearing cache for this rule":"Confirmer la suppression du cache de cette règle","Confirm compliance":"Confirmer la conformité","Confirm compliance terms":"Confirmer les conditions de conformité","Confirm Creem Purchase":"Confirmer l\'achat Creem","Confirm delete":"Confirmer la suppression","Confirm disable":"Confirmer la désactivation","Confirm email":"Confirmer l’adresse e-mail","Confirm enable":"Confirmer l\'activation","Confirm invalidate":"Confirmer l\'invalidation","Confirm log cleanup":"Confirmer le nettoyage des journaux","Confirm log file cleanup?":"Confirmer le nettoyage des fichiers journaux ?","Confirm model changes":"Confirmer les changements de modèles","Confirm New Password":"Confirmer le nouveau mot de passe","Confirm password":"Confirmer le mot de passe","Confirm Payment":"Confirmer le paiement","Confirm Selection":"Confirmer la sélection","Confirm settings and finish setup":"Confirmez les paramètres et terminez la configuration","confirm that I bear legal responsibility arising from deployment":"confirme assumer la responsabilité juridique découlant du déploiement","Confirm the final prices and removed settings. Metadata and channel access are not changed.":"Confirmez les prix finaux et les paramètres supprimés. Les métadonnées et l’accès aux canaux restent inchangés.","Confirm the verification code sent to your new email address.":"Saisissez le code de vérification envoyé à votre nouvelle adresse e-mail.","Confirm Unbind":"Confirmer la dissociation","Confirm usage reset":"Confirmer la réinitialisation de l’utilisation","Confirm your identity before accessing this sensitive action.":"Confirmez votre identité avant cette opération sensible.","Confirm your identity before changing the account {{username}}.":"Confirmez votre identité avant de modifier le compte {{username}}.","Confirm your identity before creating an administrator account.":"Confirmez votre identité avant de créer un compte administrateur.","Confirm your identity before permanently deleting the account {{username}}.":"Confirmez votre identité avant de supprimer définitivement le compte {{username}}.","Confirm your identity before removing this Passkey from your account.":"Confirmez votre identité avant de supprimer cette Passkey de votre compte.","Confirm your identity before unbinding {{provider}} from this user.":"Confirmez votre identité avant de dissocier {{provider}} de cet utilisateur.","Confirm your identity with Two-factor Authentication before registering a Passkey.":"Confirmez votre identité avec l’authentification à deux facteurs avant d’enregistrer une Passkey.","Confirmed at {{time}} by user #{{userId}}":"Confirmé le {{time}} par l’utilisateur #{{userId}}","Confirmed payment compliance":"Conformité de paiement confirmée","Confirmed removal of Passkey domains: {{domains}}; affected {{known}}; unknown {{unknown}}":"Suppression des domaines de clés d’accès confirmée : {{domains}} ; affectées {{known}} ; domaine inconnu {{unknown}}","Confirming the account linked to your profile.":"Vérification du compte associé à votre profil.","Conflict":"Conflit","Connect":"Connecter","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"Connectez-vous via OpenAI, Claude, Gemini et d\'autres routes API compatibles","Connect to 360 model services":"Connecter les services de modèles 360","Connect to Alibaba Cloud Bailian model services":"Connecter les services de modèles Alibaba Cloud Bailian","Connect to Cohere model services":"Connecter les services de modèles Cohere","Connect to Coze bots":"Connecter des agents Coze","Connect to DeepSeek model services":"Connecter les services de modèles DeepSeek","Connect to Dify applications and workflows":"Connecter des applications et des workflows Dify","Connect to Doubao Seedance video and Seedream image generation through Volcengine Ark":"Connecter la génération de vidéos Doubao Seedance et d\'images Seedream via Volcengine Ark","Connect to FastGPT applications":"Connecter des applications FastGPT","Connect to iFlytek Spark model services":"Connecter les services de modèles iFlytek Spark","Connect to Jimeng image and video generation services":"Connecter les services de génération d’images et de vidéos Jimeng","Connect to Jina embedding and reranking services":"Connecter les services de vectorisation et de reclassement Jina","Connect to Kling video generation services":"Connecter les services de génération vidéo Kling","Connect to LingYiWanWu model services":"Connecter les services de modèles LingYiWanWu","Connect to local or self-hosted Ollama models":"Connecter des modèles Ollama locaux ou auto-hébergés","Connect to MiniMax model services":"Connecter les services de modèles MiniMax","Connect to Mistral AI model services":"Connecter les services de modèles Mistral AI","Connect to model services through a Sub2API gateway":"Connecter des services de modèles via une passerelle Sub2API","Connect to models through the Google Gemini API":"Connecter des modèles via l’API Google Gemini","Connect to Moonshot AI model services":"Connecter les services de modèles Moonshot AI","Connect to New API model services with support for multiple task plugins":"Accéder aux modèles via New API avec plusieurs plugins de tâches","Connect to OpenAI models deployed on Azure":"Connecter les modèles OpenAI déployés sur Azure","Connect to OpenAI Sora video generation services":"Connecter les services de génération vidéo OpenAI Sora","Connect to Perplexity model services":"Connecter les services de modèles Perplexity","Connect to self-hosted models served by SGLang":"Connecter des modèles auto-hébergés avec SGLang","Connect to self-hosted models served by vLLM":"Connecter des modèles auto-hébergés avec vLLM","Connect to self-hosted models served by Xinference":"Connecter des modèles auto-hébergés avec Xinference","Connect to SiliconFlow model inference services":"Connecter les services d’inférence de modèles SiliconFlow","Connect to Submodel model services":"Connecter les services de modèles Submodel","Connect to Tencent Hunyuan model services":"Connecter les services de modèles Tencent Hunyuan","Connect to the Anthropic API or compatible services":"Connecter l’API Anthropic ou des services compatibles","Connect to the OpenAI API or compatible services":"Connecter l’API OpenAI ou des services compatibles","Connect to Vidu video generation services":"Connecter les services de génération vidéo Vidu","Connect to Volcengine Ark model services":"Connecter les services de modèles Volcengine Ark","Connect to xAI Grok model services":"Connecter les services de modèles xAI Grok","Connected to io.net service normally.":"Connexion au service io.net réussie.","Connection & Models":"Connexion et modèles","Connection closed":"Connexion fermée","Connection error":"Erreur de connexion","Connection failed":"Connexion échouée","Connection info detected in clipboard":"Infos de connexion détectées dans le presse-papiers","Connection info filled in":"Infos de connexion remplies","Connection settings":"Configuration de connexion","Connection settings changed. Fetch models again to refresh the list.":"La connexion a changé. Récupérez à nouveau la liste des modèles.","Connection successful":"Connexion réussie","Console":"Console","Console area":"Zone de console","Console Area":"Zone console","Console Content":"Contenu de la console","Consume":"Consommation","Consumed in the last 24 hours":"Consommé dans les dernières 24 heures","Container":"Conteneur","Container name":"Nom du conteneur","Containers":"Conteneurs","Contains":"Contient","Contains Match":"Correspondance contient","Content":"Contenu","Content displayed on the home page (supports Markdown)":"Contenu affiché sur la page d\'accueil (prend en charge Markdown)","Content not found.":"Contenu non trouvé.","Content not modified!":"Contenu non modifié !","Content width":"Largeur du contenu","Context":"Contexte","Continue":"Continuer","Continue account binding":"Poursuivre la liaison du compte","Continue with {{name}}":"Continuer avec {{name}}","Continue with an account already linked to your profile.":"Continuez avec un compte déjà associé à votre profil.","Continue with Discord":"Continuer avec Discord","Continue with GitHub":"Continuer avec GitHub","Continue with LinuxDO":"Continuer avec LinuxDO","Continue with OIDC":"Continuer avec OIDC","Continue with Telegram":"Continuer avec Telegram","Continue with WeChat":"Continuer avec WeChat","Contract review, compliance, summarisation":"Revue de contrats, conformité, résumé","Control which models are exposed and which groups may use them.":"Contrôlez les modèles exposés et les groupes autorisés à les utiliser.","Controls catalog visibility. Channel availability is configured separately.":"Contrôle la visibilité dans le catalogue. La disponibilité des canaux se configure séparément.","Controls how much the model thinks before answering":"Contrôle la quantité de raisonnement avant la réponse","Controls randomness and creativity":"Contrôle le hasard et la créativité","Controls visibility in the model square. Channel status and existing API access are unchanged.":"Contrôle la visibilité dans la galerie des modèles sans changer les canaux ni les accès API existants.","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"Contrôle si la vérification de l\'utilisateur (biométrie/PIN) est requise lors des flux de Passkey.","Conversation cleared":"Conversation effacée","Conversion rate from USD to your custom currency":"Taux de conversion de l\'USD vers votre devise personnalisée","Convert reasoning_content to tag in content":"Convertir reasoning_content en balise dans content","Convert string to lowercase":"Convertir la chaîne en minuscules","Convert string to uppercase":"Convertir la chaîne en majuscules","Convert to expression":"Convertir en expression","Converter":"Convertisseur","Converter does not match incoming path":"Le convertisseur ne correspond pas au chemin entrant","Converter is not registered":"Le convertisseur n’est pas enregistre","Copied":"Copié","Copied {{count}} key(s)":"{{count}} clé(s) copiée(s)","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"Canal copié (ID source : {{sourceId}}) vers {{name}} (nouvel ID : {{id}})","Copied to clipboard":"Copié dans le presse-papiers","Copied: {{model}}":"Copié : {{model}}","Copied!":"Copié !","Copy":"Copier","Copy {{field}}":"Copier {{field}}","Copy {{name}} pricing":"Copier la tarification de {{name}}","Copy a request header":"Copier un en-tête de requête","Copy All":"Tout copier","Copy all backup codes":"Copier tous les codes de sauvegarde","Copy All Codes":"Copier tous les codes","Copy all models":"Copier tous les modèles","Copy API key":"Copier la clé API","Copy API URL":"Copier l’URL API","Copy base URL":"Copier l’URL de base","Copy billing expression":"Copier l’expression de facturation","Copy callback URL":"Copier l\'URL de rappel","Copy Channel":"Copier le canal","Copy code":"Copier le code","Copy Connection Info":"Copier les infos de connexion","Copy endpoint path":"Copier le chemin du point de terminaison","Copy failed":"Copie échouée","Copy Field":"Copier le champ","Copy Header":"Copier l\'en-tête","Copy homepage URL":"Copier l\'URL de la page d\'accueil","Copy Key":"Copier la clé","Copy Link":"Copier le lien","Copy model name":"Copier le nom du modèle","Copy model names":"Copier les noms des modèles","Copy plugin key":"Copier l’identifiant du plugin","Copy prompt":"Copier le prompt","Copy ready-to-run curl":"Copier le curl prêt à exécuter","Copy redemption code":"Copier le code de rachat","Copy redirect URL":"Copier l\'URL de redirection","Copy referral link":"Copier le lien de parrainage","Copy Request Header":"Copier un en-tête de requête","Copy secret key":"Copier la clé secrète","Copy selected codes":"Copier les codes sélectionnés","Copy selected keys":"Copier les clés sélectionnées","Copy selected models":"Copier les modèles sélectionnés","Copy selected models separated by commas (e.g. a,b)":"Copier les modèles sélectionnés séparés par des virgules (par ex. a,b)","Copy source field to target field":"Copier le champ source vers le champ cible","Copy the key and paste it here":"Copiez la clé et collez-la ici","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"Copiez ce prompt et envoyez-le à un LLM (ex. ChatGPT / Claude) pour vous aider à concevoir votre expression de facturation.","Copy this token now. It will not be shown again.":"Copiez ce jeton maintenant. Il ne sera plus affiché.","Copy to clipboard":"Copier dans le presse-papiers","Copy token":"Copier le Jeton","Copy URL":"Copier l\'URL","Copying...":"Copie...","Copywriting, ad creative, SEO":"Rédaction publicitaire, créatif, SEO","Core concepts":"Concepts clés","Core Configuration":"Configuration principale","Core Features":"Fonctionnalités principales","Core pricing":"Tarification principale","Correct the invalid settings before saving.":"Corrigez les paramètres invalides avant de les enregistrer.","Cost":"Coût","Cost = 10 × 0.3 = 3":"Coût = 10 × 0,3 = 3","Cost = 10 × 0.8 = 8":"Coût = 10 × 0,8 = 8","Cost = 10 × 1.0 = 10":"Coût = 10 × 1,0 = 10","Cost = model price × that one ratio. Nothing else from the group settings enters the formula.":"Coût = prix du modèle × ce seul taux. Rien d’autre dans les réglages de groupes n’entre dans la formule.","Cost calculator":"Calcul des frais","Creem webhook is not configured":"Le webhook Creem n\'est pas configuré","CreemProductId is not configured for this plan":"CreemProductId n\'est pas configuré pour ce forfait","Cost in {{currency}} per request, regardless of tokens used.":"Coût en {{currency}} par requête, quel que soit le nombre de tokens utilisés.","Cost in USD per request, regardless of tokens used.":"Coût en USD par requête, quel que soit le nombre de jetons utilisés.","Cost Tracking":"Suivi des coûts","Could not fetch the plugin source from this browser. The host may block cross-origin requests or be unreachable.":"Impossible de récupérer le code du plugin depuis ce navigateur. L’hôte bloque peut-être les requêtes cross-origin ou est injoignable.","Could not fetch this URL from the browser. The host may block cross-origin requests or be unreachable. Download the file and paste its source below.":"Impossible de récupérer cette URL depuis le navigateur. L’hôte bloque peut-être les requêtes cross-origin ou est injoignable. Téléchargez le fichier et collez son code ci-dessous.","Could not load the changelog":"Impossible de charger le journal","Could not load this source":"Impossible de charger cette source","Count":"Quantité","Count must be between {{min}} and {{max}}":"Le nombre doit être compris entre {{min}} et {{max}}","Counters and averages cover the period since the upstream metrics were initialized or reset.":"Compteurs et moyennes depuis l’initialisation ou la remise à zéro des métriques amont.","Coze":"Coze","CPU":"Processeur","CPU Threshold (%)":"Seuil CPU (%)","Create":"Créer","Create a copy of:":"Créer une copie de :","Create a key for your app or service":"Créer une clé pour votre application ou service","Create a new user group to configure ratio overrides for.":"Créer un nouveau groupe d\'utilisateurs pour configurer les remplacements de ratio.","Create access token":"Créer un jeton d’accès","Create account":"Créer un compte","Create aliases for users":"Créer des alias pour les utilisateurs","Create an account":"Créer un compte","Create an API key to unlock the real request":"Créez une clé API pour débloquer la requête réelle","Create and review invite or credit codes.":"Créer et examiner les codes d\'invitation ou de crédit.","Create API Key":"Créer une clé API","Create API token":"Créer un jeton API","Create API token “{{name}}”":"Créer le jeton API « {{name}} »","Create cache":"Créer le cache","Create cache ratio":"Créer un ratio de cache","Create Channel":"Créer un canal","Create channels or edit keys, base URLs, and overrides.":"Créer des canaux ou modifier les clés, URL de base et règles de remplacement.","Create Code":"Créer un code","Create credentials for the root user":"Créer les identifiants pour le compte administrateur","Create deployment":"Créer un déploiement","Create metadata":"Créer les métadonnées","Create Model":"Créer un modèle","Create multiple API keys at once (random suffix will be added to names)":"Créer plusieurs clés API en une fois (un suffixe aléatoire sera ajouté aux noms)","Create multiple channels from multiple keys":"Créer plusieurs canaux à partir de plusieurs clés","Create multiple redemption codes at once (1-100)":"Créer plusieurs codes de rachat à la fois (1-100)","Create new subscription plan":"Créer un nouveau plan d\'abonnement","Create or update frequently asked questions for users":"Créer ou mettre à jour les questions fréquemment posées aux utilisateurs","Create or update system announcements for the dashboard":"Créer ou mettre à jour les annonces système pour le tableau de bord","Create Plan":"Créer un plan","Create Prefill Group":"Créer un groupe de préremplissage","Create Provider":"Créer un fournisseur","Create Redemption Code":"Créer un code d\'échange","Create request parameter override rules with a visual editor or raw JSON.":"Créer des règles de substitution de paramètres avec l\'éditeur visuel ou le JSON brut.","Create request parameter override rules without editing raw JSON.":"Créez des règles de remplacement des paramètres de requête sans modifier le JSON brut.","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"Créez des ensembles réutilisables de modèles, de balises, de points de terminaison et de groupes d\'utilisateurs pour accélérer la configuration ailleurs dans la console.","Create succeeded":"Création réussie","Create Vendor":"Créer un fournisseur","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"Créez votre premier groupe pour réutiliser les sélections de modèles, de balises ou de points de terminaison n\'importe où dans le tableau de bord.","Create, edit, and delete API keys.":"Créer, modifier et supprimer des clés API.","Create, edit, and delete deployments, and test connections.":"Créer, modifier et supprimer des déploiements, et tester les connexions.","Create, edit, and delete prefill groups.":"Créer, modifier et supprimer des groupes de préremplissage.","Create, edit, and delete redemption codes.":"Créer, modifier et supprimer des codes d’échange.","Create, edit, disable, and delete users, and reset their security settings.":"Créer, modifier, désactiver et supprimer des utilisateurs, et réinitialiser leurs paramètres de sécurité.","Create, revoke, and audit API tokens.":"Créer, révoquer et auditer les jetons API.","Created":"Créé","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"{{count}} codes de réduction nommés {{name}} créés ({{quota}} chacun)","Created {{time}}":"Créé le {{time}}","Custom reset cycle must be greater than 0 seconds":"Le cycle de réinitialisation personnalisé doit être supérieur à 0 seconde","Created a custom OAuth provider":"Fournisseur OAuth personnalisé créé","Created a deployment":"Déploiement créé","Created a model":"Modèle créé","Created a prefill group":"Groupe de préremplissage créé","Created a subscription plan":"Forfait d\'abonnement créé","Created a vendor":"Fournisseur créé","Created an access token":"Jeton d’accès créé","Created At":"Créé le","Daily check-in, received {{quota}}":"Pointage quotidien, {{quota}} reçu","Created channel {{name}} (type {{type}}, count {{count}})":"Canal {{name}} créé (type {{type}}, nombre {{count}})","Created user {{username}} (role {{role}})":"Utilisateur {{username}} créé (rôle {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"Crée un produit Pancake dans la boutique enregistrée avec le titre et le prix de ce forfait. Waffo Pancake doit d’abord être entièrement configuré dans les paramètres de paiement.","Creating...":"Création...","Creation failed":"Échec de la création","Credential refreshed":"Identifiant actualisé","Credentials":"Identifiants","Credentials verification failed":"Échec de la vérification des identifiants","Credentials verification failed — double-check Merchant ID and API private key.":"Échec de la vérification des identifiants — vérifiez l’ID marchand et la clé privée API.","credit":"credit","Credit remaining":"Crédit restant","Creem API key (leave blank unless updating)":"Clé API Creem (laissez vide sauf si mise à jour)","Creem Gateway":"Passerelle Creem","Creem Payment":"Paiement Creem","Creem product ID from your Creem dashboard.":"ID du produit Creem depuis votre tableau de bord Creem.","Creem products must be a JSON array":"Les produits Creem doivent être un tableau JSON","Database connection failed":"Échec de la connexion à la base de données","Database error, please contact the administrator":"Erreur de base de données, veuillez contacter l’administrateur","Cross-group":"Inter-groupes","Cross-group retry":"Nouvelle tentative inter-groupes","Cumulative usage":"Utilisation cumulée","Currency":"Devise","Currency & Display":"Devise et affichage","Current":"Actuelle","Current Balance":"Solde actuel","Current Billing":"Facturation actuelle","Current Cache Size":"Taille actuelle du cache","Current domain":"Domaine actuel","Current domain: {{domain}}":"Domaine actuel : {{domain}}","Current email verification code":"Code de vérification de l’adresse actuelle","Current email: {{email}}. Enter a new email to change.":"E-mail actuel : {{email}}. Saisissez un nouvel e-mail pour le modifier.","Current exchange rate: 1 USD = {{rate}} {{currency}}":"Taux actuel : 1 USD = {{rate}} {{currency}}","Current key":"Clé actuelle","Current key disable requested":"Désactivation de la clé actuelle demandée","Current legacy JSON is invalid, cannot append":"Le JSON ancien format actuel n\'est pas valide, impossible d\'ajouter","Current Level Only":"Niveau actuel uniquement","Current load":"Charge actuelle","Current models for the longest channel in this tag. May not include all models from all channels.":"Modèles actuels pour le canal le plus long de cette balise. Peut ne pas inclure tous les modèles de tous les canaux.","Current models: {{count}}":"Modèles actuels : {{count}}","Current month":"Ce mois-ci","Current Password":"Mot de passe actuel","Current password is incorrect.":"Le mot de passe actuel est incorrect.","Current period price":"Prix de la période actuelle","Current Price":"Prix actuel","Default group":"Groupe par défaut","Current pricing conditions":"Conditions tarifaires actuelles","Current quota":"Quota actuel","Current site: {{origin}}":"Site actuel : {{origin}}","Current time":"Heure actuelle","Current token":"Jeton actuel","Current total = used + remaining. Changing the remaining quota updates the total and percentage.":"Total actuel = utilisé + restant. Modifier le quota restant actualise le total et le pourcentage.","Current total quota":"Quota total actuel","Current v{{from}} → install v{{to}}":"Version actuelle v{{from}} → à installer v{{to}}","Current value":"Valeur actuelle","Current Value":"Valeur actuelle","Current vendor":"Fournisseur actuel","Current version":"Version actuelle","Current:":"Actuel :","Custom":"Personnalisé","Custom (overrides factory {{version}})":"Personnalisé (remplace la version intégrée {{version}})","Custom (seconds)":"Personnalisé (secondes)","Custom Amount":"Montant personnalisé","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"URL de base API personnalisée. Pour les canaux officiels, New API dispose d\'adresses intégrées. Ne remplissez ceci que pour les sites proxy tiers ou les points de terminaison spéciaux. N\'ajoutez pas /v1 ou de barre oblique finale.","Custom API base URL. Leave empty to use provider default.":"URL de base API personnalisée. Laissez vide pour utiliser la valeur par défaut du fournisseur.","Custom Currency":"Devise personnalisée","Custom Currency Symbol":"Symbole de devise personnalisé","Custom currency symbol is required":"Le symbole de devise personnalisé est requis","Custom database driver detected.":"Pilote de base de données personnalisé détecté.","Custom endpoints":"Points de terminaison personnalisés","Custom Epay method":"Méthode Epay personnalisée","Custom Error Response":"Réponse d\'erreur personnalisée","Custom Home Page":"Page d\'accueil personnalisée","Custom message shown when access is denied":"Message personnalisé affiché lorsque l\'accès est refusé","Custom model (comma-separated)":"Modèle personnalisé (séparé par des virgules)","Custom model icon":"Icône personnalisée","Custom module":"Module personnalisé","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"Multiplicateurs personnalisés lorsque des groupes d\'utilisateurs spécifiques utilisent des groupes de jetons spécifiques. Exemple : les utilisateurs VIP obtiennent un taux de 0,9x lorsqu\'ils utilisent les jetons du groupe \\"edit_this\\".","Custom OAuth":"OAuth personnalisé","Custom OAuth Providers":"Fournisseurs OAuth personnalisés","Custom Seconds":"Secondes personnalisées","Custom sidebar section":"Section de barre latérale personnalisée","Custom task plugin setting updated":"Paramètre des plugins de tâches personnalisés mis à jour","Custom Time Range":"Plage horaire personnalisée","Custom Zoom":"Zoom personnalisé","Customize sidebar display content":"Personnaliser le contenu affiché dans la barre latérale","Daily":"Quotidien","Daily Check-in":"Connexion quotidienne","Daily token usage by model across the past few weeks":"Utilisation quotidienne de tokens par modèle sur les dernières semaines","Daily token usage by model across the past month":"Utilisation quotidienne des tokens par modèle au cours du dernier mois","Daily token usage by model over the past month":"Utilisation quotidienne de tokens par modèle sur le dernier mois","Daily uptime over the last 30 days":"Disponibilité quotidienne sur les 30 derniers jours","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"Disponibilité quotidienne ; {{incidents}} incidents totalisant {{minutes}} minutes","Dark":"Sombre","Dashboard":"Tableau de bord","Dashboard Preferences":"Préférences du tableau de bord","Dashboards, tokens, and usage analytics.":"Tableaux de bord, jetons et analyses d\'utilisation.","Data Dashboard":"Tableau de bord des données","Data directory:":"Répertoire des données :","Data is stored locally on this device. Use system backups to keep a safe copy.":"Les données sont stockées localement sur cet appareil. Utilisez les sauvegardes système pour conserver une copie sécurisée.","Data management and log viewing":"Gestion des données et consultation des journaux","Data retention":"Rétention des données","Database":"Base de données","Database check":"Vérification de la base de données","Date and time when this announcement should be displayed":"Date et heure auxquelles cette annonce doit être affichée","Date Range":"Plage de dates","Day":"Jour","Day of month":"Jour du mois","days":"jours","Days to Retain":"Jours à conserver","decides the top-up ratio, which groups the user can pick for tokens, and whether an override ratio applies.":"détermine le taux de recharge, les groupes que l’utilisateur peut choisir pour ses jetons, et si un taux de remplacement s’applique.","decides which channels are used and which base ratio applies.":"détermine les canaux utilisés et le taux de base appliqué.","Declared capabilities":"Capacités déclarées","Decrease quota for user “{{name}}”":"Réduire le quota de « {{name}} »","Decrease user quota":"Réduire le quota utilisateur","Decreased user quota by {{quota}}":"Quota de l\'utilisateur diminué de {{quota}}","Deducted by subscription":"Déduit par abonnement","DeepSeek":"DeepSeek","default":"par défaut","Default":"Par défaut","Default / range":"Défaut / plage","Default administrator permissions can be overridden for this user.":"Les autorisations administrateur par défaut peuvent être remplacées pour cet utilisateur.","Default API address":"Adresse API par défaut","Default API Version":"Version API par défaut","Default API Version *":"Version API par défaut *","Default API version for this channel":"Version API par défaut pour ce canal","Default base URL":"URL de base par défaut","Default Bearer":"Bearer par defaut","Default Collapse Sidebar":"Réduire la barre latérale par défaut","Default consumption chart":"Graphique de consommation par défaut","Default Max Tokens":"Jetons max par défaut","Default model call chart":"Graphique d\'appels de modèle par défaut","Default placeholder":"Icône par défaut","Default range":"Plage par défaut","Default reminder threshold":"Seuil de rappel par défaut","Default Responses API version, if empty, will use the API version above":"Version API des réponses par défaut, si vide, utilisera la version API ci-dessus","Deleted {{count}} auto-disabled keys":"{{count}} clés désactivées automatiquement supprimées","Default session lifetime (seconds)":"Durée de session par défaut (secondes)","Default system prompt for this channel":"Invite système par défaut pour ce canal","Default time granularity":"Granularité temporelle par défaut","Default to auto groups":"Par défaut aux groupes automatiques","Default TTL (seconds)":"TTL par défaut (secondes)","Defaults to \\"OIDC\\" if left blank":"Par défaut « OIDC » si laissé vide","Defaults to the wallet page when empty":"Si vide, la page portefeuille est utilisée par défaut","Define API endpoints for this model (JSON format)":"Définir les points de terminaison API pour ce modèle (format JSON)","Define endpoint mappings for each provider.":"Définissez les mappages d\'endpoints pour chaque fournisseur.","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"Définir des règles par groupe pour ajouter, supprimer ou ajouter des groupes sélectionnables pour des groupes d\'utilisateurs spécifiques.","Degraded performance recently":"Performances dégradées récemment","Delete":"Supprimer","Delete (":"Supprimer (","Delete {{count}} API key(s)?":"Supprimer {{count}} clé(s) API ?","Delete {{count}} models?":"Supprimer {{count}} modèles ?","Delete {{count}} redemption codes?":"Supprimer {{count}} codes d’échange ?","Delete {{count}} selected vendor records? Vendors with linked models cannot be deleted.":"Supprimer les {{count}} fournisseurs sélectionnés ? Ceux ayant des modèles associés ne peuvent pas être supprimés.","Delete {{count}} stale instance records? Online instances will not be deleted.":"Supprimer {{count}} enregistrement(s) d\'instance expirée ? Les instances en ligne ne seront pas supprimées.","Delete a runtime request header":"Supprimer un en-tête de requête à l\'exécution","Delete Account":"Supprimer le compte","Deployment region cannot be empty":"La région de déploiement ne peut pas être vide","Deployment region must be valid JSON, for example {{example}}":"La région de déploiement doit être un JSON valide, par exemple {{example}}","Deployment region must include a default field":"La région de déploiement doit inclure un champ default","Delete active custom version":"Supprimer la version personnalisée active","Delete All Disabled":"Supprimer tout ce qui est désactivé","Delete All Disabled Channels?":"Supprimer tous les canaux désactivés ?","Delete all stale":"Supprimer toutes les expirées","Delete API token":"Supprimer un jeton API","Delete API token “{{name}}”":"Supprimer le jeton API « {{name}} »","Delete Auto-Disabled":"Supprimer les désactivés automatiquement","Delete Channel":"Supprimer le canal","Delete Channels?":"Supprimer les canaux ?","Delete completed tasks matching the current filters across all pages? Active tasks and the latest run of each task type are retained for scheduling. This cannot be undone.":"Supprimer les tâches terminées correspondant aux filtres actuels sur toutes les pages ? Les tâches actives et la dernière exécution de chaque type sont conservées pour la planification. Cette action est irréversible.","Delete condition":"Supprimer la condition","Delete Condition":"Supprimer la condition","Delete failed":"Échec de la suppression","Delete failed models":"Supprimer les modèles en échec","Delete failed models ({{count}})":"Supprimer les modèles en échec ({{count}})","Delete Field":"Supprimer le champ","Delete group":"Supprimer le groupe","Delete Header":"Supprimer l\'en-tête","Delete Invalid":"Supprimer les invalides","Delete invalid codes":"Supprimer les codes invalides","Delete invalid codes (used/disabled/expired)":"Supprimer les codes invalides (utilisés/désactivés/expirés)","Delete invalid redemption codes":"Supprimer les codes de rachat invalides","Delete Invalid Redemption Codes?":"Supprimer les codes de rachat invalides ?","Delete logs":"Supprimer les journaux","Delete mapping":"Supprimer le mappage","Delete metadata and custom pricing for {{count}} models?":"Supprimer les métadonnées et les prix personnalisés de {{count}} modèles ?","Delete metadata for \\"{{name}}\\"? Pricing and channel configurations will be retained.":"Supprimer les métadonnées de « {{name}} » ? Les prix et les canaux seront conservés.","Delete metadata for \\"{{name}}\\"? Pricing will be retained.":"Supprimer les métadonnées de « {{name}} » ? Les prix seront conservés.","Delete metadata for {{count}} models? Pricing will be retained.":"Supprimer les métadonnées de {{count}} modèles ? Les prix seront conservés.","Delete Model":"Supprimer le modèle","Delete model \\"{{name}}\\"?":"Supprimer le modèle « {{name}} » ?","Delete Models?":"Supprimer les modèles ?","Delete plugin version?":"Supprimer cette version du plugin ?","Delete Provider":"Supprimer le fournisseur","Delete Request Header":"Supprimer un en-tête de requête","Delete rule":"Supprimer la règle","Delete Rule":"Supprimer la règle","Delete selected API keys":"Supprimer les clés API sélectionnées","Delete selected channels":"Supprimer les canaux sélectionnés","Delete selected models":"Supprimer les modèles sélectionnés","Delete selected redemption codes":"Supprimer les codes sélectionnés","Delete session rule “{{name}}”? Save your changes to apply the removal.":"Supprimer la règle de session « {{name}} » ? Enregistrez les modifications pour appliquer la suppression.","Delete stale instance":"Supprimer l\'instance expirée","Delete stale instance \\"{{name}}\\"? If it has reported again, it will not be deleted.":"Supprimer l\'instance expirée \\"{{name}}\\" ? Si elle a de nouveau signalé son état, elle ne sera pas supprimée.","Delete stale instances":"Supprimer les instances expirées","Delete vendor record":"Supprimer le fournisseur","Delete vendors":"Supprimer les fournisseurs","Deleted":"Supprimé","Deleted \\"{{name}}\\"":"\\"{{name}}\\" supprimé","Deleted ({{id}})":"Supprimé ({{id}})","Deleted {{count}} failed models":"{{count}} modèles en échec supprimés","Deleted {{count}} historical system tasks":"{{count}} tâches système supprimées de l’historique","Deleted {{count}} stale instances":"{{count}} instances expirées supprimées","Deleted a custom OAuth provider":"Fournisseur OAuth personnalisé supprimé","Deleted a deployment":"Déploiement supprimé","Deleted a model":"Modèle supprimé","Deleted a passkey":"Clé d\'accès supprimée","Descending":"Décroissant","Disable tag grouping to drag channels":"Désactivez le regroupement par étiquette pour déplacer les canaux","Disabled {{count}} keys":"{{count}} clés désactivées","Deleted a prefill group":"Groupe de préremplissage supprimé","Deleted a redemption code":"Code de réduction supprimé","Deleted a vendor":"Fournisseur supprimé","Deleted all disabled channels ({{count}})":"Tous les canaux désactivés supprimés ({{count}})","Deleted channel {{name}} (ID: {{id}})":"Canal {{name}} supprimé (ID : {{id}})","Deleted invalid redemption codes":"Codes de réduction invalides supprimés","Deleted stale instance":"Instance expirée supprimée","Discord ID is empty!":"L’ID Discord est vide !","Deleted successfully":"Supprimé avec succès","Deleted tokens":"Jetons supprimés","Deleted user {{username}} (ID: {{id}})":"Utilisateur {{username}} supprimé (ID : {{id}})","Deleted: {{processed}}":"Supprimés : {{processed}}","Deleting this custom version does not disable the platform. The same-name factory plugin will be restored automatically.":"La suppression de cette version personnalisée ne désactive pas la plateforme. Le plugin intégré du même nom sera restauré automatiquement.","Deleting will permanently remove this subscription record (including benefit details). Continue?":"La suppression supprimera définitivement cet enregistrement d\'abonnement (y compris les détails des avantages). Continuer ?","Deleting...":"Suppression...","Demo site":"Site de démonstration","Demo site mode":"Mode site de démonstration","Demo Site Mode":"Mode Site de démonstration","Demote":"Rétrograder","Density":"Densité","Deploy your own gateway and start routing requests through your configured upstream services.":"Déployez votre propre passerelle et commencez à router les requêtes via vos services en amont configurés.","Deployment created successfully":"Déploiement créé avec succès","Deployment details":"Détails du déploiement","Deployment ID":"ID du déploiement","Deployment location":"Emplacement du déploiement","Deployment logs":"Journaux de déploiement","Deployment Region":"Région de déploiement","Deployment Region *":"Région de déploiement *","Deployment requested":"Déploiement demandé","Deployments":"Déploiements","Deprecated":"Obsolète","Derives the request names your users call":"Génère les noms de requête utilisés par vos utilisateurs","Derives the upstream names sent to the provider":"Génère les noms envoyés au fournisseur en amont","Desc":"Desc.","Describe":"Décrire","Describe this model...":"Décrire ce modèle...","Describe this vendor...":"Décrire ce fournisseur...","Description":"Description","Description is required":"La description est requise","Designed and Developed by":"Conçu et développé par","designed for scale":"conçu pour la scalabilité","Destroyed":"Détruit","Detail":"Détail","Detailed request logs for investigations.":"Journaux détaillés des requêtes pour les enquêtes.","Details":"Détails","Detect All Upstream Updates":"Détecter toutes les mises à jour upstream","Detect model updates":"Détecter les nouveaux modèles","Detected database":"Base de données détectée","Detected high-risk status code redirect rules":"Les règles de redirection de codes d\'état à haut risque suivantes ont été détectées :","Detection complete: {{add}} to add, {{remove}} to remove":"Détection terminée : {{add}} à ajouter, {{remove}} à supprimer","Detection failed":"Échec de la détection","Determines how this group is applied elsewhere.":"Détermine comment ce groupe est appliqué ailleurs.","Deterministic sampling seed (best-effort)":"Graine d\'échantillonnage déterministe (meilleur effort)","Developer Friendly":"Convivial pour les développeurs","Device Type Preference":"Préférence de type d\'appareil","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Les canaux Dify ne prennent en charge que les chatflow et les agents, et les agents ne prennent pas en charge les images","Digest:":"Digest :","Direction":"Direction","Directory File Count":"Nombre de fichiers du répertoire","Directory Total Size":"Taille totale du répertoire","Disable":"Désactiver","Disable 2FA":"Désactiver la 2FA","Downgrade group does not exist":"Le groupe de rétrogradation n\'existe pas","Disable All":"Désactiver tout","Disable channels on repeated failures":"Désactiver après des échecs répétés","Disable custom task plugins?":"Désactiver les plugins personnalisés ?","Disable on failure":"Désactiver en cas d\'échec","Disable plugin {{name}} ({{key}})? Requests using this plugin may be affected.":"Désactiver le plugin {{name}} ({{key}}) ? Les requêtes utilisant ce plugin peuvent être affectées.","Disable plugin?":"Désactiver le plugin ?","Disable selected channels":"Désactiver les canaux sélectionnés","Disable selected models":"Désactiver les modèles sélectionnés","Disable store passthrough":"Désactiver la transmission du champ store","Disable task plugins?":"Désactiver les plugins de tâche ?","Disable this key?":"Désactiver cette clé ?","Disable threshold (seconds)":"Seuil de désactivation (secondes)","Disable Two-Factor Authentication":"Désactiver l\'authentification à deux facteurs","disabled":"désactivé","Disabled":"Désactivé","Disabled all channels with tag: {{tag}}":"Tous les canaux avec le tag {{tag}} ont été désactivés","Disabled channels with tag {{tag}}":"Canaux avec l\'étiquette {{tag}} désactivés","Disabled globally":"Désactivé globalement","Disabled lanes are omitted on save.":"Les voies désactivées sont omises à l’enregistrement.","Disabled Reason":"Raison de la désactivation","Disabled Time":"Heure de désactivation","Disabled two-factor authentication":"Authentification à deux facteurs désactivée","Disabled; fell back to factory":"Désactivé ; retour à la version intégrée","Disabled; platform unavailable":"Désactivé ; plateforme indisponible","Disabling...":"Désactivation en cours...","Discard changes":"Abandonner les modifications","Discard unsaved changes?":"Abandonner les modifications non enregistrées ?","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"Avertissement : usage personnel uniquement. Ne distribuez ni ne partagez aucun identifiant. Ce canal a des prerequis et necessite une configuration prealable ; utilisez-le uniquement si vous comprenez la procedure et les risques, et respectez les conditions et politiques d\'OpenAI. Les identifiants et la configuration sont reserves a l\'integration Codex CLI et ne sont pas destines a d\'autres clients, plateformes ou canaux.","Discord":"Discord","Discount":"Remise","Discount map by recharge amount (JSON object)":"Mappage des réductions par montant de recharge (objet JSON)","Discount Rate":"Taux de réduction","Discount rate must be ≤ 1":"Le taux de remise doit être ≤ 1","Discount rate must be greater than 0":"Le taux de remise doit être supérieur à 0","Discount Rate:":"Taux de réduction :","Discount ratio for cache hits.":"Ratio de réduction pour les accès au cache.","Discouraged":"Déconseillé","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"Découvrez une sélection de modèles IA, comparez les tarifs et les capacités, et choisissez le modèle adapté à chaque scénario.","Discover the leading models in each domain":"Découvrez les modèles leaders dans chaque domaine","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"Découvrez les modèles les plus utilisés et les fournisseurs en progression sur la plateforme, mis à jour avec les données d’utilisation en direct.","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"Découvrez les modèles les plus utilisés, les meilleures applications et les fournisseurs en plein essor — mis à jour en continu pour chaque catégorie.","Discovering...":"Découverte en cours...","Disk cache cleared":"Cache disque vidé","Disk Cache Settings":"Paramètres du cache disque","Disk Cache Threshold (MB)":"Seuil du cache disque (Mo)","Disk cache, system performance monitoring, and operation statistics":"Cache disque, surveillance des performances système et statistiques opérationnelles","Disk Hits":"Hits disque","Disk Threshold (%)":"Seuil disque (%)","Display in Currency":"Afficher en devise","Display limit":"Limite d\'affichage","Display Mode":"Mode d\'affichage","Display name":"Nom d\'affichage","Display Name":"Nom d\'affichage","Display name and email used in outgoing messages":"Nom d\'affichage et e-mail utilisés dans les messages sortants","Display Name Field":"Champ de nom d\'affichage","Display name for this chat client.":"Nom d\'affichage pour ce client de chat.","Display name for this monitoring group (max 50 characters)":"Nom d\'affichage pour ce groupe de surveillance (50 caractères max)","Display name for this payment method.":"Nom d\'affichage pour ce mode de paiement.","Display name shown to users.":"Nom d\'affichage affiché aux utilisateurs.","Display Options":"Options d\'affichage","Display policy":"Règle d’affichage","Display Token Statistics":"Afficher les statistiques des jetons","Displayed":"Affiché","Displayed in":"Affiché en","Displays the mobile sidebar.":"Affiche la barre latérale mobile.","Do not keep sessions":"Sans maintien de session","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"Ne faites pas trop confiance à cette fonctionnalité. L\'IP peut être usurpée. Veuillez l\'utiliser avec nginx, CDN et autres passerelles.","Do not repeat check-in; only once per day":"Ne répétez pas le check-in ; une seule fois par jour","Do not wait one second between polling async tasks for this channel":"Ne pas attendre une seconde entre les interrogations des tâches asynchrones pour ce canal","Do regex replacement in the target field":"Effectuer un remplacement par expression régulière dans le champ cible","Do string replacement in the target field":"Effectuer un remplacement de chaîne dans le champ cible","Docs":"Documents","Documentation Link":"Lien de la documentation","Documentation or external knowledge base.":"Documentation ou base de connaissances externe.","Does not check healthy channels. It only rechecks auto-disabled channels and restores them after they recover.":"Ne vérifie pas les canaux opérationnels. Revérifie uniquement les canaux désactivés automatiquement et les réactive après leur rétablissement.","does not exist or might have been removed.":"n\'existe pas ou a peut-être été supprimé.","Domain":"Domaine","Domain Filter Mode":"Mode de filtre de domaine","Don\'t have an account?":"Vous n\'avez pas de compte ?","Done":"Terminé","Doubao":"Doubao","Doubao custom API address editing unlocked":"Édition d\'adresse API personnalisée Doubao déverrouillée","Double check the configuration below. Your system will be locked until initialization is complete.":"Vérifiez la configuration ci-dessous. Votre système sera verrouillé jusqu\'à ce que l\'initialisation soit terminée.","Downgrade Group":"Groupe de rétrogradation","Downgrade to pre-purchase group":"Rétrograder vers le groupe d\'avant l\'achat","Downgrade to this group after the subscription expires":"Rétrograder vers ce groupe après l\'expiration de l\'abonnement","Download":"Télécharger","Drag {{group}} to reorder":"Faites glisser {{group}} pour réorganiser","Drag mode":"Mode glisser-déposer","Drag mode help":"Aide au déplacement","Drag the handle to move a channel.":"Faites glisser la poignée pour déplacer un canal.","Drag to change priority. Use arrow keys to move, Escape to cancel.":"Glissez pour modifier la priorité. Flèches pour déplacer, Échap pour annuler.","Drag to move":"Glisser pour déplacer","Drag to resize":"Glisser pour redimensionner","Drag to set channel priority":"Réorganiser la priorité des canaux","Draw":"Dessin","Drawing":"Dessin","Drawing logs":"Journaux de dessin","Drawing Logs":"Journaux de dessin","Drawing task polling":"Interrogation des tâches de dessin","Drawing task records":"Historique des tâches de dessin","Drop a JavaScript plugin file here":"Déposez ici un fichier de plugin JavaScript","Drop at an edge to create a different priority.":"Déposez sur un bord pour créer une priorité différente.","Drop between tiers to change priority, or in the center to join a tier":"Déposez entre les niveaux pour changer la priorité, au centre pour rejoindre un niveau","Drop in the center to use the same priority.":"Déposez au centre pour partager la même priorité.","Dry run result":"Résultat de la simulation","Duplicate":"Dupliquer","Duplicate group names: {{names}}":"Noms de groupe en double : {{names}}","Duplicate model in route models":"Modèle dupliqué dans les modèles de route","Duplicate source model mappings are not allowed":"Les mappages de modèles source en double ne sont pas autorisés","Duplicate source model(s): {{models}}":"Modèle(s) source en double : {{models}}","Duration":"Durée","Duration (hours)":"Durée (heures)","Duration Settings":"Paramètres de durée","Duration Unit":"Unité de durée","Duration Value":"Valeur de durée","Dynamic declarations cannot be previewed. Retry or review the source below.":"Les déclarations dynamiques ne peuvent pas être prévisualisées. Réessayez ou consultez le code ci-dessous.","Dynamic multiplier":"Multiplicateur variable","Dynamic operation":"Opération dynamique","Dynamic Pricing":"Tarification dynamique","e.g. ¥ or HK$":"par ex. ¥ ou HK$","e.g. 401, 403, 429, 500-599":"ex. 401, 403, 429, 500-599","e.g. 8 means 1 USD = 8 units":"par ex. 8 signifie 1 USD = 8 unités","e.g. Basic Plan":"ex. Plan de base","e.g. Clean tool parameters to avoid upstream validation errors":"ex. Nettoyer les paramètres d\'outils pour éviter les erreurs de validation en amont","e.g. Company SSO":"ex. SSO de l\'entreprise","e.g. example.com":"par ex. example.com","e.g. gpt-4o, gemini-2.5-flash":"p. ex. gpt-4o, gemini-2.5-flash","e.g. llama3.1:8b":"p. ex. llama3.1:8b","e.g. My GitLab":"par ex. Mon GitLab","e.g. my-gitlab":"par ex. mon-gitlab","e.g. New API Console":"par ex. console New API","e.g. openid profile email":"par ex. openid profile email","e.g. Requires level {{required}}; your current level is {{current}}":"ex. Niveau {{required}} requis ; votre niveau actuel est {{current}}","e.g. Suitable for light usage":"ex. Adapté à une utilisation légère","e.g. This request does not meet access policy":"ex. Cette requête ne satisfait pas la politique d\'accès","e.g., 0.95":"par ex., 0.95","Email & Notifications":"E-mail et notifications","Email address is already in use":"Cette adresse e-mail est déjà utilisée","e.g., 100":"par ex., 100","e.g., 123456":"par ex., 123456","e.g., 2025-04-01-preview":"par ex., 2025-04-01-preview","e.g., 50":"par ex., 50","e.g., 500000":"p. ex., 500000","e.g., 7342866812345":"par ex., 7342866812345","Email is empty!":"L’e-mail est vide !","Email or password is empty!":"L’e-mail ou le mot de passe est vide !","e.g., 8 means 8 local currency per USD":"par ex., 8 signifie 8 unités de monnaie locale par USD","e.g., Alipay, WeChat":"par ex., Alipay, WeChat","e.g., Basic Package":"p. ex., Forfait de base","Email verification is enabled, please enter email address and verification code":"La vérification de l’e-mail est activée, veuillez saisir votre adresse e-mail et le code de vérification","e.g., CN2 GIA":"par ex., CN2 GIA","e.g., Core APIs, OpenAI, Claude":"par ex., API principales, OpenAI, Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"par ex., d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"par ex., par défaut, vip, premium","e.g., gpt-4, claude-3":"ex. gpt-4, claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"ex. : gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"par ex., https://api.example.com (chemin avant /suno)","e.g., https://api.openai.com/v1/chat/completions":"par ex., https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"p. ex., https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"par ex., https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"par ex., https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"p. ex., OpenAI GPT-4 Production","e.g., preview":"par ex., prévisualisation","e.g., prod_xxx":"p. ex., prod_xxx","e.g., Recommended for China Mainland Users":"par ex., Recommandé pour les utilisateurs de Chine continentale","e.g., SiAlipay":"par ex., SiAlipay","e.g., us-central1 or JSON format for model-specific regions":"par ex., us-central1 ou format JSON pour les régions spécifiques au modèle","e.g., v2.1":"par ex., v2.1","Each backup code can only be used once.":"Chaque code de sauvegarde ne peut être utilisé qu\'une seule fois.","Each item must be an object with a single key-value pair.":"Chaque élément doit être un objet avec une seule paire clé-valeur.","Each item must have exactly one key-value pair.":"Chaque élément doit avoir exactement une paire clé-valeur.","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"Chaque ligne représente un mot-clé. Laissez vide pour désactiver la liste mais conserver les états des interrupteurs.","Each matrix cell is one rule: users of this row group pay this ratio when billed as this column group. In JSON the row is the outer key and the column is the inner key.":"Chaque cellule de la matrice est une règle : les utilisateurs du groupe de la ligne paient ce taux lorsqu’ils sont facturés sous le groupe de la colonne. En JSON, la ligne est la clé externe et la colonne la clé interne.","Each row prices one combination of {{fields}}.":"Chaque ligne définit le prix d’une combinaison de {{fields}}.","Each rule reads as a sentence: users of one group pay a special ratio when billed as another group. Without a rule, the billing group base ratio applies.":"Chaque règle se lit comme une phrase : les utilisateurs d’un groupe paient un taux spécial lorsqu’ils sont facturés sous un autre groupe. Sans règle, le taux de base du groupe de facturation s’applique.","Each source serves an index.json listing installable plugins. Indexes are fetched by your browser; the gateway makes no outbound requests.":"Chaque source expose un index.json listant les plugins installables. Les index sont récupérés par votre navigateur ; la passerelle n’émet aucune requête sortante.","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"Chaque palier accepte 0 à 2 conditions (sur len, p, c) ; le dernier palier est le filet de sécurité sans condition. Utilisez len (longueur d\'entrée complète, y compris les cache hits) pour les conditions de palier afin d\'éviter les routages erronés lorsque les cache hits réduisent p.","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"Chaque palier accepte jusqu’à 2 conditions ; le dernier palier sert de repli sans condition. Utilisez la longueur complète de l’entrée pour éviter un mauvais aiguillage lorsque les lectures de cache réduisent les tokens d’entrée facturables.","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"Chaque palier prend en charge jusqu’à 2 conditions. Le dernier palier sans condition sert de repli.","Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.":"Gagnez des récompenses quand des utilisateurs rejoignent via votre lien de parrainage. Transférez-les vers votre solde à tout moment.","Earnings":"Gains","Edit":"Modifier","Edit {{title}}":"Modifier {{title}}","Edit access token":"Modifier le jeton d’accès","Edit all channels with tag:":"Modifier tous les canaux avec l\'étiquette :","Edit Announcement":"Modifier l\'annonce","Edit API Shortcut":"Modifier le raccourci API","Edit billing ratios and user-selectable groups in one table.":"Modifiez les ratios de facturation et les groupes sélectionnables par les utilisateurs dans un seul tableau.","Edit Channel":"Modifier le canal","Edit channel routing":"Modifier le routage des canaux","Edit chat preset":"Modifier le préréglage de chat","Edit discount tier":"Modifier le palier de remise","Edit FAQ":"Modifier la FAQ","Edit group":"Modifier le groupe","Edit group rate limit":"Modifier la limite de taux de groupe","Edit group settings as JSON. Changes are shared with the visual editor.":"Modifiez les groupes en JSON. Les changements sont synchronisés avec l’éditeur visuel.","Edit JSON object directly. Suitable for simple parameter overrides.":"Modifier l\'objet JSON directement. Adapté aux substitutions de paramètres simples.","Edit JSON text directly. Format will be validated on save.":"Modifier le texte JSON directement. Le format sera validé à l\'enregistrement.","Edit mapping":"Modifier les correspondances","Edit model":"Modifier le modèle","Edit Model":"Modifier le modèle","Edit model pricing":"Modifier la tarification du modèle","Edit models and vendors, and sync them from upstream.":"Modifier les modèles et les fournisseurs, et les synchroniser depuis l’amont.","Edit non-sensitive settings such as models, groups, and routing rules.":"Modifier les paramètres non sensibles comme les modèles, les groupes et les règles de routage.","Edit OAuth Provider":"Modifier le fournisseur OAuth","Edit payment method":"Modifier le mode de paiement","Edit Prefill Group":"Modifier le groupe de préremplissage","Edit pricing rule {{name}}":"Modifier la règle {{name}}","Edit product":"Modifier le produit","Edit ratio override":"Modifier le remplacement de ratio","Edit Rule":"Modifier la règle","Edit selectable group":"Modifier le groupe sélectionnable","Edit sensitive channel settings":"Modifier les paramètres sensibles des canaux","Edit Tag":"Modifier l\'étiquette","Edit Tag:":"Modifier l\'étiquette :","Edit Uptime Kuma Group":"Modifier le groupe Uptime Kuma","Edit Vendor":"Modifier le fournisseur","Enabled {{count}} keys":"{{count}} clés activées","edit_this":"modifier_ceci","Edited channels with tag {{tag}}":"Canaux avec l\'étiquette {{tag}} modifiés","Editor mode":"Mode éditeur","Education":"Éducation","Effective icon":"Icône utilisée","Email":"E-mail","Email (required for verification)":"E-mail (requis pour la vérification)","Email Address":"Adresse e-mail","Email Alias Restriction":"Restriction d\'alias d\'e-mail","Email bound successfully!":"E-mail lié avec succès !","Email confirmation code resend":"Renvoi du code de confirmation par e-mail","Email Domain Restriction":"Restriction de domaine d\'e-mail","Email Domain Whitelist":"Liste blanche de domaines d\'e-mail","Email Field":"Champ d\'e-mail","Email Verification":"Vérification d\'e-mail","Email verification code is incorrect.":"Le code de vérification par e-mail est incorrect.","Email verification has ended. Start again to continue.":"La vérification de l’adresse e-mail a pris fin. Recommencez pour continuer.","Email, summarisation, knowledge work":"Email, résumé, travail intellectuel","Embeddings":"Embeddings","Empty":"Vide","Empty value will be saved as {}.":"Une valeur vide sera enregistrée comme {}.","Enable":"Activer","Enable {{parameter}}":"Activer {{parameter}}","Enable 2FA":"Activer 2FA","Enable All":"Tout activer","Enable check-in feature":"Activer la fonction de connexion","Enable custom task plugins":"Activer les plugins de tâches personnalisés","Enable Data Dashboard":"Activer le tableau de bord des données","Enable demo mode with limited functionality":"Activer le mode démo avec des fonctionnalités limitées","Enable Discord OAuth":"Activer OAuth Discord","Enable Disk Cache":"Activer le cache disque","Enable drawing features":"Activer les fonctionnalités de dessin","Enable filtering":"Activer le filtrage","Enable FunctionCall thoughtSignature Fill":"Activer le remplissage de thoughtSignature pour FunctionCall","Enable GitHub OAuth":"Activer GitHub OAuth","Enable Groups":"Activer les groupes","Enable if this is an OpenRouter enterprise account with special response format":"Activer si c\'est un compte d\'entreprise OpenRouter avec un format de réponse spécial","Enable io.net deployments":"Activer les déploiements io.net","Enable io.net model deployment service in console":"Activer le service de déploiement de modèles io.net dans la console","Enable LinuxDO OAuth":"Activer LinuxDO OAuth","Enable model performance metrics":"Activer les indicateurs de performance des modèles","Enable OIDC":"Activer OIDC","Enable only if the upstream supports Responses WebSocket. HTTP requests are unaffected when disabled.":"Activez uniquement si le fournisseur prend en charge Responses WebSocket. Les requêtes HTTP restent disponibles lorsque cette option est désactivée.","Enable or disable this channel":"Activer ou désactiver ce canal","Enable or disable this model":"Activer ou désactiver ce modèle","Enable Passkey":"Activer Passkey","Enable passthrough":"Activer la transmission","Enable Performance Monitoring":"Activer la surveillance des performances","Enable plugin {{key}}":"Activer le plugin {{key}}","Enable plugin?":"Activer le plugin ?","Enable rate limiting":"Activer la limitation de débit","Enable request body passthrough?":"Activer la transmission du corps de la requête ?","Enable request header passthrough?":"Activer la transmission des en-têtes de la requête ?","Enable Request Passthrough":"Activer le Passthrough de requêtes","Enable Responses WebSocket":"Activer Responses WebSocket","Enable selected channels":"Activer les canaux sélectionnés","Enable selected models":"Activer les modèles sélectionnés","Enable session affinity":"Activer l’affinité de session","Enable SSL/TLS":"Activer SSL/TLS","Enable SSRF Protection":"Activer la protection SSRF","Enable STARTTLS":"Activer STARTTLS","Enable streaming mode for the test request.":"Activer le mode streaming pour la requête de test.","Enable task plugins":"Activer les plugins de tâche","Enable Telegram OAuth":"Activer Telegram OAuth","Enable test mode for Creem payments":"Activer le mode test pour les paiements Creem","Enable this key?":"Activer cette clé ?","Enable Turnstile":"Activer Turnstile","Enable Two-factor Authentication or Passkey in Security & Access to continue.":"Activez la double authentification ou une clé d’accès dans « Sécurité et accès » pour continuer.","Enable Two-factor Authentication or Passkey in Security & Access to unlock sensitive operations.":"Activez la double authentification ou une clé d’accès dans « Sécurité et accès » pour autoriser les opérations sensibles.","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"Activez l\'authentification à deux facteurs ou Passkey dans votre profil pour déverrouiller les opérations sensibles.","Enable unlimited quota for this API key":"Activer le quota illimité pour cette clé API","Enable violation deduction":"Activer la déduction pour violation","Enable Waffo":"Activer Waffo","Enable Waffo Pancake":"Activer Waffo Pancake","Enable WeChat Auth":"Activer l\'authentification WeChat","Enable when proxying workers that fetch images over HTTP.":"Activer lors de la mise en proxy des workers qui récupèrent des images via HTTP.","Enable when the client and upstream use the same API format and you need to preserve upstream-specific or new fields the gateway does not yet support. Usually leave this off.":"À activer si le client et le service amont utilisent le même format API et si des champs propres au service amont ou récents, non encore pris en charge par la passerelle, doivent être conservés. Généralement inutile.","Enable when the upstream needs client information from Codex or Claude Code headers; may expose client information":"À activer si le service amont a besoin des en-têtes de clients comme Codex ou Claude Code ; peut exposer les informations du client","Enable when the upstream needs information from clients such as Codex or Claude Code, including User-Agent, client version or session headers. Usually leave this off.":"À activer si le service amont a besoin d\'informations de clients comme Codex ou Claude Code : User-Agent, version du client ou en-têtes de session. Généralement inutile.","Enabled":"Activé","Enabled all channels with tag: {{tag}}":"Tous les canaux avec le tag {{tag}} ont été activés","Enabled channels with tag {{tag}}":"Canaux avec l\'étiquette {{tag}} activés","Enabled Status":"Statut activé","Enabled two-factor authentication":"Authentification à deux facteurs activée","Enabling...":"Activation en cours...","Encourages introducing new topics":"Encourage l\'introduction de nouveaux sujets","Encourages new topics":"Encourage de nouveaux sujets","End":"End","End Error":"Erreur finale","End Reason":"Raison de fin","End Time":"Heure de fin","End time must be after start time":"La fin doit être postérieure au début","Enter the Discovery URL or Issuer URL first":"Saisissez d’abord l’URL Discovery ou l’URL Issuer","End weekday":"Jour de fin","End-user identifier for abuse monitoring":"Identifiant d\'utilisateur final pour la surveillance des abus","Endpoint":"Point d\'accès","Endpoint config":"Configuration de l\'endpoint","Endpoint Configuration":"Configuration du point de terminaison","Endpoint Type":"Type de point de terminaison","Endpoint, provider-specific settings, and credentials.":"Point de terminaison, paramètres propres au fournisseur et identifiants.","Endpoint:":"Point de terminaison :","Endpoints":"Points de terminaison","English":"Anglais","Ensure Prefix":"Garantir le préfixe","Ensure Suffix":"Garantir le suffixe","Ensure the string has a specified prefix":"S\'assurer que la chaîne a un préfixe spécifié","Ensure the string has a specified suffix":"S\'assurer que la chaîne a un suffixe spécifié","Enter 6-digit code":"Saisir le code à 6 chiffres","Enter a domain such as example.com or localhost, without a protocol, port or path. Put addresses with ports in Allowed Passkey websites.":"Saisissez un domaine comme example.com ou localhost, sans protocole, port ni chemin. Placez les adresses avec un port dans « Sites autorisés pour les Passkeys ».","Enter a finite, non-negative price":"Saisissez un prix fini et positif ou nul","Enter a finite, non-negative price.":"Saisissez un prix fini et non négatif.","Enter a name":"Saisir un nom","Enter a new name":"Entrez un nouveau nom","Enter a positive integer":"Saisissez un entier positif","Enter a positive or negative amount to adjust the quota":"Saisir un montant positif ou négatif pour ajuster le quota","Enter a react-icons component name. Invalid names show no icon.":"Saisissez le nom d’un composant react-icons. Les noms invalides n’affichent aucune icône.","Enter a rule to preview mappings.":"Renseignez une règle pour voir les correspondances.","Enter a valid condition value.":"Saisissez une valeur de condition valide.","Enter a valid email or leave blank":"Entrez un e-mail valide ou laissez vide","Enter a value and press Enter":"Saisir une valeur et appuyer sur Entrée","Enter amount in {{currency}}":"Entrez le montant en {{currency}}","Enter amount in tokens":"Entrez le montant en tokens","Enter an absolute HTTP(S) URL without credentials, query parameters, or fragments":"Saisissez une URL HTTP(S) absolue sans identifiants, paramètres de requête ni fragment","Enter an absolute http(s) URL.":"Saisissez une URL http(s) absolue.","Enter an ISO date and time with a timezone offset.":"Saisissez une date et une heure ISO avec un décalage de fuseau horaire.","Enter announcement content (supports Markdown & HTML)":"Saisir le contenu de l\'annonce (prend en charge Markdown et HTML)","Enter announcement content (supports Markdown/HTML)":"Saisir le contenu de l\'annonce (prend en charge Markdown/HTML)","Enter API Key":"Saisir la clé API","Enter API key for this channel":"Saisir la clé API pour ce canal","Enter API Key, format: APIKey|Region":"Entrez la clé API, format : APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"Entrez la clé API, une par ligne, format : APIKey|Region","Enter application token":"Saisir le jeton d\'application","Enter authenticator code":"Saisir le code de l\'authentificateur","Enter backup code (e.g., CAWD-OQDV)":"Saisir le code de secours (par exemple, CAWD-OQDV)","Enter code":"Saisir le code","Enter code or backup code":"Saisir le code ou le code de secours","Enter Completion price to calculate ratio":"Saisir le prix Completion pour calculer le ratio","Enter Creem API key":"Saisir la clé API Creem","Enter custom API endpoint URL":"Saisir l\'URL du point de terminaison API personnalisé","Enter deployment region or JSON mapping:":"Saisir la région de déploiement ou le mappage JSON :","Enter display name":"Saisir le nom d\'affichage","Enter HTML code (e.g.,

About us...

) or a URL (e.g., https://example.com) to embed as iframe":"Saisissez le code HTML (par exemple,

À propos de nous...

) ou une URL (par exemple, https://example.com) à intégrer en tant qu\'iframe","Enter Input price to calculate ratio":"Saisir le prix Input pour calculer le ratio","Enter JSON to override request headers":"Entrez du JSON pour remplacer les en-têtes","Enter key, format: AccessKey|SecretAccessKey|Region":"Entrez la clé, format : AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"Entrez la clé, une par ligne, format : AccessKey|SecretAccessKey|Region","Enter model name":"Entrez le nom du modèle","Enter new key to update":"Saisir la nouvelle clé à mettre à jour","Enter new key to update, or leave empty to keep current key":"Saisir la nouvelle clé à mettre à jour, ou laisser vide pour conserver la clé actuelle","Enter new tag name (leave empty to disband tag)":"Saisir le nouveau nom de tag (laisser vide pour dissoudre le tag)","Enter new tag name or leave empty":"Saisir le nouveau nom de tag ou laisser vide","Enter new token to update":"Saisir le nouveau token à mettre à jour","Enter one API key per line for batch creation":"Saisissez une clé API par ligne pour la création par lots","Enter one key per line for batch creation":"Saisissez une clé par ligne pour la création par lots","Enter one keyword per line":"Saisir un mot-clé par ligne","Enter one website address per line, such as https://example.com. Do not include a page path.":"Saisissez une adresse de site par ligne, par exemple https://example.com, sans chemin de page.","Enter only a top-level callback domain, for example https://api.example.com, without any path.":"Saisissez uniquement le domaine de callback principal, par exemple https://api.example.com, sans chemin.","Enter only the domain, such as example.com, without https://, a port or a page path. If you use both example.com and api.example.com, you can enter example.com.":"Saisissez uniquement le domaine, par exemple example.com, sans https://, port ni chemin de page. Si vous utilisez example.com et api.example.com, vous pouvez saisir example.com.","Enter only the domain, without https://, a port or a page path. example.com and www.example.com are different Passkey domains; changing between them does not migrate existing Passkeys.":"Saisissez uniquement le domaine, sans https://, port ni chemin. example.com et www.example.com sont des domaines distincts pour les clés d’accès ; passer de l’un à l’autre ne migre pas les clés existantes.","Enter password":"Saisir le mot de passe","Enter password (8-20 characters)":"Saisir le mot de passe (8-20 caractères)","Enter password (8–128 characters)":"Saisissez un mot de passe (8 à 128 caractères)","Enter previous domains, one per line, without a protocol, port or path. Different ports on the same domain do not need compatible domains.":"Saisissez les anciens domaines, un par ligne, sans protocole, port ni chemin. Des ports différents sur un même domaine ne nécessitent pas de domaines compatibles.","Enter previous Passkey domains, one per line. Existing Passkeys can still verify with these domains; new Passkeys use the primary domain.":"Saisissez les anciens domaines des clés d’accès, un par ligne. Les clés existantes restent utilisables avec ces domaines ; les nouvelles utilisent le domaine principal.","Enter quota in {{currency}}":"Saisir le quota en {{currency}}","Enter quota in tokens":"Saisir le quota en tokens","Enter sample usage to estimate the cost. Group and request multipliers are not included.":"Saisissez l’usage d’une requête pour estimer son coût, hors multiplicateurs de groupe et de requête.","Enter secret key":"Saisir la clé secrète","Enter system prompt (user prompt takes priority)":"Saisir l\'invite système (l\'invite utilisateur est prioritaire)","Enter tag name (optional)":"Saisir le nom du tag (facultatif)","Enter the 6-digit authenticator code or an unused backup code.":"Saisissez le code à 6 chiffres ou un code de secours inutilisé.","Enter the 6-digit authenticator code.":"Saisissez le code à 6 chiffres de votre application d’authentification.","Enter the 6-digit code from your authenticator app":"Saisir le code à 6 chiffres de votre application d\'authentification","Enter the 6-digit email verification code.":"Saisissez le code à 6 chiffres reçu par e-mail.","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"Saisir le mot de passe à usage unique basé sur le temps à 6 chiffres ou le code de secours à 8 caractères de votre application d\'authentification.","Enter the complete URL, supports":"Saisir l\'URL complète, prend en charge","Expiration time cannot be earlier than current time":"La date d\'expiration ne peut pas être antérieure à l\'heure actuelle","Enter the Coze agent ID":"Saisir l\'ID de l\'agent Coze","Enter the full URL of your Gotify server":"Saisir l\'URL complète de votre serveur Gotify","Enter the knowledge base ID":"Saisir l\'ID de la base de connaissances","Enter the path before /suno, usually just the domain":"Saisir le chemin avant /suno, généralement juste le domaine","Enter the quota amount in {{currency}}":"Entrez le montant du quota en {{currency}}","Enter the quota amount in tokens":"Saisir le montant du quota en tokens","Enter the verification code":"Saisir le code de vérification","Enter the website domain, such as example.com.":"Saisissez le domaine du site, par exemple example.com.","Export":"Exporter","Export logs":"Exporter les journaux","Exported {{count}} logs":"{{count}} entrées exportées","Enter token counts to preview the estimated cost (excluding group multipliers).":"Saisissez le nombre de tokens pour estimer le coût (hors multiplicateurs de groupe).","Enter URL...":"Saisir l\'URL...","Enter username":"Saisir le nom d\'utilisateur","Enter verification code":"Saisir le code de vérification","Enter webhook secret":"Saisir le secret du webhook","Enter your authenticator code or a backup code":"Saisir votre code d\'authentification ou un code de secours","Enter your email":"Saisir votre e-mail","Enter your redemption code":"Saisir votre code de rachat","Enter your registered email and we will send you a link to reset your password.":"Saisir votre e-mail enregistré et nous vous enverrons un lien pour réinitialiser votre mot de passe.","Enter your username":"Saisir votre nom d\'utilisateur","Enter your username or email":"Saisir votre nom d\'utilisateur ou votre e-mail","Enterprise Account":"Compte d\'entreprise","Enterprise-grade security with comprehensive permission management":"Sécurité de niveau entreprise avec gestion complète des autorisations","Entries configured in Request Header Override still take priority":"Les entrées configurées dans la surcharge des en-têtes restent prioritaires","Entrypoint (space separated)":"Point d\'entrée (séparés par des espaces)","Enum":"Énumération","Enum values":"Valeurs de l\'énumération","Env (JSON object)":"Env (objet JSON)","Environment variables":"Variables d\'environnement","Environment variables (JSON)":"Variables d\'environnement (JSON)","Epay Alipay":"Alipay via Epay","Epay endpoint":"Endpoint Epay","Epay Gateway":"Passerelle Epay","Epay is a payment protocol, not a specific official website. Verify the provider yourself and do not trust random third-party Epay deployments.":"Epay est un protocole de paiement, pas un site officiel précis. Vérifiez vous-même le fournisseur et ne faites pas confiance à des déploiements Epay tiers aléatoires.","Epay merchant ID":"ID marchand Epay","Epay safety reminder":"Rappel de sécurité Epay","Epay secret key":"Clé secrète Epay","Epay WeChat Pay":"WeChat Pay via Epay","Equals":"Égal à","Error":"Erreur","Error Code (optional)":"Code d\'erreur (optionnel)","Error establishing connection":"Erreur lors de l’établissement de la connexion","Error Message":"Message d\'erreur","Error Message (required)":"Message d\'erreur (requis)","Error parsing response data":"Erreur lors de l’analyse des données de réponse","Error Type (optional)":"Type d\'erreur (optionnel)","Estimated cost":"Coût estimé","Estimated quota cost":"Coût de quota estimé","Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.":"Évalue les champs de la réponse d\'informations utilisateur du fournisseur. Les conditions et groupes imbriqués utilisent la logique and/or.","Event":"Événement","Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.":"Chaque nom de groupe du tableau tarifaire peut être utilisé à deux endroits : sur un utilisateur (groupe d’utilisateurs, attribué par les admins) et sur un jeton (groupe de jetons, choisi à la création du jeton). Même ensemble de noms, deux rôles différents.","Failed to check user bindings, please try again later":"Échec de la vérification des liaisons utilisateur, veuillez réessayer plus tard","Every other device will lose access immediately. This device will remain signed in.":"Tous les autres appareils perdront immédiatement l’accès. Cet appareil restera connecté.","Everything configured for this group, in one place.":"Toute la configuration de ce groupe, au même endroit.","Exact":"Exact","Exact Match":"Correspondance exacte","Exact match only and case-sensitive. Prefixes, regex, and * wildcards are not supported.":"Correspondance exacte uniquement, sensible à la casse. Les préfixes, regex et jokers * ne sont pas pris en charge.","Example":"Exemple","Example (all channels):":"Exemple (tous les canaux) :","Failed to copy channel. Please try again later":"Échec de la copie du canal. Veuillez réessayer plus tard","Example (specific channels):":"Exemple (canaux spécifiques) :","Example price":"Prix d\'exemple","Example spec":"Spécification d\'exemple","Failed to count channel types. Please try again later":"Échec du comptage des types de canaux. Veuillez réessayer plus tard","Failed to count channels. Please try again later":"Échec du comptage des canaux. Veuillez réessayer plus tard","Failed to count tags. Please try again later":"Échec du comptage des balises. Veuillez réessayer plus tard","Example:":"Exemple :","Example: users call gpt-4o; upstream receives gpt-4o-all.":"Exemple : l’utilisateur appelle gpt-4o ; le fournisseur reçoit gpt-4o-all.","example.com blocked-site.com":"example.com blocked-site.com","Failed to create default token":"Échec de la création du jeton par défaut","example.com company.com":"example.com company.com","Failed to create order":"Échec de la création de la commande","Excellent":"Excellent","Exchange rate is required":"Le taux de change est requis","Failed to create redemption code, please try again later":"Échec de la création du code d\'échange, veuillez réessayer plus tard","Failed to create the administrator account: {{error}}":"Échec de la création du compte administrateur : {{error}}","Failed to create the Discovery request: {{error}}":"Échec de la création de la requête Discovery : {{error}}","Failed to create the plan product":"Échec de la création du produit du forfait","Exchange rate must be greater than 0":"Le taux de change doit être supérieur à 0","Excludes the first attempt. Counted per group.":"Hors première tentative, compté par groupe.","Execute code in a sandbox during the response":"Exécuter du code dans un bac à sable pendant la réponse","Executor":"Exécuteur","Exhausted":"Épuisé","Existing account will be reused":"Le compte existant sera réutilisé","Existing Models ({{count}})":"Modèles existants ({{count}})","Existing models: select fields to replace their current values with the values on the right. Unselected fields stay unchanged.":"Modèles existants : sélectionnez les champs à remplacer par les valeurs de droite. Les autres restent inchangés.","Existing Passkeys remain tied to the old domain and may stop working. Keep the old domain to preserve access, or confirm only if you have a recovery plan.":"Les clés d’accès existantes restent liées à l’ancien domaine et risquent de ne plus fonctionner. Conservez l’ancien domaine pour maintenir l’accès, ou confirmez uniquement si vous disposez d’un plan de récupération.","Exists":"Existe","Expand":"Développer","Expand All":"Tout développer","Expand panel":"Développer le panneau","Expected a JSON array of group identifiers":"Un tableau JSON d\'identifiants de groupe est attendu","Expected a JSON array.":"Un tableau JSON est attendu.","Experiment with prompts and models in real time.":"Expérimentez avec des prompts et des modèles en temps réel.","Expiration":"Expiration","Expiration Time":"Heure d\'expiration","expired":"expiré","Expired":"Expiré","Expired at":"Expiré le","Expired time cannot be earlier than current time":"L\'heure d\'expiration ne peut pas être antérieure à l\'heure actuelle","Expires":"Expire","Expires {{time}}":"Expire le {{time}}","Expires at":"Expire le","Expires in":"Expire dans","Export snapshot":"Exporter l’instantané","Failed to encode Vertex AI key JSON: {{error}}":"Échec de l\'encodage du JSON de la clé Vertex AI : {{error}}","Failed to export logs":"Échec de l\'exportation des journaux","Expose ratio API":"Exposer l\'API de ratio","Failed to fetch channel. Please try again later":"Échec de la récupération du canal. Veuillez réessayer plus tard","Failed to fetch channels with this tag. Please try again later":"Échec de la récupération des canaux de cette balise. Veuillez réessayer plus tard","Failed to fetch channels. Please try again later":"Échec de la récupération des canaux. Veuillez réessayer plus tard","Exposes the pricing/models catalog in the top navigation.":"Expose le catalogue des prix/modèles dans la navigation supérieure.","Expression":"Expression","Expression - Task pricing":"Expression - Tarification des tâches","Failed to fetch models: {{error}}":"Échec de la récupération des modèles : {{error}}","Expression argument types do not match.":"Les types des arguments de l’expression sont incompatibles.","Failed to fetch Ollama version: {{error}}":"Échec de la récupération de la version d\'Ollama : {{error}}","Expression based":"Basé sur une expression","Failed to fetch reset credit details. Please try again later":"Échec de la récupération des détails des crédits de réinitialisation. Veuillez réessayer plus tard","Failed to fetch tags. Please try again later":"Échec de la récupération des balises. Veuillez réessayer plus tard","Failed to fetch the catalog":"Échec de la récupération du catalogue","Failed to fetch the Discovery configuration: {{error}}":"Échec de la récupération de la configuration Discovery : {{error}}","Failed to fetch the product list":"Échec de la récupération de la liste des produits","Expression billing":"Facturation par expression","Expression compatibility will be checked when saving.":"La compatibilité de l’expression sera vérifiée à l’enregistrement.","Expression editor":"Éditeur d’expression","Failed to fetch usage. Please try again later":"Échec de la récupération de l\'utilisation. Veuillez réessayer plus tard","Expression error":"Erreur d’expression","Expression pricing":"Tarification par expression","Failed to generate default token":"Échec de la génération du jeton par défaut","Extend":"Prolonger","Failed to get the channel information. Please contact the administrator":"Impossible d\'obtenir les informations du canal. Veuillez contacter l\'administrateur","Failed to get the token count":"Échec de l\'obtention du nombre de jetons","Failed to get the user group":"Échec de la récupération du groupe de l\'utilisateur","Failed to get token from {{provider}}, please check settings":"Échec de l’obtention du jeton auprès de {{provider}}, veuillez vérifier les paramètres","Failed to get user information":"Échec de la récupération des informations utilisateur","Extend deployment":"Prolonger le déploiement","Extend failed":"Échec de la prolongation","Extended successfully":"Prolongé avec succès","Failed to initialize the system: {{error}}":"Échec de l’initialisation du système : {{error}}","External Device":"Appareil externe","External link for users to purchase quota":"Lien externe permettant aux utilisateurs d\'acheter du quota","External operations":"Opérations externes","External operations mode":"Mode opérations externes","External Speed Test":"Test de vitesse externe","Extra":"Supplémentaire","Extra destinations beyond the channel API address. The channel address remains accessible.":"Destinations autorisées en plus de l’adresse API du canal, qui reste accessible.","Extra Notes (Optional)":"Notes supplémentaires (facultatif)","Extra visible":"Visible en plus","Extra visible to {{group}}":"Visible en plus pour {{group}}","extras":"suppléments","Factory":"Intégré","Factory and custom plugin behavior":"Comportement des plugins intégrés et personnalisés","Factory and custom plugins all stop serving immediately. In-flight tasks will be handled by timeout cleanup.":"Les plugins d’usine et personnalisés cessent immédiatement de servir. Les tâches en cours seront traitées par le nettoyage des délais d’attente.","Factory plugins cannot be deleted or disabled individually. A custom version can override them; deleting or disabling that version restores the factory plugin. Third-party-only platforms become unavailable when their plugin is deleted or disabled.":"Les plugins intégrés ne peuvent pas être supprimés ni désactivés individuellement. Une version personnalisée peut les remplacer ; sa suppression ou désactivation restaure le plugin intégré. Une plateforme tierce devient indisponible si son plugin est supprimé ou désactivé.","Fail Reason":"Raison de l\'échec","Fail Reason Details":"Détails de la raison de l\'échec","failed":"échoué","Failed":"Échec","Failed to {{action}} user":"Échec de l\'action {{action}} sur l\'utilisateur","Failed to adjust quota":"Échec de l\'ajustement du quota","Failed to apply overwrite.":"Échec de l\'application de l\'écrasement.","Failed to apply vendor changes":"Échec de l’application des modifications","Failed to batch delete redemption codes":"Échec de la suppression des codes d’échange en lot","Failed to bind email":"Échec de la liaison de l\'e-mail","Failed to change password":"Échec du changement de mot de passe","Failed to check for updates":"Échec de la vérification des mises à jour","Failed to clean logs":"Échec du nettoyage des journaux","Failed to complete order":"Échec de la finalisation de la commande","Failed to complete Passkey login":"Impossible de terminer la connexion Passkey","Failed to confirm compliance":"Échec de la confirmation de conformité","Failed to parse appended keys: {{error}}":"Échec de l\'analyse des clés ajoutées : {{error}}","Failed to parse credentials. Please check the channel configuration":"Échec de l\'analyse des identifiants. Veuillez vérifier la configuration du canal","Failed to contact GitHub releases API":"Impossible de contacter l\'API GitHub Releases","Failed to copy":"Échec de la copie","Failed to parse the Discovery configuration: {{error}}":"Échec de l’analyse de la configuration Discovery : {{error}}","Failed to parse tool price \\"{{name}}\\": {{error}}":"Échec de l\'analyse du prix de l\'outil « {{name}} » : {{error}}","Failed to parse tool prices: {{error}}":"Échec de l\'analyse des prix des outils : {{error}}","Failed to copy channel":"Échec de la copie du canal","Failed to copy keys":"Échec de la copie des clés","Failed to copy model names":"Échec de la copie des noms de modèles","Failed to copy to clipboard":"Échec de la copie dans le presse-papiers","Failed to query channels":"Échec de la requête des canaux","Failed to query logs":"Échec de la requête des journaux","Failed to query statistics":"Échec de la requête des statistiques","Failed to query the upstream task status":"Impossible d\'obtenir l\'état de la tâche en amont","Failed to create account":"Échec de la création du compte","Failed to create API key":"Échec de la création de la clé API","Failed to refresh credentials. Please try again later":"Échec de l\'actualisation des identifiants. Veuillez réessayer plus tard","Failed to create channel":"Échec de la création du canal","Failed to create deployment":"Échec de la création du déploiement","Failed to create provider":"Échec de la création du fournisseur","Failed to create redemption code":"Échec de la création du code d\'échange","Failed to create user":"Échec de la création de l\'utilisateur","Failed to delete {{count}} model(s)":"Échec de la suppression de {{count}} modèle(s)","Failed to delete {{count}} redemption codes":"Échec de la suppression de {{count}} codes d’échange","Failed to delete account":"Échec de la suppression du compte","Failed to reset usage. Please try again later":"Échec de la réinitialisation de l\'utilisation. Veuillez réessayer plus tard","Failed to delete API key":"Échec de la suppression de la clé API","Failed to delete API keys":"Échec de la suppression des Clés API","Failed to delete channel":"Échec de la suppression du canal","Failed to delete disabled channels":"Échec de la suppression des canaux désactivés","Failed to save backup codes":"Échec de l’enregistrement des codes de secours","Failed to save configuration":"Échec de l\'enregistrement de la configuration","Failed to delete failed models":"Échec de la suppression des modèles en échec","Failed to delete group":"Échec de la suppression du groupe","Failed to save the demo site mode setting: {{error}}":"Échec de l’enregistrement du mode site de démonstration : {{error}}","Failed to save the self-use mode setting: {{error}}":"Échec de l’enregistrement du mode usage personnel : {{error}}","Failed to delete invalid redemption codes":"Échec de la suppression des codes d\'échange invalides","Failed to delete model":"Échec de la suppression du modèle","Failed to delete provider":"Échec de la suppression du fournisseur","Failed to search tokens":"Échec de la recherche des jetons","Failed to search top-up records":"Échec de la recherche des recharges","Failed to delete redemption code":"Échec de la suppression du code d\'échange","Failed to delete user":"Échec de la suppression de l\'utilisateur","Failed to delete vendor":"Échec de la suppression du fournisseur","Failed to disable {{count}} model(s)":"Échec de la désactivation de {{count}} modèle(s)","Failed to disable 2FA":"Échec de la désactivation de la 2FA","Failed to set the audio completion ratio: {{error}}":"Échec de la définition du ratio de complétion audio : {{error}}","Failed to set the audio ratio: {{error}}":"Échec de la définition du ratio audio : {{error}}","Failed to set the cache creation ratio: {{error}}":"Échec de la définition du ratio de création de cache : {{error}}","Failed to set the image ratio: {{error}}":"Échec de la définition du ratio d\'image : {{error}}","Failed to disable channels":"Échec de la désactivation des canaux","Failed to disable model":"Échec de la désactivation du modèle","Failed to disable tag channels":"Échec de la désactivation des canaux de tags","Failed to discover OIDC endpoints":"Échec de la découverte des points de terminaison OIDC","Failed to enable {{count}} model(s)":"Échec de l\'activation de {{count}} modèle(s)","Failed to enable 2FA":"Échec de l\'activation de 2FA","Failed to enable channels":"Échec de l\'activation des canaux","Failed to enable model":"Échec de l\'activation du modèle","Failed to enable tag channels":"Échec de l\'activation des canaux de tags","Failed to fetch channel key":"Échec de la récupération de la clé du canal","Failed to start payment":"Impossible de lancer le paiement","Failed to fetch checkin status":"Échec de la récupération du statut d\'enregistrement","Failed to fetch deployment details":"Impossible de récupérer les détails du déploiement","Failed to fetch models":"Échec de la récupération des modèles","Failed to fetch OIDC configuration. Please check the URL and network status":"Échec de la récupération de la configuration OIDC. Veuillez vérifier l\'URL et le statut du réseau","Failed to fetch reset credit details":"Échec de la récupération des détails des crédits de réinitialisation","Failed to fetch upstream prices":"Échec de la récupération des prix amont","Failed to fetch upstream ratios":"Échec de la récupération des ratios en amont","Failed to fetch usage":"Échec de la récupération de l\'utilisation","Failed to fetch user information":"Échec de la récupération des informations utilisateur","Failed to fix abilities":"Échec de la réparation de la cohérence des canaux","Failed to generate token":"Échec de la génération du jeton","Failed to hide model from model square":"Impossible de masquer le modèle dans la galerie","Failed to initialize OAuth":"Échec de l\'initialisation d\'OAuth","Failed to initialize system":"Échec de l\'initialisation du système","Failed to load":"Échec du chargement","Failed to load access tokens":"Impossible de charger les jetons d’accès","Failed to load API keys":"Échec du chargement des Clés API","Failed to load artifacts":"Échec du chargement des artefacts","Failed to load audit records":"Échec du chargement des audits","Failed to load billing history":"Échec du chargement de l\'historique de facturation","Failed to load channel":"Échec du chargement du canal","Failed to load enabled models":"Échec du chargement des modèles activés","Failed to load home page content":"Échec du chargement du contenu de la page d\'accueil","Failed to load image":"Échec du chargement de l\'image","Failed to load key status":"Échec du chargement du statut des clés","Failed to load login sessions":"Impossible de charger les sessions de connexion","Failed to load logs":"Échec du chargement des journaux","Failed to load model":"Échec du chargement du modèle","Failed to load model pricing":"Échec du chargement des tarifs","Failed to load models":"Impossible de charger les modèles","Failed to load Passkey status":"Échec du chargement du statut Passkey","Failed to load playground groups":"Échec du chargement des groupes du playground","Failed to load playground models":"Échec du chargement des modèles du playground","FAQ #{{index}} answer cannot exceed 1000 characters":"La réponse de la FAQ n° {{index}} ne peut pas dépasser 1000 caractères","FAQ #{{index}} is missing the answer field":"La FAQ n° {{index}} n\'a pas de champ de réponse","FAQ #{{index}} is missing the question field":"La FAQ n° {{index}} n\'a pas de champ de question","FAQ #{{index}} question cannot exceed 200 characters":"La question de la FAQ n° {{index}} ne peut pas dépasser 200 caractères","Failed to load plugins":"Échec du chargement des extensions","FAQ cannot exceed 100 entries":"La FAQ ne peut pas dépasser 100 entrées","Failed to load profile":"Échec du chargement du profil","Failed to load redemption codes":"Échec du chargement des codes d\'échange","Failed to load settings":"Échec du chargement des paramètres","Failed to load setup data":"Échec du chargement des données de configuration","Failed to load setup status":"Échec du chargement de l\'état de configuration","Failed to load SGLang status":"Échec du chargement de l’état de SGLang","Failed to load tag data":"Échec du chargement des données de tags","Failed to load users":"Échec du chargement des utilisateurs","Failed to load vendor":"Impossible de charger le fournisseur","Failed to load vendors":"Échec du chargement des fournisseurs","Failed to load vLLM status":"Échec du chargement de l’état vLLM","Failed to parse group items":"Échec de l\'analyse des éléments de groupe","Failed to parse JSON file: {{name}}":"Échec de l\'analyse du fichier JSON : {{name}}","Failed to prepare pricing conversion":"Échec de la préparation de la conversion tarifaire","Fetched successfully":"Récupéré avec succès","Failed to preview metadata":"Échec de l’aperçu des métadonnées","Failed to preview vendor changes":"Impossible de prévisualiser les modifications","Failed to query balance":"Échec de la requête de solde","Failed to refresh cache stats":"Échec de l\'actualisation des statistiques de cache","Failed to refresh credential":"Échec de l’actualisation des identifiants","Failed to regenerate backup codes":"Échec de la régénération des codes de sauvegarde","Failed to register Passkey":"Échec de l\'enregistrement du Passkey","Failed to remove Passkey":"Échec de la suppression de la Passkey","Failed to repair channel consistency":"Échec de la réparation de la cohérence des canaux","Failed to reset 2FA":"Échec de la réinitialisation de la 2FA","Failed to reset model ratios":"Échec de la réinitialisation des ratios du modèle","Failed to reset Passkey":"Échec de la réinitialisation de la Passkey","Failed to reset usage":"Échec de la réinitialisation de l’utilisation","Failed to revoke token":"Échec de la révocation du jeton","Failed to save":"Échec de la sauvegarde","Failed to save announcements":"Échec de la sauvegarde des annonces","Failed to save API info":"Échec de l\'enregistrement des informations API","Failed to save FAQ":"Échec de la sauvegarde de la FAQ","Failed to save model pricing":"Échec de l’enregistrement des tarifs","Failed to save Uptime Kuma groups":"Échec de la sauvegarde des groupes Uptime Kuma","Failed to search API keys":"Échec de la recherche des Clés API","Failed to search redemption codes":"Échec de la recherche des codes d\'échange","Failed to search users":"Échec de la recherche des utilisateurs","Failed to send reset email":"Échec de l\'envoi de l\'e-mail de réinitialisation","Failed to send verification code":"Échec de l\'envoi du code de vérification","Failed to send verification email":"Échec de l\'envoi de l\'e-mail de vérification","Failed to set tag":"Échec de la définition de l\'étiquette","Failed to setup 2FA":"Échec de la configuration de 2FA","Failed to show model in model square":"Impossible d’afficher le modèle dans la galerie","Failed to sign out other sessions":"Impossible de déconnecter les autres sessions","Failed to sign out session":"Impossible de déconnecter la session","Failed to start {{provider}} login":"Échec du démarrage de la connexion {{provider}}","Failed to start Discord login":"Échec du démarrage de la connexion Discord","Failed to start GitHub login":"Échec du démarrage de la connexion GitHub","Failed to start LinuxDO login":"Échec du démarrage de la connexion LinuxDO","Failed to start OIDC login":"Échec du démarrage de la connexion OIDC","Failed to start Passkey login":"Impossible de démarrer la connexion Passkey","Failed to start Passkey registration":"Échec du démarrage de l\'enregistrement de la Passkey","Failed to start Telegram binding":"Impossible de démarrer l’association Telegram","Failed to start testing all channels":"Échec du démarrage du test de tous les canaux","Failed to start verification":"Impossible de démarrer la vérification","Failed to sync prices":"Échec de la synchronisation des prix","Failed to sync ratios":"Échec de la synchronisation des ratios","Failed to test all channels":"Échec du test de tous les canaux","Failed to test channel":"Échec du test du canal","Failed to update all balances":"Échec de la mise à jour de tous les soldes","Failed to update API key":"Échec de la mise à jour de la Clé API","Failed to update API key status":"Échec de la mise à jour du statut de la Clé API","Failed to update balance":"Échec de la mise à jour du solde","Failed to update channel":"Échec de la mise à jour du canal","Failed to update models":"Échec de la mise à jour des modèles","Failed to update profile":"Échec de la mise à jour du profil","Failed to update provider":"Échec de la mise à jour du fournisseur","Failed to update redemption code":"Échec de la mise à jour du code de rachat","Failed to update redemption code status":"Échec de la mise à jour du statut du code de rachat","Failed to update setting":"Échec de la mise à jour du paramètre","Failed to update settings":"Échec de la mise à jour des paramètres","Failed to update tag":"Échec de la mise à jour de l\'étiquette","Failed to update user":"Échec de la mise à jour de l\'utilisateur","Failure keywords":"Mots-clés d\'échec","Failure reason":"Motif de l’échec","Fair":"Correct","Fallback":"Repli","Fallback base URL":"Base URL de fallback","Fallback for remaining models":"Repli pour les modèles restants","Fallback must be last":"Repli en dernier","Fallback route":"Route de repli","Fallback tier":"Palier de repli","FAQ":"FAQ","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ ajouté. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ supprimé. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","FAQ saved successfully":"FAQ enregistré avec succès","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ mis à jour. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","FastGPT":"FastGPT","Feature in development":"Fonctionnalité en développement","Fee":"Frais","Fee Amount":"Montant des frais","Fetch":"Récupérer","Fetch available models for:":"Récupérer les modèles disponibles pour :","Fetch available models from upstream":"Récupérer les modèles disponibles en amont","Fetch from Upstream":"Récupérer depuis l\'amont","Fetch mode":"Mode de récupération","Fetch Models":"Récupérer les modèles","Fetched {{count}} model(s) from upstream":"{{count}} modèle(s) récupéré(s) depuis l\'amont","Fetched {{count}} models":"{{count}} modèles récupérés","Fetched in your browser and placed in the source field below for review. GitHub and gist page URLs are rewritten to their raw URL automatically.":"Récupéré par votre navigateur et placé dans le champ de code ci-dessous pour examen. Les URL de pages GitHub et gist sont automatiquement réécrites en URL raw.","Fetching models...":"Récupération des modèles…","Fetching plugin source...":"Récupération du code du plugin…","Fetching prefill groups...":"Récupération des groupes de préremplissage...","Fetching upstream prices...":"Récupération des prix amont...","Fetching upstream ratios...":"Récupération des ratios amont...","Fetching...":"Récupération…","field":"champ","Field":"Champ","Field change details were not recorded":"Le détail des champs modifiés n’a pas été enregistré","Field Mapping":"Mappage de champs","Field passthrough controls":"Contrôles de transmission des champs","Field Path":"Chemin du champ","Fields":"Champs","File":"Fichier","File could not be verified":"Fichier non vérifié","File integrity verified":"Intégrité du fichier vérifiée","File Search":"Recherche de fichiers","File verification":"Vérification du fichier","Files to Retain":"Fichiers à conserver","Fill a CLI template or add a blank rule.":"Remplissez un modèle CLI ou ajoutez une règle vide.","Fill All Models":"Remplir tous les modèles","Fill Codex CLI / Claude CLI Templates":"Remplir les modèles Codex CLI / Claude CLI","Fill entire column":"Remplir toute la colonne","Fill example (all channels)":"Remplir l\'exemple (tous les canaux)","Fill example (specific channels)":"Remplir l\'exemple (canaux spécifiques)","Fill in":"Remplir","Fill in both Merchant ID and API Private Key before creating.":"Renseignez l’ID marchand et la clé privée API avant de créer.","Fill in the credentials above to begin.":"Renseignez les identifiants ci-dessus pour commencer.","Fill in the following info to create a new subscription plan":"Remplissez les informations suivantes pour créer un nouveau plan d\'abonnement","Fill in this website":"Utiliser ce site","Fill Related Models":"Remplir les modèles associés","Fill Template":"Remplir le modèle","Fill template: level and active":"Insérer le modèle : niveau et état actif","Fill template: level message":"Insérer le modèle : message de niveau","Fill template: organization message":"Insérer le modèle : message d\'organisation","Fill template: organization or role":"Insérer le modèle : organisation ou rôle","Fill Templates":"Remplir les modèles","Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.":"Saisissez la valeur model complète du corps de requête client, par exemple gpt-4o ou gemini-2.5-flash. Séparez plusieurs modèles par des virgules.","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"Remplit thoughtSignature uniquement pour les canaux Gemini/Vertex utilisant le format OpenAI","Filled {{count}} model(s)":"{{count}} modèle(s) rempli(s)","Filled {{count}} related model(s)":"{{count}} modèle(s) associé(s) rempli(s)","Filter":"Filtre","Filter by API key...":"Filtrer par clé API...","Filter by channel ID":"Filtrer par ID de canal","Filter by group":"Filtrer par groupe","Filter by MjProxy task ID":"Filtrer par ID de tâche MjProxy","Filter by model name":"Filtrer par nom de modèle","Filter by model name...":"Filtrer par nom du modèle...","Filter by model...":"Filtrer par modèle...","Filter by name or ID...":"Filtrer par nom ou ID...","Filter by name, ID, or key...":"Filtrer par nom, ID ou clé...","Filter by name...":"Filtrer par nom...","Filter by node":"Filtrer par nœud","Filter by price field":"Filtrer par champ de prix","Filter by ratio type":"Filtrer par type de ratio","Filter by request ID":"Filtrer par ID de requête","Filter by task ID":"Filtrer par ID de tâche","Filter by token name":"Filtrer par nom de jeton","Filter by username":"Filtrer par nom d\'utilisateur","Filter by username, name or email...":"Filtrer par nom d\'utilisateur, nom ou e-mail...","Filter Dashboard Models":"Filtrer les modèles du tableau de bord","Filter mappings":"Filtrer les correspondances","Filter models by provider, group, type, endpoint, and tags.":"Filtrer les modèles par fournisseur, groupe, type, endpoint et tags.","Filter models by type, endpoint, vendor, group and tags":"Filtrer les modèles par type, point d\'accès, fournisseur, groupe et tags","Filter models...":"Filtrer les modèles...","Filter plugins...":"Filtrer les plugins...","Filter the model analytics view by time range and user.":"Filtrez la vue d’analyse des modèles par période et utilisateur.","Filter the traffic flow view by time range and user.":"Filtrez la vue du flux de trafic par plage horaire et utilisateur.","Filter...":"Filtrer...","Filters":"Filtres","Filters active":"Filtres actifs","Final Consumed":"Consommation finale","Final cost = base × multiplier when conditions match":"Coût final = base × multiplicateur lorsque les conditions correspondent","Final price multiplier (0.95 = 5% discount":"Multiplicateur de prix final (0.95 = 5% de réduction","Finance":"Finance","Find":"Rechercher","Find the billing group.":"Trouver le groupe de facturation.","Find the ratio.":"Trouver le taux.","Finish reordering":"Terminer le tri","Finish Time":"Heure de fin","Finished requests":"Requêtes terminées","First API request":"Première requête API","First token":"1er token","First/Last Frame to Video":"Première/Dernière image vers vidéo","Fix Abilities":"Réparer la cohérence des canaux","Fix order":"Corriger l’ordre","Fix the Request Header Override JSON first":"Corrigez d\'abord le JSON de surcharge des en-têtes","Fuzzy search keywords must be at least 2 characters long":"Les mots-clés de recherche approximative doivent comporter au moins 2 caractères","Fixed":"Corrections","Fixed abilities: {{success}} succeeded, {{fails}} failed":"Cohérence des canaux réparée : {{success}} réussie(s), {{fails}} échouée(s)","Fixed channel constraint":"Contrainte de canal fixe","Fixed fee per request":"Frais fixes par requête","Fixed price":"Prix fixe","Fixed price (USD)":"Prix fixe (USD)","Fixed request price":"Prix fixe par requête","Flexible integration":"Intégration flexible","Floating":"Flottant","Flow":"Flux","Flow Filters":"Filtres de flux","Flow width metric":"Indicateur de largeur du flux","FluentRead extension not detected. Please ensure it is installed and active.":"Extension FluentRead non détectée. Veuillez vous assurer qu\'elle est installée et activée.","Flush interval (minutes)":"Intervalle d’écriture (minutes)","Follow the guided steps to prepare your workspace before the first login.":"Suivez les étapes guidées pour préparer votre espace de travail avant la première connexion.","Follow user group":"Groupe utilisateur","Font":"Police","Footer":"Pied de page","Footer text displayed at the bottom of pages":"Texte de pied de page affiché en bas des pages","footer.columns.about.links.aboutProject":"À propos du projet","footer.columns.about.links.contact":"Contactez-nous","footer.columns.about.links.features":"Fonctionnalités","footer.columns.about.title":"À propos de nous","footer.columns.docs.links.apiDocs":"Documentation API","footer.columns.docs.links.installation":"Guide d\'installation","footer.columns.docs.links.quickStart":"Démarrage rapide","footer.columns.docs.title":"Documentation","footer.columns.related.links.midjourney":"MjProxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"One API","footer.columns.related.title":"Projets liés","footer.defaultCopyright":"Tous droits réservés.","footer.newapi.projectAttributionSuffix":"Tous droits réservés. Conçu et développé par les contributeurs du projet.","For advanced custom channels this applies only to /v1/responses routes without protocol conversion.":"Pour les canaux personnalisés avancés, ceci ne s’applique qu’aux routes /v1/responses sans conversion de protocole.","GitHub ID is empty!":"L’ID GitHub est vide !","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"Pour les canaux ajoutés après le 10 mai 2025, pas besoin de supprimer \\".\\" des noms de modèles lors du déploiement","For private deployments, format: https://fastgpt.run/api/openapi":"Pour les déploiements privés, format : https://fastgpt.run/api/openapi","For this channel, map the model name in client requests to the model name sent upstream.":"Pour ce canal, associez le nom du modèle demandé par le client au nom du modèle envoyé au fournisseur en amont.","For this website, you can enter: {{domain}}":"Pour ce site, vous pouvez saisir : {{domain}}","Force a syntactically valid JSON response":"Imposer une réponse JSON syntaxiquement valide","Force AUTH LOGIN":"Forcer AUTH LOGIN","Force Format":"Forcer le format","Force format response to OpenAI standard (OpenAI channel only)":"Forcer la réponse au format standard OpenAI (canal OpenAI uniquement)","Force JSON object or schema-conforming output":"Forcer une sortie JSON ou conforme à un schéma","Force operation":"Forcer l’opération","Force SMTP authentication using AUTH LOGIN method":"Forcer l\'authentification SMTP en utilisant la méthode AUTH LOGIN","Force-disabled two-factor authentication for the user":"Authentification à deux facteurs désactivée de force pour l\'utilisateur","Forest Whisper":"Murmure forestier","Forgot password":"Mot de passe oublié","Forgot password?":"Mot de passe oublié ?","Form reset to saved values":"Formulaire réinitialisé aux valeurs enregistrées","Format":"Format","Format conversion is unavailable; the client must use a format the upstream supports":"La conversion de format est indisponible ; le client doit utiliser un format pris en charge par l\'amont","Format JSON":"Formater JSON","Format:":"Format :","Format: Access Key ID|Secret Access Key":"Format : Access Key ID|Secret Access Key","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"Format : AccessKey|SecretKey (ou simplement ApiKey si l\'amont est New API)","Format: Ak|Sk|Region":"Format : Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"Format : APIKey-AppId, par ex. fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"Format : APIKey|SecretKey","Format: APPID|APISecret|APIKey":"Format : APPID|APISecret|APIKey","Format: TokenHub API Key, or legacy AppId|SecretId|SecretKey":"Format : TokenHub API Key, ou l\'ancien format AppId|SecretId|SecretKey","Got it":"Compris","Gotify server URL cannot be empty":"L’URL du serveur Gotify ne peut pas être vide","Gotify token cannot be empty":"Le jeton Gotify ne peut pas être vide","Forward requests directly to upstream providers without any post-processing.":"Transférer les requêtes directement aux fournisseurs amont sans aucun post-traitement.","Forwarding Routes":"Routes de transfert","Frames per second":"Images par seconde","Free":"Libre","Free: {{free}} / Total: {{total}}":"Disponible : {{free}} / Total : {{total}}","Frequency Penalty":"Pénalité de fréquence","Friendly name to identify this channel":"Nom convivial pour identifier ce canal","From Address":"De l\'adresse","From IO.NET deployment":"Depuis le déploiement IO.NET","From marketplace index":"D’après l’index du catalogue","From model redirect, not yet added to models list":"Depuis la redirection du modèle, pas encore ajouté à la liste des modèles","Full API Key":"Clé API complète","Full Base URL (supports":"URL de base complète (prend en charge","Group #{{index}} category name cannot exceed 50 characters":"Le nom de catégorie du groupe n° {{index}} ne peut pas dépasser 50 caractères","Group #{{index}} category name duplicates another group":"Le nom de catégorie du groupe n° {{index}} est en double avec un autre groupe","Group #{{index}} contains disallowed content":"Le groupe n° {{index}} contient du contenu non autorisé","Group #{{index}} description cannot exceed 200 characters":"La description du groupe n° {{index}} ne peut pas dépasser 200 caractères","Group #{{index}} has a URL that cannot be parsed: {{error}}":"L\'URL du groupe n° {{index}} ne peut pas être analysée : {{error}}","Group #{{index}} has an invalid URL format":"Le groupe n° {{index}} a un format d\'URL invalide","Group #{{index}} is missing the category name field":"Le groupe n° {{index}} n\'a pas de champ de nom de catégorie","Group #{{index}} is missing the slug field":"Le groupe n° {{index}} n\'a pas de champ slug","Group #{{index}} is missing the URL field":"Le groupe n° {{index}} n\'a pas de champ URL","Group #{{index}} slug can only contain letters, numbers, underscores and hyphens":"Le slug du groupe n° {{index}} ne peut contenir que des lettres, des chiffres, des traits de soulignement et des tirets","Group #{{index}} slug cannot exceed 100 characters":"Le slug du groupe n° {{index}} ne peut pas dépasser 100 caractères","Group #{{index}} URL cannot exceed 500 characters":"L\'URL du groupe n° {{index}} ne peut pas dépasser 500 caractères","Full Code":"Code complet","Full input length":"Longueur complète de l’entrée","Full input length override":"Longueur totale du contexte d’entrée","Full JSON":"JSON complet","Full layout":"Disposition complète","Full source":"Code source complet","Full upstream catalog":"Catalogue amont complet","Full width":"Pleine largeur","Function calling":"Appel de fonction","Functions":"Fonctions","Gateways":"Passerelles","Group name already exists":"Le nom du groupe existe déjà","Group name and type cannot be empty":"Le nom et le type du groupe ne peuvent pas être vides","GC Count":"Nombre de GC","GC executed":"GC exécuté","GC execution failed":"Échec de l\'exécution du GC","Gemini":"Gemini","Gemini and OpenAI audio prices differ for this model. Use separate billing model names to convert them.":"Les tarifs audio Gemini et OpenAI diffèrent pour ce modèle. Utilisez des noms de facturation distincts pour les convertir.","Gemini Generate Content to OpenAI Chat":"Gemini Generate Content vers OpenAI Chat","Gemini Generate Content to OpenAI Responses":"Gemini Generate Content vers OpenAI Responses","Gemini Image 4K":"Gemini Image 4K","Gemini only":"Gemini uniquement","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"Gemini continuera à détecter automatiquement le mode de pensée même avec l\'adaptateur désactivé. Activez ceci uniquement lorsque vous avez besoin d\'un contrôle plus fin sur la tarification et le budget.","General":"Général","General Settings":"Paramètres généraux","Generate":"Générer","Generate Lyrics":"Générer des paroles","Generate Midjourney images through MjProxy":"Générer des images Midjourney via MjProxy","Generate Midjourney images through MjProxyPlus":"Générer des images Midjourney via MjProxyPlus","Generate Music":"Générer de la musique","Generate music and lyrics through SunoAPI":"Générer de la musique et des paroles via SunoAPI","Generate new backup codes for account recovery":"Générer de nouveaux codes de secours pour la récupération du compte","Generate New Codes":"Générer de nouveaux codes","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"Générez des jetons depuis la page Jetons ; vous pouvez les restreindre par modèle, groupe, IP et limites de débit.","Generated image":"Image générée","Generating new codes will invalidate all existing backup codes.":"La génération de nouveaux codes invalidera tous les codes de sauvegarde existants.","Generating...":"Génération...","Generation quality preset":"Préréglage de qualité de génération","Generation was interrupted":"La génération a été interrompue","Generic cache":"Cache générique","Get advice":"Obtenir des conseils","Get one here":"Obtenir ici","Get started":"Commencer","Get Started":"Commencer","GitHub":"GitHub","GitHub rate limit reached. Try again later.":"Limite de requêtes GitHub atteinte. Réessayez plus tard.","Give the group a recognizable name and optional description.":"Donnez au groupe un nom reconnaissable et une description facultative.","Give this group a recognizable name.":"Donnez un nom reconnaissable à ce groupe.","Header override must be valid JSON format":"La substitution des en-têtes doit être au format JSON valide","Global and channel settings":"Paramètres globaux et du canal","Global configuration and administrative tools.":"Configuration globale et outils d\'administration.","Global Coverage":"Couverture mondiale","Global default":"Valeur globale par défaut","Global default: {{mode}}":"Valeur globale : {{mode}}","Global Model Configuration":"Configuration globale du modèle","Global throughput":"Débit global","Go Back":"Retour","Go back and edit":"Retour et modifier","Go to Dashboard":"Aller au tableau de bord","Go to first page":"Aller à la première page","Go to GitHub":"Voir sur GitHub","Go to home":"Retour à l\'accueil","Go to io.net API Keys":"Accéder aux clés API io.net","Go to last page":"Aller à la dernière page","Go to next page":"Aller à la page suivante","Go to page {{page}}":"Aller à la page {{page}}","Go to previous page":"Aller à la page précédente","Go to settings":"Aller aux paramètres","Go to Settings":"Aller aux paramètres","Good":"Bon","Gotify Application Token":"Jeton d\'application Gotify","Gotify Documentation":"Documentation Gotify","Gotify Server URL":"URL du serveur Gotify","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus, etc.","GPU count":"Nombre de GPU","Granted at":"Accordé le","Greater than":"Supérieur à","Greater Than":"Supérieur à","Greater than or equal":"Supérieur ou égal","Greater Than or Equal":"Supérieur ou égal","Grok":"Grok","Grok Settings":"Paramètres Grok","Group":"Groupe","Group {{path}}":"Groupe {{path}}","Group & Quota":"Groupe et Quota","Group added. Click \\"Save Settings\\" to apply.":"Groupe ajouté. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Group channels by tag for batch operations":"Regrouper les canaux par étiquette pour les opérations par lots","Group config overrides global limits, shares the same period":"La configuration du groupe annule les limites globales et partage la même période","Group deleted. Click \\"Save Settings\\" to apply.":"Groupe supprimé. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Group description":"Description du groupe","Group details":"Détails du groupe","Group identifier":"Identifiant du groupe","Group is required":"Le groupe est requis","Group name":"Nom du groupe","Group Name":"Nom du groupe","Group name cannot be changed when editing.":"Le nom du groupe ne peut pas être modifié lors de la modification.","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"Les prix par groupe ne peuvent pas être détaillés car cette expression n\'est pas une expression tarifaire par paliers standard.","Group Pricing":"Tarification des groupes","Group pricing usage guide":"Guide d\'utilisation des groupes tarifaires","group ratio":"ratio de groupe","Group Ratio":"Ratio de groupe","Group ratios":"Ratios de groupe","Group settings":"Paramètres des groupes","Group updated. Click \\"Save Settings\\" to apply.":"Groupe mis à jour. Cliquez sur \\"Enregistrer les paramètres\\" pour appliquer.","Group visibility":"Visibilité des groupes","Group-based rate limits":"Limites de débit basées sur le groupe","Group:":"Groupe :","Group: {{ratio}}x":"Groupe : {{ratio}}x","Grouped monitor status from Uptime Kuma":"État des moniteurs groupés depuis Uptime Kuma","Groups":"Groupes","Groups *":"Groupes *","Groups that users can select when creating API keys.":"Groupes que les utilisateurs peuvent sélectionner lors de la création de clés API.","Growth":"Croissance","Guardrails":"Garde-fous","Guest":"Invité","h":"h","Haiku Model":"Modèle Haiku","Hang tight while we finish connecting your account.":"Patientez pendant que nous terminons la connexion de votre compte.","Hang tight while we securely link this account to your profile.":"Patientez pendant que nous lions en toute sécurité ce compte à votre profil.","Hardware":"Matériel","Hardware type":"Type de matériel","Has been disabled":"Désactivé avec succès","Has been enabled":"Activé avec succès","Has been invalidated":"Invalidé avec succès","Have a Code?":"Vous avez un code ?","Header":"En-tête","header instead.":".","Header Name":"Nom de l’en-tête","Header navigation":"Navigation d\'en-tête","Header Override":"Remplacement d\'en-tête","Header Passthrough (X-Request-Id)":"Passthrough en-tête (X-Request-Id)","Header Value (supports string or JSON mapping)":"Valeur de l\'en-tête (chaîne ou mappage JSON)","header. Anthropic-formatted endpoints accept the":". Les points de terminaison au format Anthropic acceptent à la place","Health":"Santé","Health check timeout threshold (seconds)":"Seuil de durée des contrôles (secondes)","Healthy":"Normal","Hidden":"Masqué","Hidden — verify to reveal":"Masqué — vérifiez pour révéler","Hidden {{count}} models from model square":"{{count}} modèles masqués dans la galerie","Hidden from {{group}}":"Masqué pour {{group}}","Hidden from catalog":"Masqué du catalogue","Hidden from the model square by metadata policy.":"Masqué dans le catalogue par la politique de métadonnées.","Hide":"Masquer","Hide API key":"Masquer la clé API","Hide from catalog":"Masquer du catalogue","Hide from model square":"Masquer dans la galerie","Hide redirect panel":"Masquer le panneau de redirection","ID is empty":"L\'ID est vide","ID is empty!":"L’ID est vide !","Hide selected models from model square":"Masquer la sélection dans la galerie","Hide sensitive data":"Masquer les données sensibles","Hide setup guide":"Masquer le guide de configuration","High Performance":"Hautes performances","High-risk operation confirmation":"Confirmation d\'opération à haut risque","High-risk status code retry confirmation text":"J\'ai compris les risques de facturation multiple et de panne, et je confirme l\'activation","High-risk status code retry input mismatch":"Le texte saisi ne correspond pas au texte requis.","High-risk status code retry input placeholder":"Saisissez exactement le texte ci-dessus","High-risk status code retry risk check 1":"J\'ai lu et compris tous les avertissements ci-dessus, y compris les conséquences destructrices d\'une relance forcée pour les codes 504 et 524.","High-risk status code retry risk check 2":"J\'ai contacté le fournisseur en amont et confirmé que le délai d\'attente actuel provient d\'un goulot d\'étranglement de son service qu\'il ne peut pas résoudre pour le moment ; la relance forcée n\'est donc qu\'un compromis.","High-risk status code retry risk check 3":"J\'accepte volontairement tous les risques de facturation double ou multiple et je ne déposerai aucune issue ni réclamation dans le dépôt de ce projet au sujet d\'anomalies de facturation causées par ces relances.","High-risk status code retry risk check 4":"J\'accepte volontairement les risques pour la stabilité du système, notamment les délais d\'attente sévères côté client et les pannes possibles du service, et j\'assume toute accumulation de requêtes ou indisponibilité qui en résulterait.","High-risk status code retry risk disclaimer":"### ⚠️ Opération à haut risque : avertissement et clause de non-responsabilité pour la relance des codes 504/524\\n\\nPar défaut, ce projet ne relance pas les codes `400` (requête incorrecte), `504` (délai d\'attente de la passerelle) et `524` (délai d\'attente dépassé). Les codes 504 et 524 signifient généralement que **la requête est bien parvenue au service IA en amont et que le traitement avait commencé, mais que la connexion s\'est fermée parce que le traitement en amont a pris trop de temps**. Cela indique généralement un goulot d\'étranglement du service en amont.\\n\\nActiver la redirection ou la relance pour ces codes de délai d\'attente est une **opération à risque extrêmement élevé**. Avant de l\'activer, vous devez lire attentivement et comprendre les conséquences suivantes :\\n\\n#### 1. Risques principaux (à lire attentivement)\\n\\n1. 💸 Facturation double ou multiple : la plupart des fournisseurs d\'IA en amont **facturent quand même** les requêtes dont le traitement a commencé mais qui ont été interrompues par un délai réseau (504/524). Une relance envoie une toute nouvelle requête en amont et peut entraîner une **facturation double ou multiple**.\\n2. ⏳ Délai d\'attente sévère côté client : lorsqu\'une requête a déjà expiré, les relances peuvent multiplier la latence totale et provoquer des délais sévères ou inacceptables pour le client final.\\n3. 💥 Accumulation de requêtes et panne du service : les relances forcées occupent plus longtemps les threads et les connexions. En cas de forte concurrence, cela peut provoquer une importante **accumulation de requêtes**, épuiser les ressources, déclencher des défaillances en cascade et faire tomber le proxy.\\n\\n#### 2. Acceptation des risques\\n\\nSi vous choisissez malgré tout d\'activer cette fonction, vous reconnaissez les éléments suivants :","Higher priority channels are selected first":"Les canaux de priorité plus élevée sont sélectionnés en premier","Historical capitalization":"Ancienne casse","Historical tokens":"Anciens jetons","Historical Usage":"Utilisation historique","History of MjProxy-style image tasks.":"Historique des tâches d\'images style MjProxy.","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"Critère de hit : si des tokens en cache existent dans l\'utilisation, cela compte comme un hit.","Image count {{count}}":"Nombre d\'images {{count}}","Hit Rate":"Taux de succès","Hit tier":"Palier atteint","Home":"Accueil","Home Page Content":"Contenu de la page d\'accueil","Homepage URL":"URL de la page d\'accueil","Hook":"Hook","Hostname or IP of your SMTP provider":"Nom d\'hôte ou IP de votre fournisseur SMTP","Hour":"Heure","Hour of day":"Heure du jour","Hourly token usage by model across the last 24 hours":"Utilisation horaire des tokens par modèle sur les dernières 24 heures","Hourly token usage by model over the past 24 hours":"Utilisation horaire de tokens par modèle sur les dernières 24 heures","hours":"heures","How a call is priced":"Comment un appel est tarifé","How a session is identified and which channel it keeps.":"Comment une session est identifiée et quel canal elle conserve.","How client credentials are sent to the token endpoint":"Comment les informations d\'identification client sont envoyées au point de terminaison de jeton","How frequently the system checks auto-disabled channels for recovery":"Fréquence à laquelle le système vérifie la récupération des canaux désactivés automatiquement","How frequently the system tests all channels":"Fréquence à laquelle le système teste tous les canaux","How It Works":"Comment ça marche","How model mapping works":"Fonctionnement du mappage des modèles","How much to charge for each US dollar of balance (Epay)":"Montant à facturer pour chaque dollar US de solde (Epay)","How this model name should match requests":"Comment ce nom de modèle doit correspondre aux requêtes","How to deliver the resulting image":"Comment délivrer l\'image résultante","Inactive disk cache cleared":"Cache disque inactif vidé","How to get an io.net API Key":"Comment obtenir une clé API io.net","How to reset my quota?":"Comment réinitialiser mon quota ?","How to select keys: random or sequential polling":"Comment sélectionner les clés : sondage aléatoire ou séquentiel","How to set up Passkey domains":"Configurer les domaines des clés d’accès","How will you use the platform?":"Comment allez-vous utiliser la plateforme ?","HTTP Protocol":"Protocole HTTP","HTTP protocol must be Auto or HTTP/1.1":"Le protocole HTTP doit être Auto ou HTTP/1.1","HTTP/1.1":"HTTP/1.1","HTTP/2 Connection Shards":"Fragments de connexion HTTP/2","HTTP/2 connection shards are unavailable when HTTP/1.1 is selected.":"Les fragments de connexion HTTP/2 sont indisponibles lorsque HTTP/1.1 est sélectionné.","HTTP/2 connection shards must be 1 when HTTP/1.1 is selected":"Les fragments de connexion HTTP/2 doivent être 1 lorsque HTTP/1.1 est sélectionné","HTTP/2 connection shards must be between 1 and 8":"Les fragments de connexion HTTP/2 doivent être compris entre 1 et 8","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://votre-serveur.example.com","Human-readable name shown to users during Passkey prompts.":"Nom lisible par l\'homme affiché aux utilisateurs lors des invites de clé d\'accès (Passkey).","I confirm enabling high-risk retry":"Je confirme l\'activation de la relance à haut risque","I have read and agree to the":"J\'ai lu et j\'accepte les","I have read and understood the above compliance reminder":"J’ai lu et compris le rappel de conformité ci-dessus","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"J’ai lu et compris le rappel de conformité ci-dessus, je reconnais les risques juridiques associés et confirme assumer la responsabilité juridique liée au déploiement, à l’exploitation et à la facturation.","I understand that disabling 2FA removes its authenticator and backup codes.":"Je comprends que désactiver la 2FA supprimera l’authentificateur associé et ses codes de secours.","I understand that disabling 2FA will remove all protection and backup codes":"Je comprends que la désactivation de la 2FA supprimera toute protection et les codes de secours","Icon":"Icône","Icon file must be 100 KB or smaller":"Le fichier icône doit être de 100 Ko ou moins","Icon identifier (e.g. github, gitlab)":"Identifiant d\'icône (par exemple github, gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"Si une erreur en amont contient l\'un de ces mots-clés (insensible à la casse), le canal sera désactivé automatiquement.","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"Si l\'autorisation réussit, le JSON généré sera inséré dans le champ clé. Vous devez encore enregistrer le canal pour le conserver.","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"Si vous vous connectez à des projets de relais One API ou New API en amont, utilisez le type OpenAI à la place sauf si vous savez ce que vous faites","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"Si le groupe auto par défaut est activé, les nouveaux jetons commencent avec auto au lieu d’un groupe vide.","If left blank, the system may use a different website address and Passkey sign-in can fail here.":"Si ce champ reste vide, le système peut utiliser l’adresse d’un autre site et la connexion par Passkey peut échouer ici.","If no preceding rule matched: {{condition}}":"Si aucune règle précédente ne correspond : {{condition}}","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"Si le canal affinitaire échoue et qu\'une nouvelle tentative réussit sur un autre canal, mettre à jour l\'affinité vers le canal ayant réussi.","If this keeps happening, please report it on GitHub Issues.":"Si cela continue, veuillez le signaler sur GitHub Issues.","If users already have Passkeys, changing this domain may require them to sign in another way and set up their Passkeys again.":"Si des utilisateurs ont déjà des Passkeys, modifier ce domaine peut les obliger à se connecter autrement et à les configurer de nouveau.","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"Si vous fournissez des services d’IA générative au public en Chine continentale, vous remplirez les obligations légales applicables, notamment le dépôt, l’évaluation de sécurité, la sécurité du contenu, le traitement des plaintes, l’étiquetage du contenu généré, la conservation des journaux et la protection des informations personnelles.","If your Passkey belongs to another website, start sign-in there:":"Si votre clé d’accès appartient à un autre site, connectez-vous sur ce site :","Ignore":"Ignorer","Ignore this version":"Ignorer cette version","Ignored upstream models":"Modèles amont ignorés","image":"image","Image":"Image","Image Cache":"Cache image","Image cache input price":"Prix des images en cache","Image count":"Nombre d’images","Image Generation":"Génération d\'images","Image In":"Entrée d’image","Image input":"Entrée image","Image input price":"Prix d’entrée image","Image not available":"Image indisponible","Image Out":"Sortie d’image","Image output price":"Prix de sortie image","Image Preview":"Aperçu de l\'image","Image prices with count, size or quality adjustments must be converted manually.":"Les tarifs d’images ajustés selon le nombre, la taille ou la qualité doivent être convertis manuellement.","Image ratio":"Ratio d\'image","Image to Video":"Image vers vidéo","Image Tokens":"Tokens image","Imagine the pricing table has three groups: default (ratio 1.0), premium (ratio 0.5), and vip (ratio 0.8). Users whose account is in the vip group get user-level perks, and premium is a cheaper channel pool that users can pick for their tokens.":"Imaginez que le tableau tarifaire contient trois groupes : default (taux 1,0), premium (taux 0,5) et vip (taux 0,8). Les utilisateurs du groupe vip bénéficient d’avantages au niveau du compte, et premium est un pool de canaux moins cher que les utilisateurs peuvent choisir pour leurs jetons.","Import from URL":"Importer depuis une URL","Import to CC Switch":"Importer vers CC Switch","Input Price: High to Low":"Prix d’entrée : Du plus élevé au plus bas","Input Price: Low to High":"Prix d’entrée : Du plus bas au plus élevé","Insert a new priority tier":"Insérer un nouveau niveau","Invalid announcements format: {{error}}":"Format des annonces invalide : {{error}}","Invalid API info format: {{error}}":"Format des informations API invalide : {{error}}","Invalid authorization code":"Code d’autorisation invalide","Invalid Bark push URL":"URL de notification Bark invalide","Invalid billing expression for model {{model}}: {{error}}":"Expression de facturation invalide pour le modèle {{model}} : {{error}}","Important":"Important","Invalid channel ID":"ID de canal invalide","Importing metadata does not add channels, enable model access, or configure prices.":"L’import ne crée pas de canaux, n’ouvre pas l’accès aux modèles et ne configure pas les prix.","Invalid channel priority move":"Déplacement de priorité non valide","Invalid channel settings format: {{error}}":"Format des paramètres du canal invalide : {{error}}","In BotFather, open Login Widget, register this callback URL, and copy the Client ID and Client Secret. Existing Telegram bindings will continue to work after configuration.":"Dans BotFather, ouvrez Login Widget, enregistrez cette URL de rappel et copiez le Client ID et le Client Secret. Les comptes Telegram déjà liés fonctionneront après la configuration.","In JSON, the user group is the outer key and the billing group is the inner key. The example below means: vip users pay 0.8 when billed as standard, and 0.3 when billed as premium.":"En JSON, le groupe d’utilisateurs est la clé externe et le groupe de facturation la clé interne. L’exemple ci-dessous signifie : les utilisateurs vip paient 0,8 sous standard et 0,3 sous premium.","In Progress":"En cours","Invalid Discovery URL. Only http and https are supported":"URL Discovery invalide. Seuls http et https sont pris en charge","Invalid email address":"Adresse e-mail invalide","In the visual editor these appear as Extra visible and Hidden. In JSON, +: (or no prefix) adds a group and -: removes one.":"Dans l’éditeur visuel, ces règles apparaissent comme « Visible en plus » et « Masqué ». En JSON, +: (ou aucun préfixe) ajoute un groupe et -: en retire un.","Invalid FAQ format: {{error}}":"Format de la FAQ invalide : {{error}}","Invalid Gotify server URL":"URL du serveur Gotify invalide","Invalid ID":"ID invalide","In:":"Entrée :","Invalid input":"Saisie invalide","Invalid input {{error}}":"Saisie invalide {{error}}","incident":"incident","incidents":"incidents","Incidents":"Incidents","Include {{price}}":"Activer {{price}}","Include at least one price variable.":"Activez au moins une variable de prix.","Include Group":"Inclure le groupe","Include Model":"Inclure le modèle","Invalid parameters":"Paramètres invalides","Include name":"Inclure le nom","Invalid Passkey login state":"État de connexion Passkey invalide","Include quota":"Inclure le quota","Include Rule Name":"Inclure le nom de la règle","Invalid Passkey verification request":"Requête de vérification Passkey invalide","Includes changes that require security verification, such as password, two-factor settings, and account deletion.":"Comprend les modifications qui nécessitent une vérification de sécurité, comme le mot de passe, les paramètres de l’authentification à deux facteurs et la suppression du compte.","Includes request rules":"Inclut des règles de requête","Invalid provider ID":"ID de fournisseur invalide","Invalid request":"Requête invalide","Invalid request body.":"Corps de requête invalide.","Invalid request parameter format":"Format des paramètres de requête invalide","Invalid request parameters: {{error}}":"Paramètres de requête invalides : {{error}}","Includes tool-call surcharge":"Inclut un supplément pour appel d’outil","Including failed requests, 0 = unlimited":"Y compris les requêtes échouées, 0 = illimité","Incoming path":"Chemin entrant","Incoming path is required":"Le chemin entrant est requis","Incoming path must be unique":"Le chemin entrant doit etre unique","Incoming path must not include query":"Le chemin entrant ne doit pas inclure de query","Incoming path must start with /":"Le chemin entrant doit commencer par /","Invalid subscription ID":"ID d\'abonnement non valide","Invalid top-up amount":"Montant de recharge non valide","Invalid top-up quota":"Quota de recharge non valide","Invalid Uptime Kuma group settings format: {{error}}":"Format des paramètres de groupe Uptime Kuma invalide : {{error}}","Invalid user ID":"ID utilisateur invalide","Incomplete":"Incomplet","Invalid warning type":"Type d’alerte invalide","Invalid Webhook URL":"URL de Webhook invalide","Increase quota for user “{{name}}”":"Augmenter le quota de « {{name}} »","Increase user quota":"Augmenter le quota utilisateur","Increased user quota by {{quota}}":"Quota de l\'utilisateur augmenté de {{quota}}","Index":"Index","Invitation code bonus {{quota}}":"Bonus de code d\'invitation {{quota}}","Index request failed with HTTP {{status}}":"Échec de la requête d’index : HTTP {{status}}","Invitation quota is insufficient!":"Quota d’invitation insuffisant !","Index URL":"URL de l’index","Information unavailable":"Information indisponible","Inherit global Auto order":"Hériter de l’ordre Auto global","Inherit global default":"Utiliser la valeur globale","Inherit vendor icon":"Hériter de l’icône du fournisseur","Inherited":"Hérité","Inherited from {{vendor}}":"Héritée de {{vendor}}","Initial quota given to new users":"Quota initial donné aux nouveaux utilisateurs","Initial quota given to new users ({{formattedQuota}})":"Quota initial donné aux nouveaux utilisateurs ({{formattedQuota}})","Initialization failed, please try again.":"L\'initialisation a échoué, veuillez réessayer.","Initialize":"Initialiser","Initialize system":"Initialiser le système","Initializing…":"Initialisation…","Inpaint":"Inpainting","Input":"Entrée","Input mode":"Mode d\'entrée","Input pre-consume multiplier":"Multiplicateur de pré-débit des entrées","Input price":"Prix d’entrée","Input price is required before saving dependent prices.":"Le prix d’entrée est requis avant d’enregistrer les prix dépendants.","Input token rate":"Débit de tokens en entrée","Input tokens":"Jetons d’entrée","Input Tokens":"Tokens d\'entrée","Inset":"Encastré","Inspect requests, errors, and billing details":"Inspecter les requêtes, les erreurs et les détails de facturation","Inspect user prompts":"Inspecter les invites utilisateur","Install":"Installer","Install {{name}}":"Installer {{name}}","Install and enable":"Installer et activer","Install, configure, test, and remove task plugins.":"Installer, configurer, tester et supprimer des plugins de tâche.","Installed":"Installés","Installed {{name}} v{{version}}":"{{name}} v{{version}} installé","Installed v{{from}} → marketplace v{{to}}":"Installé v{{from}} → marché v{{to}}","Installed v{{installed}} not listed":"v{{installed}} installée, absente de l’index","Installed version is not in this index":"La version installée est absente de cet index","Installing...":"Installation…","Instance":"Instance","Instances":"Instances","Insufficient balance":"Solde insuffisant","Insufficient permission to adjust this user":"Droits insuffisants pour modifier ce quota","Integrations":"Intégrations","Integrity check failed":"Échec du contrôle d’intégrité","Integrity hash":"Empreinte d’intégrité","Integrity verification unavailable in this environment":"Vérification indisponible dans cet environnement","Inter-group overrides":"Dérogations inter-groupes","Inter-group ratio overrides":"Dérogations de ratio inter-groupes","Interface Language":"Langue de l\'interface","Internal Notes":"Notes internes","Internal notes (not shown to users)":"Notes internes (non visibles par les utilisateurs)","Internal Server Error!":"Erreur interne du serveur !","Interval must be at least 1 minute":"L\'intervalle doit être d\'au moins 1 minute","Invalid (NaN)":"Invalide (NaN)","Invalid adjustment parameters":"Paramètres de modification invalides","Invalid channel header override":"Configuration des en-têtes du canal invalide","Invalid channel proxy":"Configuration du proxy du canal invalide","Invalid chat link. Please contact the administrator.":"Lien de chat invalide. Veuillez contacter l\'administrateur.","Invalid chat link. Please contact your administrator.":"Lien de chat invalide. Veuillez contacter votre administrateur.","Invalid code":"Code invalide","Invalid expression syntax":"Syntaxe d’expression invalide","Invalid inference server address":"Adresse du serveur d’inférence invalide","Invalid items format":"Format des éléments invalide","Invalid JSON":"JSON invalide","Invalid JSON format":"Format JSON invalide","Invalid JSON format or values out of allowed range":"Format JSON invalide ou valeurs hors plage autorisée","Invalid JSON in parameter override template":"JSON invalide dans le modèle de remplacement de paramètres","Invalid JSON string.":"Chaîne JSON invalide.","Invalid model mapping format":"Format de mappage de modèle invalide","Invalid Passkey domain. Enter a domain without a scheme, port, path or wildcard.":"Domaine de clé d’accès invalide. Saisissez un domaine sans protocole, port, chemin ni caractère générique.","Join the same priority tier":"Rejoindre le même niveau de priorité","Key deleted":"Clé supprimée","Key disabled":"Clé désactivée","Key enabled":"Clé activée","Invalid Passkey registration response":"Réponse d\'enregistrement de passe-clé invalide","Key index out of range":"Index de clé hors limites","Invalid Passkey response":"Réponse Passkey invalide","Invalid payment redirect URL":"URL de redirection de paiement non valide","Invalid pricing value":"Valeur tarifaire invalide","Invalid reset link, please request a new password reset":"Lien de réinitialisation invalide, veuillez demander une nouvelle réinitialisation de mot de passe","Invalid reset link, please request a new password reset.":"Lien de réinitialisation invalide, veuillez demander une nouvelle réinitialisation du mot de passe.","Invalid response":"Réponse invalide","Invalid rules JSON format":"Format JSON des règles invalide","Invalid status code mapping entries: {{entries}}":"Entrées de mappage de code d\'état invalides : {{entries}}","Invalid status code rules":"Règles de codes d’état invalides","Invalid status code rules: {{tokens}}":"Règles de code de statut invalides : {{tokens}}","Invalid vLLM server address":"Adresse du serveur vLLM invalide","Invalidate":"Invalider","Invalidated":"Invalidé","Invert match":"Inverser la correspondance","Invitation Code":"Code d\'invitation","Invitation Quota":"Quota d\'invitation","Invite Info":"Informations sur l\'invitation","Invited":"Invité","Invited {{count}} users":"{{count}} invitations","Invited by user ID":"Invité par l\'ID utilisateur","Invited Users":"Utilisateurs invités","Invitee Reward":"Récompense de l\'invité","Inviter":"Inviteur","Inviter ID: {{id}}":"ID du parrain : {{id}}","Inviter Reward":"Récompense de l\'inviteur","Invites":"Invitations","Invoke developer-defined functions with structured arguments":"Appeler des fonctions définies par le développeur avec des arguments structurés","InvokeModel (legacy)":"InvokeModel (ancienne API)","io.net API Key":"Clé API io.net","io.net Deployments":"Déploiements io.net","IP":"IP","IP Address":"Adresse IP","IP Filter Mode":"Mode de filtre IP","IP Restriction":"Restriction IP","IP Whitelist (supports CIDR)":"Liste blanche IP (supporte CIDR)","IP: {{ip}} · Method: {{method}}":"IP : {{ip}} · Méthode : {{method}}","is less than the configured maximum cache size":"est inférieur à la taille maximale du cache configurée","is the default price; ":"est le prix par défaut ; ","It seems like the page you\'re looking for":"Il semble que la page que vous recherchez","Items":"Éléments","Japanese":"Japonais","JavaScript file":"Fichier JavaScript","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"Tableau JSON d\'identifiants de groupe. Lorsqu\'il est activé ci-dessous, les nouveaux jetons alternent dans cette liste.","JSON Editor":"Édition JSON","JSON format error":"Erreur de format JSON","JSON format supports service account JSON files":"Le format JSON prend en charge les fichiers JSON de compte de service","JSON is invalid at line {{line}}, column {{column}}.":"Le JSON est invalide à la ligne {{line}}, colonne {{column}}.","JSON is invalid at position {{position}}.":"Le JSON est invalide à la position {{position}}.","JSON is invalid. Please check the syntax.":"Le JSON est invalide. Veuillez vérifier la syntaxe.","JSON keys are request model names; values are upstream model names.":"Les clés JSON sont les noms des modèles demandés ; les valeurs sont les noms des modèles en amont.","JSON map of group → description exposed when users create API keys.":"Carte JSON de groupe → description exposée lorsque les utilisateurs créent des clés API.","JSON map of group → ratio applied when the user selects the group explicitly.":"Carte JSON de groupe → ratio appliqué lorsque l\'utilisateur sélectionne explicitement le groupe.","JSON map of model → multiplier applied to quota billing.":"Carte JSON de modèle → multiplicateur appliqué à la facturation par quota.","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"Carte JSON de modèle → coût en USD par requête. Prend le pas sur la facturation basée sur le ratio.","JSON mode":"Mode JSON","JSON Mode":"Mode JSON","JSON must be an object":"Le JSON doit être un objet","JSON object:":"Objet JSON :","JSON structure is invalid":"La structure JSON est invalide","JSON Text":"Texte JSON","Leave empty to use the site default ({{amount}})":"Laissez vide pour utiliser la valeur par défaut du site ({{amount}})","Legacy access tokens have been retired. Create a new access token in security settings":"Les anciens jetons d\'accès ont été retirés. Créez un nouveau jeton d\'accès dans les paramètres de sécurité","JSON-based access control rules. Leave empty to allow all users.":"Règles de contrôle d\'accès basées sur JSON. Laisser vide pour autoriser tous les utilisateurs.","Just now":"À l\'instant","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"Conserver l\'affinité lorsque le canal est désactivé","Keep enabled if you need to proxy requests for different upstream accounts.":"Gardez activé si vous devez proxifier les requêtes pour différents comptes en amont.","Keep enough balance before production traffic":"Gardez un solde suffisant avant le trafic de production","Keep existing domain":"Conserver le domaine actuel","Keep local":"Conserver les valeurs locales","Keep original value":"Conserver la valeur originale","Keep original value (skip if target exists)":"Conserver la valeur originale (ignorer si la cible existe)","Keep the domains used by existing Passkeys, one per line. If the primary domain changed from www.example.com to example.com, enter www.example.com here.":"Conservez les domaines des clés existantes, un par ligne. Si le domaine principal passe de www.example.com à example.com, gardez www.example.com ici.","Keep the names users call; change what is sent upstream.":"Conservez les noms utilisés par vos utilisateurs et modifiez ceux envoyés en amont.","Keep the platform ready":"Gardez la plateforme prête","Keep the session binding when the channel is unavailable":"Conserver la liaison si le canal est indisponible","Keep this above 1 minute to avoid heavy database load":"Gardez cette valeur au-dessus de 1 minute pour éviter une charge excessive de la base de données","Keep this vendor":"Fournisseur à conserver","Keep upstream names; choose what users call.":"Conservez les noms en amont et définissez ceux utilisés par vos utilisateurs.","Keep-alive Ping":"Ping de maintien de connexion","Keeps compatible responses more repeatable":"Rend les réponses compatibles plus reproductibles","Key":"Clé","Key Fingerprint":"Empreinte de clé","Key Sources":"Sources de clé","Key Summary":"Résumé de clé","Key Update Mode":"Mode de mise à jour de la clé","Keys, OAuth credentials, and multi-key update behavior.":"Clés, identifiants OAuth et comportement de mise à jour multi-clés.","Kind":"Type","Linux DO trust level does not meet the minimum required by administrator":"Le niveau de confiance Linux DO n’atteint pas le minimum requis par l’administrateur","Kling":"Kling","Knowledge Base ID":"ID de la base de connaissances","Knowledge Base ID *":"ID de la base de connaissances *","Knowledge cutoff":"Date de coupure des connaissances","Lake View":"Vue du lac","Landing page with system overview.":"Page d\'accueil avec aperçu du système.","Language preference saved":"Préférence de langue enregistrée","Language Preferences":"Préférences de langue","Language preferences sync across your signed-in devices and affect API error messages.":"Les préférences de langue se synchronisent sur vos appareils connectés et affectent les messages d\'erreur de l\'API.","Last 24h usage":"Utilisation 24h","Last 30 days uptime":"Disponibilité 30 derniers jours","Last active {{time}} · Expires {{expires}}":"Dernière activité {{time}} · Expire le {{expires}}","Last check time":"Dernière vérification","Last detected addable models":"Derniers modèles ajoutables détectés","Last Login":"Dernière connexion","Last Seen":"Dernier signal","Last successful check":"Dernière vérification réussie","Last Tested":"Dernier testé","Last updated":"Dernière mise à jour","Last updated:":"Dernière mise à jour :","Last Used":"Dernière utilisation","Last used {{time}}":"Dernière utilisation le {{time}}","Last used:":"Dernière utilisation :","Latency":"Latence","Latency check":"Contrôle de latence","Latency short":"Lat.","Latency trend (last 24h)":"Tendance de latence (24 dernières heures)","Later":"Plus tard","Later requests follow the new channel.":"Les requêtes suivantes suivent le nouveau canal.","Latest platform updates and notices":"Dernières mises à jour et annonces de la plateforme","Latest version":"Dernière version","Lavender Dream":"Rêve de lavande","Layout":"Disposition","lead":"tête","Leaderboards":"Classements","Learn more":"En savoir plus","Learn more:":"En savoir plus :","Leave":"Quitter","Leave blank to keep the existing credential":"Laissez vide pour conserver l\'identifiant existant","Leave blank to keep the existing key":"Laisser vide pour conserver la clé existante","Leave blank unless rotating the secret":"Laissez vide, sauf si vous faites pivoter le secret","Leave empty for fallback":"Laisser vide pour le repli","Leave empty for never expires":"Laissez vide pour qu\'il n\'expire jamais","Leave empty only for the final fallback split.":"Laissez vide uniquement pour la dernière branche de repli.","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Laissez vide pour désactiver l\'exigence d\'accord. Prend en charge Markdown, HTML ou une URL complète pour rediriger les utilisateurs.","Log export is disabled":"L\'exportation des journaux est désactivée","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Laissez vide pour désactiver l\'exigence de politique de confidentialité. Prend en charge Markdown, HTML ou une URL complète pour rediriger les utilisateurs.","Leave empty to disband the tag":"Laissez vide pour dissoudre l\'étiquette","Leave empty to keep existing key":"Laissez vide pour conserver la clé existante","Leave empty to keep unchanged":"Laissez vide pour conserver inchangé","Log recording":"Enregistrement des journaux","Log search and export":"Recherche et exportation des journaux","Leave empty to match all models":"Laisser vide pour correspondre à tous les modèles","Leave empty to use account email":"Laissez vide pour utiliser l\'e-mail du compte","Leave empty to use default":"Laisser vide pour utiliser la valeur par défaut","Leave empty to use system temp directory":"Laisser vide pour utiliser le répertoire temporaire","Leave empty to use username":"Laissez vide pour utiliser le nom d\'utilisateur","Leave the final split empty as the fallback for models not matched above.":"Laissez la dernière répartition vide comme solution de secours pour les modèles non appariés plus haut.","Leave this empty only for the final fallback split; it catches client models not matched above.":"Laissez vide uniquement pour la dernière branche de repli ; elle reçoit les modèles client non associés plus haut.","Left to Right":"De gauche à droite","Legacy Format (JSON Object)":"Ancien format (objet JSON)","Legacy format must be a JSON object":"L\'ancien format doit être un objet JSON","Legacy Format Template":"Modèle ancien format","Legacy full-URL integration; use Advanced Custom for new channels":"Ancienne intégration par URL complète ; utilisez Personnalisé avancé pour les nouveaux canaux","Legacy pricing is deprecated. Convert the current prices to an expression draft, then save to apply it.":"L’ancien mode tarifaire est obsolète. Convertissez les prix actuels en brouillon d’expression, puis enregistrez pour l’appliquer.","Legacy token":"Ancien jeton","Legal":"Juridique","Less":"Moins","Longest log time range (days)":"Plage maximale des journaux (jours)","Less than":"Inférieur à","Less Than":"Inférieur à","Less than 1 day left":"Moins d\'un jour restant","Less than or equal":"Inférieur ou égal","Less Than or Equal":"Inférieur ou égal","License":"Licence","Light":"Clair","Lightning Fast":"Extrêmement rapide","Limit period":"Période de limite","Limit Reached":"Limite atteinte","Limit which models can be used with this key":"Limiter les modèles pouvant être utilisés avec cette clé","Limited":"Limité","Limits only token-specific Auto snapshots. Global Auto inheritance remains unlimited.":"Limite uniquement les instantanés Auto propres aux jetons. L’héritage Auto global reste illimité.","Limits token selection to a probability mass":"Limite la sélection des tokens par masse de probabilité","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"Lien vers votre site de documentation","Linked account":"Compte associé","Linked models":"Modèles associés","Linked records are counted once. Matching rules show their covered models separately.":"Chaque fiche associée compte une fois. Les modèles couverts par les règles sont comptés séparément.","LinuxDO":"LinuxDO","LinuxDO Client ID":"ID client LinuxDO","LinuxDO Client Secret":"Secret client LinuxDO","List of models supported by this channel. Use comma to separate multiple models.":"Liste des modèles pris en charge par ce canal. Utilisez une virgule pour séparer plusieurs modèles.","List of origins (one per line) allowed for Passkey registration and authentication.":"Liste des origines (une par ligne) autorisées pour l\'enregistrement et l\'authentification des clés d\'accès (Passkey).","List registered task plugins and bind them when creating or editing task plugin channels.":"Lister les plugins de tâche enregistrés et les lier à la création ou à la modification de canaux.","List view":"Vue en liste","Listing also depends on metadata visibility and the user’s group access.":"L’affichage dépend aussi de la visibilité des métadonnées et des groupes accessibles à l’utilisateur.","Listing hidden":"Masqué","Live refresh pauses when no task is running":"L\'actualisation en direct est suspendue lorsqu\'aucune tâche n\'est en cours","LLM Leaderboard":"Classement des LLM","LLM prompt helper":"Assistant prompt LLM","Load Balancing":"Équilibrage de charge","Load metadata preview":"Charger l’aperçu","Load template...":"Charger le modèle...","Loader":"Chargeur","Loading":"Chargement","Loading channel details":"Chargement des détails du canal","Loading configuration":"Chargement de la configuration","Loading content settings...":"Chargement des paramètres de contenu...","Loading conversation...":"Chargement de la conversation...","Loading current models...":"Chargement des modèles actuels...","Loading failed":"Échec du chargement","Loading installed source...":"Chargement du code installé…","Loading maintenance settings...":"Chargement des paramètres de maintenance...","Loading plugins...":"Chargement des extensions…","Loading settings...":"Chargement des paramètres...","Loading setup status…":"Chargement du statut de configuration…","Loading verification methods...":"Chargement des méthodes de vérification…","Loading...":"Chargement...","Local":"Local","Local Billing":"Facturation locale","Local check":"Vérification locale","Local Estimate (billing-usage-anthropic)":"Estimation locale (billing-usage-anthropic)","Local Estimate (billing-usage-gemini)":"Estimation locale (billing-usage-gemini)","Local Estimate (billing-usage-openai)":"Estimation locale (billing-usage-openai)","Local models":"Modèles locaux","Locations":"Emplacements","Locked":"Verrouillé","log":"journal","Log cleanup":"Nettoyage des journaux","Log cleanup progress":"Progression du nettoyage des journaux","Log cleanup task started.":"La tâche de nettoyage des journaux a démarré.","Log Details":"Détails du journal","Log Directory":"Répertoire des journaux","Log File Count":"Nombre de fichiers journaux","Log files older than {{value}} days will be deleted.":"Les fichiers journaux de plus de {{value}} jours seront supprimés.","Log IP address for usage and error logs":"Enregistrer l\'adresse IP pour les journaux d\'utilisation et d\'erreurs","Log Maintenance":"Maintenance des journaux","Log Type":"Type de journal","Low balance reminder":"Rappel de solde faible","Maximum 100 redemption codes can be generated at once":"Vous pouvez générer au maximum 100 codes d\'échange à la fois","Logged in successfully via {{method}}":"Connexion réussie via {{method}}","Logic":"Logique","Login":"Connexion","Login & Authentication":"Connexion et authentification","Login failed":"Échec de la connexion","Login flow expired. Please sign in again.":"Le processus de connexion a expiré. Veuillez vous reconnecter.","Login Info":"Informations de connexion","Login Method":"Méthode de connexion","Login session":"Session de connexion","Login sessions":"Sessions de connexion","Maximum number of tokens reached ({{max}})":"Nombre maximal de jetons atteint ({{max}})","Login, security and access records":"Historique des connexions, de la sécurité et des accès","Logo":"Logo","Logo URL":"URL du logo","Logs":"Journaux","Long passwords are unavailable until the password storage upgrade is complete.":"Les mots de passe longs seront disponibles après la mise à niveau du stockage des mots de passe.","Look for a special ratio rule matching this user group and this billing group. If one exists, use its ratio. Otherwise use the billing group base ratio from the pricing table.":"Cherchez une règle de taux spécial correspondant à ce groupe d’utilisateurs et ce groupe de facturation. Si elle existe, utilisez son taux ; sinon le taux de base du groupe de facturation.","Low balance":"Solde faible","Lowest median first-token latency":"Latence médiane de premier jeton la plus faible","m":"m","Maintenance":"Maintenance","Make extra groups visible to, or hide default groups from, users of a specific group.":"Rendre des groupes supplémentaires visibles pour les utilisateurs d’un groupe donné, ou leur masquer des groupes par défaut.","Make it easier for teammates to pick the right group.":"Faciliter le choix du bon groupe pour les coéquipiers.","Make sure you understand these effects before enabling.":"Assurez-vous de bien comprendre ces effets avant d\'activer.","Manage":"Gestion","Manage account bindings for this user":"Gérer les liaisons de compte pour cet utilisateur","Manage Bindings":"Gérer les liaisons","Manage catalog visibility and pricing.":"Gérer la visibilité du catalogue et les prix.","Manage custom OAuth providers for user authentication":"Gérer les fournisseurs OAuth personnalisés pour l\'authentification des utilisateurs","Manage Keys":"Gérer les clés","Manage local models for:":"Gérer les modèles locaux pour :","Manage metadata, pricing, and channel connections. Each section saves separately.":"Gérez les métadonnées, les tarifs et les canaux. Chaque section s’enregistre séparément.","Manage multi-key status and configuration for this channel":"Gérer le statut multi-clés et la configuration pour ce canal","Manage Ollama Models":"Gérer les modèles Ollama","Manage pricing, visibility and automatic routing for your groups.":"Gérez les tarifs, la visibilité et le routage automatique des groupes.","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"Gérer les fichiers journaux du serveur. Les fichiers journaux s\'accumulent au fil du temps ; un nettoyage régulier est recommandé.","Manage sources":"Gérer les sources","Manage subscription plans and pricing.":"Gérer les plans d\'abonnement et les tarifs.","Manage Subscriptions":"Gérer les abonnements","Manage vendor details and linked model records.":"Gérez les informations du fournisseur et les modèles associés.","Manage Vendors":"Gérer les fournisseurs","Manage your LinuxDO OAuth app":"Gérer votre application OAuth LinuxDO","Manage your security settings and account access":"Gérer vos paramètres de sécurité et l\'accès à votre compte","Mantle (Messages API)":"Mantle (Messages API)","Manual Disabled":"Désactivé manuellement","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"Mapper les champs de la réponse des informations utilisateur vers les attributs utilisateur locaux. Supporte les chemins imbriqués (par exemple ocs.data.id).","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"Mapper les identifiants de modèle aux versions de l\'API Gemini. Une entrée `default` s\'applique lorsqu\'aucune correspondance spécifique n\'est trouvée.","Map request model names to actual provider model names (JSON format)":"Mapper les noms de modèles de requête aux noms réels de modèles du fournisseur (format JSON)","Map response status codes (JSON format)":"Mapper les codes de statut de réponse (format JSON)","Map upstream status codes to different codes":"Mapper les codes de statut amont à différents codes","Market Share":"Part de marché","Marketing":"Marketing","Marketplace":"Marché","Marketplace installs never force past a conflict. Resolve it on the task plugins page, then install again.":"Une installation depuis le marché ne force jamais malgré un conflit. Résolvez-le sur la page des plugins de tâches, puis réinstallez.","Marketplace sources":"Sources du marché","Marketplace sources updated":"Sources du marché mises à jour","Master instances run scheduled background tasks.":"Les instances master exécutent les tâches planifiées en arrière-plan.","Match All (AND)":"Toutes (AND)","Match Any (OR)":"N\'importe laquelle (OR)","Match Mode":"Mode de correspondance","Minimum transfer quota is {{min}}!":"Le quota minimum de transfert est de {{min}} !","Match model name exactly":"Correspondance exacte du nom du modèle","Match models containing this name":"Correspondance des modèles contenant ce nom","Match models ending with this name":"Correspondance des modèles se terminant par ce nom","Match models starting with this name":"Correspondance des modèles commençant par ce nom","Match Text":"Texte à rechercher","Match Type":"Type de correspondance","Match Value":"Valeur de correspondance","Match Value (optional)":"Valeur de correspondance (optionnel)","Missing group ID":"ID du groupe manquant","Matched":"Correspondant","Missing model ID":"ID du modèle manquant","Matched models":"Modèles associés","Missing parameter rule_name, or use all=true to clear everything":"Paramètre rule_name manquant, ou utilisez all=true pour tout effacer","Matched Tier":"Palier correspondant","Missing vendor ID":"ID du fournisseur manquant","Matches models not claimed by earlier splits.":"Correspond aux modèles non pris par les branches précédentes.","Matching Rules":"Règles de correspondance","Matching rules apply to metadata. Pricing is configured for each concrete model.":"Les règles de correspondance concernent les métadonnées. Les tarifs se définissent par modèle.","Max context tokens":"Tokens de contexte maximum","Max Disk Cache Size (MB)":"Taille max du cache disque (Mo)","Max Entries":"Entrées max","Max output":"Sortie max","Max Requests (incl. failures)":"Max Requêtes (incl. échecs)","Max Requests (including failures)":"Max Requêtes (incluant les échecs)","Max requests per period":"Nombre max de requêtes par période","Max Retries":"Relances max","Max Success":"Max Succès","Max successful requests":"Nombre max de requêtes réussies","Max Successful Requests":"Max Requêtes réussies","Max Tokens":"Tokens max.","Maximum {{max}} groups selected":"Maximum de {{max}} groupes atteint","Maximum 1000 characters. Supports Markdown and HTML.":"Maximum 1000 caractères. Prend en charge Markdown et HTML.","Maximum 200 characters":"Maximum 200 caractères","Maximum 500 characters. Supports Markdown and HTML.":"Maximum 500 caractères. Prend en charge Markdown et HTML.","Maximum cached sessions":"Nombre maximal de sessions en cache","Maximum check-in quota":"Quota maximum de connexion","Maximum custom groups per token":"Nombre maximal de groupes personnalisés par jeton","Maximum input window":"Fenêtre d\'entrée maximale","Maximum number of channels tested at the same time (1-32)":"Nombre maximal de canaux testés simultanément (1 à 32)","Maximum number of tokens each user can create. Default 1000. Setting too large may affect performance.":"Nombre maximum de jetons que chaque utilisateur peut créer. Par défaut 1000. Une valeur trop élevée peut affecter les performances.","Maximum number of tokens in the response":"Nombre maximum de jetons dans la réponse","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}":"Prix fixe du modèle {{model_price}}, ratio du groupe {{group_ratio}}, action {{action}}","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}, ID {{id}}":"Prix fixe du modèle {{model_price}}, ratio du groupe {{group_ratio}}, action {{action}}, ID {{id}}","Maximum quota amount awarded for check-in":"Montant maximum de quota attribué pour la connexion","Maximum retries":"Nombre maximal de tentatives","Maximum tokens including hidden reasoning tokens":"Jetons maximum, y compris les jetons de raisonnement masqués","Maximum tokens per response":"Nombre maximal de jetons par réponse","Maximum tokens per user":"Nombre maximum de jetons par utilisateur","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1, les deux ≤ 2 147 483 647","May be used for training by upstream provider":"Peut être utilisé pour l\'entraînement par le fournisseur amont","Mean queue time":"Attente moyenne","Mean request latency":"Latence moyenne des requêtes","Mean time per output token":"Temps moyen par token de sortie","Mean time to first token":"Latence moyenne du premier token","Media access expired. Please try again.":"L’accès au média a expiré. Veuillez réessayer.","Media preview failed. Please try again.":"Échec de l’aperçu du média. Veuillez réessayer.","Media pricing":"Tarification multimédia","Median time-to-first-token (TTFT) sampled hourly per group":"Latence médiane jusqu\'au premier jeton (TTFT) échantillonnée par heure et par groupe","Medical Q&A, mental health support":"Q&R médicales, soutien en santé mentale","Memory":"Mémoire","Memory Hits":"Hits mémoire","Memory Threshold (%)":"Seuil mémoire (%)","Merchant ID":"ID du commerçant","Merchant ID is required":"L\'ID marchand est requis","Merge into Other":"Fusionner dans Autres","Model name already exists":"Le nom du modèle existe déjà","Model name cannot be empty":"Le nom du modèle ne peut pas être vide","Merge vendors":"Fusionner les fournisseurs","Model name is too long: {{model}}":"Nom de modèle trop long : {{model}}","Message Priority":"Priorité du message","Metadata":"Métadonnées","Metadata changes":"Modifications des métadonnées","Metadata language":"Langue des métadonnées","Metadata only":"Métadonnées seules","Metadata sync completed":"Métadonnées synchronisées","Model price {{model_price}}, group ratio {{group_ratio}}":"Prix du modèle {{model_price}}, ratio du groupe {{group_ratio}}","Metadata sync disabled":"Synchronisation désactivée","Metadata sync failed":"Échec de la synchronisation","Method":"Méthode","Migration notes":"Notes de migration","min downtime":"min d\'interruption","Min Top-up":"Recharge min.","Min Top-up:":"Recharge min. :","Model ratio {{model_ratio}}, completion ratio {{completion_ratio}}, audio ratio {{audio_ratio}}, audio completion ratio {{audio_completion_ratio}}, group ratio {{group_ratio}}":"Ratio du modèle {{model_ratio}}, ratio de complétion {{completion_ratio}}, ratio audio {{audio_ratio}}, ratio de complétion audio {{audio_completion_ratio}}, ratio du groupe {{group_ratio}}","MiniMax":"MiniMax","Model ratios reset":"Ratios des modèles réinitialisés","Minimum {{amount}}":"Minimum {{amount}}","Minimum check-in quota":"Quota minimum de connexion","Minimum LinuxDO trust level required":"Niveau de confiance minimum LinuxDO requis","Minimum quota amount awarded for check-in":"Montant minimum de quota attribué pour la connexion","Minimum recharge amount in USD":"Montant de recharge minimum en USD","Minimum recharge amount to qualify for this discount.":"Montant minimum de recharge pour bénéficier de cette remise.","Minimum top-up (optional)":"Recharge minimum (facultatif)","Minimum top-up (USD)":"Recharge minimum (USD)","Minimum top-up amount must be at least 1":"Le montant minimum de recharge doit être d\'au moins 1","Minimum top-up quantity":"Quantité minimale de recharge","Minimum topup amount: {{amount}}":"Montant minimum de recharge : {{amount}}","Minimum Trust Level":"Niveau de confiance minimum","Minimum:":"Minimum :","Model test":"Test du modèle","Minor blips in the last 30 days":"Légères perturbations sur les 30 derniers jours","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"Créez une nouvelle paire ci-dessous, ou choisissez une paire existante plus bas. Cliquez sur Enregistrer lorsque vous êtes prêt.","Minute":"Minute","minutes":"minutes","Missing code":"Code manquant","Missing metadata":"Sans métadonnées","Missing Models":"Modèles manquants","Missing user data from Passkey login response":"Données utilisateur manquantes de la réponse de connexion Passkey","Mistral":"Mistral","MjProxy":"MjProxy","MjProxyPlus":"MjProxyPlus","Modalities":"Modalités","Modality":"Modalité","Mode":"Mode","model":"modèle","Model":"Modèle","Model {{model}}":"Modèle {{model}}","Model Access":"Accès au modèle","Model Analytics":"Analyse des modèles","Model Analytics Defaults":"Paramètres par défaut de l’analyse des modèles","Model Analytics Filters":"Filtres d’analyse des modèles","Model assignments":"Attribution des modèles","model billing support":"prise en charge de la facturation des modèles","Model Call Analytics":"Analyse des appels de modèles","Model context usage":"Utilisation du contexte du modèle","Model deleted":"Modèle supprimé","Model deleted successfully":"Modèle supprimé avec succès","Model Deployment":"Déploiement de modèles","Model deployment service is disabled":"Le service de déploiement de modèles est désactivé","Model Description":"Description du modèle","Model details":"Détails du modèle","Model disabled successfully":"Modèle désactivé avec succès","Model discovery uses the first key; other keys are not tested.":"Les modèles sont récupérés avec la première clé ; les autres clés ne sont pas testées.","Model discovery uses the saved channel connection settings.":"La recherche de modèles utilise les paramètres de connexion enregistrés du canal.","Model enabled successfully":"Modèle activé avec succès","Model fixed pricing":"Tarification fixe du modèle","Model Group":"Groupe de modèles","Model hidden from model square":"Modèle masqué dans la galerie","Model ID is required":"L’identifiant du modèle est requis","Model Limits":"Limites du modèle","Model limits enabled":"Restrictions de modèles activées","Model List":"Liste des modèles","Model management":"Gestion des modèles","Model Mapping":"Mappage de modèle","Model Mapping (JSON)":"Mappage de modèle (JSON)","Model Mapping must be a JSON object like":"Le mappage de modèle doit être un objet JSON tel que","Model mapping must be a JSON object with string values":"Le mappage de modèles doit être un objet JSON avec des valeurs de chaîne","Model mapping must be a valid JSON object":"Le mapping des modèles doit être un objet JSON valide","Model mapping must be valid JSON":"La cartographie des modèles doit être un JSON valide","Model mapping must be valid JSON format":"Le mapping des modèles doit être au format JSON valide","Model mapping values must be strings":"Les valeurs du mappage de modèles doivent être des chaînes","Model mappings are being edited in the floating panel.":"Les correspondances de modèles sont en cours de modification dans le panneau flottant.","Model metadata":"Métadonnées du modèle","Model metadata saved":"Métadonnées enregistrées","Model name":"Nom du modèle","Model Name":"Nom du modèle","Model Name *":"Nom du modèle *","Model name is required":"Le nom du modèle est requis","Model names copied to clipboard":"Noms des modèles copiés dans le presse-papiers","Model not found":"Modèle introuvable","Model performance metrics":"Indicateurs de performance des modèles","Model Price":"Prix du modèle","Model price is not configured. Please complete model pricing in settings.":"Le prix du modèle n\'est pas configuré. Veuillez compléter la tarification du modèle dans les paramètres.","Model Price Not Configured":"Prix du modèle non configuré","Model prices":"Prix des modèles","Model prices reset successfully":"Prix des modèles réinitialisés avec succès","Model Pricing":"Tarification des modèles","Model pricing is managed by a super administrator.":"Les tarifs sont gérés par un super administrateur.","Model pricing saved":"Tarifs du modèle enregistrés","Model pull failed: {{msg}}":"Échec du téléchargement du modèle : {{msg}}","Move channels into a priority tier or between tiers. Priority values update automatically.":"Déplacez les canaux dans un même niveau ou entre deux niveaux. Les priorités sont calculées automatiquement.","Multi-key channels do not support balance queries":"Les canaux multi-clés ne prennent pas en charge la consultation du solde","Model ratio":"Ratio modèle","Model ratios":"Ratios de modèle","Model ratios reset successfully":"Ratios des modèles réinitialisés avec succès","Model redirect is unavailable":"La redirection de modèle est indisponible","Model redirects":"Redirections de modèles","Model Regex":"Regex du modèle","Model Regex (one per line)":"Regex du modèle (un par ligne)","Model regex cannot be empty":"La regex du modèle ne peut pas être vide","Model scope":"Portée des modèles","Model selected":"Modèle sélectionné","Model shown in model square":"Modèle affiché dans la galerie","Model source":"Source du modèle","Model Square":"Place des modèles","Model square visibility":"Visibilité","Model Tags":"Tags de modèle","Model to use for testing":"Modèle à utiliser pour les tests","Model to use when testing channel connectivity":"Modèle à utiliser lors du test de la connectivité du canal","Model Version":"Version du modèle","Model Version *":"Version du modèle *","Model-scoped only":"Modèles uniquement","model(s) selected out of":"modèle(s) sélectionné(s) parmi","model(s)? This action cannot be undone.":"modèle(s) ? Cette action ne peut pas être annulée.","models":"modèles","Models":"Modèles","Models *":"Modèles *","Models & Groups":"Modèles & Groupes","Models & Routing":"Modèles et routage","Models appended successfully":"Modèles ajoutés avec succès","Models are required":"Les modèles sont requis","Models climbing the leaderboard":"Modèles qui montent au classement","Models climbing the leaderboard fastest":"Modèles qui grimpent le plus vite au classement","Models directory":"Répertoire des modèles","Models Directory":"Répertoire des modèles","Models exposed by this channel":"Modeles exposes par ce canal","Models fetched successfully":"Modèles récupérés avec succès","Models filled to form":"Modèles remplis pour le formulaire","Models listed here skip automatic -thinking / -nothinking suffix handling. Matched names are also exempt from @-modifier parsing and 400 validation. Prefix an entry with re: to match the full model name as a Go regular expression, for example re:.*@sha256:.*":"Les modèles listés ici n\'ajoutent ni ne retirent automatiquement les suffixes -thinking / -nothinking. Les noms correspondants sont aussi exemptés de l\'analyse et de la validation des modificateurs @ (erreur 400). Un préfixe re: interprète l\'entrée comme une expression régulière Go sur le nom complet, par exemple re:.*@sha256:.*","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"Les modèles listés ici n\'ajouteront ni ne supprimeront automatiquement les suffixes -thinking / -nothinking.","Models losing positions":"Modèles perdant des positions","Models losing the most positions":"Modèles qui perdent le plus de places","Models not in list, may fail to invoke":"Modèles non listés, peut échouer lors de l\'invocation","Models source":"Source des modèles","Models that are being used but not configured in the system":"Modèles utilisés mais non configurés dans le système","Models that skip thinking suffix processing":"Modèles qui ignorent le traitement des suffixes thinking","Models updated successfully":"Modèles mis à jour avec succès","Models used on this site":"Modèles utilisés sur ce site","models.dev pricing preset":"Prix prédéfinis de models.dev","Modify existing subscription plan configuration":"Modifier la configuration du plan d\'abonnement existant","Module availability":"Disponibilité du module","MokaAI":"MokaAI","Monitor":"Surveiller","Monitor balance, usage, and request volume":"Surveillez le solde, l\'utilisation et le volume de requêtes","Monitored relay requests":"Requêtes relais surveillées","Month":"Mois","Month number":"Numéro du mois","Monthly":"Mensuel","Monthly tokens":"Tokens par mois","months":"mois","Moonshot":"Moonshot","More":"Plus","More actions":"Autres actions","More Apps":"Plus","more mapping":"plus de mappage","More models ({{count}})":"Autres modèles ({{count}})","More rules":"Plus de règles","More templates...":"Autres modèles…","More than 999 days left":"Plus de 999 jours restants","More...":"Plus...","Most-used models in the selected period and category":"Modèles les plus utilisés dans la période et catégorie choisies","Move":"Déplacer","Move {{group}} down":"Déplacer {{group}} vers le bas","Move {{group}} up":"Déplacer {{group}} vers le haut","Move a request header":"Déplacer un en-tête de requête","Move affiliate rewards to your main balance":"Transférer les récompenses d\'affiliation vers votre solde principal","Move fallback to end":"Mettre le repli à la fin","Move Field":"Déplacer le champ","Move Header":"Déplacer l\'en-tête","Move Request Header":"Déplacer un en-tête de requête","Move route down":"Descendre la route","Move route up":"Monter la route","Move source field to target field":"Déplacer le champ source vers le champ cible","ms":"ms","Multi-key channel: Keys will be":"Canal multi-clés : Les clés seront","Multi-Key Management":"Gestion multi-clés","New priority: {{priority}}":"Nouvelle priorité : {{priority}}","New priority: {{priority}} · {{count}} channels affected":"Nouvelle priorité : {{priority}} · {{count}} canaux concernés","New user registration has been disabled by administrator":"L’inscription de nouveaux utilisateurs a été désactivée par l’administrateur","New user sign-up bonus {{quota}}":"Bonus d\'inscription {{quota}}","Multi-key management {{action}} on channel (ID: {{id}})":"Gestion multi-clés {{action}} sur le canal (ID : {{id}})","Multi-Key Mode (multiple keys, one channel)":"Mode multi-clés (plusieurs clés, un canal)","Multi-Key Strategy":"Stratégie multi-clés","Multi-key: Polling rotation":"Multi-clé : Rotation par sondage","Multi-key: Random rotation":"Multi-clé : Rotation aléatoire","Multi-protocol Compatible":"Compatible multi-protocole","Multi-region deployment for stable global access":"Déploiement multirégional pour un accès mondial stable","Multi-step thinking before final answer":"Raisonnement en plusieurs étapes avant la réponse finale","Multi-user management with flexible permission allocation":"Gestion multi-utilisateurs avec attribution de permissions flexible","Multilingual translation and localisation":"Traduction multilingue et localisation","Multimodal":"Multimodal","Multiplier":"Multiplicateur","Multiplier applied when":"Multiplicateur appliqué lorsque","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"Multiplicateur appliqué lorsque {{userGroup}} utilise {{targetGroup}}","Multiplier for audio inputs.":"Multiplicateur pour les entrées audio.","Multiplier for audio outputs.":"Multiplicateur pour les sorties audio.","Multiplier for completion tokens.":"Multiplicateur pour les jetons de complétion.","Multiplier for image processing.":"Multiplicateur pour le traitement d\'image.","Multiplier for prompt tokens.":"Multiplicateur pour les tokens de prompt.","Multipliers for recharge pricing based on user groups.":"Multiplicateurs pour la tarification de recharge basés sur les groupes d\'utilisateurs.","Must be a valid URL":"Doit être une URL valide","Must be at least 8 characters":"Doit contenir au moins 8 caractères","Must be greater than 0":"Doit être supérieur à 0","Must be greater than or equal to 0":"Doit être supérieur ou égal à 0","My Subscriptions":"Mes abonnements","my-status":"mon-statut","MySQL detected":"MySQL détecté","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL est une base de données relationnelle prête pour la production. Gardez vos identifiants en sécurité.","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL est prêt pour la production. Assurez-vous que des sauvegardes automatisées et un utilisateur dédié avec les privilèges minimaux requis sont configurés.","No auto-disabled keys to delete":"Aucune clé désactivée automatiquement à supprimer","N/A":"N/A","Name":"Nom","Name *":"Nom *","Name for this redemption code (1-20 characters)":"Nom pour ce code d\'échange (1-20 caractères)","Name is available":"Nom disponible","Name is not available":"Nom non disponible","Name Matching Rule":"Règle de correspondance","Name must be 64 characters or fewer":"Le nom ne doit pas dépasser 64 caractères","Name must be between {{min}} and {{max}} characters":"Le nom doit contenir entre {{min}} et {{max}} caractères","Name Rule":"Règle de nommage","Name Suffix":"Suffixe du nom","Name the channel and choose the upstream provider.":"Nommez le canal et choisissez le fournisseur amont.","Name the channel, choose the provider, configure API access, and set credentials.":"Nommez le canal, choisissez le fournisseur, configurez l’accès API et définissez les identifiants.","Name, provider type, and availability.":"Nom, type de fournisseur et disponibilité.","name@example.com":"name@example.com","Native Claude Messages plus OpenAI Chat compatibility forwarding.":"Claude Messages natif avec transfert compatible OpenAI Chat.","Native format":"Format natif","Native forwarding":"Transfert natif","Native Gemini routes plus OpenAI Chat and Responses compatibility forwarding.":"Routes Gemini natives avec transfert compatible OpenAI Chat et Responses.","Native OpenAI routes plus optional Claude and Gemini compatibility routes.":"Routes OpenAI natives avec compatibilité Claude et Gemini en option.","Native routes":"Routes natives","Need a redemption code?":"Besoin d\'un code d\'échange ?","Needs API key":"Clé API requise","Negate condition":"Inverser la condition","Negated group":"Groupe inversé","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"JSON imbriqué définissant des règles par groupe pour ajouter (+:), supprimer (-:), ou ajouter des groupes utilisables.","Nested JSON: source group →":"JSON imbriqué : groupe source →","Network connection failed or server not responding":"La connexion réseau a échoué ou le serveur ne répond pas","Network proxy for this channel (supports HTTP, HTTPS, SOCKS5, and SOCKS5H)":"Proxy réseau de ce canal (prend en charge HTTP, HTTPS, SOCKS5 et SOCKS5H)","Never":"Jamais","Never expires":"N\'expire jamais","Never used":"Jamais utilisé","Never used an API Gateway?":"Vous n\'avez jamais utilisé de passerelle API ?","NEW":"NOUVEAU","New API":"New API","New API <noreply@example.com>":"New API <noreply@example.com>","New API Project Repository:":"Dépôt du projet New API :","New API\'s flexible channel lets you configure upstream addresses and authentication per endpoint, choose native forwarding or supported protocol conversions, and configure model listing and balance queries independently":"Le canal flexible de New API permet de configurer les adresses amont et l’authentification par interface, de choisir le transfert natif ou une conversion de protocole prise en charge, et de configurer séparément la liste des modèles et la consultation du solde","New domain: {{domain}}":"Nouveau domaine : {{domain}}","New email verification code":"Code de vérification de la nouvelle adresse","New Format Template":"Modèle nouveau format","New Group":"Nouveau groupe","New metadata":"Nouvelles métadonnées","New model":"Nouveau modèle","New Models ({{count}})":"Nouveaux modèles ({{count}})","New models: all metadata shown below will be imported automatically. No selection is needed.":"Nouveaux modèles : toutes les métadonnées ci-dessous seront importées automatiquement. Aucune sélection nécessaire.","New name will be:":"Le nouveau nom sera :","New Passkeys use the primary domain. Compatible domains keep existing Passkeys working.":"Les nouvelles clés d’accès utilisent le domaine principal. Les domaines compatibles permettent de continuer à utiliser les clés existantes.","New Passkeys use this domain. Enter a domain without https://, a port or a path. An empty field uses the system website address.":"Les nouvelles clés d’accès utilisent ce domaine. Saisissez uniquement le domaine, sans https://, port ni chemin. Un champ vide utilise l’adresse du site système.","New Passkeys will use the new primary domain. The previous domain will be kept so existing Passkeys can still verify.":"Les nouvelles clés d’accès utiliseront le nouveau domaine principal. L’ancien domaine sera conservé pour que les clés existantes restent utilisables.","New password":"Nouveau mot de passe","New Password":"Nouveau mot de passe","New password must be different from current password":"Le nouveau mot de passe doit être différent de l\'actuel","New records include the fields below. Existing fields are kept unless explicitly selected.":"Les nouveaux enregistrements incluent les champs ci-dessous. Les champs existants sont conservés sauf sélection explicite.","New User Quota":"Quota nouvel utilisateur","New value":"Nouvelle valeur","New vendors":"Nouveaux fournisseurs","New version available: {{version}}":"Nouvelle version disponible : {{version}}","NewAPI":"NewAPI","Newly released":"Récemment publiés","Next":"Suivant","Next branch":"Branche suivante","Next page":"Page suivante","Next reset":"Prochaine réinitialisation","No":"Non","No About Content Set":"Aucun contenu « À propos » défini","No access tokens":"Aucun jeton d’accès","No key index specified to delete":"Aucun index de clé à supprimer n\'a été spécifié","No key index specified to disable":"Aucun index de clé à désactiver n\'a été spécifié","No key index specified to enable":"Aucun index de clé à activer n\'a été spécifié","No Active":"Aucun actif","No keys to disable":"Aucune clé à désactiver","No active login sessions":"Aucune session de connexion active","No active system tasks.":"Aucune tâche système active.","No additional type-specific settings for this channel type.":"Aucun paramètre supplémentaire spécifique au type pour ce type de canal.","No amount options configured. Add amounts below to get started.":"Aucune option de montant configurée. Ajoutez des montants ci-dessous pour commencer.","No announcements at this time":"Aucune annonce pour le moment","No announcements yet. Click \\"Add Announcement\\" to create one.":"Aucune annonce pour l\'instant. Cliquez sur « Ajouter une annonce » pour en créer une.","No API Domains yet. Click \\"Add API\\" to create one.":"Aucun domaine API pour l\'instant. Cliquez sur \\"Ajouter une API\\" pour en créer un.","No API key yet":"Aucune clé API pour le moment","No API keys available. Create your first API key to get started.":"Aucune clé API disponible. Créez votre première clé API pour commencer.","No API Keys Found":"Aucune clé API trouvée","No API routes configured":"Aucune route API configurée","No API tokens":"Aucun jeton API","No app usage data available for this model.":"Aucune donnée d\'utilisation d\'application n\'est disponible pour ce modèle.","No apps match the selected filters":"Aucune application ne correspond aux filtres","No Auth":"Sans auth","No auto groups configured":"Aucun groupe automatique configuré","No available channels":"Aucun canal disponible","No available groups in the global Auto order.":"Aucun groupe disponible dans l’ordre Auto global.","No available models":"Aucun modèle disponible","No available Web chat links":"Aucun lien de chat Web disponible","No backup":"Pas de sauvegarde","No base input price":"Aucun prix d’entrée de base","No billing parameters declared":"Aucun paramètre de facturation déclaré","No billing records found":"Aucun enregistrement de facturation trouvé","No capabilities reported for this model.":"Aucune capacité n\'a été signalée pour ce modèle.","No Change":"Aucun changement","No changelog for this version.":"Aucun journal pour cette version.","No changes":"Aucune modification","No changes made":"Aucune modification effectuée","No changes to save":"Aucune modification à enregistrer","No channel is configured. This model will not appear in the model square.":"Aucun canal configuré. Ce modèle ne figurera pas dans le catalogue.","No channel is currently available. This model will not appear in the model square.":"Aucun canal disponible. Ce modèle ne figure pas dans le catalogue.","No channel selected":"Aucun canal sélectionné","No channel type found.":"Aucun type de canal trouvé.","No channels available. Create your first channel to get started.":"Aucun canal disponible. Créez votre premier canal pour commencer.","No channels found":"Aucun canal trouvé","No Channels Found":"Aucun canal trouvé","No channels selected":"Aucun canal sélectionné","No chat presets configured. Click \\"Add chat preset\\" to get started.":"Aucun préréglage de chat configuré. Cliquez sur \\"Ajouter un préréglage de chat\\" pour commencer.","No chat presets match your search":"Aucun préréglage de chat ne correspond à votre recherche","No configured channel models match this metadata rule.":"Aucun modèle de canal ne correspond à cette règle de métadonnées.","No conflict entries available.":"Aucune entrée de conflit disponible.","No conflicts match your search.":"Aucun conflit ne correspond à votre recherche.","No connection info found in clipboard":"Aucune info de connexion trouvée dans le presse-papiers","No console output":"Aucune sortie console","No containers":"Aucun conteneur","No content to copy":"Aucun contenu à copier","No custom groups. Saving will inherit the complete global Auto order.":"Aucun groupe personnalisé. Après l’enregistrement, l’ordre Auto global complet sera hérité.","No custom OAuth providers configured yet.":"Aucun fournisseur OAuth personnalisé configuré pour le moment.","No data":"Aucune donnée","No Data":"Aucune donnée","No data available":"Aucune donnée disponible","No deployments available. Create one to get started.":"Aucun déploiement disponible. Créez-en un pour commencer.","No Deployments Found":"Aucun déploiement trouvé","No description available.":"Aucune description disponible.","No notifications are available to you right now":"Aucune notification n’est disponible pour vous pour le moment","No permission to access users of same or higher level":"Vous n’êtes pas autorisé à consulter les utilisateurs de niveau égal ou supérieur","No permission to change the 2FA settings of users at the same or higher level":"Vous n’êtes pas autorisé à modifier les paramètres 2FA des utilisateurs de niveau égal ou supérieur","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"Aucun niveau de réduction configuré. Cliquez sur « Ajouter un niveau de réduction » pour commencer.","No permission to update users of same or higher permission level":"Vous n’êtes pas autorisé à modifier les utilisateurs de niveau d’autorisation égal ou supérieur","No duplicate keys found":"Aucune clé dupliquée trouvée","No enabled channel key":"Aucune clé de canal active","No enabled groups":"Aucun groupe activé","No enabled tokens available":"Aucun token activé disponible","No encryption":"Aucun chiffrement","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"Aucun point de terminaison configuré. Passez en mode JSON ou ajoutez des lignes pour définir les points de terminaison.","No endpoints inferred from channels":"Aucun point de terminaison déduit des canaux","No extra domains declared":"Aucun domaine supplémentaire déclaré","No FAQ entries available":"Aucune entrée FAQ disponible","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"Aucune entrée FAQ pour l\'instant. Cliquez sur \\"Ajouter une FAQ\\" pour en créer une.","No files match the accepted types.":"Aucun fichier ne correspond aux types acceptés.","No flow data available":"Aucune donnée de flux disponible","No group":"Aucun groupe","No group found.":"Aucun groupe trouvé.","No group-based rate limits configured. Click \\"Add group\\" to get started.":"Aucune limite de taux basée sur les groupes configurée. Cliquez sur \\"Ajouter un groupe\\" pour commencer.","No groups match your search":"Aucun groupe ne correspond à votre recherche","No groups yet. Add a group to get started.":"Aucun groupe pour le moment. Ajoutez un groupe pour commencer.","No header overrides configured.":"Aucune surcharge d\'en-têtes configurée.","No historical system tasks.":"Aucune tâche système dans l’historique.","No history data available":"Aucune donnée historique disponible","No incidents in the last 24 hours":"Aucun incident au cours des dernières 24 heures","No incidents in the last 30 days":"Aucun incident sur les 30 derniers jours","No instances have reported yet.":"Aucune instance ne s’est encore signalée.","No integrity hash":"Aucune empreinte d’intégrité","No integrity verification":"Aucun contrôle d’intégrité","No Inviter":"Pas d\'inviteur","No IP restriction":"Non restreint","No keys found":"Aucune clé trouvée","No latency data available":"Aucune donnée de latence disponible","No linked models":"Aucun modèle associé","No linked OAuth provider is available.":"Aucun fournisseur OAuth associé disponible.","No log entries matched the selected time.":"Aucune entrée de journal ne correspond à l\'heure sélectionnée.","No logs":"Aucun journal","No Logs Found":"Aucun journal trouvé","No mappings configured. Click \\"Add Row\\" to get started.":"Aucun mappage configuré. Cliquez sur « Ajouter une ligne » pour commencer.","No marketplace sources configured.":"Aucune source de marché configurée.","No matches found":"Aucune correspondance trouvée","No matching channels":"Aucun canal associé","No matching icons":"Aucune icône correspondante","No matching items":"Aucun élément correspondant","No matching provider":"Aucun fournisseur correspondant","No matching results":"Aucun résultat correspondant","No matching rules":"Aucune règle correspondante","No matching token and channel usage was found.":"Aucune utilisation correspondante par jeton et canal n\'a été trouvée.","No messages yet":"Pas encore de messages","No missing models found.":"Aucun modèle manquant trouvé.","No model found.":"Aucun modèle trouvé.","No model mappings configured. Click \\"Add Mapping\\" to get started.":"Aucun mappage de modèle configuré. Cliquez sur « Ajouter un mappage » pour commencer.","No model price changes to save":"Aucun changement de prix de modèle à sauvegarder","No models available":"Aucun modèle disponible","No models available in this category":"Aucun modèle disponible dans cette catégorie","No models available. Create your first model to get started.":"Aucun modèle disponible. Créez votre premier modèle pour commencer.","No models can be synced with the current filters. Adjust the search or sync scope.":"Aucun modèle synchronisable avec ces filtres. Modifiez la recherche ou la portée de synchronisation.","No models configured. Use Add model to get started.":"Aucun modèle configuré. Utilisez Ajouter un modèle pour commencer.","No models fetched from upstream":"Aucun modèle récupéré depuis l\'amont","No models fetched yet.":"Aucun modèle récupéré pour l\'instant.","No models found":"Aucun modèle trouvé","No Models Found":"Aucun modèle trouvé","No models found.":"Aucun modèle trouvé.","No models match the selected filters":"Aucun modèle ne correspond aux filtres","No models match these filters":"Aucun modèle ne correspond aux filtres","No valid upstream channel":"Aucun canal en amont valide","No models match your current filters.":"Aucun modèle ne correspond à vos filtres actuels.","No models match your search":"Aucun modèle ne correspond à votre recherche","No models matched your search.":"Aucun modèle ne correspond à votre recherche.","No models returned by the upstream":"Aucun modèle renvoyé en amont","No models selected":"Aucun modèle sélectionné","No models to add":"Aucun modèle à ajouter","No models to copy":"Aucun modèle à copier","No models to remove":"Aucun modèle à supprimer","No models with unset prices":"Aucun modèle sans prix","No new models to add":"Aucun nouveau modèle à ajouter","No new models yet":"Pas encore de nouveaux modèles","No newer version available.":"Aucune version plus récente disponible.","No nodes":"Aucun nœud","No notable climbers right now":"Aucune progression notable pour le moment","No notable drops right now":"Aucune chute notable pour le moment","No parameter overrides configured.":"Aucune surcharge de paramètres configurée.","No Passkey is registered.":"Aucune Passkey n’est enregistrée.","No payment methods available. Please contact administrator.":"Aucun moyen de paiement disponible. Veuillez contacter l\'administrateur.","No payment methods configured":"Aucun mode de paiement configuré","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"Aucune méthode de paiement configurée. Cliquez sur \\"Ajouter une méthode\\" ou utilisez des modèles pour commencer.","No payment methods match your search":"Aucune méthode de paiement ne correspond à votre recherche","No performance data available":"Aucune donnée de performance disponible","No permission to perform this action":"Vous n’avez pas l’autorisation d’effectuer cette action","No plans available":"Aucun plan disponible","No plugins available for binding":"Aucune extension disponible à associer","No preceding rule matched":"Aucune règle précédente ne correspond","No preference":"Aucune préférence","No prefill groups yet":"Aucun groupe de préremplissage pour l\'instant","Not implemented yet":"Pas encore implémenté","No price differences found":"Aucune différence de prix trouvée","No processable upstream model updates for this channel":"Aucune mise à jour de modèle en amont traitable pour ce canal","No products configured. Click \\"Add product\\" to get started.":"Aucun produit configuré. Cliquez sur \\"Ajouter un produit\\" pour commencer.","No products match your search":"Aucun produit ne correspond à votre recherche","Not logged in":"Non connecté","No providers available":"Aucun fournisseur disponible","No Quota":"Aucun quota","No quota limit":"Sans plafond","No ratio differences found":"Aucune différence de ratio trouvée","No recent usage":"Aucune utilisation récente","No records":"Aucun enregistrement","No records found. Try adjusting your filters.":"Aucun enregistrement trouvé. Essayez d\'ajuster vos filtres.","No redemption codes available. Create your first redemption code to get started.":"Aucun code d\'échange disponible. Créez votre premier code d\'échange pour commencer.","No Redemption Codes Found":"Aucun code d\'échange trouvé","No related models available for this channel type":"Aucun modèle associé disponible pour ce type de canal","No release notes provided.":"Aucune note de version fournie.","No releases found.":"Aucune version disponible trouvée.","No Reset":"Pas de réinitialisation","No reset credits":"Aucun crédit de réinitialisation","No reset credits available":"Aucun crédit de réinitialisation disponible","No restriction":"Aucune restriction","No results for \\"{{query}}\\". Try adjusting your search or filters.":"Aucun résultat pour \\"{{query}}\\". Essayez d\'ajuster votre recherche ou vos filtres.","No results found":"Aucun résultat trouvé","No results found.":"Aucun résultat trouvé.","No Retry":"Pas de réessai","No rule for vip billed as default → use the base ratio of default, 1.0 (the 0.8 of vip is not used)":"Pas de règle pour vip facturé sous default → taux de base de default, 1,0 (le 0,8 de vip n’est pas utilisé)","No rule for vip billed as vip → use the base ratio of vip, 0.8":"Pas de règle pour vip facturé sous vip → taux de base de vip, 0,8","No rules yet":"Aucune règle","No rules yet. Add a group below to get started.":"Aucune règle pour le moment. Ajoutez un groupe ci-dessous pour commencer.","No separate media pricing configured.":"Aucune tarification multimédia séparée n’est configurée.","No source available":"Aucun code source disponible","No source changes":"Aucune modification du code","No special ratios configured":"Aucun coefficient spécial configuré","No status code mappings configured.":"Aucun mappage de codes de statut configuré.","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"Ce marchand n’a pas encore de boutique. Définissez une URL de retour puis cliquez sur Créer pour générer votre première paire.","No subscription plans yet":"Aucun plan d\'abonnement pour le moment","No subscription records":"Aucun enregistrement d\'abonnement","No Sync":"Pas de synchronisation","No syncable models":"Aucun modèle synchronisable","No system announcements":"Aucune annonce système","No system tasks yet.":"Aucune tâche système pour le moment.","No task plugins found":"Aucun plugin de tâche trouvé","No token found.":"Aucun jeton trouvé.","No tools configured":"Aucun outil configuré","No Upgrade":"Pas de mise à niveau","No upstream price differences found":"Aucune différence de prix amont trouvée","No upstream ratio differences found":"Aucune différence de ratio amont trouvée","Notifications to receive":"Notifications à recevoir","OAuth provider not found":"Fournisseur OAuth introuvable","No uptime data available":"Aucune donnée de disponibilité disponible","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"Aucun groupe Uptime Kuma pour l\'instant. Cliquez sur « Ajouter un groupe » pour en créer un.","No uptime monitoring configured":"Aucune surveillance de disponibilité configurée","No usage logs available. Logs will appear here once API calls are made.":"Aucun journal d\'utilisation. Les journaux apparaîtront ici une fois les appels API effectués.","No user information available":"Aucune information utilisateur disponible","No user selected":"Aucun utilisateur sélectionné","No users":"Aucun utilisateur","No users available. Try adjusting your search or filters.":"Aucun utilisateur disponible. Essayez d\'ajuster votre recherche ou vos filtres.","No Users Found":"Aucun utilisateur trouvé","No valid custom Auto groups remain. Add a group or restore global Auto.":"Aucun groupe Auto personnalisé valide ne subsiste. Ajoutez un groupe ou restaurez l’Auto global.","No vendor":"Aucun fournisseur","No vendor data available":"Aucune donnée de fournisseur disponible","No vendors found":"Aucun fournisseur trouvé","No verification method is available for this action.":"Aucune méthode de vérification disponible pour cette action.","No version history":"Aucun historique des versions","No X Found":"Aucun X trouvé","Node":"Nœud","Node filters":"Filtres de nœuds","Node Name":"Nom du nœud","Node role":"Rôle du nœud","Nodes reporting from this deployment and their latest heartbeat.":"Nœuds signalés par ce déploiement et leur dernier battement de cœur.","Non-stream":"Non-streaming","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"Les récompenses d’invitation non nulles nécessitent une confirmation de conformité dans les paramètres de la passerelle de paiement.","None":"Aucun","None (plugin declaration)":"Aucune (déclaration du plugin)","noreply@example.com":"noreply@example.com","Normalized:":"Normalisé :","Not available":"Non disponible","Not backed up":"Non sauvegardé","Not bound":"Non lié","OIDC ID is empty!":"L’ID OIDC est vide !","Not configured":"Non configuré","Not configured for some providers":"Tarification non configurée pour certains fournisseurs","Not configured for this provider":"Tarification non configurée pour ce fournisseur","Not declared":"Non déclaré","Not declared by this plugin":"Non déclaré par ce plugin","Not declared; an API key may still be required.":"Non déclarée ; une clé API peut rester nécessaire.","Not Equals":"Différent de","Not found upstream":"Absent de la source","Not in pricing table":"Absent du tableau tarifaire","Not included":"Non inclus","Not installed":"Non installé","Not listed":"Masqué","Not matched":"Aucune correspondance","Online top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"Recharge en ligne réussie, montant ajouté : {{quota}}, montant payé : {{amount}}","Not provided by this source":"Non fourni par cette source","Not recorded":"Non enregistré","Not registered":"Non enregistré","Not set":"Non défini","Not Set":"Non défini","Not set yet":"Non défini","Not shown":"Masqué","Not Started":"Non démarré","Not Submitted":"Non soumis","Not tested":"Non testé","Not used for upstream training by default":"Non utilisé pour l\'entraînement amont par défaut","Not used yet":"Pas encore utilisé","Note":"Note","Notice":"Avis","Notification Email":"E-mail de notification","Notification Method":"Méthode de notification","Notifications":"Notifications","Now a user whose user group is vip creates tokens with different groups and makes one call with each:":"Un utilisateur du groupe vip crée maintenant des jetons avec différents groupes et effectue un appel avec chacun :","Nucleus sampling probability mass":"Masse probabiliste de l\'échantillonnage nucleus","Number":"Nombre","Number of codes to create":"Nombre de codes à créer","Number of completions to generate":"Nombre de complétions à générer","Number of images to generate":"Nombre d\'images à générer","Number of keys to create":"Nombre de clés à créer","Number of times to retry failed requests (0-10)":"Nombre de tentatives de réessai des requêtes échouées (0-10)","Number of tokens per unit quota":"Nombre de jetons par unité de quota","Number of top log probabilities returned per token":"Nombre de log-probabilités retournées par jeton","Number of users invited":"Nombre d\'utilisateurs invités","OAuth":"OAuth","OAuth 2.0 service account":"Compte de service OAuth 2.0","OAuth authorization timed out. Please try again.":"L’autorisation OAuth a expiré. Réessayez.","OAuth authorization was cancelled.":"L’autorisation OAuth a été annulée.","OAuth binding timed out. Please try again.":"La liaison OAuth a expiré. Veuillez réessayer.","OAuth binding window is no longer available":"La fenêtre d’association OAuth n’est plus disponible","OAuth callback URL":"URL de rappel OAuth","OAuth Client ID":"ID client OAuth","OAuth Client Secret":"Secret client OAuth","OAuth failed":"Échec de l\'OAuth","OAuth Integrations":"Intégrations OAuth","OAuth pop-up was blocked":"La fenêtre contextuelle OAuth a été bloquée","OAuth popup storage is unavailable.":"Le stockage de la fenêtre OAuth est indisponible.","OAuth window is no longer available.":"La fenêtre OAuth n’est plus disponible.","Object Prune Rules":"Règles de nettoyage d\'objets","Observability":"Observabilité","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"Obtenez la clé API, l\'ID du commerçant et la paire de clés RSA depuis le tableau de bord Waffo, et configurez l\'URL de rappel.","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: /api/waffo-pancake/webhook":"Obtenez l\'ID marchand, le magasin, le produit et les clés de signature dans le tableau de bord Waffo. URL du Webhook : /api/waffo-pancake/webhook","Ocean Breeze":"Brise océane","of":"sur","of 3:":"sur 3 :","off":"désactivé","Official":"Officiel","Official Claude Messages":"Messages Claude officiels","Official documentation":"Documentation officielle","Official Gemini from OpenAI Chat":"Gemini officiel depuis OpenAI Chat","Official Gemini Native":"Gemini natif officiel","Official OpenAI Chat":"OpenAI Chat officiel","Official OpenAI Embeddings":"Embeddings OpenAI officiels","Official OpenAI Images":"Images OpenAI officielles","Official OpenAI Responses":"Responses OpenAI officiel","Official pricing preset":"Prix officiels prédéfinis","Official Repository":"Dépôt officiel","Official Sync":"Synchronisation Officielle","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"ID Client OIDC","OIDC Client Secret":"Secret Client OIDC","OIDC configuration fetched successfully":"Configuration OIDC récupérée avec succès","OIDC discovery can fill the endpoint fields automatically when the provider supports it.":"La découverte OIDC peut remplir automatiquement les champs de point de terminaison lorsque le fournisseur la prend en charge.","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"URL de découverte OIDC. Cliquez sur \\"Découverte automatique\\" pour récupérer les points de terminaison automatiquement.","OIDC Display Name":"Nom d\'affichage OIDC","OIDC endpoints discovered successfully":"Points de terminaison OIDC découverts avec succès","Old Format Template":"Modèle Ancien Format","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"Ancien format : Remplacement direct. Nouveau format : Prend en charge le jugement conditionnel et les opérations JSON personnalisées.","Ollama":"Ollama","Ollama Models":"Modèles Ollama","One API":"One API","One domain per line":"Un domaine par ligne","One domain per line (only used when domain restriction is enabled)":"Un domaine par ligne (utilisé uniquement lorsque la restriction de domaine est activée)","One IP or CIDR range per line":"Une IP ou plage CIDR par ligne","One IP per line (empty for no restriction)":"Une IP par ligne (laisser vide pour aucune restriction)","one keyword per line":"un mot-clé par ligne","online":"en ligne","Online":"En ligne","Online payment is not enabled. Please contact the administrator.":"Le paiement en ligne n\'est pas activé. Veuillez contacter l\'administrateur.","Online topup is not enabled. Please use redemption code or contact administrator.":"La recharge en ligne n\'est pas activée. Veuillez utiliser un code d\'échange ou contacter l\'administrateur.","Only allow specific email domains":"Autoriser uniquement des domaines d\'e-mail spécifiques","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"Uniquement disponible pour les administrateurs. Lorsque cette option est activée, vous recevrez une notification récapitulative via votre méthode sélectionnée lorsque la vérification planifiée des modèles détecte des changements de modèles en amont ou des échecs de vérification.","Only available for exact matching":"Uniquement pour une correspondance exacte","Only configured combinations are overridden. All other calls keep the billing group base ratio.":"Seules les combinaisons configurées sont remplacées. Tous les autres appels gardent le taux de base du groupe de facturation.","Only configured combinations are overridden. All other calls keep the token group base ratio.":"Seules les combinaisons configurées sont remplacées. Les autres appels conservent le ratio de base du groupe du jeton.","Only enabled parameters are sent with the request.":"Seuls les paramètres activés sont envoyés avec la requête.","Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.":"Saisissez uniquement l’origine du site, par exemple https://api.example.com. N’ajoutez aucun chemin comme /api/user/epay/notify. Laissez vide pour utiliser l’adresse du serveur.","Only exact model names are removed from enabled and disabled channels. Matching rules are not expanded, and channel records are retained.":"Seuls les noms de modèle identiques sont retirés des canaux actifs et désactivés. Les règles de correspondance ne sont pas étendues et les canaux sont conservés.","Only Mine":"Uniquement les miens","Only one catch-all route is allowed for the same incoming path":"Un seul routage de secours est autorisé pour le même chemin d\'entrée","Order is not pending payment and cannot be completed":"La commande n\'est pas en attente de paiement et ne peut pas être finalisée","Order number not provided":"Numéro de commande non fourni","Only one OpenAI Models route is allowed":"Une seule route Modèles OpenAI est autorisée","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.":"Seuls les champs sélectionnés seront écrasés. Vous pouvez relancer l\'assistant de synchronisation si de nouveaux conflits apparaissent.","Only show syncable models":"Afficher les modèles synchronisables","Only successful requests":"Uniquement les requêtes réussies","Only successful requests count toward this limit.":"Seules les requêtes réussies comptent pour cette limite.","Only the changes listed here will be committed. If any write fails, none of these changes are applied.":"Seules les modifications listées seront enregistrées. Si une écriture échoue, aucune ne sera appliquée.","Only the first {{shown}} IDs were recorded":"Seuls les {{shown}} premiers ID ont été enregistrés","Only the first {{shown}} IDs were recorded ({{total}} requested)":"Seuls les {{shown}} premiers ID ont été enregistrés ({{total}} demandés)","Only the last {{value}} log files will be retained; the rest will be deleted.":"Seuls les {{value}} derniers fichiers journaux seront conservés ; le reste sera supprimé.","Only used to find historical logs. New records are available in Audit Logs.":"Uniquement pour consulter les anciens journaux. Les nouveaux événements figurent dans les journaux d’audit.","Oops! Page Not Found!":"Oups ! Page introuvable !","Oops! Something went wrong":"Oups ! Quelque chose s\'est mal passé","Open":"Ouvrir","Open a source model first":"Ouvrez d’abord un modèle source","Open CC Switch":"Ouvrir le commutateur CC","Open filtered model list":"Voir les modèles filtrés","Open in chat":"Ouvrir dans le chat","Open in new tab":"Ouvrir dans un nouvel onglet","Open in New Tab":"Ouvrir dans un nouvel onglet","Open menu":"Ouvrir le menu","Open Query Balance to view the upstream JSON response":"Ouvrez « Consulter le solde » pour voir la réponse JSON amont","Open release":"Ouvrir la version","Open source":"Open source","Open Source":"Open source","Open the io.net console API Keys page":"Ouvrir la page Clés API de la console io.net","Open theme settings":"Ouvrir les paramètres du thème","Open weights":"Poids ouverts","OpenAI":"OpenAI","OpenAI Chat Completions":"OpenAI Chat Completions","OpenAI Chat to Anthropic Messages":"OpenAI Chat vers Anthropic Messages","OpenAI Chat to Gemini Generate Content":"OpenAI Chat vers Gemini Generate Content","OpenAI Chat to OpenAI Responses":"OpenAI Chat vers OpenAI Responses","OpenAI Compatible":"Compatible OpenAI","OpenAI Compatible Upstream":"Amont compatible OpenAI","OpenAI Models route does not support client model rules":"La route Modèles OpenAI ne prend pas en charge les règles de modèles clients","OpenAI Models route does not support pass-through":"La route Modèles OpenAI ne prend pas en charge la transmission directe","OpenAI Models route is required to enable upstream model checks":"La route Modèles OpenAI est requise pour activer la vérification des modèles en amont","OpenAI Models route must use native forwarding":"La route Modèles OpenAI doit utiliser le transfert natif","OpenAI Models upstream path must not contain {model}":"Le chemin amont de la route Modèles OpenAI ne doit pas contenir {model}","OpenAI only":"OpenAI uniquement","OpenAI Organization":"Organisation OpenAI","OpenAI Organization ID (optional)":"Identifiant d\'organisation OpenAI (optionnel)","OpenAI Responses to Gemini Generate Content":"OpenAI Responses vers Gemini Generate Content","OpenAI Responses to OpenAI Chat":"OpenAI Responses vers OpenAI Chat","OpenAI, Anthropic, etc.":"OpenAI, Anthropic, etc.","OpenAI, Anthropic, Google, etc.":"OpenAI, Anthropic, Google, etc.","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"s\'ouvre dans un client externe. Déclenchez-le depuis la barre latérale ou les actions de clé API pour lancer l\'application configurée.","Operate channels":"Exploiter les canaux","Operation":"Opération","operation and charging behavior":"à l’exploitation et à la facturation","Operation audit":"Audit des opérations","Operation Audit Info":"Informations d\'audit d\'opération","Operation cancelled":"Opération annulée","Operation failed":"Opération échouée","Operation successful":"Opération réussie","Operation Type":"Type d\'opération","Operations":"Opérations","Operator":"Auteur de l’opération","Operator Admin":"Admin opérateur","Optimize system for self-hosted single-user usage":"Optimiser le système pour une utilisation auto-hébergée par un seul utilisateur","Optimized network architecture ensures millisecond response times":"Architecture réseau optimisée garantissant des temps de réponse en millisecondes","Optional callback override. Leave blank to use server address":"Remplacement optionnel du callback. Laisser vide pour utiliser l\'adresse du serveur","Optional icon identifier for the login button":"Identifiant d\'icône optionnel pour le bouton de connexion","Optional icon.svg or icon.png shipped next to plugin.js, up to 512 KiB. Stored separately from the source.":"Facultatif : icon.svg ou icon.png livré à côté de plugin.js, jusqu\'à 512 Kio. Stocké séparément de la source.","Optional JSON policy to restrict access based on user info fields":"Politique JSON optionnelle pour restreindre l\'accès en fonction des champs d\'informations utilisateur","Optional minimum recharge amount for this method.":"Montant minimum de recharge optionnel pour cette méthode.","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"Multiplicateur optionnel par groupe d\'utilisateurs utilisé lors du calcul des prix de recharge. Fournissez un objet JSON tel que","Optional note describing this version":"Note facultative décrivant cette version","Optional notes about this channel":"Notes optionnelles sur ce canal","Optional notes about when to use this group":"Notes optionnelles sur le moment d\'utiliser ce groupe","Optional ratio used when upstream cache hits occur.":"Ratio optionnel utilisé en cas de succès du cache en amont.","Optional request-rule multiplier expression. Leave empty when no request rule applies.":"Expression multiplicatrice facultative pour les règles de requête. Laissez vide si aucune règle ne s\'applique.","Optional rule description":"Description facultative de la règle","Optional settings for advanced container configuration.":"Paramètres optionnels pour la configuration avancée du conteneur.","Optional supplementary information (max 100 characters)":"Informations supplémentaires optionnelles (max 100 caractères)","Optional tag for grouping channels":"Étiquette optionnelle pour regrouper les canaux","Optional. Without it, Google picks the region; with it, requests go to the deployment region below.":"Facultatif. Sans ID, Google choisit la région ; avec un ID, les requêtes vont vers la région de déploiement ci-dessous.","Opus Model":"Modèle Opus","Or continue with":"Ou continuer avec","Or enter this key manually:":"Ou entrez cette clé manuellement :","or pick existing":"ou choisir une existante","Order completed successfully":"Commande terminée avec succès","Order History":"Historique des commandes","Order Payment Method":"Moyen de paiement (commande)","org-...":"org-...","Original Model":"Modèle Original","Original value":"Valeur d\'origine","Other":"Autre","Other cases":"Autres cas","Other channels":"Autres canaux","Other groups":"Autres groupes","Other models":"Autres modèles","Other nodes":"Autres nœuds","Other sessions signed out":"Les autres sessions ont été déconnectées","Other Settings":"Autres paramètres","Other tokens":"Autres jetons","Other users":"Autres utilisateurs","Otherwise (the preceding conditions do not match)":"Sinon (les conditions précédentes ne sont pas remplies)","Otherwise → {{name}}":"Sinon → {{name}}","Otherwise the binding is removed.":"Sinon, la liaison est supprimée.","Outage":"Interruption","Output":"Sortie","Output aspect ratio":"Format d\'image de sortie","Output image size":"Taille de l\'image de sortie","Output price":"Prix de sortie","Output Price: High to Low":"Prix de sortie : Du plus élevé au plus bas","Output Price: Low to High":"Prix de sortie : Du plus bas au plus élevé","Output token price for generated tokens.":"Prix des tokens de sortie générés.","Output token rate":"Débit de tokens en sortie","Output tokens":"Jetons de sortie","Output Tokens":"Tokens de sortie","Outside these times: {{condition}}":"En dehors de ces périodes : {{condition}}","Overage limited":"Dépassement limité","overall":"global","Overflow":"Débordement","Overflow items":"Éléments excédentaires","override":"remplacer","Override":"Remplacer","Override auto-discovered endpoint":"Remplacer le point de terminaison auto-découvert","Override matrix":"Matrice de remplacement","Override quota for user “{{name}}”":"Remplacer le quota de « {{name}} »","Override request headers":"Remplacer les en-têtes de requête","Override request headers (JSON format)":"Surcharge des en-têtes de requête (format JSON)","Override request parameters":"Remplacer les paramètres de requête","Override request parameters (JSON format)":"Remplacer les paramètres de requête (format JSON)","Override request parameters. Cannot override":"Remplacer les paramètres de requête. Impossible de remplacer","Override request parameters. Cannot override stream parameter.":"Remplace les paramètres de requête. Impossible de remplacer le paramètre stream.","Override rule: when a vip user is billed as premium, the ratio is 0.3 instead of 0.5":"Règle de remplacement : quand un utilisateur vip est facturé sous premium, le taux est 0,3 au lieu de 0,5","Override Rules":"Règles de remplacement","Password login has been disabled by administrator":"La connexion par mot de passe a été désactivée par l’administrateur","Override the endpoint used for testing. Leave empty to auto detect.":"Remplacer le point de terminaison utilisé pour les tests. Laisser vide pour la détection automatique.","Override user quota":"Remplacer le quota utilisateur","overrides for matching model prefix.":"remplace le tarif si le modèle a ce préfixe.","Overrode user quota from {{from}} to {{to}}":"Quota de l\'utilisateur remplacé de {{from}} à {{to}}","Overview":"Vue d\'ensemble","Password registration has been disabled by administrator, please use third-party account verification":"L’inscription par mot de passe a été désactivée par l’administrateur, veuillez utiliser la vérification par un compte tiers","Overwritten":"Écrasé","Password reset link is invalid or has expired":"Le lien de réinitialisation du mot de passe est invalide ou a expiré","Page":"Page","Page {{current}} of {{total}}":"Page {{current}} sur {{total}}","PaLM":"PaLM","Pan":"Panoramique","Pancake":"Pancake","Param Override":"Remplacement de paramètre","Parameter":"Paramètre","Parameter configuration error":"Erreur de configuration des paramètres","Parameter Override":"Remplacement de paramètre","Parameter override and system prompt are unavailable":"La surcharge des paramètres et le prompt système sont indisponibles","Parameter override must be a valid JSON object":"La substitution de paramètres doit être un objet JSON valide","Parameter override must be valid JSON format":"La substitution de paramètres doit être au format JSON valide","Parameter Override Template (JSON)":"Modèle de remplacement de paramètres (JSON)","Parameter override template must be a JSON object":"Le modèle de remplacement de paramètres doit être un objet JSON","Parameter settings":"Paramètres","parameter.":"paramètre.","Parameters":"Paramètres","Parsed {{count}} service account file(s)":"{{count}} fichier(s) de compte de service analysé(s)","Pause drag demo":"Mettre la démo en pause","Payment amount is too low":"Le montant du paiement est trop faible","Payment cancel redirect URL is not in the trusted domain list":"L\'URL de redirection après annulation du paiement n\'est pas dans la liste des domaines de confiance","Parsed plugin metadata":"Métadonnées du plugin analysées","Payment configuration error":"Erreur de configuration du paiement","Partial Submission":"Soumission partielle","Payment information has not been configured by administrator":"L\'administrateur n\'a pas configuré les informations de paiement","Partly shown":"Affichage partiel","Pass Headers":"Transmettre les en-têtes","Payment method does not exist":"Le mode de paiement n\'existe pas","Pass specified request headers to upstream":"Transmettre les en-têtes de requête spécifiés en amont","Pass Through Body":"Corps de transmission directe","Pass Through Headers":"Transmettre les en-têtes","Pass Through Request Headers":"Transmettre les en-têtes de la requête","Pass through the anthropic-beta header for beta features":"Transmettre l\'en-tête anthropic-beta pour les fonctionnalités bêta","Pass through the include field for usage obfuscation":"Transmettre le champ include pour l\'obfuscation d\'utilisation","Pass through the inference_geo field for Claude data residency region control":"Transmettre le champ inference_geo pour le contrôle de la région de résidence des données Claude","Pass through the inference_geo field for geographic routing":"Transmettre le champ inference_geo pour le routage géographique","Pass through the safety_identifier field":"Transmettre le champ safety_identifier","Pass through the service_tier field":"Transmettre le champ service_tier","Pass through the speed field for Claude inference speed mode control":"Transmettre le champ speed pour le contrôle du mode de vitesse d\'inférence Claude","Pass when key is missing":"Accepter si la clé est absente","Payment success redirect URL is not in the trusted domain list":"L\'URL de redirection après paiement réussi n\'est pas dans la liste des domaines de confiance","Pass-through":"Transmission directe","Pass-Through":"Transmission directe","Pass-through Headers (comma-separated or JSON array)":"En-têtes passthrough (séparés par des virgules ou tableau JSON)","Payment, redemption, subscription, and invitation reward features are disabled. The administrator must confirm compliance terms before enabling them.":"Les fonctions de paiement, d’échange de codes, d’abonnement et de récompense de parrainage sont désactivées. L’administrateur doit confirmer les conditions de conformité avant de les activer.","Pass-through help":"Aide sur la transmission directe","Pass-through requires native forwarding":"La transmission directe nécessite le transfert natif","Passive recovery only":"Récupération passive uniquement","Passkey":"Passkey","Passkey Authentication":"Authentification Passkey","Passkey authentication is disabled.":"L’authentification Passkey est désactivée.","Passkey display name":"Nom affiché pour les Passkeys","Passkey domain change blocked: {{domains}}; affected {{known}}; unknown {{unknown}}":"Modification des domaines de clés d’accès bloquée : {{domains}} ; affectées {{known}} ; domaine inconnu {{unknown}}","Passkey domain update failed":"Échec de la mise à jour des domaines de clés d’accès","Passkey domains":"Domaines des clés d’accès","Passkey is not available in this browser":"Passkey n\'est pas disponible dans ce navigateur","Passkey is not supported in this environment":"Passkey n\'est pas pris en charge dans cet environnement","Passkey is not supported on this device":"Passkey n\'est pas pris en charge sur cet appareil","Passkey is not supported on this device.":"La Passkey n\'est pas prise en charge sur cet appareil.","Passkey Login":"Connexion avec Passkey","Passkey login failed":"Échec de la connexion Passkey","Passkey login was cancelled":"Connexion Passkey annulée","Passkey login was cancelled or timed out":"Connexion Passkey annulée ou expirée","Passkey not supported on this device":"Passkey non prise en charge sur cet appareil","Passkey registered successfully":"Passkey enregistré avec succès","Passkey registration was cancelled":"L\'enregistrement de la Passkey a été annulé","Passkey removed successfully":"Passkey supprimée avec succès","Passkey reset successfully":"Passkey réinitialisée avec succès","Passkey verification failed":"La vérification par Passkey a échoué","Passkey verification is not available in the current state":"La vérification par Passkey n’est pas disponible dans l’état actuel","Passkey verification is not supported in this environment":"La vérification par Passkey n’est pas prise en charge dans cet environnement","Passkey verification was cancelled":"La vérification par Passkey a été annulée","Passkey verification was cancelled or timed out":"La vérification par Passkey a été annulée ou a expiré","Passkey website domain":"Domaine du site pour les Passkeys","Passkeys for removed domains will stop working. Confirm only if affected users can sign in another way.":"Les clés d’accès des domaines supprimés cesseront de fonctionner. Confirmez uniquement si les utilisateurs concernés peuvent se connecter autrement.","Passkeys known to use removed domains: {{amount}}":"Clés d’accès utilisant les domaines supprimés : {{amount}}","Passkeys only work on the website they were created for. This helps prevent other websites from misusing them.":"Les Passkeys fonctionnent uniquement sur le site pour lequel elles ont été créées. Cela empêche d’autres sites de les utiliser à mauvais escient.","Passkeys with an unknown domain that may be affected: {{amount}}":"Clés d’accès de domaine inconnu pouvant être affectées : {{amount}}","Passthrough Template":"Modèle de transmission","Password":"Mot de passe","Password / Access Token":"Mot de passe / Jeton d\'accès","Password authentication is disabled.":"L’authentification par mot de passe est désactivée.","Password changed successfully":"Mot de passe changé avec succès","Password copied to clipboard: {{password}}":"Mot de passe copié dans le presse-papiers : {{password}}","Password has been copied to clipboard":"Le mot de passe a été copié dans le presse-papiers","Password Login":"Connexion par mot de passe","Password must be at least 8 characters":"Le mot de passe doit comporter au moins 8 caractères","Password must be at most 20 characters long":"Le mot de passe doit comporter au maximum 20 caractères","Password must be between 8 and 20 characters":"Le mot de passe doit comporter entre 8 et 20 caractères","Password must contain between 8 and 128 characters.":"Le mot de passe doit contenir entre 8 et 128 caractères.","Password Registration":"Inscription par mot de passe","Password reset and copied to clipboard: {{password}}":"Mot de passe réinitialisé et copié dans le presse-papiers : {{password}}","Password reset: {{password}}":"Mot de passe réinitialisé : {{password}}","Password set successfully":"Mot de passe défini","Password settings have changed. Reload the page and try again.":"Les paramètres du mot de passe ont changé. Rechargez la page et réessayez.","Passwords do not match":"Les mots de passe ne correspondent pas","Passwords don\'t match.":"Les mots de passe ne correspondent pas.","Paste Connection Info":"Coller les infos de connexion","Paste JavaScript source here...":"Collez le code JavaScript ici...","Path":"Chemin","Path not set":"Chemin non défini","Path Regex (one per line)":"Regex du chemin (un par ligne)","Path:":"Chemin :","Pay":"Pay","Pay {{amount}}":"Payer {{amount}}","Per-request Price: High to Low":"Prix par requête : Du plus élevé au plus bas","Per-request Price: Low to High":"Prix par requête : Du plus bas au plus élevé","Plan amount is too low":"Le montant du forfait est trop faible","Pay {{amount}} • Save {{saved}}":"Payer {{amount}} • Économisez {{saved}}","Pay with Balance":"Payer avec le solde","Plan name cannot be empty":"Le nom du forfait ne peut pas être vide","Pay-as-you-go with real-time usage monitoring":"Paiement à l\'usage avec suivi de la consommation en temps réel","Plan price cannot be empty":"Le prix du forfait ne peut pas être vide","Payment":"Paiement","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"Mode agrégateur de paiement — embarquez avec votre propre société enregistrée (entité offshore). Conçu pour les entreprises.","Payment Channel":"Canal de paiement","Payment Gateway":"Passerelle de paiement","Payment initiated":"Paiement initié","Payment Method":"Méthode de paiement","Payment method identifier":"Identifiant du mode de paiement","Payment method identifier is required":"L’identifiant du mode de paiement est requis","Payment method name":"Nom du mode de paiement","Payment method name is required":"Le nom du mode de paiement est requis","Payment method type":"Type de mode de paiement","Payment method type is required":"Le type de méthode de paiement est requis","Payment methods":"Méthodes de paiement","Payment Methods":"Modes de paiement","Please confirm the compliance statement":"Veuillez confirmer la déclaration de conformité","Payment page opened":"Page de paiement ouverte","Payment request failed":"Requête de paiement échouée","Payment return URL":"URL de retour de paiement","Payment return URL is empty. Create the product without a SuccessURL redirect?":"L’URL de retour de paiement est vide. Créer le produit sans redirection SuccessURL ?","Payment type key":"Clé de type de paiement","Payment type key is required":"La clé de type de paiement est requise","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"Les paiements, codes de兑换, forfaits d’abonnement et récompenses d’invitation sont verrouillés jusqu’à ce que l’administrateur racine confirme les conditions de conformité.","Peak":"Pic","Peak KV cache usage":"Utilisation KV maximale","Peak throughput":"Débit de pointe","Peak token pool usage":"Utilisation maximale du pool de tokens","Penalises repetition of frequent tokens":"Pénalise la répétition des jetons fréquents","pending":"en attente","Pending":"En attente","per":"par","Per 1K tokens":"Par 1K tokens","Per 1M tokens":"Par 1M tokens","Per image":"Par image","Per matched model":"Par modèle correspondant","per request":"par requête","Per request":"Par requête","Per Request":"Par demande","Per Second":"Par seconde","Per token":"Par jeton","Per Unit":"Par unité","Per-call":"Par appel","Per-feature metered windows split by model or capability.":"Fenêtres mesurées par fonction, réparties par modèle ou capacité.","Per-group performance":"Performance par groupe","Per-request":"Par requête","Per-request (deprecated)":"Par requête (obsolète)","Per-request (fixed price)":"Par requête (prix fixe)","Per-token":"Par jeton","Per-token (deprecated)":"Par token (obsolète)","Per-token (ratio based)":"Par jeton (basé sur un ratio)","Per-token logit bias map":"Carte de biais des logits par jeton","Percentage:":"Pourcentage :","Performance":"Performances","Please select a product":"Veuillez sélectionner un produit","Performance data is not yet available for this model.":"Aucune donnée de performance n\'est encore disponible pour ce modèle.","Performance health":"Santé des performances","Performance metrics for the last 24 hours":"Indicateurs de performance des dernières 24 heures","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"Les indicateurs de performance présentés ici sont simulés à des fins de prévisualisation et seront remplacés par des données d\'observabilité réelles une fois l\'intégration du backend terminée.","Performance Monitor":"Moniteur de performances","Performance Settings":"Paramètres de performances","Performed {{action}} on user {{username}} (ID: {{id}})":"Action {{action}} effectuée sur l\'utilisateur {{username}} (ID : {{id}})","Period":"Période","Periodically check for upstream model changes":"Vérifier périodiquement les changements de modèles en amont","Periodically checks all channels except manually disabled ones to detect failures and recover channels automatically.":"Vérifie périodiquement tous les canaux sauf ceux désactivés manuellement afin de détecter les pannes et de rétablir automatiquement les canaux.","Periodically checks only channels with auto-disable enabled, excluding manually disabled channels.":"Vérifie périodiquement uniquement les canaux dont la désactivation automatique est activée, en excluant les canaux désactivés manuellement.","Periodically send ping frames to keep streaming connections active.":"Envoyer périodiquement des trames ping pour maintenir les connexions de streaming actives.","Permanently delete your account and all data":"Supprimer définitivement votre compte et toutes les données","Permissions":"Autorisations","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"Autoriser l\'enregistrement de Passkey sur des origines non-HTTPS (recommandé uniquement pour le développement)","Please wait {{seconds}} seconds before requesting another verification code.":"Veuillez patienter {{seconds}} secondes avant de demander un nouveau code de vérification.","Perplexity":"Perplexity","Persist your data file":"Conserver votre fichier de données","Personal":"Personnel","Personal area":"Espace personnel","Personal Center Area":"Espace personnel","Personal info settings":"Paramètres d\'informations personnelles","Personal Settings":"Paramètres personnels","Personal settings and profile management.":"Paramètres personnels et gestion du profil.","Personal use":"Usage personnel","Personal use mode":"Mode usage personnel","Pick a date":"Choisir une date","Pick models and derive the other side with a rule to create request-to-upstream mappings.":"Choisissez des modèles et dérivez l\'autre côté avec une règle pour créer des correspondances requête → amont.","Pick or create both a store and a product before saving.":"Choisissez ou créez à la fois une boutique et un produit avant d’enregistrer.","Ping Interval (seconds)":"Intervalle de ping (secondes)","Plan":"Plan","Plugin metadata contains an unknown field \\"{{field}}\\". If this plugin was downloaded from the official marketplace, it may require a newer version of new-api. Try updating new-api and installing the plugin again.":"Les métadonnées du plugin contiennent un champ inconnu « {{field}} ». Si ce plugin provient de la marketplace officielle, il peut nécessiter une version plus récente de new-api. Mettez à jour new-api puis réinstallez le plugin.","Plan ID":"ID du forfait","Plan Name":"Nom du plan","Plan Price":"Prix du forfait","Plan price must be greater than zero":"Le prix du forfait doit être supérieur à zéro","Plan Quota":"Quota du forfait","Plan Subtitle":"Sous-titre du plan","Plan Title":"Titre du plan","Plan title is required":"Le titre du forfait est requis","Planned action":"Action prévue","Planned maintenance on Friday at 22:00 UTC...":"Maintenance planifiée vendredi à 22:00 UTC...","Platform":"Plateforme","Playground":"Aire de jeux","Playground and chat functions":"Fonctions de terrain de jeu et de discussion","Playground experiments and live conversations.":"Expériences Playground et conversations en direct.","Please agree to the legal terms first":"Veuillez accepter les conditions légales d\'abord","Please complete the security check to continue.":"Veuillez compléter la vérification de sécurité pour continuer.","Please confirm that you understand the consequences":"Veuillez confirmer que vous comprenez les conséquences","Please confirm your password":"Veuillez confirmer votre mot de passe","Possibly an upstream timeout":"Probablement un délai d\'attente en amont","Please enable io.net model deployment service and configure an API key in System Settings.":"Veuillez activer le service de déploiement de modèles io.net et configurer une clé API dans les Paramètres système.","Please enable Two-factor Authentication or Passkey before proceeding":"Veuillez activer l\'authentification à deux facteurs ou une Passkey avant de continuer","Please enter a code.":"Veuillez saisir un code.","Please enter a name":"Veuillez saisir un nom","Please enter a new password":"Veuillez saisir un nouveau mot de passe","Please enter a redemption code":"Veuillez saisir un code de rédemption","Please enter a valid duration":"Veuillez saisir une durée valide","Please enter a valid email address":"Veuillez saisir une adresse e-mail valide","Please enter a valid number":"Veuillez entrer un nombre valide","Please enter a Well-Known URL first":"Veuillez d\'abord saisir une URL Well-Known","Please enter amount":"Veuillez saisir le montant","Please enter an administrator username":"Veuillez saisir un nom d\'utilisateur administrateur","Please enter API key first":"Veuillez saisir la clé API en premier","Please enter chat client name":"Veuillez saisir le nom du client de chat","Please enter email and verification code":"Veuillez saisir l\'email et le code de vérification","Please enter keys first":"Veuillez saisir les clés en premier","Please enter model name":"Veuillez entrer le nom du modèle","Please enter plan title":"Veuillez saisir le titre du plan","Please enter the authentication code.":"Veuillez saisir le code d\'authentification.","Please enter the URL":"Veuillez saisir l\'URL","Please enter the verification code":"Veuillez saisir le code de vérification","Please enter the verification code or backup code":"Saisissez le code de vérification ou un code de secours","Please enter your current password":"Veuillez saisir votre mot de passe actuel","Please enter your email":"Veuillez saisir votre adresse e-mail","Please enter your email first":"Veuillez saisir votre email en premier","Please enter your password":"Veuillez saisir votre mot de passe","Please enter your username":"Veuillez saisir votre nom d’utilisateur","Please enter your username or email":"Veuillez saisir votre nom d’utilisateur ou votre adresse e-mail","Please enter your verification code":"Veuillez saisir votre code de vérification","Please enter your verification code or backup code":"Veuillez saisir votre code de vérification ou votre code de secours","Please fix JSON errors before saving":"Veuillez corriger les erreurs JSON avant d’enregistrer","Please fix the highlighted fields before saving":"Veuillez corriger les champs en surbrillance avant d’enregistrer","Please log in with the appropriate credentials":"Veuillez vous connecter avec les identifiants appropriés","Please select a container":"Veuillez sélectionner un conteneur","Please select a payment method":"Veuillez sélectionner un mode de paiement","Please select a primary model":"Veuillez sélectionner un modèle principal","Please select a subscription plan":"Veuillez sélectionner un plan d\'abonnement","Please select at least one channel":"Veuillez sélectionner au moins un canal","Please select at least one model":"Veuillez sélectionner au moins un modèle","Please select items to delete":"Veuillez sélectionner des éléments à supprimer","Please Select user groups that can access this channel.":"Veuillez sélectionner les groupes d\'utilisateurs qui peuvent accéder à ce canal.","Please set Ollama API Base URL first":"Veuillez d\'abord définir l\'URL de base de l\'API Ollama","Please sign in to view {{module}}.":"Veuillez vous connecter pour voir {{module}}.","Please try again later.":"Veuillez réessayer plus tard.","Please type the following text to confirm:":"Veuillez saisir le texte suivant pour confirmer :","Please upload key file(s)":"Veuillez télécharger le (s) fichier(s) clé (s)","Please wait a moment before trying again.":"Veuillez patienter un instant avant de réessayer.","Please wait a moment, human check is initializing...":"Veuillez patienter un instant, la vérification humaine s\'initialise...","Please wait before editing to avoid overwriting saved values.":"Veuillez patienter avant de modifier afin d\'éviter d\'écraser les valeurs enregistrées.","Please wait before requesting another verification code.":"Veuillez patienter avant de demander un nouveau code.","Please wait for the current generation to complete":"Veuillez attendre la fin de la génération en cours","Plugin":"Plugin","Plugin activation failed":"Échec de l’activation du plugin","Plugin author":"Auteur du plugin","Plugin default":"Valeur par défaut du plugin","Plugin details":"Détails du plugin","Plugin extensions":"Extensions par plugin","Plugin Generation":"Génération du plugin","Plugin icon":"Icône du plugin","Plugin icon exceeds the 512 KiB limit.":"L\'icône du plugin dépasse la limite de 512 Kio.","Plugin icon must be an .svg or .png file.":"L\'icône du plugin doit être un fichier .svg ou .png.","Plugin indexes are fetched by your browser. Installing runs the same review and admission pipeline as a manual upload.":"Les index de plugins sont récupérés par votre navigateur. L’installation suit exactement le même circuit d’examen et d’admission qu’un import manuel.","Plugin installation failed":"Échec de l’installation du plugin","Plugin is still in use":"Le plugin est encore utilisé","Plugin key":"Clé du plugin","Plugin metadata":"Métadonnées du plugin","Plugin sandbox":"Bac à sable du plugin","Plugin saved, activation required":"Plugin enregistré, activation requise","Plugin source":"Source du plugin","Plugin source exceeds the 8 MiB limit.":"Le code du plugin dépasse la limite de 8 Mio.","Plugin uploaded successfully":"Plugin importé avec succès","Plugin version activated":"Version du plugin activée","Price cannot be negative":"Le prix ne peut pas être négatif","Price cannot exceed 9999":"Le prix ne peut pas dépasser 9999","Plugin version deleted":"Version du plugin supprimée","Plugin website":"Site du plugin","Plugin-defined interfaces":"Interfaces définies par le plugin","Plugins":"Extensions","Plugins can access channel credentials. Review the source and differences before installing.":"Les plugins peuvent accéder aux identifiants des canaux. Examinez le code et les différences avant l’installation.","Policy JSON":"JSON de stratégie","Polling":"Sondage","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"Le mode d\'interrogation nécessite Redis et un cache mémoire, sinon les performances seront considérablement dégradées","Poor":"Mauvais","Port":"Port","Port must be a positive integer":"Le port doit être un entier positif","Position {{position}}":"Position {{position}}","Post Delta":"Delta post-calcul","PostgreSQL detected":"PostgreSQL détecté","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL offre une fiabilité avancée et une intégrité des données pour les charges de travail en production.","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL offre de solides garanties de fiabilité. Vérifiez votre fenêtre de maintenance et vos politiques de rétention avant la mise en production.","Power AI applications, manage digital assets, connect the Future":"Propulser les applications IA, gérer les actifs numériques, connecter l\'Avenir","Powerful API Management Platform":"Plateforme puissante de gestion d\'API","Pre-Consume for Free Models":"Pré-consommation pour les modèles gratuits","Pre-consumed":"Pré-consommé","Pre-Consumed Quota":"Quota pré-consommé","Pre-release":"Version préliminaire","Prefer the original channel, allow switching":"Préférer le canal initial, autoriser le repli","Preference saved as {{pref}}, but no active subscription. Requests will be rejected.":"Préférence enregistrée comme {{pref}}, mais aucun abonnement actif. Les demandes seront rejetées.","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"Préférence enregistrée comme {{pref}}, mais aucun abonnement actif. Le portefeuille sera utilisé automatiquement.","Preferences":"Préférences","Prefill Group Management":"Gestion des groupes de préremplissage","Prefill Groups":"Groupes de préremplissage","Prefill groups help you keep complex configurations in sync.":"Les groupes de préremplissage vous aident à maintenir des configurations complexes synchronisées.","Prefix":"Préfixe","Prefix cache hit rate":"Taux de succès du cache de préfixes","Prefix Match":"Correspondance de préfixe","Prefix used when displaying prices":"Préfixe utilisé lors de l\'affichage des prix","Prefix/Suffix Text":"Texte préfixe/suffixe","Premium chat models":"Modèles de chat Premium","Premium plan, half price":"Offre premium, moitié prix","Preparing chat keys…":"Préparation des clés de chat…","Preparing conversion...":"Préparation de la conversion…","Preparing your chat link, please try again in a moment.":"Préparation de votre lien de discussion, veuillez réessayer dans un instant.","Preparing your chat link…":"Préparation de votre lien de chat…","Prepend":"Ajouter au début","Prepend to Start":"Ajouter au début","Prepend value to array / string / object start":"Ajouter la valeur au début du tableau / chaîne / objet","Presence Penalty":"Pénalité de présence","Preserve the original field when applying this rule":"Conserver le champ original lors de l’application de cette règle","Preserve upstream-specific fields when API formats match; bypasses model redirect, parameter override and format conversion":"Conserve les champs propres au service amont si les formats API correspondent ; désactive la redirection de modèle, la substitution de paramètres et la conversion de format","Preset groups":"Groupes prédéfinis","Preset recharge amounts (JSON array)":"Montants de recharge prédéfinis (tableau JSON)","Preset recharge amounts displayed to users":"Montants de recharge prédéfinis affichés aux utilisateurs","Preset Template":"Modèle prédéfini","Preset templates":"Modèles prédéfinis","preset.anthropic":"Anthropic","preset.default":"Par défaut","preset.forest-whisper":"Murmure de la forêt","Product configuration error":"Erreur de configuration du produit","Product does not exist":"Le produit n\'existe pas","preset.lake-view":"Vue sur le lac","preset.lavender-dream":"Rêve de lavande","preset.ocean-breeze":"Brise océane","preset.rose-garden":"Roseraie","preset.simple-large":"Simple & Grands Caractères","preset.sunset-glow":"Lueur du couchant","preset.underground":"Souterrain","Press Enter or comma to add tags":"Appuyez sur Entrée ou sur la virgule pour ajouter des tags","Press Enter to use \\"{{value}}\\"":"Appuyez sur Entrée pour utiliser « {{value}} »","Prevent server-side request forgery attacks":"Prévenir les attaques de falsification de requêtes côté serveur","Preview":"Aperçu","Preview again":"Actualiser l’aperçu","Preview changes":"Prévisualiser","Preview excludes group ratios and request rule multipliers.":"L’aperçu exclut les coefficients de groupe et les multiplicateurs des règles de requête.","Preview fields":"Aperçu des champs","Preview is unavailable for custom expressions.":"L’aperçu n’est pas disponible pour les expressions personnalisées.","Preview metadata first":"Prévisualisez d’abord les métadonnées","Preview price changes":"Aperçu des changements de tarifs","Preview pricing conversion":"Aperçu de la conversion des tarifs","Preview selected changes":"Prévisualiser la sélection","Preview unavailable":"Aperçu indisponible","Preview upstream model changes":"Aperçu des changements de modèles en amont","Previous":"Précédent","Previous branch":"Branche précédente","Previous page":"Page précédente","Previous permissions":"Autorisations précédentes","Previous value":"Valeur précédente","Price":"Prix","Price ($/1K calls)":"Prix ($/1K appels)","Price (local currency / USD)":"Prix (devise locale / USD)","Price display":"Affichage des prix","Price display mode":"Mode d\'affichage des prix","Price estimation":"Estimation du prix","Price estimation description":"Après avoir configuré le type de matériel, l\'emplacement de déploiement, le nombre de réplicas, etc., le prix sera calculé automatiquement.","Price examples":"Exemples de prix","Price ID":"ID du prix","Price mode (USD per 1M tokens)":"Mode de tarification (USD par 1M de jetons)","Price per image":"Prix par image","Price per request":"Prix par requête","Price source":"Source des prix","Price summary":"Résumé des prix","price_xxx":"price_xxx","Price:":"Prix :","Prices are in {{currency}}, with units shown below. Use USD when editing expressions directly.":"Prix en {{currency}}, selon les unités indiquées ci-dessous. Utilisez les USD pour modifier directement les expressions.","Prices changed while preparing the conversion. Try again.":"Les prix ont changé pendant la préparation. Réessayez.","Prices for each set of conditions":"Prix selon les conditions","Prices shown per":"Prix affichés par","Prices shown per {{unit}} tokens":"Prix affichés pour {{unit}} tokens","Prices shown per usage unit":"Prix affichés par unité d\'utilisation","Prices synced successfully":"Prix synchronisés avec succès","Prices vary by usage tier and request conditions":"Les prix varient selon le palier d’utilisation et les conditions de requête","Pricing":"Tarification","Pricing & Display":"Tarification et Affichage","Pricing by condition":"Tarification par condition","Pricing by Group":"Tarification par groupe","Pricing conditions":"Conditions tarifaires","Pricing Configuration":"Configuration de la tarification","Purchase limit cannot be negative":"La limite d\'achat ne peut pas être négative","Purchase limit for this plan has been reached":"La limite d\'achat de ce forfait a été atteinte","Pricing currency":"Devise de tarification","Pricing group example":"Exemple de groupe tarifaire","Pricing groups":"Groupes tarifaires","Pricing mode":"Mode de tarification","Quality {{quality}}":"Qualité {{quality}}","Pricing must be a JSON object":"Les tarifs doivent être un objet JSON","Pricing Ratios":"Ratios de tarification","Pricing rule {{number}}":"Règle de tarification {{number}}","Pricing rules":"Règles de tarification","Pricing tier {{name}}":"Palier tarifaire {{name}}","Pricing Type":"Type de tarification","Primary Model":"Modèle principal","Primary Passkey domain":"Domaine principal","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"Priorise la réutilisation du dernier canal ayant réussi, basé sur les clés extraites du contexte de la requête (routage persistant)","Priority":"Priorité","Priority (Default)":"Priorité (Par défaut)","Priority level from 0 (lowest) to 10 (highest), default is 5":"Niveau de priorité de 0 (le plus bas) à 10 (le plus élevé), la valeur par défaut est 5","Priority order for automatic group assignment. New tokens rotate through this list.":"Ordre de priorité pour l\'attribution automatique des groupes. Les nouveaux jetons alternent dans cette liste.","Priority order for tokens in the auto group. The system tries groups from top to bottom.":"Ordre de priorité pour les jetons du groupe auto. Le système essaie les groupes de haut en bas.","Privacy":"Confidentialité","Privacy Policy":"Politique de confidentialité","Private Deployment URL":"URL de déploiement privé","Processed requests":"Requêtes traitées","Processing OAuth response...":"Traitement de la réponse OAuth...","Processing...":"Traitement...","Quota change amount cannot be zero":"Le montant de la modification de quota ne peut pas être nul","Product":"Produit","Product ID":"ID du produit","Product ID is required":"L\'ID de produit est requis","Product Name":"Nom du produit","Productivity":"Productivité","Products":"Produits","Professional team providing 24/7 technical support":"Équipe professionnelle offrant un support technique 24h/24 et 7j/7","Profile":"Profil","Profile updated successfully":"Profil mis à jour avec succès","Programming":"Programmation","Progress":"Progression","Project":"Élément","Promote":"Promouvoir","Promotion codes":"Codes promotionnels","Prompt":"Invite","Prompt (EN)":"Invite (EN)","Quota unit is misconfigured":"L\'unité de quota est mal configurée","Prompt cache ratio":"Ratio de cache d\'invite","Quota value cannot be negative":"La valeur du quota ne peut pas être négative","Quota value exceeds valid range, maximum is {{max}}":"La valeur du quota dépasse la plage valide, le maximum est {{max}}","Prompt caching":"Cache d\'invites","Prompt Caching":"Mise en cache des invites","Prompt Details":"Détails de l\'invite","Prompt price ($/1M tokens)":"Prix du prompt ($/1M de jetons)","Prompt text filtering is active with the current form values.":"Le filtrage des prompts est actif avec les valeurs du formulaire.","Prompt text filtering needs both switches enabled and a non-empty keyword list.":"Le filtrage nécessite les deux options activées et une liste de mots-clés non vide.","Proprietary":"Propriétaire","Protect login and registration with Cloudflare Turnstile":"Protéger la connexion et l\'inscription avec Cloudflare Turnstile","Provide a JSON object where each key maps to an endpoint definition.":"Fournissez un objet JSON où chaque clé correspond à une définition de point de terminaison.","Provide a valid URL starting with http:// or https://":"Fournissez une URL valide commençant par http:// ou https://","Provide Markdown, HTML, or an external URL for the privacy policy":"Fournir du Markdown, du HTML ou une URL externe pour la politique de confidentialité","Provide Markdown, HTML, or an external URL for the user agreement":"Fournir du Markdown, du HTML ou une URL externe pour l\'accord utilisateur","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"Fournir des remplacements de sécurité par catégorie au format JSON. Utilisez `default` pour les valeurs de secours.","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"Fournir des remplacements d\'en-tête par modèle au format JSON. Utile pour activer des fonctionnalités bêta telles que les fenêtres de contexte étendues.","Provider":"Fournisseur","Provider & data privacy":"Fournisseur & confidentialité","Provider created successfully":"Fournisseur créé avec succès","Provider deleted successfully":"Fournisseur supprimé avec succès","Provider ID":"ID du fournisseur","Provider Name":"Nom du fournisseur","Provider source":"Origine du fournisseur","Provider type (OpenAI, Anthropic, etc.)":"Type de fournisseur (OpenAI, Anthropic, etc.)","Provider updated successfully":"Fournisseur mis à jour avec succès","Provider-specific endpoint, account, and compatibility settings.":"Paramètres de point d’accès, de compte et de compatibilité propres au fournisseur.","Proxy Address":"Adresse du proxy","Proxy address must use HTTP, HTTPS, SOCKS5, or SOCKS5H and include a valid host":"L’adresse du proxy doit utiliser HTTP, HTTPS, SOCKS5 ou SOCKS5H et contenir un hôte valide","Prune Object Items":"Nettoyer les éléments objet","Prune object items by conditions":"Nettoyer les éléments d\'objets par conditions","Prune Rule (string or JSON object)":"Règle de nettoyage (chaîne ou objet JSON)","Public base URL for async task media. Supports a dedicated media domain, port, or Nginx path prefix; falls back to Server Address when empty.":"URL de base publique des médias des tâches asynchrones. Prend en charge un domaine média, un port ou un préfixe de chemin Nginx dédié ; utilise l’adresse du serveur si ce champ est vide.","Public model catalog and pricing page.":"Page publique du catalogue des modèles et des tarifs.","Public rankings page based on live usage data.":"Page publique des classements basée sur les données d\'utilisation réelles.","Publish Date":"Date de publication","Publish the request names and remove the raw upstream names from the model list":"Publier les noms de requête et retirer les noms bruts en amont de la liste des modèles","Published":"Publié","Published as {{model}}":"Publié sous {{model}}","Published at":"Date de publication","Published models, groups, and model remapping rules.":"Modèles publiés, groupes et règles de remappage des modèles.","Recalculated from tokens: tokens {{tokens}}, model ratio {{model_ratio}}, group ratio {{group_ratio}}, other multiplier {{other_multiplier}}":"Recalculé à partir des tokens : tokens {{tokens}}, ratio du modèle {{model_ratio}}, ratio du groupe {{group_ratio}}, autre multiplicateur {{other_multiplier}}","Published:":"Publié :","Pull":"Télécharger","Pull model":"Télécharger le modèle","Pulling...":"Téléchargement en cours...","Purchase Limit":"Limite d\'achat","Purchase limit reached":"Limite d\'achat atteinte","Purchase Subscription":"Acheter un abonnement","QR Code Image URL":"URL de l\'image du code QR","QR code is not configured. Please contact support.":"Le code QR n\'est pas configuré. Veuillez contacter le support.","Quantity":"Quantité","QuantumNous":"QuantumNous","Query":"Query","Query Balance":"Solde des requêtes","Query Param":"Paramètre de requête","Querying...":"Recherche en cours...","Question":"Question","Queued":"En file","Quick actions":"Actions rapides","Quick insert common payment methods":"Insérer rapidement les méthodes de paiement courantes","Quick insert payment entries":"Insérer rapidement des entrées de paiement","Quick options":"Options rapides","Quick Range":"Plage rapide","Quick Setup from Preset":"Configuration rapide à partir d\'un préréglage","Quota":"Quota","Quota ({{currency}})":"Quota ({{currency}})","Quota adjusted successfully":"Quota ajusté avec succès","Quota adjustment details":"Détails de la modification du quota","Redemption code count must be greater than 0":"Le nombre de codes d\'échange doit être supérieur à 0","Quota after adjustment":"Quota après modification","Quota before adjustment":"Quota avant modification","Quota clamped":"Quota plafonné","Redemption code name length must be between 1-20":"Le nom du code d\'échange doit contenir entre 1 et 20 caractères","Quota consumed before charging users":"Quota consommé avant de facturer les utilisateurs","Quota Distribution":"Distribution des quotas","Quota given to invited users":"Quota attribué aux utilisateurs invités","Quota given to invited users ({{formattedQuota}})":"Quota attribué aux utilisateurs invités ({{formattedQuota}})","Quota given to users who invite others":"Quota attribué aux utilisateurs qui invitent d\'autres personnes","Quota given to users who invite others ({{formattedQuota}})":"Quota attribué aux utilisateurs qui invitent d\'autres personnes ({{formattedQuota}})","Quota must be a positive number":"Le quota doit être un nombre positif","Quota must be zero or greater":"Le quota ne peut pas être négatif","Redemption failed, please try again later":"Échec de l’échange, veuillez réessayer plus tard","Redemption quota must be positive":"Le quota du code d\'échange doit être positif","Quota Per Unit":"Quota par unité","Quota Reset":"Réinitialisation du quota","Quota saturation protection triggered":"Protection contre la saturation du quota déclenchée","Quota Settings":"Paramètres de quota","Quota Types":"Types de quotas","Quota unchanged":"Quota inchangé","Quota update failed":"Échec de la mise à jour du quota","Quota:":"Quota :","Radius":"Rayon","Random":"Aléatoire","Randomly select a key from the pool for each request":"Sélectionner aléatoirement une clé du pool pour chaque requête","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"Les données de classement sont actuellement simulées à des fins d\'aperçu et seront remplacées par des analyses en direct une fois l\'intégration backend livrée.","Rankings":"Classements","Rate Limit Windows":"Fenêtres de limitation","Rate Limited":"Limitation de débit","Rate Limiting":"Limitation du débit","Rate limits":"Limites de débit","Ratio":"Ratio","Ratio applied to audio completions for streaming models.":"Ratio appliqué aux complétions audio pour les modèles de streaming.","Ratio applied to audio inputs where supported by the upstream model.":"Ratio appliqué aux entrées audio lorsque pris en charge par le modèle amont.","Ratio applied when creating cache entries for supported models.":"Ratio appliqué lors de la création d\'entrées de cache pour les modèles pris en charge.","Ratio mode":"Mode de ratio","Ratio overrides for users of this group":"Remplacements de taux pour les utilisateurs de ce groupe","Ratio overrides when billed as this group":"Remplacements de taux lors de la facturation sous ce groupe","Ratio Type":"Type de ratio","Ratio: {{value}}":"Ratio : {{value}}","Ratios synced successfully":"Ratios synchronisés avec succès","Raw expression":"Expression brute","Raw expressions and presets use USD. Currency selection only converts visual price inputs and monetary previews.":"Les expressions brutes et les préréglages utilisent les USD. Le choix de devise convertit uniquement les prix de l’éditeur visuel et les aperçus des montants.","Raw JSON":"JSON brut","Raw Quota":"Quota brut","Raw response":"Reponse brute","Re-enable on success":"Réactiver en cas de succès","Re-login":"Se reconnecter","Read channels":"Lire les canaux","Ready":"Prêt","Ready to initialize":"Prêt à initialiser","Ready to simplify":"Prêt à simplifier","Real exchange rate between USD and your payment gateway currency":"Taux de change réel entre l\'USD et la devise de votre passerelle de paiement","Realtime pricing must be converted manually.":"Les tarifs Realtime doivent être convertis manuellement.","Reason":"Raison","Reason:":"Raison :","Reasoning":"Raisonnement","Reasoning Effort":"Effort de raisonnement","Received":"Reçu","Regular administrators cannot promote other users to administrator":"Les administrateurs ordinaires ne peuvent pas promouvoir d’autres utilisateurs administrateurs","Received amount":"Montant reçu","Recent maintenance tasks running across instances and their execution status.":"Tâches de maintenance récentes exécutées sur les instances et leur état d\'exécution.","Recent success-rate samples; gray bars indicate missing data.":"Échantillons récents du taux de réussite ; les barres grises indiquent des données manquantes.","Recently completed or failed system task runs.":"Exécutions de tâches système récemment terminées ou échouées.","Recently launched models":"Modèles récemment lancés","Recently launched models gaining traction":"Modèles récemment publiés et en forte progression","Recharge":"Recharger","Recharge Amount":"Montant de la recharge","Recharge Amount (USD)":"Montant de la recharge (USD)","Recommended":"Recommandé","Recommended actions":"Actions recommandées","Recommended to keep this high to avoid upstream throttling.":"Il est recommandé de maintenir cette valeur élevée pour éviter la limitation en amont.","Record IP Address":"Enregistrer l\'adresse IP","Record quota usage":"Enregistrer l\'utilisation du quota","Recover auto-disabled channels only":"Restaurer uniquement les canaux désactivés automatiquement","Recursion Strategy":"Stratégie de récursion","Recursive":"Récursif","Redeem":"Utiliser","Redeem codes":"Échanger des codes","Redeemed":"Utilisé","Redeemed at":"Utilisé le","Redeemed By":"Utilisé par","Redeemed:":"Utilisé :","redemption code":"code d\'échange","Redemption Code":"Code d\'échange","Redemption code deleted successfully":"Code d\'échange supprimé avec succès","Redemption code disabled successfully":"Code d\'échange désactivé avec succès","Redemption code enabled successfully":"Code d\'échange activé avec succès","Redemption code updated successfully":"Code d\'échange mis à jour avec succès","Redemption code(s) created successfully":"Code(s) d\'échange créé(s) avec succès","Redemption codes":"Codes d’échange","Redemption Codes":"Codes d\'échange","Redemption codes are disabled until the administrator confirms compliance terms.":"Les codes de兑换 sont désactivés jusqu’à ce que l’administrateur confirme les conditions de conformité.","Redemption codes created":"Codes d’échange créés","redemption codes.":"codes de rachat.","Redemption failed":"Rédemption échouée","Redemption successful! Added: {{quota}}":"Échange réussi ! Ajouté : {{quota}}","Redirect {{model}}":"Rediriger {{model}}","Redirect fetched upstream names to the names your users call.":"Redirigez les noms en amont récupérés vers les noms utilisés par vos utilisateurs.","Redirect panel":"Panneau de redirection","Redirect URL":"URL de redirection","Redirecting to chat page...":"Redirection vers la page de discussion...","Redirecting to Creem checkout...":"Redirection vers la caisse Creem...","Redirecting to GitHub...":"Redirection vers GitHub...","Redirecting to payment page...":"Redirection vers la page de paiement...","Redirecting to sign in in {{seconds}} seconds.":"Redirection vers la connexion dans {{seconds}} secondes.","Redirects to {{model}}":"Redirige vers {{model}}","Reduces cache hit rate":"Réduit le taux de succès du cache","Reduces repeated wording":"Réduit les formulations répétées","Reference Video":"Vidéo de référence","Referral link:":"Lien de parrainage :","Referral Program":"Programme de parrainage","Referral reward transfer is disabled until the administrator confirms compliance terms.":"Le transfert des récompenses de parrainage est désactivé jusqu’à ce que l’administrateur confirme les conditions de conformité.","Refine models by provider, group, type, and tags.":"Affinez les modèles par fournisseur, groupe, type et tags.","Refresh":"Actualiser","Refresh Cache":"Actualiser le cache","Refresh credential":"Actualiser l\'identifiant","Refresh details":"Actualiser les détails","Refresh failed":"Échec de l\'actualisation","Refresh failed. Showing the last successful snapshot.":"Actualisation échouée. Affichage du dernier instantané réussi.","Refresh interval (minutes)":"Intervalle d\'actualisation (minutes)","Refresh preview":"Actualiser l’aperçu","Refresh Stats":"Actualiser les statistiques","Refresh the list and try again.":"Actualisez la liste et réessayez.","Refresh the preview before trying again; some changes may already have been saved.":"Actualisez l’aperçu avant de réessayer ; certains changements ont peut-être déjà été enregistrés.","Refreshing...":"Actualisation...","Refund":"Remboursement","Refund Details":"Détails du remboursement","Regenerate":"Régénérer","Regenerate Backup Codes":"Régénérer les codes de secours","Regenerated two-factor backup codes":"Codes de secours à deux facteurs régénérés","Regenerating immediately invalidates any existing token.":"La régénération invalide immédiatement tout jeton existant.","Regex":"Regex","Regex Pattern":"Expression régulière","Regex Replace":"Remplacement regex","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"Enregistrez chaque URL dans l’emplacement webhook correspondant au mode test ou production dans le tableau de bord Pancake. Des points de terminaison séparés évitent que le trafic de test crédite accidentellement les comptes de production.","Register Passkey":"Enregistrer un Passkey","Registered":"Enregistré","Registered a passkey":"Passkey enregistré","Registration Enabled":"Inscription activée","Registration flow expired. Please try again.":"Le processus d’inscription a expiré. Veuillez réessayer.","Registry (optional)":"Registre (optionnel)","Registry secret":"Secret du registre","Registry username":"Nom d\'utilisateur du registre","Reinstall latest":"Réinstaller la dernière","Reject Reason":"Raison du rejet","Release details":"Détails de la version","Release to insert a new priority tier":"Relâcher pour insérer un nouveau niveau de priorité","Release to join priority {{priority}}":"Relâcher pour rejoindre la priorité {{priority}}","Released":"Sorti","Reload pricing":"Recharger les tarifs","Reload vendor details":"Recharger les informations","Relying Party Display Name":"Nom d\'affichage de la partie de confiance","Relying Party ID":"ID de la partie de confiance","Remaining":"Restant","Remaining percentage":"Pourcentage restant","Remaining quota":"Quota restant","Remaining Quota ({{currency}})":"Quota restant ({{currency}})","Remaining quota units":"Unités de quota restantes","Remaining:":"Restant :","Remark":"Remarque","Remind me once when my balance drops below the threshold":"Me prévenir une fois lorsque mon solde passe sous le seuil","Remind users through their chosen notification method when their balance drops below the threshold":"Prévenir les utilisateurs par le mode de notification de leur choix lorsque leur solde passe sous le seuil","Reminder threshold":"Seuil de rappel","Reminder threshold cannot be negative":"Le seuil de rappel ne peut pas être négatif","Remove":"Supprimer","Remove {{group}}":"Supprimer {{group}}","Remove {{value}}":"Retirer {{value}}","Remove ${{amount}}":"Supprimer ${{amount}}","Remove all custom prices, ratios and billing expressions for these exact model names. Built-in pricing may become effective again.":"Supprime tous les prix, coefficients et expressions de facturation personnalisés pour ces noms exacts. Les prix intégrés peuvent redevenir actifs.","Remove all log entries created before the selected timestamp.":"Supprimer toutes les entrées de journal créées avant l\'horodatage sélectionné.","Remove attachment":"Supprimer la pièce jointe","Remove branch":"Supprimer la branche","Remove compatible Passkey domains?":"Supprimer des domaines compatibles ?","Remove condition":"Supprimer la condition","Remove domains":"Supprimer les domaines","Remove Duplicates":"Supprimer les doublons","Remove end condition":"Supprimer la borne de fin","Remove filter":"Supprimer le filtre","Remove functionResponse.id field":"Supprimer le champ functionResponse.id","Remove mapped targets":"Retirer les cibles mappées","Remove Models":"Supprimer des modèles","Remove negation":"Annuler l’inversion","Remove node filter":"Supprimer le filtre de nœud","Remove Passkey":"Supprimer le Passkey","Remove Passkey?":"Supprimer la clé d\'accès ?","Remove rule group":"Supprimer le groupe de règles","Remove saved price":"Supprimer le prix enregistré","Remove source {{name}}":"Supprimer la source {{name}}","Remove start condition":"Supprimer la borne de début","Remove string prefix":"Supprimer le préfixe de la chaîne","Remove string suffix":"Supprimer le suffixe de la chaîne","Remove the target field":"Supprimer le champ cible","Remove this model’s custom pricing and use the built-in defaults. A model without a default may become unpriced.":"Supprime les tarifs personnalisés et rétablit les valeurs par défaut. Un modèle sans valeur par défaut peut se retrouver sans tarif.","Remove tier":"Supprimer le palier","Removed":"Supprimé","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"{{removed}} clé(s) en double supprimée(s). Avant : {{before}}, Après : {{after}}","Removed an OAuth binding for the user":"Liaison OAuth de l\'utilisateur supprimée","Removed models":"Modèles retirés","Removed Models ({{count}})":"Modèles supprimés ({{count}})","Removed models will no longer be available through this channel. Select removals explicitly.":"Les modèles retirés ne seront plus disponibles via ce canal. Sélectionnez explicitement ceux à retirer.","Removed settings":"Paramètres supprimés","Removes MjProxy flags such as --fast, --relax, and --turbo from user prompts.":"Supprime les drapeaux MjProxy tels que --fast, --relax et --turbo des prompts utilisateur.","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"La suppression de la clé d\'accès (Passkey) vous obligera à vous connecter avec votre mot de passe la prochaine fois. Vous pouvez vous réinscrire à tout moment.","Rename":"Renommer","Rename deployment":"Renommer le déploiement","Rename failed":"Échec du renommage","Renamed an access token":"Jeton d’accès renommé","Renamed successfully":"Renommé avec succès","Renaming metadata does not rename channel models or move pricing. Existing prices stay with the original model name.":"Renommer les métadonnées ne renomme pas les modèles des canaux et ne déplace pas les tarifs, qui restent liés au nom d’origine.","Reorder channel {{id}}":"Réordonner le canal {{id}}","Repair":"Réparer","Repair Channel Consistency":"Réparer la cohérence des canaux","Repair channel consistency?":"Réparer la cohérence des canaux ?","Repeat the administrator password":"Répéter le mot de passe administrateur","Replace":"Remplacer","Replace {{find}} with {{replaceWith}}":"Remplacer {{find}} par {{replaceWith}}","Replace all existing keys":"Remplacer toutes les clés existantes","Replace channel models":"Remplacer les modèles du canal","Replace forwarding routes?":"Remplacer les routes de transfert ?","Replace mode: Will completely replace all existing keys":"Mode remplacement : Remplacera complètement toutes les clés existantes","Replace text":"Remplacer du texte","Replace with":"Remplacer par","Replace With":"Remplacer par","replaced":"remplacé","Replacement Model":"Modèle de remplacement","Replay drag demo":"Revoir la démonstration","Replica count":"Nombre de réplicas","Replicate":"Replicate","Report an issue":"Signaler un problème","request":"requête","Request":"Requête","Request & Response":"Requête et réponse","Request Body Disk Cache":"Cache disque du corps de requête","Request Body Field":"Champ du corps de requête","Request Body Memory Cache":"Cache mémoire du corps de requête","Request body must be a JSON object.":"Le corps de la requête doit être un objet JSON.","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"Le passage du corps de requête est activé. Le corps sera envoyé directement en amont sans conversion.","Request checks":"Contrôle des requêtes","Request completed":"Requête terminée","Request conversion":"Conversion de requête","Request Conversion":"Conversion de requête","Request Count":"Nombre de requêtes","Request decision flow":"Parcours de décision","Request error occurred":"Une erreur de requête est survenue","Request failed":"Échec de la requête","Request flow":"Flux de requête","Request Header Field":"Champ d\'en-tête de requête","Request Header Override":"Remplacement des en-têtes de requête","Request Header Overrides":"Remplacements d\'en-têtes de requête","Request headers must be a JSON object with string values.":"Les en-têtes doivent être un objet JSON dont les valeurs sont des chaînes.","Request ID":"ID de requête","Request Limits":"Limites de requêtes","Request Model":"Modèle demandé","Request Model Name":"Nom du modèle demandé","Request Model:":"Modèle demandé :","Request names your users call":"Noms de requête utilisés par vos utilisateurs","Request overrides, routing behavior, and upstream model automation":"Surcharges de requête, comportement de routage et automatisation des modèles amont","Request Path":"Chemin de requête","Request policies":"Politiques de requête","Request policy decisions":"Décisions de la politique de requête","Request processing":"Traitement des requêtes","Request rejected locally":"Requête rejetée localement","Request retry":"Relance des requêtes","Request rule pricing":"Règles de tarification de requête","Request rules apply on top of this amount.":"Les règles de requête s’appliquent en plus de ce montant.","Request simulation":"Simulation de requête","Request success rate sampled over the last 24 hours":"Taux de réussite des requêtes échantillonné sur les dernières 24 heures","Request success rate; {{incidents}} incident buckets in the last 24 hours":"Taux de réussite des requêtes ; {{incidents}} créneaux avec incident sur les dernières 24 heures","Request text filtering":"Filtrage du texte des requêtes","Request timed out, please refresh and restart GitHub login":"Délai dépassé, veuillez actualiser la page puis relancer la connexion GitHub","Request-based":"Selon la requête","Requested items":"Éléments demandés","Requested quota":"Montant demandé","Requested quota: {{quota}}":"Montant demandé : {{quota}}","Requested redemption code IDs":"ID des codes d’échange à supprimer","Requested token IDs":"ID des jetons demandés","Requested token IDs truncated":"Liste des ID demandés tronquée","Requested: {{total}}":"Demandés : {{total}}","Requested: {{total}} · Deleted: {{processed}}":"Demandés : {{total}} · Supprimés : {{processed}}","Requested: {{total}} · Returned: {{processed}}":"Demandés : {{total}} · Renvoyés : {{processed}}","Requests":"Requêtes","Requests (24h)":"Requêtes (24 h)","Requests / 24h":"Requêtes / 24 h","Requests per minute":"Requêtes par minute","requests served":"requêtes traitées","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"Les requêtes seront transmises à ce worker. Les barres obliques finales sont automatiquement supprimées.","Requests:":"Requêtes :","Require email verification for new accounts":"Exiger la vérification de l\'e-mail pour les nouveaux comptes","Require job success before follow-up actions":"Exiger le succès de la tâche avant les actions de suivi","Require login to view models":"Exiger la connexion pour voir les modèles","Require login to view rankings":"Exiger la connexion pour voir les classements","Require the original channel":"Exiger le canal initial","required":"requis","Required":"Requis","Required events:":"Événements requis :","Required permission":"Autorisation requise","Required provider, authentication, model, and group settings":"Paramètres requis de fournisseur, authentification, modèles et groupes","Required to expose MjProxy-style image generation to end users.":"Requis pour exposer la génération d\'images style MjProxy aux utilisateurs finaux.","Requires an available channel and access to its group.":"Nécessite un canal disponible et l’accès à son groupe.","Requires global auto-disable and this channel option.":"Nécessite l’activation globale et celle de ce canal.","Requires upstream WebSocket support":"Nécessite WebSocket en amont","Rerank":"Reclasser","Reroll":"Relancer","Research, analysis, scientific reasoning":"Recherche, analyse, raisonnement scientifique","Resend ({{seconds}}s)":"Renvoyer ({{seconds}}s)","Resend codes":"Renvoyer les codes","Resend in {{seconds}}s":"Renvoyer dans {{seconds}} s","Reserve requested images; settle returned images.":"Réserver le montant demandé, puis facturer les images reçues.","Reserve the estimated input cost multiplied by this value, without estimating output tokens. Defaults to 1; positive decimals such as 0.5 and 1.5 are supported. Final charges use actual usage. Per-request and task prices are unaffected.":"Réserve le coût estimé des entrées multiplié par cette valeur, sans estimer les tokens de sortie. Valeur par défaut : 1. Les décimales positives, comme 0,5 et 1,5, sont acceptées. La facturation finale utilise la consommation réelle. Les tarifs par requête et par tâche restent inchangés.","Reserved for viewing complete channel keys after secure verification.":"Réservé à l\'affichage des clés complètes des canaux après une vérification sécurisée.","Reset":"Réinitialiser","Reset {{count}} active subscriptions":"{{count}} abonnements actifs réinitialisés","Reset 2FA":"Réinitialiser la 2FA","Reset 2FA for {{username}}? The user must set up 2FA again to continue using it.":"Réinitialiser la 2FA de {{username}} ? L’utilisateur devra configurer à nouveau la 2FA pour continuer à l’utiliser.","Reset active {{plan}} subscriptions for this user?":"Réinitialiser les abonnements {{plan}} actifs de cet utilisateur ?","Reset all active subscriptions under {{plan}}?":"Réinitialiser tous les abonnements actifs de {{plan}} ?","Reset all model prices?":"Réinitialiser tous les prix des modèles ?","Reset all model ratios?":"Réinitialiser tous les ratios de modèle ?","Resume drag demo":"Reprendre la démo","Review the affected Passkeys and confirm the domain removal. If the settings or impact have changed, confirmation is required again.":"Vérifiez les Passkeys concernées et confirmez la suppression du domaine. Si les paramètres ou l\'impact ont changé, une nouvelle confirmation est requise.","Reset all settings to default values":"Réinitialiser tous les paramètres aux valeurs par défaut","Reset at:":"Réinitialisation à :","Reset balance and used quota":"Réinitialiser le solde et le quota utilisé","Reset completed":"Réinitialisation terminée","Reset completed. Latest usage has been refreshed.":"Réinitialisation terminée. La dernière utilisation a été actualisée.","Reset Count":"Nombre de réinitialisations","Reset count:":"Nombre de réinitialisations :","Reset Credit":"Crédit de réinitialisation","Reset Credits":"Crédits de réinitialisation","Reset Cycle":"Cycle de réinitialisation","Reset email sent, please check your inbox":"Email de réinitialisation envoyé, veuillez vérifier votre boîte de réception","Reset failed":"Échec de la réinitialisation","Reset model ratios":"Ratios de modèle réinitialisés","Reset Passkey":"Réinitialiser le Passkey","Reset Passkey for {{username}}? The user will need to register a new Passkey before using passwordless login.":"Réinitialiser la Passkey de {{username}} ? L’utilisateur devra enregistrer une nouvelle Passkey avant d’utiliser la connexion sans mot de passe.","Reset password":"Réinitialiser le mot de passe","Reset Period":"Période de réinitialisation","Reset prices":"Réinitialiser les prix","Reset quota":"Réinitialiser le quota","Reset ratios":"Réinitialiser les ratios","Reset Stats":"Réinitialiser les statistiques","Reset subscription quota":"Réinitialiser le quota d\'abonnement","Reset the user passkey":"Clé d\'accès de l\'utilisateur réinitialisée","Reset to default":"Réinitialiser par défaut","Reset to Default":"Réinitialiser par défaut","Reset to default configuration":"Réinitialisé à la configuration par défaut","Reset Two-Factor Authentication":"Réinitialiser 2FA","Reset usage window":"Réinitialiser la fenêtre d’utilisation","Resets in:":"Réinitialise dans :","Resetting...":"Réinitialisation...","Resize column":"Redimensionner la colonne","Resolve Conflicts":"Résoudre les conflits","Resource Configuration":"Configuration des ressources","Resources":"Ressources","Responding...":"Réponse en cours...","Response":"Réponse","Response Model":"Modèle de réponse","Response model mismatch":"Modèle de réponse différent","Response model: {{model}}":"Modèle de réponse : {{model}}","Response Time":"Temps de réponse","Response time: {{duration}}":"Temps de réponse : {{duration}}","Response too large":"Réponse trop volumineuse","Responses API Version":"Version de l\'API des réponses","Responses WebSocket":"Responses WebSocket","Restore default pricing":"Rétablir les tarifs par défaut","Restore defaults":"Restaurer les paramètres par défaut","Restore global Auto":"Restaurer l’Auto global","Restore notifications":"Réactiver les notifications","Restrict user model request frequency (may impact high concurrency performance)":"Restreindre la fréquence des requêtes du modèle utilisateur (peut impacter les performances en cas de forte concurrence)","Result":"Résultat","Result not retained":"Résultat non conservé","Retain last N days":"Conserver les N derniers jours","Retain last N files":"Conserver les N derniers fichiers","Retention days":"Jours de rétention","Retrieve result":"Consulter le résultat","Retry":"Réessayer","rule_name cannot be empty":"rule_name ne peut pas être vide","Retry budget":"Budget de tentatives","Retry Chain":"Chaîne de tentatives","Retry Settings":"Paramètres de relance","Retry Suggestion":"Suggestion de relance","Retry Times":"Nombre de tentatives","Return a custom error immediately":"Retourner immédiatement une erreur personnalisée","Return Custom Error":"Retourner une erreur personnalisée","Return data conforming to a JSON schema":"Renvoyer des données conformes à un schéma JSON","Return Error":"Retourner l\'erreur","Return per-token log probabilities":"Retourner les log-probabilités par jeton","Return to dashboard":"Retour au tableau de bord","Return to the original window to continue.":"Revenez à la fenêtre d’origine pour continuer.","Return vector embeddings for inputs":"Renvoyer des embeddings vectoriels pour les entrées","Returned keys":"Clés renvoyées","Returned token IDs":"ID des jetons renvoyés","Returned: {{processed}}":"Renvoyés : {{processed}}","Reveal API key":"Afficher la clé API","Reveal full keys":"Afficher les clés complètes","Reveal key":"Révéler la clé","Revenue":"Revenu","Review & initialize":"Vérifier et initialiser","Review and confirm the selected prices.":"Vérifiez et confirmez les prix sélectionnés.","Review and sign out devices currently using your account.":"Consultez et déconnectez les appareils qui utilisent actuellement votre compte.","Review and upgrade":"Examiner et mettre à jour","Review confirmation":"Vérifier la confirmation","Review every addition and overwrite before applying. Pricing, channels, and group access are not changed.":"Vérifiez chaque ajout et écrasement avant l’application. Les prix, canaux et droits des groupes restent inchangés.","Review model rates before scaling traffic":"Consulter les tarifs des modèles avant d\'augmenter le trafic","Review selected changes":"Vérifier les changements sélectionnés","Review the affected records before applying. Pricing, channels, and model names are preserved.":"Vérifiez les fiches concernées avant d’appliquer. Les tarifs, canaux et noms de modèles sont conservés.","Review the compatible domains and allowed websites, then save changes on the settings page.":"Vérifiez les domaines compatibles et les sites autorisés, puis enregistrez les modifications sur la page des paramètres.","Review the model changes before applying. Unselected models stay unchanged and will not be ignored.":"Vérifiez les changements avant de les appliquer. Les modèles non sélectionnés restent inchangés et ne seront pas ignorés.","Review the prices and billing expression. Confirming updates the draft; save model pricing to apply it.":"Vérifiez les tarifs et l’expression de facturation. La confirmation met à jour le brouillon ; enregistrez les tarifs du modèle pour les appliquer.","Review your payment details":"Vérifier vos détails de paiement","Review your purchase details before proceeding.":"Vérifiez les détails de votre achat avant de continuer.","Revoke":"Révoquer","Revoke session?":"Révoquer cette session ?","Revoke this access token? Scripts using it stop working immediately.":"Révoquer ce jeton d’accès ? Les scripts qui l’utilisent cesseront immédiatement de fonctionner.","Revoked access tokens":"Jetons d’accès révoqués","Revoked an access token":"Jeton d’accès révoqué","Rewards will be added directly to your balance":"Les récompenses seront ajoutées directement à votre solde","Rewrite callback URLs to the local server":"Réécrire les URLs de callback vers le serveur local","Right to Left":"De droite à gauche","Role":"Rôle","Roleplay":"Roleplay","Root":"Root","Root Diagnostics":"Diagnostics Root","Rose Garden":"Jardin de roses","Route":"Route","Route active":"Route active","Route Description":"Description de la route","Route group":"Groupe de routes","Route is required":"La route est requise","Route models must be unique for the same incoming path":"Les modèles de route doivent être uniques pour le même chemin d\'entrée","Route, auth, and balance check in one place":"Routage, authentification et solde au même endroit","Routes":"Routes","Routes in this plan":"Routes de ce plan","Routes with the same incoming path are matched by model. Leave the model scope empty only for the final fallback route.":"Les routes avec le même chemin d’entrée sont associées par modèle. Laissez la portée de modèles vide uniquement pour la route de repli finale.","Routes with the same incoming path are split by client model rules. Unmatched requests use the final fallback.":"Les routes avec le même chemin entrant sont réparties selon les règles du model client. Les requêtes non appariées utilisent la dernière route de secours.","Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.":"Les routes avec le même chemin d’entrée sont réparties par modèle client exact. Les requêtes non associées utilisent le repli final.","Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.":"Les routes avec le même chemin d’entrée correspondent aux noms exacts des modèles client. Séparez plusieurs modèles par des virgules et laissez vide uniquement le repli final.","Routing & Mapping":"Routage et correspondances","Routing & Overrides":"Routage et surcharges","Routing Group":"Groupe de routage","Routing Reliability":"Fiabilité du routage","Routing Strategy":"Stratégie de routage","Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.":"Les lignes sont les groupes d’utilisateurs, les colonnes les groupes de facturation. Les cellules vides utilisent le taux de base affiché en gris.","Rows per page":"Lignes par page","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = requêtes/minute, TPM = jetons/minute, RPD = requêtes/jour. Les limites s\'appliquent par groupe de jetons.","RSA Private Key (Production)":"Clé privée RSA (Production)","RSA Private Key (Sandbox)":"Clé privée RSA (Sandbox)","Rule":"Règle","Rule {{line}} is missing source field":"La règle {{line}} n\'a pas de champ source","Rule {{line}} is missing target field":"La règle {{line}} n\'a pas de champ cible","Rule {{line}} is missing target path":"La règle {{line}} n\'a pas de chemin cible","Rule {{line}} is missing value":"La règle {{line}} n\'a pas de valeur","Rule {{line}} pass_headers format is invalid":"Le format pass_headers de la règle {{line}} est invalide","Rule {{line}} pass_headers is missing header names":"La règle {{line}} pass_headers n\'a pas de noms d\'en-têtes","Rule {{line}} prune_objects is missing conditions":"La règle {{line}} prune_objects n\'a pas de conditions","Rule {{line}} return_error requires a message field":"La règle {{line}} return_error nécessite un champ message","Rule Description (optional)":"Description de la règle (optionnel)","Rule editor mode":"Mode d’édition des règles","Rule group":"Groupe de règles","Rule override":"Réglage de la règle","rules":"règles","Rules":"Règles","Rules are checked in order. The first match determines the price.":"Les règles sont évaluées dans l’ordre. La première correspondance détermine le prix.","Rules can inherit or override these defaults.":"Les règles peuvent hériter ou remplacer ces valeurs.","Rules for {{group}}":"Règles pour {{group}}","Rules JSON":"Règles JSON","Rules JSON must be an array":"Le JSON des règles doit être un tableau","Rules match the original model value from the client request body.":"Les règles correspondent à la valeur model originale du corps de la requête client.","Run and manage maintenance tasks and performance settings.":"Exécuter et gérer les tâches de maintenance et les paramètres de performance.","Run background checks using the selected test mode":"Exécuter les contrôles en arrière-plan selon le mode choisi","Run dry run":"Lancer la simulation","Run GC":"Exécuter le GC","Run tests for the selected models":"Exécuter les tests pour les modèles sélectionnés","running":"en cours","Running":"En cours","Running dry run":"Simulation en cours","Running requests":"Requêtes en cours","Runtime":"Environnement","Runtime status":"État d’exécution","Runway":"Durée restante","s":"s","Safety Settings":"Paramètres de sécurité","Same as Local":"Identique au local","Sample interval: {{seconds}} seconds":"Intervalle : {{seconds}} secondes","Sampling temperature; lower is more deterministic":"Température d\'échantillonnage ; plus c\'est bas, plus c\'est déterministe","Sandbox":"Bac à sable","Sandbox mode":"Mode sandbox","Save":"Enregistrer","Save & Submit":"Enregistrer et envoyer","Save all settings":"Enregistrer tous les paramètres","Save as a file":"Enregistrer dans un fichier","Save as Markdown":"Enregistrer en Markdown","Save as TXT":"Enregistrer en TXT","Save Backup Codes":"Sauvegarder les codes de secours","Save changes":"Enregistrer les modifications","Save Changes":"Enregistrer les modifications","Save chat settings":"Enregistrer les paramètres de chat","Save check-in settings":"Enregistrer les paramètres de connexion","Save Creem settings":"Enregistrer les paramètres Creem","Save drawing settings":"Enregistrer les paramètres de dessin","Save Epay settings":"Enregistrer les paramètres Epay","Save failed":"Échec de l\'enregistrement","Save failed, please retry":"Échec de l\'enregistrement, veuillez réessayer","Save general settings":"Enregistrer les paramètres généraux","Save group ratios":"Enregistrer les ratios de groupes","Save group settings":"Enregistrer les paramètres des groupes","Save io.net settings":"Enregistrer les paramètres io.net","Save log settings":"Enregistrer les paramètres de journal","Save metadata":"Enregistrer les métadonnées","Save model prices":"Enregistrer les prix des modèles","Save model ratios":"Enregistrer les ratios de modèles","Save Models":"Enregistrer les modèles","Save monitoring rules":"Enregistrer les règles de surveillance","Save navigation":"Enregistrer la navigation","Save notice":"Enregistrer l\'avis","Save or discard pricing changes before renaming metadata.":"Enregistrez ou abandonnez les modifications de prix avant de renommer les métadonnées.","Save Preferences":"Enregistrer les préférences","Save preview":"Aperçu de l’enregistrement","Save rate limits":"Enregistrer les limites de débit","Save redemption codes":"Enregistrer les codes d’échange","Save sensitive words":"Enregistrer les mots sensibles","Save Settings":"Enregistrer les paramètres","Save sidebar modules":"Enregistrer les modules de la barre latérale","Save SSRF settings":"Enregistrer les paramètres SSRF","Save Stripe settings":"Enregistrer les paramètres Stripe","Save these backup codes in a safe place. Each code can only be used once.":"Enregistrez ces codes de secours dans un endroit sûr. Chaque code ne peut être utilisé qu\'une seule fois.","Save these codes in a safe place. Each code can only be used once.":"Enregistrez ces codes dans un endroit sûr. Chaque code ne peut être utilisé qu\'une seule fois.","Save token limits":"Enregistrer les limites de jetons","Save tool prices":"Enregistrer les prix des outils","Save Waffo Pancake settings":"Enregistrer les paramètres Waffo Pancake","Save Worker settings":"Enregistrer les paramètres Worker","Saved successfully":"Enregistré avec succès","Saving permission changes requires security verification":"L’enregistrement des modifications d’autorisations nécessite une vérification de sécurité","Saving...":"Enregistrement en cours...","Scan QR Code":"Scanner le code QR","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"Scannez le code QR pour suivre le compte officiel et répondez par « 验证码 » pour recevoir votre code de vérification.","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"Scannez ce code QR avec votre application d\'authentification (Google Authenticator, Microsoft Authenticator, etc.)","Scenario Templates":"Modèles de scénario","Scheduled channel tests":"Tests de canaux planifiés","Scheduled full test":"Test complet planifié","Scheduled full test probes non-manually-disabled channels; passive recovery only checks auto-disabled channels after real request failures.":"Le test complet planifié sonde les canaux non désactivés manuellement ; la récupération passive vérifie uniquement les canaux désactivés automatiquement après des échecs de requêtes réelles.","Scheduled or bulk health checks can disable a channel when this duration is exceeded, if both global and channel auto-disable are enabled.":"Si la désactivation automatique est active globalement et pour le canal, un contrôle périodique ou groupé dépassant cette durée peut le désactiver.","Scheduled recovery is off. Bulk channel tests can still re-enable automatically disabled channels.":"Le rétablissement périodique est inactif. Les tests groupés peuvent toujours réactiver les canaux désactivés automatiquement.","Scheduled test options":"Options des tests planifiés","scheduling controls":"contrôles d\'ordonnancement","Science":"Science","Scope":"Portée","Scopes":"Portées","Search":"Rechercher","Search by name or URL...":"Rechercher par nom ou URL...","Select at least one valid permission.":"Sélectionnez au moins une autorisation valide.","Search by order number...":"Rechercher par numéro de commande...","Search channel type...":"Rechercher un type de canal...","Search chat presets...":"Rechercher des préréglages de chat...","Search colors...":"Rechercher des couleurs...","Search conflicting models or fields":"Rechercher des modèles ou champs en conflit","Search deployments...":"Rechercher des déploiements...","Search feature in development":"Fonctionnalité de recherche en développement","Search group names...":"Rechercher des noms de groupe...","Search groups by name or description":"Rechercher par nom ou description","Search groups...":"Rechercher des groupes...","Search icons or enter an icon key":"Rechercher une icône ou saisir une clé","Search method identifiers...":"Rechercher des identifiants de modes...","Search missing models":"Rechercher les modèles manquants","Search model name, provider, endpoint, or tag...":"Rechercher un nom de modèle, fournisseur, endpoint ou tag...","Search model name...":"Rechercher le nom du modèle...","Search models":"Rechercher des modèles","Search models or fields...":"Rechercher des modèles ou des champs...","Search models...":"Rechercher des modèles...","Search payment methods...":"Rechercher des méthodes de paiement...","Search payment type keys...":"Rechercher des clés de type de paiement...","Search payment types...":"Rechercher des types de paiement...","Search products...":"Rechercher des produits...","Search providers, plugins, or type numbers":"Rechercher un fournisseur, une extension ou un numéro de type","Search rules...":"Rechercher des règles…","Search tags...":"Rechercher des tags...","Search the public web at inference time":"Rechercher sur le web public lors de l\'inférence","Search vendor names or descriptions":"Rechercher un nom ou une description","Search vendors":"Rechercher un fournisseur","Search vendors...":"Rechercher des fournisseurs...","Search, add, and edit model vendors.":"Recherchez, ajoutez et modifiez les fournisseurs de modèles.","Search...":"Rechercher...","second":"seconde","Second":"Seconde","seconds":"secondes","Secret env (JSON object)":"Environnement secret (objet JSON)","Secret environment variables (JSON)":"Variables d\'environnement secrètes (JSON)","Secret Key":"Clé secrète","Secure & Reliable":"Sécurisé et fiable","Secured":"Sécurisé","Security":"Sécurité","Security & Access":"Sécurité et accès","Security & Limits":"Sécurité et limites","Security Check":"Vérification de sécurité","Security verification":"Vérification de sécurité","Security verification has expired. Please verify again.":"La vérification de sécurité a expiré. Recommencez.","Security verification is no longer valid. Please verify again.":"La vérification de sécurité n’est plus valide. Recommencez.","Seed":"Graine","Select":"Sélectionner","Select {{name}}":"Sélectionner {{name}}","Select a color":"Sélectionner une couleur","Select a complete plan, then keep only the routes you need.":"Sélectionnez un plan complet, puis gardez les routes nécessaires.","Select a concrete model to configure pricing. Metadata matching does not propagate prices.":"Sélectionnez un modèle précis pour définir ses tarifs. La correspondance des métadonnées ne propage pas les prix.","Select a group":"Sélectionner un groupe","Select a group type":"Sélectionner un type de groupe","Select a model to edit pricing":"Sélectionnez un modèle pour modifier sa tarification","Select a preset...":"Sélectionner un préréglage...","Select a price source and review pricing changes. Model metadata and channel access are not changed.":"Choisissez une source et vérifiez les changements de tarifs. Les métadonnées et l’accès aux canaux restent inchangés.","Select a product":"Sélectionner un produit","Select a role":"Sélectionner un rôle","Select a rule to edit.":"Sélectionnez une règle à modifier.","Select a saved vendor.":"Sélectionnez un fournisseur enregistré.","Select a store":"Sélectionner une boutique","Select a suggested icon or keep an existing advanced icon key.":"Choisissez une icône proposée ou conservez une clé d’icône avancée existante.","Select a timestamp before clearing logs.":"Sélectionnez un horodatage avant de vider les journaux.","Select a usage mode to continue":"Sélectionnez un mode d\'utilisation pour continuer","Select a verification method first":"Sélectionnez d\'abord une méthode de vérification","Select a version to compare":"Sélectionnez une version à comparer","Select active subscription plan":"Sélectionner un forfait actif","Select all":"Tout sélectionner","Select all (filtered)":"Tout sélectionner (filtré)","Select all changed fields":"Tout sélectionner","Select all matching models":"Sélectionner les modèles correspondants","Select all models":"Sélectionner tous les modèles","Select all models in {{category}}":"Sélectionner tous les modèles de {{category}}","Select all prices from {{source}}":"Sélectionner tous les prix de {{source}}","Select all syncable models (all pages, {{count}})":"Tout sélectionner (toutes les pages, {{count}} modèles synchronisables)","Select All Visible":"Sélectionner tout ce qui est visible","Select an operation mode and enter the amount":"Sélectionnez un mode d\'opération et entrez le montant","Select announcement type":"Sélectionner le type d\'annonce","Select at least one Auto group or restore global Auto.":"Sélectionnez au moins un groupe Auto ou restaurez l’Auto global.","Select at least one field to overwrite.":"Sélectionnez au moins un champ à écraser.","Select at least one model to preview mappings.":"Sélectionnez au moins un modèle pour prévisualiser les correspondances.","Select at least one permission":"Sélectionnez au moins une autorisation","Select at least one route":"Sélectionnez au moins une route","Select at least one target model":"Sélectionnez au moins un modèle cible","Select at most {{max}} Auto groups":"Sélectionnez au maximum {{max}} groupes Auto","Select body font":"Sélectionner la police du corps de texte","Select border radius":"Sélectionner le rayon de bordure","Select channel type":"Sélectionner le type de canal","Select color preset":"Sélectionner un préréglage de couleur","Select content width":"Sélectionner la largeur du contenu","Select corner radius":"Sélectionner le rayon des coins","Select currency":"Sélectionner la devise","Select date":"Sélectionner la date","Select default chart":"Sélectionner le graphique par défaut","Select default range":"Sélectionner la plage par défaut","Select display mode":"Sélectionner le mode d\'affichage","Select end time":"Sélectionner l\'heure de fin","Select from presets or type custom identifier.":"Sélectionner parmi les préréglages ou saisir un identifiant personnalisé.","Select granularity":"Sélectionner la granularité","Select groups (leave empty to keep current)":"Sélectionner les groupes (laisser vide pour conserver les groupes actuels)","Select interface density":"Sélectionner la densité de l\'interface","Select items...":"Sélectionner des éléments...","Select key format":"Sélectionner le format de clé","Select language":"Sélectionner une langue","Select Language":"Sélectionner la langue","Select layout style":"Sélectionner le style de mise en page","Select locations":"Sélectionner des emplacements","Select model":"Sélectionner un modèle","Select Model":"Sélectionner le modèle","Select model {{model}}":"Sélectionner le modèle {{model}}","Select models":"Sélectionner les modèles","Select models (empty for allow all)":"Sélectionner les modèles (vide pour autoriser tout)","Select models and apply to channel models list.":"Sélectionnez les modèles et appliquez-les à la liste des modèles de canaux.","Select models or add custom ones":"Sélectionner des modèles ou en ajouter des personnalisés","Select models to process. Unselected \\"add\\" models will be ignored.":"Sélectionnez les modèles à traiter. Les modèles « ajout » non sélectionnés seront ignorés.","Select models to run batch tests.":"Sélectionner les modèles pour exécuter les tests par lots.","Select or enter color value":"Sélectionner ou saisir une valeur de couleur","Select or enter method identifier":"Sélectionner ou saisir l’identifiant du mode","Select or enter model name":"Sélectionner ou saisir le nom du modèle","Select or enter payment type":"Sélectionner ou saisir le type de paiement","Select or enter payment type key":"Sélectionner ou saisir la clé de type de paiement","Select payment method":"Sélectionner le mode de paiement","Select preset or enter custom CSS color value.":"Sélectionner un préréglage ou saisir une valeur de couleur CSS personnalisée.","Select price for {{model}} from {{source}}":"Sélectionner le prix de {{model}} depuis {{source}}","Select price sources":"Sélectionner les sources de prix","Select publish date":"Sélectionner la date de publication","Select requirement":"Sélectionner l\'exigence","Select row":"Sélectionner la ligne","Select row {{number}}":"Sélectionner la ligne {{number}}","Select sidebar style":"Sélectionner le style de la barre latérale","Select site direction":"Sélectionner la direction du site","Select start time":"Sélectionner l\'heure de début","Select subscription plan":"Sélectionner un plan d\'abonnement","Select successful models ({{count}})":"Sélectionner les modèles réussis ({{count}})","Select Sync Channels":"Sélectionner les canaux de synchronisation","Select sync channels to compare prices":"Sélectionner les canaux de synchronisation pour comparer les prix","Select sync channels to compare ratios":"Sélectionner les canaux de synchronisation pour comparer les ratios","Select Sync Source":"Sélectionner la source de synchronisation","Select syncable models on this page":"Sélectionner les modèles synchronisables de cette page","Select task plugin":"Sélectionner un plugin","Select the API endpoint region":"Sélectionner la région du point de terminaison API","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"Sélectionnez les champs que vous souhaitez écraser avec les données en amont. Les champs non sélectionnés conservent leurs valeurs locales.","Select the models to keep in this channel.":"Sélectionnez les modèles à conserver dans ce canal.","Select the task plugins installed on the upstream gateway":"Sélectionnez les plugins de tâches installés sur la passerelle en amont","Settings updated":"Paramètres mis à jour","Select theme preference":"Sélectionner la préférence de thème","Settled by the task usage expression":"Réglé par l\'expression d\'usage de la tâche","Select theme preset":"Sélectionner un préréglage de thème","Select time granularity":"Sélectionner la granularité temporelle","Select vendor":"Sélectionner le fournisseur","Select version":"Choisir une version","Selectable groups":"Groupes sélectionnables","selected":"sélectionné","Selected {{count}}":"{{count}} sélectionné(s)","Selected {{selected}} / {{total}}":"Sélection : {{selected}} / {{total}}","selected channel(s). Leave empty to remove tag.":"canal(aux) sélectionné(s). Laisser vide pour supprimer l\'étiquette.","Selected conflicts were overwritten successfully.":"Les conflits sélectionnés ont été écrasés avec succès.","Selected names are":"Les noms sélectionnés sont","Selected nodes":"Nœuds sélectionnés","Selected when creating a token and used as the default billing group for API calls.":"Sélectionné lors de la création d’un jeton et utilisé comme groupe de facturation par défaut pour les appels API.","Selecting a plugin fills its declared models and default base URL.":"La sélection remplit les modèles déclarés et l\'URL de base par défaut.","Self-Use Mode":"Mode d\'utilisation personnelle","Send":"Envoyer","Send a request":"Envoyer une requête","Send chat completions to the OpenAI-compatible /v1/chat/completions instead of the native Ollama /api/chat":"Envoyer les complétions de chat vers l\'endpoint compatible OpenAI /v1/chat/completions au lieu du /api/chat natif d\'Ollama","Send code":"Envoyer le code","Send reset email":"Envoyer l\'e-mail de réinitialisation","Send the original request body to upstream without conversion. Only available for native forwarding routes.":"Envoyer le corps de la requête d\'origine à l\'upstream sans conversion. Disponible uniquement pour les routes en transfert natif.","Sending...":"Envoi en cours...","Sensitive channel settings are read-only for your account.":"Les paramètres sensibles des canaux sont en lecture seule pour votre compte.","Sensitive Words":"Mots sensibles","Sent the API key to FluentRead.":"Clé API envoyée à FluentRead.","Separate image/audio prices are enabled.":"Les prix séparés pour l’image et l’audio sont activés.","Separate multiple rules with English commas. For regex patterns that need commas, switch to JSON Text.":"Séparez plusieurs règles par des virgules anglaises. Pour les regex nécessitant des virgules, passez en JSON Text.","Separate several values with commas":"Séparez plusieurs valeurs par des virgules","Serve multiple users or teams with billing and quota control.":"Servir plusieurs utilisateurs ou équipes avec gestion de la facturation et des quotas.","Server Address":"Adresse du serveur","Server IP":"IP du serveur","Server Log Management":"Gestion des journaux serveur","Server logging is not enabled (log directory not configured)":"La journalisation serveur n\'est pas activée (répertoire non configuré)","Server Token":"Jeton de serveur","Service account JSON file(s)":"Fichier(s) JSON de compte de service","Session":"Session","Session behavior":"Maintien de session","Session behavior prevents switching channels":"Le comportement de session empêche le changement de canal","Session defaults":"Sessions par défaut","Session expired!":"Session expirée !","Session expired?":"Session expirée ?","Session rule":"Règle de session","Session rule matched":"Règle de session correspondante","Session rules":"Règles de session","Session rules table":"Tableau des règles de session","Session signed out":"Session déconnectée","Sessions & Access":"Sessions et accès","Sign in to bind an account":"Connectez-vous pour lier un compte","Sessions and retries":"Sessions et tentatives","Set":"Définir","Set a discount rate for a specific recharge amount threshold.":"Définir un taux de réduction pour un seuil de montant de recharge spécifique.","Set a secure password (min. 8 characters)":"Définir un mot de passe sécurisé (min. 8 caractères)","Set a tag for":"Définir un tag pour","Set API key access restrictions":"Définir les restrictions d\'accès de la clé API","Set API key basic information":"Définir les informations de base de la clé API","Set default ranges and charts for model analytics.":"Définissez les plages et graphiques par défaut pour l’analyse des modèles.","Set Field":"Définir le champ","Set filters to customize your dashboard statistics and charts.":"Définir des filtres pour personnaliser les statistiques et les graphiques de votre tableau de bord.","Set filters to narrow down your log search results.":"Définir des filtres pour affiner vos résultats de recherche de journaux.","Set Header":"Définir l\'en-tête","Set Password":"Définir un mot de passe","Set prices for each set of conditions below. Cost = usage × unit price + additional charge. Token prices are per million tokens.":"Définissez les prix selon les conditions ci-dessous. Coût = usage × prix unitaire + supplément. Les prix des tokens sont par million.","Set prices for each set of conditions below. Cost = usage × unit price + fixed fee. Token prices are per million tokens.":"Définissez les prix selon les conditions ci-dessous. Coût = usage × prix unitaire + frais fixes. Les prix des tokens sont par million.","Set Project to io.cloud when creating/selecting key":"Définir le projet sur io.cloud lors de la création/sélection de la clé","Set quota amount and limits":"Définir le quota et les limites","Set Request Header":"Définir un en-tête de requête","Set runtime request header: override entire value, or manipulate comma-separated tokens":"Définir l\'en-tête de requête : remplacer la valeur ou manipuler les tokens séparés par des virgules","Set separate prices for cache reads and writes.":"Définissez des prix distincts pour les lectures et écritures de cache.","Set separately for this provider":"Configurer séparément ce fournisseur","Set Tag":"Définir un tag","Set tag for selected channels":"Définir un tag pour les canaux sélectionnés","Set the language used across the interface":"Définir la langue utilisée dans l\'interface","Set the user\'s role (cannot be Root)":"Définir le rôle de l\'utilisateur (ne peut pas être Root)","Set the website where users will use their Passkeys.":"Indiquez le domaine du site où les utilisateurs utiliseront leurs Passkeys.","Set these values in the provider application before enabling login.":"Renseignez ces valeurs dans l\'application du fournisseur avant d\'activer la connexion.","Set up model redirects":"Configurer les redirections de modèles","Set up redirect":"Configurer une redirection","Setting Key":"Clé de paramètre","Setting saved":"Paramètre sauvegardé","Size {{size}}":"Taille {{size}}","Setting up 2FA...":"Configuration de la 2FA...","Setting updated successfully":"Paramètre mis à jour avec succès","Settings":"Paramètres","Settings & Preferences":"Paramètres et préférences","Settings updated successfully":"Paramètres mis à jour avec succès","Setup expired. Scan the new QR code and save the new backup codes.":"La configuration a expiré. Scannez le nouveau code QR et conservez les nouveaux codes de secours.","Setup guide":"Guide de configuration","Setup guide complete":"Guide de configuration terminé","Setup guide is collapsed. Expand it anytime.":"Le guide de configuration est réduit. Vous pouvez le rouvrir à tout moment.","Setup Instructions":"Instructions de configuration","Setup progress: {{completed}}/{{total}}":"Progression : {{completed}}/{{total}}","Setup Two-Factor Authentication":"Configurer l\'authentification à deux facteurs","Setup: three groups and one override matrix cell.":"Configuration : trois groupes et une cellule de matrice.","Setup: three groups and one override rule.":"Configuration : trois groupes et une règle de remplacement.","SGLang":"SGLang","SMTP server is not configured":"Le serveur SMTP n’est pas configuré","SGLang API key, or EMPTY if authentication is disabled":"Clé API SGLang, ou EMPTY si l’authentification est désactivée","SGLang channel base URL cannot be empty":"L’URL de base du canal SGLang ne peut pas être vide","SGLang server address, without /v1":"Adresse du serveur SGLang, sans /v1","SGLang status":"État de SGLang","Some files could not be deleted ({{failed}}/{{total}})":"Certains fichiers n\'ont pas pu être supprimés ({{failed}}/{{total}})","Share":"Part","Share your link and earn rewards":"Partagez votre lien et gagnez des récompenses","Shared configuration for all payment gateways":"Configuration partagée pour toutes les passerelles de paiement","Shorten":"Raccourcir","Show":"Afficher","Show All":"Tout afficher","Show all providers including unbound":"Afficher tous les fournisseurs (y compris non liés)","Show all tags":"Afficher toutes les étiquettes","Show in model catalog":"Afficher dans le catalogue","Show in model square":"Afficher dans la galerie","Show only bound providers":"Afficher uniquement les fournisseurs liés","Show or hide flow columns":"Afficher ou masquer les colonnes du flux","Show preview":"Afficher l\'apercu","Show prices in currency instead of quota.":"Afficher les prix en devise au lieu du quota.","Show selected models in model square":"Afficher la sélection dans la galerie","Show sensitive data":"Afficher les données sensibles","Show setup guide":"Afficher le guide de configuration","Show source":"Afficher la source","Show token usage statistics in the UI":"Afficher les statistiques d\'utilisation des jetons dans l\'interface utilisateur","Showcase core capabilities with demo credentials and limited access.":"Présenter les fonctionnalités principales avec des identifiants de démonstration et un accès limité.","Showing":"Affichage de","Showing {{shown}} of {{total}} mappings":"Affichage de {{shown}} correspondances sur {{total}}","showing •":"affichage •","Showing the last successfully checked release.":"Affichage de la dernière version vérifiée avec succès.","Shown":"Affiché","Shown {{count}} models in model square":"{{count}} modèles affichés dans la galerie","Sidebar":"Barre latérale","Sidebar collapsed by default for new users":"Barre latérale masquée par défaut pour les nouveaux utilisateurs","Sidebar modules":"Modules de la barre latérale","Sidebar Personal Settings":"Paramètres personnels de la barre latérale","Sign in":"Se connecter","Sign In":"Se connecter","Sign in now":"Se connecter maintenant","Sign in required":"Connexion requise","Sign in with Passkey":"Se connecter avec Passkey","Sign out":"Se déconnecter","Sign out other sessions":"Déconnecter les autres sessions","Sign out other sessions?":"Déconnecter les autres sessions ?","Sign out others":"Déconnecter les autres","Sign out this device?":"Déconnecter cet appareil ?","Sign up":"S\'inscrire","Signed in":"Connecté","Signed in successfully!":"Connecté avec succès !","Signed in via WeChat":"Connecté via WeChat","Signed in with Passkey":"Connecté avec Passkey","Signed out":"Déconnecté","Significant outages detected":"Pannes significatives détectées","Signing you in with {{provider}}":"Connexion avec {{provider}}","SiliconFlow":"SiliconFlow","Simple":"Simple","Simple mode only returns message; status code and error type use system defaults.":"Le mode simple ne retourne que le message ; le code de statut et le type d\'erreur utilisent les valeurs par défaut.","Simple mode: prune objects by type, e.g. redacted_thinking.":"Mode simple : nettoyer les objets par type, ex. redacted_thinking.","Simulate a request including request rules and excluding group multipliers. Empty objects represent an empty request.":"Simulez le coût avec les règles de requête, sans les multiplicateurs de groupe. Les objets vides représentent une requête sans champs.","Simulated request body":"Corps de la requête simulée","Simulated request cost":"Coût de la requête simulée","Simulated request headers":"En-têtes de la requête simulée","Sort by priority to drag channels":"Triez par priorité pour déplacer les canaux","Sort channels by":"Trier les canaux par","State parameter is empty or mismatched":"Le paramètre state est vide ou ne correspond pas","Simulation context is missing.":"Le contexte nécessaire à la simulation est manquant.","Simulation time":"Heure de simulation","Since previous sample":"Depuis le relevé précédent","Single .js file, up to 8 MiB. Its source is shown below before upload.":"Un seul fichier .js, jusqu’à 8 Mio. Sa source est affichée ci-dessous avant l’envoi.","Single Key":"Clé unique","Site & Branding":"Site et marque","Site currency ({{currency}})":"Devise du site ({{currency}})","Site Key":"Clé du site","Site URL":"URL du site","Size:":"Taille :","sk_xxx or rk_xxx":"sk_xxx ou rk_xxx","Skip async task polling delay":"Ignorer le délai de polling des tâches asynchrones","Skip pre-consumption when the wallet balance and limited API key balance both exceed this amount. Set to 0 to always pre-consume. Subscriptions and asynchronous tasks always reserve quota.":"Aucun pré-débit si le solde du portefeuille et celui de la clé API à quota limité dépassent ce montant. La valeur 0 impose le pré-débit. Les abonnements et tâches asynchrones réservent toujours un quota.","Skip retry on failure":"Ne pas réessayer en cas d\'échec","Skip SMTP TLS certificate verification":"Ignorer la vérification du certificat TLS SMTP","Skip to Main":"Aller au contenu principal","Skip Upstream TLS Verification":"Ignorer la vérification TLS du serveur amont","Slug":"Slug","Slug can only contain letters, numbers, hyphens, and underscores":"Le slug ne peut contenir que des lettres, des chiffres, des tirets et des underscores","Slug is required":"Le slug est requis","Slug must be less than 100 characters":"Le slug doit contenir moins de 100 caractères","Smallest USD amount users can recharge (Epay)":"Montant minimum en USD que les utilisateurs peuvent recharger (Epay)","SMTP encryption":"Chiffrement SMTP","SMTP Host":"Hôte SMTP","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"Erreurs douces","Some channels failed: {{errorMsg}}":"Certains canaux ont échoué : {{errorMsg}}","Some matching models are hidden or have no available channel.":"Certains modèles correspondants sont masqués ou n’ont aucun canal disponible.","Some plugin information could not be read":"Certaines informations du plugin sont illisibles","Something went wrong!":"Quelque chose s\'est mal passé !","Sonnet Model":"Modèle Sonnet","Sora":"Sora","Sort":"Trier","Sort by ID":"Trier par ID","Sort Order":"Ordre de tri","Sort priority":"Priorité de tri","Source":"Source","Source diff":"Différence du code source","Source Endpoint":"Point source","Source Field":"Champ source","Source Header":"En-tête source","Source ID":"ID source","Source name":"Nom de la source","Source vendors":"Fournisseurs sources","Source vendors will be deleted after their model assignments are moved. The target vendor’s details are preserved.":"Les fournisseurs sources seront supprimés après le transfert des modèles. Les informations du fournisseur cible sont conservées.","Source: global settings. Changes take effect after saving.":"Source : paramètres globaux. Les modifications prennent effet après enregistrement.","sources":"sources","Space-separated OAuth scopes":"Scopes OAuth séparés par des espaces","Spark model version, e.g., v2.1 (version number in API URL)":"Version du modèle Spark, par exemple v2.1 (numéro de version dans l\'URL de l\'API)","Spec":"Spécification","Special billing expression":"Expression de facturation spéciale","Stripe is not configured or key is invalid":"Stripe n\'est pas configuré ou la clé n\'est pas valide","Special group":"Groupe spécial","Stripe webhook is not configured":"Le webhook Stripe n\'est pas configuré","Special ratio rules":"Règles de ratio spéciales","StripePriceId is not configured for this plan":"StripePriceId n\'est pas configuré pour ce forfait","Special ratios override the token group ratio for specific user group and token group combinations.":"Les ratios spéciaux remplacent le ratio du groupe de jeton pour des combinaisons précises de groupe utilisateur et de groupe de jeton.","Special usable group rules":"Règles spéciales de groupes utilisables","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"Les règles de groupes utilisables spéciaux peuvent ajouter, supprimer ou annexer des groupes de jetons sélectionnables pour un groupe utilisateur précis.","Special usable group rules make extra token groups visible to, or hide default ones from, users of a specific user group.":"Les règles de groupes utilisables spéciaux rendent des groupes de jetons supplémentaires visibles pour les utilisateurs d’un groupe donné, ou leur masquent des groupes par défaut.","Special visibility rules":"Règles de visibilité spéciales","Specified time":"Heure définie","Speculative decoding acceptance rate":"Taux d’acceptation du décodage spéculatif","Spend limited":"Dépenses limitées","Spread HTTP/2 traffic across multiple reusable connections to the same upstream origin (1-8).":"Répartit le trafic HTTP/2 sur plusieurs connexions réutilisables vers la même origine amont (1-8).","SQLite stores all data in a single file. Make sure that file is persisted when running in containers.":"SQLite stocke toutes les données dans un seul fichier. Assurez-vous que ce fichier est persisté lors de l\'exécution dans des conteneurs.","SSL/TLS":"SSL/TLS","SSRF Protection":"Protection SSRF","stale":"expiré","Standard":"Standard","Standard price":"Prix standard","Standard protocol interfaces":"Interfaces des protocoles standard","Start":"Début","Start ≤ end: within the day; start > end: across midnight":"Début ≤ fin : plage dans la journée ; début > fin : plage après minuit","Subscription plan is not enabled":"Le forfait d\'abonnement n\'est pas activé","Subscription plan title cannot be empty":"Le titre du forfait d\'abonnement ne peut pas être vide","Start a conversation to see messages here":"Démarrez une conversation pour voir les messages ici","Start a playground chat":"Démarrer une conversation dans le playground","Start again":"Recommencer","Subscription purchased with balance, plan: {{plan}}, payment amount: {{amount}}, quota deducted: {{quota}}":"Abonnement acheté avec le solde, offre : {{plan}}, montant payé : {{amount}}, quota déduit : {{quota}}","Subscription purchased, plan: {{plan}}, payment amount: {{amount}}, payment method: {{method}}":"Abonnement acheté, offre : {{plan}}, montant payé : {{amount}}, moyen de paiement : {{method}}","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"Commencez à encaisser des paiements dans le monde entier sans créer de société. Conçu pour les développeurs indépendants, les entrepreneurs individuels OPC et les startups. Waffo Pancake agit comme Merchant of Record et prend en charge la conformité liée à l’encaissement mondial : taxes à la consommation, facturation, gestion des abonnements, remboursements et rétrofacturations. Les développeurs solo peuvent lancer rapidement leur produit et rester concentrés sur celui-ci plutôt que sur la conformité. Intégration en quelques minutes, d’une seule invite à une intégration complète.","Start for free with generous limits. No credit card required.":"Commencez gratuitement avec des limites généreuses. Aucune carte de crédit requise.","Start SGLang with --enable-metrics to expose Prometheus metrics.":"Démarrez SGLang avec --enable-metrics pour activer les métriques Prometheus.","Start Time":"Heure de début","Start weekday":"Jour de début","Started":"Démarré","Started two-factor authentication setup":"Configuration de l’authentification à deux facteurs commencée","STARTTLS":"STARTTLS","State changed":"État modifié","State unchanged: {{status}}":"Statut inchangé : {{status}}","Static page describing the platform.":"Page statique décrivant la plateforme.","Statistical count":"Nombre statistique","Statistical quota":"Quota statistique","Statistical tokens":"Jetons statistiques","Statistics reset":"Statistiques réinitialisées","Status":"Statut","Status & Sync":"Statut et synchronisation","Status change":"Changement de statut","Status Code":"Code de statut","Status Code Mapping":"Mappage des codes d\'état","Status code mapping must use valid HTTP status codes":"Le mappage des codes d\'état doit utiliser des codes d\'état HTTP valides","Status is outside the retry rules":"Code hors des règles de reprise","Status matches the retry rules":"Code conforme aux règles de reprise","Status Page Slug":"Slug de la page d\'état","Status short":"État","Status:":"Statut :","Stay":"Rester","Stay tuned though!":"Restez à l\'écoute cependant !","Steer behaviour with a system instruction":"Orienter le comportement via une instruction système","Step":"Étape","Step {{current}} of {{total}}: {{label}}":"Étape {{current}} sur {{total}} : {{label}}","Still pending addition":"Ajouts encore en attente","Still pending removal":"Retraits encore en attente","Stop":"Arrêter","Stop Retry":"Arrêter la relance","Stop testing":"Arrêter le test","Stopping batch test...":"Arrêt du test par lots...","Stopping...":"Arrêt...","Storage":"Stockage","Store":"Store","Store + product created":"Boutique + produit créés","Store ID":"ID du magasin","Store ID is required":"L\'ID de magasin est requis","Stored configuration with effective defaults":"Configuration enregistrée et valeurs effectives","Stored value is not echoed back for security":"Par sécurité, la valeur enregistrée n\'est pas affichée","stream":"Flux","Stream":"Flux","Stream did not complete successfully":"Flux non terminé avec succès","Stream Mode":"Mode streaming","Stream Status":"Statut du flux","Stream tokens incrementally as they are generated":"Diffuser les jetons au fur et à mesure de leur génération","Stream tokens via Server-Sent Events":"Diffuser les jetons via Server-Sent Events","Streaming":"Streaming","String Replace":"Remplacement de texte","Strip {{affix}}":"Supprimer {{affix}}","Strip prefix":"Supprimer le préfixe","Strip suffix":"Supprimer le suffixe","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Clé API Stripe (laisser vide sauf en cas de mise à jour)","Stripe Dashboard":"Tableau de bord Stripe","Stripe Gateway":"Passerelle Stripe","Stripe product price ID":"ID de prix du produit Stripe","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem nécessite de créer des produits sur la plateforme tierce et d\'entrer l\'ID","Structured output":"Sortie structurée","Submit":"Soumettre","Submit directly":"Soumettre directement","Submit request":"Envoyer une requête","Submit Result":"Soumettre le résultat","Submit Time":"Heure de soumission","Submitted":"Soumis","Submitting":"Envoi en cours","Submitting...":"Envoi...","Submodel":"Submodel","Subscribe Now":"S\'abonner maintenant","Subscribe to a plan for model access":"Souscrivez à un plan pour accéder aux modèles","Subscription":"Abonnement","Subscription Billing":"Facturation d\'abonnement","Subscription First":"Abonnement en priorité","Subscription Management":"Gestion des abonnements","Subscription Only":"Abonnement uniquement","System error: {{error}}":"Erreur système : {{error}}","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"La création et la modification des forfaits d’abonnement sont verrouillées jusqu’à ce que l’administrateur confirme les conditions de conformité dans les paramètres de la passerelle de paiement.","Subscription Plans":"Plans d\'abonnement","System initialized successfully":"Système initialisé avec succès","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"Les forfaits d’abonnement n’utilisent PAS le produit associé : chaque forfait dispose de son propre produit Pancake dédié, défini dans l’administration des abonnements (ou créé automatiquement via le bouton « + Créer »).","Subscription purchased successfully":"Abonnement acheté avec succès","Subscriptions":"Abonnements","Subtract":"Soustraire","succeeded":"réussi","Success":"Succès","Success rate":"Taux de réussite","Success rate excludes business rejections and includes the current partial hour.":"Le taux de réussite exclut les rejets métier et inclut l’heure en cours.","Successful scheduled or bulk checks can restore automatically disabled channels. Manually disabled channels stay disabled.":"Les contrôles périodiques ou groupés réussis peuvent rétablir les canaux désactivés automatiquement. Ceux désactivés manuellement le restent.","Successfully created {{count}} API Key(s)":"{{count}} clé(s) API créée(s) avec succès","Successfully created {{count}} redemption codes":"{{count}} codes de réduction créés avec succès","Successfully deleted {{count}} API key(s)":"{{count}} clé(s) API supprimée(s) avec succès","Successfully deleted {{count}} invalid redemption codes":"{{count}} code(s) d\'échange invalide(s) supprimé(s) avec succès","Successfully deleted {{count}} model(s)":"{{count}} modèle(s) supprimé(s) avec succès","Successfully deleted {{count}} redemption codes":"{{count}} codes d’échange supprimés","Successfully disabled {{count}} model(s)":"{{count}} modèle(s) désactivé(s) avec succès","Successfully enabled {{count}} model(s)":"{{count}} modèle(s) activé(s) avec succès","Suffix":"Suffixe","Suffix Match":"Correspondance de suffixe","Suggested rules":"Règles suggérées","Summarize text":"Résumer le texte","SunoAPI":"SunoAPI","Sunset Glow":"Lueur du couchant","Super admin":"Super administrateur","Super Admin":"Super Administrateur","Tag cannot be empty":"La balise ne peut pas être vide","Super Large":"Très grand","Support for high concurrency with automatic load balancing":"Prise en charge de la haute concurrence avec équilibrage de charge automatique","Supported Applications":"Applications prises en charge","Supported endpoints":"Points de terminaison pris en charge","Supported Imagine Models":"Modèles Imagine pris en charge","Supported interfaces":"Interfaces prises en charge","Supported modalities":"Modalités prises en charge","Supported models":"Modèles pris en charge","Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.":"Opérateurs pris en charge : eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Laissez vide pour autoriser tous les utilisateurs.","Supported parameters":"Paramètres pris en charge","Supported variables":"Variables supportées","Supports `-thinking`, `-thinking-":"Prend en charge `-thinking`, `-thinking-","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"Prend en charge le balisage HTML ou l\'intégration d\'iframe. Entrez le code HTML directement, ou fournissez une URL complète pour l\'intégrer automatiquement en tant qu\'iframe.","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"Prend en charge la configuration en un clic et s\'adapte parfaitement à la configuration multi-protocole NewAPI.","Supports plugin extensions":"Prend en charge les extensions","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"Prend en charge PNG, JPG, SVG ou WebP. Taille recommandée : 128×128 ou moins.","Surprise me":"Surprends-moi","Sustained tokens per second":"Jetons par seconde soutenus","Swap Face":"Échanger le visage","Switch affinity on success":"Changer l\'affinité en cas de succès","Switch to JSON":"Passer à JSON","Switch to Visual":"Passer à l\'affichage visuel","Switch to visual editor":"Passer à l’éditeur visuel","Switch to visual mode to add rules or apply templates.":"Passez en mode visuel pour ajouter des règles ou appliquer des modèles.","Switch to visual pricing?":"Passer à la tarification visuelle ?","Switching regenerates the expression from the price table and replaces its original formatting and tier names. Changes apply only after saving.":"L’expression sera régénérée à partir du tableau des prix. Sa mise en forme et les noms des paliers seront remplacés. Les modifications prendront effet après enregistrement.","Sync":"Synchrone","Sync Endpoint":"Point de terminaison de synchronisation","Sync Endpoints":"Points de synchronisation","Sync Fields":"Synchroniser les champs","Sync from the public upstream metadata repository.":"Synchroniser depuis le dépôt de métadonnées public en amont.","Sync metadata":"Synchroniser les métadonnées","Sync missing metadata":"Synchroniser les métadonnées manquantes","Sync model metadata":"Synchroniser les métadonnées des modèles","Sync model pricing":"Synchroniser les tarifs des modèles","Sync models":"Synchroniser les modèles","Sync Now":"Synchroniser maintenant","Task timed out":"La tâche a expiré","Task timed out (a task left by the old system is not refunded; contact the administrator)":"La tâche a expiré (une tâche laissée par l\'ancien système n\'est pas remboursée ; contactez l\'administrateur)","Sync policy":"Politique de synchronisation","Sync pricing":"Synchroniser les tarifs","Sync results":"Résultats de synchronisation","Sync scope":"Périmètre de synchronisation","Sync steps":"Étapes de synchronisation","Sync this model with official upstream":"Synchroniser ce modèle avec la source amont officielle","Sync Upstream":"Synchroniser l\'amont","Sync Upstream Models":"Synchroniser les modèles amont","Synced upstream models":"Modèles en amont synchronisés","Synchronize models and vendors from an upstream source":"Synchroniser les modèles et les fournisseurs à partir d\'une source amont","Synchronous":"Synchrone","Telegram ID is empty!":"L’ID Telegram est vide !","Syncing prices, please wait...":"Synchronisation des prix, veuillez patienter...","Syncing...":"Synchronisation...","System":"Système","System Administration":"Administration du système","System Announcements":"Annonces système","System Behavior":"Comportement du système","System constraint":"Contrainte système","System data statistics":"Statistiques des données système","System default":"Système par défaut","System Info":"Infos système","System Information":"Informations système","System initialized successfully! Redirecting…":"Système initialisé avec succès ! Redirection…","System logo":"Logo du système","System maintenance":"Maintenance du système","System Memory":"Mémoire système","System Memory Stats":"Statistiques de la mémoire système","System Name":"Nom du système","System name is required":"Le nom du système est requis","System Notice":"Avis système","System Performance Monitoring":"Surveillance des performances système","System prompt":"Invite système","System Prompt":"Invite système","System Prompt Concatenation":"Concaténation des invites système","System Prompt Override":"Remplacement du prompt système","System retry exclusion":"Exclusion système de reprise","System settings":"Paramètres système","System Settings":"Paramètres du système","System setup wizard":"Assistant de configuration du système","System task records":"Historique des tâches système","System Tasks":"Tâches système","System updates":"Mises à jour du système","System updates, current version: {{version}}":"Mises à jour du système, version actuelle : {{version}}","System Version":"Version du système","Table view":"Vue en tableau","Tag":"Balise","Tag Aggregate":"Agrégat de balises","Tag Mode":"Mode Balise","Tag Name":"Nom de l\'étiquette","Tag set successfully":"Tag défini avec succès","Tag updated successfully":"Tag mis à jour avec succès","The access token lacks the required permission: {{scope}}":"Le jeton d\'accès n\'a pas l\'autorisation requise : {{scope}}","Tag:":"Balise :","Tags":"Balises","Take photo":"Prendre une photo","Take screenshot":"Prendre une capture d\'écran","Target":"Cible","Target Endpoint":"Point cible","Target Field":"Champ cible","Target Field Path":"Chemin du champ cible","Target group":"Groupe cible","Target Header":"En-tête cible","Target not recorded":"Cible non enregistrée","Target Path (optional)":"Chemin cible (optionnel)","Target User":"Utilisateur cible","Target user not found":"Utilisateur cible introuvable","Target username":"Utilisateur cible","Target vendor":"Fournisseur cible","The Classic frontend has been removed. The theme can only be set to default":"L\'interface Classic a été supprimée. Le thème ne peut être défini que sur default","Task":"Tâche","Task billing":"Facturation de tâche","The current sign-in method does not support security verification":"La méthode de connexion actuelle ne prend pas en charge la vérification de sécurité","Task Details":"Détails de la tâche","Task failed":"Échec de la tâche","Task History":"Historique des tâches","Task ID":"ID de la tâche","Task ID:":"ID de tâche :","Task logs":"Journaux des tâches","Task Logs":"Journaux de tâches","Task Plugin":"Plugin de tâche","Task plugin *":"Plugin de tâche *","Task plugin setting updated":"Paramètre des plugins de tâche mis à jour","Task plugins":"Plugins de tâche","Task Plugins":"Plugins de tâches","The longest log time range must be at least 1 day":"La plage maximale des journaux doit être d\'au moins 1 jour","The longest time range a user can view at once in the logs and on the dashboard, and the longest range any export can cover.":"La plus longue période qu\'un utilisateur peut consulter en une fois dans les journaux et le tableau de bord, et la plus longue période couverte par un export.","Task pricing":"Tarification des tâches","Task pricing must be converted manually using the task usage schema.":"La tarification des tâches doit être convertie manuellement selon leur schéma d’utilisation.","Task pricing not configured":"Tarification des tâches non configurée","Task usage data is required to estimate this expression. Check the model\'s task plugin configuration.":"Les données d’utilisation des tâches sont nécessaires pour estimer le coût de cette expression. Vérifiez la configuration du plugin de tâches du modèle.","Task usage metadata is unavailable. Pricing details cannot be displayed.":"Les métadonnées d’utilisation des tâches sont indisponibles. Les détails tarifaires ne peuvent pas être affichés.","Task usage prices are USD per declared unit. They are not token prices and are not divided by one million.":"Les tarifs d\'utilisation sont exprimés en USD par unité déclarée. Ce ne sont pas des tarifs par jeton et ils ne sont pas divisés par un million.","Task usage prices are USD per declared unit. Token fields use dollars per 1M tokens; the editor writes / 1000000 into the expression. Other units are not divided by one million.":"Les prix d\'usage des tâches sont en USD par unité déclarée. Les champs token utilisent des dollars pour 1 M de tokens ; l\'éditeur écrit / 1000000 dans l\'expression. Les autres unités ne sont pas divisées par un million.","Tasks currently pending or running.":"Tâches actuellement en attente ou en cours d’exécution.","Team Collaboration":"Collaboration d\'équipe","The ratio config API is not enabled":"L\'API de configuration des ratios n\'est pas activée","Technical Support":"Support technique","Telegram":"Telegram","Telegram authorization failed. Please try again.":"L’autorisation Telegram a échoué. Réessayez.","The search pattern can contain at most 2 % wildcards":"Le motif de recherche peut contenir au plus 2 jokers %","The search pattern cannot contain consecutive % wildcards":"Le motif de recherche ne peut pas contenir de jokers % consécutifs","Telegram binding failed. Please try again.":"Échec de la liaison Telegram. Veuillez réessayer.","Telegram binding is disabled.":"La liaison Telegram est désactivée.","Telegram login has changed. Reload the page and start Telegram OAuth again.":"La connexion Telegram a changé. Rechargez la page et relancez Telegram OAuth.","Telegram Login Widget":"Widget de connexion Telegram","Telegram OAuth Client ID from BotFather":"Client ID Telegram OAuth fourni par BotFather","Telegram OAuth Client Secret from BotFather":"Client Secret Telegram OAuth fourni par BotFather","Telegram OAuth is not configured or enabled. Please contact your administrator.":"Telegram OAuth n’est pas configuré ou activé. Contactez votre administrateur.","Temperature":"Température","Template":"Modèle","The system is already initialized":"Le système est déjà initialisé","Template variables:":"Variables de modèle :","Templates":"Modèles","Templates appended":"Modèles ajoutés","The time range cannot exceed {{days}} days":"La plage de temps ne peut pas dépasser {{days}} jours","Tencent":"Tencent","Termination requested":"Arrêt demandé","Test":"Tester","Test {{count}} matching models":"Tester les {{count}} modèles correspondants","Test {{count}} selected":"Tester {{count}} sélectionné(s)","Test a model with a starter prompt, or write your own request below.":"Testez un modèle avec un prompt de départ, ou rédigez votre propre demande ci-dessous.","Test all {{count}} models":"Tester les {{count}} modèles","Test All Channels":"Tester tous les canaux","Test Channel Connection":"Tester la connexion du canal","Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.":"Tester les canaux, actualiser les soldes et activer/désactiver des canaux individuellement, par lot ou par tag.","Test Connection":"Tester la connexion","Test connectivity for:":"Tester la connectivité pour :","Test failed":"Échec du test","Test interval (minutes)":"Intervalle de test (minutes)","Test Latency":"Tester la latence","Test Mode":"Mode test","Test Model":"Tester le modèle","Test models and prompts from the browser":"Tester les modèles et les prompts depuis le navigateur","Test selected models":"Tester les modèles sélectionnés","Testing all enabled channels started. Please refresh to see results.":"Test de tous les canaux activés démarré. Veuillez actualiser pour voir les résultats.","Testing...":"Test en cours...","Text":"Texte","Text description of the desired image":"Description textuelle de l\'image souhaitée","Text description of the desired video":"Description textuelle de la vidéo souhaitée","Text Input":"Entrée texte","Text or array of texts to embed":"Texte ou tableau de textes à vectoriser","Text Output":"Sortie texte","Text to Video":"Texte vers vidéo","Text-only requests":"Requêtes texte seul","The access token lacks the required permission":"Le jeton d’accès ne dispose pas de l’autorisation requise","The action details are invalid.":"Les détails de l’action sont invalides.","The admin configured three groups and one special ratio rule:":"L’administrateur a configuré trois groupes et une règle de taux spécial :","The admin wants vip users to pay even less when they use premium. That needs an override rule: in the override matrix, set the cell at row vip, column premium to 0.3.":"L’administrateur veut que les utilisateurs vip paient encore moins lorsqu’ils utilisent premium. Il faut une règle de remplacement : dans la matrice, définissez la cellule ligne vip, colonne premium à 0,3.","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"Le compte administrateur est déjà initialisé. Vous pouvez conserver vos identifiants existants et passer à l\'étape suivante.","The administrator configured an external link for this document.":"L\'administrateur a configuré un lien externe pour ce document.","The administrator has not configured a privacy policy yet.":"L\'administrateur n\'a pas encore configuré de politique de confidentialité.","The administrator has not configured a user agreement yet.":"L\'administrateur n\'a pas encore configuré d\'accord utilisateur.","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"L\'administrateur n\'a pas encore configuré de contenu \'À propos\'. Vous pouvez le définir dans la page des paramètres, en supportant le HTML ou l\'URL.","The API key used for the requests":"La clé API utilisée pour les requêtes","The authenticator code is incorrect.":"Le code d’authentification est incorrect.","The binding will complete automatically after authorization":"La liaison se terminera automatiquement après l\'autorisation","This API is deprecated":"Cette API est obsolète","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"Le produit associé alimente les recharges de portefeuille : lorsqu’un utilisateur saisit un montant, new-api lance le paiement sur ce produit Pancake unique et remplace le prix pour la session, sans devoir précréer des SKU de 1 $, 5 $ ou 10 $.","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"La boutique associée est le conteneur parent de tous les produits Pancake que new-api crée depuis cette administration, y compris le produit de recharge de portefeuille et les produits de forfaits d’abonnement. Une seule boutique suffit ; choisissez-en une autre uniquement si vous gérez réellement des catalogues Pancake séparés.","The button fills in this website and keeps any existing website addresses. Save changes on the settings page to apply.":"Le bouton renseigne ce site et conserve les adresses déjà saisies. Enregistrez les modifications sur la page des paramètres pour les appliquer.","The change succeeded, but the notification email could not be sent.":"La modification a réussi, mais l’e-mail de notification n’a pas pu être envoyé.","The changelog could not be fetched or parsed. Please try again.":"Impossible de récupérer ou d’analyser le journal des modifications. Veuillez réessayer.","The converted price must be a finite, non-negative number.":"Le prix converti doit être un nombre fini et positif ou nul.","The current setting could not be loaded. You can still enter the website domain yourself.":"Le réglage actuel n’a pas pu être chargé. Vous pouvez saisir le domaine du site manuellement.","The deployment node that handled the requests":"Le nœud de déploiement ayant traité les requêtes","This channel is not in multi-key mode":"Ce canal n\'est pas en mode multi-clés","The downloaded source does not match the sha256 declared in the index. Do not install it.":"Le code téléchargé ne correspond pas au sha256 déclaré dans l’index. Ne l’installez pas.","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"Le domaine effectif pour l\'enregistrement de la clé d\'accès. Doit correspondre au domaine actuel ou être son domaine parent.","The entered text does not match the required text.":"Le texte saisi ne correspond pas au texte requis.","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"L’environnement (test ou production) est déterminé par la clé collée ici : utilisez la clé de test pendant l’intégration, puis remplacez-la par la clé de production lors de la mise en ligne.","The exact model identifier as used in API requests.":"L\'identifiant exact du modèle tel qu\'utilisé dans les requêtes API.","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"Les modèles suivants présentent des conflits de type de facturation (prix fixe vs facturation au ratio). Confirmez pour procéder aux changements.","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"Les modèles suivants dans la redirection du modèle n\'ont pas été ajoutés à la liste \\"Modèles\\" et peuvent échouer lors de l\'invocation en raison de modèles disponibles manquants :","The gateway rejected this plugin":"La passerelle a rejeté ce plugin","The index could not be fetched or parsed: {{message}}. The host may block cross-origin requests.":"Impossible de récupérer ou d’analyser l’index : {{message}}. L’hôte bloque peut-être les requêtes cross-origin.","The legacy token stops working on {{date}}. Create a new token to replace it.":"L’ancien jeton cessera de fonctionner le {{date}}. Créez un nouveau jeton pour le remplacer.","The login session that started this Telegram binding is no longer valid.":"La session de connexion ayant lancé cette liaison Telegram n’est plus valide.","The mapped upstream model(s)":"Le(s) modèle(s) amont mappé(s)","The model routing configuration could not be verified.":"La configuration du routage du modèle n’a pas pu être vérifiée.","The model that was requested":"Le modèle qui a été demandé","The model you\'re looking for doesn\'t exist.":"Le modèle que vous recherchez n\'existe pas.","The model-level expression cannot be evaluated by: {{plugins}}":"Ces fournisseurs ne peuvent pas évaluer l’expression du modèle : {{plugins}}","The name displayed across the application":"Le nom affiché dans l\'application","The new token will only be shown once. Copy it and store it securely.":"Le nouveau jeton ne sera affiché qu’une seule fois. Copiez-le et conservez-le en lieu sûr.","The OAuth account does not match the account linked to your profile.":"Ce compte OAuth ne correspond pas au compte associé à votre profil.","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"L\'URL publique de votre serveur, utilisée pour les rappels OAuth, les webhooks et autres intégrations externes","The requested chat preset does not exist or has been removed.":"Le préréglage de discussion demandé n\'existe pas ou a été supprimé.","The reset request stays disabled until a credit is available.":"La demande de réinitialisation reste désactivée tant qu’aucun crédit n’est disponible.","The result was returned in the API response and was not saved as an artifact":"Le résultat a été renvoyé dans la réponse de l\'API et n\'a pas été enregistré comme artefact","The server returned the following result. Unselected models remain pending.":"Voici le résultat renvoyé par le serveur. Les modèles non sélectionnés restent en attente.","The setup wizard will use this database during initialization.":"L\'assistant de configuration utilisera cette base de données lors de l\'initialisation.","The site exchange rate is invalid. Prices are shown in USD.":"Le taux de change du site est invalide. Les prix sont affichés en USD.","The site is not available at the moment.":"Le site n\'est pas disponible pour le moment.","The slug is appended to the URL:":"Le slug est ajouté à l\'URL :","The source is unavailable or this browser cannot calculate SHA-256. The gateway checks the published hash during installation.":"Le code est indisponible ou le navigateur ne peut pas calculer SHA-256. La passerelle vérifie l’empreinte publiée à l’installation.","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"La synchronisation récupérera les modèles et fournisseurs manquants à partir de la source sélectionnée. Les enregistrements existants ne sont mis à jour que lorsque vous approuvez les conflits.","The system always bills in USD. Site currency makes entering and converting prices easier; amounts are converted to USD using the site exchange rate. Switching currencies does not change the actual price. Raw billing expressions always use USD.":"Le système facture toujours en USD. La devise du site facilite la saisie et la conversion des prix ; les montants sont convertis en USD au taux du site. Changer de devise ne modifie pas le prix réel. Les expressions de facturation brutes utilisent toujours les USD.","The system currently uses: {{domain}}":"Le système utilise actuellement : {{domain}}","The task was accepted; submission cannot be replayed":"Tâche acceptée : soumission non rejouable","The Telegram authorization request is invalid or expired.":"La demande d’autorisation Telegram est invalide ou a expiré.","The telegram OAuth provider name is reserved. Ask your administrator to rename the conflicting custom provider.":"Le nom de fournisseur OAuth telegram est réservé. Demandez à votre administrateur de renommer le fournisseur personnalisé en conflit.","The token group that will have a custom ratio":"Le groupe de jetons qui aura un ratio personnalisé","The token has no group, so it is billed as the user group vip, using the base ratio of vip.":"Le jeton n’a pas de groupe, il est donc facturé sous le groupe d’utilisateurs vip, avec le taux de base de vip.","The two roles of a group":"Les deux rôles d’un groupe","The two-factor setup has expired or changed. Start setup again.":"La configuration à deux facteurs a expiré ou changé. Recommencez.","The unique identifier for this model":"L\'identifiant unique de ce modèle","This OAuth provider still has linked users and cannot be deleted. Unbind all users first.":"Ce fournisseur OAuth a encore des utilisateurs liés et ne peut pas être supprimé. Dissociez d’abord tous les utilisateurs.","The unique name for this vendor":"Le nom unique de ce fournisseur","The upstream address this plugin sends requests to. The plugin declares no default, so it must be filled in.":"Adresse amont vers laquelle ce plugin envoie ses requêtes. Le plugin ne déclare aucune valeur par défaut, elle doit donc être renseignée.","The upstream channel that served the requests":"Le canal en amont ayant servi les requêtes","The upstream key has unlimited quota. Turn on \\"Allow querying user quota\\" for this key on the upstream to see the real balance.":"La clé en amont a un quota illimité. Activez « Autoriser la consultation du quota utilisateur » pour cette clé en amont afin de voir le solde réel.","The upstream natively supports all three protocols; every selected route is forwarded without conversion.":"Le service amont prend nativement en charge les trois protocoles ; chaque route sélectionnée est transférée sans conversion.","The upstream response is valid JSON, but it does not match the OpenAI credit_summary format. The channel balance was not updated.":"La réponse amont est un JSON valide, mais ne correspond pas au format OpenAI credit_summary. Le solde du canal n\'a pas été mis à jour.","The upstream returned a model name different from both the requested and upstream models. Aliases or dated versions may also cause this; this warning alone does not prove model substitution.":"Le modèle renvoyé diffère du modèle demandé et de celui transmis en amont. Un alias ou une version datée peut aussi expliquer cet écart ; cet avertissement seul ne prouve pas une substitution de modèle.","The URL for this chat client.":"L\'URL de ce client de discussion.","The URL returned HTTP {{status}}. Check the address, or download the file and paste its source below.":"L’URL a renvoyé HTTP {{status}}. Vérifiez l’adresse, ou téléchargez le fichier et collez son code ci-dessous.","The user group applied to the requests":"Le groupe d\'utilisateurs appliqué aux requêtes","The user who made the requests":"L\'utilisateur à l\'origine des requêtes","The vendor no longer exists. Reload the vendor list.":"Ce fournisseur n’existe plus. Rechargez la liste.","Theme":"Thème","Theme preset":"Préréglage du thème","Theme Settings":"Paramètres du thème","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"Il y a à la fois des modèles à ajouter et à supprimer, mais vous n\'avez sélectionné qu\'un seul type. Confirmer l\'envoi uniquement des éléments sélectionnés ?","This rule does not have include_rule_name enabled, so its cache cannot be cleared by rule":"Cette règle n\'a pas include_rule_name activé ; son cache ne peut donc pas être vidé par règle","There is a rule for vip billed as premium → use its ratio 0.3":"Il existe une règle pour vip facturé sous premium → son taux 0,3 s’applique","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"Ces modèles restent encore sélectionnés mais ne figurent pas dans la liste renvoyée par l\'amont ; les noms qui sont uniquement des clés sources de model_mapping sont exclus. Modifiez la sélection avant d\'enregistrer.","This slug conflicts with a built-in OAuth provider":"Ce slug entre en conflit avec un fournisseur OAuth intégré","This slug is already in use":"Ce slug est déjà utilisé","These models were not returned by the upstream. Uncheck to remove them, or select them again before saving. Model mapping source aliases are excluded.":"Ces modèles n’ont pas été renvoyés par le fournisseur en amont. Décochez-les pour les retirer ou recochez-les avant d’enregistrer. Les alias sources du mappage de modèles sont exclus.","These plugins use this channel\'s connection settings.":"Ces plugins utilisent les paramètres de connexion de ce canal.","These toggles affect whether certain request fields are passed through to the upstream provider.":"Ces bascules déterminent si certains champs de demande sont transmis au fournisseur en amont.","These values come from the source index and are shown for review only. The gateway admits the plugin based on the metadata compiled from its source.":"Ces valeurs proviennent de l’index de la source et sont affichées à titre d’examen uniquement. La passerelle admet le plugin d’après les métadonnées compilées depuis son code.","Thinking Suffix Adapter":"Adaptateur de suffixe thinking","Thinking to Content":"Réflexion vers Contenu","Thinking...":"Réflexion...","Third-party":"Tiers","Third-party — use at your own risk":"Tiers — à vos risques et périls","Third-party account bindings (read-only, managed by user in profile settings)":"Liaisons de comptes tiers (lecture seule, gérées par l\'utilisateur dans les paramètres de profil)","Third-party account bindings (read-only, managed by user in Security & Access)":"Comptes tiers liés (lecture seule, gérés par l’utilisateur dans « Sécurité et accès »)","This user has no active subscription to this plan":"Cet utilisateur n\'a aucun abonnement actif à ce forfait","Third-party Payment Config":"Configuration de paiement tiers","This user is already a common user":"Cet utilisateur est déjà un utilisateur standard","This user is already an administrator":"Cet utilisateur est déjà administrateur","Third-party plugin risk":"Risque des plugins tiers","Third-party source risk":"Risque des sources tierces","Third-party-only plugins become unavailable immediately. In-flight tasks will be handled by timeout cleanup.":"Les plugins tiers deviennent immédiatement indisponibles. Les tâches en cours seront gérées par le nettoyage après expiration.","This action cannot be undone.":"Cette action est irréversible.","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"Cette action est irréversible. Cela supprimera définitivement votre compte et toutes vos données de nos serveurs.","This action will permanently remove 2FA protection from your account.":"Cette action supprimera définitivement la protection 2FA de votre compte.","This announcement will be removed from the list.":"Cette annonce sera retirée de la liste.","This API key has no quota limit. Requests still require available wallet or subscription quota.":"Cette clé API est sans plafond. Les requêtes nécessitent toujours un solde ou un quota d’abonnement disponible.","This API shortcut will be removed from the list.":"Ce raccourci API sera retiré de la liste.","This base URL points at a private or local network host. Make sure it is an upstream you control.":"Cette URL de base pointe vers un hôte privé ou local. Vérifiez qu\'il s\'agit d\'un amont que vous contrôlez.","This base URL uses plain HTTP, so the channel key is sent unencrypted.":"Cette URL de base utilise HTTP en clair : la clé du canal sera envoyée sans chiffrement.","This callback URL updates from the slug field and is the value to register with your provider.":"Cette URL de rappel se met à jour à partir du champ slug et doit être enregistrée auprès de votre fournisseur.","This changelog is not available in your language. Showing English.":"Ce journal n’est pas disponible dans votre langue. Affichage en anglais.","This channel has no configured models.":"Ce canal n\'a aucun modèle configuré.","This channel is not an Ollama channel.":"Ce canal n\'est pas un canal Ollama.","This channel serves the models of every selected plugin. The upstream New API gateway must have the same plugins installed.":"Ce canal sert les modèles de chaque plugin sélectionné. La passerelle New API en amont doit avoir les mêmes plugins installés.","This channel type does not support fetching models":"Ce type de canal ne prend pas en charge la récupération de modèles","This channel type requires additional configuration":"Ce type de canal nécessite une configuration supplémentaire","This combination will be billed as free.":"Cette combinaison ne sera pas facturée.","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"Cette confirmation déverrouille les fonctionnalités de paiement, de codes de兑换, de forfaits d’abonnement et de récompenses d’invitation. Veuillez lire attentivement les déclarations.","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"Ce réglage contrôle la limitation des requêtes de modèles. La limitation des routes Web/API se configure via les variables d\'environnement et peut encore renvoyer 429.","This data may be unreliable, use with caution":"Ces données peuvent être peu fiables, utilisez-les avec prudence","This device does not support Passkey":"Cet appareil ne prend pas en charge Passkey","This device does not support Passkey verification.":"Cet appareil ne prend pas en charge la vérification par clé d\'accès.","This domain does not match the current website. Passkeys may not work here.":"Ce domaine ne correspond pas au site actuel. Les Passkeys risquent de ne pas fonctionner ici.","This email address is already in use.":"Cette adresse e-mail est déjà utilisée.","This {{provider}} account cannot be linked to an existing account automatically, please sign in or register another way and then link {{provider}} in account settings":"Ce compte {{provider}} ne peut pas être lié automatiquement à un compte existant. Connectez-vous ou inscrivez-vous d’une autre manière, puis liez {{provider}} dans les paramètres du compte","This {{provider}} account has already been bound":"Ce compte {{provider}} est déjà lié","This email address is not allowed by the administrator\'s email policy.":"Cette adresse e-mail n’est pas autorisée par la politique de l’administrateur.","This expression cannot be edited visually without losing information.":"Cette expression ne peut pas être modifiée visuellement sans perte d’information.","This expression cannot be expanded into a price table. View the original expression below.":"Cette expression ne peut pas être présentée sous forme de tableau tarifaire. Consultez l’expression d’origine ci-dessous.","This expression cannot be represented by the price table. Switching discards the entire expression, including request rules, and resets all prices to zero. Configure prices before saving.":"Cette expression ne peut pas être représentée dans le tableau des prix. Le changement supprimera toute l’expression, y compris les règles de requête, et remettra tous les prix à zéro. Configurez les prix avant d’enregistrer.","This expression cannot be represented by the price table. You can switch to visual editing by confirming that the expression will be discarded.":"Cette expression ne peut pas être représentée dans le tableau des prix. Vous pouvez passer à l’éditeur visuel en confirmant sa suppression.","This expression cannot be simulated in the browser.":"Cette expression ne peut pas être simulée dans le navigateur.","This expression does not price each combination exactly once, so it opens as a raw expression. Sparse or custom pricing stays in this editor.":"Cette expression ne définit pas exactement un prix pour chaque combinaison ; elle s’ouvre donc dans l’éditeur d’expression brute. Les tarifs partiels ou personnalisés restent dans cet éditeur.","This expression exceeds the browser simulation limits.":"Cette expression dépasse les limites de simulation du navigateur.","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"Cette expression est trop complexe pour l\'éditeur visuel. Passez en mode expression pour la modifier.","This external account is already bound.":"Ce compte externe est déjà lié.","This FAQ entry will be removed from the list.":"Cette entrée de FAQ sera retirée de la liste.","This feature is experimental. Configuration format and behavior may change.":"Cette fonctionnalité est expérimentale. Le format de configuration et le comportement peuvent changer.","This feature requires signing in to the dashboard":"Cette fonctionnalité nécessite une connexion au tableau de bord","This field does not support wildcards or regular expressions.":"Ce champ ne prend pas en charge les jokers ni les expressions régulières.","This historical record predates audit-info tracking and cannot be backfilled. The current instance already records server IP, callback IP, payment method, and system version for new top-ups going forward.":"Cet enregistrement historique date d\'avant le suivi des informations d\'audit et ne peut pas être complété rétroactivement. La version actuelle enregistre déjà l\'IP du serveur, l\'IP de rappel, le mode de paiement et la version du système pour les nouveaux paiements à venir.","This identifier is sent to the payment backend when creating an order. Use alipay for Alipay, wxpay for WeChat Pay, stripe for Stripe. Custom values must be supported by your payment provider.":"Cet identifiant est envoyé au backend de paiement lors de la création d’une commande. Utilisez alipay pour Alipay, wxpay pour WeChat Pay, stripe pour Stripe. Les valeurs personnalisées doivent être prises en charge par votre fournisseur de paiement.","This instance is using an automatic hostname. Set NODE_NAME to a stable unique value for multi-instance management.":"Cette instance utilise un nom d’hôte automatique. Définissez NODE_NAME sur une valeur stable et unique pour la gestion multi-instance.","This is a task model billed by usage (e.g. seconds, resolution). Prices entered here act as a per-call base rate, not per-token prices.":"Ce modèle de tâche est facturé selon l’utilisation (p. ex. secondes, résolution). Les prix saisis ici servent de tarif de base par appel, et non de prix par jeton.","This list does not include the current website. Add {{origin}} if users sign in here.":"Ce site ne figure pas dans la liste. Ajoutez {{origin}} si les utilisateurs s’y connectent.","This may cause cache failures.":"Cela peut provoquer des échecs de cache.","This may take a few moments while we validate the request and update your session.":"Cela peut prendre quelques instants pendant que nous validons la requête et mettons à jour votre session.","This model already uses an expression.":"Ce modèle utilise déjà une expression.","This model has both fixed price and ratio billing conflicts":"Ce modèle présente des conflits de facturation à la fois en prix fixe et au ratio","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"Ce modèle possède à la fois un prix fixe et des paramètres de ratio. L’enregistrement du mode actuel réécrira les champs en conflit.","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"Ce modèle possède à la fois un prix fixe et des prix par token. L’enregistrement du mode actuel réécrira les champs en conflit.","This model has provider-specific billing and must be converted manually.":"Ce modèle utilise une facturation propre au fournisseur et doit être converti manuellement.","This model is billed by usage, but the administrator has not configured its pricing yet.":"Ce modèle est facturé selon l’utilisation, mais l’administrateur n’a pas encore configuré sa tarification.","This model is not available in any group, or no group pricing information is configured.":"Ce modèle n\'est disponible dans aucun groupe, ou aucune information de tarification de groupe n\'est configurée.","This month":"Ce mois-ci","This OpenRouter Claude price derives cache-write usage from upstream cost and must be converted manually.":"Ce tarif OpenRouter Claude déduit les écritures en cache du coût amont et doit être converti manuellement.","This operation is only supported for vLLM channels":"Cette opération est réservée aux canaux vLLM","This operation is only supported for vLLM or SGLang channels":"Cette opération est réservée aux canaux vLLM ou SGLang","This page has not been created yet.":"Cette page n\'a pas encore été créée.","This Passkey domain is not available on this website. Use its original website or another verification method.":"Ce domaine de clé d’accès n’est pas disponible sur ce site. Utilisez le site d’origine ou une autre méthode de vérification.","This plan does not allow balance redemption":"Ce forfait ne permet pas le paiement avec le solde","This plugin has no factory fallback. Deleting or disabling it makes this platform unavailable.":"Ce plugin ne dispose d’aucune version intégrée de secours. Sa suppression ou désactivation rend la plateforme indisponible.","This plugin path does not resolve within the source repository.":"Ce chemin de plugin ne pointe pas dans le dépôt de la source.","This preview reads static plugin declarations. The gateway validates the plugin during installation.":"Cet aperçu lit les déclarations statiques du plugin. La passerelle valide le plugin à l’installation.","This project must be used in compliance with the":"Ce projet doit être utilisé conformément aux","This provider is unavailable for this model.":"Ce fournisseur est indisponible pour ce modèle.","This removes {{count}} failed models from this channel. This action cannot be undone.":"Cela supprime {{count}} modèles en échec de ce canal. Cette action est irréversible.","This route discovers upstream OpenAI models and cannot be split or matched by client model rules.":"Cette route découvre les modèles OpenAI en amont et ne peut être ni divisée ni associée par des règles de modèles clients.","This route is used only by channel management to discover upstream models.":"Cette route sert uniquement à la gestion du canal pour découvrir les modèles amont.","This route is used only by channel management to query the upstream balance.":"Cette route sert uniquement à la gestion du canal pour consulter le solde amont.","This session will lose access immediately and must sign in again.":"Cette session perdra immédiatement l’accès ; vous devrez vous reconnecter.","This site currently has {{count}} models enabled":"Ce site compte actuellement {{count}} modèles activés","This source does not publish a sha256 for this version, so the downloaded source cannot be pinned to what the source intended.":"Cette source ne publie pas de sha256 pour cette version : impossible de garantir que le code téléchargé est bien celui qu’elle a publié.","This source lists no installable task plugins.":"Cette source ne liste aucun plugin de tâches installable.","This Telegram account is already bound.":"Ce compte Telegram est déjà lié.","This Telegram account is not linked. Sign in using another method and link it first.":"Ce compte Telegram n’est pas lié. Connectez-vous autrement pour le lier.","This Telegram binding request has expired or has already been used.":"Cette demande de liaison Telegram a expiré ou a déjà été utilisée.","This tier catches any request that did not match earlier tiers.":"Ce palier récupère toute requête qui ne correspond à aucun palier précédent.","this token group":"ce groupe de jetons","This Uptime Kuma group will be removed from the list.":"Ce groupe Uptime Kuma sera retiré de la liste.","This user account is disabled.":"Ce compte utilisateur est désactivé.","This user account no longer exists.":"Ce compte utilisateur n’existe plus.","this user group":"ce groupe d\'utilisateurs","Token count exceeds the limit. Only exact search is allowed, do not use the % wildcard":"Le nombre de jetons dépasse la limite. Seule la recherche exacte est autorisée, n\'utilisez pas le joker %","This user has no bindings":"Cet utilisateur n\'a aucune liaison","This verification has already been used. Please verify again.":"Cette vérification a déjà été utilisée. Veuillez vous authentifier à nouveau.","This verification method is currently unavailable.":"Cette méthode de vérification est actuellement indisponible.","This verification method is not allowed for this action.":"Cette méthode de vérification n’est pas autorisée pour cette action.","Token has expired and cannot be enabled. Please modify the expiration time or set it to never expire":"Le jeton a expiré et ne peut pas être activé. Modifiez la date d\'expiration ou définissez-le pour qu\'il n\'expire jamais","This verification method requires its dedicated verification flow.":"Cette méthode nécessite son propre parcours de vérification.","This version is ignored":"Cette version est ignorée","Token ID or user ID is empty":"L\'ID du jeton ou l\'ID de l\'utilisateur est vide","This version is saved but not active. Activate it to replace the current version, or activate it later from the Versions tab.":"Cette version est enregistrée mais inactive. Activez-la pour remplacer la version actuelle, ou activez-la plus tard dans l’onglet Versions.","Token IDs cannot be empty":"Les ID de jetons ne peuvent pas être vides","This week":"Cette semaine","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"Cela ajoutera 2 règles modèles (Codex CLI et Claude CLI) à la liste de règles existante.","This will clear custom pricing ratios and revert to upstream defaults.":"Cela effacera les ratios de tarification personnalisés et rétablira les valeurs par défaut du fournisseur.","This will delete all":"Cela supprimera tout","This will delete all used, disabled, and expired redemption codes.":"Cela supprimera tous les codes d’échange utilisés, désactivés et expirés.","This will delete all channel affinity cache entries still in memory.":"Cela supprimera toutes les entrées de cache d\'affinité de canal encore en mémoire.","Token name is too long":"Le nom du jeton est trop long","This will delete temporary cache files that have not been used for more than 10 minutes":"Cela supprimera les fichiers de cache temporaires inutilisés depuis plus de 10 minutes","This will extend the deployment by the specified hours.":"Cela prolongera le déploiement du nombre d\'heures spécifié.","This will permanently delete all manually and automatically disabled channels. This action cannot be undone.":"Cela supprimera définitivement tous les canaux désactivés manuellement et automatiquement. Cette action ne peut pas être annulée.","This will permanently delete API key":"Cela supprimera définitivement la clé API","This will permanently delete redemption code":"Cela supprimera définitivement le code d\'échange","This will permanently delete user":"Cela supprimera définitivement l\'utilisateur","This will permanently remove all log entries created before {{date}}.":"Cela supprimera définitivement toutes les entrées de journal créées avant le {{date}}.","This will permanently remove log entries before the selected timestamp.":"Cela supprimera définitivement les entrées de journal antérieures à l\'horodatage sélectionné.","This will rebuild the channel routing index from every channel configuration, including supported models, groups, priorities, and weights. Routing may be briefly incomplete while the rebuild is running. Continue?":"Cette action reconstruit l’index de routage des canaux à partir de toutes les configurations, y compris les modèles pris en charge, les groupes, les priorités et les poids. Le routage peut être brièvement incomplet pendant la reconstruction. Continuer ?","Token quota is exhausted and cannot be enabled. Please modify the remaining quota or set it to unlimited":"Le quota du jeton est épuisé et il ne peut pas être activé. Modifiez le quota restant ou définissez-le comme illimité","This will remove {{removed}} forwarding routes and create {{created}} selected routes. Model list and balance routes will be preserved.":"Cette action supprimera {{removed}} routes de transfert et créera les {{created}} routes sélectionnées. Les routes de modèles et de solde seront conservées.","This will remove {{removed}} forwarding routes and replace them with the {{template}} template ({{created}} routes). Model list and balance routes will be preserved.":"Cette action supprimera {{removed}} routes de transfert et les remplacera par le modèle {{template}} ({{created}} routes). Les routes de liste des modèles et de solde seront conservées.","This will update the priority to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"La priorité de tous les {{count}} canaux avec le tag \\"{{tag}}\\" sera mise à jour à {{value}}. Continuer ?","This will update the weight to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"Le poids de tous les {{count}} canaux avec le tag \\"{{tag}}\\" sera mis à jour à {{value}}. Continuer ?","This year":"Cette année","Thought for {{duration}} seconds":"Réflexion pendant {{duration}} secondes","Three calls made by the same user, whose user group is vip:":"Trois appels du même utilisateur, dont le groupe est vip :","Three calls made by the same vip user. Assume the base price of one call is 10.":"Trois appels du même utilisateur vip. Supposons que le prix de base d’un appel est 10.","Three groups; the override matrix has exactly one cell filled in (highlighted).":"Trois groupes ; la matrice de remplacement n’a qu’une seule cellule remplie (surlignée).","Three steps to get started":"Trois étapes pour commencer","Throughput":"Débit","Throughput by group":"Débit par groupe","Throughput short":"TPS","Throughput trend":"Tendance du débit","Tier":"Palier","Tier billing mode":"Facturation du palier","Tier conditions":"Conditions du palier","Tier name":"Nom du palier","Tiered":"Par paliers","Tiered (billing expression)":"Par paliers (expression de facturation)","Tiered price table":"Grille de prix par paliers","Tiered pricing":"Tarification par paliers","tiers":"paliers","Too many items in batch request, maximum is {{max}}":"Trop d\'éléments dans la requête groupée, le maximum est {{max}}","Time":"Heure","Time between scheduled channel checks":"Intervalle entre les contrôles périodiques des canaux","Time functions use the timezone written in the expression.":"Les fonctions temporelles utilisent le fuseau horaire indiqué dans l’expression.","Time Granularity":"Granularité temporelle","Tool price \\"{{name}}\\" must be a finite non-negative number":"Le prix de l\'outil « {{name}} » doit être un nombre fini positif ou nul","Tool price \\"{{name}}\\" must be a non-negative number":"Le prix de l\'outil « {{name}} » doit être un nombre positif ou nul","Time range":"Plage horaire","Time remaining":"Temps restant","Tool prices must be a JSON object":"Les prix des outils doivent être un objet JSON","Time window for rate limiting":"Fenêtre de temps pour la limitation de débit","Time-based":"Selon l’heure","Time-sliced cache (Claude)":"Cache segmenté (Claude)","Time:":"Heure :","Timeline":"Chronologie","times":"Fois","Timezone":"Fuseau horaire","Timing":"Durée","Tip":"Astuce","Tip: after configuring one model, select others in the table and use bulk copy.":"Astuce : après avoir configuré un modèle, sélectionnez-en d’autres dans le tableau et utilisez la copie groupée.","to":"à","to access this resource.":"pour accéder à cette ressource.","To Anthropic Messages":"Vers Anthropic Messages","to confirm":"pour confirmer","To Gemini Generate Content":"Vers Gemini Generate Content","To Lower":"En minuscules","To Lowercase":"En minuscules","Top-up amount cannot be less than {{min}}":"Le montant de la recharge ne peut pas être inférieur à {{min}}","Top-up amount cannot exceed {{max}}":"Le montant de la recharge ne peut pas dépasser {{max}}","To OpenAI Chat":"Vers OpenAI Chat","To OpenAI Responses":"Vers OpenAI Responses","to override billing when a user in one group uses a token of another group.":"pour remplacer la facturation lorsqu\'un utilisateur d\'un groupe utilise un jeton d\'un autre groupe.","Top-up is processing, please try again later":"La recharge est en cours, veuillez réessayer plus tard","to the Models list so users can use them before the mapping sends traffic upstream.":"à la liste des modèles afin que les utilisateurs puissent les utiliser avant que le mappage n\'envoie le trafic en amont.","Top-up order does not exist":"La commande de recharge n\'existe pas","Top-up quota exceeds the range the system can represent":"Le quota de recharge dépasse la plage que le système peut représenter","Top-up quota limit exceeded":"Limite du quota de recharge dépassée","Top-up quota must be greater than 0":"Le quota de recharge doit être supérieur à 0","To Upper":"En majuscules","To Uppercase":"En majuscules","Topped up {{quota}} with a redemption code, code ID {{id}}":"Recharge de {{quota}} avec un code d\'échange, ID du code {{id}}","to view this resource.":"pour afficher cette ressource.","Today":"Aujourd\'hui","Toggle columns":"Basculer les colonnes","Toggle navigation menu":"Basculer le menu de navigation","Toggle plan":"Basculer le plan","Toggle theme":"Basculer le thème","token":"jeton","Token":"Jeton","token (unit)":"token","Token Breakdown":"Détails des tokens","Token Endpoint":"Point de terminaison de jeton","Token Endpoint (Optional)":"Point de terminaison du jeton (Facultatif)","Token estimator":"Estimation des jetons","Token group":"Groupe de jetons","Token has no group":"Jeton sans groupe","Token ID":"ID du jeton","Token identifier":"Identifiant du jeton","Total quota cannot be negative":"Le quota total ne peut pas être négatif","Token Limits":"Limites de jetons","Token management":"Gestion des jetons","Token Management":"Gestion des tokens","Token Mgmt":"Gestion des jetons","Token name":"Nom du jeton","Token Name":"Nom du jeton","Token obtained from your Gotify application":"Jeton obtenu depuis votre application Gotify","Token operation details":"Détails de l’opération sur les jetons","Token or per-call pricing":"Par jeton ou par requête","Token price for audio input.":"Prix par token pour l’entrée audio.","Token price for audio output.":"Prix par token pour la sortie audio.","Token price for cache reads.":"Prix par token pour les lectures du cache.","Token price for creating cache entries.":"Prix par token pour la création d’entrées de cache.","Token price for image input.":"Prix par token pour l’entrée image.","Token prices":"Prix des tokens","Token regenerated and copied to clipboard":"Jeton régénéré et copié dans le presse-papiers","Token scope":"Portée des jetons","Token share by model author across the last 24 hours":"Part des tokens par auteur de modèle sur les dernières 24 heures","Token share by model author across the past few weeks":"Part des tokens par auteur de modèle au cours des dernières semaines","Token share by model author across the past month":"Part des tokens par auteur de modèle au cours du dernier mois","Token share by model author across the past year":"Part des tokens par auteur de modèle au cours de la dernière année","Transfer failed {{error}}":"Échec du transfert {{error}}","Token share by model author since launch":"Part des tokens par auteur de modèle depuis le lancement","Token unit":"Unité de tokens","Token usage by model since launch":"Utilisation des tokens par modèle depuis le lancement","Token-based":"Basé sur les jetons","Tokenizer":"Tokeniseur","tokens":"jetons","Tokens":"Jeton","tokens / mo":"jetons / mois","Tokens by category":"Jetons par catégorie","Tokens Only":"Jetons uniquement","Tokens per minute":"Jetons par minute","Tokens since launch":"Jetons depuis le lancement","Tokens_usage":"Tokens","Tokens-only mode will show raw quota values regardless of this toggle.":"Le mode Tokens uniquement affichera les valeurs de quota brutes indépendamment de ce basculement.","Too many active login sessions. On a device where you are already signed in, open Login sessions and use “Sign out other sessions” to revoke them. If you cannot access a signed-in device, reset your password to sign out all sessions.":"Le nombre maximal de sessions de connexion actives est atteint. Sur un appareil déjà connecté, ouvrez « Sessions de connexion » et utilisez « Déconnecter les autres sessions » pour les révoquer. Si vous n’avez accès à aucun appareil connecté, réinitialisez votre mot de passe pour fermer toutes les sessions.","Too many files. Some were not added.":"Trop de fichiers. Certains n\'ont pas été ajoutés.","Too many incorrect codes. Start email verification again.":"Trop de codes incorrects. Recommencez la vérification de l’adresse e-mail.","Too many login sessions were created recently. Please wait for the rolling window to pass, then try again.":"Trop de sessions de connexion ont été créées récemment. Attendez la fin de la fenêtre glissante, puis réessayez.","Too many requests":"Trop de requêtes","Tool / function declarations the model may call":"Déclarations d\'outils / fonctions que le modèle peut appeler","Tool identifier":"Identifiant d’outil","Tool price settings":"Paramètres de prix des outils","Tool prices":"Prix des outils","Tool-choice policy or specific tool name":"Stratégie de choix d\'outil ou nom d\'outil spécifique","Tools":"Outils","Top {{count}}":"Top {{count}}","Turnstile token is empty":"Le jeton Turnstile est vide","Turnstile verification failed, please refresh and try again!":"La vérification Turnstile a échoué, veuillez actualiser et réessayer !","Top app":"Application principale","Top apps":"Top applications","Top Apps":"Meilleures applications","Top integrations using this model":"Principales intégrations utilisant ce modèle","Top model":"Modèle principal","Top models":"Top modèles","Top Models":"Top Modèles","Top models by traffic":"Modèles les plus utilisés","Top P":"Top P","Top up balance and view billing history.":"Recharger le solde et consulter l\'historique de facturation.","Top up, pay for subscriptions, check in, and transfer referral rewards.":"Recharger, payer des abonnements, pointer chaque jour et transférer les récompenses de parrainage.","Top Users":"Top utilisateurs","Top vendors":"Top fournisseurs","Top-up":"Recharge","Top-up amount options":"Options de montant de recharge","Top-up Audit Info":"Audits de rechargement","Top-up group ratios":"Ratios de groupe de recharge","Top-Up Link":"Lien de recharge","top-up ratio":"ratio de recharge","Top-up ratio":"Taux de recharge","Topup Amount":"Montant de la recharge","Total":"Total","Unable to connect to {{provider}} server, please try again later":"Impossible de se connecter au serveur {{provider}}, veuillez réessayer plus tard","Unable to create the Passkey credential":"Impossible de créer l’identifiant Passkey","Total {{count}} records":"{{count}} enregistrements au total","Total = used + remaining. It is not an initial allocation or a periodic budget; changing the remaining quota changes the total and percentage.":"Total = utilisé + restant. Ce n’est ni une allocation initiale ni un budget périodique. Modifier le quota restant change le total et le pourcentage.","Total Allocated":"Total alloué","Total attempt budget exhausted":"Budget de tentatives épuisé","Total check-ins":"Total des connexions","Total consumed":"Consommé total","Total consumed quota":"Quota total consommé","Total cost":"Coût total","Total Cost":"Coût total","Total Count":"Nombre total","Total earned":"Total gagné","Total Earned":"Total gagné","Total GPUs":"GPUs totaux","Unauthorized, insufficient privileges":"Non autorisé, privilèges insuffisants","Unauthorized, invalid access token":"Non autorisé, jeton d\'accès invalide","Unauthorized, invalid user info":"Non autorisé, informations utilisateur invalides","Unauthorized, not logged in and no access token provided":"Non autorisé : non connecté et aucun jeton d\'accès fourni","Unauthorized, the access token has expired":"Non autorisé, le jeton d\'accès a expiré","Total invitation revenue":"Revenu total des invitations","Total Log Size":"Taille totale des journaux","Total Quota":"Quota total","Unbound successfully":"Dissociation réussie","Total quota included in the plan, usable per billing period. 0 means unlimited.":"Quota total inclus dans le forfait, utilisable par période de facturation. 0 signifie illimité.","Total requests allowed per period. 0 = unlimited.":"Total des requêtes autorisées par période. 0 = illimité.","Total requests made":"Requêtes totales effectuées","Total Revenue":"Revenus cumulés","Total time":"Durée totale","Total tokens":"Jetons totaux","Total Tokens":"Jetons totaux","Total Usage":"Utilisation totale","Total Used":"Total consommé","Total:":"Total :","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"Suivre la consommation par requête pour l\'analyse de l\'utilisation. Garder ceci activé augmente les écritures en base de données.","Track usage, costs and performance with real-time analytics":"Suivez l\'utilisation, les coûts et les performances avec des analyses en temps réel","Tracked apps":"Applications suivies","Tracks current account base limits and additional metered usage on Codex upstream.":"Affiche les limites de base et l’utilisation supplémentaire (metered) du compte auprès de Codex en amont.","Trading insights, accounting, advisory":"Analyses de marché, comptabilité, conseil","Traditional Chinese":"Chinois traditionnel","Transfer":"Transférer","Undo":"Annuler","Unknown OAuth provider":"Fournisseur OAuth inconnu","Unknown rule name":"Nom de règle inconnu","Unknown setting type: {{type}}":"Type de paramètre inconnu : {{type}}","Transfer Amount":"Montant du transfert","Transfer failed":"Transfert échoué","Transfer Rewards":"Transférer les récompenses","Transfer successful":"Transfert réussi","Transfer to Balance":"Transférer vers le solde","Translation":"Traduction","Transparent Billing":"Facturation transparente","Trend":"Tendance","Trending down":"En baisse","Unsupported add mode":"Mode d\'ajout non pris en charge","Unsupported operation":"Opération non prise en charge","Unsupported payment channel":"Canal de paiement non pris en charge","Unsupported payment method":"Mode de paiement non pris en charge","Trending up":"En hausse","Triggered garbage collection":"Collecte des déchets déclenchée","Trim leading/trailing whitespace":"Supprimer les espaces en début/fin","Trim Prefix":"Supprimer le préfixe","Trim Space":"Supprimer les espaces","Trim Suffix":"Supprimer le suffixe","Truncate embeddings to this many dimensions":"Tronquer les vecteurs à autant de dimensions","Trusted":"Fiable","Try adjusting your search":"Essayez d\'ajuster votre recherche","Try adjusting your search to locate a missing model.":"Essayez d\'ajuster votre recherche pour localiser un modèle manquant.","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"Percentiles TTFT, débit et disponibilité sur 30 jours par groupe","TTL":"TTL","TTL (seconds, 0 = default)":"TTL (secondes, 0 = par défaut)","TTL (seconds)":"TTL (secondes)","Tune selection priority, testing, status handling, and request overrides.":"Ajustez la priorité de sélection, les tests, la gestion des statuts et les surcharges de requête.","Turnstile is enabled but site key is empty.":"Turnstile est activé mais la clé du site est vide.","Tutoring, learning aids, assessment":"Tutorat, aides à l\'apprentissage, évaluation","Two-factor Authentication":"Authentification à deux facteurs","Two-Factor Authentication":"Authentification à deux facteurs","Two-factor authentication disabled":"Authentification à deux facteurs désactivée","Two-factor authentication enabled successfully!":"Authentification à deux facteurs activée avec succès!","Two-factor authentication is already enabled.":"L’authentification à deux facteurs est déjà activée.","Two-factor authentication is not enabled.":"L’authentification à deux facteurs n’est pas activée.","Two-factor authentication is temporarily locked.":"L’authentification à deux facteurs est temporairement verrouillée.","Two-factor authentication reset":"Authentification à deux facteurs réinitialisée","Two-Step Verification":"Validation en deux étapes","Update successful":"Mise à jour réussie","Type":"Type","Type (common)":"Type (commun)","Type *":"Type *","Type to confirm":"Saisissez pour confirmer","Type a command or search...":"Tapez une commande ou recherchez...","Type the confirmation text here":"Saisissez ici le texte de confirmation","Type-Specific Settings":"Paramètres spécifiques au type","Type:":"Type :","UI granularity only — data is still aggregated hourly":"Granularité de l\'interface uniquement — les données sont toujours agrégées par heure","Unable to build Passkey assertion":"Impossible de créer l’assertion Passkey","Unable to compare versions":"Comparaison des versions impossible","Unable to confirm the update result":"Impossible de confirmer le résultat","Unable to estimate price for this deployment.":"Impossible d\'estimer le prix pour ce déploiement.","Unable to generate chat link. Please contact your administrator.":"Impossible de générer le lien de discussion. Veuillez contacter votre administrateur.","Unable to load groups":"Impossible de charger les groupes","Unable to load login sessions":"Impossible de charger les sessions de connexion","Unable to load rankings":"Impossible de charger les classements","Unable to load rankings data":"Impossible de charger les données des classements","Unable to open chat":"Impossible d\'ouvrir la discussion","Unable to parse Passkey login options from response":"Impossible de lire les options de connexion Passkey dans la réponse","Unable to parse structured pricing":"Impossible d\'analyser la tarification structurée","Unable to prepare chat link. Please ensure you have an enabled API key.":"Impossible de préparer le lien de chat. Veuillez vous assurer d\'avoir une clé API activée.","Unable to read clipboard":"Impossible de lire le presse-papiers","Unauthorized":"Non autorisé","Unauthorized Access":"Accès non autorisé","Unavailable":"Indisponible","Unbind":"Dissocier","Unbind failed":"Échec de la dissociation","Unbound {{provider}}":"{{provider}} dissocié","Unchanged":"Inchangé","Underflow":"Sous-dépassement","Underground":"Underground","Understand how user groups, token groups, ratios, and special rules work together.":"Comprendre comment les groupes utilisateur, groupes de jetons, ratios et règles spéciales fonctionnent ensemble.","Upgrade group does not exist":"Le groupe de mise à niveau n\'existe pas","Understand image inputs alongside text":"Comprendre des entrées image en complément du texte","Unexpected release payload":"Format de version inattendu","Unified API Gateway for":"Passerelle API unifiée pour","Unique identifier for this group.":"Identifiant unique pour ce groupe.","unit":"unité","Unit":"Unité","Unit price (local currency / USD)":"Prix unitaire (devise locale / USD)","Unit price (USD)":"Prix unitaire (USD)","Unit price must be greater than 0":"Le prix unitaire doit être supérieur à 0","Unit price: {{field}}":"Prix unitaire : {{field}}","Units per USD":"Unités par USD","Unknown":"Inconnu","Unknown device":"Appareil inconnu","Unknown version":"Version inconnue","Unlimited":"Illimité","Unlimited Quota":"Quota illimité","Unrecognized status code":"Code d\'état non reconnu","Unsaved changes":"Modifications non enregistrées","Unset legacy prices use the billing engine defaults.":"Les anciens tarifs non définis utilisent les valeurs par défaut du moteur de facturation.","Unset price":"Prix non défini","Unset price models":"Modèles sans prix","Unsupported account password hashing configuration.":"La configuration du hachage des mots de passe n’est pas prise en charge.","Unsupported verification method: {{method}}":"Méthode de vérification non prise en charge : {{method}}","Until":"Jusqu\'au","Untitled":"Sans titre","Untrusted upstream data:":"Données amont non fiables :","Unused":"Inutilisé","Up to 4 strings that stop generation":"Jusqu\'à 4 chaînes qui arrêtent la génération","Up to date":"À jour","Update":"Mettre à jour","Update All Balances":"Mettre à jour tous les soldes","Update API Key":"Mettre à jour la clé API","Update API token":"Modifier un jeton API","Update API token “{{name}}”":"Modifier le jeton API « {{name}} »","Update available":"Mise à jour disponible","Update Balance":"Mettre à jour le solde","Update balance for:":"Mise à jour du solde pour :","Update Channel":"Mettre à jour le canal","Update channel configuration and click save when you\'re done.":"Mettez à jour la configuration du canal et cliquez sur Enregistrer lorsque vous avez terminé.","Update check timed out. Try again.":"La vérification a expiré. Réessayez.","Update completed":"Mise à jour terminée","Update configuration":"Mettre à jour la configuration","Update failed":"Échec de la mise à jour","Update Model":"Mettre à jour le modèle","Update model configuration and click save when you\'re done.":"Mettez à jour la configuration du modèle et cliquez sur Enregistrer lorsque vous avez terminé.","Update plan info":"Mettre à jour les informations du plan","Update Provider":"Mettre à jour le fournisseur","Update Redemption Code":"Mettre à jour le code d\'échange","Update results":"Résultats de la mise à jour","Update selected fields":"Mettre à jour les champs sélectionnés","Upstream returned no usage":"L\'amont n\'a renvoyé aucune utilisation","Upstream returned no usage, so nothing was charged (possibly an upstream timeout)":"L\'amont n\'a renvoyé aucune utilisation, rien n\'a été facturé (probablement un délai d\'attente en amont)","Update succeeded":"Mise à jour réussie","Update the API key by providing necessary info.":"Mettez à jour la clé API en fournissant les informations nécessaires.","Upstream task not found":"Tâche introuvable en amont","Update the configuration for this custom OAuth provider.":"Mettre à jour la configuration de ce fournisseur OAuth personnalisé.","Upstream task timed out (over 1 hour)":"La tâche en amont a expiré (plus d\'une heure)","Update the redemption code by providing necessary info.":"Mettez à jour le code de remboursement en fournissant les informations nécessaires.","Update the reusable bundle below.":"Mettez à jour le bundle réutilisable ci-dessous.","Update the session binding after a successful switch":"Actualiser la liaison après un changement réussi","Update the user by providing necessary info.":"Mettre à jour l\'utilisateur en fournissant les informations nécessaires.","Update vendor information for {{name}}":"Mettre à jour les informations du fournisseur pour {{name}}","Update your password for account:":"Mettez à jour votre mot de passe pour le compte :","Update your password to keep your account secure":"Mettez à jour votre mot de passe pour sécuriser votre compte","Updated":"Mis à jour","Updated {{models}} model assignments and deleted {{vendors}} vendor records.":"{{models}} attributions mises à jour et {{vendors}} fournisseurs supprimés.","Uptime Kuma groups cannot exceed 20 entries":"Les groupes Uptime Kuma ne peuvent pas dépasser 20 entrées","Updated a custom OAuth provider":"Fournisseur OAuth personnalisé mis à jour","Updated a deployment":"Déploiement mis à jour","Updated a model":"Modèle mis à jour","Updated a prefill group":"Groupe de préremplissage mis à jour","Updated a redemption code":"Code de réduction mis à jour","URL must start with http:// or https://":"L’URL doit commencer par http:// ou https://","Updated a subscription plan":"Forfait d\'abonnement mis à jour","Updated a vendor":"Fournisseur mis à jour","Updated At":"Date de mise à jour","Updated channel {{name}} (ID: {{id}})":"Canal {{name}} mis à jour (ID : {{id}})","Updated channel status (ID: {{id}})":"Statut du canal mis à jour (ID : {{id}})","Updated daily":"Mis à jour quotidiennement","Updated Passkey domains: removed {{domains}}; affected {{known}}; unknown {{unknown}}":"Domaines de clés d’accès mis à jour : supprimés {{domains}} ; affectées {{known}} ; domaine inconnu {{unknown}}","Updated successfully":"Mise à jour réussie","Updated system setting {{key}}":"Paramètre système {{key}} mis à jour","Updated user {{username}} (ID: {{id}})":"Utilisateur {{username}} mis à jour (ID : {{id}})","Updates have not been checked yet.":"Les mises à jour n’ont pas encore été vérifiées.","Updates with the system":"Mise à jour système","Updating all channel balances. This may take a while. Please refresh to see results.":"Mise à jour de tous les soldes des canaux. Cela peut prendre un certain temps. Veuillez actualiser pour voir les résultats.","Updating...":"Mise à jour...","Upgrade {{name}}":"Mettre à jour {{name}}","Upgrade and enable":"Mettre à jour et activer","Upgrade available: v{{installed}} to v{{latest}}":"Mise à jour disponible : v{{installed}} vers v{{latest}}","Upgrade Group":"Groupe de mise à niveau","Upgrade plaintext SMTP connection with STARTTLS before authentication":"Mettre à niveau la connexion SMTP en clair avec STARTTLS avant l\'authentification","Upload":"Téléverser","Upload a JavaScript task platform plugin.":"Importez un plugin JavaScript de plateforme de tâches.","Upload a single service account JSON file":"Télécharger un seul fichier JSON de compte de service","Upload a task plugin to add a platform.":"Importez un plugin de tâche pour ajouter une plateforme.","Upload file":"Téléverser un fichier","Upload files":"Téléverser des fichiers","Upload multiple JSON files in batch modes":"Télécharger plusieurs fichiers JSON en mode batch","Upload new plugin version":"Importer une nouvelle version du plugin","Upload new version":"Importer une nouvelle version","Upload or reference a local configuration file.":"Chargez ou référencez un fichier de configuration local.","Upload photo":"Téléverser une photo","Upload plugin":"Importer un plugin","Upload task plugin":"Importer un plugin de tâche","Uploading a plugin is an administrator-level trust decision. A plugin can access channel credentials and shape upstream requests. Review its source and diff before activation.":"Importer un plugin est une décision de confiance de niveau administrateur. Il peut accéder aux identifiants des canaux et façonner les requêtes en amont. Examinez son code et ses différences avant activation.","Uploading...":"Importation...","Upscale":"Agrandir","Upstream":"Amont","Upstream authentication":"Authentification du fournisseur","Upstream connection":"Connexion amont","Upstream did not return reset credit details.":"L\'amont n\'a renvoyé aucun détail de crédit de réinitialisation.","Upstream JSON response":"Réponse JSON amont","Upstream Model":"Modèle demandé en amont","Upstream Model Detection Settings":"Paramètres de détection des modèles en amont","Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.":"Tâche de détection des modèles en amont démarrée. Suivez la progression dans Infos système, puis actualisez pour examiner les mises à jour en attente.","Upstream model list":"Liste des modèles en amont","Upstream Model Name":"Nom du modèle en amont","Upstream Model Update Check":"Vérification des mises à jour des modèles en amont","Upstream Model Updates":"Mises à jour des modèles en amont","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"Mises à jour des modèles en amont appliquées : {{added}} ajoutés, {{removed}} supprimés, {{ignored}} ignorés cette fois, {{totalIgnored}} modèles ignorés au total","Upstream names returned by the provider":"Noms renvoyés par le fournisseur en amont","Upstream path":"Chemin amont","Upstream path is required":"Le chemin amont est requis","Upstream path must be a full URL or a path starting with /":"Le chemin amont doit être une URL complète ou un chemin commençant par /","Upstream price sync":"Synchronisation amont des prix","Upstream prices fetched successfully":"Prix amont récupérés avec succès","Upstream protocol plan":"Plan de protocole amont","Upstream ratios fetched successfully":"Ratios en amont récupérés avec succès","Upstream receives":"Reçu en amont","Upstream request failed":"Échec de requête amont","Upstream Request ID":"ID de requête en amont","Upstream response":"Réponse amont","Upstream Response":"Réponse amont","Upstream Response (billing-usage-anthropic-estimated)":"Réponse amont (billing-usage-anthropic-estimated)","Upstream Response (billing-usage-anthropic)":"Réponse amont (billing-usage-anthropic)","Upstream Response (billing-usage-gemini-estimated)":"Réponse amont (billing-usage-gemini-estimated)","Upstream Response (billing-usage-gemini)":"Réponse amont (billing-usage-gemini)","Upstream Response (billing-usage-openai-estimated)":"Réponse amont (billing-usage-openai-estimated)","Upstream Response (billing-usage-openai)":"Réponse amont (billing-usage-openai)","upstream services integrated":"services en amont intégrés","Upstream Task ID":"ID de tâche en amont","Upstream task plugins":"Plugins de tâches en amont","Upstream Updates":"Mises à jour en amont","Upstream URL":"URL amont","Upstream URL must be a full URL":"L’URL amont doit etre une URL complete","Upstream vendor missing":"Fournisseur absent de la source","uptime":"disponibilité","Uptime":"Temps de fonctionnement","Uptime (30d)":"Disponibilité (30 j)","Uptime (last 30 days)":"Disponibilité (30 derniers jours)","Uptime Kuma":"Uptime Kuma","Uptime Kuma groups saved successfully":"Groupes Uptime Kuma sauvegardés avec succès","Uptime Kuma URL":"URL Uptime Kuma","Uptime since":"Temps de fonctionnement depuis","URL":"URL","URL is required":"L\'URL est requise","URL to your logo image (optional)":"URL de votre image de logo (facultatif)","Use the same priority as the highlighted channels":"Utiliser la même priorité que les canaux surlignés","User does not exist":"L’utilisateur n’existe pas","US dollar (USD)":"Dollar américain (USD)","Usage":"Utilisation","Usage · {{price}}":"Usage · {{price}}","Usage at a glance":"Vue d\'ensemble de l\'utilisation","Usage guide":"Guide d\'utilisation","User group will be reverted to {{group}}":"Le groupe de l\'utilisateur sera rétabli à {{group}}","User group will be upgraded to {{group}}":"Le groupe de l\'utilisateur sera mis à niveau vers {{group}}","Usage logs":"Journaux d\'utilisation","Usage Logs":"Journaux d\'utilisation","Usage mode":"Mode d\'utilisation","User has been banned":"L’utilisateur a été banni","User has been deleted":"L’utilisateur a été supprimé","Usage parameters":"Paramètres d\'utilisation","Usage percentage":"Pourcentage utilisé","Usage prices":"Tarifs d\'utilisation","Usage-based":"Basé sur l\'utilisation","Usage-based billing":"Facturation à l’usage","Usage-based billing · price not configured":"Facturation à l’usage · prix non configuré","USD":"USD","USD Exchange Rate":"Taux de change USD","USD price per 1M input tokens.":"Prix en USD par million de tokens d’entrée.","User registration failed or user ID retrieval failed":"L’inscription de l’utilisateur a échoué ou l’ID utilisateur n’a pas pu être récupéré","USD price per 1M tokens.":"Prix en USD par million de tokens.","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"Utilisez +: pour ajouter un groupe, -: pour supprimer un groupe sélectionnable par défaut, ou aucun préfixe pour annexer un groupe.","Use 8–128 characters.":"Utilisez 8 à 128 caractères.","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"Utilisez un navigateur ou un appareil compatible avec l\'authentification biométrique ou une clé de sécurité pour enregistrer une clé d\'accès (Passkey).","Use a different stable value for each instance, then restart the service.":"Utilisez une valeur stable différente pour chaque instance, puis redémarrez le service.","Use a Passkey from another website":"Utiliser une clé d’accès d’un autre site","Use a path to append it to the channel Base URL, or enter a full URL to override the Base URL for this route.":"Utilisez un chemin pour l’ajouter à la Base URL du canal, ou saisissez une URL complète pour remplacer la Base URL pour cette route.","Username already exists or has been deleted":"Ce nom d’utilisateur existe déjà ou a été supprimé","Use access tokens to call the dashboard API from scripts. Each token only has the permissions you select.":"Utilisez des jetons d’accès pour appeler l’API du tableau de bord depuis des scripts. Chaque jeton ne dispose que des autorisations que vous sélectionnez.","Use an HTTPS domain (or localhost for development) to configure Passkey.":"Configurez Passkey sur un domaine HTTPS, ou sur localhost en développement.","Username must be {{max}} characters or fewer":"Le nom d’utilisateur doit comporter {{max}} caractères au maximum","Use authenticator code":"Utiliser le code de l\'authentificateur","Username or password is incorrect, or user has been banned":"Nom d’utilisateur ou mot de passe incorrect, ou l’utilisateur a été banni","Use backup code":"Utiliser un code de secours","Use Bearer for all protocols":"Utiliser Bearer pour tous les protocoles","Use channel type {{type}}":"Utiliser le type de canal {{type}}","Users can download their own logs from the usage log page. Administrators can always export.":"Les utilisateurs peuvent télécharger leurs propres journaux depuis la page des journaux d\'utilisation. Les administrateurs peuvent toujours exporter.","Use default":"Utiliser la valeur par défaut","Use disk cache when request body exceeds this size":"Utiliser le cache disque quand le corps de requête dépasse cette taille","Use exact client model names, separated by commas. Prefixes and wildcards are not supported.":"Utilisez les noms exacts des modèles client, séparés par des virgules. Les préfixes et jokers ne sont pas pris en charge.","Use exact model names such as gpt-4o, or regex rules prefixed with re: such as re:^gemini-.":"Utilisez des noms de modèle exacts comme gpt-4o, ou des règles regex préfixées par re: comme re:^gemini-.","Use expression pricing when a dependent price is non-zero and its base price is zero.":"Utilisez une expression si un prix dépendant est non nul et son prix de base est nul.","Use external tools to extend capabilities":"Utiliser des outils externes pour étendre les capacités","Use Mantle for supported Claude models and automatic prompt caching. Keep InvokeModel for older models and Amazon Nova.":"Utilisez Mantle pour les modèles Claude compatibles et la mise en cache automatique des prompts. Conservez InvokeModel pour les anciens modèles et Amazon Nova.","Use model-level expression":"Utiliser l’expression du modèle","Use model-level pricing":"Utiliser le tarif du modèle","Use one available reset credit for this channel. The reset request is sent only after confirmation.":"Utilise un crédit de réinitialisation disponible pour ce canal. La demande n’est envoyée qu’après confirmation.","Use one available reset credit to refresh the current Codex usage windows.":"Utilise un crédit de réinitialisation disponible pour actualiser les fenêtres d’utilisation Codex actuelles.","Use OpenAI-compatible Ollama chat API":"Utiliser l\'API de chat Ollama compatible OpenAI","Use our unified OpenAI-compatible endpoint in your applications":"Utilisez notre point de terminaison unifié compatible OpenAI dans vos applications","Use Passkey or 2FA to confirm your identity before revealing this channel key.":"Utilisez une Passkey ou la 2FA pour confirmer votre identité avant d’afficher cette clé de canal.","Use Passkey to sign in without entering your password.":"Utilisez une clé d\'accès (Passkey) pour vous connecter sans saisir votre mot de passe.","Use presets or upstream discovery to populate the model list faster.":"Utilisez des préréglages ou la découverte en amont pour remplir plus vite la liste des modèles.","Use secure connection when sending emails":"Utiliser une connexion sécurisée lors de l\'envoi d\'e-mails","Use sidebar shortcut":"Utiliser le raccourci de la barre latérale","Use the existing token total":"Utiliser le total de tokens existant","Use the full-width table to scan prices, then select a row to edit it here.":"Parcourez les prix dans le tableau, puis sélectionnez une ligne pour la modifier ici.","Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.":"Utilisez le groupe défini sur le jeton. S’il n’en a pas, utilisez le groupe de l’utilisateur. Le groupe auto essaie l’ordre d’affectation automatique de haut en bas.","Use the group set on the token. If the token has no group, use the user group. The auto group tries the configured groups from top to bottom.":"Utilisez le groupe défini sur le jeton, ou celui de l’utilisateur si aucun groupe n’est défini. Le groupe auto essaie les groupes configurés de haut en bas.","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"Utilisez le tableau des groupes tarifaires pour gérer le ratio et l’apparition du groupe dans la liste de création de jeton.","Use this callback URL pattern when registering a custom OAuth provider.":"Utilisez ce modèle d\'URL de rappel lors de l\'enregistrement d\'un fournisseur OAuth personnalisé.","Use this token for API authentication":"Utilisez ce jeton pour l\'authentification API","Use tier(name, fixed(amount)) for a USD price per request. Group and request multipliers still apply.":"Utilisez tier(name, fixed(amount)) pour un prix en USD par requête. Les multiplicateurs de groupe et de requête restent applicables.","Use your Passkey":"Utiliser votre clé d\'accès (Passkey)","used":"utilisé","Used":"Utilisé","Used {{used}} of {{total}} ({{percent}}%)":"Utilisé : {{used}} sur {{total}} ({{percent}} %)","Used / Remaining":"Utilisé / Restant","Used amount":"Utilisé","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"Utilisé comme SuccessURL sur le nouveau produit. Une confirmation vous sera demandée si ce champ est laissé vide.","Used by route auth templates":"Utilise par les modeles auth de route","Used for load balancing. Higher weight = more requests":"Utilisé pour l\'équilibrage de charge. Poids plus élevé = plus de requêtes","Used in URLs and API routes":"Utilisé dans les URLs et les routes API","Used Quota":"Quota utilisé","Used reset credits cannot be restored.":"Les crédits de réinitialisation utilisés ne peuvent pas être restaurés.","Used to authenticate with io.net deployment API":"Utilisée pour l\'authentification auprès de l\'API de déploiement io.net","Used to authenticate with the worker. Leave blank to keep the existing secret.":"Utilisé pour l\'authentification auprès du worker. Laissez vide pour conserver le secret existant.","Used to decide the payment flow. Built-in keys include stripe for Stripe and waffo_pancake for Waffo Pancake; other values are sent to Epay as the type parameter.":"Détermine le flux de paiement utilisé au clic. Les clés intégrées incluent stripe pour Stripe et waffo_pancake pour Waffo Pancake ; les autres valeurs sont envoyées à Epay comme paramètre type.","Used when a Task Plugin channel has no API address configured.":"Utilisée si aucune adresse API n’est définie pour le canal du plugin de tâches.","Used:":"Utilisé :","Verification code is incorrect or has expired":"Le code de vérification est incorrect ou a expiré","User":"Utilisateurs","User {{id}}":"Utilisateur {{id}}","User Agent":"Agent utilisateur","User Agreement":"Accord utilisateur","User Analytics":"Statistiques utilisateur","User Consumption Ranking":"Classement de consommation","User Consumption Trend":"Tendance de consommation","User Count":"Nombre d’utilisateurs","User created successfully":"Utilisateur créé avec succès","User dashboard and quota controls.":"Tableau de bord utilisateur et contrôles de quotas.","User deleted successfully":"Utilisateur supprimé avec succès","User demoted to regular user successfully":"Utilisateur rétrogradé en utilisateur standard avec succès","User disabled successfully":"Utilisateur désactivé avec succès","User enabled successfully":"Utilisateur activé avec succès","User Exclusive Ratio":"Ratio exclusif utilisateur","User group":"Groupe utilisateur","User Group":"Groupe d\'utilisateurs","User group name":"Nom du groupe d\'utilisateurs","User Group: {{ratio}}x":"Groupe utilisateur : {{ratio}}x","User groups that can access channels with this tag":"Groupes d\'utilisateurs pouvant accéder aux canaux avec cette balise","User groups that can access this channel. ":"Groupes d\'utilisateurs qui peuvent accéder à ce canal. ","User ID":"ID utilisateur","User ID Field":"Champ ID utilisateur","User ID:":"ID utilisateur :","User Info Endpoint":"Point de terminaison des informations utilisateur","User Info Endpoint (Optional)":"Point de terminaison d\'informations utilisateur (Facultatif)","User Information":"Informations utilisateur","User Menu":"Menu utilisateur","User personal functions":"Fonctions personnelles de l\'utilisateur","User promoted to admin successfully":"Utilisateur promu administrateur avec succès","User selectable":"Sélectionnable par l\'utilisateur","User Subscription Management":"Gestion des abonnements utilisateur","User updated successfully":"Utilisateur mis à jour avec succès","User Verification":"Vérification de l\'utilisateur","User-Agent include (one per line)":"User-Agent inclus (un par ligne)","Username":"Nom d\'utilisateur","Username confirmation does not match":"La confirmation du nom d\'utilisateur ne correspond pas","Username Field":"Champ nom d\'utilisateur","Username or Email":"Nom d\'utilisateur ou e-mail","Users":"Utilisateurs","Users call":"Appelé par l’utilisateur","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"Les utilisateurs appellent le modèle à gauche. La plateforme transmet la requête au modèle amont à droite.","Users in {{group}}":"Utilisateurs du groupe {{group}}","Users must wait for a successful drawing before upscales or variations.":"Les utilisateurs doivent attendre une génération réussie avant les upscales ou variations.","Users of vip, when billed as premium, pay ratio":"Les utilisateurs de vip, facturés sous premium, paient le taux","Vertex AI keys for batch adding cannot be empty":"Les clés Vertex AI pour l\'ajout groupé ne peuvent pas être vides","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"Les utilisateurs ne voient que les groupes marqués comme sélectionnables. Les groupes non sélectionnables peuvent toujours être attribués par les administrateurs.","uses":"utilisations","Using built-in or default pricing":"Tarifs intégrés ou par défaut","Using the complete global Auto order ({{count}} groups)":"Utilisation de l’ordre Auto global complet ({{count}} groupes)","v{{installed}} is installed but this source does not list it. Installing replaces it with v{{target}}.":"La version v{{installed}} est installée mais absente de cette source. L’installation la remplacera par v{{target}}.","Validity":"Validité","Validity Period":"Période de validité","Value":"Valeur","Value (supports JSON or plain text)":"Valeur (JSON ou texte brut)","Value is required":"La valeur est obligatoire","Value metric":"Métrique de valeur","Value must be at least 0":"La valeur doit être au moins 0","Value Regex":"Regex de valeur","variable":"variable","variable)":"variable)","variable) *":"variable) *","Variables":"Variables","Vary":"Varier","Vary (Strong)":"Varier (fort)","Vary (Subtle)":"Varier (subtil)","Vast Range of AI Models":"Vaste gamme de modèles d\'IA","vendor":"fournisseur","Vendor":"Fournisseur","Vendor created successfully":"Fournisseur créé","Vendor data changed. Preview again before applying.":"Les données ont changé. Prévisualisez à nouveau avant d’appliquer.","Vendor deleted successfully":"Fournisseur supprimé avec succès","Vendor details":"Informations du fournisseur","Vendor management":"Gestion des fournisseurs","Vendor Name":"Nom du fournisseur","Vendor Name *":"Nom du fournisseur *","Vendor name and icon must not exceed 128 characters.":"Le nom et la clé d’icône ne doivent pas dépasser 128 caractères.","Vendor name is required":"Le nom du fournisseur est obligatoire","Vendor updated successfully":"Fournisseur mis à jour","Vendor:":"Fournisseur :","Vendors":"Fournisseurs","Vendors ranked by aggregated token volume":"Fournisseurs classés par volume de tokens agrégé","Vendors source":"Source des fournisseurs","Vendors still have {{count}} linked model records. Transfer or clear their assignments first.":"Ces fournisseurs ont encore {{count}} modèles associés. Transférez ou retirez leurs attributions d’abord.","Verification code":"Code de vérification","Verification Code":"Code de vérification","Verification code must be 6 digits":"Le code de vérification doit comporter 6 chiffres","Verification code sent! Please check your email.":"Code de vérification envoyé ! Veuillez vérifier votre email.","Verification code updates every 30 seconds.":"Le code de vérification se met à jour toutes les 30 secondes.","Verification does not match this action.":"La vérification ne correspond pas à cette action.","Verification does not match this action\'s details. Please verify again.":"La vérification ne correspond pas aux détails de cette action. Veuillez vous authentifier à nouveau.","Verification email could not be sent. Start email verification again.":"L’e-mail de vérification n’a pas pu être envoyé. Recommencez la vérification.","Verification email sent":"Email de vérification envoyé","Verification failed":"Échec de la vérification","Verification failed. Please try again.":"La vérification a échoué. Réessayez.","Verification flow expired":"Le processus de vérification a expiré","Verification is not configured properly":"La vérification n\'est pas configurée correctement","Verification method":"Méthode de vérification","Verification proof was not returned":"La preuve de vérification n’a pas été renvoyée","Verification required to reveal the saved key.":"Vérification requise pour révéler la clé enregistrée.","Verification scope is missing":"La portée de vérification est manquante","Violation fee charged":"Frais d\'infraction facturés","Verify":"Vérifier","Verify again before retrying this action.":"Veuillez vous authentifier à nouveau avant de réessayer cette action.","VIP group":"Groupe VIP","Verify and Sign In":"Vérifier et se connecter","Verify routing with Playground or your client":"Vérifiez le routage avec Playground ou votre client","Verify Setup":"Vérifier la configuration","Verify to create administrator":"Vérifier pour créer un administrateur","Verify to delete user":"Vérifier pour supprimer l’utilisateur","Verify to demote user":"Vérifier pour rétrograder l’utilisateur","Verify to disable user":"Vérifier pour désactiver l’utilisateur","Verify to enable user":"Vérifier pour activer l’utilisateur","Verify to promote user":"Vérifier pour promouvoir l’utilisateur","Verify to reset 2FA":"Vérifier pour réinitialiser la 2FA","Verify to reset Passkey":"Vérifier pour réinitialiser le Passkey","Verify to unbind account":"Vérifier pour dissocier le compte","Verify to update user credentials":"Vérifier pour modifier les identifiants de l’utilisateur","Verify to view channel key":"Vérifier pour afficher la clé du canal","Verify upstream pricing":"Vérifiez les prix en amont","Verify your database connection":"Vérifiez votre connexion à la base de données","Verify your identity to finish signing in.":"Vérifiez votre identité pour terminer la connexion.","Verifying credentials and pulling stores from your Pancake account...":"Vérification des identifiants et récupération des boutiques depuis votre compte Pancake...","Verifying your {{provider}} account":"Vérification de votre compte {{provider}}","Version":"Version","Version differences":"Différences de versions","Version history":"Historique des versions","Version Overrides":"Remplacements de version","Versions":"Versions","Vertex AI":"Vertex AI","Waffo Pancake configuration is incomplete":"La configuration de Waffo Pancake est incomplète","Waffo Pancake credentials are not configured":"Les identifiants Waffo Pancake ne sont pas configurés","Vertex AI API Key mode does not support batch creation":"Le mode clé API Vertex AI ne prend pas en charge la création par lot","Waffo Pancake is not configured or key is invalid":"Waffo Pancake n\'est pas configuré ou la clé n\'est pas valide","Waffo Pancake is not fully configured. Complete the gateway binding in payment settings first.":"Waffo Pancake n\'est pas entièrement configuré. Terminez d\'abord la liaison de la passerelle dans les paramètres de paiement.","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI ne prend pas en charge functionResponse.id. Activez ceci pour supprimer automatiquement ce champ.","Vertex AI Key Format":"Format de clé Vertex AI","Vertex AI Project ID":"ID de projet Vertex AI","e.g., my-project-123":"ex. mon-projet-123","Vertex AI service account key must be valid JSON":"La clé de compte de service Vertex AI doit être un JSON valide","Video":"Vidéo","Video length in seconds":"Durée de la vidéo en secondes","Video pricing must be converted manually.":"Les tarifs vidéo doivent être convertis manuellement.","Video Remix":"Remix vidéo","Vidu":"Vidu","Waffo payment is not enabled":"Le paiement Waffo n\'est pas activé","View":"Afficher","View all currently available models":"Voir tous les modèles actuellement disponibles","WaffoPancakeProductId is not configured for this plan":"WaffoPancakeProductId n\'est pas configuré pour ce forfait","View all top-up records, subscription plans, and user subscriptions.":"Afficher tout l’historique des recharges, les plans d’abonnement et les abonnements des utilisateurs.","View all users\' usage logs, statistics, and tasks.":"Afficher les journaux d’utilisation, les statistiques et les tâches de tous les utilisateurs.","View API keys and their settings without the full key.":"Afficher les clés API et leurs paramètres, sans la clé complète.","View API token key":"Consulter la clé d’un jeton API","View API token keys in batch":"Consulter les clés de jetons API par lot","View audit records from user and admin roles. Root records are always excluded.":"Consulter les audits des rôles user et admin. Les événements du rôle root sont toujours exclus.","View balance, top-up records, subscriptions, and referral information.":"Afficher le solde, l’historique des recharges, les abonnements et les informations de parrainage.","View changelog source":"Voir le fichier source","View channel lists and details without secrets.":"Afficher les listes et détails des canaux sans secrets.","View channel secrets":"Voir les secrets des canaux","View complete API keys.":"Afficher les clés API complètes.","View deployments and price estimates.":"Afficher les déploiements et les estimations de prix.","View detailed information about this user including balance, usage statistics, and invitation details.":"Afficher des informations détaillées sur cet utilisateur, y compris le solde, les statistiques d\'utilisation et les détails d\'invitation.","View details":"Voir les détails","View document":"Afficher le document","View groups and prefill groups.":"Afficher les groupes et les groupes de préremplissage.","View installed task plugins and their settings.":"Afficher les plugins de tâche installés et leurs paramètres.","View issued reset credits, grant dates, and expiration.":"Voir les crédits de réinitialisation émis, les dates d\'attribution et d\'expiration.","View key for API token “{{name}}”":"Consulter la clé du jeton API « {{name}} »","View logs":"Voir les logs","View mapping":"Voir les correspondances","View mode":"Mode d\'affichage","View model statistics and charts":"Afficher les statistiques et graphiques des modèles","View models":"Voir les modèles","View models and vendors, and preview upstream sync.":"Afficher les modèles et les fournisseurs, et prévisualiser la synchronisation amont.","View other accounts\' audit logs":"Voir les journaux d’audit des autres comptes","View Passkey, two-factor, and sign-in binding status.":"Afficher l’état des Passkeys, de l’authentification à deux facteurs et des liaisons de connexion.","View performance, system tasks, and system information.":"Afficher les performances, les tâches système et les informations système.","View Pricing":"Voir les tarifs","View pricing for {{model}}":"Voir les tarifs de {{model}}","View redemption codes.":"Afficher les codes d’échange.","View scope":"Portée de la vue","View system settings, custom OAuth providers, and price sync sources.":"Afficher les paramètres système, les fournisseurs OAuth personnalisés et les sources de synchronisation des prix.","View the complete details for this":"Voir les détails complets de ce","Webhook URL cannot be empty":"L’URL du Webhook ne peut pas être vide","View the complete details for this log entry":"Voir les détails complets de cette entrée de journal","View the complete details for this task":"Afficher tous les détails de cette tâche","View the complete error message and details":"Voir le message d\'erreur et les détails complets","WeChat ID is empty!":"L’ID WeChat est vide !","View the complete prompt and its English translation":"Voir l\'invite complète et sa traduction anglaise","View the generated image":"Voir l\'image générée","View users, their sign-in bindings, and permission settings.":"Afficher les utilisateurs, leurs liaisons de connexion et leurs paramètres d’autorisation.","View your profile, groups, and available models.":"Afficher votre profil, vos groupes et les modèles disponibles.","View your topup transaction records and payment history":"Afficher vos enregistrements de transactions de recharge et votre historique de paiement","View your usage logs, statistics, tasks, and audit logs.":"Afficher vos journaux d’utilisation, statistiques, tâches et journaux d’audit.","Viewed channel key {{name}} (ID: {{id}})":"Clé du canal {{name}} consultée (ID : {{id}})","Violation Code":"Code de violation","Violation deduction amount":"Montant de la déduction pour violation","Violation Fee":"Frais de violation","Violation Marker":"Marqueur de violation","vip":"vip","VIP users with premium access":"Utilisateurs VIP avec accès premium","Visible":"Visible","Visible only to users with access to the model’s groups.":"Visible uniquement aux utilisateurs ayant accès aux groupes du modèle.","Vision":"Vision","Vision, image / video, document chat":"Vision, image / vidéo, conversation sur document","Visit Settings → General and adjust quota options...":"Visitez Paramètres → Général et ajustez les options de quota...","Visitors must authenticate before accessing the pricing directory.":"Les visiteurs doivent s\'authentifier avant d\'accéder au répertoire des prix.","Visitors must authenticate before accessing the rankings page.":"Les visiteurs doivent s\'authentifier avant d\'accéder à la page des classements.","Visual":"Visuel","Visual edit":"Édition visuelle","Visual editor":"Éditeur visuel","Visual Editor":"Éditeur Visuel","Visual indicator color for the API card":"Couleur de l\'indicateur visuel pour la carte API","Visual Mode":"Mode Visuel","Visual Parameter Override":"Remplacement visuel des paramètres","Visual prices use {{currency}} per declared unit; token prices are per 1M tokens. Raw expressions always use USD, with token terms divided by 1000000.":"Les prix visuels sont en {{currency}} par unité déclarée ; les prix des tokens sont par million. Les expressions brutes utilisent toujours les USD, avec les termes de tokens divisés par 1000000.","vLLM":"vLLM","vLLM API key, or EMPTY if authentication is disabled":"Clé API vLLM, ou EMPTY si l’authentification est désactivée","vLLM server address, without /v1":"Adresse du serveur vLLM, sans /v1","vLLM status":"État de vLLM","VolcEngine":"VolcEngine","vs. previous":"vs. précédent","Waffo":"Waffo","Waffo Aggregator Gateway":"Passerelle agrégatrice Waffo","Waffo Pancake Dashboard":"Waffo Pancake Dashboard","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Passerelle de paiement Waffo Pancake","Waffo Pancake product created":"Produit Waffo Pancake créé","Waffo Pancake product creation failed":"Échec de la création du produit Waffo Pancake","Waffo Pancake save failed":"Échec de l’enregistrement Waffo Pancake","Waffo Pancake settings saved":"Paramètres Waffo Pancake enregistrés","Waffo Payment":"Paiement Waffo","Waffo Payment Gateway":"Passerelle de paiement Waffo","Waffo Public Key (Production)":"Clé publique Waffo (Production)","Waffo Public Key (Sandbox)":"Clé publique Waffo (Sandbox)","Waiting":"En attente","Waiting for email...":"En attente de l\'e-mail...","Waiting for two comparable samples. Counter resets restart the sampling window.":"En attente de deux relevés comparables. Un compteur remis à zéro redémarre la période.","Waiting requests":"Requêtes en attente","Wallet":"Portefeuille","Wallet First":"Portefeuille en priorité","Wallet Management":"Gestion du portefeuille","Wallet management and personal preferences.":"Gestion du portefeuille et préférences personnelles.","Wallet Only":"Portefeuille uniquement","Wallet pre-consume bypass threshold (USD)":"Seuil sans pré-débit du portefeuille (USD)","Wallet quota limit exceeded":"Limite du quota du portefeuille dépassée","Warning":"Avertissement","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"Avertissement : L\'URL de base ne doit pas se terminer par /v1. La nouvelle API le gérera automatiquement. Cela peut causer des échecs de requêtes.","Warning: Disabling 2FA will make your account less secure.":"Avertissement : La désactivation de la 2FA rendra votre compte moins sécurisé.","Warning: This action is permanent and irreversible!":"Avertissement : Cette action est permanente et irréversible !","We apologize for the inconvenience.":"Nous nous excusons pour le désagrément.","We could not load instances.":"Impossible de charger les instances.","We could not load system tasks.":"Impossible de charger les tâches système.","We could not load the setup status.":"Nous n\'avons pas pu charger l\'état de la configuration.","We will prompt your device to confirm using biometrics or your hardware key.":"Nous allons demander à votre appareil de confirmer en utilisant la biométrie ou votre clé matérielle.","We\'ll be back online shortly.":"Nous serons de retour en ligne sous peu.","Web search":"Recherche web","Web Search":"Recherche web","Webhook Configuration:":"Configuration du Webhook :","Webhook public key (production)":"Clé publique Webhook (production)","Webhook public key (production) is required":"La clé publique Webhook (production) est requise","Webhook public key (sandbox)":"Clé publique Webhook (sandbox)","When a channel is disabled or re-enabled automatically, or a test of all channels finishes":"Quand un canal est désactivé ou réactivé automatiquement, ou qu’un test de tous les canaux se termine","You can create at most {{count}} access tokens":"Vous pouvez créer au maximum {{count}} jetons d’accès","Webhook public key (sandbox) is required":"La clé publique Webhook (sandbox) est requise","Webhook secret":"Secret du Webhook","Webhook Secret":"Secret du Webhook","Webhook signing secret (leave blank unless updating)":"Secret de signature du Webhook (laisser vide sauf en cas de mise à jour)","You cannot grant one or more of these permissions.":"Vous ne pouvez pas accorder une ou plusieurs de ces autorisations.","Webhook URL":"URL du Webhook","Webhook URL (Production):":"URL du webhook (production) :","Webhook URL (Test):":"URL du webhook (test) :","Webhook URL:":"URL du Webhook :","Website is under maintenance!":"Le site web est en maintenance !","WeChat":"WeChat","WeChat login QR code":"Code QR de connexion WeChat","WeChat Pay":"WeChat Pay","WeChat sign in":"Connexion WeChat","Week":"Semaine","Weekday":"Jour de la semaine","Weekly":"Hebdomadaire","Weekly token usage by model across the past few weeks":"Utilisation hebdomadaire des tokens par modèle au cours des dernières semaines","Weekly token usage by model across the past year":"Utilisation hebdomadaire de tokens par modèle sur l’année écoulée","Weekly token usage by model since launch":"Utilisation hebdomadaire de tokens par modèle depuis le lancement","Weekly Window":"Fenêtre hebdomadaire","Weight":"Poids","Weighted by request count":"Pondéré par le nombre de requêtes","Welcome back!":"Bienvenue de retour !","Welcome to our New API...":"Bienvenue sur notre New API...","Well-Known URL":"URL Well-Known","Well-Known URL must start with http:// or https://":"L’URL Well-Known doit commencer par http:// ou https://","What do you want to change?":"Que souhaitez-vous modifier ?","What would you like to know?":"Que voulez-vous savoir ?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"Quand un jeton utilise le groupe auto, le système essaie les groupes de haut en bas jusqu’à trouver un groupe disponible.","When billed as {{group}}":"Facturé sous {{group}}","When conditions match":"Si les conditions sont remplies","When conditions match → {{name}}":"Conditions remplies → {{name}}","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"Si les conditions sont remplies, le prix final est multiplié par X. Plusieurs correspondances se multiplient ; les valeurs < 1 agissent comme des remises.","When disabled, all uploaded custom plugins are ignored and every platform falls back to its built-in factory plugin.":"Si cette option est désactivée, tous les plugins personnalisés téléversés sont ignorés et chaque plateforme utilise son plugin d’usine intégré.","When disabled, the entire task plugin system stops serving, including factory and custom plugins.":"Une fois désactivé, tout le système de plugins de tâche s’arrête, y compris les plugins d’usine et personnalisés.","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"Lorsqu\'elle est activée, si les canaux du groupe actuel échouent, le système essaiera les canaux du groupe suivant dans l\'ordre.","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.":"Lorsque cette option est activée, conserver l\'entrée d\'affinité même si le canal affinitaire est désactivé ou n\'est plus utilisable pour le groupe/modèle actuel. Laissez-la désactivée pour supprimer l\'entrée et sélectionner un autre canal.","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"Lorsqu\'activé, les corps de requête volumineux sont temporairement stockés sur disque, réduisant considérablement l\'utilisation mémoire. SSD recommandé.","When enabled, MjProxy callbacks are accepted (reveals server IP).":"Lorsque activé, les callbacks MjProxy sont acceptés (révèle l\'IP du serveur).","When enabled, newly created tokens start in the first auto group.":"Lorsqu\'elle est activée, les jetons nouvellement créés commencent dans le premier groupe automatique.","When enabled, prompts are scanned before reaching upstream models.":"Lorsqu\'elle est activée, les invites sont scannées avant d\'atteindre les modèles en amont.","When enabled, the store field will be blocked":"Lorsqu\'il est activé, le champ de la boutique sera bloqué","When enabled, this API key can be used to check your account\'s remaining and used quota.":"Si l\'option est activée, cette clé API permet de consulter le quota restant et le quota utilisé de votre compte.","When enabled, users can pick this group when creating tokens.":"Une fois activé, les utilisateurs peuvent choisir ce groupe lors de la création de jetons.","When enabled, violation requests will incur additional charges.":"Lorsqu\'activé, les requêtes en violation entraîneront des frais supplémentaires.","When enabled, zero-cost models also pre-consume quota before final settlement.":"Lorsqu\'elle est activée, les modèles à coût zéro pré-consomment également du quota avant le règlement final.","When no conditions are set, the operation always executes.":"Sans conditions, l\'opération s\'exécute toujours.","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"Lorsque la surveillance des performances est activée et que les ressources dépassent le seuil, les nouvelles requêtes Relay seront rejetées.","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"Lors de l\'exécution dans des conteneurs ou des environnements éphémères, assurez-vous que le fichier SQLite est mappé à un stockage persistant pour éviter la perte de données au redémarrage.","When the primary domain changes, the previous domain is automatically kept in the compatible domains list.":"Lorsque le domaine principal change, l’ancien domaine est automatiquement conservé dans la liste des domaines compatibles.","Whitelist":"Liste blanche","Whitelist (Only allow listed domains)":"Liste blanche (Autoriser uniquement les domaines listés)","Whitelist (Only allow listed IPs)":"Liste blanche (Autoriser uniquement les adresses IP listées)","whsec_xxx":"whsec_xxx","Why only one store + product?":"Pourquoi une seule boutique + un seul produit ?","Why set a website domain?":"Pourquoi définir un domaine de site ?","Why set this?":"Pourquoi ce réglage ?","Window:":"Fenêtre :","Wire encoding for the embedding vectors":"Encodage filaire pour les vecteurs","with conflicts":"avec des conflits","With linked models":"Avec modèles associés","with the API key from your token settings.":"par la clé API de votre page de jetons.","With these settings, automatic disabling is off for all channels.":"Avec ces paramètres, la désactivation automatique est inactive pour tous les canaux.","Without additional conditions, only the type above is used for pruning.":"Sans conditions supplémentaires, seul le type ci-dessus est utilisé pour le nettoyage.","Without linked models":"Sans modèle associé","Worked example":"Exemple détaillé","Worker Access Key":"Clé d\'accès du Worker","Worker instances do not run master-only background tasks.":"Les instances worker n’exécutent pas les tâches d’arrière-plan réservées au master.","Worker metrics":"Métriques par worker","Worker Proxy":"Proxy Worker","Worker URL":"URL du Worker","Workspaces":"Espaces de travail","Write value to the target field":"Écrire la valeur dans le champ cible","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"Xunfei","Year":"Année","years":"ans","Yes":"Oui","You are about to delete {{count}} API key(s).":"Vous êtes sur le point de supprimer {{count}} clé(s) API.","You are offline. Updates will be checked when you reconnect.":"Vous êtes hors ligne. La vérification reprendra à la reconnexion.","You are running the latest version ({{version}}).":"Vous utilisez la dernière version ({{version}}).","You can add models manually or try fetching again.":"Ajoutez des modèles manuellement ou réessayez la récupération.","You can close this tab once the binding completes or a success message appears in the original window.":"Vous pouvez fermer cet onglet une fois la liaison terminée ou qu\'un message de succès apparaît dans la fenêtre d\'origine.","You can create up to {{count}} access tokens":"Vous pouvez créer jusqu’à {{count}} jetons d’accès","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"Vous pouvez les ajouter manuellement dans \\"Noms de modèles personnalisés\\", cliquer sur \\"Remplir\\" puis soumettre, ou utiliser les opérations ci-dessous pour les gérer automatiquement.","You can only check in once per day":"Vous ne pouvez vous connecter qu\'une fois par jour","You can still edit non-sensitive operations fields such as models, groups, priority, and weight.":"Vous pouvez toujours modifier les champs opérationnels non sensibles, comme les modèles, les groupes, la priorité et le poids.","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"Vous vous engagez à ne pas utiliser ce système pour mettre en œuvre, faciliter ou indirectement réaliser des actes violant les lois et règlements applicables, les exigences réglementaires, les règles des plateformes, l’intérêt public ou les droits et intérêts légitimes de tiers.","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"Vous vous engagez à utiliser les API, comptes, clés, quotas et capacités de service en amont uniquement dans le cadre d’une autorisation légale obtenue auprès des fournisseurs de services en amont, fournisseurs de modèles ou ayants droit concernés, et à ne pas effectuer de revente, trafic, distribution ou autre commercialisation non conforme sans autorisation.","You do not have permission to edit channels":"Vous n’avez pas le droit de modifier les canaux","You do not have permission to edit sensitive channel settings.":"Vous n’avez pas l’autorisation de modifier les paramètres sensibles des canaux.","You do not have permission to perform this action.":"Vous n’avez pas l’autorisation d’effectuer cette action.","You don\'t have necessary permission":"Vous n\'avez pas la permission nécessaire","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"Vous avez légalement obtenu l’autorisation pour les API de modèles, comptes, clés et quotas connectés.","You have unsaved changes":"Vous avez des modifications non enregistrées","You have unsaved changes. Are you sure you want to leave?":"Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir quitter ?","You Pay":"Vous payez","You save":"Vous économisez","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"Vous comprenez et assumez indépendamment la responsabilité juridique découlant du déploiement, de l’exploitation et de la facturation.","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"Vous comprenez que ce rappel de conformité est uniquement un avis de risque et ne constitue ni un conseil juridique, ni une conclusion d’examen de conformité, ni une garantie de la légalité de votre utilisation de ce système ; vous devez consulter des conseillers juridiques ou conformité professionnels selon votre situation réelle.","You will be redirected to Telegram to complete the binding process.":"Vous serez redirigé vers Telegram pour terminer le processus de liaison.","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"Vous serez redirigé automatiquement. Vous pouvez revenir à la page précédente si rien ne se passe après quelques secondes.","Your account can edit sensitive channel settings.":"Votre compte peut modifier les paramètres sensibles des canaux.","Your account cannot edit sensitive channel settings.":"Votre compte ne peut pas modifier les paramètres sensibles des canaux.","{{name}} called {{count}} times, cost {{quota}}":"{{name}} appelé {{count}} fois, coût {{quota}}","your AI integration?":"votre intégration IA ?","Your Azure OpenAI endpoint URL":"Votre URL de point de terminaison Azure OpenAI","Your Bot Name":"Nom de votre Bot","Your changes have not been saved.":"Vos modifications ne sont pas enregistrées.","Your Cloudflare Account ID":"Votre ID de compte Cloudflare","Your Discord OAuth Client ID":"Votre ID client OAuth Discord","Your Discord OAuth Client Secret":"Votre secret client OAuth Discord","{{provider}} login and registration has not been enabled by administrator":"L’administrateur n’a pas activé la connexion et l’inscription via {{provider}}","{{provider}} returned empty user info, please check settings":"{{provider}} a renvoyé des informations utilisateur vides, veuillez vérifier les paramètres","{{provider}} top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"Recharge {{provider}} réussie, montant ajouté : {{quota}}, montant payé : {{amount}}","Your GitHub OAuth Client ID":"Votre ID Client OAuth GitHub","Your GitHub OAuth Client Secret":"Votre Secret Client OAuth GitHub","Your identity has been verified. Continue to the provider to finish linking your account.":"Votre identité a été vérifiée. Poursuivez chez le fournisseur pour terminer la liaison du compte.","Your new backup codes are ready":"Vos nouveaux codes de secours sont prêts","Your Referral Link":"Votre lien de parrainage","Your setup guide is collapsed so usage stays in focus.":"Le guide de configuration est réduit afin de garder l\'utilisation au premier plan.","Your Telegram Bot Token":"Votre Jeton de Bot Telegram","Your transaction history will appear here":"Votre historique de transactions apparaîtra ici","Your Turnstile secret key":"Votre clé secrète Turnstile","Your Turnstile site key":"Votre clé de site Turnstile","Zero retention":"Aucune rétention","Zhipu":"Zhipu","Zhipu GLM":"Zhipu GLM","Zhipu V4":"Zhipu V4","Zoom":"Zoom"}}'),L=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","{{count}} outside this view":"うち {{count}} 件は表示範囲外","_copy":"_copy",",":"、",", and":"、および",",and ":"、","、":"、","? This action cannot be undone.":"? この操作は元に戻せません。",". Please fix the JSON before saving.":"。保存する前にJSONを修正してください。",". This action cannot be undone.":"。この操作は元に戻せません。","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default \\":\\" us - central 1 \\", \\"claude -3 -5 - sonnet -20240620 \\":\\" europe - west 1 \\"","({{total}} total, {{omit}} omitted)":"(合計 {{total}} 件、{{omit}} 件を省略)","(billed as vip itself, so base ratio of vip)":"(vip 自体として課金されるため、vip の基本倍率)","(falls back to billing as vip, so base ratio of vip)":"(vip としての課金にフォールバックし、vip の基本倍率を使用)","(hits the override rule above)":"(上の上書きルールに一致)","(ID: {{id}})":"(ID: {{id}})","(instead of {{ratio}})":"(本来は {{ratio}})","(Leave empty to dissolve tag)":"(タグを解除するには空欄のままにしてください)","(matrix cell vip × premium is set)":"(マトリクスのセル vip × premium が設定済み)","(no matrix cell, so base ratio of default; the vip 0.8 is irrelevant)":"(セル未設定のため default の基本倍率。vip の 0.8 は無関係)","(no override rule, so base ratio of default; the 0.8 of vip plays no part)":"(上書きルールがないため default の基本倍率。vip 自身の 0.8 は関与しない)","(Optional: redirect model names)":"(オプション: モデル名をリダイレクト)","(Override all channels\' groups)":"(全チャネルのグループを上書き)","(Override all channels\' models)":"(全チャネルのモデルを上書き)","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\" original - model \\":\\" replacement - model \\"}","{{bytes}} bytes":"{{bytes}} バイト","{{category}} Models":"{{category}} モデル","{{channels}} channels, {{tasks}} in-flight tasks":"{{channels}} チャンネル、処理中 {{tasks}} 件","{{completed}}/{{total}} completed":"{{completed}}/{{total}} 完了","{{condition}} ({{timezone}})":"{{condition}}({{timezone}})","{{count}} / {{max}} groups selected":"{{count}} / {{max}} グループを選択済み","{{count}} announcements will be removed from the list.":"{{count}} 件のお知らせがリストから削除されます。","{{count}} API shortcuts will be removed from the list.":"{{count}} 件の API ショートカットがリストから削除されます。","{{count}} available channels":"利用可能なチャネル {{count}} 件","{{count}} channel(s) deleted":"{{count}} 個のチャネルを削除しました","{{count}} channel(s) disabled":"{{count}} 個のチャネルを無効にしました","{{count}} channel(s) enabled":"{{count}} 個のチャネルを有効にしました","{{count}} channel(s) failed to disable":"{{count}} 個のチャネルの無効化に失敗しました","{{count}} channel(s) failed to enable":"{{count}} 個のチャネルの有効化に失敗しました","{{count}} combinations":"{{count}} 通りの組み合わせ","{{count}} days ago":"{{count}} 日前","{{count}} days remaining":"残り {{count}} 日","{{count}} disabled channel(s) deleted":"{{count}} 個の無効チャネルを削除しました","{{count}} enabled channels and {{tasks}} in-flight tasks still use this plugin.":"有効な {{count}} チャンネルと処理中の {{tasks}} タスクがこのプラグインを使用中です。","{{count}} enabled groups":"有効なグループ {{count}} 件","{{count}} FAQ entries will be removed from the list.":"{{count}} 件の FAQ 項目がリストから削除されます。","{{count}} hours ago":"{{count}} 時間前","{{count}} incidents":"{{count}} 件のインシデント","{{count}} incidents in the last 24 hours":"過去 24 時間に {{count}} 件のインシデント","{{count}} incidents in the last 30 days":"過去 30 日間で {{count}} 件のインシデント","{{count}} IP(s)":"{{count}} IP","{{count}} linked model records":"{{count}} 件の関連モデルレコード","{{count}} log entries removed.":"{{count}} 件のログエントリを削除しました。","{{count}} minutes ago":"{{count}} 分前","{{count}} model mapping(s)":"{{count}} 件のモデルマッピング","{{count}} model(s) redirected":"{{count}} 件のモデルをリダイレクト済み","{{count}} model(s) skipped because another model derives the same request name":"他のモデルと同じリクエスト名になる {{count}} 件のモデルをスキップしました","{{count}} model(s) unchanged by the rule were skipped":"ルールで変化しない {{count}} 件のモデルをスキップしました","{{count}} models":"{{count}} モデル","{{count}} months ago":"{{count}} ヶ月前","{{count}} override":"{{count}} 個のオーバーライド","{{count}} permissions":"{{count}} 件の権限","{{count}} permissions are no longer available":"{{count}} 件の権限は現在の権限一覧にありません","{{count}} providers":"{{count}} プロバイダー","{{count}} records selected. Bulk actions are available.":"{{count}} 件を選択しました。一括操作が可能です。","{{count}} selected":"{{count}} 件を選択中","{{count}} selected models":"{{count}} 件のモデルを選択中","{{count}} selected outside the current filters":"選択済みの {{count}} 件は現在の絞り込み範囲外です","{{count}} selected targets available for bulk copy.":"一括コピーに使用できる対象が {{count}} 個選択されています。","{{count}} tiers":"{{count}} 段階","{{count}} Uptime Kuma groups will be removed from the list.":"{{count}} 件の Uptime Kuma グループがリストから削除されます。","{{count}} vendors":"{{count}} ベンダー","{{count}} weeks ago":"{{count}} 週間前","{{created}} models created, {{updated}} models updated, {{vendors}} vendors created.":"モデル {{created}} 件を作成、{{updated}} 件を更新、ベンダー {{vendors}} 件を作成しました。","{{currency}} / {{unit}} tokens":"{{currency}} / {{unit}} トークン","{{currency}} price per 1M input tokens.":"入力100万トークンあたりの価格({{currency}})。","{{currency}} price per 1M tokens.":"100万トークンあたりの価格({{currency}})。","{{field}} updated to {{value}}":"{{field}} を {{value}} に更新しました","A channel test task is already running or queued. Cannot start this manual task":"チャネルテストタスクが既に実行中または待機中のため、この手動タスクを開始できません","a dashboard login session is required":"ダッシュボードのログインセッションが必要です","{{field}} updated to {{value}} for tag: {{tag}}":"タグ「{{tag}}」の {{field}} を {{value}} に更新しました","{{first}} and {{second}}":"{{first}}かつ{{second}}","A model update task is already running or queued. Cannot start this manual task":"モデル更新タスクが既に実行中または待機中のため、この手動タスクを開始できません","{{first}} or {{second}}":"{{first}}または{{second}}","A repair task is already running. Please try again later":"修復タスクが既に実行中です。後でもう一度お試しください","{{key}} · from {{source}}":"{{key}} · 配布元 {{source}}","{{key}} · version {{version}} · from {{source}}":"{{key}} · バージョン {{version}} · 提供元 {{source}}","A token can select at most {{max}} Auto groups":"1 つのトークンで選択できる Auto グループは最大 {{max}} 個です","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"{{modality}} はサポートされていません","{{modality}} supported":"{{modality}} をサポート","{{n}} model(s) selected":"{{n}} 件のモデルを選択済み","{{operation}} (ID: {{id}})":"{{operation}}(ID: {{id}})","{{percent}}% OFF":"{{percent}}% オフ","{{processed}} of {{total}} log entries processed.":"{{total}} 件中 {{processed}} 件のログを処理しました。","{{protocol}} auth name":"{{protocol}} 認証名","{{protocol}} auth value":"{{protocol}} 認証値","{{protocol}} authentication":"{{protocol}} 認証","{{selected}} of {{total}} changed fields selected":"変更項目 {{total}} 件中 {{selected}} 件を選択","{{start}}–{{end}}":"{{start}}~{{end}}","{{success}} succeeded, {{failed}} failed":"{{success}} 件成功、{{failed}} 件失敗","{{target}} test failed":"{{target}} のテストに失敗しました","{{target}} test succeeded":"{{target}} のテストに成功しました","{{total}} models · {{syncable}} syncable · {{skipped}} skipped this time":"全 {{total}} 件 · 同期可能 {{syncable}} 件 · 今回の対象外 {{skipped}} 件","{{unit}} tokens":"{{unit}} トークン","{{value}} tokens/s":"{{value}} トークン/秒","{{value}}ms":"{{value}}ミリ秒","{{value}}s":"{{value}}秒","@lobehub/icons key":"@lobehub/icons キー","@lobehub/icons key name":"@lobehub/icons キー名","/status/":"/status/","/your/endpoint":"/your/endpoint","#1 App":"#1 アプリ","#1 by usage":"利用量1位","Access token expiry must be at least one hour from now.":"アクセストークンの有効期限は現在から1時間以上先に設定してください。","Access token name must be 1 to 64 characters.":"アクセストークン名は1〜64文字で入力してください。","access token not found":"アクセストークンが見つかりません","#1 Model":"#1 モデル","% off":"% OFF","`, `-nothinking`, and effort suffixes such as `-high` while routing to the correct Gemini variant. When off, model names are sent upstream unchanged.":"`、`-nothinking`、および `-high` などの推論強度サフィックスを、正しい Gemini バリアントにルーティングする際に使用します。オフの場合、モデル名はそのまま上流に送信されます。","© 2025 Your Company. All rights reserved.":"© 2025 Your Company. 全著作権所有。","+{{count}} more":"他 {{count}} 件","| Based on":"| に基づく","0 means data is kept permanently":"0 はデータを永続的に保持することを意味します","0 means unlimited":"0は無制限を意味します","1 Day":"1日","1 day ago":"1日前","1 hour":"1 時間","1 Hour":"1時間","1 hour ago":"1時間前","1 minute":"1 分","1 minute ago":"1分前","1 Month":"1ヶ月","1 month ago":"1ヶ月前","1 week ago":"1週間前","1 year":"1 年","1 year ago":"1年前","1. Create an application in your Gotify server":"1. Gotifyサーバーでアプリケーションを作成します","1. Select models users call":"1. ユーザーが指定するモデルを選択","1. Select upstream models":"1. 上流モデルを選択","10 / page":"10 / ページ","100 / page":"100 / ページ","14 Days":"14日","Action {{action}}":"操作 {{action}}","180 days":"180 日","192.168.1.1 10.0.0.0/8":"192.168.1.1 10.0.0.0/8","1M":"1M","1M token":"1M token","1W":"1W","2. Copy the application token":"2. アプリケーショントークンをコピーします","2. Set names users call":"2. ユーザーが指定する名前を設定","2. Set upstream model names":"2. 上流に送る名前を設定","20 / page":"20 / ページ","24 Hours":"24時間","24 hours ago":"24時間前","29 Days":"29日","2xx, 504 and 524 are always excluded.":"2xx・504・524 は常に除外されます。","3. Enter your Gotify server URL and token above":"3. 上記にGotifyサーバーのURLとトークンを入力します","3. Review mappings":"3. マッピングを確認","30 days":"30 日","30 Days":"30日","30 days ago":"30日前","30d change":"30日変化","5 minutes":"5 分","5-Hour Window":"5時間ウィンドウ","50 / page":"50 / ページ","7 Days":"7日","7 days ago":"7日前","80,443,8080":"80,443,8080","90 days":"90 日","A billing multiplier. Lower ratios mean lower API call costs.":"課金倍率です。倍率が低いほど API 呼び出しコストは低くなります。","A focused home for keys, balance, routing, and service health.":"キー、残高、ルーティング、サービス状態を集約したホームです。","A matching hash confirms the published file, not the safety of its code.":"ハッシュの一致は公開ファイルとの同一性を示すだけで、コードの安全性は保証しません。","A Passkey created for www.example.com cannot be used on example.com. Keep the old website available so users can still verify there.":"www.example.com で作成したパスキーは example.com では使用できません。ユーザーが引き続き認証できるよう、以前のウェブサイトを維持してください。","A security operation is already in progress.":"セキュリティ操作を実行中です。","A selected model no longer exists. Reload the model list.":"選択したモデルは既に削除されています。一覧を再読み込みしてください。","A token that never expires stays valid until you revoke it. Set an expiration date when possible.":"無期限のトークンは取り消すまで有効です。可能な限り有効期限を設定してください。","A vendor with this name already exists.":"この名前のプロバイダーは既に存在します。","About":"このサービスについて","About {{days}} days left":"約 {{days}} 日分","About pricing currency":"価格設定の通貨について","Accept Unpriced Models":"価格設定されていないモデルを許可","Accept upstream certificates that fail validation, such as self-signed ones. Only enable for trusted internal upstreams.":"自己署名証明書など、検証に通らない上流の証明書を受け入れます。信頼できる社内の上流にのみ有効にしてください。","Accepts a JSON array of model identifiers that support the Imagine API.":"Imagine APIをサポートするモデル識別子のJSON配列を受け入れます。","Accepts comma-separated status codes and inclusive ranges.":"カンマ区切りのステータスコードと包含範囲を受け入れます。","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"標準的で統一されたAPIプロトコルを介して、膨大なモデルにアクセス。AIアプリケーションを強化し、デジタル資産を管理し、未来へと繋げます。","Access Baidu Qianfan models through the legacy API":"Baidu Qianfan の旧 API 経由でモデルに接続","Access Baidu Qianfan models through the V2 API":"Baidu Qianfan の V2 API 経由でモデルに接続","Access Codex using ChatGPT subscription credentials":"ChatGPT サブスクリプションの認証情報で Codex に接続","Access Denied Message":"アクセス拒否メッセージ","Access Forbidden":"アクセス禁止","Access hosted model predictions through Replicate":"Replicate 経由でホストされたモデルの推論を利用","Access model services through MokaAI":"MokaAI 経由でモデルサービスに接続","Access model services through the OhMyGPT gateway":"OhMyGPT ゲートウェイ経由でモデルサービスに接続","Access models from multiple providers through OpenRouter":"OpenRouter 経由で複数プロバイダーのモデルに接続","Access models through Amazon Bedrock":"Amazon Bedrock 経由でモデルに接続","Access models through Cloudflare Workers AI":"Cloudflare Workers AI 経由でモデルに接続","Access models through Google Cloud Vertex AI":"Google Cloud Vertex AI 経由でモデルに接続","Access Policy (JSON)":"アクセスポリシー (JSON)","Access previous conversations and start new ones.":"以前の会話にアクセスし、新しい会話を開始します。","Access records":"アクセス履歴","Access Token":"アクセストークン","Access token expired":"アクセストークンの有効期限が切れています","Access token revoked":"アクセストークンを取り消しました","Access tokens":"アクセストークン","Access tokens cannot use this feature":"アクセストークンではこの機能を使用できません","Access Zhipu models through the legacy API":"Zhipu の旧 API 経由でモデルに接続","Access Zhipu models through the V4 API":"Zhipu の V4 API 経由でモデルに接続","AccessKey / SecretAccessKey":"AccessKey/SecretAccessKey","Account Actions":"アカウント操作","Account binding":"アカウント連携","Account Binding Management":"アカウント連携管理","Account binding request":"アカウント連携の申請","Account Bindings":"アカウントバインディング","Account bindings have changed. Start this operation again.":"アカウントの連携状態が変わりました。操作をやり直してください。","Account created! Please sign in":"アカウントが作成されました!ログインしてください","Account deleted successfully":"アカウントが正常に削除されました","Account deletion":"アカウント削除","Account ID":"アカウントID","Account ID *":"アカウントID *","Account Info":"アカウント情報","Account password change":"アカウントのパスワード変更","Account security":"アカウントのセキュリティ","Account unlinking":"アカウントの連携解除","Account used when authenticating with the SMTP server":"SMTPサーバーで認証する際に使用されるアカウント","acknowledge the related legal risks":"関連する法的リスクを認識します","Across all groups":"全グループを通じて","Action":"アクション","Action confirmation":"操作確認","Actions":"操作","Actions for {{name}}":"{{name}} の操作","Activate / Roll back":"有効化 / ロールバック","Activate now":"今すぐ有効化","Activating...":"有効化中...","active":"有効","Active":"有効","Active apps":"アクティブなアプリ","Active Cache Count":"アクティブキャッシュ数","Active Files":"アクティブファイル","Active models":"アクティブなモデル","Active Tasks":"進行中のタスク","active users":"アクティブユーザー","Active version":"有効なバージョン","Actively check all channels":"すべてのチャネルを定期チェック","Actively check auto-disable-enabled channels":"自動無効化が有効なチャネルを定期チェック","Actual Amount":"実際の金額","Actual Model":"実際のモデル","Actual Model:":"実際のモデル:","Adapt `-thinking`, `-nothinking`, and effort suffixes such as `-high` to Anthropic native thinking behavior while keeping billing predictable. When off, model names are sent upstream unchanged.":"`-thinking`、`-nothinking`、および `-high` などの推論強度サフィックス付きリクエストを Anthropic ネイティブの思考動作に適配し、課金を予測可能に保ちます。オフの場合、モデル名はそのまま上流に送信されます。","Add":"追加","Add \\"{{value}}\\"":"\\"{{value}}\\" を追加","Add {{added}} models and remove {{removed}} models":"{{added}} 個のモデルを追加、{{removed}} 個を削除","Add {{count}} mapping(s)":"{{count}} 件のマッピングを追加","Add {{title}}":"{{title}}を追加","Add a group identifier to the auto assignment list.":"自動割り当てリストにグループ識別子を追加します。","Add a new API key by providing necessary info.":"必要な情報を提供して新しいAPIキーを追加。","Add a new channel by providing the necessary information.":"必要な情報を提供して新しいチャネルを追加。","Add a new model to the system by providing the necessary information.":"必要な情報を提供してシステムに新しいモデルを追加してください。","Add a new user by providing necessary info.":"必要な情報を提供して新しいユーザーを追加します。","Add a new vendor to the system":"システムに新しいベンダーを追加","Add a vendor or adjust your search.":"プロバイダーを追加するか検索条件を変更してください。","Add an extra layer of security to your account":"アカウントにセキュリティの追加レイヤーを追加します","Add an index URL to browse installable plugins.":"インデックス URL を追加すると、インストール可能なプラグインを閲覧できます。","Add and submit":"追加して送信","Add Announcement":"お知らせを追加","Add another login method before unlinking this account.":"このアカウントの連携を解除する前に、別のログイン方法を追加してください。","Add API":"API追加","Add API Shortcut":"API ショートカットを追加","Add at least one condition to this group.":"このグループに条件を1つ以上追加してください。","Add auto group":"自動グループを追加","Add Auto group":"Auto グループを追加","Adjusted by the channel adaptor":"チャネルアダプターによる調整","Add chat preset":"チャットプリセットを追加","Add condition":"条件を追加","Add Condition":"条件を追加","Add condition group":"条件グループを追加","Add credits":"クレジットを追加","Add custom model \\"{{value}}\\"":"カスタムモデル「{{value}}」を追加","Add discount tier":"割引ティアを追加","Add each model or tag you want to include.":"含めたい各モデルまたはタグを追加。","Add FAQ":"FAQ追加","Add from available models...":"利用可能なモデルから追加...","Add Funds":"残高チャージ","Add group":"グループを追加","Administrator completed the order, amount added: {{quota}}, payment amount: {{amount}}":"管理者が注文を完了しました。追加額:{{quota}}、支払額:{{amount}}","Administrator reset the quota of subscription plan {{plan_title}} (ID: {{plan_id}})":"管理者がサブスクリプションプラン {{plan_title}}(ID: {{plan_id}})のクォータをリセットしました","Add Group":"グループを追加","Add group rate limit":"グループレート制限を追加","Add group rules":"グループルールを追加","Add groups in the order they should be tried.":"試行する順序でグループを追加してください。","Add management route":"管理ルートを追加","Add Mapping":"マッピングを追加","Add metadata":"情報追加","Add metadata to all selected models first.":"選択したすべてのモデルにメタデータを追加してください。","Add method":"メソッドを追加","Add missing models":"不足しているモデルを追加","Add Mode":"モードを追加","Add model":"モデル追加","Add Model":"モデルを追加","Add model pricing":"モデル料金を追加","Add Models":"モデルを追加","Add new amount":"新しい金額を追加","Add new redemption code(s) by providing necessary info.":"必要な情報を提供して新しい引き換えコードを追加します。","Add OAuth Provider":"OAuthプロバイダーを追加","Add param/header":"パラメータ/ヘッダーを追加","Add payment method":"決済方法を追加","Add photos or files":"写真やファイルを追加","Add prefix":"プレフィックスを追加","Add pricing branch":"料金分岐を追加","Add product":"製品を追加","Add Provider":"プロバイダーを追加","Add Quota":"クォータを追加","Add ratio override":"倍率オーバーライドを追加","Add route":"ルートを追加","Add routes individually or replace them from a template.":"ルートを個別に追加するか、テンプレートで置き換えます。","Add Row":"行を追加","Add rule":"ルールを追加","Add Rule":"ルールを追加","Add rule group":"ルールグループを追加","Add rules for a user group":"ユーザーグループにルールを追加","Add selectable group":"選択可能なグループを追加","Add source":"ソースを追加","Add split":"分岐を追加","Add subscription":"サブスクリプションを追加","Add suffix":"サフィックスを追加","Add tags...":"タグを追加...","Add template":"テンプレートを追加","Add tier":"ティアを追加","Add time condition":"時間条件を追加","Add time rule group":"時間ルールグループを追加","Add to group {{path}}":"グループ {{path}} に追加","Add Uptime Kuma Group":"Uptime Kuma グループを追加","Add User":"ユーザーを追加","Add user group":"ユーザーグループを追加","Add Vendor":"ベンダーを追加","Add your API keys, set up channels and configure access permissions":"APIキーを追加し、チャネルを設定してアクセス権限を構成します","Added":"追加","Added {{count}} model(s)":"{{count}} 個のモデルを追加しました","Added {{count}} models from \\"{{name}}\\"":"「{{name}}」から {{count}} 個のモデルを追加しました","Added models":"追加したモデル","Added once per request. Set to 0 for usage-only billing.":"リクエストごとに1回加算します。従量課金のみの場合は0を入力してください。","Added successfully":"追加に成功しました","Added to the usage cost. Set to 0 for no additional charge.":"使用量に応じた料金に加算する金額です。加算しない場合は0を入力してください。","Additional charge":"追加料金","Additional Conditions":"追加条件","Additional information":"追加情報","Additional Information":"追加情報","Additional Limit":"追加上限","Additional Limits":"追加上限","Additional metered capability":"追加の従量制機能","Additional request domains":"追加のアクセス先ドメイン","Additional verification required":"追加の確認が必要です","Adjust filters, then search to refresh the logs.":"フィルターを調整してから検索し、ログを更新します。","Adjust Quota":"クォータを調整","Adjust quota for user “{{name}}”":"ユーザー「{{name}}」のクォータを調整","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"レスポンス形式、プロンプト動作、プロキシ、上流自動化を調整します。","Adjust the appearance and layout to suit your preferences.":"好みに合わせて外観とレイアウトを調整します。","Adjust user quota":"ユーザーのクォータを調整","Adjustment mode":"調整方法","Admin":"管理者","Admin access required":"管理者アクセスが必要です","Admin area":"管理者エリア","Admin Channel Permissions":"管理者のチャネル権限","Admin notes (only visible to admins)":"管理者メモ (管理者のみに表示)","Admin Only":"管理者のみ","Admin Permissions":"管理者権限","Admin permissions updated":"管理者権限を更新","Administer user accounts and roles.":"ユーザーアカウントとロールを管理します。","Administration":"管理","Administrator account":"管理者アカウント","Administrator username":"管理者ユーザー名","Advance next reset time":"次回リセット時刻を進める","Advanced":"高度な設定","Advanced Configuration":"詳細設定","Advanced Custom":"高度なカスタム","Advanced custom configuration is required":"高度なカスタム設定が必要です","Advanced custom configuration requires at least one route":"高度なカスタム設定には少なくとも1つのルートが必要です","Advanced Custom Routes":"高度なカスタムルート","Advanced options":"詳細オプション","Advanced Options":"詳細オプション","Advanced platform configuration.":"高度なプラットフォーム設定。","Advanced Settings":"詳細設定","Advanced text editing":"高度なテキスト編集","Aesthetic style":"スタイル","Affected windows:":"対象ウィンドウ:","Affinity cache settings":"セッションキャッシュ設定","After clicking the button, you\'ll be asked to authorize the bot":"ボタンをクリックすると、ボットの認証を求められます","After conversion":"変換後","After conversion, expression reservation and rounding rules apply. Effective unit prices are preserved; individual rounded charges may differ.":"変換後は式の事前引き落としと丸め規則が適用されます。有効な単価は維持されますが、個々の丸め後の料金は異なる場合があります。","Allow users to export logs":"ユーザーにログのエクスポートを許可","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"無効化するとユーザーに表示されなくなりますが、過去の注文には影響しません。続行しますか?","After enabling, client request headers are forwarded to the upstream, excluding standard authentication headers, cookies and transport headers:":"有効にすると、標準の認証ヘッダー、Cookie、転送制御ヘッダーを除くクライアントのリクエストヘッダーが上流へ転送されます:","After enabling, the original request body is forwarded to the upstream without gateway rewriting:":"有効にすると、元のリクエストボディがゲートウェイで書き換えられずに上流へ送信されます:","After enabling, the plan will be shown to users. Continue?":"有効化するとユーザーに表示されます。続行しますか?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"無効化するとこのサブスクリプションは即座に停止されます。履歴記録には影響しません。続行しますか?","Agent ID":"エージェントID","Agent ID *":"エージェントID *","Aggregate tokens delivered across the platform":"プラットフォーム全体で提供された累計トークン","Aggregate traffic across every category":"全カテゴリの合計トラフィック","Aggregated across enabled groups":"有効なグループで集計","Aggregated across the apps below":"下記アプリで集計","Aggregated traffic by upstream model provider":"上流モデルプロバイダー別の集計トラフィック","Aggregated usage metrics and trend charts.":"集計された使用量メトリクスとトレンドチャート。","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"50以上のAIプロバイダーを統一APIで集約。アクセス管理、コスト追跡、スケーリングを簡単に。","Aggregation bucket":"集計バケット","AGPL v3.0 License":"AGPL v3.0ライセンス","AI Application Infrastructure Foundation":"AI アプリケーションのインフラ基盤","Already checked in today":"本日はすでにチェックイン済みです","AI model testing environment":"AIモデルテスト環境","AI models":"AIモデル","AI models supported":"AIモデル対応","AI Proxy":"AIプロキシ","AI Proxy Library":"AIプロキシライブラリ","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"AK/SKモード: AccessKey | SecretAccessKey | Regionを使用","Ali":"アリババ百炼","Alipay":"Alipay","All":"すべて","All API tokens":"すべての API キー","All categories":"すべてのカテゴリ","All combinations are priced at zero. Matching requests will be billed as free.":"すべての組み合わせの価格がゼロです。一致するリクエストは無料になります。","All conditions":"すべて満たす","All conditions must match before this tier is used.":"この段階を使用するには、すべての条件に一致する必要があります。","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"すべての編集は上書き操作です。現在の値を変更しないままにするには、フィールドを空のままにしてください。","All files exceed the maximum size.":"すべてのファイルが最大サイズを超えています。","All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.":"すべてのグループ名はここで管理します。倍率はこのグループとして課金される呼び出しに適用され、チャージ倍率はこのグループに所属するユーザーに適用されます。","All Groups":"すべてのグループ","All groups share one pool of names managed in the pricing group table, but a name plays two different roles: as a user group it describes the user, as a token group it decides routing and billing.":"すべてのグループは料金グループ表で管理される同じ名前プールを共有しますが、1つの名前には2つの役割があります。ユーザーグループとしてはユーザーの属性を表し、トークングループとしてはルーティングと課金を決定します。","All models":"すべてのモデル","Announcement #{{index}} content cannot exceed 500 characters":"お知らせ #{{index}} の内容は 500 文字以内にしてください","Announcement #{{index}} has an invalid publish date format":"お知らせ #{{index}} の公開日の形式が正しくありません","Announcement #{{index}} has an invalid type value":"お知らせ #{{index}} の種類の値が無効です","Announcement #{{index}} is missing the content field":"お知らせ #{{index}} に内容フィールドがありません","Announcement #{{index}} is missing the publish date field":"お知らせ #{{index}} に公開日フィールドがありません","Announcement #{{index}} note cannot exceed 100 characters":"お知らせ #{{index}} の補足説明は 100 文字以内にしてください","Announcement #{{index}} publish date cannot be empty":"お知らせ #{{index}} の公開日は空にできません","All Models":"すべてのモデル","All models in use are properly configured.":"使用中のすべてのモデルが適切に構成されています。","All Must Match (AND)":"すべて一致(AND)","All nodes":"すべてのノード","All playground messages saved in this browser will be removed. This cannot be undone.":"このブラウザに保存されたすべての Playground メッセージが削除されます。この操作は元に戻せません。","All requests":"すべてのリクエスト","All requests must include":"すべてのリクエストには","Announcements cannot exceed 100 entries":"お知らせは 100 件までです","All results":"すべての結果","Another log export is running. Try again after it finishes.":"別のログのエクスポートが実行中です。完了してからもう一度お試しください。","All routes":"すべてのルート","All Status":"すべてのステータス","All Sync Status":"すべての同期状態","All systems operational":"すべて正常稼働中","All Tags":"すべてのタグ","All tokens":"すべてのトークン","All Types":"すべてのタイプ","All upstream data is trusted":"すべてのアップストリームデータは信頼されています","All users":"すべてのユーザー","All Vendors":"すべてのベンダー","All-time":"全期間","Allocated Memory":"割り当て済みメモリ","Allow accountFilter parameter":"accountFilter パラメータを許可","Allow balance redemption":"残高での交換を許可","Allow Claude beta query passthrough":"Claude ベータクエリのパススルーを許可","Allow clients to query configured prices via `/api/ratio`.":"クライアントが `/api/ratio` 経由で設定された価格を照会できるようにします。","Allow clients to query configured ratios via `/api/ratio`.":"クライアントが `/api/ratio` 経由で設定された比率を照会できるようにします。","API info #{{index}} contains disallowed content":"API 情報 #{{index}} に許可されていない内容が含まれています","API info #{{index}} description cannot exceed 200 characters":"API 情報 #{{index}} の説明は 200 文字以内にしてください","API info #{{index}} has a URL that cannot be parsed: {{error}}":"API 情報 #{{index}} の URL を解析できません:{{error}}","API info #{{index}} has an invalid color value":"API 情報 #{{index}} の色の値が無効です","API info #{{index}} has an invalid URL format":"API 情報 #{{index}} の URL 形式が正しくありません","API info #{{index}} is missing the color field":"API 情報 #{{index}} に色フィールドがありません","API info #{{index}} is missing the description field":"API 情報 #{{index}} に説明フィールドがありません","API info #{{index}} is missing the route description field":"API 情報 #{{index}} にルート説明フィールドがありません","API info #{{index}} is missing the URL field":"API 情報 #{{index}} に URL フィールドがありません","API info #{{index}} route description cannot exceed 100 characters":"API 情報 #{{index}} のルート説明は 100 文字以内にしてください","API info #{{index}} URL cannot exceed 500 characters":"API 情報 #{{index}} の URL は 500 文字以内にしてください","Allow HTTP image requests":"HTTP画像リクエストを許可","API info cannot exceed 50 entries":"API 情報は 50 件までです","Allow include usage obfuscation passthrough":"使用量難読化のパススルーを許可","Allow inference geography passthrough":"推論ジオグラフィのパススルーを許可","Allow inference_geo passthrough":"inference_geo パススルーを許可","Allow Insecure Origins":"安全でないオリジンを許可","Allow listing when a channel is available and the user has group access. This does not change API access.":"表示を許可しても、利用可能なチャネルとグループへのアクセス権が必要です。API のアクセス権は変更されません。","Allow metadata sync":"メタデータの同期を許可","Allow new users to register":"新規ユーザーの登録を許可","Allow Private IPs":"プライベートIPを許可","Allow querying user quota":"ユーザーのクォータ照会を許可","Allow registration with password":"パスワードによる登録を許可","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"プライベートIP範囲へのリクエストを許可 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"リトライ許可","Allow safety_identifier passthrough":"SAFETY_IDENTIFIERパススルーを許可する","Allow self-signed or hostname-mismatched SMTP certificates":"自己署名またはホスト名が一致しない SMTP 証明書を許可する","Allow service_tier passthrough":"Service_tierパススルーを許可する","Allow speed passthrough":"speed パススルーを許可","Allow updates":"更新を許可","Allow upstream callbacks":"アップストリームコールバックを許可","Allow users to check in daily for random quota rewards":"ユーザーが毎日チェックインしてランダムなクォータ報酬を受け取れるようにする","Allow users to enter promo codes":"ユーザーがプロモーションコードを入力できるようにする","Allow users to log in with password":"ユーザーがパスワードでログインできるようにする","Allow users to register and sign in with Passkey (WebAuthn)":"ユーザーがPasskey (WebAuthn) で登録およびサインインできるようにする","Allow users to sign in with Discord":"ユーザーがDiscordでログインできるようにする","Allow users to sign in with GitHub":"ユーザーがGitHubでサインインできるようにする","Allow users to sign in with LinuxDO":"ユーザーがLinuxDOでサインインできるようにする","Allow users to sign in with OpenID Connect":"ユーザーがOpenID Connectでサインインできるようにする","Allow users to sign in with Telegram":"ユーザーがTelegramでサインインできるようにする","Allow users to sign in with this provider":"このプロバイダーでサインインを許可する","Allow users to sign in with WeChat":"ユーザーがWeChatでサインインできるようにする","Allow using models without price configuration":"価格設定なしでモデルの使用を許可","Allow wallet balance after quota used up":"クォータ使い切り後にウォレット残高の使用を許可","Allowed":"許可","Allowed hosts":"許可されたホスト","Allowed Origins":"許可するオリジン","Allowed Passkey websites":"Passkey の利用を許可するサイト","Allowed Ports":"許可するポート","Allows selected fields to be overwritten after a sync preview. No automatic synchronization.":"同期プレビュー後に選択した項目の上書きを許可します。自動同期は行いません。","Already have an account?":"アカウントをお持ちの方?","Also remove custom pricing":"カスタム料金設定も削除","Also remove from all channels":"すべてのチャネルからも削除","Also remove pricing":"料金設定も削除","Always matches (default tier).":"常に一致(デフォルト ティア)。","Amount":"金額","Amount cannot be changed when editing.":"編集時は金額を変更できません。","Amount discount":"割引額","Amount Due":"お支払い金額","Amount must be a whole number":"金額は整数でなければなりません","Amount must be greater than 0":"金額は 0 より大きくなければなりません","Amount of quota to credit to user account.":"ユーザーアカウントに付与するクォータの量。","Amount options must be a JSON array":"金額オプションは JSON 配列でなければなりません","Amount the user pays to purchase this plan (USD).":"ユーザーがこのプランを購入する際に支払う金額(USD)。","Amount the user pays to purchase this plan; the actual currency depends on the payment gateway.":"ユーザーがこのプランを購入する際に支払う金額。実際の通貨は決済ゲートウェイによって異なります。","Amount to pay:":"支払い金額:","An empty field uses the system website address. If Passkeys already work, keep the existing domain.":"空欄の場合はシステムのサイトアドレスが使われます。パスキーが正常に使えている場合は、既存のドメインを維持してください。","An expression draft already exists. Open the Expression tab to keep editing it.":"式の下書きが既にあります。「式」タブを開いて編集を続けてください。","An unexpected error occurred":"予期せぬエラーが発生しました","An unknown error occurred":"不明なエラーが発生しました","Analyze data":"データを分析","and":"および","Announcement added. Click \\"Save Settings\\" to apply.":"お知らせが追加されました。\\"設定を保存\\" をクリックして適用してください。","Announcement content":"お知らせの内容","Announcement deleted. Click \\"Save Settings\\" to apply.":"お知らせが削除されました。\\"設定を保存\\" をクリックして適用してください。","Announcement Details":"お知らせの詳細","Announcement displayed to users (supports Markdown & HTML)":"ユーザーに表示されるお知らせ (Markdown & HTML対応)","Announcement updated. Click \\"Save Settings\\" to apply.":"お知らせが更新されました。\\"設定を保存\\" をクリックして適用してください。","Announcements":"お知らせ","Announcements saved successfully":"お知らせが正常に保存されました","Answer":"回答","Answers for common access and billing questions":"アクセスと請求に関するよくある質問への回答","Anthropic":"Anthropic","Anthropic Messages to OpenAI Chat":"Anthropic Messages から OpenAI Chat","Anthropic Messages to OpenAI Responses":"Anthropic Messages から OpenAI Responses","Any condition":"いずれかを満たす","Any Match (OR)":"いずれか一致(OR)","Anyone can publish an index. A plugin installed from a third-party source has the same access as one you upload by hand: review its source before installing.":"インデックスは誰でも公開できます。サードパーティのソースからインストールしたプラグインは、手動でアップロードしたものと全く同じ権限を持ちます。インストール前にソースを確認してください。","API":"API","API Access":"API アクセス","API Addresses":"APIアドレス","API Base URL":"APIベースURL","API Base URL (Important: Not Chat API)":"APIベースURL (重要: チャットAPIではありません)","API Base URL (Important: Not Chat API) *":"APIベースURL (重要: チャットAPIではありません) *","API Base URL *":"APIベースURL *","API Endpoints":"APIエンドポイント","API Info":"API情報","API info added. Click \\"Save Settings\\" to apply.":"API情報が追加されました。「Save Settings」をクリックして適用してください。","API info deleted. Click \\"Save Settings\\" to apply.":"API情報が削除されました。「Save Settings」をクリックして適用してください。","API info saved successfully":"API情報が正常に保存されました","API info updated. Click \\"Save Settings\\" to apply.":"API情報が更新されました。「Save Settings」をクリックして適用してください。","API key":"APIキー","API Key":"APIキー","API Key (one per line for batch mode)":"API キー (バッチモード時は1行に1つ)","API Key (Production)":"APIキー(本番)","API Key (Sandbox)":"APIキー(サンドボックス)","API Key *":"APIキー *","API Key created successfully":"APIキーが正常に作成されました","API Key deleted successfully":"APIキーが正常に削除されました","API Key disabled successfully":"APIキーが正常に無効化されました","API Key enabled successfully":"APIキーが正常に有効化されました","API key from the provider":"プロバイダからのAPIキー","API key is loading, please try again in a moment":"APIキーを読み込み中です。しばらくしてからもう一度お試しください","API key is required":"APIキーが必要です","API Key mode (does not support batch creation)":"APIキー モード(一括作成には対応していません)","API Key mode: use APIKey|Region":"APIキーモード: use APIKey | Region","API Key Quota":"APIキー割当","API Key updated successfully":"APIキーが正常に更新されました","API keys":"APIキー","API Keys":"APIキー","API Private Key":"API 秘密鍵","API Requests":"APIリクエスト","API secret":"APIシークレット","API token batch deletion":"API トークンの一括削除","API token batch key access":"API トークンキーの一括表示","API token configuration update":"API トークン設定の更新","API token creation":"API トークンの作成","API token deletion":"API トークンの削除","API token key access":"API トークンキーの表示","API token management":"APIトークン管理","API token status update":"API トークンの状態更新","API URL":"API URL","API usage records":"API使用記録","API version":"API バージョン","API Version":"API バージョン","API2GPT":"API2GPT","Ascending":"昇順","Audio input cost {{quota}}":"音声入力の費用 {{quota}}","App":"アプリ","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"ここに表示されているアプリランキングはプレビュー用のシミュレーションデータです。バックエンド連携の完了後、実データに置き換えられます。","Append":"末尾に追加","Append mode: New keys will be added to the end of the existing key list":"追記モード: 新しいキーは既存のキー一覧の末尾に追加されます","Append Template":"テンプレートを追加","Append to channel":"チャネルに追加","Append to End":"末尾に追加","Append to existing keys":"既存のキーに追加","Append value to array / string / object end":"配列/文字列/オブジェクトの末尾に値を追加","appended":"追加済み","Applicable channels":"対応チャネル","Applicable conditions":"適用条件","Application":"アプリケーション","Applied {{name}} pricing to {{count}} models":"{{name}} の料金を {{count}} 個のモデルに適用しました","Applied changes":"適用済みの変更","Applied upstream model changes to {{count}} channels":"{{count}} 件のチャネルに上流モデルの変更を適用しました","Applied upstream model changes to channel (ID: {{id}})":"チャネル(ID: {{id}})に上流モデルの変更を適用しました","Applies to custom completion endpoints. JSON map of model → ratio.":"カスタム補完エンドポイントに適用されます。モデル → 比率のJSONマップ。","Apply":"適用","Apply {{count}} model changes":"{{count}} 件のモデルの変更を適用","Apply {{field}} for {{name}}":"{{name}} に {{field}} を適用","Apply All Upstream Updates":"すべてのアップストリーム更新を適用","Apply changes":"変更を適用","Apply disable rules to upstream request errors and scheduled or bulk health checks":"上流リクエストのエラーと定期または一括ヘルスチェックに無効化ルールを適用します","Apply Filters":"フィルターを適用","Apply IP Filter to Resolved Domains":"解決されたドメインにIPフィルターを適用","Apply Overwrite":"上書き適用","Apply plan":"プランを適用","Apply reset":"リセットを実行","Apply selected changes":"選択した変更を適用","Apply Sync":"同期を適用","Apply to all rows":"すべての行に適用","Apply to draft":"下書きに適用","Applying...":"適用中...","Approx.":"約","Approximate prices for common specs.":"一般的な仕様の参考価格です。","apps":"アプリ","Apps":"アプリ","apps tracked":"個のアプリを追跡","Apps using the most tokens through new-api":"new-api 経由で最も多くのトークンを利用しているアプリ","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"もここにリストされています。`/v1/models` レスポンスをユーザーフレンドリーに保ち、ベンダー固有の名前を隠すために、Models からこれらを削除します。","Are you sure you want to delete":"削除してもよろしいですか","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"{{count}} 個のモデルを削除してもよろしいですか?この操作は元に戻せません。","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"すべての自動無効化されたキーを削除してもよろしいですか?この操作は元に戻せません。","Are you sure you want to delete channel \\"{{name}}\\"? This action cannot be undone.":"チャネル \\"{{name}}\\" を削除してもよろしいですか?この操作は元に戻せません。","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"デプロイ \\"{{name}}\\" を削除してもよろしいですか?この操作は元に戻せません。","Are you sure you want to delete group \\"{{name}}\\"? This action cannot be undone.":"グループ \\"{{name}}\\" を削除してもよろしいですか?この操作は元に戻せません。","Auto group {{group}} is duplicated":"Auto グループ {{group}} が重複しています","Auto group {{group}} is unavailable or unauthorized":"Auto グループ {{group}} は利用できないか、アクセス権がありません","Are you sure you want to delete model \\"{{name}}\\"? This action cannot be undone.":"モデル \\"{{name}}\\" を削除してもよろしいですか?この操作は元に戻せません。","Are you sure you want to delete this key? This action cannot be undone.":"このキーを削除してもよろしいですか?この操作は元に戻せません。","Are you sure you want to disable all enabled keys?":"すべての有効なキーを無効にすることをよろしいですか?","Are you sure you want to enable all keys?":"すべてのキーを有効にすることをよろしいですか?","Are you sure you want to enable plugin {{name}} ({{key}})?":"プラグイン {{name}}({{key}})を有効にしてもよろしいですか?","Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.":"この注文を手動で完了してもよろしいですか?ユーザーには対応するクォータがクレジットされます。","Are you sure you want to sign out? You will need to sign in again to access your account.":"ログアウトしてもよろしいですか?アカウントにアクセスするには再度ログインする必要があります。","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"このユーザーの{{provider}}連携を解除してもよろしいですか?このユーザーはこの方法でログインできなくなります。","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"{{provider}}の連携を解除してもよろしいですか?この方法でログインできなくなります。","Are you sure?":"よろしいですか?","Area Chart":"面グラフ","Args (space separated)":"引数 (スペース区切り)","Arguments JSON":"引数 JSON","Arguments must be a JSON array":"引数は JSON 配列である必要があります","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"チャットクライアントプリセットの配列。各項目は、クライアント名とそのURLという1つのキーと値のペアを持つオブジェクトです。","Artifacts":"成果物","Asc":"昇順","Ask anything":"何でも質問する","Assign models from the model list to see them here.":"モデル一覧でプロバイダーを割り当てると、ここに表示されます。","Assigned by administrator only":"管理者のみ割り当て","Assigned by administrators and used to represent a user level, such as default or vip.":"管理者が割り当て、default や vip などのユーザーレベルを表します。","Async":"非同期","Async task polling":"非同期タスクのポーリング","Async Task Public Address":"非同期タスクの公開アドレス","Async task refund":"非同期タスク返金","At least one model regex pattern is required":"少なくとも1つのモデル正規表現パターンが必要です","At least one valid key source is required":"少なくとも1つの有効なキーソースが必要です","Attach":"添付","Attempt":"試行","Audio":"音声","Audio and Realtime pricing must be converted manually.":"音声と Realtime の料金は手動で変換してください。","Audio and text-only requests keep their respective pricing.":"音声とテキストのみのリクエストには、それぞれ従来の料金を適用します。","Audio comp.":"音声補完","Audio completion ratio":"音声補完倍率","Audio In":"音声入力","Audio input":"音声入力","Audio Input":"音声入力","Audio input price":"音声入力価格","Audio Input Price":"音声入力価格","Audio Out":"音声出力","Audio output":"音声出力","Audio Output":"音声出力","Audio output price":"音声出力価格","Audio output price requires an audio input price.":"音声出力価格には音声入力価格が必要です。","Audio playback failed":"音声の再生に失敗しました","Audio Preview":"音声プレビュー","Audio ratio":"音声倍率","Audio requests":"音声リクエスト","Audio Tokens":"音声トークン","Audit access changed. Showing only your records.":"監査ログへのアクセス権限が変更されました。自分の記録のみ表示しています。","Audit Logs":"監査ログ","Audit metadata is unavailable":"監査の追加情報を取得できません","Audit records start after this feature was enabled. Earlier records remain in Common Logs.":"この機能の有効化以降の監査記録を表示します。それ以前の記録は通常ログに残ります。","Auth":"認証","Auth configured":"認証設定済み","Auth name":"認証名","Auth name is required":"認証名は必須です","Auth Style":"認証スタイル","Auth type is invalid":"認証タイプが無効です","Auth value":"認証値","Auth value is required":"認証値は必須です","auth.resetPasswordConfirm.backToLogin":"ログインに戻る","auth.resetPasswordConfirm.confirm":"パスワードリセットを確認","auth.resetPasswordConfirm.description":"新しいパスワードを生成するには、リセット要求を確認してください。","auth.resetPasswordConfirm.retry":"再試行 ({{seconds}}秒)","auth.resetPasswordConfirm.success":"パスワードが正常にリセットされました","Authentication":"認証","Authentication for upstream requests; channel credentials may still be used.":"上流サービスへの認証方式です。チャネルの認証情報が使われる場合もあります。","Authentication Method":"認証方式","Authenticator code":"認証コード","Authenticator code or backup code":"認証アプリのコードまたはバックアップコード","Authorization callback URL":"認可コールバック URL","Authorization Endpoint":"認可エンドポイント","Authorization Endpoint (Optional)":"認証エンドポイント (オプション)","Authorize":"認証","Auto":"自動","Auto (Circuit Breaker)":"自動(サーキットブレーカー)","Auto assignment order":"自動割り当て順序","Auto Ban":"自動BAN","Auto detect (default)":"自動検出 (デフォルト)","Auto Disabled":"自動無効化","Bark push URL cannot be empty":"Bark のプッシュ URL を入力してください","Auto group behavior":"auto グループの動作","Auto Group Chain":"自動グループチェーン","Auto group order":"Auto グループの順序","Auto groups must not contain duplicates":"Auto グループを重複させることはできません","Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.":"自動は利用可能な場合に HTTP/2 を交渉します。HTTP/1.1 は同時実行時に複数のキープアライブ接続を使用します。","Auto refresh":"自動更新","Auto refresh (5s)":"自動更新(5秒)","Auto Sync Upstream Models":"アップストリームモデルの自動同期","Auto-disable channel":"チャネル自動無効化","Auto-disable disabled":"自動無効化が無効","Auto-disable enabled":"自動無効化が有効","Auto-disable rules":"自動無効化ルール","Auto-disable status codes":"自動無効化するステータスコード","Auto-disable-enabled channels only":"自動無効化が有効なチャネルのみ","Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.":"このモードでは、自動無効化が有効で、手動で無効化されていないチャネルのみを検査します。","Auto-discover":"自動検出","Auto-discovers endpoints from the provider":"プロバイダーからエンドポイントを自動検出します","Auto-fill when one field exists and another is missing":"一方のフィールドがあり他方が欠けている場合に自動補完","Auto-refreshing every {{seconds}}s":"{{seconds}} 秒ごとに自動更新","Auto-retry status codes":"自動リトライするステータスコード","Automatic from system website address":"システムのサイトアドレスから自動取得","Automatic selection":"自動選択","Automatically disable channel on repeated failures":"繰り返しの失敗でチャネルを自動的に無効にする","Automatically disable channels exceeding this response time":"この応答時間を超えるチャネルを自動的に無効にする","Automatically disable channels when tests fail":"テストが失敗したときにチャネルを自動的に無効にする","Automatically probe all channels in the background":"バックグラウンドですべてのチャネルを自動的にプローブする","Automatically replaces upstream callback URLs with the server address.":"アップストリームコールバック URL をサーバーアドレスに自動的に置き換えます。","Automatically selects the best available group with circuit breaker mechanism":"回路ブレーカーメカニズム付きで最適な利用可能なグループを自動的に選択","Automatically sync model list when upstream changes are detected":"アップストリームの変更が検出されたときにモデルリストを自動的に同期","Availability (last 24h)":"可用性(過去 24 時間)","Available":"空き","Available Balance":"利用可能残高","Available channels: {{count}}":"利用可能 {{count}}","Available credits are ordered by soonest expiration.":"利用可能なクレジットは有効期限の近い順に表示されます。","Available disk space":"利用可能なディスク容量","Available Models":"利用可能なモデル","Available reset credits":"利用可能なリセット回数","Available Rewards":"利用可能な報酬","Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.":"使用可能な変数:{{provider}}、{{field}}、{{op}}、{{required}}、{{current}}、および {{current.roles}} のようなパス。","Average latency":"平均レイテンシ","Average latency, TTFT, and success rate by group":"グループ別の平均レイテンシ、TTFT、成功率","Average latency, TTFT, TPS, and success rate":"平均レイテンシ、TTFT、TPS、成功率","Average RPM":"平均RPM","Average time-to-first-token (TTFT) by group":"グループ別の平均 Time to First Token(TTFT)","Average tokens per second sustained per group":"グループごとに持続する平均スループット (tokens/秒)","Average TPM":"平均TPM","Average TTFT":"平均 TTFT","Awake engines":"稼働中のエンジン数","Batch-adding Vertex AI keys requires a JSON array, for example {{example}}. Check the input: {{error}}":"Vertex AI キーの一括追加には JSON 配列が必要です(例:{{example}})。入力を確認してください:{{error}}","AWS":"AWS","AWS API":"AWS API","AWS Bedrock Claude Compat":"AWS Bedrock Claude 互換テンプレート","AWS Key Format":"AWSキーフォーマット","Azure":"Azure","AZURE_OPENAI_ENDPOINT":"AZURE_OPENAI_ENDPOINT","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"戻る","Back to configuration":"設定に戻る","Back to Dashboard":"ダッシュボードに戻る","Billed per request":"リクエストごとに課金","Back to footnote {{id}} reference":"脚注 {{id}} の参照元に戻る","Back to Home":"ホームに戻る","Back to login":"ログインに戻る","Back to Models":"モデルに戻る","Backed up":"バックアップ済み","Billing expressions must be a JSON object mapping models to expressions: {{error}}":"課金式の設定は、モデルと式を対応付ける JSON オブジェクトである必要があります:{{error}}","Background":"バックグラウンド","Background job tracker for queued work.":"キューされた作業のためのバックグラウンドジョブトラッカー。","Backup Code":"バックアップコード","Backup code must be in format XXXX-XXXX":"バックアップコードはXXXX-XXXX形式で入力してください","Backup codes regenerated successfully":"バックアップコードが正常に再生成されました","Backup codes remaining: {{count}}":"残りのバックアップコード: {{count}}","Bad Request":"不正リクエスト","Badge Color":"バッジの色","Billing parameters: {{params}}":"課金パラメーター:{{params}}","Baidu":"Baidu","Baidu V2":"Baidu V 2","Balance":"残高","Balance and top-up management":"残高とチャージ管理","Balance depleted":"残高なし","Balance is shown in quota units":"残高はクォータ単位で表示されます","Balance queried successfully":"残高の取得に成功しました","Balance Query":"残高照会","Balance Query route does not support pass-through":"残高照会ルートはパススルーに対応していません","Balance response not recognized":"残高レスポンスを認識できません","Balance updated successfully":"残高が正常に更新されました","Balance updated: {{balance}}":"残高更新:{{balance}}","Bar Chart":"棒グラフ","Bark Push URL":"BarkプッシュURL","Binding successful":"連携が完了しました","Base":"基本","Base address provided by your Epay service":"Epayサービスによって提供されるベースアドレス","Base amount. Actual deduction = base amount × system group rate.":"基本金額。実際の控除 = 基本金額 × システムグループ倍率。","Base charge":"基本料金","Base group ratios apply until you add an override.":"上書きルールを追加するまでは、グループの基本倍率が適用されます。","Base input and output token prices for this tier.":"この段階の入力および出力トークンの基本価格です。","Base input price only":"基本入力価格のみ","Base Limits":"基本枠","Base multipliers applied when users select specific groups.":"ユーザーが特定のグループを選択したときに適用される基本乗数。","Base Price":"基本価格","Base rate limit windows for this account.":"このアカウント向けの基本レート制限ウィンドウ。","Base URL":"ベースURL","Base URL *":"ベース URL *","Base URL is required for this channel type":"このチャネルタイプには Base URL が必要です","Bonus for inviting a user {{quota}}":"ユーザー招待ボーナス {{quota}}","Base URL is required when an advanced route uses an upstream path":"高度なルートで上流パスを使う場合は Base URL が必要です","Base URL of your Uptime Kuma instance":"Uptime KumaインスタンスのベースURL","Basic Authentication":"基本認証","Basic Configuration":"基本設定","Basic Info":"基本情報","Basic Information":"基本情報","Basic Templates":"基本テンプレート","Batch Add":"一括追加","Batch Add (one key per line)":"一括追加(1行に1つのキー)","Batch add mappings":"マッピングを一括追加","Batch channel test":"チャネル一括テスト","Batch delete API tokens":"API トークンを一括削除","Batch delete failed":"一括削除に失敗しました","Batch deleted {{count}} channels":"{{count}} 件のチャネルを一括削除しました","Batch deleted {{count}} redemption codes":"{{count}} 件の引き換えコードを一括削除しました","Batch deleted redemption codes (count not recorded)":"引き換えコードを一括削除(件数未記録)","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"一括検出完了:{{channels}} チャネル、{{add}} 個追加、{{remove}} 個削除、{{fails}} 個失敗","Batch detection failed":"一括検出に失敗しました","Batch disable failed":"一括無効化に失敗しました","Batch Edit":"一括編集","Batch edit all channels with this tag. Leave fields empty to keep current values.":"このタグを持つすべてのチャネルを一括編集します。現在の値を維持するには、フィールドを空のままにしてください。","Batch Edit by Tag":"タグによる一括編集","Batch enable failed":"一括有効化に失敗しました","Batch Operations":"一括操作","Batch processing failed":"一括処理に失敗しました","Batch redirect":"一括リダイレクト","Batch set tag for {{count}} channels":"{{count}} 件のチャネルにタグを一括設定しました","Batch test completed: {{count}} succeeded":"バッチテストが完了しました: {{count}} 件成功","Batch test completed: {{success}} succeeded, {{failed}} failed":"バッチテストが完了しました: {{success}} 件成功、{{failed}} 件失敗","Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed":"バッチテストを停止しました: {{completed}}/{{total}} 完了、{{success}} 件成功、{{failed}} 件失敗","Batch testing models...":"モデルをバッチテスト中...","Batch updated channel status ({{count}}/{{total}} changed)":"チャネルの状態を一括更新({{count}}/{{total}} 件変更)","Batch upstream model update":"上流モデル一括更新","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"一括上流モデル更新を処理しました:{{channels}} チャネル、{{added}} 個追加、{{removed}} 個削除、{{fails}} 個失敗","Before conversion":"変換前","Best for single-tenant deployments. Pricing and billing options stay hidden.":"シングルテナント環境に最適です。料金設定や請求オプションは非表示になります。","Best TTFT":"最良 TTFT","Billable image count":"課金対象の画像数","Billable input tokens":"課金対象の入力トークン","Billable output tokens":"課金対象の出力トークン","Billable token breakdown":"課金対象トークンの内訳","Billed as default. No cell for this combination, so the base ratio of default applies — the 0.8 of vip plays no part.":"default として課金。この組み合わせのセルはないため default の基本倍率が適用され、vip 自身の 0.8 は関与しません。","Billed as premium. The highlighted cell matches, so the override 0.3 applies.":"premium として課金。ハイライトされたセルに一致するため、上書き倍率 0.3 が適用されます。","Billing":"請求","Billing & Payment":"請求と支払い","Billing currency":"請求通貨","Billing Details":"課金詳細","Billing expression":"課金式","Billing group":"課金グループ","Billing group = default (the token has a group, so use it)":"課金グループ = default(トークンにグループがあるのでそれを使用)","Billing group = premium (the token has a group, so use it)":"課金グループ = premium(トークンにグループがあるのでそれを使用)","Billing group = vip (the token has no group, so use the user group)":"課金グループ = vip(トークンにグループがないのでユーザーグループを使用)","Billing History":"請求履歴","Billing management":"チャージとサブスクリプションの管理","Billing Mode":"課金モード","Billing parameters":"課金パラメータ","Billing Path":"課金パス","Billing Process":"課金プロセス","Billing rule: each call is billed as the token group (falling back to the user group when the token has none). The base ratio always comes from that billing group, not from the user group. To give a user group a special price on another billing group, add an entry in the override matrix.":"課金ルール:各呼び出しはトークングループとして課金されます(トークンにグループがない場合はユーザーグループにフォールバック)。基本倍率は常にその課金グループから取得され、ユーザーグループの倍率は適用されません。特定のユーザーグループに別の課金グループでの特別価格を設定するには、上書きマトリクスにエントリを追加してください。","Billing Source":"課金ソース","Billing values must be finite and non-negative.":"課金の値は有限の非負数である必要があります。","Bind":"バインド","Bind a Pancake store + product":"Pancake のストアと商品を紐付ける","Bind an email address to your account.":"アカウントにメールアドレスを紐付けます。","Bind Email":"メールアドレス連携","Bind task plugins":"タスクプラグインを紐付け","Bind Telegram Account":"Telegram連携","Bind WeChat":"WeChatを連携","Bind WeChat Account":"WeChatアカウント連携","Binding Information":"連携情報","Binding successful!":"紐付けが成功しました!","Binding Type":"連携の種類","Binding your {{provider}} account":"{{provider}} アカウントをバインド中","Binding...":"連携中...","Bindings":"バインド","Calculating priority...":"優先度を計算中…","Callback URL configuration error":"コールバック URL の設定エラー","Blacklist":"ブラックリスト","Blacklist (Block listed domains)":"ブラックリスト (ブロックされたドメイン)","Blacklist (Block listed IPs)":"ブラックリスト (ブロックされたIPアドレス)","Blank Rule":"空のルール","Cannot create users with permission level equal to or higher than yourself":"自分と同等以上の権限を持つユーザーは作成できません","Cannot delete super administrator account":"スーパー管理者アカウントは削除できません","Cannot delete the last key":"最後のキーは削除できません","Cannot demote super administrator user":"スーパー管理者を降格することはできません","Cannot disable super administrator user":"スーパー管理者を無効にすることはできません","Cannot enable the email domain restriction. Enter the allowed email domains first.":"メールドメイン制限を有効にできません。先に許可するメールドメインを入力してください。","Cannot enable Turnstile verification. Enter the Turnstile settings first.":"Turnstile 検証を有効にできません。先に Turnstile の設定を入力してください。","Cannot enable WeChat login. Enter the WeChat login settings first.":"WeChat ログインを有効にできません。先に WeChat ログインの設定を入力してください。","Cannot enable {{provider}}. Enter the {{provider}} Client ID and Client Secret first.":"{{provider}} を有効にできません。先に {{provider}} の Client ID と Client Secret を入力してください。","Blend":"ブレンド","Block email aliases (e.g., user+alias@domain.com)":"メールエイリアスをブロック (例: user+alias@domain.com)","Blocked keywords":"ブロックされたキーワード","Blocks messages when sensitive keywords are detected.":"機密性の高いキーワードが検出された場合にメッセージをブロックします。","Body param":"ボディパラメータ","Boolean":"真偽値","Border radius":"角丸","Bot Name":"ボット名","Bot Protection":"ボット保護","Bot Token":"ボットトークン","Bot:":"ボット:","Bound":"連携済み","Bound a subscription":"サブスクリプションを紐付けました","Bound Channels":"バインドされたチャネル","Bound Only":"バインド済みのみ","Bound product:":"紐付け済み商品:","Bound store:":"紐付け済みストア:","Branch actions {{path}}":"分岐 {{path}} の操作","Bring channels back online after successful checks":"チェックが成功した後、チャネルをオンラインに戻します","Browse and compare":"参照と比較","Browse available models and pricing":"利用可能なモデルと料金を確認","Browse rankings by category":"カテゴリ別にランキングを表示","Browser":"ブラウザー","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"予算トークン = 最大トークン × 比率。0.002から1までの小数を指定できます。アップストリームの請求と一致させることを推奨します。","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"予算トークン = 最大トークン × 比率。0.1から1までの小数を指定できます。","Budget Tokens Ratio":"予算トークン比率","Budgets":"予算","Build on your API gateway in minutes":"数分で API ゲートウェイ上に構築できます","Built for developers,":"開発者のために構築、","Built-in":"組み込み","Built-in Device":"内蔵デバイス","Built-in is v{{factory}}; delete the custom version to return to it":"組み込みは v{{factory}} です。カスタム版を削除すると戻ります","Built-in pricing may become effective again.":"組み込みの料金設定が再び適用される場合があります。","Built-in v{{factory}} / marketplace v{{market}}":"組み込み v{{factory}} / マーケット v{{market}}","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"内蔵: 電話の指紋/顔認証、またはWindows Hello。外部: USBセキュリティキー","Bulk actions for {{count}} selected records":"選択した {{count}} 件への一括操作","by":"によって","By category":"カテゴリ別","By model author":"モデル提供者別","By quota":"クォータ別","By requests":"リクエスト数別","By tokens":"トークン数別","Changes save on drop. You can undo the last move.":"ドロップすると自動保存されます。直前の移動は元に戻せます。","Channel affinity settings are not initialized":"チャネルアフィニティ設定が初期化されていません","Cache":"キャッシュ","Cache create (1h) price":"キャッシュ作成価格 (1時間)","Cache create price":"キャッシュ作成価格","Cache Creation":"キャッシュ作成","Cache Creation (1h)":"キャッシュ作成 (1h)","Cache Creation (5m)":"キャッシュ作成 (5m)","Cache Directory":"キャッシュディレクトリ","Cache Directory Disk Space":"キャッシュディレクトリのディスク容量","Cache Directory Info":"キャッシュディレクトリ情報","Channel does not exist":"チャネルが存在しません","Cache Entries":"キャッシュエントリ","Cache mode":"キャッシュモード","Cache pricing":"キャッシュ料金","Cache ratio":"キャッシュ倍率","Cache Read":"キャッシュ読み取り","Cache read price":"キャッシュ読み取り価格","Cache repeated prompt prefixes for cheaper, faster reuse":"繰り返しのプロンプト先頭部分をキャッシュし、低コスト・高速に再利用","Cache write":"キャッシュ書き込み","Cache Write":"キャッシュ書き込み","Cache Write (1h)":"キャッシュ書込 (1h)","Cache Write (5m)":"キャッシュ書込 (5m)","Cache write price":"キャッシュ書き込み価格","Cached":"キャッシュ","Cached input":"キャッシュ入力","Cached tokens":"キャッシュ済みトークン","Calculated price: ${{price}} per 1M tokens":"計算価格:${{price}} / 1M トークン","Calculated ratio: {{ratio}}":"計算倍率:{{ratio}}","Calculating...":"計算中...","Call 1: the token group is premium":"呼び出し①:トークングループは premium","Call 2: the token group is default":"呼び出し②:トークングループは default","Call 3: the token has no group":"呼び出し③:トークンにグループなし","Call Count Distribution":"呼び出し回数分布","Call Count Ranking":"呼び出し回数ランキング","Call Proportion":"呼び出し比率","Call Trend":"呼び出し傾向","Callback address":"コールバックアドレス","Callback Caller IP":"コールバック呼び出し元 IP","Callback notification URL":"コールバック通知URL","Callback Payment Method":"コールバック支払い方法","Callback URL format":"コールバック URL 形式","Cancel":"キャンセル","Cancelled":"キャンセル","Cancelled at":"キャンセル日時","Capabilities":"機能","Caps the response length":"応答の長さを制限します","Capture a reusable bundle of models, tags, or endpoints.":"モデル、タグ、またはエンドポイントの再利用可能なバンドルを保存。","Card view":"カード表示","Cascade disable channels":"チャンネルも無効化","Catalog visibility":"カタログ表示","Catch-all route must be last for the same incoming path":"同じ入力パスのキャッチオールルートは最後に配置してください","Category":"カテゴリ","Category Name":"分類名称","Category name is required":"カテゴリ名は必須です","Category name must be less than 50 characters":"カテゴリ名は50文字以内にしてください","Caution":"注意","CC Switch":"CC Switch","Centered":"中央揃え","Chain":"チェーン","Change":"変更","Change domain":"ドメインを変更","Change language":"言語を変更","Change model vendor":"モデルのプロバイダーを変更","Change Password":"パスワードの変更","Change provider":"プロバイダーを変更","Change system settings and custom OAuth providers, and sync prices.":"システム設定とカスタム OAuth プロバイダーを変更し、料金を同期します。","Change the Passkey domain?":"パスキーのドメインを変更しますか?","Change To":"変更先","Change upstream model names":"上流に送るモデル名を変更","Change vendor":"プロバイダーを変更","Change your display name and personal settings.":"表示名と個人設定を変更します。","Changed":"変更","Changed / Total":"変更件数 / 合計","Channel notifications":"チャネル通知","Channel priorities changed. Refresh and try again.":"優先度が変更されました。更新して再試行してください。","Channel priorities saved":"チャンネルの優先度を保存しました","Channel priority is outside the sortable range":"優先度が並べ替え可能な範囲外です","Check-in failed, please try again later":"チェックインに失敗しました。しばらくしてから再試行してください","Check-in failed: quota update error":"チェックインに失敗しました:クォータの更新でエラーが発生しました","Check-in feature is not enabled":"チェックイン機能は有効になっていません","Changed access token permissions":"アクセストークンの権限を変更しました","Changed Fields":"変更されたフィールド","Check-in successful":"チェックインに成功しました","Changed fields: {{fields}}":"変更項目:{{fields}}","Changelog":"変更履歴","Changes are written to the settings draft on save.":"保存すると変更は設定ドラフトに書き込まれます。","Changes declared endpoint types and custom paths shown to users.":"ユーザーに表示するエンドポイントの種類とカスタムパスを変更します。","Changes visibility in the model catalog. Channels remain configured separately.":"カタログでの表示を変更します。チャネルは別途設定します。","Changes visibility in the model square. Channel status and existing API access are unchanged.":"モデル広場での表示を変更します。チャネルの有効状態と既存の API アクセス権限には影響しません。","Changes which model names inherit this metadata. Prices are not inherited.":"このメタデータを継承するモデル名を変更します。料金は継承されません。","Changing...":"変更中...","Channel":"チャネル","Channel {{name}}":"チャネル {{name}}","Channel {{name}} model {{model}}":"チャネル {{name}} モデル {{model}}","Channel Affinity":"チャネルアフィニティ","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"チャネルアフィニティは、リクエストコンテキストまたは JSON Body から抽出したキーに基づいて、前回成功したチャネルを優先的に再利用します。","Channel Affinity: Upstream Cache Hit":"チャネルアフィニティ:上流キャッシュヒット","Channel availability and group access are derived from enabled channels. Importing metadata does not create a callable channel.":"チャネルの可用性とグループ権限は有効なチャネルから取得します。メタデータのインポートで利用可能なチャネルは作成されません。","Choose a time range of up to {{days}} days. The other filters on this page also apply.":"最長 {{days}} 日の期間を選んでください。このページのほかのフィルターもそのまま適用されます。","Channel configuration":"チャネル設定","Channel consistency repaired: {{success}} succeeded, {{fails}} failed":"チャネル整合性を修復しました:成功 {{success}} 件、失敗 {{fails}} 件","Channel copied successfully":"チャネルが正常にコピーされました","Channel created successfully":"チャネルが正常に作成されました","Channel deleted successfully":"チャネルが正常に削除されました","Channel disable requested":"チャネル無効化を要求","Channel disabled successfully":"チャネルが正常に無効化されました","Channel enabled successfully":"チャネルが正常に有効化されました","Channel error":"チャネルエラー","Channel Extra Settings":"チャネル詳細設定","Channel health":"チャネルの健全性","Channel health checks":"チャネルヘルスチェック","Channel ID":"チャネルID","Channel ID is required":"チャネル ID が必要です","Channel is not selected":"チャネルが選択されていません","Channel key":"チャネルキー","Channel key unlocked":"チャネルキーが解除されました","Channel Management":"チャネル管理","Channel models":"チャネルモデル","Channel name is required":"チャネル名が必要です","Channel selected":"チャネルを選択","Channel selection":"チャネル選択","Channel switching options":"チャネル切り替えの設定","Channel test completed":"チャネルテストが完了しました","Channel test concurrency":"チャンネルテストの同時実行数","Channel test concurrency must be between 1 and 32":"チャンネルテストの同時実行数は1~32にしてください","Channel test mode":"チャネルテストモード","Channel type":"チャネルタイプ","Channel type does not match the status endpoint":"チャネルの種類が状態エンドポイントと一致しません","Channel type is required":"チャネルタイプが必要です","Channel types":"チャネルタイプ","Channel types you can use when binding this plugin.":"このプラグインを紐付ける際に選択できるチャネルの種類です。","Channel updated successfully":"チャネルが正常に更新されました","Channel-specific settings (JSON format)":"チャネル固有の設定 (JSON 形式)","Channel:":"チャネル:","channel(s)? This action cannot be undone.":"チャネルを削除しますか?この操作は元に戻せません。","Channels":"チャネル","Channels {{channels}} · Groups {{groups}}":"チャネル {{channels}} · グループ {{groups}}","Channels and groups":"チャネルとグループ","Channels deleted successfully":"チャネルが正常に削除されました","Channels must also enable Auto Ban before automatic disabling can take effect.":"自動無効化ルールを適用するには、各チャネルでも自動無効化を有効にしてください。","Character chat, storytelling, persona":"キャラクター会話・ストーリーテリング・ペルソナ","Charge.":"課金する。","Chart Preferences":"チャートの環境設定","Chart Settings":"チャート設定","Chat":"チャット","Chat area":"チャットエリア","Chat Area":"チャットエリア","Chat Client Name":"チャットクライアント名","Chat client name is required":"チャットクライアント名は必須です","Chat configuration JSON":"チャット設定JSON","Chat preset not found":"チャットプリセットが見つかりません","Chat Presets":"チャットプリセット","Chat session management":"チャットセッション管理","ChatCompletions -> Responses Compatibility":"ChatCompletions → レスポンス互換","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Check again":"再確認","Check channels awaiting recovery only":"復旧待ちのチャネルのみチェック","Check for new upstream models":"上流の新しいモデルを定期確認","Check for updates":"更新を確認","Check in daily to receive random quota rewards":"毎日チェックインして、ランダムなノルマ報酬を受け取りましょう","Check in now":"今すぐチェックイン","Check line {{line}} for a missing comma.":"{{line}} 行目にカンマの抜けがないか確認してください。","Check out the Quick Start":"クイックスタートをご確認ください","Check resolved IPs against IP filters even when accessing by domain":"ドメインによるアクセスであっても、解決されたIPをIPフィルターと照合してチェックします","Check the override matrix at row = user group, column = billing group. If that cell is set, use it. Otherwise use the billing group base ratio from the pricing table.":"上書きマトリクスの「行 = ユーザーグループ、列 = 課金グループ」のセルを確認します。設定されていればその値を、なければ料金表の課金グループの基本倍率を使います。","Check-in failed":"チェックインできませんでした","Check-in Rewards":"チェックイン報酬","Check-in Settings":"チェックイン設定","Check-in successful! Received":"チェックインに成功しました!受け取りました","Checked in":"チェックイン済み","Checking connection":"接続を確認しています","Checking file integrity...":"ファイルを検証中…","Checking name...":"名前をチェック中...","Checking updates...":"更新を確認中...","Checking upstream models. Channel models will only change after confirmation.":"上流モデルを確認しています。チャネルのモデルは確認後にのみ変更されます。","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","Checks hourly while you are online, including pre-releases.":"オンライン中はプレリリースを含め、1時間ごとに確認します。","Checks text extracted from supported requests against keywords, ignoring case. A match rejects the request before upstream processing and does not affect channel health. Images, audio and generated responses are not checked.":"対応リクエストから抽出したテキストを、大文字と小文字を区別せずキーワードと照合します。一致すると上流への送信前に拒否し、チャネルの健全性には影響しません。画像、音声、生成された応答は検査しません。","Chinese":"中国語","Choose a complete upstream protocol plan or edit individual route groups.":"完全な上流プロトコルプランを選ぶか、ルートグループを個別に編集します。","Choose a provider or plugin to configure your channel.":"プロバイダーまたはプラグインを選択して、チャネルを設定します。","Choose a time at least one hour from now":"現在から 1 時間以上先の日時を選択してください","Choose a username":"ユーザー名を選択","Choose a valid IANA timezone.":"有効な IANA タイムゾーンを選択してください。","Choose an amount and payment method":"金額と支払い方法を選択してください","Choose and order the groups this API key will try.":"この API キーが試行するグループを選択して並べ替えます。","Choose another file":"別のファイルを選択","Choose between default expanded, compact icon-only, or full layout mode":"デフォルトの展開表示、コンパクトなアイコンのみ、またはフルレイアウトモードから選択します","Choose between inset, floating, or standard sidebar layout":"インセット、フローティング、または標準のサイドバーレイアウトから選択します","Choose between left-to-right or right-to-left site direction":"左から右、または右から左のサイトの方向を選択します","Choose between system preference, light mode, or dark mode":"システム設定、ライトモード、またはダークモードから選択します","Choose channels to sync upstream ratio configurations from":"アップストリームの比率設定を同期するチャネルを選択してください","Choose file":"ファイルを選択","Choose Group":"グループを選択","Choose how flow widths are calculated.":"フローの線幅をどの指標で計算するかを選択します。","Choose how quota values are shown to users":"クォータ値がユーザーにどのように表示されるかを選択してください","Choose how the platform will operate":"プラットフォームの運用方法を選択","Choose how to filter domains":"ドメインをフィルタリングする方法を選択してください","Choose how to filter IP addresses":"IPアドレスをフィルタリングする方法を選択してください","Choose one SMTP transport security mode":"SMTP の転送暗号化方式を 1 つ選択してください","Choose price sources":"価格の取得元を選択","Choose the bundle type and define the items inside it.":"バンドルタイプを選択し、その中のアイテムを定義してください。","Choose the default charts, range, and time granularity for model analytics.":"モデル分析のデフォルトチャート、範囲、時間粒度を選択します。","Choose the domain used when this Passkey was created, then try again.":"このパスキーの作成時に使用したドメインを選び、再試行してください。","Choose where to fetch upstream metadata.":"アップストリームのメタデータをどこからフェッチするかを選択してください。","Choose which charts are selected by default when opening model analytics.":"モデル分析を開いたときにデフォルトで選択されるチャートを選択します。","Clamped to":"制限後の値","Claude":"Claude","Claude CLI Header Passthrough":"Claude CLI ヘッダーパススルー","Claude only":"Claude のみ","Clean":"問題なし","Clean history logs":"履歴ログをクリーンアップ","Clean logs":"ログをクリア","Clean task history":"タスク履歴を削除","Clean up inactive cache":"非アクティブキャッシュをクリーンアップ","Clean Up Log Files":"ログファイルをクリーンアップ","Cleaned up {{count}} log files, freed {{size}}":"{{count}}個のログファイルをクリーンアップし、{{size}}を解放しました","Cleaning...":"クリア中...","Cleanup failed":"クリーンアップ失敗","Cleanup Mode":"クリーンアップ方式","Clear":"クリア","Clear all":"すべてクリア","Clear All":"すべてクリア","Clear All Cache":"全キャッシュをクリア","Clear all filters":"すべてのフィルターをクリア","Clear cache for this rule":"このルールのキャッシュをクリア","Clear chat history":"チャット履歴を消去","Clear chat history?":"チャット履歴を消去しますか?","Clear field selection":"項目の選択を解除","Clear filters":"フィルターをクリア","Clear Mapping":"マッピングをクリア","Clear mode flags in prompts":"プロンプト内のモードフラグをクリア","Clear node filters":"ノードフィルターをクリア","Clear search":"検索をクリア","Clear selection":"選択をクリア","Clear selection (Escape)":"選択をクリア (Escape)","Clear vendor":"プロバイダーの割り当てを解除","Cleared":"クリア済み","Cleared {{bindingType}} binding for user {{username}}":"ユーザー {{username}} の {{bindingType}} 連携を解除しました","Cleared all models":"すべてのモデルをクリアしました","Cleared channel affinity cache":"チャネルアフィニティキャッシュをクリアしました","Cleared disk cache":"ディスクキャッシュをクリアしました","Cleared historical logs":"履歴ログをクリアしました","Cleared log files":"ログファイルをクリアしました","Click \\"Create Plan\\" to create your first subscription plan":"「プラン作成」をクリックして最初のプランを作成してください","Click \\"Generate\\" to create a token":"「生成」をクリックしてトークンを作成","Click a stage to show or hide that column":"ステージをクリックすると、その列を表示または非表示にできます","Click any category to drill into its models, apps, and trends":"カテゴリをクリックすると、そのモデル・アプリ・トレンドを掘り下げて確認できます","Click for details":"クリックして詳細を表示","Click save when you\'re done.":"完了したら「保存」をクリックしてください。","Click save when you're done.":"完了したら保存をクリックしてください。","Click the button below to bind your Telegram account":"下のボタンをクリックしてTelegramアカウントをバインドしてください","Click to copy":"クリックしてコピー","Click to open deployment":"クリックして展開を開く","Click to preview audio":"クリックして音声をプレビュー","Click to preview video":"クリックして動画をプレビュー","Click to update balance":"クリックして残高を更新","Click to view Codex usage":"Codex利用状況を見る","Compliance confirmation fields cannot be changed through the general settings API":"コンプライアンス確認フィールドは汎用設定 API から変更できません","Click to view full details":"クリックして詳細を表示","Click to view full error message":"クリックしてエラーメッセージ全文を表示","Click to view full prompt":"クリックしてプロンプト全文を表示","Composition failed":"構図の生成に失敗しました","Click to view image":"クリックして画像を表示","Client":"クライアント","Client header value":"クライアントヘッダー値","Client headers override the gateway defaults and may cause upstream errors":"クライアントのヘッダーがゲートウェイの既定ヘッダーを上書きし、上流でエラーになる可能性があります","Client ID":"クライアントID","Client information such as User-Agent and IP is exposed to the upstream":"User-Agent や IP などのクライアント情報が上流に公開されます","Client model":"クライアント model","Client model matching":"クライアント model のマッチング","Client model matching help":"クライアント model マッチングのヘルプ","Client Secret":"クライアントシークレット","Close":"閉じる","Close dialog":"ダイアログを閉じる","Close menu":"メニューを閉じる","Close panel":"パネルを閉じる","Close the panel to edit here":"パネルを閉じてここで編集","Close Today":"今日は表示しない","Cloudflare":"Cloudflare","CNY":"CNY","CNY per USD":"1 USD あたりの CNY","Code":"コード","Code generation, refactoring, autocomplete":"コード生成・リファクタリング・補完","Code interpreter":"コードインタプリタ","Code samples":"コードサンプル","Codes copied!":"コードをコピーしました!","Codex":"Codex","Codex Account & Usage":"Codex アカウントと使用量","Codex Account Status":"Codex アカウント状態","Codex channels do not support batch creation":"Codex チャネルは一括作成をサポートしていません","Codex channels use an OAuth JSON credential as the key.":"CodexチャネルはOAuth JSON認証情報をキーとして使用します。","Codex CLI Header Passthrough":"Codex CLI ヘッダーパススルー","Codex credential must be a JSON object with access_token and account_id":"Codex 認証情報は access_token と account_id を含む JSON オブジェクトである必要があります","Cohere":"Cohere","Collapse":"折りたたむ","Collapse all":"すべて折りたたむ","Collapse All":"すべて折りたたむ","Collapse panel":"パネルを折りたたむ","Collect relay latency and success-rate metrics for the model square.":"モデル広場向けに Relay のレイテンシと成功率メトリクスを収集します。","Color":"カラー","Color is required":"色は必須です","Color preset":"カラープリセット","Color:":"色:","Comfortable":"快適","Coming Soon!":"近日公開!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"完全一致のモデル名をカンマ区切りで入力します。regex: で始めると正規表現で除外できます。","Comma-separated list of allowed ports (empty = all ports)":"許可されたポートのカンマ区切りリスト (空欄 = すべてのポート)","Comma-separated model names (leave empty to keep current)":"カンマ区切りのモデル名 (空欄のままにすると現在の設定を維持)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"カンマ区切りのモデル名、例: gpt-4,gpt-3.5-turbo","Command":"コマンド","Common":"共通","Common Keys":"よく使うキー","Common Logs":"一般的なログ","Common pitfall: the user group base ratio is NOT a personal discount. It only applies when the user group itself is the billing group.":"よくある誤解:ユーザーグループの基本倍率は個人割引ではありません。ユーザーグループ自体が課金グループになる場合にのみ適用されます。","Common ports include 25, 465, and 587":"一般的なポートには 25, 465, 587 が含まれます","Common User":"一般ユーザー","Community driven, self-hosted, and extensible":"コミュニティ主導、セルフホスト可能、拡張可能","Compact":"コンパクト","Compare each vendor\'s token share across the past few weeks":"過去数週間における各ベンダーのトークンシェアを比較","Compare each vendor\'s token share across the past year":"過去1年における各ベンダーのトークンシェアを比較","Compare each vendor\'s token share over the past 24 hours":"過去24時間における各ベンダーのトークンシェアを比較","Compare each vendor\'s token share over the past month":"過去1か月における各ベンダーのトークンシェアを比較","Compare each vendor\'s token share since launch":"ローンチ以降の各ベンダーのトークンシェアを比較","Compare prices and choose a source for each model.":"価格を比較し、モデルごとに取得元を選択します。","Compare the most popular models on the platform":"プラットフォームで最も人気のあるモデルを比較","Comparison operator":"比較演算子","compatible API routes":"互換APIルート","Compatible API routes for common AI application workflows":"一般的なAIアプリケーションワークフロー向けの互換APIルート","Compatible Passkey domains":"互換用パスキードメイン","Compilation failed":"コンパイル失敗","Complete API documentation with multi-language SDK support":"多言語SDKをサポートする完全なAPIドキュメント","Complete Order":"手動チャージ","Complete sign-in":"ログインを完了","Complete the invalid fields before saving or switching modes. The last valid expression is preserved.":"保存やモード切り替えの前に無効な項目を修正してください。直前の有効な式は保持されています。","Complete these steps to finish the initial installation.":"初期インストールを完了するには、これらの手順を完了してください。","Complete top-up orders and manage subscription plans and user subscriptions.":"チャージ注文の完了処理と、サブスクリプションプランおよびユーザーのサブスクリプションの管理を行います。","Completed":"完了","Completed security verification":"セキュリティ確認を完了しました","Completed top-up order for the user":"ユーザーのチャージ注文を完了しました","Completion":"補完","Completion price":"補完価格","Completion price ($/1M tokens)":"完了価格 (トークン100万あたり$)","Completion ratio":"補完倍率","Compliance confirmation required":"コンプライアンス確認が必要です","Compliance confirmed":"コンプライアンス確認済み","Compliance confirmed successfully":"コンプライアンス確認が完了しました","Concatenate channel system prompt with user's prompt":"チャネルのシステムプロンプトをユーザーのプロンプトと連結する","Condition {{path}}":"条件 {{path}}","Condition actions {{path}}":"条件 {{path}} の操作","Condition group":"条件の組み合わせ","Condition group {{path}}":"条件グループ {{path}}","Condition input":"条件の変数","Condition Path":"条件パス","Condition Settings":"条件設定","Condition value":"条件の値","Condition Value":"条件値","Conditional multipliers":"条件付き乗数","Conditions":"条件","Conditions (AND)":"条件(AND)","Confidence":"信頼度","Configuration":"設定","Configuration File":"設定ファイル","Configuration for Creem payment integration":"Creem決済統合の設定","Configuration for Epay payment integration":"Epay決済連携のための設定","Configuration for Stripe payment integration":"Stripe決済連携のための設定","Configuration required":"設定が必要です","Configure":"設定","Configure a Creem product for user recharge options.":"ユーザー チャージオプション用の Creem 製品を設定。","Configure a custom ratio for \\"{{userGroup}}\\" users when using a specific token group.":"「{{userGroup}}」のユーザーが特定のトークングループを使用する際の倍率を設定します。","Configure a custom ratio for when users use a specific token group.":"ユーザーが特定のトークングループを使用する際のカスタム倍率を設定します。","Configure a group that users can select when creating API keys.":"ユーザーがAPIキー作成時に選択できるグループを設定します。","Configure a new custom OAuth provider for user authentication.":"ユーザー認証のための新しいカスタムOAuthプロバイダーを設定します。","Configure a payment method for user recharge options.":"ユーザーのチャージオプションのための支払い方法を設定します。","Configure a predefined chat link for end users.":"エンドユーザー向けの事前定義されたチャットリンクを設定します。","Configure an input price before converting this model.":"このモデルを変換する前に入力単価を設定してください。","Configure and deploy a new container instance.":"新しいコンテナインスタンスを設定してデプロイします。","Configure API documentation links for the dashboard":"ダッシュボード用のAPIドキュメントリンクを設定","Configure at:":"設定場所:","Configure available payment methods. Provide a JSON array.":"利用可能な支払い方法を設定します。JSON配列を提供してください。","Configure Creem products. Provide a JSON array.":"Creem製品を設定。JSON配列を提供してください。","Configure discount rates based on recharge amounts":"チャージ金額に基づいた割引率を設定","Configure endpoint routing, authentication and protocol conversion for different upstream services":"ルーティング、認証、プロトコル変換を自由に設定して各種上流サービスに接続","Configure experimental data export for the dashboard":"ダッシュボード用の実験的なデータエクスポートを設定","Configure in your Creem dashboard":"Creem ダッシュボードで設定","Configure keyword filtering for prompts and responses.":"プロンプトと応答のキーワードフィルタリングを設定します。","Configure model, caching, and group ratios used for billing":"請求に使用されるモデル、キャッシュ、およびグループ比率を設定します。","Configure Models":"モデルを設定","Configure monitoring status page groups for the dashboard":"ダッシュボードの監視ステータスページグループを設定します。","Configure NODE_NAME":"NODE_NAME を設定","Configure per-model ratio for image inputs or outputs.":"画像の入力または出力のモデルごとの比率を設定します。","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"ツールごとの単価($/1K 回)を設定します。リクエスト課金モデルでは追加工具料金はかかりません。","Configure pricing ratios for a specific model.":"特定のモデルの料金比率を設定します。","Configure rate limiting rules for a specific user group.":"特定のユーザーグループのレート制限ルールを設定します。","Configure routes":"ルートを設定","Configure task pricing":"タスク料金を設定","Configure the connection and models, then create the channel.":"接続とモデルを設定してから、チャネルを作成します。","Configure the ratio for this group.":"このグループの比率を設定します。","Configure upstream providers and routing.":"アップストリームプロバイダーとルーティングを設定。","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"USD 建てのチャージ用に Waffo Pancake のホスト型チェックアウト連携を設定","Configure Waffo payment aggregation platform integration":"Waffo決済アグリゲーションプラットフォームの連携を設定","Configure your account behavior preferences":"アカウントの動作設定を設定します。","Configure your account preferences and integrations":"アカウントの設定と統合を設定します。","Configured":"設定済み","Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.":"PayMethods JSON として保存されます。type 値で使用する決済フローを決定します。stripe は Stripe、waffo_pancake は Waffo Pancake、それ以外の値は Epay の type パラメーターとして送信されます。","Configured routes and latency checks":"設定済みルートとレイテンシ確認","Confirm":"確認","Confirm Action":"アクションの確認","Confirm and enable":"確認して有効化","Confirm Batch Update":"バッチ更新の確認","Confirm Billing Conflicts":"請求の競合を確認","Confirm both your current and new email addresses to finish this change.":"現在と新しいメールアドレスの両方を確認して、変更を完了してください。","Confirm changes":"変更を確認","Confirm Changes":"変更を確認","Confirm Cleanup":"クリーンアップを確認","Confirm cleanup of inactive disk cache?":"非アクティブなディスクキャッシュをクリーンアップしますか?","Confirm clearing all channel affinity cache":"全チャネルアフィニティキャッシュのクリアを確認","Confirm clearing cache for this rule":"このルールのキャッシュクリアを確認","Confirm compliance":"コンプライアンスを確認","Confirm compliance terms":"コンプライアンス条件を確認","Confirm Creem Purchase":"Creem 購入を確認","Confirm delete":"削除の確認","Confirm disable":"無効化を確認","Confirm email":"メールアドレスを確認","Confirm enable":"有効化を確認","Confirm invalidate":"無効化を確認","Confirm log cleanup":"ログクリーンアップの確認","Confirm log file cleanup?":"ログファイルをクリーンアップしますか?","Confirm model changes":"モデルの変更を確認","Confirm New Password":"新しいパスワードの確認","Confirm password":"パスワードの確認","Confirm Payment":"支払いの確認","Confirm Selection":"選択の確認","Confirm settings and finish setup":"設定を確認してセットアップを完了","confirm that I bear legal responsibility arising from deployment":"デプロイ","Confirm the final prices and removed settings. Metadata and channel access are not changed.":"最終料金と削除する設定を確認してください。メタデータとチャネル権限は変更されません。","Confirm the verification code sent to your new email address.":"新しいメールアドレスに届いた確認コードを入力してください。","Confirm Unbind":"連携解除を確認","Confirm usage reset":"使用量リセットの確認","Confirm your identity before accessing this sensitive action.":"この重要な操作を行う前に本人確認をしてください。","Confirm your identity before changing the account {{username}}.":"アカウント {{username}} を変更する前に本人確認をしてください。","Confirm your identity before creating an administrator account.":"管理者アカウントを作成する前に本人確認をしてください。","Confirm your identity before permanently deleting the account {{username}}.":"アカウント {{username}} を完全に削除する前に本人確認をしてください。","Confirm your identity before removing this Passkey from your account.":"このパスキーをアカウントから削除する前に、本人確認を行ってください。","Confirm your identity before unbinding {{provider}} from this user.":"このユーザーから {{provider}} の連携を解除する前に本人確認をしてください。","Confirm your identity with Two-factor Authentication before registering a Passkey.":"パスキーを登録する前に、二要素認証で本人確認を行ってください。","Confirmed at {{time}} by user #{{userId}}":"ユーザー #{{userId}} が {{time}} に確認しました","Confirmed payment compliance":"支払いコンプライアンスを確認しました","Confirmed removal of Passkey domains: {{domains}}; affected {{known}}; unknown {{unknown}}":"パスキードメインの削除を確認:{{domains}}、影響あり {{known}}、ドメイン不明 {{unknown}}","Confirming the account linked to your profile.":"連携済みのアカウントを確認しています。","Conflict":"競合","Connect":"接続","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"OpenAI、Claude、Gemini、その他の互換APIルートから接続","Connect to 360 model services":"360 のモデルサービスに接続","Connect to Alibaba Cloud Bailian model services":"Alibaba Cloud Bailian のモデルサービスに接続","Connect to Cohere model services":"Cohere のモデルサービスに接続","Connect to Coze bots":"Coze のボットに接続","Connect to DeepSeek model services":"DeepSeek のモデルサービスに接続","Connect to Dify applications and workflows":"Dify のアプリケーションとワークフローに接続","Connect to Doubao Seedance video and Seedream image generation through Volcengine Ark":"Volcengine Ark 経由で Doubao Seedance の動画生成と Seedream の画像生成に接続","Connect to FastGPT applications":"FastGPT アプリケーションに接続","Connect to iFlytek Spark model services":"iFlytek Spark のモデルサービスに接続","Connect to Jimeng image and video generation services":"Jimeng の画像・動画生成サービスに接続","Connect to Jina embedding and reranking services":"Jina の埋め込みとリランキングサービスに接続","Connect to Kling video generation services":"Kling の動画生成サービスに接続","Connect to LingYiWanWu model services":"LingYiWanWu のモデルサービスに接続","Connect to local or self-hosted Ollama models":"ローカルまたはセルフホストの Ollama モデルに接続","Connect to MiniMax model services":"MiniMax のモデルサービスに接続","Connect to Mistral AI model services":"Mistral AI のモデルサービスに接続","Connect to model services through a Sub2API gateway":"Sub2API ゲートウェイ経由でモデルサービスに接続","Connect to models through the Google Gemini API":"Google Gemini API 経由でモデルに接続","Connect to Moonshot AI model services":"Moonshot AI のモデルサービスに接続","Connect to New API model services with support for multiple task plugins":"New API ゲートウェイのモデルサービスに接続し、複数のタスクプラグインに対応","Connect to OpenAI models deployed on Azure":"Azure にデプロイされた OpenAI モデルに接続","Connect to OpenAI Sora video generation services":"OpenAI Sora の動画生成サービスに接続","Connect to Perplexity model services":"Perplexity のモデルサービスに接続","Connect to self-hosted models served by SGLang":"SGLang でセルフホストしたモデルに接続","Connect to self-hosted models served by vLLM":"vLLM でセルフホストしたモデルに接続","Connect to self-hosted models served by Xinference":"Xinference でセルフホストしたモデルに接続","Connect to SiliconFlow model inference services":"SiliconFlow のモデル推論サービスに接続","Connect to Submodel model services":"Submodel のモデルサービスに接続","Connect to Tencent Hunyuan model services":"Tencent Hunyuan のモデルサービスに接続","Connect to the Anthropic API or compatible services":"Anthropic API または互換サービスに接続","Connect to the OpenAI API or compatible services":"OpenAI API または互換サービスに接続","Connect to Vidu video generation services":"Vidu の動画生成サービスに接続","Connect to Volcengine Ark model services":"Volcengine Ark のモデルサービスに接続","Connect to xAI Grok model services":"xAI Grok のモデルサービスに接続","Connected to io.net service normally.":"io.net サービスに正常に接続しました。","Connection & Models":"接続とモデル","Connection closed":"接続が閉じられました","Connection error":"接続エラー","Connection failed":"接続に失敗しました","Connection info detected in clipboard":"クリップボードに接続情報が見つかりました","Connection info filled in":"接続情報を入力しました","Connection settings":"接続設定","Connection settings changed. Fetch models again to refresh the list.":"接続設定が変更されました。モデル一覧を再取得してください。","Connection successful":"接続に成功しました","Console":"コンソール","Console area":"コンソールエリア","Console Area":"コンソールエリア","Console Content":"コンソールコンテンツ","Consume":"消費","Consumed in the last 24 hours":"直近24時間の消費量","Container":"コンテナ","Container name":"コンテナ名","Containers":"コンテナ","Contains":"含む","Contains Match":"含む一致","Content":"コンテンツ","Content displayed on the home page (supports Markdown)":"ホームページに表示されるコンテンツ(Markdownをサポート)","Content not found.":"コンテンツが見つかりません。","Content not modified!":"コンテンツが変更されていません!","Content width":"コンテンツ幅","Context":"コンテキスト","Continue":"続行","Continue account binding":"アカウント連携を続行","Continue with {{name}}":"{{name}} で続行","Continue with an account already linked to your profile.":"連携済みのアカウントで続行してください。","Continue with Discord":"Discord で続行","Continue with GitHub":"GitHub で続行","Continue with LinuxDO":"LinuxDO で続行","Continue with OIDC":"OIDC で続行","Continue with Telegram":"Telegram で続行","Continue with WeChat":"WeChat で続行","Contract review, compliance, summarisation":"契約レビュー・コンプライアンス・要約","Control which models are exposed and which groups may use them.":"公開するモデルと、それらを利用できるグループを制御します。","Controls catalog visibility. Channel availability is configured separately.":"カタログでの表示を制御します。チャネルの可用性は別途設定します。","Controls how much the model thinks before answering":"モデルが回答前に考える深さを制御します","Controls randomness and creativity":"ランダム性と創造性を調整します","Controls visibility in the model square. Channel status and existing API access are unchanged.":"モデル広場での表示を制御します。チャネルの有効状態と既存の API アクセス権限には影響しません。","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"Passkeyフロー中にユーザー認証(生体認証/PIN)が必要かどうかを制御します。","Conversation cleared":"会話を消去しました","Conversion rate from USD to your custom currency":"USDからカスタム通貨への換算レート","Convert reasoning_content to tag in content":"content内のreasoning_contentをタグに変換","Convert string to lowercase":"文字列を小文字に変換","Convert string to uppercase":"文字列を大文字に変換","Convert to expression":"式に変換","Converter":"コンバーター","Converter does not match incoming path":"コンバーターが受信パスと一致しません","Converter is not registered":"コンバーターが登録されていません","Copied":"コピーしました","Copied {{count}} key(s)":"{{count}} 件のキーをコピーしました","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"チャネルを複製しました(元 ID: {{sourceId}})→ {{name}}(新 ID: {{id}})","Copied to clipboard":"クリップボードにコピーしました","Copied: {{model}}":"コピーしました: {{model}}","Copied!":"コピーしました!","Copy":"コピー","Copy {{field}}":"{{field}}をコピー","Copy {{name}} pricing":"{{name}} の料金をコピー","Copy a request header":"リクエストヘッダーをコピー","Copy All":"すべてコピー","Copy all backup codes":"すべてのバックアップコードをコピー","Copy All Codes":"すべてのコードをコピー","Copy all models":"すべてのモデルをコピー","Copy API key":"APIキーをコピー","Copy API URL":"API URL をコピー","Copy base URL":"ベース URL をコピー","Copy billing expression":"課金式をコピー","Copy callback URL":"コールバック URL をコピー","Copy Channel":"チャネルをコピー","Copy code":"コードをコピー","Copy Connection Info":"接続情報をコピー","Copy endpoint path":"エンドポイントのパスをコピー","Copy failed":"コピーに失敗しました","Copy Field":"フィールドをコピー","Copy Header":"ヘッダーをコピー","Copy homepage URL":"ホームページ URL をコピー","Copy Key":"キーをコピー","Copy Link":"リンクをコピー","Copy model name":"モデル名をコピー","Copy model names":"モデル名をコピー","Copy plugin key":"プラグイン識別子をコピー","Copy prompt":"プロンプトをコピー","Copy ready-to-run curl":"そのまま実行できる curl をコピー","Copy redemption code":"引き換えコードをコピー","Copy redirect URL":"リダイレクト URL をコピー","Copy referral link":"紹介リンクをコピー","Copy Request Header":"リクエストヘッダーをコピー","Copy secret key":"シークレットキーをコピー","Copy selected codes":"選択したコードをコピー","Copy selected keys":"選択したキーをコピー","Copy selected models":"選択したモデルをコピー","Copy selected models separated by commas (e.g. a,b)":"選択したモデルをカンマ区切りでコピー(例: a,b)","Copy source field to target field":"ソースフィールドをターゲットフィールドにコピー","Copy the key and paste it here":"キーをコピーしてここに貼り付けてください","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"このプロンプトをコピーしてLLM(ChatGPT / Claudeなど)に送り、課金式の設計を依頼してください。","Copy this token now. It will not be shown again.":"今すぐこのトークンをコピーしてください。再表示はできません。","Copy to clipboard":"クリップボードにコピー","Copy token":"トークンをコピー","Copy URL":"URLをコピー","Copying...":"コピー中...","Copywriting, ad creative, SEO":"コピーライティング・広告クリエイティブ・SEO","Core concepts":"基本概念","Core Configuration":"コア設定","Core Features":"主要機能","Core pricing":"基本料金","Correct the invalid settings before saving.":"無効な設定を修正してから保存してください。","Cost":"コスト","Cost = 10 × 0.3 = 3":"費用 = 10 × 0.3 = 3","Cost = 10 × 0.8 = 8":"費用 = 10 × 0.8 = 8","Cost = 10 × 1.0 = 10":"費用 = 10 × 1.0 = 10","Cost = model price × that one ratio. Nothing else from the group settings enters the formula.":"費用 = モデル価格 × この1つの倍率。グループ設定の他の項目は計算式に入りません。","Cost calculator":"料金シミュレーション","Creem webhook is not configured":"Creem Webhook が設定されていません","CreemProductId is not configured for this plan":"このプランには CreemProductId が設定されていません","Cost in {{currency}} per request, regardless of tokens used.":"トークン使用量に関係なく、リクエストごとにかかる料金({{currency}})。","Cost in USD per request, regardless of tokens used.":"使用されたトークンに関係なく、リクエストあたりのUSDでのコスト。","Cost Tracking":"コスト追跡","Could not fetch the plugin source from this browser. The host may block cross-origin requests or be unreachable.":"このブラウザからプラグインのソースを取得できませんでした。ホストがクロスオリジンリクエストを拒否しているか、到達できない可能性があります。","Could not fetch this URL from the browser. The host may block cross-origin requests or be unreachable. Download the file and paste its source below.":"ブラウザからこの URL を取得できませんでした。ホストがクロスオリジンリクエストを拒否しているか、到達できない可能性があります。ファイルをダウンロードし、下のソース欄に貼り付けてください。","Could not load the changelog":"変更履歴を読み込めません","Could not load this source":"このソースを読み込めませんでした","Count":"回数","Count must be between {{min}} and {{max}}":"カウントは{{min}}から{{max}}の間である必要があります","Counters and averages cover the period since the upstream metrics were initialized or reset.":"カウンターと平均値は、上流の指標が初期化またはリセットされてからの期間を対象とします。","Coze":"Coze","CPU":"CPU","CPU Threshold (%)":"CPU 閾値 (%)","Create":"新規作成","Create a copy of:":"コピーを作成:","Create a key for your app or service":"アプリまたはサービス用のキーを作成","Create a new user group to configure ratio overrides for.":"レートの上書きを設定するための新しいユーザーグループを作成します。","Create access token":"アクセストークンを作成","Create account":"アカウントを作成","Create aliases for users":"ユーザー向けの別名を作成","Create an account":"アカウントを作成","Create an API key to unlock the real request":"実際のリクエストを使うには API キーを作成してください","Create and review invite or credit codes.":"招待コードまたはクレジットコードを作成および確認。","Create API Key":"APIキーを作成","Create API token":"API トークンを作成","Create API token “{{name}}”":"API トークン「{{name}}」を作成","Create cache":"キャッシュを作成","Create cache ratio":"キャッシュ倍率を作成","Create Channel":"チャネルを作成","Create channels or edit keys, base URLs, and overrides.":"チャネルの作成、キー、ベース URL、上書き設定の編集を許可します。","Create Code":"コードを作成","Create credentials for the root user":"管理者アカウントの認証情報を作成","Create deployment":"デプロイを作成","Create metadata":"メタデータを作成","Create Model":"モデルを作成","Create multiple API keys at once (random suffix will be added to names)":"一度に複数のAPIキーを一括作成(名前にランダムな接尾辞が追加されます)","Create multiple channels from multiple keys":"複数のキーから複数のチャネルを作成","Create multiple redemption codes at once (1-100)":"複数の引き換えコードを一度に作成します (1-100)","Create new subscription plan":"新しいサブスクリプションプランを作成","Create or update frequently asked questions for users":"ユーザー向けのよくある質問を作成または更新します","Create or update system announcements for the dashboard":"ダッシュボードのシステムアナウンスを作成または更新します","Create Plan":"プラン作成","Create Prefill Group":"プレフィルグループを作成","Create Provider":"プロバイダーを作成","Create Redemption Code":"引き換えコードを作成","Create request parameter override rules with a visual editor or raw JSON.":"ビジュアルエディタまたは生のJSONでリクエストパラメータオーバーライドルールを作成します。","Create request parameter override rules without editing raw JSON.":"生の JSON を編集せずにリクエストパラメータ上書きルールを作成します。","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"モデル、タグ、エンドポイント、およびユーザーグループの再利用可能なバンドルを作成し、コンソールの他の場所での設定を高速化します。","Create succeeded":"作成に成功しました","Create Vendor":"ベンダーを作成","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"ダッシュボードのどこでもモデル、タグ、またはエンドポイントの選択を再利用するために、最初のグループを作成します。","Create, edit, and delete API keys.":"API キーを作成、編集、削除します。","Create, edit, and delete deployments, and test connections.":"デプロイの作成、編集、削除と接続テストを行います。","Create, edit, and delete prefill groups.":"プリフィルグループを作成、編集、削除します。","Create, edit, and delete redemption codes.":"引き換えコードを作成、編集、削除します。","Create, edit, disable, and delete users, and reset their security settings.":"ユーザーの作成、編集、無効化、削除と、セキュリティ設定のリセットを行います。","Create, revoke, and audit API tokens.":"APIトークンを作成、取り消し、監査。","Created":"作成済み","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"{{count}} 件の引換コード {{name}} を作成しました(各 {{quota}})","Created {{time}}":"作成日時 {{time}}","Custom reset cycle must be greater than 0 seconds":"カスタムリセット周期は 0 秒より大きくする必要があります","Created a custom OAuth provider":"カスタム OAuth プロバイダーを作成しました","Created a deployment":"デプロイメントを作成しました","Created a model":"モデルを作成しました","Created a prefill group":"プリフィルグループを作成しました","Created a subscription plan":"サブスクリプションプランを作成しました","Created a vendor":"ベンダーを作成しました","Created an access token":"アクセストークンを作成しました","Created At":"作成日時","Daily check-in, received {{quota}}":"デイリーチェックイン、{{quota}} を獲得","Created channel {{name}} (type {{type}}, count {{count}})":"チャネル {{name}} を作成しました(タイプ {{type}}、数 {{count}})","Created user {{username}} (role {{role}})":"ユーザー {{username}} を作成しました(ロール {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"保存済みストアに、このプランのタイトルと価格を使って Pancake 商品を作成します。事前に支払い設定で Waffo Pancake を完全に設定する必要があります。","Creating...":"作成中...","Creation failed":"作成に失敗しました","Credential refreshed":"認証情報を更新しました","Credentials":"認証情報","Credentials verification failed":"認証情報の検証に失敗しました","Credentials verification failed — double-check Merchant ID and API private key.":"認証情報の検証に失敗しました。Merchant ID と API 秘密鍵を再確認してください。","credit":"credit","Credit remaining":"残りクレジット","Creem API key (leave blank unless updating)":"Creem API キー (更新しない限り空白のまま)","Creem Gateway":"Creem ゲートウェイ","Creem Payment":"Creem 決済","Creem product ID from your Creem dashboard.":"Creem ダッシュボードから取得した Creem 製品 ID。","Creem products must be a JSON array":"Creem 製品は JSON 配列でなければなりません","Database connection failed":"データベースに接続できませんでした","Database error, please contact the administrator":"データベースエラーです。管理者に連絡してください","Cross-group":"グループ横断","Cross-group retry":"グループ横断リトライ","Cumulative usage":"累積使用量","Currency":"通貨","Currency & Display":"通貨と表示","Current":"現在","Current Balance":"現在の残高","Current Billing":"現在の請求","Current Cache Size":"現在のキャッシュサイズ","Current domain":"現在のドメイン","Current domain: {{domain}}":"現在のドメイン:{{domain}}","Current email verification code":"現在のメールアドレスの確認コード","Current email: {{email}}. Enter a new email to change.":"現在のメール: {{email}}。変更するには新しいメールアドレスを入力してください。","Current exchange rate: 1 USD = {{rate}} {{currency}}":"現在の為替レート:1 USD = {{rate}} {{currency}}","Current key":"現在のキー","Current key disable requested":"現在のキーの無効化を要求","Current legacy JSON is invalid, cannot append":"現在の旧形式JSONが無効なため、追加できません","Current Level Only":"現在の階層のみ","Current load":"現在の負荷","Current models for the longest channel in this tag. May not include all models from all channels.":"このタグ内の最も長いチャネルの現在のモデル。すべてのチャネルのすべてのモデルが含まれているわけではない場合があります。","Current models: {{count}}":"現在のモデル:{{count}} 件","Current month":"今月","Current Password":"現在のパスワード","Current password is incorrect.":"現在のパスワードが正しくありません。","Current period price":"現在の時間帯の料金","Current Price":"現在の価格","Default group":"デフォルトグループ","Current pricing conditions":"現在の料金条件","Current quota":"現在のクォータ","Current site: {{origin}}":"現在のサイト:{{origin}}","Current time":"現在時刻","Current token":"現在のトークン","Current total = used + remaining. Changing the remaining quota updates the total and percentage.":"現在の合計 = 使用済み + 残り。残りの利用枠を変更すると、合計と使用率も更新されます。","Current total quota":"現在の合計枠","Current v{{from}} → install v{{to}}":"現在 v{{from}} → インストール v{{to}}","Current value":"現在の値","Current Value":"現在の値","Current vendor":"現在のプロバイダー","Current version":"現在のバージョン","Current:":"現在:","Custom":"カスタム","Custom (overrides factory {{version}})":"カスタム(組み込み {{version}} を上書き)","Custom (seconds)":"カスタム(秒)","Custom Amount":"カスタム金額","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"カスタムAPIベースURL。公式チャネルの場合、New APIには組み込みのアドレスがあります。これは、サードパーティのプロキシサイトまたは特別なエンドポイントに対してのみ入力してください。/v1 や末尾のスラッシュを追加しないでください。","Custom API base URL. Leave empty to use provider default.":"カスタム API ベース URL。プロバイダのデフォルトを使用する場合は空にしてください。","Custom Currency":"カスタム通貨","Custom Currency Symbol":"カスタム通貨記号","Custom currency symbol is required":"カスタム通貨記号は必須です","Custom database driver detected.":"カスタムデータベースドライバーが検出されました。","Custom endpoints":"カスタムエンドポイント","Custom Epay method":"カスタム Epay 方法","Custom Error Response":"カスタムエラーレスポンス","Custom Home Page":"カスタムホームページ","Custom message shown when access is denied":"アクセス拒否時に表示されるカスタムメッセージ","Custom model (comma-separated)":"カスタムモデル (コンマ区切り)","Custom model icon":"モデルアイコンを指定","Custom module":"カスタムモジュール","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"特定のユーザーグループが特定のトークングループを使用する場合のカスタム乗数。例: VIPユーザーが「edit_this」グループトークンを使用する場合、0.9倍のレートが適用されます。","Custom OAuth":"カスタム OAuth","Custom OAuth Providers":"カスタムOAuthプロバイダー","Custom Seconds":"カスタム秒数","Custom sidebar section":"カスタムサイドバーセクション","Custom task plugin setting updated":"カスタムタスクプラグイン設定を更新しました","Custom Time Range":"カスタム時間範囲","Custom Zoom":"カスタムズーム","Customize sidebar display content":"サイドバーの表示内容をカスタマイズ","Daily":"毎日","Daily Check-in":"毎日のチェックイン","Daily token usage by model across the past few weeks":"過去数週間のモデル別日次トークン使用量","Daily token usage by model across the past month":"過去 1 か月にわたるモデル別の日次トークン使用量","Daily token usage by model over the past month":"過去1か月のモデル別日次トークン使用量","Daily uptime over the last 30 days":"過去 30 日間の日次稼働率","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"日次稼働率。{{incidents}} 件のインシデント、合計 {{minutes}} 分","Dark":"ダーク","Dashboard":"ダッシュボード","Dashboard Preferences":"ダッシュボードの環境設定","Dashboards, tokens, and usage analytics.":"ダッシュボード、トークン、使用状況アナリティクス。","Data Dashboard":"データダッシュボード","Data directory:":"データディレクトリ:","Data is stored locally on this device. Use system backups to keep a safe copy.":"データはこのデバイスにローカルに保存されます。安全なコピーを保持するためにシステムバックアップを使用してください。","Data management and log viewing":"データ管理とログ閲覧","Data retention":"データ保持","Database":"データベース","Database check":"データベース確認","Date and time when this announcement should be displayed":"このアナウンスが表示されるべき日時","Date Range":"期間","Day":"日","Day of month":"月内の日","days":"日","Days to Retain":"保持日数","decides the top-up ratio, which groups the user can pick for tokens, and whether an override ratio applies.":"チャージ倍率、トークン作成時に選べるグループ、上書き倍率の適用有無を決めます。","decides which channels are used and which base ratio applies.":"使用するチャネルと適用される基本倍率を決めます。","Declared capabilities":"宣言された権限","Decrease quota for user “{{name}}”":"ユーザー「{{name}}」のクォータを減額","Decrease user quota":"ユーザーのクォータを減額","Decreased user quota by {{quota}}":"ユーザーのクォータを {{quota}} 減らしました","Deducted by subscription":"サブスクリプションで控除","DeepSeek":"DeepSeek","default":"デフォルト","Default":"デフォルト","Default / range":"デフォルト / 範囲","Default administrator permissions can be overridden for this user.":"このユーザーには既定の管理者権限を上書きできます。","Default API address":"既定の API アドレス","Default API Version":"デフォルトのAPIバージョン","Default API Version *":"デフォルトのAPIバージョン *","Default API version for this channel":"このチャネルのデフォルトのAPIバージョン","Default base URL":"既定の Base URL","Default Bearer":"既定の Bearer","Default Collapse Sidebar":"デフォルトのサイドバー折りたたみ","Default consumption chart":"デフォルトの消費チャート","Default Max Tokens":"デフォルトの最大トークン","Default model call chart":"デフォルトのモデル呼び出しチャート","Default placeholder":"既定の代替アイコン","Default range":"デフォルト範囲","Default reminder threshold":"デフォルトの通知しきい値","Default Responses API version, if empty, will use the API version above":"デフォルトの応答APIバージョン。空の場合、上記のAPIバージョンが使用されます","Deleted {{count}} auto-disabled keys":"自動無効化された {{count}} 個のキーを削除しました","Default session lifetime (seconds)":"セッションの既定の有効期間(秒)","Default system prompt for this channel":"このチャネルのデフォルトのシステムプロンプト","Default time granularity":"デフォルトの時間粒度","Default to auto groups":"デフォルトで自動グループ化","Default TTL (seconds)":"デフォルト TTL(秒)","Defaults to \\"OIDC\\" if left blank":"空欄の場合は「OIDC」がデフォルトで表示されます","Defaults to the wallet page when empty":"空欄の場合はウォレットページを既定にします","Define API endpoints for this model (JSON format)":"このモデルのAPIエンドポイントを定義します (JSON形式)","Define endpoint mappings for each provider.":"各プロバイダーごとにエンドポイントのマッピングを定義してください。","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"特定のユーザーグループに対して選択可能なグループを追加、削除、または追加するグループごとのルールを定義します。","Degraded performance recently":"最近パフォーマンスが低下しています","Delete":"削除","Delete (":"削除 (","Delete {{count}} API key(s)?":"{{count}}個のAPIキーを削除しますか?","Delete {{count}} models?":"{{count}} 件のモデルを削除しますか?","Delete {{count}} redemption codes?":"{{count}} 件の引き換えコードを削除しますか?","Delete {{count}} selected vendor records? Vendors with linked models cannot be deleted.":"選択した {{count}} 件のプロバイダーを削除しますか?関連モデルがある場合は削除できません。","Delete {{count}} stale instance records? Online instances will not be deleted.":"期限切れインスタンスレコードを {{count}} 件削除しますか?オンラインのインスタンスは削除されません。","Delete a runtime request header":"ランタイムリクエストヘッダーを削除","Delete Account":"アカウント削除","Deployment region cannot be empty":"デプロイリージョンは空にできません","Deployment region must be valid JSON, for example {{example}}":"デプロイリージョンは有効な JSON である必要があります。例:{{example}}","Deployment region must include a default field":"デプロイリージョンには default フィールドが必要です","Delete active custom version":"有効なカスタムバージョンを削除","Delete All Disabled":"すべての無効なものを削除","Delete All Disabled Channels?":"すべての無効なチャネルを削除しますか?","Delete all stale":"期限切れをすべて削除","Delete API token":"API トークンを削除","Delete API token “{{name}}”":"API トークン「{{name}}」を削除","Delete Auto-Disabled":"自動無効化されたものを削除","Delete Channel":"チャネルを削除","Delete Channels?":"チャネルを削除しますか?","Delete completed tasks matching the current filters across all pages? Active tasks and the latest run of each task type are retained for scheduling. This cannot be undone.":"すべてのページで現在のフィルターに一致する終了済みタスクを削除しますか?実行待ち・実行中のタスクと各種類の最新の実行記録は、スケジュール管理のために保持されます。この操作は取り消せません。","Delete condition":"条件を削除","Delete Condition":"条件を削除","Delete failed":"削除に失敗しました","Delete failed models":"失敗したモデルを削除","Delete failed models ({{count}})":"失敗したモデルを削除({{count}})","Delete Field":"フィールドを削除","Delete group":"グループを削除","Delete Header":"ヘッダーを削除","Delete Invalid":"無効を削除","Delete invalid codes":"無効なコードを削除","Delete invalid codes (used/disabled/expired)":"無効なコード(使用済み/無効/期限切れ)を削除","Delete invalid redemption codes":"無効な引き換えコードを削除","Delete Invalid Redemption Codes?":"無効な引き換えコードを削除しますか?","Delete logs":"ログを削除","Delete mapping":"マッピングを削除","Delete metadata and custom pricing for {{count}} models?":"{{count}} 件のモデル情報とカスタム料金設定を削除しますか?","Delete metadata for \\"{{name}}\\"? Pricing and channel configurations will be retained.":"「{{name}}」のメタデータを削除しますか?料金とチャネル設定は保持されます。","Delete metadata for \\"{{name}}\\"? Pricing will be retained.":"「{{name}}」のモデル情報を削除しますか?料金設定は保持されます。","Delete metadata for {{count}} models? Pricing will be retained.":"{{count}} 件のモデル情報を削除しますか?料金設定は保持されます。","Delete Model":"モデルを削除","Delete model \\"{{name}}\\"?":"モデル「{{name}}」を削除しますか?","Delete Models?":"モデルを削除しますか?","Delete plugin version?":"プラグインのバージョンを削除しますか?","Delete Provider":"プロバイダーを削除","Delete Request Header":"リクエストヘッダーを削除","Delete rule":"ルールを削除","Delete Rule":"ルールを削除","Delete selected API keys":"選択したAPIキーを削除","Delete selected channels":"選択したチャネルを削除","Delete selected models":"選択したモデルを削除","Delete selected redemption codes":"選択した引き換えコードを削除","Delete session rule “{{name}}”? Save your changes to apply the removal.":"セッションルール「{{name}}」を削除しますか?変更を保存すると削除が適用されます。","Delete stale instance":"期限切れインスタンスを削除","Delete stale instance \\"{{name}}\\"? If it has reported again, it will not be deleted.":"期限切れインスタンス \\"{{name}}\\" を削除しますか?再度報告されている場合は削除されません。","Delete stale instances":"期限切れインスタンスを削除","Delete vendor record":"プロバイダー情報を削除","Delete vendors":"プロバイダーを削除","Deleted":"削除済み","Deleted \\"{{name}}\\"":"\\"{{name}}\\" を削除しました","Deleted ({{id}})":"削除済み ({{id}})","Deleted {{count}} failed models":"失敗したモデルを {{count}} 個削除しました","Deleted {{count}} historical system tasks":"システムタスク履歴を {{count}} 件削除しました","Deleted {{count}} stale instances":"期限切れインスタンスを {{count}} 件削除しました","Deleted a custom OAuth provider":"カスタム OAuth プロバイダーを削除しました","Deleted a deployment":"デプロイメントを削除しました","Deleted a model":"モデルを削除しました","Deleted a passkey":"パスキーを削除しました","Descending":"降順","Disable tag grouping to drag channels":"タグのグループ化を解除するとドラッグできます","Disabled {{count}} keys":"{{count}} 個のキーを無効にしました","Deleted a prefill group":"プリフィルグループを削除しました","Deleted a redemption code":"引換コードを削除しました","Deleted a vendor":"ベンダーを削除しました","Deleted all disabled channels ({{count}})":"無効なチャネルをすべて削除しました({{count}})","Deleted channel {{name}} (ID: {{id}})":"チャネル {{name}} を削除しました(ID: {{id}})","Deleted invalid redemption codes":"無効な引換コードを削除しました","Deleted stale instance":"期限切れインスタンスを削除しました","Discord ID is empty!":"Discord ID が空です!","Deleted successfully":"削除しました","Deleted tokens":"削除したトークン数","Deleted user {{username}} (ID: {{id}})":"ユーザー {{username}} を削除しました(ID: {{id}})","Deleted: {{processed}}":"削除:{{processed}} 件","Deleting this custom version does not disable the platform. The same-name factory plugin will be restored automatically.":"このカスタムバージョンを削除してもプラットフォームは停止しません。同名の組み込みプラグインが自動的に復元されます。","Deleting will permanently remove this subscription record (including benefit details). Continue?":"削除するとこのサブスクリプション記録(特典詳細を含む)が完全に削除されます。続行しますか?","Deleting...":"削除中...","Demo site":"デモサイト","Demo site mode":"デモサイトモード","Demo Site Mode":"デモサイトモード","Demote":"降格","Density":"密度","Deploy your own gateway and start routing requests through your configured upstream services.":"独自のゲートウェイをデプロイし、設定済みのアップストリームサービスへリクエストをルーティングできます。","Deployment created successfully":"デプロイを作成しました","Deployment details":"デプロイメントの詳細","Deployment ID":"デプロイ ID","Deployment location":"デプロイ先","Deployment logs":"デプロイログ","Deployment Region":"デプロイリージョン","Deployment Region *":"デプロイリージョン *","Deployment requested":"デプロイメントが要求されました","Deployments":"デプロイ","Deprecated":"非推奨","Derives the request names your users call":"ユーザーが呼び出すリクエストモデル名を生成します","Derives the upstream names sent to the provider":"上流に送信するモデル名を生成します","Desc":"降順","Describe":"説明","Describe this model...":"このモデルを説明...","Describe this vendor...":"このベンダーを説明...","Description":"説明","Description is required":"説明は必須です","Designed and Developed by":"設計・開発","designed for scale":"スケールのために設計","Destroyed":"破棄済み","Detail":"詳細","Detailed request logs for investigations.":"調査のための詳細なリクエストログ。","Details":"詳細","Detect All Upstream Updates":"すべてのアップストリーム更新を検出","Detect model updates":"モデル更新を検出","Detected database":"検出されたデータベース","Detected high-risk status code redirect rules":"以下の高リスクステータスコードリダイレクトルールが検出されました:","Detection complete: {{add}} to add, {{remove}} to remove":"検出完了:{{add}} 個追加、{{remove}} 個削除","Detection failed":"検出に失敗しました","Determines how this group is applied elsewhere.":"このグループが他の場所でどのように適用されるかを決定します。","Deterministic sampling seed (best-effort)":"可能な限り再現性のあるサンプリングシード","Developer Friendly":"開発者向け","Device Type Preference":"優先デバイスタイプ","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Dify チャネルは chatflow と agent のみサポートしており、agent は画像をサポートしていません","Digest:":"ダイジェスト:","Direction":"方向","Directory File Count":"ディレクトリファイル数","Directory Total Size":"ディレクトリ合計サイズ","Disable":"無効にする","Disable 2FA":"2FAを無効にする","Downgrade group does not exist":"ダウングレードグループが存在しません","Disable All":"すべて無効にする","Disable channels on repeated failures":"失敗が続くチャネルを自動で無効化","Disable custom task plugins?":"カスタムタスクプラグインを無効化しますか?","Disable on failure":"失敗時に無効にする","Disable plugin {{name}} ({{key}})? Requests using this plugin may be affected.":"プラグイン {{name}}({{key}})を無効にしますか?このプラグインを使用するリクエストに影響する可能性があります。","Disable plugin?":"プラグインを無効にしますか?","Disable selected channels":"選択したチャネルを無効にする","Disable selected models":"選択したモデルを無効にする","Disable store passthrough":"ストアパススルーを無効にする","Disable task plugins?":"タスクプラグインを無効化しますか?","Disable this key?":"このキーを無効にしますか?","Disable threshold (seconds)":"無効化しきい値(秒)","Disable Two-Factor Authentication":"二要素認証を無効にする","disabled":"無効","Disabled":"無効","Disabled all channels with tag: {{tag}}":"タグ「{{tag}}」の全チャネルを無効にしました","Disabled channels with tag {{tag}}":"タグ {{tag}} のチャネルを無効化しました","Disabled globally":"全体で無効","Disabled lanes are omitted on save.":"無効な価格レーンは保存時に省略されます。","Disabled Reason":"無効化の理由","Disabled Time":"無効化された時刻","Disabled two-factor authentication":"二要素認証を無効にしました","Disabled; fell back to factory":"無効;組み込み版へフォールバック","Disabled; platform unavailable":"無効;プラットフォーム利用不可","Disabling...":"無効化中...","Discard changes":"変更を破棄","Discard unsaved changes?":"未保存の変更を破棄しますか?","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"免責事項:個人利用に限ります。認証情報を配布・共有しないでください。このチャネルには前提条件があり、事前の設定が必要です。手順とリスクを理解した上で利用し、OpenAI の利用規約および関連ポリシーを遵守してください。認証情報と設定は Codex CLI 連携専用であり、他のクライアント、プラットフォーム、またはチャネルでは利用できません。","Discord":"Discord","Discount":"特典","Discount map by recharge amount (JSON object)":"リチャージ額による割引マップ(JSONオブジェクト)","Discount Rate":"割引率","Discount rate must be ≤ 1":"割引率は 1 以下でなければなりません","Discount rate must be greater than 0":"割引率は 0 より大きくなければなりません","Discount Rate:":"割引率:","Discount ratio for cache hits.":"キャッシュヒットに対する割引率。","Discouraged":"非推奨","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"厳選された AI モデルを見つけ、価格と機能を比較し、あらゆるシナリオに適したモデルを選択できます。","Discover the leading models in each domain":"各分野をリードするモデルを発見","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"ライブ利用データに基づいて更新される、プラットフォームで最も使われているモデルと伸びているベンダーを確認できます。","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"プラットフォーム上で最も使われているモデル・人気アプリ・台頭するベンダーを発見しましょう。すべてのカテゴリで継続的に更新されます。","Discovering...":"検出中...","Disk cache cleared":"ディスクキャッシュをクリアしました","Disk Cache Settings":"ディスクキャッシュ設定","Disk Cache Threshold (MB)":"ディスクキャッシュ閾値 (MB)","Disk cache, system performance monitoring, and operation statistics":"ディスクキャッシュ、システムパフォーマンス監視、運用統計","Disk Hits":"ディスクヒット","Disk Threshold (%)":"ディスク閾値 (%)","Display in Currency":"通貨で表示","Display limit":"表示数","Display Mode":"表示モード","Display name":"表示名","Display Name":"表示名","Display name and email used in outgoing messages":"送信メッセージで使用される表示名とメールアドレス","Display Name Field":"表示名フィールド","Display name for this chat client.":"このチャットクライアントの表示名。","Display name for this monitoring group (max 50 characters)":"この監視グループの表示名(最大50文字)","Display name for this payment method.":"この支払い方法の表示名。","Display name shown to users.":"ユーザーに表示される表示名。","Display Options":"表示オプション","Display policy":"表示設定","Display Token Statistics":"トークン統計を表示","Displayed":"表示中","Displayed in":"表示単位","Displays the mobile sidebar.":"モバイルサイドバーを表示します。","Do not keep sessions":"セッションを維持しない","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"この機能を過信しないでください。IPは偽装される可能性があります。nginx、CDNなどのゲートウェイと併用してください。","Do not repeat check-in; only once per day":"チェックインを繰り返さないでください;1日1回のみ","Do not wait one second between polling async tasks for this channel":"このチャネルの非同期タスクをポーリングする間に1秒待機しない","Do regex replacement in the target field":"ターゲットフィールドで正規表現置換","Do string replacement in the target field":"ターゲットフィールドで文字列置換","Docs":"ドキュメント","Documentation Link":"ドキュメントリンク","Documentation or external knowledge base.":"ドキュメントまたは外部知識ベース。","Does not check healthy channels. It only rechecks auto-disabled channels and restores them after they recover.":"正常なチャネルはチェックしません。自動無効化されたチャネルのみを再チェックし、復旧後に再び有効化します。","does not exist or might have been removed.":"存在しないか、削除された可能性があります。","Domain":"ドメイン","Domain Filter Mode":"ドメインフィルターモード","Don\'t have an account?":"アカウントをお持ちでないですか?","Done":"完了","Doubao":"Doubao","Doubao custom API address editing unlocked":"豆包カスタムAPI アドレス編集がアンロックされました","Double check the configuration below. Your system will be locked until initialization is complete.":"下記の設定を再確認してください。初期化が完了するまでシステムはロックされます。","Downgrade Group":"ダウングレードグループ","Downgrade to pre-purchase group":"購入前のグループにダウングレード","Downgrade to this group after the subscription expires":"サブスクリプションの有効期限が切れた後、このグループにダウングレードします","Download":"ダウンロード","Drag {{group}} to reorder":"{{group}} をドラッグして並べ替え","Drag mode":"ドラッグモード","Drag mode help":"ドラッグモードの使い方","Drag the handle to move a channel.":"ハンドルをドラッグしてチャネルを移動します。","Drag to change priority. Use arrow keys to move, Escape to cancel.":"ドラッグで優先度を変更。矢印キーで移動、Esc でキャンセル。","Drag to move":"ドラッグして移動","Drag to resize":"ドラッグしてサイズ変更","Drag to set channel priority":"ドラッグでチャネルの優先度を変更","Draw":"描画","Drawing":"画像生成","Drawing logs":"描画ログ","Drawing Logs":"画像生成履歴","Drawing task polling":"描画タスクのポーリング","Drawing task records":"描画タスク記録","Drop a JavaScript plugin file here":"JavaScript プラグインファイルをここにドロップ","Drop at an edge to create a different priority.":"端にドロップすると別の優先度が作成されます。","Drop between tiers to change priority, or in the center to join a tier":"優先度を変えるには段階の間、同じ段階にするには中央にドロップ","Drop in the center to use the same priority.":"中央にドロップすると同じ優先度になります。","Dry run result":"ドライラン結果","Duplicate":"複製","Duplicate group names: {{names}}":"重複するグループ名: {{names}}","Duplicate model in route models":"ルートモデルに重複したモデルがあります","Duplicate source model mappings are not allowed":"重複したソースモデルのマッピングは許可されていません","Duplicate source model(s): {{models}}":"重複したソースモデル: {{models}}","Duration":"所要時間","Duration (hours)":"期間(時間)","Duration Settings":"有効期間設定","Duration Unit":"期間単位","Duration Value":"期間値","Dynamic declarations cannot be previewed. Retry or review the source below.":"動的に生成される宣言はプレビューできません。再試行するか、下のソースを確認してください。","Dynamic multiplier":"動的倍率","Dynamic operation":"動的操作","Dynamic Pricing":"ダイナミック価格設定","e.g. ¥ or HK$":"例: ¥ または HK$","e.g. 401, 403, 429, 500-599":"例:401, 403, 429, 500-599","e.g. 8 means 1 USD = 8 units":"例: 8 は 1 USD = 8 単位 を意味します","e.g. Basic Plan":"例:ベーシックプラン","e.g. Clean tool parameters to avoid upstream validation errors":"例:ツールパラメータを整理して上流の検証エラーを回避","e.g. Company SSO":"例:会社の SSO","e.g. example.com":"例: example.com","e.g. gpt-4o, gemini-2.5-flash":"例: gpt-4o, gemini-2.5-flash","e.g. llama3.1:8b":"例: llama3.1:8b","e.g. My GitLab":"例: My GitLab","e.g. my-gitlab":"例: my-gitlab","e.g. New API Console":"例: New API コンソール","e.g. openid profile email":"例: openid profile email","e.g. Requires level {{required}}; your current level is {{current}}":"例:レベル {{required}} が必要です。現在のレベルは {{current}} です","e.g. Suitable for light usage":"例:ライトユーザー向け","e.g. This request does not meet access policy":"例:このリクエストはアクセスポリシーを満たしていません","e.g., 0.95":"例: 0.95","Email & Notifications":"メールと通知","Email address is already in use":"このメールアドレスは既に使用されています","e.g., 100":"例: 100","e.g., 123456":"例: 123456","e.g., 2025-04-01-preview":"例: 2025-04-01-preview","e.g., 50":"例: 50","e.g., 500000":"例: 500000","e.g., 7342866812345":"例: 7342866812345","Email is empty!":"メールアドレスが空です!","Email or password is empty!":"メールアドレスまたはパスワードが空です!","e.g., 8 means 8 local currency per USD":"例: 8 は 1 USD あたり 8 現地通貨 を意味します","e.g., Alipay, WeChat":"例: Alipay、WeChat","e.g., Basic Package":"例: 基本パッケージ","Email verification is enabled, please enter email address and verification code":"メール認証が有効です。メールアドレスと確認コードを入力してください","e.g., CN2 GIA":"例: CN2 GIA","e.g., Core APIs, OpenAI, Claude":"例: Core APIs、OpenAI、Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"例: d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"例: default、vip、premium","e.g., gpt-4, claude-3":"例:gpt-4、claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"例: gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"例: https://api.example.com (/suno の前のパス)","e.g., https://api.openai.com/v1/chat/completions":"例: https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"例: https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"例: https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"例: https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"例: OpenAI GPT -4 Production","e.g., preview":"例: preview","e.g., prod_xxx":"例: prod_xxx","e.g., Recommended for China Mainland Users":"例: 中国本土ユーザーにおすすめ","e.g., SiAlipay":"例: SiAlipay","e.g., us-central1 or JSON format for model-specific regions":"例: us-central1 またはモデル固有のリージョンを示す JSON 形式","e.g., v2.1":"例: v2.1","Each backup code can only be used once.":"各バックアップコードは1回しか使用できません。","Each item must be an object with a single key-value pair.":"各項目は単一のキーと値のペアを持つオブジェクトでなければなりません。","Each item must have exactly one key-value pair.":"各項目には正確に 1 つのキーと値のペアが必要です。","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"各行は1つのキーワードを表します。リストを無効にするが、スイッチの状態を維持するには、空白のままにしてください。","Each matrix cell is one rule: users of this row group pay this ratio when billed as this column group. In JSON the row is the outer key and the column is the inner key.":"マトリクスの各セルが1つのルールです。行グループのユーザーが列グループとして課金されるとき、この倍率を支払います。JSONでは行が外側のキー、列が内側のキーです。","Each row prices one combination of {{fields}}.":"各行で {{fields}} の組み合わせを1つずつ料金設定します。","Each rule reads as a sentence: users of one group pay a special ratio when billed as another group. Without a rule, the billing group base ratio applies.":"各ルールは文として読めます:あるグループのユーザーが別のグループとして課金されるとき、特別な倍率を支払います。ルールがなければ課金グループの基本倍率が適用されます。","Each source serves an index.json listing installable plugins. Indexes are fetched by your browser; the gateway makes no outbound requests.":"各ソースはインストール可能なプラグインを列挙する index.json を提供します。インデックスはブラウザが取得し、ゲートウェイは外部へリクエストを送信しません。","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"各層は 0~2 個の条件(len、p、c に対して)を設定でき、最後の層は条件なしのキャッチオール層です。キャッシュヒットによって p が下がり層が誤判定されるのを防ぐため、層の条件には len(キャッシュヒットを含む完全な入力長)を使用してください。","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"各階層は最大2つの条件をサポートします。最後の階層は条件なしのフォールバックです。キャッシュヒットで課金対象の入力トークンが減っても誤った階層にならないよう、条件には完全な入力長を使用してください。","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"各段階は最大 2 つの条件に対応します。条件のない最後の段階がフォールバックです。","Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.":"ユーザーがあなたの紹介リンクから登録すると報酬を獲得できます。貯まった報酬はいつでも残高へ振り替えられます。","Earnings":"収益","Edit":"編集","Edit {{title}}":"{{title}}を編集","Edit access token":"アクセストークンを編集","Edit all channels with tag:":"タグを持つすべてのチャネルを編集:","Edit Announcement":"お知らせを編集","Edit API Shortcut":"API ショートカットを編集","Edit billing ratios and user-selectable groups in one table.":"課金倍率とユーザーが選択できるグループを1つの表で編集します。","Edit Channel":"チャネルを編集","Edit channel routing":"チャネルルーティングを編集","Edit chat preset":"チャットプリセットを編集","Edit discount tier":"割引ティアを編集","Edit FAQ":"FAQ を編集","Edit group":"グループを編集","Edit group rate limit":"グループレート制限を編集","Edit group settings as JSON. Changes are shared with the visual editor.":"グループ設定を JSON で編集します。変更はビジュアルエディターと同期されます。","Edit JSON object directly. Suitable for simple parameter overrides.":"JSONオブジェクトを直接編集します。シンプルなパラメータオーバーライドに適しています。","Edit JSON text directly. Format will be validated on save.":"JSONテキストを直接編集します。保存時にフォーマットが検証されます。","Edit mapping":"マッピングを編集","Edit model":"モデルを編集","Edit Model":"モデルを編集","Edit model pricing":"モデル料金を編集","Edit models and vendors, and sync them from upstream.":"モデルとプロバイダーを編集し、アップストリームから同期します。","Edit non-sensitive settings such as models, groups, and routing rules.":"モデル、グループ、ルーティングルールなどの非機密設定を編集します。","Edit OAuth Provider":"OAuthプロバイダーを編集","Edit payment method":"決済方法を編集","Edit Prefill Group":"プリフィルグループを編集","Edit pricing rule {{name}}":"料金ルール {{name}} を編集","Edit product":"製品を編集","Edit ratio override":"倍率オーバーライドを編集","Edit Rule":"ルール編集","Edit selectable group":"選択可能なグループを編集","Edit sensitive channel settings":"機密チャネル設定を編集","Edit Tag":"タグ編集","Edit Tag:":"タグを編集:","Edit Uptime Kuma Group":"Uptime Kuma グループを編集","Edit Vendor":"ベンダーを編集","Enabled {{count}} keys":"{{count}} 個のキーを有効にしました","edit_this":"edit_this","Edited channels with tag {{tag}}":"タグ {{tag}} のチャネルを編集しました","Editor mode":"エディターモード","Education":"教育","Effective icon":"適用されるアイコン","Email":"メールアドレス","Email (required for verification)":"メールアドレス(認証に必須)","Email Address":"メールアドレス","Email Alias Restriction":"メールエイリアスの制限","Email bound successfully!":"メールが正常に紐付けられました!","Email confirmation code resend":"メール確認コードの再送信","Email Domain Restriction":"メールドメインの制限","Email Domain Whitelist":"メールドメインのホワイトリスト","Email Field":"メールフィールド","Email Verification":"メール認証","Email verification code is incorrect.":"メールの確認コードが正しくありません。","Email verification has ended. Start again to continue.":"メール認証は終了しました。続行するにはやり直してください。","Email, summarisation, knowledge work":"メール・要約・ナレッジワーク","Embeddings":"埋め込み","Empty":"空","Empty value will be saved as {}.":"空の値は {} として保存されます。","Enable":"有効にする","Enable {{parameter}}":"{{parameter}}を有効化","Enable 2FA":"2FA を有効にする","Enable All":"すべて有効にする","Enable check-in feature":"チェックイン機能を有効にする","Enable custom task plugins":"カスタムタスクプラグインを有効化","Enable Data Dashboard":"データダッシュボードを有効にする","Enable demo mode with limited functionality":"機能が制限されたデモモードを有効にする","Enable Discord OAuth":"Discord OAuthを有効にする","Enable Disk Cache":"ディスクキャッシュを有効にする","Enable drawing features":"描画機能を有効にする","Enable filtering":"フィルタリングを有効にする","Enable FunctionCall thoughtSignature Fill":"FunctionCall用のthoughtSignature自動付与を有効化","Enable GitHub OAuth":"GitHub OAuthを有効にする","Enable Groups":"グループを有効にする","Enable if this is an OpenRouter enterprise account with special response format":"特別な応答形式を持つOpenRouterエンタープライズアカウントである場合に有効にします","Enable io.net deployments":"io.net デプロイを有効化","Enable io.net model deployment service in console":"コンソールで io.net モデルデプロイサービスを有効化","Enable LinuxDO OAuth":"LinuxDO OAuthを有効にする","Enable model performance metrics":"モデル性能メトリクスを有効化","Enable OIDC":"OIDCを有効にする","Enable only if the upstream supports Responses WebSocket. HTTP requests are unaffected when disabled.":"上流サービスが Responses WebSocket に対応している場合のみ有効にしてください。無効時も通常の HTTP リクエストは利用できます。","Enable or disable this channel":"このチャネルを有効または無効にする","Enable or disable this model":"このモデルを有効または無効にする","Enable Passkey":"Passkeyを有効にする","Enable passthrough":"パススルーを有効にする","Enable Performance Monitoring":"パフォーマンス監視を有効にする","Enable plugin {{key}}":"プラグイン {{key}} を有効化","Enable plugin?":"プラグインを有効にしますか?","Enable rate limiting":"レート制限を有効にする","Enable request body passthrough?":"リクエストボディのパススルーを有効にしますか?","Enable request header passthrough?":"リクエストヘッダーのパススルーを有効にしますか?","Enable Request Passthrough":"リクエストパススルーを有効にする","Enable Responses WebSocket":"Responses WebSocket を有効化","Enable selected channels":"選択したチャネルを有効にする","Enable selected models":"選択したモデルを有効にする","Enable session affinity":"セッション維持を有効にする","Enable SSL/TLS":"SSL/TLSを有効にする","Enable SSRF Protection":"SSRF保護を有効にする","Enable STARTTLS":"STARTTLSを有効にする","Enable streaming mode for the test request.":"テストリクエストのストリーミングモードを有効にします。","Enable task plugins":"タスクプラグインを有効化","Enable Telegram OAuth":"Telegram OAuthを有効にする","Enable test mode for Creem payments":"Creem 決済のテストモードを有効にする","Enable this key?":"このキーを有効にしますか?","Enable Turnstile":"Turnstileを有効にする","Enable Two-factor Authentication or Passkey in Security & Access to continue.":"「セキュリティとアクセス」で二要素認証またはパスキーを有効にして続行してください。","Enable Two-factor Authentication or Passkey in Security & Access to unlock sensitive operations.":"機密性の高い操作を行うには、「セキュリティとアクセス」で二要素認証またはパスキーを有効にしてください。","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"機密性の高い操作を解除するには、プロフィールで二要素認証またはPasskeyを有効にしてください。","Enable unlimited quota for this API key":"このAPIキーの無制限のクォータを有効にする","Enable violation deduction":"違反料金控除を有効にする","Enable Waffo":"Waffoを有効化","Enable Waffo Pancake":"Waffo Pancake を有効にする","Enable WeChat Auth":"WeChat認証を有効にする","Enable when proxying workers that fetch images over HTTP.":"HTTP経由で画像をフェッチするワーカーをプロキシする場合に有効にします。","Enable when the client and upstream use the same API format and you need to preserve upstream-specific or new fields the gateway does not yet support. Usually leave this off.":"クライアントと上流が同じ API 形式を使用し、ゲートウェイがまだ対応していない上流固有のフィールドや新しいパラメーターを保持する必要がある場合に有効にします。通常は無効のままにしてください。","Enable when the upstream needs client information from Codex or Claude Code headers; may expose client information":"上流が Codex や Claude Code などのクライアントヘッダー情報を必要とする場合に有効化。クライアント情報が公開される可能性があります","Enable when the upstream needs information from clients such as Codex or Claude Code, including User-Agent, client version or session headers. Usually leave this off.":"上流が Codex や Claude Code などのクライアント情報を必要とする場合に有効にします。対象は User-Agent、クライアントのバージョン、セッションヘッダーなどです。通常は無効のままにしてください。","Enabled":"有効","Enabled all channels with tag: {{tag}}":"タグ「{{tag}}」の全チャネルを有効にしました","Enabled channels with tag {{tag}}":"タグ {{tag}} のチャネルを有効化しました","Enabled Status":"有効ステータス","Enabled two-factor authentication":"二要素認証を有効にしました","Enabling...":"有効化中...","Encourages introducing new topics":"新しい話題への展開を促進します","Encourages new topics":"新しい話題を促します","End":"終了","End Error":"終了エラー","End Reason":"終了理由","End Time":"終了時間","End time must be after start time":"終了時刻は開始時刻より後にしてください","Enter the Discovery URL or Issuer URL first":"先に Discovery URL または Issuer URL を入力してください","End weekday":"終了曜日","End-user identifier for abuse monitoring":"悪用検知用のエンドユーザー識別子","Endpoint":"エンドポイント","Endpoint config":"エンドポイント設定","Endpoint Configuration":"エンドポイント設定","Endpoint Type":"エンドポイントタイプ","Endpoint, provider-specific settings, and credentials.":"エンドポイント、プロバイダー固有の設定、認証情報。","Endpoint:":"エンドポイント:","Endpoints":"エンドポイント","English":"英語","Ensure Prefix":"プレフィックスを保証","Ensure Suffix":"サフィックスを保証","Ensure the string has a specified prefix":"文字列に指定のプレフィックスがあることを確認","Ensure the string has a specified suffix":"文字列に指定のサフィックスがあることを確認","Enter 6-digit code":"6桁のコードを入力","Enter a domain such as example.com or localhost, without a protocol, port or path. Put addresses with ports in Allowed Passkey websites.":"example.com や localhost などのドメインのみを入力し、プロトコル、ポート、パスは含めないでください。ポート付きのアドレスは「Passkey の利用を許可するサイト」に入力します。","Enter a finite, non-negative price":"有限の非負の料金を入力してください","Enter a finite, non-negative price.":"有限の非負の料金を入力してください。","Enter a name":"名前を入力","Enter a new name":"新しい名前を入力してください","Enter a positive integer":"正の整数を入力してください","Enter a positive or negative amount to adjust the quota":"クォータを調整するために正または負の値を入力してください","Enter a react-icons component name. Invalid names show no icon.":"react-icons のコンポーネント名を入力してください。無効な名前はアイコンを表示しません。","Enter a rule to preview mappings.":"ルールを入力するとマッピングが表示されます。","Enter a valid condition value.":"有効な条件値を入力してください。","Enter a valid email or leave blank":"有効なメールアドレスを入力するか空白にしてください","Enter a value and press Enter":"値を入力してEnterを押してください","Enter amount in {{currency}}":"{{currency}}で金額を入力","Enter amount in tokens":"トークンで金額を入力","Enter an absolute HTTP(S) URL without credentials, query parameters, or fragments":"認証情報、クエリパラメータ、フラグメントを含まない絶対 HTTP(S) URL を入力してください","Enter an absolute http(s) URL.":"完全な http(s) URL を入力してください。","Enter an ISO date and time with a timezone offset.":"タイムゾーンのオフセットを含む ISO 形式の日時を入力してください。","Enter announcement content (supports Markdown & HTML)":"アナウンス内容を入力(Markdown & HTML対応)","Enter announcement content (supports Markdown/HTML)":"アナウンス内容を入力(Markdown/HTML対応)","Enter API Key":"API キーを入力","Enter API key for this channel":"このチャネルの API キーを入力してください","Enter API Key, format: APIKey|Region":"APIキーを入力してください。形式: APIKey | Region","Enter API Key, one per line, format: APIKey|Region":"APIキーを1行に1つずつ入力してください。形式: APIKey | Region","Enter application token":"アプリケーショントークンを入力","Enter authenticator code":"認証コードを入力","Enter backup code (e.g., CAWD-OQDV)":"バックアップコードを入力(例:CAWD-OQDV)","Enter code":"コードを入力","Enter code or backup code":"コードまたはバックアップコードを入力","Enter Completion price to calculate ratio":"比率を計算するために Completion 価格を入力","Enter Creem API key":"Creem API キーを入力","Enter custom API endpoint URL":"カスタムAPIエンドポイントURLを入力","Enter deployment region or JSON mapping:":"デプロイリージョンまたはJSONマッピングを入力:","Enter display name":"表示名を入力","Enter HTML code (e.g.,

About us...

) or a URL (e.g., https://example.com) to embed as iframe":"HTMLコード(例:

About us...

)またはURL(例:https://example.com)を入力してiframeとして埋め込みます","Enter Input price to calculate ratio":"比率を計算するために Input 価格を入力","Enter JSON to override request headers":"リクエストヘッダーを上書きする JSON を入力","Enter key, format: AccessKey|SecretAccessKey|Region":"キーを入力してください、形式: AccessKey | SecretAccessKey | Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"キーを入力してください。1行に1つ、形式: AccessKey | SecretAccessKey | Region","Enter model name":"モデル名を入力","Enter new key to update":"更新する新しいキーを入力","Enter new key to update, or leave empty to keep current key":"更新する新しいキーを入力するか、空欄にして現在のキーを保持","Enter new tag name (leave empty to disband tag)":"新しいタグ名を入力してください(タグを解散するには空欄にしてください)","Enter new tag name or leave empty":"新しいタグ名を入力するか、空欄にする","Enter new token to update":"更新する新しいトークンを入力","Enter one API key per line for batch creation":"一括作成のため、1行に1つのAPIキーを入力してください","Enter one key per line for batch creation":"一括作成のため、1行に1つのキーを入力してください","Enter one keyword per line":"1行に1つのキーワードを入力","Enter one website address per line, such as https://example.com. Do not include a page path.":"https://example.com のように、サイトのアドレスを1行に1つ入力します。ページのパスは含めません。","Enter only a top-level callback domain, for example https://api.example.com, without any path.":"コールバックのトップレベルドメインのみを入力してください。例: https://api.example.com。パスは含めないでください。","Enter only the domain, such as example.com, without https://, a port or a page path. If you use both example.com and api.example.com, you can enter example.com.":"example.com のようにドメインだけを入力し、https://、ポート、ページのパスは含めません。example.com と api.example.com の両方を使う場合は example.com を指定できます。","Enter only the domain, without https://, a port or a page path. example.com and www.example.com are different Passkey domains; changing between them does not migrate existing Passkeys.":"https://、ポート、ページパスを含めず、ドメインのみ入力してください。example.com と www.example.com は異なるパスキードメインです。切り替えても既存のパスキーは移行されません。","Enter password":"パスワードを入力","Enter password (8-20 characters)":"パスワードを入力 (8~20文字)","Enter password (8–128 characters)":"パスワードを入力(8~128文字)","Enter previous domains, one per line, without a protocol, port or path. Different ports on the same domain do not need compatible domains.":"以前のドメインを1行に1つ入力し、プロトコル、ポート、パスは含めないでください。同じドメインでポートのみが異なる場合、互換ドメインへの追加は不要です。","Enter previous Passkey domains, one per line. Existing Passkeys can still verify with these domains; new Passkeys use the primary domain.":"以前のパスキードメインを1行に1つ入力してください。既存のパスキーはこれらのドメインで引き続き認証でき、新しいパスキーはメインドメインを使用します。","Enter quota in {{currency}}":"{{currency}} でクォータを入力","Enter quota in tokens":"トークン単位でクォータを入力","Enter sample usage to estimate the cost. Group and request multipliers are not included.":"1回のリクエストの使用量を入力して料金を確認できます。グループ倍率とリクエストルールの倍率は含みません。","Enter secret key":"シークレットキーを入力","Enter system prompt (user prompt takes priority)":"システムプロンプトを入力 (ユーザープロンプトが優先されます)","Enter tag name (optional)":"タグ名を入力 (オプション)","Enter the 6-digit authenticator code or an unused backup code.":"認証アプリの6桁のコードか、未使用のバックアップコードを入力してください。","Enter the 6-digit authenticator code.":"認証アプリの6桁のコードを入力してください。","Enter the 6-digit code from your authenticator app":"認証アプリからの6桁のコードを入力","Enter the 6-digit email verification code.":"メールで届いた6桁の確認コードを入力してください。","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"認証アプリからの6桁のワンタイムパスワードまたは8文字のバックアップコードを入力してください。","Enter the complete URL, supports":"完全なURLを入力、サポート","Expiration time cannot be earlier than current time":"有効期限を現在時刻より前にすることはできません","Enter the Coze agent ID":"CozeエージェントIDを入力","Enter the full URL of your Gotify server":"Gotifyサーバーの完全なURLを入力","Enter the knowledge base ID":"ナレッジベースIDを入力","Enter the path before /suno, usually just the domain":"/suno の前のパスを入力してください。通常はドメインのみです","Enter the quota amount in {{currency}}":"{{currency}} でクォータ数を入力","Enter the quota amount in tokens":"トークン単位でクォータ額を入力","Enter the verification code":"確認コードを入力","Enter the website domain, such as example.com.":"サイトのドメイン(例:example.com)を入力します。","Export":"エクスポート","Export logs":"ログをエクスポート","Exported {{count}} logs":"{{count}} 件のログをエクスポートしました","Enter token counts to preview the estimated cost (excluding group multipliers).":"トークン数を入力して、推定コストを表示します(グループ倍率は除く)。","Enter URL...":"URLを入力...","Enter username":"ユーザー名を入力","Enter verification code":"確認コードを入力","Enter webhook secret":"Webhook シークレットを入力","Enter your authenticator code or a backup code":"認証コードまたはバックアップコードを入力","Enter your email":"メールアドレスを入力","Enter your redemption code":"引き換えコードを入力","Enter your registered email and we will send you a link to reset your password.":"登録済みのメールアドレスを入力してください。パスワードをリセットするためのリンクをお送りします。","Enter your username":"ユーザー名を入力","Enter your username or email":"ユーザー名またはメールアドレスを入力","Enterprise Account":"エンタープライズアカウント","Enterprise-grade security with comprehensive permission management":"包括的な権限管理を備えたエンタープライズグレードのセキュリティ","Entries configured in Request Header Override still take priority":"リクエストヘッダー上書きで設定した項目が引き続き優先されます","Entrypoint (space separated)":"Entrypoint (スペース区切り)","Enum":"列挙","Enum values":"列挙値","Env (JSON object)":"Env (JSON オブジェクト)","Environment variables":"環境変数","Environment variables (JSON)":"環境変数(JSON)","Epay Alipay":"Epay Alipay(支付宝)","Epay endpoint":"Epayエンドポイント","Epay Gateway":"Epayゲートウェイ","Epay is a payment protocol, not a specific official website. Verify the provider yourself and do not trust random third-party Epay deployments.":"Epay は決済プロトコルであり、特定の公式サイトではありません。提供元を自分で確認し、第三者が構築した Epay サイトを安易に信用しないでください。","Epay merchant ID":"Epay マーチャントID","Epay safety reminder":"Epay の安全に関する注意","Epay secret key":"Epayシークレットキー","Epay WeChat Pay":"Epay WeChat Pay(微信支付)","Equals":"等しい","Error":"エラー","Error Code (optional)":"エラーコード(任意)","Error establishing connection":"接続の確立に失敗しました","Error Message":"エラーメッセージ","Error Message (required)":"エラーメッセージ(必須)","Error parsing response data":"レスポンスデータの解析に失敗しました","Error Type (optional)":"エラータイプ(任意)","Estimated cost":"推定コスト","Estimated quota cost":"想定クォートコスト","Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.":"プロバイダーのユーザー情報レスポンスのフィールドを評価します。条件とネストしたグループでは and/or ロジックを使用します。","Event":"イベント","Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.":"料金表の各グループ名は2つの場所で使えます。ユーザー側(ユーザーグループ、管理者が割り当て)とトークン側(トークングループ、トークン作成時に選択)です。同じ名前プールで、役割は2つです。","Failed to check user bindings, please try again later":"ユーザーの連携状況を確認できませんでした。しばらくしてから再試行してください","Every other device will lose access immediately. This device will remain signed in.":"他のすべてのデバイスは直ちにアクセスできなくなります。このデバイスはログイン状態を維持します。","Everything configured for this group, in one place.":"このグループのすべての設定を一か所で確認できます。","Exact":"完全一致","Exact Match":"完全一致","Exact match only and case-sensitive. Prefixes, regex, and * wildcards are not supported.":"完全一致のみで、大文字と小文字も区別します。プレフィックス、正規表現、* ワイルドカードは使えません。","Example":"サンプル","Example (all channels):":"例(全チャネル):","Failed to copy channel. Please try again later":"チャネルのコピーに失敗しました。後でもう一度お試しください","Example (specific channels):":"例(特定チャネル):","Example price":"例の価格","Example spec":"例の仕様","Failed to count channel types. Please try again later":"チャネル種別の集計に失敗しました。後でもう一度お試しください","Failed to count channels. Please try again later":"チャネル数の取得に失敗しました。後でもう一度お試しください","Failed to count tags. Please try again later":"タグ数の取得に失敗しました。後でもう一度お試しください","Example:":"例:","Example: users call gpt-4o; upstream receives gpt-4o-all.":"例:ユーザーは gpt-4o を指定し、上流は gpt-4o-all を受信します。","example.com blocked-site.com":"example.com blocked-site.com","Failed to create default token":"デフォルトトークンの作成に失敗しました","example.com company.com":"example.com company.com","Failed to create order":"注文の作成に失敗しました","Excellent":"優秀","Exchange rate is required":"為替レートは必須です","Failed to create redemption code, please try again later":"引き換えコードの作成に失敗しました。しばらくしてから再試行してください","Failed to create the administrator account: {{error}}":"管理者アカウントの作成に失敗しました: {{error}}","Failed to create the Discovery request: {{error}}":"Discovery リクエストの作成に失敗しました: {{error}}","Failed to create the plan product":"プラン商品の作成に失敗しました","Exchange rate must be greater than 0":"為替レートは 0 より大きくする必要があります","Excludes the first attempt. Counted per group.":"初回を除く、グループごとの回数です。","Execute code in a sandbox during the response":"応答中にサンドボックスでコードを実行","Executor":"実行ノード","Exhausted":"使い切り","Existing account will be reused":"既存のアカウントが再利用されます","Existing Models ({{count}})":"既存のモデル ({{count}})","Existing models: select fields to replace their current values with the values on the right. Unselected fields stay unchanged.":"既存モデル:更新する項目を選ぶと、現在の値が右側の値に置き換わります。未選択の項目は変更されません。","Existing Passkeys remain tied to the old domain and may stop working. Keep the old domain to preserve access, or confirm only if you have a recovery plan.":"既存のパスキーは旧ドメインに紐づいたままのため、使えなくなる可能性があります。アクセスを維持するには旧ドメインを保持し、復旧手段がある場合のみ変更を確定してください。","Exists":"存在","Expand":"展開","Expand All":"すべて展開","Expand panel":"パネルを展開","Expected a JSON array of group identifiers":"グループ識別子の JSON 配列が必要です","Expected a JSON array.":"JSON 配列が必要です。","Experiment with prompts and models in real time.":"プロンプトとモデルをリアルタイムで実験する。","Expiration":"有効期限","Expiration Time":"有効期限","expired":"期限切れ","Expired":"有効期限切れ","Expired at":"有効期限","Expired time cannot be earlier than current time":"有効期限は現在時刻より早く設定できません","Expires":"有効期限","Expires {{time}}":"{{time}} に期限切れ","Expires at":"有効期限","Expires in":"期限まで","Export snapshot":"スナップショットを出力","Failed to encode Vertex AI key JSON: {{error}}":"Vertex AI キーの JSON エンコードに失敗しました:{{error}}","Failed to export logs":"ログのエクスポートに失敗しました","Expose ratio API":"倍率APIを公開","Failed to fetch channel. Please try again later":"チャネル情報の取得に失敗しました。後でもう一度お試しください","Failed to fetch channels with this tag. Please try again later":"このタグのチャネルの取得に失敗しました。後でもう一度お試しください","Failed to fetch channels. Please try again later":"チャネル一覧の取得に失敗しました。後でもう一度お試しください","Exposes the pricing/models catalog in the top navigation.":"価格/モデルカタログをトップナビゲーションに表示します。","Expression":"式","Expression - Task pricing":"式 - タスク料金","Failed to fetch models: {{error}}":"モデル一覧の取得に失敗しました:{{error}}","Expression argument types do not match.":"式の引数の型が一致しません。","Failed to fetch Ollama version: {{error}}":"Ollama のバージョン取得に失敗しました:{{error}}","Expression based":"式ベース","Failed to fetch reset credit details. Please try again later":"リセット回数の詳細の取得に失敗しました。後でもう一度お試しください","Failed to fetch tags. Please try again later":"タグの取得に失敗しました。後でもう一度お試しください","Failed to fetch the catalog":"カタログの取得に失敗しました","Failed to fetch the Discovery configuration: {{error}}":"Discovery 設定の取得に失敗しました: {{error}}","Failed to fetch the product list":"商品一覧の取得に失敗しました","Expression billing":"式による課金","Expression compatibility will be checked when saving.":"式の互換性は保存時に確認されます。","Expression editor":"式エディター","Failed to fetch usage. Please try again later":"使用量の取得に失敗しました。後でもう一度お試しください","Expression error":"式のエラー","Expression pricing":"式による料金","Failed to generate default token":"デフォルトトークンの生成に失敗しました","Extend":"延長","Failed to get the channel information. Please contact the administrator":"チャネル情報の取得に失敗しました。管理者に連絡してください","Failed to get the token count":"トークン数の取得に失敗しました","Failed to get the user group":"ユーザーグループの取得に失敗しました","Failed to get token from {{provider}}, please check settings":"{{provider}} からトークンを取得できませんでした。設定を確認してください","Failed to get user information":"ユーザー情報の取得に失敗しました","Extend deployment":"デプロイメントを延長","Extend failed":"延長に失敗しました","Extended successfully":"正常に延長されました","Failed to initialize the system: {{error}}":"システムの初期化に失敗しました: {{error}}","External Device":"外部デバイス","External link for users to purchase quota":"ユーザーがクォータを購入するための外部リンク","External operations":"外部運用","External operations mode":"外部運用モード","External Speed Test":"外部スピードテスト","Extra":"追加","Extra destinations beyond the channel API address. The channel address remains accessible.":"チャネルの API アドレスに加えてアクセスできるドメインです。チャネルのアドレス自体にもアクセスできます。","Extra Notes (Optional)":"追加のメモ (オプション)","Extra visible":"追加表示","Extra visible to {{group}}":"{{group}} に追加表示","extras":"追加項目","Factory":"組み込み","Factory and custom plugin behavior":"組み込み版とカスタム版の動作","Factory and custom plugins all stop serving immediately. In-flight tasks will be handled by timeout cleanup.":"ファクトリープラグインとカスタムプラグインは直ちに停止します。実行中のタスクはタイムアウトクリーンアップで処理されます。","Factory plugins cannot be deleted or disabled individually. A custom version can override them; deleting or disabling that version restores the factory plugin. Third-party-only platforms become unavailable when their plugin is deleted or disabled.":"組み込みプラグインは個別に削除・無効化できません。カスタム版で上書きでき、その版を削除または無効化すると組み込み版に戻ります。サードパーティ専用プラットフォームはプラグインを削除または無効化すると利用できなくなります。","Fail Reason":"失敗理由","Fail Reason Details":"失敗理由の詳細","failed":"失敗","Failed":"失敗","Failed to {{action}} user":"ユーザーの{{action}}に失敗しました","Failed to adjust quota":"クォータの調整に失敗しました","Failed to apply overwrite.":"オーバーライトの適用に失敗しました。","Failed to apply vendor changes":"プロバイダーの変更を適用できませんでした","Failed to batch delete redemption codes":"引き換えコードの一括削除に失敗しました","Failed to bind email":"メールのバインドに失敗しました","Failed to change password":"パスワードの変更に失敗しました","Failed to check for updates":"更新の確認に失敗しました","Failed to clean logs":"ログのクリーンアップに失敗しました","Failed to complete order":"注文の完了に失敗しました","Failed to complete Passkey login":"Passkeyログインの完了に失敗しました","Failed to confirm compliance":"コンプライアンス確認に失敗しました","Failed to parse appended keys: {{error}}":"追加するキーの解析に失敗しました:{{error}}","Failed to parse credentials. Please check the channel configuration":"認証情報の解析に失敗しました。チャネル設定を確認してください","Failed to contact GitHub releases API":"GitHub Releases API に接続できませんでした","Failed to copy":"コピーに失敗しました","Failed to parse the Discovery configuration: {{error}}":"Discovery 設定の解析に失敗しました: {{error}}","Failed to parse tool price \\"{{name}}\\": {{error}}":"ツール価格「{{name}}」の解析に失敗しました:{{error}}","Failed to parse tool prices: {{error}}":"ツール価格の解析に失敗しました:{{error}}","Failed to copy channel":"チャネルのコピーに失敗しました","Failed to copy keys":"キーのコピーに失敗しました","Failed to copy model names":"モデル名のコピーに失敗しました","Failed to copy to clipboard":"クリップボードにコピーできませんでした","Failed to query channels":"チャネルの照会に失敗しました","Failed to query logs":"ログの取得に失敗しました","Failed to query statistics":"統計データの取得に失敗しました","Failed to query the upstream task status":"上流タスクの状態を取得できませんでした","Failed to create account":"アカウントの作成に失敗しました","Failed to create API key":"APIキーの作成に失敗しました","Failed to refresh credentials. Please try again later":"認証情報の更新に失敗しました。後でもう一度お試しください","Failed to create channel":"チャネルの作成に失敗しました","Failed to create deployment":"デプロイの作成に失敗しました","Failed to create provider":"プロバイダーの作成に失敗しました","Failed to create redemption code":"引き換えコードの作成に失敗しました","Failed to create user":"ユーザーの作成に失敗しました","Failed to delete {{count}} model(s)":"{{count}} 個のモデルの削除に失敗しました","Failed to delete {{count}} redemption codes":"{{count}} 件の引き換えコードを削除できませんでした","Failed to delete account":"アカウントの削除に失敗しました","Failed to reset usage. Please try again later":"使用量のリセットに失敗しました。後でもう一度お試しください","Failed to delete API key":"APIキーの削除に失敗しました","Failed to delete API keys":"APIキーの削除に失敗しました","Failed to delete channel":"チャネルの削除に失敗しました","Failed to delete disabled channels":"無効化されたチャネルの削除に失敗しました","Failed to save backup codes":"バックアップコードの保存に失敗しました","Failed to save configuration":"設定の保存に失敗しました","Failed to delete failed models":"失敗したモデルの削除に失敗しました","Failed to delete group":"グループの削除に失敗しました","Failed to save the demo site mode setting: {{error}}":"デモサイトモードの設定を保存できませんでした: {{error}}","Failed to save the self-use mode setting: {{error}}":"自己利用モードの設定を保存できませんでした: {{error}}","Failed to delete invalid redemption codes":"無効な引き換えコードの削除に失敗しました","Failed to delete model":"モデルの削除に失敗しました","Failed to delete provider":"プロバイダーの削除に失敗しました","Failed to search tokens":"トークンの検索に失敗しました","Failed to search top-up records":"チャージ履歴の検索に失敗しました","Failed to delete redemption code":"引き換えコードの削除に失敗しました","Failed to delete user":"ユーザーの削除に失敗しました","Failed to delete vendor":"ベンダーの削除に失敗しました","Failed to disable {{count}} model(s)":"{{count}} 個のモデルの無効化に失敗しました","Failed to disable 2FA":"2FAの無効化に失敗しました","Failed to set the audio completion ratio: {{error}}":"音声補完倍率の設定に失敗しました:{{error}}","Failed to set the audio ratio: {{error}}":"音声倍率の設定に失敗しました:{{error}}","Failed to set the cache creation ratio: {{error}}":"キャッシュ作成倍率の設定に失敗しました:{{error}}","Failed to set the image ratio: {{error}}":"画像倍率の設定に失敗しました:{{error}}","Failed to disable channels":"チャネルの無効化に失敗しました","Failed to disable model":"モデルの無効化に失敗しました","Failed to disable tag channels":"タグチャネルの無効化に失敗しました","Failed to discover OIDC endpoints":"OIDCエンドポイントの検出に失敗しました","Failed to enable {{count}} model(s)":"{{count}} 個のモデルの有効化に失敗しました","Failed to enable 2FA":"2FA の有効化に失敗しました","Failed to enable channels":"チャネルの有効化に失敗しました","Failed to enable model":"モデルの有効化に失敗しました","Failed to enable tag channels":"タグチャネルの有効化に失敗しました","Failed to fetch channel key":"チャネルキーの取得に失敗しました","Failed to start payment":"支払いを開始できませんでした","Failed to fetch checkin status":"チェックインステータスの取得に失敗しました","Failed to fetch deployment details":"デプロイメント詳細の取得に失敗しました","Failed to fetch models":"モデルの取得に失敗しました","Failed to fetch OIDC configuration. Please check the URL and network status":"OIDC構成の取得に失敗しました。URLとネットワーク状態を確認してください","Failed to fetch reset credit details":"リセット回数の詳細取得に失敗しました","Failed to fetch upstream prices":"上流価格の取得に失敗しました","Failed to fetch upstream ratios":"アップストリーム比率の取得に失敗しました","Failed to fetch usage":"利用状況の取得に失敗しました","Failed to fetch user information":"ユーザー情報の取得に失敗しました","Failed to fix abilities":"チャネル整合性の修復に失敗しました","Failed to generate token":"トークンの生成に失敗しました","Failed to hide model from model square":"モデル広場で非表示にできませんでした","Failed to initialize OAuth":"OAuthの初期化に失敗しました","Failed to initialize system":"システムの初期化に失敗しました","Failed to load":"読み込みに失敗しました","Failed to load access tokens":"アクセストークンを読み込めませんでした","Failed to load API keys":"APIキーの読み込みに失敗しました","Failed to load artifacts":"成果物の読み込みに失敗しました","Failed to load audit records":"監査記録の読み込みに失敗しました","Failed to load billing history":"請求履歴の読み込みに失敗しました","Failed to load channel":"チャネルの読み込みに失敗しました","Failed to load enabled models":"有効なモデルの取得に失敗しました","Failed to load home page content":"ホームページの内容の読み込みに失敗しました","Failed to load image":"画像の読み込みに失敗しました","Failed to load key status":"キー状態の読み込みに失敗しました","Failed to load login sessions":"ログインセッションの読み込みに失敗しました","Failed to load logs":"ログの読み込みに失敗しました","Failed to load model":"モデルの読み込みに失敗しました","Failed to load model pricing":"モデル料金の読み込みに失敗しました","Failed to load models":"モデルを読み込めませんでした","Failed to load Passkey status":"Passkeyのステータスの読み込みに失敗しました","Failed to load playground groups":"プレイグラウンドのグループ読み込みに失敗しました","Failed to load playground models":"プレイグラウンドのモデル読み込みに失敗しました","FAQ #{{index}} answer cannot exceed 1000 characters":"FAQ #{{index}} の回答は 1000 文字以内にしてください","FAQ #{{index}} is missing the answer field":"FAQ #{{index}} に回答フィールドがありません","FAQ #{{index}} is missing the question field":"FAQ #{{index}} に質問フィールドがありません","FAQ #{{index}} question cannot exceed 200 characters":"FAQ #{{index}} の質問は 200 文字以内にしてください","Failed to load plugins":"プラグインの読み込みに失敗しました","FAQ cannot exceed 100 entries":"FAQ は 100 件までです","Failed to load profile":"プロファイルの読み込みに失敗しました","Failed to load redemption codes":"引き換えコードの読み込みに失敗しました","Failed to load settings":"設定を読み込めませんでした","Failed to load setup data":"セットアップデータの読み込みに失敗しました","Failed to load setup status":"セットアップ状態の読み込みに失敗しました","Failed to load SGLang status":"SGLang の状態を読み込めませんでした","Failed to load tag data":"タグデータの読み込みに失敗しました","Failed to load users":"ユーザーの読み込みに失敗しました","Failed to load vendor":"プロバイダーを読み込めませんでした","Failed to load vendors":"ベンダーの読み込みに失敗しました","Failed to load vLLM status":"vLLM の状態を読み込めませんでした","Failed to parse group items":"グループアイテムの解析に失敗しました","Failed to parse JSON file: {{name}}":"JSONファイルの解析に失敗しました: __ PH_0 __","Failed to prepare pricing conversion":"料金の変換を準備できませんでした","Fetched successfully":"取得しました","Failed to preview metadata":"メタデータのプレビューに失敗しました","Failed to preview vendor changes":"プロバイダー変更をプレビューできませんでした","Failed to query balance":"残高の取得に失敗しました","Failed to refresh cache stats":"キャッシュ統計の更新に失敗","Failed to refresh credential":"認証情報の更新に失敗しました","Failed to regenerate backup codes":"バックアップコードの再生成に失敗しました","Failed to register Passkey":"Passkeyの登録に失敗しました","Failed to remove Passkey":"パスキーの削除に失敗しました","Failed to repair channel consistency":"チャネル整合性の修復に失敗しました","Failed to reset 2FA":"2FAのリセットに失敗しました","Failed to reset model ratios":"モデル比率のリセットに失敗しました","Failed to reset Passkey":"パスキーのリセットに失敗しました","Failed to reset usage":"使用量のリセットに失敗しました","Failed to revoke token":"トークンの取り消しに失敗しました","Failed to save":"保存に失敗","Failed to save announcements":"お知らせの保存に失敗しました","Failed to save API info":"API情報の保存に失敗しました","Failed to save FAQ":"FAQの保存に失敗しました","Failed to save model pricing":"モデル料金の保存に失敗しました","Failed to save Uptime Kuma groups":"Uptime Kumaグループの保存に失敗しました","Failed to search API keys":"APIキーの検索に失敗しました","Failed to search redemption codes":"引き換えコードの検索に失敗しました","Failed to search users":"ユーザーの検索に失敗しました","Failed to send reset email":"リセットメールの送信に失敗しました","Failed to send verification code":"認証コードの送信に失敗しました","Failed to send verification email":"確認メールの送信に失敗しました","Failed to set tag":"タグの設定に失敗しました","Failed to setup 2FA":"2FA の設定に失敗しました","Failed to show model in model square":"モデル広場に表示できませんでした","Failed to sign out other sessions":"他のセッションのサインアウトに失敗しました","Failed to sign out session":"セッションのサインアウトに失敗しました","Failed to start {{provider}} login":"{{provider}} ログインの開始に失敗しました","Failed to start Discord login":"Discordログインの開始に失敗しました","Failed to start GitHub login":"GitHubログインの開始に失敗しました","Failed to start LinuxDO login":"LinuxDOログインの開始に失敗しました","Failed to start OIDC login":"OIDCログインの開始に失敗しました","Failed to start Passkey login":"Passkeyログインの開始に失敗しました","Failed to start Passkey registration":"パスキー登録の開始に失敗しました","Failed to start Telegram binding":"Telegram 連携の開始に失敗しました","Failed to start testing all channels":"すべてのチャネルのテストを開始できませんでした","Failed to start verification":"認証の開始に失敗しました","Failed to sync prices":"価格の同期に失敗しました","Failed to sync ratios":"比率の同期に失敗しました","Failed to test all channels":"すべてのチャネルのテストに失敗しました","Failed to test channel":"チャネルのテストに失敗しました","Failed to update all balances":"すべての残高を更新できませんでした","Failed to update API key":"APIキーの更新に失敗しました","Failed to update API key status":"APIキー状態の更新に失敗しました","Failed to update balance":"残高を更新できませんでした","Failed to update channel":"チャネルの更新に失敗しました","Failed to update models":"モデルの更新に失敗しました","Failed to update profile":"プロフィールを更新できませんでした","Failed to update provider":"プロバイダーの更新に失敗しました","Failed to update redemption code":"引き換えコードの更新に失敗しました","Failed to update redemption code status":"引き換えコードのステータスの更新に失敗しました","Failed to update setting":"設定の更新に失敗しました","Failed to update settings":"設定を更新できませんでした","Failed to update tag":"タグの更新に失敗しました","Failed to update user":"ユーザーの更新に失敗しました","Failure keywords":"失敗キーワード","Failure reason":"失敗理由","Fair":"公平","Fallback":"フォールバック","Fallback base URL":"フォールバック Base URL","Fallback for remaining models":"残りのモデル用フォールバック","Fallback must be last":"フォールバックは最後","Fallback route":"フォールバックルート","Fallback tier":"フォールバック段階","FAQ":"FAQ","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ が追加されました。「設定を保存」をクリックして適用してください。","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ が削除されました。「設定を保存」をクリックして適用してください。","FAQ saved successfully":"FAQ が正常に保存されました","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ が更新されました。「設定を保存」をクリックして適用してください。","FastGPT":"FastGPT","Feature in development":"開発中の機能です","Fee":"手数料","Fee Amount":"料金額","Fetch":"取得","Fetch available models for:":"利用可能なモデルを取得:","Fetch available models from upstream":"アップストリームから利用可能なモデルを取得する","Fetch from Upstream":"Upstreamからフェッチ","Fetch mode":"取得モード","Fetch Models":"モデルを取得","Fetched {{count}} model(s) from upstream":"上流から {{count}} 個のモデルを取得しました","Fetched {{count}} models":"{{count}} 個のモデルを取得しました","Fetched in your browser and placed in the source field below for review. GitHub and gist page URLs are rewritten to their raw URL automatically.":"ブラウザで取得し、確認用に下のソース欄へ挿入します。GitHub と gist のページ URL は自動的に raw URL へ書き換えられます。","Fetching models...":"モデルを取得中…","Fetching plugin source...":"プラグインのソースを取得中…","Fetching prefill groups...":"プリフィルグループをフェッチ中...","Fetching upstream prices...":"上流価格を取得中...","Fetching upstream ratios...":"アップストリーム比率をフェッチ中...","Fetching...":"取得中…","field":"フィールド","Field":"項目","Field change details were not recorded":"フィールドの変更詳細は記録されていません","Field Mapping":"フィールドマッピング","Field passthrough controls":"フィールドパススルーコントロール","Field Path":"フィールドパス","Fields":"項目","File":"ファイル","File could not be verified":"ファイルを検証できませんでした","File integrity verified":"ファイルの整合性を確認済み","File Search":"ファイル検索","File verification":"ファイルの検証","Files to Retain":"保持ファイル数","Fill a CLI template or add a blank rule.":"CLI テンプレートを使うか、空のルールを追加してください。","Fill All Models":"すべてのモデルを埋める","Fill Codex CLI / Claude CLI Templates":"Codex CLI / Claude CLI テンプレートを入力","Fill entire column":"列全体に入力","Fill example (all channels)":"例を入力(全チャネル)","Fill example (specific channels)":"例を入力(特定チャネル)","Fill in":"入力","Fill in both Merchant ID and API Private Key before creating.":"作成前に Merchant ID と API 秘密鍵の両方を入力してください。","Fill in the credentials above to begin.":"開始するには上記の認証情報を入力してください。","Fill in the following info to create a new subscription plan":"以下の情報を入力して新しいサブスクリプションプランを作成","Fill in this website":"現在のサイトを入力","Fill Related Models":"関連モデルを入力","Fill Template":"テンプレートを入力","Fill template: level and active":"テンプレートを入力:レベルと有効状態","Fill template: level message":"テンプレートを入力:レベルメッセージ","Fill template: organization message":"テンプレートを入力:組織メッセージ","Fill template: organization or role":"テンプレートを入力:組織またはロール","Fill Templates":"テンプレートを入力","Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.":"クライアントリクエスト本文の完全な model 値を入力します。例: gpt-4o または gemini-2.5-flash。複数のモデルはカンマで区切ります。","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"OpenAI形式を利用するGemini/VertexチャネルにのみthoughtSignatureを付与します","Filled {{count}} model(s)":"{{count}} 個のモデルを補完しました","Filled {{count}} related model(s)":"{{count}} 個の関連モデルを補完しました","Filter":"フィルター","Filter by API key...":"APIキーでフィルター...","Filter by channel ID":"チャネルIDでフィルター","Filter by group":"グループでフィルター","Filter by MjProxy task ID":"MjProxyタスクIDでフィルター","Filter by model name":"モデル名で絞り込み","Filter by model name...":"モデル名でフィルター...","Filter by model...":"モデルでフィルタリング...","Filter by name or ID...":"名前またはIDでフィルター...","Filter by name, ID, or key...":"名前、ID、またはキーでフィルター...","Filter by name...":"名前でフィルター...","Filter by node":"ノードでフィルター","Filter by price field":"価格フィールドでフィルター","Filter by ratio type":"倍率タイプで絞り込み","Filter by request ID":"リクエストIDで絞り込み","Filter by task ID":"タスクIDでフィルター","Filter by token name":"トークン名でフィルター","Filter by username":"ユーザー名でフィルター","Filter by username, name or email...":"ユーザー名、名前またはメールアドレスでフィルター...","Filter Dashboard Models":"ダッシュボードモデルをフィルタリング","Filter mappings":"マッピングを絞り込む","Filter models by provider, group, type, endpoint, and tags.":"プロバイダー、グループ、タイプ、エンドポイント、タグでモデルを絞り込みます。","Filter models by type, endpoint, vendor, group and tags":"タイプ、エンドポイント、ベンダー、グループ、タグでモデルをフィルタリング","Filter models...":"モデルをフィルタリング...","Filter plugins...":"プラグインを絞り込み...","Filter the model analytics view by time range and user.":"時間範囲とユーザーでモデル分析ビューを絞り込みます。","Filter the traffic flow view by time range and user.":"時間範囲とユーザーでトラフィックフロー表示を絞り込みます。","Filter...":"フィルター…","Filters":"フィルター","Filters active":"フィルター有効","Final Consumed":"最終消費","Final cost = base × multiplier when conditions match":"条件に一致する場合 最終費用 = 基準 × 倍率","Final price multiplier (0.95 = 5% discount":"最終価格乗数 (0.95 = 5%割引","Finance":"金融","Find":"検索文字","Find the billing group.":"課金グループを特定する。","Find the ratio.":"倍率を特定する。","Finish reordering":"並べ替えを完了","Finish Time":"完了時刻","Finished requests":"終了したリクエスト","First API request":"最初の API リクエスト","First token":"先頭トークン","First/Last Frame to Video":"先頭/末尾フレームから動画","Fix Abilities":"チャネル整合性を修復","Fix order":"順序を修正","Fix the Request Header Override JSON first":"先にリクエストヘッダー上書きの JSON を修正してください","Fuzzy search keywords must be at least 2 characters long":"あいまい検索のキーワードは 2 文字以上にしてください","Fixed":"修正","Fixed abilities: {{success}} succeeded, {{fails}} failed":"チャネル整合性を修復しました:成功 {{success}} 件、失敗 {{fails}} 件","Fixed channel constraint":"固定チャネル制約","Fixed fee per request":"リクエストごとの固定料金","Fixed price":"固定価格","Fixed price (USD)":"固定価格 (USD)","Fixed request price":"固定リクエスト価格","Flexible integration":"柔軟な接続","Floating":"フローティング","Flow":"フロー","Flow Filters":"フローフィルター","Flow width metric":"線幅の指標","FluentRead extension not detected. Please ensure it is installed and active.":"FluentRead 拡張機能が検出されませんでした。インストールされていて有効になっていることを確認してください。","Flush interval (minutes)":"書き込み間隔(分)","Follow the guided steps to prepare your workspace before the first login.":"初回ログイン前に、ガイド付きの手順に従ってワークスペースを準備してください。","Follow user group":"ユーザーに従う","Font":"フォント","Footer":"フッター","Footer text displayed at the bottom of pages":"ページ下部に表示されるフッターテキスト","footer.columns.about.links.aboutProject":"プロジェクトについて","footer.columns.about.links.contact":"お問い合わせ","footer.columns.about.links.features":"機能","footer.columns.about.title":"私たちについて","footer.columns.docs.links.apiDocs":"APIドキュメント","footer.columns.docs.links.installation":"インストールガイド","footer.columns.docs.links.quickStart":"クイックスタート","footer.columns.docs.title":"ドキュメント","footer.columns.related.links.midjourney":"MjProxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"1つのAPI","footer.columns.related.title":"関連プロジェクト","footer.defaultCopyright":"すべての権利を留保します。","footer.newapi.projectAttributionSuffix":"すべての権利を留保します。プロジェクトコントリビューターにより設計・開発されています。","For advanced custom channels this applies only to /v1/responses routes without protocol conversion.":"高度なカスタムチャネルでは、プロトコル変換を行わない /v1/responses ルートにのみ適用されます。","GitHub ID is empty!":"GitHub ID が空です!","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"2025 年 5 月 10 日以降に追加されたチャネルの場合、デプロイ時にモデル名から「.」を削除する必要はありません","For private deployments, format: https://fastgpt.run/api/openapi":"プライベートデプロイメントの場合、形式: https://fastgpt.run/api/openapi","For this channel, map the model name in client requests to the model name sent upstream.":"このチャネルでは、クライアントのリクエストに含まれるモデル名を、上流に送信するモデル名に置き換えます。","For this website, you can enter: {{domain}}":"このサイトでは次を入力できます:{{domain}}","Force a syntactically valid JSON response":"構文的に有効な JSON 応答を強制","Force AUTH LOGIN":"AUTH LOGINを強制","Force Format":"強制フォーマット","Force format response to OpenAI standard (OpenAI channel only)":"応答をOpenAI標準に強制フォーマット (OpenAIチャネルのみ)","Force JSON object or schema-conforming output":"JSON オブジェクトまたはスキーマ準拠の出力を強制します","Force operation":"強制実行","Force SMTP authentication using AUTH LOGIN method":"AUTH LOGIN方式を使用してSMTP認証を強制する","Force-disabled two-factor authentication for the user":"ユーザーの二段階認証を強制的に無効化しました","Forest Whisper":"フォレストウィスパー","Forgot password":"パスワードを忘れた場合","Forgot password?":"パスワードをお忘れですか?","Form reset to saved values":"フォームが保存された値にリセットされました","Format":"形式","Format conversion is unavailable; the client must use a format the upstream supports":"形式変換は使用できません。クライアントは上流が対応する形式を直接使う必要があります","Format JSON":"JSONをフォーマット","Format:":"形式:","Format: Access Key ID|Secret Access Key":"形式: Access Key ID|Secret Access Key","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"形式: AccessKey|SecretKey (upstream が New API の場合、ApiKey のみ)","Format: Ak|Sk|Region":"形式: Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"形式: APIKey-AppId、例: fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"形式: APIKey|SecretKey","Format: APPID|APISecret|APIKey":"形式: APPID|APISecret|APIKey","Format: TokenHub API Key, or legacy AppId|SecretId|SecretKey":"形式: TokenHub API Key、または旧形式の AppId|SecretId|SecretKey","Got it":"わかりました","Gotify server URL cannot be empty":"Gotify サーバーの URL を入力してください","Gotify token cannot be empty":"Gotify トークンを入力してください","Forward requests directly to upstream providers without any post-processing.":"ポストプロセスなしで、リクエストをアップストリームプロバイダーに直接転送します。","Forwarding Routes":"転送ルート","Frames per second":"フレームレート","Free":"空き","Free: {{free}} / Total: {{total}}":"空き容量: {{free}} / 合計: {{total}}","Frequency Penalty":"頻度ペナルティ","Friendly name to identify this channel":"このチャネルを識別するための表示名","From Address":"差出人アドレス","From IO.NET deployment":"IO.NET展開から","From marketplace index":"マーケットプレイスの索引より","From model redirect, not yet added to models list":"モデルリダイレクトから、まだモデルリストに追加されていません","Full API Key":"完全なAPIキー","Full Base URL (supports":"完全なベースURL (サポート","Group #{{index}} category name cannot exceed 50 characters":"グループ #{{index}} のカテゴリ名は 50 文字以内にしてください","Group #{{index}} category name duplicates another group":"グループ #{{index}} のカテゴリ名が他のグループと重複しています","Group #{{index}} contains disallowed content":"グループ #{{index}} に許可されていない内容が含まれています","Group #{{index}} description cannot exceed 200 characters":"グループ #{{index}} の説明は 200 文字以内にしてください","Group #{{index}} has a URL that cannot be parsed: {{error}}":"グループ #{{index}} の URL を解析できません:{{error}}","Group #{{index}} has an invalid URL format":"グループ #{{index}} の URL 形式が正しくありません","Group #{{index}} is missing the category name field":"グループ #{{index}} にカテゴリ名フィールドがありません","Group #{{index}} is missing the slug field":"グループ #{{index}} に Slug フィールドがありません","Group #{{index}} is missing the URL field":"グループ #{{index}} に URL フィールドがありません","Group #{{index}} slug can only contain letters, numbers, underscores and hyphens":"グループ #{{index}} の Slug には英字、数字、アンダースコア、ハイフンのみ使用できます","Group #{{index}} slug cannot exceed 100 characters":"グループ #{{index}} の Slug は 100 文字以内にしてください","Group #{{index}} URL cannot exceed 500 characters":"グループ #{{index}} の URL は 500 文字以内にしてください","Full Code":"完全なコード","Full input length":"完全な入力長","Full input length override":"入力コンテキストの全長を指定","Full JSON":"完全な JSON","Full layout":"フルレイアウト","Full source":"ソースコード全体","Full upstream catalog":"上流の全カタログ","Full width":"全幅","Function calling":"関数呼び出し","Functions":"関数","Gateways":"ゲートウェイ","Group name already exists":"グループ名は既に存在します","Group name and type cannot be empty":"グループ名と種類は空にできません","GC Count":"GC 回数","GC executed":"GC 実行完了","GC execution failed":"GC 実行失敗","Gemini":"Gemini","Gemini and OpenAI audio prices differ for this model. Use separate billing model names to convert them.":"このモデルはGeminiとOpenAIの音声料金が異なります。別々の課金モデル名を使用して変換してください。","Gemini Generate Content to OpenAI Chat":"Gemini Generate Content から OpenAI Chat","Gemini Generate Content to OpenAI Responses":"Gemini Generate Content から OpenAI Responses","Gemini Image 4K":"Gemini Image 4K","Gemini only":"Gemini のみ","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"アダプターが無効になっていても、Geminiは思考モードを自動検出します。価格設定と予算編成をより細かく制御する必要がある場合にのみ、これを有効にしてください。","General":"一般","General Settings":"一般設定","Generate":"生成","Generate Lyrics":"歌詞を生成","Generate Midjourney images through MjProxy":"MjProxy 経由で Midjourney の画像生成に接続","Generate Midjourney images through MjProxyPlus":"MjProxyPlus 経由で Midjourney の画像生成に接続","Generate Music":"音楽を生成","Generate music and lyrics through SunoAPI":"SunoAPI 経由で音楽と歌詞の生成に接続","Generate new backup codes for account recovery":"アカウント復旧用の新しいバックアップコードを生成","Generate New Codes":"新しいコードを生成","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"トークンページから API キーを発行できます。モデル、グループ、IP、レート制限ごとに細かく権限を設定可能です。","Generated image":"生成された画像","Generating new codes will invalidate all existing backup codes.":"新しいコードを生成すると、既存のすべてのバックアップコードが無効になります。","Generating...":"生成中...","Generation quality preset":"生成品質プリセット","Generation was interrupted":"生成が中断されました","Generic cache":"汎用キャッシュ","Get advice":"アドバイスを得る","Get one here":"こちらから取得","Get started":"はじめる","Get Started":"開始する","GitHub":"GitHub","GitHub rate limit reached. Try again later.":"GitHub のリクエスト上限に達しました。しばらくしてから再試行してください。","Give the group a recognizable name and optional description.":"グループに認識しやすい名前とオプションの説明を付けます。","Give this group a recognizable name.":"このグループに認識しやすい名前を付けます。","Header override must be valid JSON format":"ヘッダーオーバーライドは有効な JSON 形式である必要があります","Global and channel settings":"全体設定とチャネル設定","Global configuration and administrative tools.":"グローバル設定と管理ツール。","Global Coverage":"グローバルカバレッジ","Global default":"全体の既定値","Global default: {{mode}}":"全体のデフォルト:{{mode}}","Global Model Configuration":"グローバルモデル設定","Global throughput":"全体スループット","Go Back":"戻る","Go back and edit":"戻って編集","Go to Dashboard":"ダッシュボードへ移動","Go to first page":"最初のページへ移動","Go to GitHub":"GitHub で見る","Go to home":"ホームへ戻る","Go to io.net API Keys":"io.net API キーへ移動","Go to last page":"最後のページへ移動","Go to next page":"次のページへ移動","Go to page {{page}}":"{{page}}ページ目へ移動","Go to previous page":"前のページへ移動","Go to settings":"設定へ","Go to Settings":"設定へ移動","Good":"良好","Gotify Application Token":"Gotify アプリケーショントークン","Gotify Documentation":"Gotify ドキュメント","Gotify Server URL":"Gotify サーバー URL","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4、claude-3-opus など","GPU count":"GPU 数","Granted at":"付与日時","Greater than":"より大きい","Greater Than":"より大きい","Greater than or equal":"以上","Greater Than or Equal":"以上","Grok":"Grok","Grok Settings":"Grok 設定","Group":"グループ","Group {{path}}":"グループ {{path}}","Group & Quota":"グループとクォータ","Group added. Click \\"Save Settings\\" to apply.":"グループが追加されました。「Save Settings」をクリックして適用してください。","Group channels by tag for batch operations":"バッチ操作のためにタグでチャネルをグループ化","Group config overrides global limits, shares the same period":"グループ設定はグローバル制限を上書きし、同じ期間を共有します","Group deleted. Click \\"Save Settings\\" to apply.":"グループが削除されました。「Save Settings」をクリックして適用してください。","Group description":"グループの説明","Group details":"グループの詳細","Group identifier":"グループ識別子","Group is required":"グループは必須です","Group name":"グループ名","Group Name":"グループ名","Group name cannot be changed when editing.":"編集時はグループ名を変更できません。","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"この式は標準の段階制料金式ではないため、グループ別価格を展開できません。","Group Pricing":"グループ料金","Group pricing usage guide":"グループ料金の使用ガイド","group ratio":"グループ倍率","Group Ratio":"グループ倍率","Group ratios":"グループ比率","Group settings":"グループ設定","Group updated. Click \\"Save Settings\\" to apply.":"グループが更新されました。「Save Settings」をクリックして適用してください。","Group visibility":"グループの表示設定","Group-based rate limits":"グループベースのレート制限","Group:":"グループ:","Group: {{ratio}}x":"グループ:{{ratio}}x","Grouped monitor status from Uptime Kuma":"Uptime Kuma からのグループ別監視状態","Groups":"グループ","Groups *":"グループ *","Groups that users can select when creating API keys.":"ユーザーが API キー作成時に選択できるグループ。","Growth":"成長","Guardrails":"ガードレール","Guest":"ゲスト","h":"h","Haiku Model":"Haiku モデル","Hang tight while we finish connecting your account.":"アカウントの接続を完了するまでお待ちください。","Hang tight while we securely link this account to your profile.":"このアカウントをプロファイルに安全にリンクするまでお待ちください。","Hardware":"ハードウェア","Hardware type":"ハードウェアタイプ","Has been disabled":"無効化されました","Has been enabled":"有効化されました","Has been invalidated":"無効化されました","Have a Code?":"コードをお持ちですか?","Header":"ヘッダー","header instead.":" ヘッダーも利用できます。","Header Name":"ヘッダー名","Header navigation":"ヘッダーナビゲーション","Header Override":"ヘッダー上書き","Header Passthrough (X-Request-Id)":"ヘッダーパススルー(X-Request-Id)","Header Value (supports string or JSON mapping)":"ヘッダー値(文字列またはJSONマッピング対応)","header. Anthropic-formatted endpoints accept the":" ヘッダーが必要です。Anthropic 形式のエンドポイントでは","Health":"ヘルスケア","Health check timeout threshold (seconds)":"ヘルスチェックの時間しきい値(秒)","Healthy":"正常","Hidden":"非表示","Hidden — verify to reveal":"非表示 — 確認して表示","Hidden {{count}} models from model square":"モデル広場で {{count}} 件のモデルを非表示にしました","Hidden from {{group}}":"{{group}} から非表示","Hidden from catalog":"カタログで非表示","Hidden from the model square by metadata policy.":"メタデータ設定によりモデル一覧で非表示になっています。","Hide":"非表示にする","Hide API key":"APIキーを非表示","Hide from catalog":"カタログから非表示","Hide from model square":"モデル広場で非表示","Hide redirect panel":"リダイレクトパネルを隠す","ID is empty":"ID が空です","ID is empty!":"ID が空です!","Hide selected models from model square":"選択したモデルをモデル広場で非表示","Hide sensitive data":"機密データを非表示","Hide setup guide":"セットアップガイドを非表示","High Performance":"高パフォーマンス","High-risk operation confirmation":"高リスク操作の確認","High-risk status code retry confirmation text":"多重課金とクラッシュのリスクを理解し、有効化を確認します","High-risk status code retry input mismatch":"入力内容が指定されたテキストと一致しません。","High-risk status code retry input placeholder":"上のテキストを正確に入力してください","High-risk status code retry risk check 1":"上記の警告をすべて読み、504 および 524 ステータスコードを強制的にリトライすることで生じ得る破壊的な影響を十分に理解しました。","High-risk status code retry risk check 2":"上流プロバイダーと連絡を取り、現在のタイムアウトは上流サービスのボトルネックによるもので、現時点では上流側で解決できないことを確認したため、妥協策として強制リトライを選択します。","High-risk status code retry risk check 3":"二重または多重課金のリスクをすべて自発的に受け入れ、このリトライによる請求異常について本プロジェクトのリポジトリに Issue や苦情を提出しません。","High-risk status code retry risk check 4":"深刻なクライアントタイムアウトやサービス停止を含むシステム安定性のリスクを自発的に受け入れ、その結果生じるリクエスト滞留やサービス停止の責任を負います。","High-risk status code retry risk disclaimer":"### ⚠️ 高リスク操作:504/524 ステータスコードのリトライに関するリスク通知と免責事項\\n\\n本プロジェクトは既定で、`400`(不正なリクエスト)、`504`(ゲートウェイタイムアウト)、`524`(タイムアウト発生)をリトライしません。504 と 524 は通常、**リクエストが上流 AI サービスに正常に到達して上流側で処理が始まっているものの、上流処理に時間がかかりすぎて接続が切断された**ことを意味します。多くの場合、これは上流サービス側のボトルネックです。\\n\\nこれらのタイムアウトコードでリダイレクトまたはリトライを有効にすることは、**極めて高リスクな操作**です。有効にする前に、次の重大な影響を必ず読み、理解してください。\\n\\n#### 1. 主なリスク(必ずお読みください)\\n\\n1. 💸 二重・多重課金:多くの上流 AI プロバイダーは、処理開始後にネットワークタイムアウト(504/524)で中断されたリクエストにも**通常どおり課金します**。リトライでは新しい上流リクエストが送信されるため、**二重または多重課金**になる可能性があります。\\n2. ⏳ 深刻なクライアントタイムアウト:すでにタイムアウトしたリクエストにリトライを重ねると、総待ち時間が何倍にもなり、最終クライアントで深刻または許容できないタイムアウトが発生する可能性があります。\\n3. 💥 リクエスト滞留とサービス停止:強制リトライはスレッドと接続を長時間占有します。高負荷時には深刻な**リクエスト滞留**、リソース枯渇、連鎖障害を招き、プロキシサービスが停止する可能性があります。\\n\\n#### 2. リスクの確認\\n\\nそれでもこの機能を有効にする場合は、以下のすべてを確認したものとみなされます。","Higher priority channels are selected first":"優先度の高いチャネルが先に選択されます","Historical capitalization":"以前の大文字・小文字","Historical tokens":"過去のトークン","Historical Usage":"履歴使用状況","History of MjProxy-style image tasks.":"MjProxyスタイルの画像タスクの履歴。","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"ヒット判定:usage に cached tokens が存在すればヒットとみなします。","Image count {{count}}":"生成枚数 {{count}}","Hit Rate":"ヒット率","Hit tier":"一致したティア","Home":"ホーム","Home Page Content":"ホームコンテンツ","Homepage URL":"ホームページ URL","Hook":"フック","Hostname or IP of your SMTP provider":"SMTP プロバイダーのホスト名または IP","Hour":"時間","Hour of day":"時刻(時)","Hourly token usage by model across the last 24 hours":"過去 24 時間にわたるモデル別の時間ごとのトークン使用量","Hourly token usage by model over the past 24 hours":"過去24時間のモデル別時間単位のトークン使用量","hours":"時間","How a call is priced":"呼び出しの計算方法","How a session is identified and which channel it keeps.":"セッションの識別方法と使用するチャネルを定義します。","How client credentials are sent to the token endpoint":"クライアント認証情報がトークンエンドポイントに送信される方法","How frequently the system checks auto-disabled channels for recovery":"自動無効化されたチャネルの復旧を確認する頻度","How frequently the system tests all channels":"システムがすべてのチャネルをテストする頻度","How It Works":"仕組み","How model mapping works":"モデルマッピングの仕組み","How much to charge for each US dollar of balance (Epay)":"残高の 1 米ドルあたりに請求する金額 (Epay)","How this model name should match requests":"このモデル名がリクエストとどのように一致すべきか","How to deliver the resulting image":"画像結果の返却方法","Inactive disk cache cleared":"使用されていないディスクキャッシュをクリアしました","How to get an io.net API Key":"io.net API キーの取得方法","How to reset my quota?":"クォータをリセットするには?","How to select keys: random or sequential polling":"キーの選択方法: ランダムまたは順次ポーリング","How to set up Passkey domains":"パスキーのドメイン設定方法","How will you use the platform?":"プラットフォームをどのように使用しますか?","HTTP Protocol":"HTTP プロトコル","HTTP protocol must be Auto or HTTP/1.1":"HTTP プロトコルは自動または HTTP/1.1 である必要があります","HTTP/1.1":"HTTP/1.1","HTTP/2 Connection Shards":"HTTP/2 接続シャード","HTTP/2 connection shards are unavailable when HTTP/1.1 is selected.":"HTTP/1.1 選択時は HTTP/2 接続シャードを使用できません。","HTTP/2 connection shards must be 1 when HTTP/1.1 is selected":"HTTP/1.1 選択時、HTTP/2 接続シャードは 1 である必要があります","HTTP/2 connection shards must be between 1 and 8":"HTTP/2 接続シャードは 1 から 8 の間である必要があります","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"パスキーのプロンプト中にユーザーに表示される、人間が読める名前。","I confirm enabling high-risk retry":"高リスクリトライの有効化を確認します","I have read and agree to the":"私は以下を読み、同意します","I have read and understood the above compliance reminder":"上記のコンプライアンス注意事項を読み、理解しました","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"上記のコンプライアンス注意事項を読み理解し、関連する法的リスクを認識したうえで、デプロイ、運用、課金行為に起因する法的責任を負うことを確認します。","I understand that disabling 2FA removes its authenticator and backup codes.":"2FAを無効にすると、認証アプリによる認証とバックアップコードが削除されることを理解しました。","I understand that disabling 2FA will remove all protection and backup codes":"2FA を無効にすると、すべての保護とバックアップコードが削除されることを理解しています","Icon":"アイコン","Icon file must be 100 KB or smaller":"アイコンファイルは100KB以下である必要があります","Icon identifier (e.g. github, gitlab)":"アイコン識別子 (例: github, gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"アップストリームエラーにこれらのキーワードのいずれかが含まれている場合 (大文字と小文字を区別しない)、チャネルは自動的に無効になります。","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"認証が成功すると、生成されたJSONがキー欄に挿入されます。保存するにはチャネルを保存してください。","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"上流の One API または New API リレープロジェクトに接続する場合、知っている場合を除き OpenAI タイプを使用してください","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"デフォルト auto グループを有効にすると、新規トークンは空グループではなく auto で開始します。","If left blank, the system may use a different website address and Passkey sign-in can fail here.":"空欄のままだと別のサイトのアドレスが使われ、このサイトで Passkey によるログインが失敗する場合があります。","If no preceding rule matched: {{condition}}":"先行するルールに一致せず、{{condition}}","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"アフィニティチャネルが失敗し、別のチャネルでリトライが成功した場合、アフィニティを成功したチャネルに更新します。","If this keeps happening, please report it on GitHub Issues.":"この問題が続く場合は、GitHub Issues で報告してください。","If users already have Passkeys, changing this domain may require them to sign in another way and set up their Passkeys again.":"すでに Passkey を登録しているユーザーは、ドメインの変更後、別の方法でログインして再登録が必要になる場合があります。","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"中国本土で一般向けに生成 AI サービスを提供する場合、届出、セキュリティ評価、コンテンツ安全、苦情対応、生成コンテンツのラベル表示、ログ保存、個人情報保護などの法的義務を履行します。","If your Passkey belongs to another website, start sign-in there:":"パスキーが別のサイトに属する場合は、そのサイトでログインしてください:","Ignore":"無視","Ignore this version":"このバージョンの通知を停止","Ignored upstream models":"無視する上流モデル","image":"枚","Image":"画像","Image Cache":"画像キャッシュ","Image cache input price":"画像キャッシュ入力単価","Image count":"画像数","Image Generation":"画像生成","Image In":"画像入力","Image input":"画像入力","Image input price":"画像入力価格","Image not available":"画像を利用できません","Image Out":"画像出力","Image output price":"画像出力価格","Image Preview":"画像プレビュー","Image prices with count, size or quality adjustments must be converted manually.":"枚数・サイズ・品質による調整を含む画像料金は手動で変換してください。","Image ratio":"画像倍率","Image to Video":"画像から動画","Image Tokens":"画像トークン","Imagine the pricing table has three groups: default (ratio 1.0), premium (ratio 0.5), and vip (ratio 0.8). Users whose account is in the vip group get user-level perks, and premium is a cheaper channel pool that users can pick for their tokens.":"料金表に3つのグループがあるとします:default(倍率 1.0)、premium(倍率 0.5)、vip(倍率 0.8)。アカウントが vip グループのユーザーはユーザーレベルの特典を受けられ、premium はユーザーがトークン用に選べる安いチャネルプールです。","Import from URL":"URL からインポート","Import to CC Switch":"CC Switch にインポート","Input Price: High to Low":"入力価格:高い順","Input Price: Low to High":"入力価格:低い順","Insert a new priority tier":"新しい優先度を挿入","Invalid announcements format: {{error}}":"お知らせの形式が正しくありません:{{error}}","Invalid API info format: {{error}}":"API 情報の形式が正しくありません:{{error}}","Invalid authorization code":"認可コードが無効です","Invalid Bark push URL":"Bark のプッシュ URL が無効です","Invalid billing expression for model {{model}}: {{error}}":"モデル {{model}} の課金式が無効です:{{error}}","Important":"重要","Invalid channel ID":"チャネル ID が無効です","Importing metadata does not add channels, enable model access, or configure prices.":"メタデータのインポートでは、チャネルの追加、モデルへのアクセス許可、料金設定は行いません。","Invalid channel priority move":"チャンネルの優先度変更が無効です","Invalid channel settings format: {{error}}":"チャネル設定の形式が正しくありません:{{error}}","In BotFather, open Login Widget, register this callback URL, and copy the Client ID and Client Secret. Existing Telegram bindings will continue to work after configuration.":"BotFather で Login Widget を開き、このコールバック URL を登録して Client ID と Client Secret をコピーしてください。設定後は既存の Telegram 連携を引き続き利用できます。","In JSON, the user group is the outer key and the billing group is the inner key. The example below means: vip users pay 0.8 when billed as standard, and 0.3 when billed as premium.":"JSONでは外側のキーがユーザーグループ、内側のキーが課金グループです。以下の例は、vip ユーザーが standard として課金されると 0.8、premium として課金されると 0.3 を意味します。","In Progress":"処理中","Invalid Discovery URL. Only http and https are supported":"Discovery URL が無効です。http と https のみ対応しています","Invalid email address":"メールアドレスが無効です","In the visual editor these appear as Extra visible and Hidden. In JSON, +: (or no prefix) adds a group and -: removes one.":"ビジュアルエディタでは「追加表示」と「非表示」として表示されます。JSONでは +:(または接頭辞なし)でグループを追加し、-: で削除します。","Invalid FAQ format: {{error}}":"FAQ の形式が正しくありません:{{error}}","Invalid Gotify server URL":"Gotify サーバーの URL が無効です","Invalid ID":"ID が無効です","In:":"入力:","Invalid input":"入力が無効です","Invalid input {{error}}":"入力が無効です {{error}}","incident":"件","incidents":"件","Incidents":"インシデント","Include {{price}}":"{{price}}を有効化","Include at least one price variable.":"料金変数を1つ以上有効にしてください。","Include Group":"グループを含む","Include Model":"モデルを含む","Invalid parameters":"パラメーターが無効です","Include name":"名前を含める","Invalid Passkey login state":"Passkey のログイン状態が無効です","Include quota":"クォータを含める","Include Rule Name":"ルール名を含む","Invalid Passkey verification request":"Passkey の認証リクエストが無効です","Includes changes that require security verification, such as password, two-factor settings, and account deletion.":"パスワード、2要素認証の設定、アカウント削除など、セキュリティ確認が必要な変更を含みます。","Includes request rules":"リクエストルールを含む","Invalid provider ID":"プロバイダー ID が無効です","Invalid request":"リクエストが無効です","Invalid request body.":"リクエスト本文が無効です。","Invalid request parameter format":"リクエストパラメータの形式が正しくありません","Invalid request parameters: {{error}}":"リクエストパラメーターが無効です: {{error}}","Includes tool-call surcharge":"ツール呼び出しの追加料金を含む","Including failed requests, 0 = unlimited":"失敗したリクエストを含む、0 = 無制限","Incoming path":"受信パス","Incoming path is required":"受信パスは必須です","Incoming path must be unique":"受信パスは一意である必要があります","Incoming path must not include query":"受信パスに query を含めることはできません","Incoming path must start with /":"受信パスは / で始める必要があります","Invalid subscription ID":"無効なサブスクリプション ID です","Invalid top-up amount":"チャージ数量が無効です","Invalid top-up quota":"無効なチャージクォータです","Invalid Uptime Kuma group settings format: {{error}}":"Uptime Kuma グループ設定の形式が正しくありません:{{error}}","Invalid user ID":"ユーザー ID が無効です","Incomplete":"未完了","Invalid warning type":"警告タイプが無効です","Invalid Webhook URL":"Webhook URL が無効です","Increase quota for user “{{name}}”":"ユーザー「{{name}}」のクォータを増額","Increase user quota":"ユーザーのクォータを増額","Increased user quota by {{quota}}":"ユーザーのクォータを {{quota}} 増やしました","Index":"インデックス","Invitation code bonus {{quota}}":"招待コードボーナス {{quota}}","Index request failed with HTTP {{status}}":"インデックスの取得に失敗しました(HTTP {{status}})","Invitation quota is insufficient!":"招待クォータが不足しています!","Index URL":"インデックス URL","Information unavailable":"情報を取得できません","Inherit global Auto order":"グローバル Auto 順序を継承","Inherit global default":"全体のデフォルトを継承","Inherit vendor icon":"プロバイダーのアイコンを継承","Inherited":"継承","Inherited from {{vendor}}":"{{vendor}} から継承","Initial quota given to new users":"新規ユーザーに付与される初期クォータ","Initial quota given to new users ({{formattedQuota}})":"新規ユーザーに付与される初期クォータ({{formattedQuota}})","Initialization failed, please try again.":"初期化に失敗しました。もう一度お試しください。","Initialize":"初期化","Initialize system":"システム初期化","Initializing…":"初期化中…","Inpaint":"インペイント","Input":"入力","Input mode":"入力モード","Input pre-consume multiplier":"入力の事前引き落とし倍率","Input price":"入力価格","Input price is required before saving dependent prices.":"依存する価格を保存する前に入力価格が必要です。","Input token rate":"入力トークン速度","Input tokens":"入力トークン","Input Tokens":"入力トークン","Inset":"インセット","Inspect requests, errors, and billing details":"リクエスト、エラー、請求詳細を確認","Inspect user prompts":"ユーザープロンプトの検査","Install":"インストール","Install {{name}}":"{{name}} をインストール","Install and enable":"インストールして有効化","Install, configure, test, and remove task plugins.":"タスクプラグインのインストール、設定、テスト、削除を行います。","Installed":"インストール済み","Installed {{name}} v{{version}}":"{{name}} v{{version}} をインストールしました","Installed v{{from}} → marketplace v{{to}}":"インストール済み v{{from}} → マーケット v{{to}}","Installed v{{installed}} not listed":"導入済み v{{installed}} は未掲載","Installed version is not in this index":"インストール済みのバージョンはこのインデックスにありません","Installing...":"インストール中…","Instance":"インスタンス","Instances":"インスタンス","Insufficient balance":"残高が不足しています","Insufficient permission to adjust this user":"このユーザーのクォータを調整する権限がありません","Integrations":"統合","Integrity check failed":"整合性チェックに失敗しました","Integrity hash":"整合性ハッシュ","Integrity verification unavailable in this environment":"現在の環境では検証できません","Inter-group overrides":"グループ間上書き","Inter-group ratio overrides":"グループ間比率上書き","Interface Language":"インターフェース言語","Internal Notes":"内部メモ","Internal notes (not shown to users)":":内部メモ(ユーザーには表示されません)","Internal Server Error!":"内部サーバーエラー!","Interval must be at least 1 minute":"間隔は1分以上にしてください","Invalid (NaN)":"無効 (NaN)","Invalid adjustment parameters":"クォータ調整のパラメーターが無効です","Invalid channel header override":"チャネルのヘッダー上書き設定が無効です","Invalid channel proxy":"チャネルのプロキシ設定が無効です","Invalid chat link. Please contact the administrator.":"無効なチャットリンクです。管理者に連絡してください。","Invalid chat link. Please contact your administrator.":"無効なチャットリンクです。管理者に連絡してください。","Invalid code":"無効なコード","Invalid expression syntax":"式の構文が無効です","Invalid inference server address":"推論サーバーのアドレスが無効です","Invalid items format":"項目の形式が無効です","Invalid JSON":"JSON が無効です","Invalid JSON format":"無効な JSON 形式","Invalid JSON format or values out of allowed range":"無効な JSON 形式または値が許可された範囲外です","Invalid JSON in parameter override template":"パラメータオーバーライドテンプレートのJSONが無効です","Invalid JSON string.":"無効な JSON 文字列です。","Invalid model mapping format":"無効なモデルマッピング形式","Invalid Passkey domain. Enter a domain without a scheme, port, path or wildcard.":"パスキードメインが無効です。プロトコル、ポート、パス、ワイルドカードを含めず、ドメインを入力してください。","Join the same priority tier":"同じ優先度に設定","Key deleted":"キーを削除しました","Key disabled":"キーを無効にしました","Key enabled":"キーを有効にしました","Invalid Passkey registration response":"無効なパスキー登録応答","Key index out of range":"キーのインデックスが範囲外です","Invalid Passkey response":"無効なパスキー応答","Invalid payment redirect URL":"無効な支払いリダイレクトURL","Invalid pricing value":"料金の値が無効です","Invalid reset link, please request a new password reset":"無効なリセットリンクです。新しいパスワードリセットをリクエストしてください","Invalid reset link, please request a new password reset.":"無効なリセットリンクです。新しいパスワードリセットをリクエストしてください。","Invalid response":"無効な応答","Invalid rules JSON format":"ルール JSON の形式が不正です","Invalid status code mapping entries: {{entries}}":"無効なステータスコードマッピング:{{entries}}","Invalid status code rules":"ステータスコードのルールが無効です","Invalid status code rules: {{tokens}}":"無効なステータスコードルール:{{tokens}}","Invalid vLLM server address":"vLLM サーバーのアドレスが無効です","Invalidate":"無効化","Invalidated":"無効化済み","Invert match":"一致を反転","Invitation Code":"招待コード","Invitation Quota":"招待クォータ","Invite Info":"招待情報","Invited":"招待済み","Invited {{count}} users":"招待 {{count}} 人","Invited by user ID":"ユーザーIDによる招待","Invited Users":"招待されたユーザー","Invitee Reward":"招待された側の報酬","Inviter":"招待者","Inviter ID: {{id}}":"招待者 ID:{{id}}","Inviter Reward":"招待した側の報酬","Invites":"招待","Invoke developer-defined functions with structured arguments":"構造化された引数で開発者定義の関数を呼び出す","InvokeModel (legacy)":"InvokeModel(従来の API)","io.net API Key":"io.net API キー","io.net Deployments":"io.net デプロイ","IP":"IP","IP Address":"IPアドレス","IP Filter Mode":"IP フィルターモード","IP Restriction":"IP制限","IP Whitelist (supports CIDR)":"IP ホワイトリスト(CIDR対応)","IP: {{ip}} · Method: {{method}}":"IP: {{ip}} · 方法: {{method}}","is less than the configured maximum cache size":"設定された最大キャッシュサイズより小さい","is the default price; ":"はデフォルト価格です; ","It seems like the page you\'re looking for":"お探しのページは","Items":"項目","Japanese":"日本語","JavaScript file":"JavaScript ファイル","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"グループ識別子のJSON配列。以下で有効にすると、新しいトークンはこのリストをローテーションします。","JSON Editor":"JSON編集","JSON format error":"JSONフォーマットエラー","JSON format supports service account JSON files":"JSON形式はサービスアカウントJSONファイルをサポートします","JSON is invalid at line {{line}}, column {{column}}.":"JSON は {{line}} 行目、{{column}} 列目で無効です。","JSON is invalid at position {{position}}.":"JSON は位置 {{position}} で無効です。","JSON is invalid. Please check the syntax.":"JSON が無効です。構文を確認してください。","JSON keys are request model names; values are upstream model names.":"JSON のキーはリクエストのモデル名、値は上流のモデル名です。","JSON map of group → description exposed when users create API keys.":"ユーザーがAPIキーを作成する際に公開される、グループ → 説明のJSONマップ。","JSON map of group → ratio applied when the user selects the group explicitly.":"ユーザーがグループを明示的に選択したときに適用される、グループ → 比率のJSONマップ。","JSON map of model → multiplier applied to quota billing.":"モデル → クォータ請求に適用される乗数のJSONマップ。","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"モデル → リクエストあたりのUSDコストのJSONマップ。比率ベースの請求よりも優先されます。","JSON mode":"JSON モード","JSON Mode":"JSONモード","JSON must be an object":"JSON はオブジェクトである必要があります","JSON object:":"JSONオブジェクト:","JSON structure is invalid":"JSON 構造が無効です","JSON Text":"JSONテキスト","Leave empty to use the site default ({{amount}})":"空欄の場合はシステムのデフォルト値({{amount}})を使用します","Legacy access tokens have been retired. Create a new access token in security settings":"旧形式のアクセストークンは廃止されました。セキュリティ設定で新しいアクセストークンを作成してください","JSON-based access control rules. Leave empty to allow all users.":"JSONベースのアクセス制御ルール。すべてのユーザーを許可する場合は空のままにしてください。","Just now":"たった今","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"チャネル無効時にアフィニティを保持","Keep enabled if you need to proxy requests for different upstream accounts.":"異なる上流アカウントのリクエストをプロキシする必要がある場合は有効にしたままにしてください。","Keep enough balance before production traffic":"本番トラフィック前に十分な残高を確保","Keep existing domain":"既存のドメインを維持","Keep local":"ローカルを保持","Keep original value":"元の値を保持","Keep original value (skip if target exists)":"元の値を保持(ターゲットが存在する場合はスキップ)","Keep the domains used by existing Passkeys, one per line. If the primary domain changed from www.example.com to example.com, enter www.example.com here.":"既存のパスキーで使用しているドメインを1行に1つ入力します。メインドメインを www.example.com から example.com に変更した場合は、ここに www.example.com を残してください。","Keep the names users call; change what is sent upstream.":"ユーザーが指定する名前を保ち、上流に送る名前を変更します。","Keep the platform ready":"プラットフォームを準備状態に保つ","Keep the session binding when the channel is unavailable":"チャネルが利用できない場合も関連付けを保持","Keep this above 1 minute to avoid heavy database load":"データベースへの負荷を避けるため、これを1分以上に保ってください","Keep this vendor":"このプロバイダーを残す","Keep upstream names; choose what users call.":"上流の名前を保ち、ユーザーが指定する名前を設定します。","Keep-alive Ping":"キープアライブPing","Keeps compatible responses more repeatable":"対応モデルの応答を再現しやすくします","Key":"キー","Key Fingerprint":"キーフィンガープリント","Key Sources":"キーソース","Key Summary":"キー概要","Key Update Mode":"キー更新モード","Keys, OAuth credentials, and multi-key update behavior.":"キー、OAuth 認証情報、マルチキー更新動作を管理します。","Kind":"種類","Linux DO trust level does not meet the minimum required by administrator":"Linux DO の信頼レベルが管理者の設定した最低レベルに達していません","Kling":"Kling","Knowledge Base ID":"ナレッジベースID","Knowledge Base ID *":"ナレッジベースID *","Knowledge cutoff":"知識のカットオフ","Lake View":"レイクビュー","Landing page with system overview.":"システム概要付きランディングページ。","Language preference saved":"言語設定を保存しました","Language Preferences":"言語設定","Language preferences sync across your signed-in devices and affect API error messages.":"言語設定はログイン中のすべてのデバイスで同期され、API のエラーメッセージ言語にも反映されます。","Last 24h usage":"直近24時間の使用量","Last 30 days uptime":"直近 30 日の稼働率","Last active {{time}} · Expires {{expires}}":"最終利用 {{time}} · 有効期限 {{expires}}","Last check time":"最終チェック時刻","Last detected addable models":"最後に検出された追加可能モデル","Last Login":"最終ログイン","Last Seen":"最終報告","Last successful check":"前回の正常な確認","Last Tested":"最終テスト日時","Last updated":"最終更新","Last updated:":"最終更新日:","Last Used":"最終使用","Last used {{time}}":"最終使用 {{time}}","Last used:":"最終使用日:","Latency":"レイテンシ","Latency check":"レイテンシ確認","Latency short":"遅延","Latency trend (last 24h)":"レイテンシ推移(直近 24 時間)","Later":"後で","Later requests follow the new channel.":"以降のリクエストは新しいチャネルを使用します。","Latest platform updates and notices":"最新のプラットフォーム更新と通知","Latest version":"最新バージョン","Lavender Dream":"ラベンダードリーム","Layout":"レイアウト","lead":"リード","Leaderboards":"ランキング","Learn more":"詳細はこちら","Learn more:":"詳細はこちら:","Leave":"退出","Leave blank to keep the existing credential":"既存の認証情報を保持するには、空白のままにしてください","Leave blank to keep the existing key":"空欄のままにすると既存のキーを保持します","Leave blank unless rotating the secret":"シークレットをローテーションする場合を除き、空白のままにしてください","Leave empty for fallback":"フォールバックは空のまま","Leave empty for never expires":"期限切れなしにするには空のままにしてください","Leave empty only for the final fallback split.":"空にできるのは最後のフォールバック分岐だけです。","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"利用規約の要件を無効にするには空のままにしてください。Markdown、HTML、またはユーザーをリダイレクトするための完全なURLをサポートします。","Log export is disabled":"ログのエクスポートは無効になっています","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"プライバシーポリシーの要件を無効にするには空のままにしてください。Markdown、HTML、またはユーザーをリダイレクトするための完全なURLをサポートします。","Leave empty to disband the tag":"タグを解散するには空のままにしてください","Leave empty to keep existing key":"空欄のままにすると既存のキーを保持します","Leave empty to keep unchanged":"変更しない場合は空欄のまま","Log recording":"ログの記録","Log search and export":"ログの検索とエクスポート","Leave empty to match all models":"空欄の場合はすべてのモデルに一致","Leave empty to use account email":"アカウントのメールアドレスを使用するには空のままにしてください","Leave empty to use default":"デフォルトを使用する場合は空欄にしてください","Leave empty to use system temp directory":"空欄でシステムの一時ディレクトリを使用","Leave empty to use username":"ユーザー名を使用するには空のままにしてください","Leave the final split empty as the fallback for models not matched above.":"上のルールに一致しないモデル用のフォールバックとして、最後の分岐を空にします。","Leave this empty only for the final fallback split; it catches client models not matched above.":"空にできるのは最後のフォールバック分岐だけです。上の分岐で一致しないクライアントモデルを受けます。","Left to Right":"左から右","Legacy Format (JSON Object)":"旧形式(JSONオブジェクト)","Legacy format must be a JSON object":"旧形式はJSONオブジェクトである必要があります","Legacy Format Template":"旧フォーマットテンプレート","Legacy full-URL integration; use Advanced Custom for new channels":"完全なリクエスト URL を使う旧方式です。新しいチャネルには「高度なカスタム」を推奨","Legacy pricing is deprecated. Convert the current prices to an expression draft, then save to apply it.":"旧料金設定は非推奨です。現在の価格を式の下書きに変換し、保存すると適用されます。","Legacy token":"旧形式のトークン","Legal":"法務","Less":"少ない","Longest log time range (days)":"ログの最長期間(日)","Less than":"より小さい","Less Than":"より小さい","Less than 1 day left":"残り1日未満","Less than or equal":"以下","Less Than or Equal":"以下","License":"ライセンス","Light":"ライト","Lightning Fast":"超高速","Limit period":"制限期間","Limit Reached":"上限に達しました","Limit which models can be used with this key":"このキーで使用できるモデルを制限する","Limited":"制限","Limits only token-specific Auto snapshots. Global Auto inheritance remains unlimited.":"トークン固有の Auto スナップショットだけを制限します。グローバル Auto の継承には上限がありません。","Limits token selection to a probability mass":"確率質量でトークン選択を制限します","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"ドキュメントサイトへのリンク","Linked account":"連携済みアカウント","Linked models":"関連モデル","Linked records are counted once. Matching rules show their covered models separately.":"関連件数は情報レコードごとに数えます。ルールが対象とするモデル数は別途表示します。","LinuxDO":"LinuxDO","LinuxDO Client ID":"LinuxDO クライアントID","LinuxDO Client Secret":"LinuxDO クライアントシークレット","List of models supported by this channel. Use comma to separate multiple models.":"このチャネルがサポートするモデルのリストです。複数のモデルはカンマで区切ってください。","List of origins (one per line) allowed for Passkey registration and authentication.":"Passkeyの登録と認証が許可されているオリジン(1行に1つ)のリスト。","List registered task plugins and bind them when creating or editing task plugin channels.":"登録済みのタスクプラグインを一覧し、チャネル作成・編集時に紐付けます。","List view":"リスト表示","Listing also depends on metadata visibility and the user’s group access.":"表示はメタデータの表示設定とユーザーのグループアクセスにも依存します。","Listing hidden":"非表示","Live refresh pauses when no task is running":"実行中のタスクがない場合、自動更新は一時停止します","LLM Leaderboard":"LLM リーダーボード","LLM prompt helper":"LLMプロンプトヘルパー","Load Balancing":"ロードバランシング","Load metadata preview":"メタデータのプレビューを読み込む","Load template...":"テンプレートをロード...","Loader":"ローダー","Loading":"読み込み中","Loading channel details":"チャネル詳細を読み込み中","Loading configuration":"設定を読み込んでいます","Loading content settings...":"コンテンツ設定をロード中...","Loading conversation...":"会話を読み込み中...","Loading current models...":"現在のモデルをロード中...","Loading failed":"読み込みに失敗しました","Loading installed source...":"インストール済みのソースを読み込み中…","Loading maintenance settings...":"メンテナンス設定をロード中...","Loading plugins...":"プラグインを読み込み中…","Loading settings...":"設定をロード中...","Loading setup status…":"セットアップステータスをロード中…","Loading verification methods...":"確認方法を読み込み中…","Loading...":"読み込み中...","Local":"ローカル","Local Billing":"ローカル課金","Local check":"ローカルチェック","Local Estimate (billing-usage-anthropic)":"ローカル推定 (billing-usage-anthropic)","Local Estimate (billing-usage-gemini)":"ローカル推定 (billing-usage-gemini)","Local Estimate (billing-usage-openai)":"ローカル推定 (billing-usage-openai)","Local models":"ローカルモデル","Locations":"場所","Locked":"ロック済み","log":"ログ","Log cleanup":"ログクリーンアップ","Log cleanup progress":"ログクリーンアップの進行状況","Log cleanup task started.":"ログクリーンアップタスクを開始しました。","Log Details":"ログの詳細","Log Directory":"ログディレクトリ","Log File Count":"ログファイル数","Log files older than {{value}} days will be deleted.":"{{value}}日前より古いログファイルが削除されます。","Log IP address for usage and error logs":"使用状況およびエラーログのためにIPアドレスを記録する","Log Maintenance":"ログのメンテナンス","Log Type":"ログタイプ","Low balance reminder":"残高不足の通知","Maximum 100 redemption codes can be generated at once":"一度に生成できる引き換えコードは最大 100 個です","Logged in successfully via {{method}}":"{{method}} でログインに成功しました","Logic":"ロジック","Login":"ログイン","Login & Authentication":"ログインと認証","Login failed":"ログインに失敗しました","Login flow expired. Please sign in again.":"ログイン手続きの有効期限が切れました。もう一度サインインしてください。","Login Info":"ログイン情報","Login Method":"ログイン方法","Login session":"ログインセッション","Login sessions":"ログインセッション","Maximum number of tokens reached ({{max}})":"トークン数の上限({{max}})に達しました","Login, security and access records":"ログイン、セキュリティ、アクセスの記録","Logo":"ロゴ","Logo URL":"ロゴURL","Logs":"ログ","Long passwords are unavailable until the password storage upgrade is complete.":"パスワード保存方式の更新が完了するまで、長いパスワードは使用できません。","Look for a special ratio rule matching this user group and this billing group. If one exists, use its ratio. Otherwise use the billing group base ratio from the pricing table.":"このユーザーグループと課金グループに一致する特別倍率ルールを探します。あればその倍率を、なければ料金表の課金グループの基本倍率を使います。","Low balance":"残高不足","Lowest median first-token latency":"最初のトークンまでの中央値レイテンシの最小値","m":"m","Maintenance":"メンテナンス","Make extra groups visible to, or hide default groups from, users of a specific group.":"特定グループのユーザーに追加のグループを表示したり、デフォルトのグループを非表示にしたりします。","Make it easier for teammates to pick the right group.":"チームメイトが適切なグループを選択しやすくする。","Make sure you understand these effects before enabling.":"以上の影響を理解した上で有効にしてください。","Manage":"管理","Manage account bindings for this user":"このユーザーのアカウントバインドを管理","Manage Bindings":"バインド管理","Manage catalog visibility and pricing.":"カタログの表示と価格設定を管理。","Manage custom OAuth providers for user authentication":"ユーザー認証用のカスタムOAuthプロバイダーの管理","Manage Keys":"キーの管理","Manage local models for:":"次のローカルモデルを管理します。","Manage metadata, pricing, and channel connections. Each section saves separately.":"メタデータ、料金、チャネルの関連付けを管理します。各セクションは個別に保存します。","Manage multi-key status and configuration for this channel":"このチャネルのマルチキーのステータスと構成を管理する","Manage Ollama Models":"オラマモデルの管理","Manage pricing, visibility and automatic routing for your groups.":"グループの料金、表示範囲、自動ルーティング順序を管理します。","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"サーバーログファイルを管理します。ログファイルは時間とともに蓄積されるため、定期的なクリーンアップでディスク容量を解放することを推奨します。","Manage sources":"ソースを管理","Manage subscription plans and pricing.":"サブスクリプションプランと価格設定を管理します。","Manage Subscriptions":"サブスクリプションの管理","Manage vendor details and linked model records.":"プロバイダー情報と関連モデルのレコードを管理します。","Manage Vendors":"ベンダーの管理","Manage your LinuxDO OAuth app":"LinuxDO OAuth アプリを管理","Manage your security settings and account access":"セキュリティ設定とアカウントアクセスを管理する","Mantle (Messages API)":"Mantle(Messages API)","Manual Disabled":"手動無効","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"ユーザー情報レスポンスのフィールドをローカルユーザー属性にマッピングします。ネストされたパスをサポートします (例: ocs.data.id)。","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"モデル識別子をGemini APIバージョンにマッピングします。特定の一致が見つからない場合は、`default`エントリが適用されます。","Map request model names to actual provider model names (JSON format)":"リクエストのモデル名を実際のプロバイダーのモデル名にマッピング (JSON 形式)","Map response status codes (JSON format)":"応答ステータスコードをマッピング(JSON形式)","Map upstream status codes to different codes":"アップストリームのステータスコードを別のコードにマッピングする","Market Share":"マーケットシェア","Marketing":"マーケティング","Marketplace":"マーケット","Marketplace installs never force past a conflict. Resolve it on the task plugins page, then install again.":"マーケットからのインストールは競合を強制的に無視しません。タスクプラグインのページで競合を解消してから、再度インストールしてください。","Marketplace sources":"マーケットのソース","Marketplace sources updated":"マーケットのソースを更新しました","Master instances run scheduled background tasks.":"master インスタンスはスケジュールされたバックグラウンドタスクを実行します。","Match All (AND)":"すべて一致(AND)","Match Any (OR)":"いずれか一致(OR)","Match Mode":"マッチモード","Minimum transfer quota is {{min}}!":"移行できる最小クォータは {{min}} です!","Match model name exactly":"モデル名を正確に一致","Match models containing this name":"この名前を含むモデルを一致","Match models ending with this name":"この名前で終わるモデルを一致","Match models starting with this name":"この名前で始まるモデルを一致","Match Text":"一致テキスト","Match Type":"一致タイプ","Match Value":"マッチ値","Match Value (optional)":"マッチ値(任意)","Missing group ID":"グループ ID がありません","Matched":"一致","Missing model ID":"モデル ID がありません","Matched models":"一致モデル","Missing parameter rule_name, or use all=true to clear everything":"パラメータ rule_name がありません。すべてクリアするには all=true を使用してください","Matched Tier":"一致した階層","Missing vendor ID":"ベンダー ID がありません","Matches models not claimed by earlier splits.":"前の分岐で使われていないモデルに一致します。","Matching Rules":"マッチングルール","Matching rules apply to metadata. Pricing is configured for each concrete model.":"マッチングルールはメタデータに適用されます。料金は個々のモデルに設定します。","Max context tokens":"最大コンテキストトークン数","Max Disk Cache Size (MB)":"ディスクキャッシュ最大容量 (MB)","Max Entries":"最大エントリ数","Max output":"最大出力","Max Requests (incl. failures)":"最大リクエスト数(失敗を含む)","Max Requests (including failures)":"最大リクエスト数(失敗を含む)","Max requests per period":"期間あたりの最大リクエスト数","Max Retries":"最大再試行","Max Success":"最大成功数","Max successful requests":"最大成功リクエスト数","Max Successful Requests":"最大成功リクエスト数","Max Tokens":"最大トークン数","Maximum {{max}} groups selected":"最大 {{max}} グループを選択済み","Maximum 1000 characters. Supports Markdown and HTML.":"最大1000文字。MarkdownとHTMLをサポートしています。","Maximum 200 characters":"最大200文字","Maximum 500 characters. Supports Markdown and HTML.":"最大500文字。MarkdownとHTMLをサポートしています。","Maximum cached sessions":"キャッシュするセッションの上限","Maximum check-in quota":"最大チェックインクォータ","Maximum custom groups per token":"トークンごとのカスタムグループ上限","Maximum input window":"最大入力ウィンドウ","Maximum number of channels tested at the same time (1-32)":"同時にテストするチャンネルの最大数(1~32)","Maximum number of tokens each user can create. Default 1000. Setting too large may affect performance.":"各ユーザーが作成できる最大トークン数。デフォルトは 1000。大きすぎる値はパフォーマンスに影響を与える可能性があります。","Maximum number of tokens in the response":"レスポンスの最大トークン数","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}":"モデル固定価格 {{model_price}}、グループ倍率 {{group_ratio}}、操作 {{action}}","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}, ID {{id}}":"モデル固定価格 {{model_price}}、グループ倍率 {{group_ratio}}、操作 {{action}}、ID {{id}}","Maximum quota amount awarded for check-in":"チェックインで付与される最大クォータ量","Maximum retries":"最大再試行回数","Maximum tokens including hidden reasoning tokens":"隠れ推論トークンを含む最大トークン数","Maximum tokens per response":"1 回の応答あたりの最大トークン数","Maximum tokens per user":"ユーザーあたりの最大トークン数","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0、maxSuccess ≥ 1、両方とも ≤ 2,147,483,647","May be used for training by upstream provider":"上流プロバイダーが学習に利用する可能性があります","Mean queue time":"平均待機時間","Mean request latency":"平均リクエスト時間","Mean time per output token":"出力トークンあたりの平均時間","Mean time to first token":"最初のトークンまでの平均時間","Media access expired. Please try again.":"メディアへのアクセス期限が切れました。もう一度お試しください。","Media preview failed. Please try again.":"メディアのプレビューに失敗しました。もう一度お試しください。","Media pricing":"メディア料金","Median time-to-first-token (TTFT) sampled hourly per group":"グループ別に毎時サンプリングした最初のトークンまでの中央値レイテンシ (TTFT)","Medical Q&A, mental health support":"医療Q&A・メンタルヘルスサポート","Memory":"メモリ","Memory Hits":"メモリヒット","Memory Threshold (%)":"メモリ閾値 (%)","Merchant ID":"マーチャントID","Merchant ID is required":"マーチャント ID は必須です","Merge into Other":"その他にまとめる","Model name already exists":"モデル名は既に存在します","Model name cannot be empty":"モデル名は空にできません","Merge vendors":"プロバイダーを統合","Model name is too long: {{model}}":"モデル名が長すぎます:{{model}}","Message Priority":"メッセージの優先度","Metadata":"メタデータ","Metadata changes":"メタデータの変更","Metadata language":"メタデータの言語","Metadata only":"情報のみ","Metadata sync completed":"メタデータの同期が完了しました","Model price {{model_price}}, group ratio {{group_ratio}}":"モデル価格 {{model_price}}、グループ倍率 {{group_ratio}}","Metadata sync disabled":"メタデータ同期は禁止されています","Metadata sync failed":"メタデータの同期に失敗しました","Method":"メソッド","Migration notes":"移行に関する注意事項","min downtime":"分のダウンタイム","Min Top-up":"最低チャージ額","Min Top-up:":"最小チャージ額:","Model ratio {{model_ratio}}, completion ratio {{completion_ratio}}, audio ratio {{audio_ratio}}, audio completion ratio {{audio_completion_ratio}}, group ratio {{group_ratio}}":"モデル倍率 {{model_ratio}}、補完倍率 {{completion_ratio}}、音声倍率 {{audio_ratio}}、音声補完倍率 {{audio_completion_ratio}}、グループ倍率 {{group_ratio}}","MiniMax":"MiniMax","Model ratios reset":"モデル倍率をリセットしました","Minimum {{amount}}":"最小 {{amount}}","Minimum check-in quota":"最小チェックインクォータ","Minimum LinuxDO trust level required":"必要な最小LinuxDOトラストレベル","Minimum quota amount awarded for check-in":"チェックインで付与される最小クォータ量","Minimum recharge amount in USD":"米ドルでの最小リチャージ額","Minimum recharge amount to qualify for this discount.":"この割引の対象となる最小チャージ額。","Minimum top-up (optional)":"最小チャージ額(オプション)","Minimum top-up (USD)":"最小チャージ額(USD)","Minimum top-up amount must be at least 1":"最低チャージ額は 1 以上である必要があります","Minimum top-up quantity":"最小チャージ数量","Minimum topup amount: {{amount}}":"最低チャージ金額:{{amount}}","Minimum Trust Level":"最小トラストレベル","Minimum:":"最小:","Model test":"モデルテスト","Minor blips in the last 30 days":"直近 30 日で軽微な障害あり","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"下で新しいペアを作成するか、さらに下で既存のものを選択してください。準備ができたら保存をクリックします。","Minute":"分","minutes":"分","Missing code":"コードが不足しています","Missing metadata":"情報未設定","Missing Models":"不足しているモデル","Missing user data from Passkey login response":"パスキーログイン応答からユーザーデータが欠落しています","Mistral":"Mistral","MjProxy":"MjProxy","MjProxyPlus":"MjProxyPlus","Modalities":"モダリティ","Modality":"モダリティ","Mode":"モード","model":"モデル","Model":"モデル","Model {{model}}":"モデル {{model}}","Model Access":"モデルアクセス","Model Analytics":"モデル分析","Model Analytics Defaults":"モデル分析のデフォルト設定","Model Analytics Filters":"モデル分析フィルター","Model assignments":"モデルの割り当て","model billing support":"モデル課金対応","Model Call Analytics":"モデル呼び出し分析","Model context usage":"モデルのコンテキスト使用量","Model deleted":"モデルが削除されました","Model deleted successfully":"モデルが正常に削除されました","Model Deployment":"モデルデプロイ","Model deployment service is disabled":"モデルデプロイサービスが無効です","Model Description":"モデルの説明","Model details":"モデル詳細","Model disabled successfully":"モデルが正常に無効化されました","Model discovery uses the first key; other keys are not tested.":"最初のキーでモデルを取得します。他のキーはテストされません。","Model discovery uses the saved channel connection settings.":"モデルの取得には、チャネルに保存済みの接続設定を使用します。","Model enabled successfully":"モデルが正常に有効化されました","Model fixed pricing":"モデルの固定価格設定","Model Group":"モデルグループ","Model hidden from model square":"モデル広場で非表示にしました","Model ID is required":"モデル ID が必要です","Model Limits":"モデル制限","Model limits enabled":"モデル制限が有効","Model List":"モデル一覧","Model management":"モデル管理","Model Mapping":"モデルマッピング","Model Mapping (JSON)":"モデルマッピング (JSON)","Model Mapping must be a JSON object like":"モデルマッピングは次のようなJSONオブジェクトである必要があります","Model mapping must be a JSON object with string values":"モデルマッピングは文字列値を持つ JSON オブジェクトである必要があります","Model mapping must be a valid JSON object":"モデルマッピングは有効なJSONオブジェクトである必要があります","Model mapping must be valid JSON":"モデルマッピングは有効な JSON である必要があります","Model mapping must be valid JSON format":"モデルマッピングは有効なJSON形式である必要があります","Model mapping values must be strings":"モデルマッピングの値は文字列である必要があります","Model mappings are being edited in the floating panel.":"モデルマッピングはフローティングパネルで編集中です。","Model metadata":"モデルのメタデータ","Model metadata saved":"モデルのメタデータを保存しました","Model name":"モデル名","Model Name":"モデル名","Model Name *":"モデル名 *","Model name is required":"モデル名は必須です","Model names copied to clipboard":"モデル名がクリップボードにコピーされました","Model not found":"モデルが見つかりません","Model performance metrics":"モデル性能メトリクス","Model Price":"モデル価格","Model price is not configured. Please complete model pricing in settings.":"モデル価格が未設定です。設定でモデル料金を補完してください。","Model Price Not Configured":"モデル価格が未設定","Model prices":"モデル価格","Model prices reset successfully":"モデル価格が正常にリセットされました","Model Pricing":"モデル料金","Model pricing is managed by a super administrator.":"モデル料金はスーパー管理者が管理します。","Model pricing saved":"モデル料金を保存しました","Model pull failed: {{msg}}":"モデルのプルに失敗しました: __ PH_0 __","Move channels into a priority tier or between tiers. Priority values update automatically.":"チャネルを同じ優先度のグループ内、またはグループ間に移動できます。優先度の値は自動計算されます。","Multi-key channels do not support balance queries":"マルチキーチャネルは残高照会に対応していません","Model ratio":"モデル倍率","Model ratios":"モデル比率","Model ratios reset successfully":"モデル比率が正常にリセットされました","Model redirect is unavailable":"モデルリダイレクトは使用できません","Model redirects":"モデルのリダイレクト","Model Regex":"モデル正規表現","Model Regex (one per line)":"モデル正規表現(1行に1つ)","Model regex cannot be empty":"モデル正規表現は空にできません","Model scope":"モデル範囲","Model selected":"選択済みモデル","Model shown in model square":"モデル広場に表示しました","Model source":"モデルの取得元","Model Square":"モデル広場","Model square visibility":"一覧表示","Model Tags":"モデルタグ","Model to use for testing":"テストに使用するモデル","Model to use when testing channel connectivity":"チャネル接続性をテストする際に使用するモデル","Model Version":"モデルバージョン","Model Version *":"モデルバージョン *","Model-scoped only":"モデル指定のみ","model(s) selected out of":"選択されたモデル","model(s)? This action cannot be undone.":"モデルを削除しますか?この操作は元に戻せません。","models":"モデル","Models":"モデル","Models *":"モデル *","Models & Groups":"モデルとグループ","Models & Routing":"モデルとルーティング","Models appended successfully":"モデルが正常に追加されました","Models are required":"モデルが必要です","Models climbing the leaderboard":"ランキング上昇中のモデル","Models climbing the leaderboard fastest":"ランキングで最も急上昇しているモデル","Models directory":"モデルディレクトリ","Models Directory":"モデルディレクトリ","Models exposed by this channel":"このチャンネルで公開するモデル","Models fetched successfully":"モデルが正常に取得されました","Models filled to form":"フォームにモデルが記入されました","Models listed here skip automatic -thinking / -nothinking suffix handling. Matched names are also exempt from @-modifier parsing and 400 validation. Prefix an entry with re: to match the full model name as a Go regular expression, for example re:.*@sha256:.*":"ここに記載されたモデルは、-thinking / -nothinking サフィックスの自動付与・削除を行いません。一致した名前は @ 修飾子の解析および 400 バリデーションからも除外されます。re: で始まる項目は完全なモデル名に対する Go 正規表現として扱われます(例: re:.*@sha256:.*)。","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"ここに記載されたモデルは、-thinking / -nothinking サフィックスの自動付与・削除を行いません。","Models losing positions":"順位を下げているモデル","Models losing the most positions":"順位を最も落としているモデル","Models not in list, may fail to invoke":"リストにないモデル、呼び出しに失敗する可能性があります","Models source":"モデルの取得元","Models that are being used but not configured in the system":"使用されているがシステムに設定されていないモデル","Models that skip thinking suffix processing":"thinking サフィックス処理をスキップするモデル","Models updated successfully":"モデルが正常に更新されました","Models used on this site":"このサイトで使用するモデル","models.dev pricing preset":"models.dev 料金プリセット","Modify existing subscription plan configuration":"既存のサブスクリプションプラン設定を変更","Module availability":"モジュールの可用性","MokaAI":"MokaAI","Monitor":"モニタリング","Monitor balance, usage, and request volume":"残高、使用量、リクエスト数を監視","Monitored relay requests":"監視対象のリレーリクエスト","Month":"月","Month number":"月番号","Monthly":"毎月","Monthly tokens":"月間トークン","months":"ヶ月","Moonshot":"Moonshot","More":"もっと見る","More actions":"その他の操作","More Apps":"さらに","more mapping":"さらにマッピング","More models ({{count}})":"その他のモデル({{count}})","More rules":"その他のルール","More templates...":"ほかのテンプレート…","More than 999 days left":"999日以上","More...":"その他...","Most-used models in the selected period and category":"選択した期間とカテゴリで最も使われているモデル","Move":"移動","Move {{group}} down":"{{group}} を下に移動","Move {{group}} up":"{{group}} を上に移動","Move a request header":"リクエストヘッダーを移動","Move affiliate rewards to your main balance":"アフィリエイト報酬をメイン残高に移動する","Move fallback to end":"フォールバックを最後へ","Move Field":"フィールドを移動","Move Header":"ヘッダーを移動","Move Request Header":"リクエストヘッダーを移動","Move route down":"ルートを下へ","Move route up":"ルートを上へ","Move source field to target field":"ソースフィールドをターゲットフィールドに移動","ms":"ms","Multi-key channel: Keys will be":"マルチキーチャネル: キーは","Multi-Key Management":"マルチキー管理","New priority: {{priority}}":"新しい優先度:{{priority}}","New priority: {{priority}} · {{count}} channels affected":"新しい優先度:{{priority}} · {{count}} チャンネルに影響","New user registration has been disabled by administrator":"管理者により新規ユーザー登録が無効化されています","New user sign-up bonus {{quota}}":"新規登録ボーナス {{quota}}","Multi-key management {{action}} on channel (ID: {{id}})":"チャネル(ID: {{id}})でマルチキー管理操作 {{action}} を実行しました","Multi-Key Mode (multiple keys, one channel)":"マルチキー モード (複数のキー、1つのチャネル)","Multi-Key Strategy":"マルチキー戦略","Multi-key: Polling rotation":"マルチキー:ポーリングローテーション","Multi-key: Random rotation":"マルチキー:ランダムローテーション","Multi-protocol Compatible":"マルチプロトコル互換","Multi-region deployment for stable global access":"安定したグローバルアクセスを実現するマルチリージョンデプロイメント","Multi-step thinking before final answer":"最終回答の前に複数ステップで思考","Multi-user management with flexible permission allocation":"柔軟な権限割り当てが可能なマルチユーザー管理","Multilingual translation and localisation":"多言語翻訳とローカライズ","Multimodal":"マルチモーダル","Multiplier":"乗数","Multiplier applied when":"乗数が適用されるとき","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"{{userGroup}}が{{targetGroup}}を使用する際に適用される倍率","Multiplier for audio inputs.":"音声入力の乗数。","Multiplier for audio outputs.":"音声出力の乗数。","Multiplier for completion tokens.":"完了トークンの乗数。","Multiplier for image processing.":"画像処理の乗数。","Multiplier for prompt tokens.":"プロンプトトークンの乗数。","Multipliers for recharge pricing based on user groups.":"ユーザーグループに基づいたリチャージ価格設定の乗数。","Must be a valid URL":"有効な URL を入力してください","Must be at least 8 characters":"8文字以上である必要があります","Must be greater than 0":"0 より大きい値にしてください","Must be greater than or equal to 0":"0 以上にしてください","My Subscriptions":"マイサブスクリプション","my-status":"my-status","MySQL detected":"MySQLが検出されました","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL は本番環境対応のリレーショナルデータベースです。認証情報を安全に管理してください。","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQLは本番環境に対応しています。自動バックアップと、最小限必要な権限を持つ専用ユーザーが設定されていることを確認してください。","No auto-disabled keys to delete":"削除する自動無効化キーがありません","N/A":"該当なし","Name":"名称","Name *":"名前 *","Name for this redemption code (1-20 characters)":"この引き換えコードの名前(1~20文字)","Name is available":"名前が利用可能です","Name is not available":"名前が利用できません","Name Matching Rule":"名前の一致ルール","Name must be 64 characters or fewer":"名前は 64 文字以内で入力してください","Name must be between {{min}} and {{max}} characters":"名前は{{min}}文字以上{{max}}文字以下である必要があります","Name Rule":"名前ルール","Name Suffix":"名前サフィックス","Name the channel and choose the upstream provider.":"チャネル名を設定し、上流プロバイダーを選択します。","Name the channel, choose the provider, configure API access, and set credentials.":"チャネル名を設定し、プロバイダーを選択し、API アクセスと認証情報を設定します。","Name, provider type, and availability.":"名前、プロバイダー種別、利用可否。","name@example.com":"name@example.com","Native Claude Messages plus OpenAI Chat compatibility forwarding.":"Claude Messages ネイティブ転送と OpenAI Chat 互換転送。","Native format":"ネイティブ形式","Native forwarding":"ネイティブ転送","Native Gemini routes plus OpenAI Chat and Responses compatibility forwarding.":"Gemini ネイティブルートと OpenAI Chat / Responses 互換転送。","Native OpenAI routes plus optional Claude and Gemini compatibility routes.":"OpenAI ネイティブルートと、任意の Claude / Gemini 互換ルート。","Native routes":"ネイティブルート","Need a redemption code?":"引き換えコードが必要ですか?","Needs API key":"API キーが必要","Negate condition":"条件を反転","Negated group":"条件の反転","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"追加 (+:)、削除 (-:)、または使用可能なグループの追加を行うグループごとのルールを定義するネストされたJSON。","Nested JSON: source group →":"ネストされたJSON: ソースグループ →","Network connection failed or server not responding":"ネットワーク接続に失敗したか、サーバーが応答していません","Network proxy for this channel (supports HTTP, HTTPS, SOCKS5, and SOCKS5H)":"このチャネルのネットワークプロキシ(HTTP、HTTPS、SOCKS5、SOCKS5H に対応)","Never":"しない","Never expires":"無期限","Never used":"未使用","Never used an API Gateway?":"APIゲートウェイを一度も使用したことがありませんか?","NEW":"NEW","New API":"新しいAPI","New API <noreply@example.com>":"新しいAPI __ PH_0 __","New API Project Repository:":"New APIプロジェクトリポジトリ:","New API\'s flexible channel lets you configure upstream addresses and authentication per endpoint, choose native forwarding or supported protocol conversions, and configure model listing and balance queries independently":"New API の柔軟な接続チャネルでは、エンドポイントごとに上流アドレスと認証方式を設定し、ネイティブ転送または対応するプロトコル変換を選択できます。モデル一覧と残高照会も個別に設定できます","New domain: {{domain}}":"新しいドメイン:{{domain}}","New email verification code":"新しいメールアドレスの確認コード","New Format Template":"新フォーマットテンプレート","New Group":"新しいグループ","New metadata":"新しいメタデータ","New model":"新しいモデル","New Models ({{count}})":"新しいモデル ({{count}})","New models: all metadata shown below will be imported automatically. No selection is needed.":"新規モデル:以下のすべての情報を自動で取り込みます。選択は不要です。","New name will be:":"新しい名前は次のようになります:","New Passkeys use the primary domain. Compatible domains keep existing Passkeys working.":"新しいパスキーはメインドメインを使用します。既存のパスキーは互換ドメインで引き続き使用できます。","New Passkeys use this domain. Enter a domain without https://, a port or a path. An empty field uses the system website address.":"新しいパスキーはこのドメインを使用します。https://、ポート、パスを含めず、ドメインのみ入力してください。空欄の場合はシステムのウェブサイトアドレスを使用します。","New Passkeys will use the new primary domain. The previous domain will be kept so existing Passkeys can still verify.":"新しいパスキーは新しいメインドメインを使用します。既存のパスキーで引き続き認証できるよう、以前のドメインは保持されます。","New password":"新しいパスワード","New Password":"新しいパスワード","New password must be different from current password":"新しいパスワードは現在のものと異なっていなければなりません","New records include the fields below. Existing fields are kept unless explicitly selected.":"新規レコードには以下の項目が含まれます。既存の項目は明示的に選択しない限り保持されます。","New User Quota":"新しいユーザー割り当て","New value":"新しい値","New vendors":"新規ベンダー","New version available: {{version}}":"新しいバージョンが利用可能です:{{version}}","NewAPI":"NewAPI","Newly released":"最新リリース","Next":"次へ","Next branch":"次のブランチ","Next page":"次のページ","Next reset":"次のリセット","No":"いいえ","No About Content Set":"概要コンテンツが設定されていません","No access tokens":"アクセストークンはありません","No key index specified to delete":"削除するキーのインデックスが指定されていません","No key index specified to disable":"無効にするキーのインデックスが指定されていません","No key index specified to enable":"有効にするキーのインデックスが指定されていません","No Active":"アクティブなし","No keys to disable":"無効にできるキーがありません","No active login sessions":"有効なログインセッションはありません","No active system tasks.":"進行中のシステムタスクはありません。","No additional type-specific settings for this channel type.":"このチャネルタイプには、追加のタイプ固有の設定はありません。","No amount options configured. Add amounts below to get started.":"金額オプションは設定されていません。開始するには、以下の金額を追加してください。","No announcements at this time":"現在のお知らせはありません","No announcements yet. Click \\"Add Announcement\\" to create one.":"お知らせはまだありません。「お知らせを追加」をクリックして作成してください。","No API Domains yet. Click \\"Add API\\" to create one.":"まだAPIドメインはありません。「APIを追加」をクリックして作成してください。","No API key yet":"API キーはまだありません","No API keys available. Create your first API key to get started.":"利用可能なAPIキーがありません。最初のAPIキーを作成して開始してください。","No API Keys Found":"APIキーが見つかりません","No API routes configured":"APIルートが設定されていません","No API tokens":"API キーなし","No app usage data available for this model.":"このモデルのアプリ利用データはまだありません。","No apps match the selected filters":"条件に一致するアプリはありません","No Auth":"認証なし","No auto groups configured":"自動グループが未設定です","No available channels":"利用可能なチャネルなし","No available groups in the global Auto order.":"グローバル Auto 順序に利用可能なグループがありません。","No available models":"利用可能なモデルがありません","No available Web chat links":"利用可能なWebチャットリンクがありません","No backup":"バックアップなし","No base input price":"基本入力価格なし","No billing parameters declared":"課金パラメータは宣言されていません","No billing records found":"請求記録が見つかりません","No capabilities reported for this model.":"このモデルには報告されている機能がありません。","No Change":"変更なし","No changelog for this version.":"このバージョンの変更履歴はありません。","No changes":"変更なし","No changes made":"変更はありません","No changes to save":"保存する変更がありません","No channel is configured. This model will not appear in the model square.":"チャネルが未設定のため、モデル一覧には表示されません。","No channel is currently available. This model will not appear in the model square.":"利用可能なチャネルがないため、現在モデル一覧には表示されません。","No channel selected":"チャネルが選択されていません","No channel type found.":"チャネルタイプが見つかりません。","No channels available. Create your first channel to get started.":"利用可能なチャネルがありません。最初のチャネルを作成して開始してください。","No channels found":"チャネルが見つかりません","No Channels Found":"チャネルが見つかりません","No channels selected":"チャネルが選択されていません","No chat presets configured. Click \\"Add chat preset\\" to get started.":"チャットプリセットが設定されていません。「チャットプリセットを追加」をクリックして開始してください。","No chat presets match your search":"検索に一致するチャットプリセットがありません","No configured channel models match this metadata rule.":"このメタデータルールに一致するチャネルモデルはありません。","No conflict entries available.":"利用可能な競合エントリはありません。","No conflicts match your search.":"検索条件に一致する競合はありません。","No connection info found in clipboard":"クリップボードに接続情報が見つかりません","No console output":"コンソール出力なし","No containers":"コンテナがありません","No content to copy":"コピーする内容がありません","No custom groups. Saving will inherit the complete global Auto order.":"カスタムグループはありません。保存すると、グローバル Auto の全順序を継承します。","No custom OAuth providers configured yet.":"カスタムOAuthプロバイダーはまだ設定されていません。","No data":"データがありません","No Data":"データなし","No data available":"データがありません","No deployments available. Create one to get started.":"利用可能なデプロイメントがありません。開始するには1つ作成してください。","No Deployments Found":"デプロイメントが見つかりません","No description available.":"説明はありません。","No notifications are available to you right now":"現在、受け取れる通知はありません","No permission to access users of same or higher level":"同等以上のレベルのユーザー情報にアクセスする権限がありません","No permission to change the 2FA settings of users at the same or higher level":"同等以上のレベルのユーザーの 2FA 設定を変更する権限がありません","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"割引ティアは設定されていません。「割引ティアを追加」をクリックして開始してください。","No permission to update users of same or higher permission level":"同等以上の権限レベルのユーザーを更新する権限がありません","No duplicate keys found":"重複キーが見つかりませんでした","No enabled channel key":"有効なチャネルキーがありません","No enabled groups":"有効なグループなし","No enabled tokens available":"有効なトークンがありません","No encryption":"暗号化なし","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"エンドポイントが設定されていません。JSONモードに切り替えるか、エンドポイントを定義するために行を追加してください。","No endpoints inferred from channels":"チャネルから取得したエンドポイントなし","No extra domains declared":"追加ドメインの宣言なし","No FAQ entries available":"FAQエントリがありません","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"FAQエントリはまだありません。「FAQを追加」をクリックして作成してください。","No files match the accepted types.":"許可された種類に一致するファイルがありません。","No flow data available":"フローデータがありません","No group":"グループなし","No group found.":"グループが見つかりません。","No group-based rate limits configured. Click \\"Add group\\" to get started.":"グループベースのレート制限が設定されていません。\\"グループを追加\\" をクリックして開始してください。","No groups match your search":"検索に一致するグループがありません","No groups yet. Add a group to get started.":"グループはまだありません。グループを追加して開始してください。","No header overrides configured.":"ヘッダーのオーバーライドが設定されていません。","No historical system tasks.":"システムタスク履歴はありません。","No history data available":"履歴データがありません","No incidents in the last 24 hours":"過去 24 時間にインシデントはありません","No incidents in the last 30 days":"過去 30 日間でインシデントはありません","No instances have reported yet.":"まだ報告されたインスタンスはありません。","No integrity hash":"整合性ハッシュなし","No integrity verification":"整合性検証なし","No Inviter":"招待者なし","No IP restriction":"制限なし","No keys found":"キーが見つかりません","No latency data available":"レイテンシデータがありません","No linked models":"関連モデルはありません","No linked OAuth provider is available.":"利用できる連携済みOAuthプロバイダーがありません。","No log entries matched the selected time.":"選択した時間に一致するログエントリはありません。","No logs":"ログがありません","No Logs Found":"ログが見つかりません","No mappings configured. Click \\"Add Row\\" to get started.":"マッピングが設定されていません。「行を追加」をクリックして開始してください。","No marketplace sources configured.":"マーケットのソースが設定されていません。","No matches found":"一致するものが見つかりません","No matching channels":"該当チャネルなし","No matching icons":"一致するアイコンはありません","No matching items":"一致する項目がありません","No matching provider":"一致するプロバイダーがありません","No matching results":"一致する結果がありません","No matching rules":"一致するルールがありません","No matching token and channel usage was found.":"一致するトークンとチャネルの使用量が見つかりませんでした。","No messages yet":"まだメッセージがありません","No missing models found.":"不足しているモデルは見つかりません。","No model found.":"モデルが見つかりません。","No model mappings configured. Click \\"Add Mapping\\" to get started.":"モデルマッピングは設定されていません。「マッピングを追加」をクリックして開始してください。","No model price changes to save":"保存するモデル価格の変更はありません","No models available":"利用可能なモデルがありません","No models available in this category":"このカテゴリにはモデルがありません","No models available. Create your first model to get started.":"利用可能なモデルがありません。最初のモデルを作成して開始してください。","No models can be synced with the current filters. Adjust the search or sync scope.":"現在の条件では同期可能なモデルがありません。検索条件または同期範囲を変更してください。","No models configured. Use Add model to get started.":"モデルが設定されていません。モデルを追加して開始してください。","No models fetched from upstream":"アップストリームからモデルを取得できませんでした","No models fetched yet.":"まだモデルはフェッチされていません。","No models found":"モデルが見つかりません","No Models Found":"モデルが見つかりません","No models found.":"モデルが見つかりません。","No models match the selected filters":"条件に一致するモデルはありません","No models match these filters":"条件に一致するモデルはありません","No valid upstream channel":"有効な上流チャネルがありません","No models match your current filters.":"現在のフィルターに一致するモデルはありません。","No models match your search":"検索に一致するモデルがありません","No models matched your search.":"検索条件に一致するモデルはありません。","No models returned by the upstream":"上流からモデルが返されませんでした","No models selected":"モデルが選択されていません","No models to add":"追加するモデルがありません","No models to copy":"コピーするモデルがありません","No models to remove":"削除するモデルがありません","No models with unset prices":"価格未設定のモデルはありません","No new models to add":"追加する新しいモデルはありません","No new models yet":"新しいモデルはまだありません","No newer version available.":"より新しいバージョンはありません。","No nodes":"ノードなし","No notable climbers right now":"現在、目立った上昇はありません","No notable drops right now":"現在、目立った下降はありません","No parameter overrides configured.":"パラメータのオーバーライドが設定されていません。","No Passkey is registered.":"Passkeyが登録されていません。","No payment methods available. Please contact administrator.":"利用可能な支払い方法がありません。管理者に連絡してください。","No payment methods configured":"決済方法が設定されていません","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"支払い方法が設定されていません。「メソッドを追加」をクリックするか、テンプレートを使用して開始してください。","No payment methods match your search":"検索に一致する支払い方法がありません","No performance data available":"利用可能なパフォーマンスデータはありません","No permission to perform this action":"この操作を実行する権限がありません","No plans available":"利用可能なプランがありません","No plugins available for binding":"紐付け可能なプラグインがありません","No preceding rule matched":"先行するルールに一致しない場合","No preference":"設定なし","No prefill groups yet":"まだ事前入力グループはありません","Not implemented yet":"まだ実装されていません","No price differences found":"価格差異は見つかりませんでした","No processable upstream model updates for this channel":"このチャネルには処理可能な上流モデル更新がありません","No products configured. Click \\"Add product\\" to get started.":"製品が設定されていません。「製品を追加」をクリックして開始してください。","No products match your search":"検索に一致する製品がありません","Not logged in":"ログインしていません","No providers available":"利用可能なプロバイダーがありません","No Quota":"クォータなし","No quota limit":"上限なし","No ratio differences found":"比率の差異は見つかりませんでした","No recent usage":"最近の使用なし","No records":"記録がありません","No records found. Try adjusting your filters.":"記録が見つかりません。フィルターを調整してみてください。","No redemption codes available. Create your first redemption code to get started.":"利用可能な引き換えコードがありません。最初の引き換えコードを作成して開始してください。","No Redemption Codes Found":"引き換えコードが見つかりません","No related models available for this channel type":"このチャネルタイプに関連するモデルが利用できません","No release notes provided.":"リリースノートは提供されていません。","No releases found.":"利用可能なリリースが見つかりません。","No Reset":"リセットなし","No reset credits":"リセット回数はありません","No reset credits available":"利用可能なリセット回数がありません","No restriction":"制限なし","No results for \\"{{query}}\\". Try adjusting your search or filters.":"\\"{{query}}\\" の結果が見つかりません。検索条件やフィルターを調整してみてください。","No results found":"検索結果がありません","No results found.":"結果が見つかりません。","No Retry":"リトライなし","No rule for vip billed as default → use the base ratio of default, 1.0 (the 0.8 of vip is not used)":"「vip が default として課金」のルールなし → default の基本倍率 1.0 を使用(vip 自身の 0.8 は使われない)","No rule for vip billed as vip → use the base ratio of vip, 0.8":"「vip が vip として課金」のルールなし → vip の基本倍率 0.8 を使用","No rules yet":"ルールがありません","No rules yet. Add a group below to get started.":"まだルールがありません。下にグループを追加して開始してください。","No separate media pricing configured.":"個別のメディア料金は設定されていません。","No source available":"ソースコードはありません","No source changes":"ソースコードに変更はありません","No special ratios configured":"特別倍率が未設定です","No status code mappings configured.":"ステータスコードのマッピングが設定されていません。","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"このマーチャントにはまだストアがありません。戻り URL を設定し、作成をクリックして最初のペアを作成してください。","No subscription plans yet":"サブスクリプションプランがありません","No subscription records":"サブスクリプション記録がありません","No Sync":"同期なし","No syncable models":"同期可能なモデルはありません","No system announcements":"システムのお知らせがありません","No system tasks yet.":"システムタスクはまだありません。","No task plugins found":"タスクプラグインがありません","No token found.":"トークンが見つかりません。","No tools configured":"ツールが未設定です","No Upgrade":"アップグレードなし","No upstream price differences found":"上流価格の差異は見つかりませんでした","No upstream ratio differences found":"アップストリームの比率の差は見つかりません","Notifications to receive":"受け取る通知","OAuth provider not found":"OAuth プロバイダーが見つかりません","No uptime data available":"稼働率データがありません","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"Uptime Kumaグループはまだありません。「グループを追加」をクリックして作成してください。","No uptime monitoring configured":"アップタイム監視が設定されていません","No usage logs available. Logs will appear here once API calls are made.":"使用ログはありません。API呼び出し後にログがここに表示されます。","No user information available":"ユーザー情報はありません","No user selected":"ユーザーが選択されていません","No users":"ユーザーなし","No users available. Try adjusting your search or filters.":"利用可能なユーザーがいません。検索またはフィルターを調整してみてください。","No Users Found":"ユーザーが見つかりません","No valid custom Auto groups remain. Add a group or restore global Auto.":"有効なカスタム Auto グループがありません。グループを追加するか、グローバル Auto に戻してください。","No vendor":"ベンダー未指定","No vendor data available":"ベンダーデータがありません","No vendors found":"プロバイダーが見つかりません","No verification method is available for this action.":"この操作に利用できる確認方法がありません。","No version history":"バージョン履歴はありません","No X Found":"X が見つかりません","Node":"ノード","Node filters":"ノードフィルター","Node Name":"ノード名","Node role":"ノードの役割","Nodes reporting from this deployment and their latest heartbeat.":"このデプロイから報告されたノードと最新のハートビート。","Non-stream":"非ストリーミング","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"0 以外の招待報酬には、支払いゲートウェイ設定でのコンプライアンス確認が必要です。","None":"なし","None (plugin declaration)":"なし(プラグインの宣言)","noreply@example.com":"noreply@example.com","Normalized:":"正規化:","Not available":"利用できません","Not backed up":"未バックアップ","Not bound":"未バインド","OIDC ID is empty!":"OIDC ID が空です!","Not configured":"未設定","Not configured for some providers":"一部のプロバイダーの料金は未設定です","Not configured for this provider":"このプロバイダーの料金は未設定です","Not declared":"未宣言","Not declared by this plugin":"プラグインによる宣言なし","Not declared; an API key may still be required.":"認証方式の宣言がありません。API キーが必要な場合があります。","Not Equals":"等しくない","Not found upstream":"上流に見つかりません","Not in pricing table":"料金グループ表にありません","Not included":"未登録","Not installed":"未インストール","Not listed":"非表示","Not matched":"不一致","Online top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"オンラインチャージが完了しました。追加額:{{quota}}、支払額:{{amount}}","Not provided by this source":"このソースでは提供されていません","Not recorded":"記録なし","Not registered":"未登録","Not set":"未設定","Not Set":"未設定","Not set yet":"未設定","Not shown":"非表示","Not Started":"未開始","Not Submitted":"未送信","Not tested":"未テスト","Not used for upstream training by default":"デフォルトで上流の学習には使用されません","Not used yet":"未使用","Note":"注記","Notice":"通知","Notification Email":"通知メール","Notification Method":"通知方法","Notifications":"通知","Now a user whose user group is vip creates tokens with different groups and makes one call with each:":"ここで、ユーザーグループが vip のユーザーが異なるグループのトークンを作成し、それぞれ1回ずつ呼び出します:","Nucleus sampling probability mass":"核サンプリングの累積確率","Number":"数値","Number of codes to create":"作成するコードの数","Number of completions to generate":"生成する候補数","Number of images to generate":"生成する画像枚数","Number of keys to create":"作成するキーの数","Number of times to retry failed requests (0-10)":"失敗したリクエストを再試行する回数 (0-10)","Number of tokens per unit quota":"単位クォータあたりのトークン数","Number of top log probabilities returned per token":"トークンごとに返される上位対数確率の数","Number of users invited":"招待されたユーザー数","OAuth":"OAuth","OAuth 2.0 service account":"OAuth 2.0 サービスアカウント","OAuth authorization timed out. Please try again.":"OAuth認可がタイムアウトしました。もう一度お試しください。","OAuth authorization was cancelled.":"OAuth認可がキャンセルされました。","OAuth binding timed out. Please try again.":"OAuth 連携がタイムアウトしました。もう一度お試しください。","OAuth binding window is no longer available":"OAuth 連携ウィンドウは利用できなくなりました","OAuth callback URL":"OAuth コールバック URL","OAuth Client ID":"OAuthクライアントID","OAuth Client Secret":"OAuthクライアントシークレット","OAuth failed":"OAuth に失敗しました","OAuth Integrations":"OAuth連携","OAuth pop-up was blocked":"OAuth ポップアップがブロックされました","OAuth popup storage is unavailable.":"OAuthポップアップのストレージを利用できません。","OAuth window is no longer available.":"OAuthウィンドウを利用できなくなりました。","Object Prune Rules":"オブジェクト削除ルール","Observability":"可観測性","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"Waffoダッシュボードから APIキー、マーチャントID、RSAキーペアを取得し、コールバックURLを設定してください。","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: /api/waffo-pancake/webhook":"Waffo ダッシュボードでマーチャント、ストア、プロダクト、署名用キーを取得してください。Webhook URL: /api/waffo-pancake/webhook","Ocean Breeze":"オーシャンブリーズ","of":"件、合計","of 3:":"3のうち:","off":"オフ","Official":"公式","Official Claude Messages":"公式 Claude Messages","Official documentation":"公式ドキュメント","Official Gemini from OpenAI Chat":"OpenAI Chat から公式 Gemini","Official Gemini Native":"公式 Gemini ネイティブ","Official OpenAI Chat":"公式 OpenAI Chat","Official OpenAI Embeddings":"公式 OpenAI Embeddings","Official OpenAI Images":"公式 OpenAI Images","Official OpenAI Responses":"公式 OpenAI Responses","Official pricing preset":"公式料金プリセット","Official Repository":"公式リポジトリ","Official Sync":"公式同期","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"OIDCクライアントID","OIDC Client Secret":"OIDCクライアントシークレット","OIDC configuration fetched successfully":"OIDC 設定が正常に取得されました","OIDC discovery can fill the endpoint fields automatically when the provider supports it.":"プロバイダーが対応している場合、OIDC Discovery でエンドポイント項目を自動入力できます。","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"OIDCディスカバリーURL。「自動検出」をクリックすると、エンドポイントを自動的に取得します。","OIDC Display Name":"OIDC 表示名","OIDC endpoints discovered successfully":"OIDCエンドポイントの検出に成功しました","Old Format Template":"旧形式テンプレート","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"旧形式: 直接上書き。新形式: 条件判定とカスタムJSON操作をサポートします。","Ollama":"Ollama","Ollama Models":"Ollamaモデル","One API":"1つのAPI","One domain per line":"1行に1つのドメイン","One domain per line (only used when domain restriction is enabled)":"1行に1つのドメイン (ドメイン制限が有効な場合のみ使用されます)","One IP or CIDR range per line":"1行に1つのIPまたはCIDR範囲","One IP per line (empty for no restriction)":"1行に1つのIP (制限なしの場合は空欄)","one keyword per line":"1行に1つのキーワード","online":"オンライン","Online":"オンライン","Online payment is not enabled. Please contact the administrator.":"オンライン決済が有効になっていません。管理者にお問い合わせください。","Online topup is not enabled. Please use redemption code or contact administrator.":"オンラインチャージは有効になっていません。引き換えコードを使用するか、管理者に連絡してください。","Only allow specific email domains":"特定のEメール ドメインのみを許可する","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"管理者のみ利用可能です。有効にすると、スケジュールされたモデルチェックでアップストリームモデルの変更やチェック失敗が検出された際に、選択した方法で概要通知を受け取ります。","Only available for exact matching":"完全一致のみ","Only configured combinations are overridden. All other calls keep the billing group base ratio.":"設定された組み合わせだけが上書きされます。それ以外の呼び出しは課金グループの基本倍率のままです。","Only configured combinations are overridden. All other calls keep the token group base ratio.":"設定済みの組み合わせだけが上書きされます。他の呼び出しはトークングループの基本倍率を維持します。","Only enabled parameters are sent with the request.":"有効なパラメータだけがリクエストに送信されます。","Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.":"サイトのオリジンのみを入力してください。例: https://api.example.com。/api/user/epay/notify などのパスは含めないでください。空欄の場合はサーバーアドレスを使用します。","Only exact model names are removed from enabled and disabled channels. Matching rules are not expanded, and channel records are retained.":"有効・無効を問わず、すべてのチャネルから完全に一致するモデル名のみを削除します。マッチングルールは展開せず、チャネル自体は保持します。","Only Mine":"自分のみ","Only one catch-all route is allowed for the same incoming path":"同じ入力パスではキャッチオールルートは1つだけ許可されます","Order is not pending payment and cannot be completed":"注文が支払い待ちではないため、完了できません","Order number not provided":"注文番号が指定されていません","Only one OpenAI Models route is allowed":"OpenAI モデルルートは 1 つだけ設定できます","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.":"選択されたフィールドのみが上書きされます。新しい競合が発生した場合は、同期ウィザードを再実行できます。","Only show syncable models":"同期可能なモデルのみ表示","Only successful requests":"成功したリクエストのみ","Only successful requests count toward this limit.":"成功したリクエストのみがこの制限にカウントされます。","Only the changes listed here will be committed. If any write fails, none of these changes are applied.":"ここに記載した変更のみを保存します。書き込みが一つでも失敗すると、すべての変更を取り消します。","Only the first {{shown}} IDs were recorded":"先頭の {{shown}} 件の ID のみ記録されています","Only the first {{shown}} IDs were recorded ({{total}} requested)":"先頭の {{shown}} 件のみ記録されています(リクエスト:{{total}} 件)","Only the last {{value}} log files will be retained; the rest will be deleted.":"最新の{{value}}個のログファイルのみ保持され、残りは削除されます。","Only used to find historical logs. New records are available in Audit Logs.":"過去のログの検索専用です。新しい記録は監査ログで確認できます。","Oops! Page Not Found!":"おっと!ページが見つかりません!","Oops! Something went wrong":"おっと!何か問題が発生しました","Open":"開く","Open a source model first":"先にソースモデルを開いてください","Open CC Switch":"CC Switch を開く","Open filtered model list":"絞り込んだモデル一覧を開く","Open in chat":"チャットで開く","Open in new tab":"新しいタブで開く","Open in New Tab":"新しいタブで開く","Open menu":"メニューを開く","Open Query Balance to view the upstream JSON response":"「残高照会」を開いて上流の JSON レスポンスを確認してください","Open release":"リリースを開く","Open source":"オープンソース","Open Source":"オープンソース","Open the io.net console API Keys page":"io.netコンソールAPIキーページを開く","Open theme settings":"テーマ設定を開く","Open weights":"公開ウェイト","OpenAI":"OpenAI","OpenAI Chat Completions":"OpenAI チャット補完","OpenAI Chat to Anthropic Messages":"OpenAI Chat から Anthropic Messages","OpenAI Chat to Gemini Generate Content":"OpenAI Chat から Gemini Generate Content","OpenAI Chat to OpenAI Responses":"OpenAI Chat から OpenAI Responses","OpenAI Compatible":"OpenAI互換","OpenAI Compatible Upstream":"OpenAI 互換アップストリーム","OpenAI Models route does not support client model rules":"OpenAI モデルルートはクライアントモデルルールに対応していません","OpenAI Models route does not support pass-through":"OpenAI モデルルートはパススルーに対応していません","OpenAI Models route is required to enable upstream model checks":"アップストリームモデルの確認を有効にするには OpenAI モデルルートが必要です","OpenAI Models route must use native forwarding":"OpenAI モデルルートではネイティブ転送を使用する必要があります","OpenAI Models upstream path must not contain {model}":"OpenAI モデルのアップストリームパスに {model} を含めることはできません","OpenAI only":"OpenAI のみ","OpenAI Organization":"OpenAI組織","OpenAI Organization ID (optional)":"OpenAI 組織 ID (オプション)","OpenAI Responses to Gemini Generate Content":"OpenAI Responses から Gemini Generate Content","OpenAI Responses to OpenAI Chat":"OpenAI Responses から OpenAI Chat","OpenAI, Anthropic, etc.":"OpenAI、Anthropicなど","OpenAI, Anthropic, Google, etc.":"OpenAI、Anthropic、Googleなど","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"外部クライアントで開きます。サイドバーまたはAPIキーアクションからトリガーして、設定されたアプリケーションを起動します。","Operate channels":"チャネルを運用","Operation":"操作","operation and charging behavior":"運用および課金行為に起因する法的責任を負うことを確認します","Operation audit":"操作監査","Operation Audit Info":"操作監査情報","Operation cancelled":"操作がキャンセルされました","Operation failed":"操作に失敗しました","Operation successful":"操作が成功しました","Operation Type":"操作タイプ","Operations":"運用","Operator":"操作者","Operator Admin":"オペレーター管理","Optimize system for self-hosted single-user usage":"セルフホスト型の単一ユーザー使用向けにシステムを最適化する","Optimized network architecture ensures millisecond response times":"最適化されたネットワークアーキテクチャによりミリ秒単位の応答時間を保証","Optional callback override. Leave blank to use server address":"オプションのコールバック上書き。サーバーアドレスを使用するには空欄のままにします","Optional icon identifier for the login button":"ログインボタン用のオプションのアイコン識別子","Optional icon.svg or icon.png shipped next to plugin.js, up to 512 KiB. Stored separately from the source.":"任意。plugin.js と同じ階層の icon.svg または icon.png(最大 512 KiB)。ソースとは別に保存されます。","Optional JSON policy to restrict access based on user info fields":"ユーザー情報フィールドに基づいてアクセスを制限するためのオプションのJSONポリシー","Optional minimum recharge amount for this method.":"この方法のオプションの最小チャージ額。","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"チャージ料金を計算する際に使用されるユーザーグループごとのオプションの乗数。次のようなJSONオブジェクトを提供してください","Optional note describing this version":"このバージョンを説明する任意のメモ","Optional notes about this channel":"このチャネルに関するオプションのノート","Optional notes about when to use this group":"このグループを使用する時期に関するオプションのメモ","Optional ratio used when upstream cache hits occur.":"アップストリームキャッシュヒットが発生したときに使用されるオプションの比率。","Optional request-rule multiplier expression. Leave empty when no request rule applies.":"任意のリクエストルール乗数式です。ルールがない場合は空欄にしてください。","Optional rule description":"任意のルール説明","Optional settings for advanced container configuration.":"高度なコンテナ設定のためのオプション設定。","Optional supplementary information (max 100 characters)":"オプションの補足情報 (最大100文字)","Optional tag for grouping channels":"チャネルをグループ化するためのオプションのタグ","Optional. Without it, Google picks the region; with it, requests go to the deployment region below.":"任意。未入力の場合は Google がリージョンを選びます。入力すると、下のデプロイリージョンにリクエストを送信します。","Opus Model":"Opus モデル","Or continue with":"または、以下で続行","Or enter this key manually:":"または、このキーを手動で入力してください:","or pick existing":"または既存のものを選択","Order completed successfully":"注文が正常に完了しました","Order History":"注文履歴","Order Payment Method":"注文の支払い方法","org-...":"org-...","Original Model":"オリジナルモデル","Original value":"元の値","Other":"その他","Other cases":"その他の場合","Other channels":"その他のチャネル","Other groups":"その他のグループ","Other models":"その他のモデル","Other nodes":"その他のノード","Other sessions signed out":"他のセッションからサインアウトしました","Other Settings":"その他の設定","Other tokens":"その他のトークン","Other users":"その他のユーザー","Otherwise (the preceding conditions do not match)":"それ以外(上記の条件を満たさない場合)","Otherwise → {{name}}":"それ以外 → {{name}}","Otherwise the binding is removed.":"オフの場合は関連付けを削除します。","Outage":"ダウンタイム","Output":"出力","Output aspect ratio":"出力アスペクト比","Output image size":"出力画像サイズ","Output price":"出力価格","Output Price: High to Low":"出力価格:高い順","Output Price: Low to High":"出力価格:低い順","Output token price for generated tokens.":"生成された出力トークンの価格。","Output token rate":"出力トークン速度","Output tokens":"出力トークン","Output Tokens":"出力トークン","Outside these times: {{condition}}":"{{condition}}以外の時間帯","Overage limited":"超過利用制限中","overall":"全体","Overflow":"オーバーフロー","Overflow items":"超過項目","override":"上書き","Override":"上書き","Override auto-discovered endpoint":"自動検出されたエンドポイントを上書きする","Override matrix":"上書きマトリクス","Override quota for user “{{name}}”":"ユーザー「{{name}}」のクォータを上書き","Override request headers":"リクエストヘッダーを上書きする","Override request headers (JSON format)":"リクエストヘッダーのオーバーライド (JSON 形式)","Override request parameters":"リクエストパラメータを上書き","Override request parameters (JSON format)":"リクエストパラメータの上書き (JSON形式)","Override request parameters. Cannot override":"リクエストパラメーターを上書きします。上書きできません","Override request parameters. Cannot override stream parameter.":"リクエストパラメータを上書きします。stream パラメータは上書きできません。","Override rule: when a vip user is billed as premium, the ratio is 0.3 instead of 0.5":"上書きルール:vip ユーザーが premium として課金される場合、倍率は 0.5 ではなく 0.3","Override Rules":"上書きルール","Password login has been disabled by administrator":"管理者によりパスワードログインが無効化されています","Override the endpoint used for testing. Leave empty to auto detect.":"テストに使用されるエンドポイントを上書きします。自動検出するには空のままにします。","Override user quota":"ユーザーのクォータを上書き","overrides for matching model prefix.":"は一致するモデル接頭辞に上書きします。","Overrode user quota from {{from}} to {{to}}":"ユーザーのクォータを {{from}} から {{to}} に上書きしました","Overview":"概要","Password registration has been disabled by administrator, please use third-party account verification":"管理者によりパスワードでの登録が無効化されています。外部アカウント認証で登録してください","Overwritten":"上書き済み","Password reset link is invalid or has expired":"パスワード再設定リンクが無効か、期限切れです","Page":"ページ","Page {{current}} of {{total}}":"{{total}} ページ中 {{current}} ページ目","PaLM":"PaLM","Pan":"パン","Pancake":"Pancake","Param Override":"パラメータ上書き","Parameter":"パラメータ","Parameter configuration error":"パラメータ設定エラー","Parameter Override":"パラメータのオーバーライド","Parameter override and system prompt are unavailable":"パラメータ上書きとシステムプロンプトは使用できません","Parameter override must be a valid JSON object":"パラメータオーバーライドは有効なJSONオブジェクトである必要があります","Parameter override must be valid JSON format":"パラメータオーバーライドは有効なJSON形式である必要があります","Parameter Override Template (JSON)":"パラメータオーバーライドテンプレート (JSON)","Parameter override template must be a JSON object":"パラメータオーバーライドテンプレートはJSONオブジェクトである必要があります","Parameter settings":"パラメータ設定","parameter.":"パラメーター。","Parameters":"パラメータ","Parsed {{count}} service account file(s)":"__ PH_0 __サービスアカウントファイルを解析しました","Pause drag demo":"ドラッグのデモを一時停止","Payment amount is too low":"支払金額が低すぎます","Payment cancel redirect URL is not in the trusted domain list":"支払いキャンセル時のリダイレクト URL が信頼済みドメインの一覧にありません","Parsed plugin metadata":"解析されたプラグインメタデータ","Payment configuration error":"支払い設定エラー","Partial Submission":"部分送信","Payment information has not been configured by administrator":"管理者が支払い情報を設定していません","Partly shown":"一部表示","Pass Headers":"ヘッダーをパススルー","Payment method does not exist":"支払い方法が存在しません","Pass specified request headers to upstream":"指定のリクエストヘッダーを上流に透過","Pass Through Body":"ボディをパススルー","Pass Through Headers":"ヘッダー透過","Pass Through Request Headers":"リクエストヘッダーをパススルー","Pass through the anthropic-beta header for beta features":"ベータ機能用に anthropic-beta ヘッダーをパススルー","Pass through the include field for usage obfuscation":"使用量難読化用に include フィールドをパススルー","Pass through the inference_geo field for Claude data residency region control":"Claude データ駐留推論リージョン制御用に inference_geo フィールドをパススルー","Pass through the inference_geo field for geographic routing":"地理的ルーティング用に inference_geo フィールドをパススルー","Pass through the safety_identifier field":"SAFETY_IDENTIFIERフィールドを通過する","Pass through the service_tier field":"SERVICE_TIERフィールドを通過する","Pass through the speed field for Claude inference speed mode control":"Claude 推論速度モード制御用に speed フィールドをパススルー","Pass when key is missing":"キーがない場合は通過","Payment success redirect URL is not in the trusted domain list":"支払い完了時のリダイレクト URL が信頼済みドメインの一覧にありません","Pass-through":"パススルー","Pass-Through":"パススルー","Pass-through Headers (comma-separated or JSON array)":"パススルーヘッダー(カンマ区切りまたはJSON配列)","Payment, redemption, subscription, and invitation reward features are disabled. The administrator must confirm compliance terms before enabling them.":"支払い、引き換えコード、サブスクリプション、招待報酬の機能は無効です。有効にするには、管理者がコンプライアンス条項を確認する必要があります。","Pass-through help":"パススルーのヘルプ","Pass-through requires native forwarding":"パススルーにはネイティブ転送が必要です","Passive recovery only":"パッシブ復旧のみ","Passkey":"Passkey","Passkey Authentication":"パスキー認証","Passkey authentication is disabled.":"Passkey認証は無効になっています。","Passkey display name":"Passkey の表示名","Passkey domain change blocked: {{domains}}; affected {{known}}; unknown {{unknown}}":"パスキードメインの変更を拒否:{{domains}}、影響あり {{known}}、ドメイン不明 {{unknown}}","Passkey domain update failed":"パスキードメインの更新に失敗しました","Passkey domains":"パスキーのドメイン","Passkey is not available in this browser":"このブラウザではパスキーが利用できません","Passkey is not supported in this environment":"この環境ではパスキーはサポートされていません","Passkey is not supported on this device":"このデバイスではパスキーがサポートされていません","Passkey is not supported on this device.":"このデバイスではパスキーはサポートされていません。","Passkey Login":"Passkeyログイン","Passkey login failed":"パスキーログインに失敗しました","Passkey login was cancelled":"パスキーログインがキャンセルされました","Passkey login was cancelled or timed out":"パスキーログインがキャンセルまたはタイムアウトされました","Passkey not supported on this device":"このデバイスではパスキーはサポートされていません","Passkey registered successfully":"パスキーが正常に登録されました","Passkey registration was cancelled":"パスキーの登録がキャンセルされました","Passkey removed successfully":"パスキーが正常に削除されました","Passkey reset successfully":"パスキーが正常にリセットされました","Passkey verification failed":"Passkey 認証に失敗しました","Passkey verification is not available in the current state":"現在の状態では Passkey 認証を利用できません","Passkey verification is not supported in this environment":"この環境では Passkey 認証をサポートしていません","Passkey verification was cancelled":"Passkey 認証がキャンセルされました","Passkey verification was cancelled or timed out":"Passkey 認証がキャンセルされたか、タイムアウトしました","Passkey website domain":"Passkey を使うサイトのドメイン","Passkeys for removed domains will stop working. Confirm only if affected users can sign in another way.":"削除したドメインのパスキーは使えなくなります。対象ユーザーが別の方法でログインできる場合のみ確定してください。","Passkeys known to use removed domains: {{amount}}":"削除するドメインを使用しているパスキー:{{amount}}","Passkeys only work on the website they were created for. This helps prevent other websites from misusing them.":"Passkey は作成したサイトでのみ使えます。他のサイトでの悪用を防ぐためです。","Passkeys with an unknown domain that may be affected: {{amount}}":"ドメインが不明で影響を受ける可能性があるパスキー:{{amount}}","Passthrough Template":"透過テンプレート","Password":"パスワード","Password / Access Token":"パスワード / アクセストークン","Password authentication is disabled.":"パスワード認証は無効になっています。","Password changed successfully":"パスワードが正常に変更されました","Password copied to clipboard: {{password}}":"パスワードがクリップボードにコピーされました:{{password}}","Password has been copied to clipboard":"パスワードがクリップボードにコピーされました","Password Login":"パスワードログイン","Password must be at least 8 characters":"パスワードは少なくとも8文字である必要があります","Password must be at most 20 characters long":"パスワードは20文字以内で入力してください","Password must be between 8 and 20 characters":"パスワードは8文字以上20文字以下である必要があります","Password must contain between 8 and 128 characters.":"パスワードは8~128文字で入力してください。","Password Registration":"パスワード登録","Password reset and copied to clipboard: {{password}}":"パスワードがリセットされ、クリップボードにコピーされました:{{password}}","Password reset: {{password}}":"パスワードがリセットされました:{{password}}","Password set successfully":"パスワードを設定しました","Password settings have changed. Reload the page and try again.":"パスワード設定が変わりました。ページを再読み込みしてお試しください。","Passwords do not match":"パスワードが一致しません","Passwords don\'t match.":"パスワードが一致しません。","Paste Connection Info":"接続情報を貼り付け","Paste JavaScript source here...":"JavaScript ソースを貼り付け...","Path":"パス","Path not set":"パス未設定","Path Regex (one per line)":"パス正規表現(1行に1つ)","Path:":"パス:","Pay":"Pay","Pay {{amount}}":"支払額 {{amount}}","Per-request Price: High to Low":"リクエスト単価:高い順","Per-request Price: Low to High":"リクエスト単価:低い順","Plan amount is too low":"プランの金額が低すぎます","Pay {{amount}} • Save {{saved}}":"支払額 {{amount}} • {{saved}} お得","Pay with Balance":"残高で支払う","Plan name cannot be empty":"プラン名を入力してください","Pay-as-you-go with real-time usage monitoring":"リアルタイム使用量監視付き従量課金制","Plan price cannot be empty":"プランの価格を入力してください","Payment":"支払い","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"決済アグリゲーターモード — 自社の登録済み法人(オフショア法人)でオンボーディングします。エンタープライズ向けです。","Payment Channel":"決済チャネル","Payment Gateway":"決済ゲートウェイ","Payment initiated":"支払いが開始されました","Payment Method":"チャージ方法","Payment method identifier":"決済方法の識別子","Payment method identifier is required":"決済方法の識別子は必須です","Payment method name":"決済方法名","Payment method name is required":"決済方法名は必須です","Payment method type":"決済方法タイプ","Payment method type is required":"支払い方法のタイプは必須です","Payment methods":"支払方法","Payment Methods":"決済方法","Please confirm the compliance statement":"コンプライアンス声明を確認してください","Payment page opened":"決済ページが開きました","Payment request failed":"支払いリクエストが失敗しました","Payment return URL":"決済完了後のリダイレクトURL","Payment return URL is empty. Create the product without a SuccessURL redirect?":"支払い戻り URL が空です。SuccessURL リダイレクトなしで商品を作成しますか?","Payment type key":"支払いタイプキー","Payment type key is required":"支払いタイプキーは必須です","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"ルート管理者がコンプライアンス条件を確認するまで、支払い、引換コード、サブスクリプションプラン、招待報酬はロックされます。","Peak":"ピーク","Peak KV cache usage":"最大 KV キャッシュ使用率","Peak throughput":"ピークスループット","Peak token pool usage":"トークンプールの最大使用率","Penalises repetition of frequent tokens":"頻出トークンの繰り返しを抑制します","pending":"保留中","Pending":"保留中","per":"あたり","Per 1K tokens":"1Kトークンあたり","Per 1M tokens":"1Mトークンあたり","Per image":"画像1枚あたり","Per matched model":"一致したモデルごと","per request":"リクエストごと","Per request":"リクエストごと","Per Request":"リクエストごと","Per Second":"秒単位","Per token":"トークン単位","Per Unit":"単位ごと","Per-call":"呼び出しごと","Per-feature metered windows split by model or capability.":"機能ごとの従量制ウィンドウ。モデルまたは能力別に分かれます。","Per-group performance":"グループ別パフォーマンス","Per-request":"リクエスト単位","Per-request (deprecated)":"リクエスト単位(非推奨)","Per-request (fixed price)":"リクエストごと (固定価格)","Per-token":"トークン単位","Per-token (deprecated)":"トークン単位(非推奨)","Per-token (ratio based)":"トークンごと (比率ベース)","Per-token logit bias map":"トークンごとの logit バイアス","Percentage:":"パーセンテージ:","Performance":"パフォーマンス","Please select a product":"商品を選択してください","Performance data is not yet available for this model.":"このモデルのパフォーマンスデータはまだ利用できません。","Performance health":"パフォーマンス状態","Performance metrics for the last 24 hours":"直近24時間のパフォーマンス指標","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"ここに表示されているパフォーマンス指標はプレビュー用のシミュレーションデータです。バックエンド連携の完了後、実データに置き換えられます。","Performance Monitor":"パフォーマンス監視","Performance Settings":"パフォーマンス設定","Performed {{action}} on user {{username}} (ID: {{id}})":"ユーザー {{username}}(ID: {{id}})に対して {{action}} を実行しました","Period":"期間","Periodically check for upstream model changes":"アップストリームモデルの変更を定期的にチェック","Periodically checks all channels except manually disabled ones to detect failures and recover channels automatically.":"手動で無効化されたものを除くすべてのチャネルを定期チェックし、障害の検出と自動復旧を行います。","Periodically checks only channels with auto-disable enabled, excluding manually disabled channels.":"自動無効化が有効なチャネルのみを定期チェックします。手動で無効化されたチャネルは対象外です。","Periodically send ping frames to keep streaming connections active.":"ストリーミング接続をアクティブに保つために、定期的にpingフレームを送信します。","Permanently delete your account and all data":"アカウントとすべてのデータを永久に削除","Permissions":"権限","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"非HTTPSオリジンでのパスキー登録を許可する(開発でのみ推奨)","Please wait {{seconds}} seconds before requesting another verification code.":"確認コードを再度リクエストするには {{seconds}} 秒お待ちください。","Perplexity":"Perplexity","Persist your data file":"データファイルを永続化する","Personal":"個人","Personal area":"個人エリア","Personal Center Area":"パーソナルセンターエリア","Personal info settings":"個人情報設定","Personal Settings":"個人設定","Personal settings and profile management.":"個人設定とプロフィール管理。","Personal use":"個人利用","Personal use mode":"個人利用モード","Pick a date":"日付を選択","Pick models and derive the other side with a rule to create request-to-upstream mappings.":"モデルを選択し、ルールでもう一方の名前を生成して「リクエスト → 上流」のマッピングを作成します。","Pick or create both a store and a product before saving.":"保存する前に、ストアと商品の両方を選択または作成してください。","Ping Interval (seconds)":"Ping間隔(秒)","Plan":"プラン","Plugin metadata contains an unknown field \\"{{field}}\\". If this plugin was downloaded from the official marketplace, it may require a newer version of new-api. Try updating new-api and installing the plugin again.":"プラグインのメタデータに不明なフィールド「{{field}}」が含まれています。公式マーケットプレイスから入手したプラグインの場合、より新しいバージョンの new-api が必要な可能性があります。new-api を更新してから、プラグインを再インストールしてください。","Plan ID":"プラン ID","Plan Name":"プラン名","Plan Price":"プラン価格","Plan price must be greater than zero":"プラン価格は 0 より大きい必要があります","Plan Quota":"プランのクォータ","Plan Subtitle":"プランサブタイトル","Plan Title":"プラン名","Plan title is required":"プランタイトルは必須です","Planned action":"予定する操作","Planned maintenance on Friday at 22:00 UTC...":"金曜日 22:00 UTC に計画メンテナンスがあります...","Platform":"プラットフォーム","Playground":"プレイグラウンド","Playground and chat functions":"プレイグラウンドとチャット機能","Playground experiments and live conversations.":"Playgroundの実験とライブ会話。","Please agree to the legal terms first":"先に利用規約に同意してください","Please complete the security check to continue.":"続行するにはセキュリティチェックを完了してください。","Please confirm that you understand the consequences":"結果を理解したことを確認してください","Please confirm your password":"パスワードを確認してください","Possibly an upstream timeout":"上流のタイムアウトの可能性があります","Please enable io.net model deployment service and configure an API key in System Settings.":"システム設定で io.net モデルデプロイサービスを有効にし、API キーを設定してください。","Please enable Two-factor Authentication or Passkey before proceeding":"続行する前に、二要素認証またはパスキーを有効にしてください","Please enter a code.":"コードを入力してください。","Please enter a name":"名前を入力してください","Please enter a new password":"新しいパスワードを入力してください","Please enter a redemption code":"引き換えコードを入力してください","Please enter a valid duration":"有効な期間を入力してください","Please enter a valid email address":"有効なメールアドレスを入力してください","Please enter a valid number":"有効な数値を入力してください","Please enter a Well-Known URL first":"まずWell-Known URLを入力してください","Please enter amount":"金額を入力してください","Please enter an administrator username":"管理者ユーザー名を入力してください","Please enter API key first":"まずAPIキーを入力してください","Please enter chat client name":"チャットクライアント名を入力してください","Please enter email and verification code":"メールアドレスと認証コードを入力してください","Please enter keys first":"まずキーを入力してください","Please enter model name":"サブモデルを入力してください","Please enter plan title":"プラン名を入力してください","Please enter the authentication code.":"認証コードを入力してください。","Please enter the URL":"URLを入力してください","Please enter the verification code":"確認コードを入力してください","Please enter the verification code or backup code":"認証コードまたはバックアップコードを入力してください","Please enter your current password":"現在のパスワードを入力してください","Please enter your email":"メールアドレスを入力してください","Please enter your email first":"まずメールアドレスを入力してください","Please enter your password":"パスワードを入力してください","Please enter your username":"ユーザー名を入力してください","Please enter your username or email":"ユーザー名またはメールアドレスを入力してください","Please enter your verification code":"認証コードを入力してください","Please enter your verification code or backup code":"認証コードまたはバックアップコードを入力してください","Please fix JSON errors before saving":"保存する前に JSON エラーを直してください","Please fix the highlighted fields before saving":"保存する前に強調表示された項目を修正してください","Please log in with the appropriate credentials":"適切な認証情報でログインしてください","Please select a container":"コンテナを選択してください","Please select a payment method":"お支払い方法を選択してください","Please select a primary model":"プライマリモデルを選択してください","Please select a subscription plan":"サブスクリプションプランを選択してください","Please select at least one channel":"少なくとも1つのチャネルを選択してください","Please select at least one model":"少なくとも1つのモデルを選択してください","Please select items to delete":"削除する項目を選択してください","Please Select user groups that can access this channel.":"このチャネルにアクセスできるユーザーグループを選択してください。","Please set Ollama API Base URL first":"最初にOllama APIベースURLを設定してください","Please sign in to view {{module}}.":"{{module}} を表示するにはログインしてください。","Please try again later.":"後でもう一度お試しください。","Please type the following text to confirm:":"確認するには次のテキストを入力してください:","Please upload key file(s)":"キーファイルをアップロードしてください","Please wait a moment before trying again.":"しばらく待ってからもう一度お試しください。","Please wait a moment, human check is initializing...":"しばらくお待ちください、人間チェックを初期化中です...","Please wait before editing to avoid overwriting saved values.":"保存済みの値を上書きしないよう、編集前に読み込み完了をお待ちください。","Please wait before requesting another verification code.":"しばらく待ってから確認コードを再送信してください。","Please wait for the current generation to complete":"現在の生成が完了するまでお待ちください","Plugin":"プラグイン","Plugin activation failed":"プラグインの有効化に失敗しました","Plugin author":"プラグイン作成者","Plugin default":"プラグインの既定値","Plugin details":"プラグインの詳細","Plugin extensions":"プラグイン拡張","Plugin Generation":"プラグイン世代","Plugin icon":"プラグインアイコン","Plugin icon exceeds the 512 KiB limit.":"プラグインアイコンが 512 KiB の上限を超えています。","Plugin icon must be an .svg or .png file.":"プラグインアイコンは .svg または .png ファイルである必要があります。","Plugin indexes are fetched by your browser. Installing runs the same review and admission pipeline as a manual upload.":"プラグインのインデックスはブラウザが取得します。インストール時の確認と受け入れの流れは手動アップロードと全く同じです。","Plugin installation failed":"プラグインのインストールに失敗しました","Plugin is still in use":"プラグインは使用中です","Plugin key":"プラグインキー","Plugin metadata":"プラグインメタデータ","Plugin sandbox":"プラグインサンドボックス","Plugin saved, activation required":"プラグインを保存しました。有効化が必要です","Plugin source":"プラグインソース","Plugin source exceeds the 8 MiB limit.":"プラグインのソースが 8 MiB の上限を超えています。","Plugin uploaded successfully":"プラグインをアップロードしました","Plugin version activated":"プラグインバージョンを有効化しました","Price cannot be negative":"価格を負の値にすることはできません","Price cannot exceed 9999":"価格は 9999 を超えることはできません","Plugin version deleted":"プラグインバージョンを削除しました","Plugin website":"プラグイン公式サイト","Plugin-defined interfaces":"プラグイン独自のインターフェース","Plugins":"プラグイン","Plugins can access channel credentials. Review the source and differences before installing.":"プラグインはチャネルの認証情報にアクセスできます。インストール前にソースコードと差分を確認してください。","Policy JSON":"ポリシーJSON","Polling":"ポーリング","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"ポーリングモードにはRedisとメモリキャッシュが必要です。そうでない場合、パフォーマンスが大幅に低下します","Poor":"悪い","Port":"ポート","Port must be a positive integer":"ポートは正の整数でなければなりません","Position {{position}}":"{{position}} 番目","Post Delta":"事後差額","PostgreSQL detected":"PostgreSQLが検出されました","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL は本番ワークロード向けの高度な信頼性とデータ整合性を提供します。","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQLは強力な信頼性保証を提供します。本番稼働する前に、メンテナンスウィンドウと保持ポリシーを再確認してください。","Power AI applications, manage digital assets, connect the Future":"AIアプリケーションを支え、デジタル資産を管理し、未来をつなぐ","Powerful API Management Platform":"強力なAPI管理プラットフォーム","Pre-Consume for Free Models":"無料モデルの事前消費","Pre-consumed":"事前消費","Pre-Consumed Quota":"事前消費クォータ","Pre-release":"プレリリース","Prefer the original channel, allow switching":"元のチャネルを優先し、切り替えを許可","Preference saved as {{pref}}, but no active subscription. Requests will be rejected.":"設定は{{pref}}として保存されましたが、アクティブなサブスクリプションがありません。リクエストは拒否されます。","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"設定は{{pref}}として保存されましたが、アクティブなサブスクリプションがありません。ウォレットが自動的に使用されます。","Preferences":"環境設定","Prefill Group Management":"プリフィルグループ管理","Prefill Groups":"プリフィルグループ","Prefill groups help you keep complex configurations in sync.":"プリフィルグループは、複雑な設定を同期させるのに役立ちます。","Prefix":"プレフィックス","Prefix cache hit rate":"プレフィックスキャッシュのヒット率","Prefix Match":"プレフィックス一致","Prefix used when displaying prices":"価格表示に使用されるプレフィックス","Prefix/Suffix Text":"プレフィックス/サフィックステキスト","Premium chat models":"プレミアムチャットモデル","Premium plan, half price":"プレミアムプラン、半額","Preparing chat keys…":"チャットキーを準備中…","Preparing conversion...":"変換を準備中…","Preparing your chat link, please try again in a moment.":"チャットリンクを準備中です。しばらくお待ちになってから再度お試しください。","Preparing your chat link…":"チャットリンクを準備中…","Prepend":"先頭に追加","Prepend to Start":"先頭に追加","Prepend value to array / string / object start":"配列/文字列/オブジェクトの先頭に値を追加","Presence Penalty":"存在ペナルティ","Preserve the original field when applying this rule":"このルール適用時に元のフィールドを保持します","Preserve upstream-specific fields when API formats match; bypasses model redirect, parameter override and format conversion":"API 形式が一致し、上流固有のフィールドを保持する必要がある場合に有効化。モデルリダイレクト、パラメーター上書き、形式変換は無効になります","Preset groups":"プリセットグループ","Preset recharge amounts (JSON array)":"プリセットチャージ金額 (JSON配列)","Preset recharge amounts displayed to users":"ユーザーに表示されるプリセットチャージ金額","Preset Template":"プリセットテンプレート","Preset templates":"プリセットのテンプレート","preset.anthropic":"Anthropic","preset.default":"デフォルト","preset.forest-whisper":"フォレストウィスパー","Product configuration error":"商品設定エラー","Product does not exist":"商品が存在しません","preset.lake-view":"レイクビュー","preset.lavender-dream":"ラベンダードリーム","preset.ocean-breeze":"オーシャンブリーズ","preset.rose-garden":"ローズガーデン","preset.simple-large":"特大フォント・シンプル","preset.sunset-glow":"サンセットグロウ","preset.underground":"アンダーグラウンド","Press Enter or comma to add tags":"Enterキーまたはコンマを押してタグを追加","Press Enter to use \\"{{value}}\\"":"Enter キーを押して「{{value}}」を使用","Prevent server-side request forgery attacks":"サーバーサイドリクエストフォージェリ攻撃を防ぐ","Preview":"プレビュー","Preview again":"再プレビュー","Preview changes":"変更をプレビュー","Preview excludes group ratios and request rule multipliers.":"プレビューにはグループ倍率とリクエストルールの倍率は含まれません。","Preview fields":"項目をプレビュー","Preview is unavailable for custom expressions.":"カスタム式はプレビューできません。","Preview metadata first":"先にメタデータをプレビューしてください","Preview price changes":"料金変更をプレビュー","Preview pricing conversion":"料金変換のプレビュー","Preview selected changes":"選択した変更をプレビュー","Preview unavailable":"プレビューを利用できません","Preview upstream model changes":"上流モデルの変更をプレビュー","Previous":"前へ","Previous branch":"前のブランチ","Previous page":"前のページ","Previous permissions":"変更前の権限","Previous value":"以前の値","Price":"価格","Price ($/1K calls)":"価格($/1K 回)","Price (local currency / USD)":"価格 (現地通貨 / USD)","Price display":"価格表示","Price display mode":"価格表示モード","Price estimation":"料金見積もり","Price estimation description":"ハードウェアタイプ、デプロイ場所、レプリカ数などを設定すると、料金が自動的に計算されます。","Price examples":"価格例","Price ID":"価格 ID","Price mode (USD per 1M tokens)":"価格モード (100万トークンあたりのUSD)","Price per image":"画像1枚あたりの料金","Price per request":"リクエスト単価","Price source":"価格の取得元","Price summary":"価格概要","price_xxx":"price_xxx","Price:":"価格:","Prices are in {{currency}}, with units shown below. Use USD when editing expressions directly.":"価格は{{currency}}で入力してください。単位は下に表示されています。式を直接編集する場合は米ドルを使用してください。","Prices changed while preparing the conversion. Try again.":"変換の準備中に価格が変更されました。もう一度お試しください。","Prices for each set of conditions":"各条件に対応する料金","Prices shown per":"価格表示単位","Prices shown per {{unit}} tokens":"{{unit}} トークンあたりの価格","Prices shown per usage unit":"使用単位ごとの価格を表示","Prices synced successfully":"価格が正常に同期されました","Prices vary by usage tier and request conditions":"価格は利用ティアとリクエスト条件で変動します","Pricing":"価格設定","Pricing & Display":"価格設定と表示","Pricing by condition":"条件別料金","Pricing by Group":"グループ別価格設定","Pricing conditions":"料金条件","Pricing Configuration":"価格設定","Purchase limit cannot be negative":"購入上限を負の値にすることはできません","Purchase limit for this plan has been reached":"このプランの購入上限に達しました","Pricing currency":"価格設定の通貨","Pricing group example":"料金グループの例","Pricing groups":"料金グループ","Pricing mode":"価格モード","Quality {{quality}}":"品質 {{quality}}","Pricing must be a JSON object":"料金設定は JSON オブジェクトで指定してください","Pricing Ratios":"価格比率","Pricing rule {{number}}":"料金ルール {{number}}","Pricing rules":"料金ルール","Pricing tier {{name}}":"料金段階 {{name}}","Pricing Type":"価格タイプ","Primary Model":"プライマリモデル","Primary Passkey domain":"メインドメイン","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"リクエストコンテキストから抽出したキーに基づいて、前回成功したチャネルを優先的に再利用します(スティッキールーティング)","Priority":"優先度","Priority (Default)":"優先度 (デフォルト)","Priority level from 0 (lowest) to 10 (highest), default is 5":"優先度レベル (0が最低、10が最高、デフォルトは5)","Priority order for automatic group assignment. New tokens rotate through this list.":"自動グループ割り当ての優先順位。新しいトークンはこのリストをローテーションします。","Priority order for tokens in the auto group. The system tries groups from top to bottom.":"auto グループのトークンの優先順位。システムは上から順にグループを試します。","Privacy":"プライバシー","Privacy Policy":"プライバシーポリシー","Private Deployment URL":"プライベートデプロイメントURL","Processed requests":"処理済みリクエスト","Processing OAuth response...":"OAuth応答を処理中...","Processing...":"処理中...","Quota change amount cannot be zero":"クォータの変更量を 0 にすることはできません","Product":"商品","Product ID":"商品 ID","Product ID is required":"プロダクト ID は必須です","Product Name":"商品名","Productivity":"生産性","Products":"商品","Professional team providing 24/7 technical support":"24時間年中無休のテクニカルサポートを提供するプロフェッショナルチーム","Profile":"プロフィール","Profile updated successfully":"プロフィールが正常に更新されました","Programming":"プログラミング","Progress":"進捗","Project":"プロジェクト","Promote":"昇格","Promotion codes":"プロモーションコード","Prompt":"プロンプト","Prompt (EN)":"プロンプト(英語)","Quota unit is misconfigured":"クォータ単位の設定が正しくありません","Prompt cache ratio":"プロンプトキャッシュ倍率","Quota value cannot be negative":"クォータ値は負の数にできません","Quota value exceeds valid range, maximum is {{max}}":"クォータ値が有効範囲を超えています。最大値は {{max}} です","Prompt caching":"プロンプトキャッシュ","Prompt Caching":"プロンプトキャッシング","Prompt Details":"プロンプトの詳細","Prompt price ($/1M tokens)":"プロンプト価格 (100万トークンあたり$)","Prompt text filtering is active with the current form values.":"現在のフォーム設定ではプロンプトのテキストフィルターが有効です。","Prompt text filtering needs both switches enabled and a non-empty keyword list.":"プロンプトのテキストフィルターには、両方のスイッチと空でないキーワード一覧が必要です。","Proprietary":"プロプライエタリ","Protect login and registration with Cloudflare Turnstile":"Cloudflare Turnstile でログインと登録を保護する","Provide a JSON object where each key maps to an endpoint definition.":"各キーがエンドポイント定義にマップされる JSON オブジェクトを提供してください。","Provide a valid URL starting with http:// or https://":"http:// または https:// で始まる有効な URL を入力してください","Provide Markdown, HTML, or an external URL for the privacy policy":"プライバシーポリシーにMarkdown、HTML、または外部URLを提供する","Provide Markdown, HTML, or an external URL for the user agreement":"ユーザー同意書にMarkdown、HTML、または外部URLを提供する","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"カテゴリごとの安全オーバーライドをJSONとして提供します。フォールバック値には`default`を使用してください。","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"モデルごとのヘッダーオーバーライドをJSONとして提供します。拡張コンテキストウィンドウなどのベータ機能を有効にするのに役立ちます。","Provider":"プロバイダ","Provider & data privacy":"プロバイダーとデータ保護","Provider created successfully":"プロバイダーの作成に成功しました","Provider deleted successfully":"プロバイダーの削除に成功しました","Provider ID":"プロバイダ ID","Provider Name":"プロバイダー名","Provider source":"プロバイダーの種類","Provider type (OpenAI, Anthropic, etc.)":"プロバイダタイプ (OpenAI, Anthropic など)","Provider updated successfully":"プロバイダーが正常に更新されました","Provider-specific endpoint, account, and compatibility settings.":"プロバイダー固有のエンドポイント、アカウント、互換性設定です。","Proxy Address":"プロキシアドレス","Proxy address must use HTTP, HTTPS, SOCKS5, or SOCKS5H and include a valid host":"プロキシアドレスは HTTP、HTTPS、SOCKS5、SOCKS5H のいずれかを使用し、有効なホストを含める必要があります","Prune Object Items":"オブジェクト項目を整理","Prune object items by conditions":"条件に基づいてオブジェクト項目を削除","Prune Rule (string or JSON object)":"削除ルール(文字列またはJSONオブジェクト)","Public base URL for async task media. Supports a dedicated media domain, port, or Nginx path prefix; falls back to Server Address when empty.":"非同期タスクのメディア用公開ベース URL。専用のメディアドメイン、ポート、または Nginx パスプレフィックスを指定できます。空の場合はサーバーアドレスを使用します。","Public model catalog and pricing page.":"モデルカタログと料金の公開ページ。","Public rankings page based on live usage data.":"実際の利用データに基づく公開ランキングページ。","Publish Date":"公開日","Publish the request names and remove the raw upstream names from the model list":"リクエストモデル名をモデル一覧に追加し、上流の元の名前を削除します","Published":"公開済み","Published as {{model}}":"公開名 {{model}}","Published at":"公開日時","Published models, groups, and model remapping rules.":"公開モデル、グループ、モデルの再マッピングルール。","Recalculated from tokens: tokens {{tokens}}, model ratio {{model_ratio}}, group ratio {{group_ratio}}, other multiplier {{other_multiplier}}":"トークンで再計算:トークン {{tokens}}、モデル倍率 {{model_ratio}}、グループ倍率 {{group_ratio}}、その他の倍数 {{other_multiplier}}","Published:":"公開済み:","Pull":"プル","Pull model":"モデルをプル","Pulling...":"プル中...","Purchase Limit":"購入上限","Purchase limit reached":"購入上限に達しました","Purchase Subscription":"サブスクリプションを購入","QR Code Image URL":"QRコード画像URL","QR code is not configured. Please contact support.":"QRコードが設定されていません。サポートにお問い合わせください。","Quantity":"数量","QuantumNous":"QuantumNous","Query":"Query","Query Balance":"クエリ残高","Query Param":"クエリパラメータ","Querying...":"クエリ中...","Question":"質問","Queued":"キュー中","Quick actions":"クイック操作","Quick insert common payment methods":"一般的な支払い方法をすばやく挿入","Quick insert payment entries":"支払い項目をすばやく挿入","Quick options":"クイック設定","Quick Range":"クイック範囲","Quick Setup from Preset":"プリセットからクイックセットアップ","Quota":"クォータ","Quota ({{currency}})":"クォータ ({{currency}})","Quota adjusted successfully":"クォータの調整に成功しました","Quota adjustment details":"クォータ調整の詳細","Redemption code count must be greater than 0":"引き換えコードの数は 0 より大きくする必要があります","Quota after adjustment":"調整後のクォータ","Quota before adjustment":"調整前のクォータ","Quota clamped":"クォータ制限適用","Redemption code name length must be between 1-20":"引き換えコード名は 1 から 20 文字にしてください","Quota consumed before charging users":"ユーザーに請求する前に消費されるクォータ","Quota Distribution":"クォータの分配","Quota given to invited users":"招待されたユーザーに付与されるクォータ","Quota given to invited users ({{formattedQuota}})":"招待されたユーザーに付与されるクォータ({{formattedQuota}})","Quota given to users who invite others":"他のユーザーを招待したユーザーに付与されるクォータ","Quota given to users who invite others ({{formattedQuota}})":"他のユーザーを招待したユーザーに付与されるクォータ({{formattedQuota}})","Quota must be a positive number":"クォータは正の数である必要があります","Quota must be zero or greater":"クォータは負の値にできません","Redemption failed, please try again later":"引き換えに失敗しました。しばらくしてから再試行してください","Redemption quota must be positive":"引き換えコードのクォータは正の値にしてください","Quota Per Unit":"ユニットあたりのクォータ","Quota Reset":"クォータリセット","Quota saturation protection triggered":"クォータ飽和保護が作動しました","Quota Settings":"クォータ設定","Quota Types":"クォータタイプ","Quota unchanged":"クォータの変更なし","Quota update failed":"クォータの更新に失敗しました","Quota:":"クォータ:","Radius":"角丸","Random":"ランダム","Randomly select a key from the pool for each request":"各リクエストごとにプールからランダムにキーを選択","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"現在のランキングデータはプレビュー用のシミュレーションです。バックエンド連携が完了次第、リアルタイム分析データに置き換わります。","Rankings":"ランキング","Rate Limit Windows":"レート制限ウィンドウ","Rate Limited":"レート制限","Rate Limiting":"レート制限","Rate limits":"レート制限","Ratio":"倍率","Ratio applied to audio completions for streaming models.":"ストリーミングモデルの音声補完に適用される比率。","Ratio applied to audio inputs where supported by the upstream model.":"アップストリームモデルでサポートされている場合の音声入力に適用される比率。","Ratio applied when creating cache entries for supported models.":"サポートされているモデルのキャッシュエントリ作成時に適用される倍率","Ratio mode":"比率モード","Ratio overrides for users of this group":"このグループのユーザーが他グループを使う際の倍率上書き","Ratio overrides when billed as this group":"このグループとして課金される際の倍率上書き","Ratio Type":"比率タイプ","Ratio: {{value}}":"倍率:{{value}}","Ratios synced successfully":"比率が正常に同期されました","Raw expression":"元の式","Raw expressions and presets use USD. Currency selection only converts visual price inputs and monetary previews.":"式の直接編集とプリセットでは米ドルを使用します。通貨の選択はビジュアルエディターの価格入力と金額プレビューにのみ適用されます。","Raw JSON":"生 JSON","Raw Quota":"元のクォータ","Raw response":"生の応答","Re-enable on success":"成功時に再有効化","Re-login":"再ログイン","Read channels":"チャネルを読み取り","Ready":"準備完了","Ready to initialize":"初期化準備完了","Ready to simplify":"シンプルにする準備は","Real exchange rate between USD and your payment gateway currency":"USDと決済ゲートウェイ通貨の間の実質為替レート","Realtime pricing must be converted manually.":"Realtimeの料金は手動で変換してください。","Reason":"理由","Reason:":"理由:","Reasoning":"理由","Reasoning Effort":"推論強度","Received":"受信済み","Regular administrators cannot promote other users to administrator":"一般の管理者は他のユーザーを管理者に昇格できません","Received amount":"受け取り額","Recent maintenance tasks running across instances and their execution status.":"各インスタンスで実行された最近のメンテナンスタスクとその実行状態。","Recent success-rate samples; gray bars indicate missing data.":"直近の成功率のサンプルです。灰色のバーはデータがないことを示します。","Recently completed or failed system task runs.":"最近完了または失敗したシステムタスク実行です。","Recently launched models":"最近リリースされたモデル","Recently launched models gaining traction":"最近リリースされ勢いのあるモデル","Recharge":"チャージ","Recharge Amount":"チャージ額","Recharge Amount (USD)":"チャージ額 (USD)","Recommended":"推奨","Recommended actions":"おすすめの操作","Recommended to keep this high to avoid upstream throttling.":"アップストリームのスロットリングを避けるため、これを高く保つことを推奨します。","Record IP Address":"IPアドレスを記録","Record quota usage":"クォータ使用量を記録","Recover auto-disabled channels only":"自動無効化されたチャネルの復旧のみ","Recursion Strategy":"再帰戦略","Recursive":"再帰","Redeem":"引き換え","Redeem codes":"コードを交換","Redeemed":"使用済み","Redeemed at":"使用日時","Redeemed By":"引き換え元","Redeemed:":"引き換え済み:","redemption code":"引き換えコード","Redemption Code":"引き換えコード","Redemption code deleted successfully":"引き換えコードを正常に削除しました","Redemption code disabled successfully":"引き換えコードを正常に無効にしました","Redemption code enabled successfully":"引き換えコードを正常に有効にしました","Redemption code updated successfully":"引き換えコードを正常に更新しました","Redemption code(s) created successfully":"引き換えコードが正常に作成されました","Redemption codes":"引き換えコード","Redemption Codes":"引き換えコード","Redemption codes are disabled until the administrator confirms compliance terms.":"管理者がコンプライアンス条件を確認するまで、引換コードは無効です。","Redemption codes created":"引き換えコードを作成しました","redemption codes.":"引き換えコード。","Redemption failed":"交換に失敗しました","Redemption successful! Added: {{quota}}":"引き換え成功!追加:{{quota}}","Redirect {{model}}":"{{model}} をリダイレクト","Redirect fetched upstream names to the names your users call.":"取得した上流の名前を、ユーザーが呼び出す名前にリダイレクトします。","Redirect panel":"リダイレクトパネル","Redirect URL":"リダイレクト URL","Redirecting to chat page...":"チャットページにリダイレクト中...","Redirecting to Creem checkout...":"Creemチェックアウトにリダイレクト中...","Redirecting to GitHub...":"GitHub にリダイレクトしています...","Redirecting to payment page...":"支払いページにリダイレクト中...","Redirecting to sign in in {{seconds}} seconds.":"{{seconds}} 秒後にログインページへ移動します。","Redirects to {{model}}":"{{model}} にリダイレクト","Reduces cache hit rate":"キャッシュヒット率が低下します","Reduces repeated wording":"同じ表現の繰り返しを抑えます","Reference Video":"参照動画","Referral link:":"紹介リンク:","Referral Program":"紹介プログラム","Referral reward transfer is disabled until the administrator confirms compliance terms.":"管理者がコンプライアンス条件を確認するまで、紹介報酬の移転は無効です。","Refine models by provider, group, type, and tags.":"プロバイダー、グループ、タイプ、タグでモデルを絞り込みます。","Refresh":"更新","Refresh Cache":"キャッシュ更新","Refresh credential":"認証情報を更新","Refresh details":"詳細を更新","Refresh failed":"更新に失敗しました","Refresh failed. Showing the last successful snapshot.":"更新に失敗しました。最後に取得できたスナップショットを表示しています。","Refresh interval (minutes)":"更新間隔 (分)","Refresh preview":"再確認","Refresh Stats":"統計を更新","Refresh the list and try again.":"一覧を更新して、もう一度お試しください。","Refresh the preview before trying again; some changes may already have been saved.":"一部の変更が保存済みの可能性があります。再確認してからやり直してください。","Refreshing...":"更新中...","Refund":"返金","Refund Details":"返金詳細","Regenerate":"再生成","Regenerate Backup Codes":"バックアップコードを再生成","Regenerated two-factor backup codes":"二要素認証のバックアップコードを再生成しました","Regenerating immediately invalidates any existing token.":"再生成すると、既存のトークンは直ちに無効になります。","Regex":"正規表現","Regex Pattern":"正規表現パターン","Regex Replace":"正規表現置換","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"Pancake ダッシュボードで、各 URL を対応するテストモードまたは本番モードの Webhook スロットに登録してください。エンドポイントを分けることで、テスト通信が誤って本番アカウントに入金されることを防ぎます。","Register Passkey":"Passkeyの登録","Registered":"登録済み","Registered a passkey":"パスキーを登録しました","Registration Enabled":"登録が有効","Registration flow expired. Please try again.":"登録手続きの有効期限が切れました。もう一度お試しください。","Registry (optional)":"レジストリ (オプション)","Registry secret":"レジストリ シークレット","Registry username":"レジストリ ユーザー名","Reinstall latest":"最新版を再インストール","Reject Reason":"拒否理由","Release details":"リリース詳細","Release to insert a new priority tier":"離して新しい優先度を挿入","Release to join priority {{priority}}":"離して優先度 {{priority}} に統合","Released":"公開日","Reload pricing":"料金を再読み込み","Reload vendor details":"プロバイダー情報を再読み込み","Relying Party Display Name":"依拠当事者表示名","Relying Party ID":"依拠当事者ID","Remaining":"残り","Remaining percentage":"残りの割合","Remaining quota":"残りクォータ","Remaining Quota ({{currency}})":"残りのクォータ ({{currency}})","Remaining quota units":"残りクォータ単位","Remaining:":"残り:","Remark":"備考","Remind me once when my balance drops below the threshold":"残高がしきい値を下回ったときに一度だけ通知します","Remind users through their chosen notification method when their balance drops below the threshold":"残高がしきい値を下回ったユーザーに、そのユーザーが選んだ通知方法でお知らせします","Reminder threshold":"通知しきい値","Reminder threshold cannot be negative":"通知しきい値に負の値は指定できません","Remove":"削除","Remove {{group}}":"{{group}} を削除","Remove {{value}}":"{{value}} を削除","Remove ${{amount}}":"${{amount}}を削除","Remove all custom prices, ratios and billing expressions for these exact model names. Built-in pricing may become effective again.":"完全に一致するモデル名のカスタム価格、倍率、課金式をすべて削除します。組み込みの料金設定が再び適用される場合があります。","Remove all log entries created before the selected timestamp.":"選択したタイムスタンプより前に作成されたすべてのログエントリを削除します。","Remove attachment":"添付ファイルを削除","Remove branch":"分岐を削除","Remove compatible Passkey domains?":"互換用パスキードメインを削除しますか?","Remove condition":"条件を削除","Remove domains":"ドメインを削除","Remove Duplicates":"重複を削除","Remove end condition":"終了条件を削除","Remove filter":"フィルターを削除","Remove functionResponse.id field":"functionResponse.id フィールドを削除","Remove mapped targets":"マッピング先を削除","Remove Models":"モデルを削除","Remove negation":"反転を解除","Remove node filter":"ノードフィルターを削除","Remove Passkey":"Passkey連携解除","Remove Passkey?":"Passkeyを削除しますか?","Remove rule group":"ルールグループを削除","Remove saved price":"保存済みの価格を削除","Remove source {{name}}":"ソース {{name}} を削除","Remove start condition":"開始条件を削除","Remove string prefix":"文字列のプレフィックスを除去","Remove string suffix":"文字列のサフィックスを除去","Remove the target field":"ターゲットフィールドを削除","Remove this model’s custom pricing and use the built-in defaults. A model without a default may become unpriced.":"このモデルのカスタム料金を削除し、組み込みの既定値に戻します。既定値がないモデルは料金未設定になる場合があります。","Remove tier":"ティアを削除","Removed":"削除済み","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"{{removed}} 個の重複キーを削除しました。削除前:{{before}}、削除後:{{after}}","Removed an OAuth binding for the user":"ユーザーの OAuth 連携を解除しました","Removed models":"削除したモデル","Removed Models ({{count}})":"削除済みモデル ({{count}})","Removed models will no longer be available through this channel. Select removals explicitly.":"削除したモデルはこのチャネルで利用できなくなります。削除するモデルを明示的に選択してください。","Removed settings":"削除する設定","Removes MjProxy flags such as --fast, --relax, and --turbo from user prompts.":"ユーザー プロンプトから --fast、--relax、--turbo などの MjProxy フラグを削除します。","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"Passkeyを削除すると、次回からパスワードでサインインする必要があります。いつでも再登録できます。","Rename":"名前変更","Rename deployment":"デプロイメントの名前を変更","Rename failed":"名前変更に失敗しました","Renamed an access token":"アクセストークンの名前を変更しました","Renamed successfully":"名前が正常に変更されました","Renaming metadata does not rename channel models or move pricing. Existing prices stay with the original model name.":"メタデータの名前を変更しても、チャネルのモデル名や料金は移行されません。既存の料金は元のモデル名に紐付きます。","Reorder channel {{id}}":"チャンネル {{id}} の優先度を変更","Repair":"修復","Repair Channel Consistency":"チャネル整合性を修復","Repair channel consistency?":"チャネル整合性を修復しますか?","Repeat the administrator password":"管理者パスワードの再入力","Replace":"置換","Replace {{find}} with {{replaceWith}}":"{{find}} を {{replaceWith}} に置換","Replace all existing keys":"既存のすべてのキーを置き換える","Replace channel models":"チャネルモデルを置き換える","Replace forwarding routes?":"転送ルートを置き換えますか?","Replace mode: Will completely replace all existing keys":"置換モード: 既存のすべてのキーを完全に置き換えます","Replace text":"テキストを置換","Replace with":"置換後","Replace With":"置換後","replaced":"置換済み","Replacement Model":"代替モデル","Replay drag demo":"デモを再生","Replica count":"レプリカ数","Replicate":"Replicate","Report an issue":"問題を報告","request":"リクエスト","Request":"リクエスト","Request & Response":"リクエストとレスポンス","Request Body Disk Cache":"リクエストボディのディスクキャッシュ","Request Body Field":"リクエストボディフィールド","Request Body Memory Cache":"リクエストボディのメモリキャッシュ","Request body must be a JSON object.":"リクエスト本文は JSON オブジェクトである必要があります。","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"リクエストボディのパススルーが有効です。リクエストボディは変換なしで直接アップストリームに送信されます。","Request checks":"リクエスト検査","Request completed":"リクエスト完了","Request conversion":"リクエスト変換","Request Conversion":"リクエスト変換","Request Count":"リクエスト数","Request decision flow":"リクエスト判断フロー","Request error occurred":"リクエストエラーが発生しました","Request failed":"リクエスト失敗","Request flow":"リクエストフロー","Request Header Field":"リクエストヘッダーフィールド","Request Header Override":"リクエストヘッダー上書き","Request Header Overrides":"リクエストヘッダーの上書き","Request headers must be a JSON object with string values.":"リクエストヘッダーは値が文字列の JSON オブジェクトである必要があります。","Request ID":"リクエストID","Request Limits":"リクエスト制限","Request Model":"リクエストモデル","Request Model Name":"リクエストのモデル名","Request Model:":"リクエストモデル:","Request names your users call":"ユーザーが呼び出すリクエストモデル名","Request overrides, routing behavior, and upstream model automation":"リクエスト上書き、ルーティング動作、上流モデル自動化","Request Path":"リクエストパス","Request policies":"リクエストポリシー","Request policy decisions":"リクエストポリシーの判断","Request processing":"リクエスト処理","Request rejected locally":"ローカルで拒否","Request retry":"リクエスト再試行","Request rule pricing":"リクエストルールの課金","Request rules apply on top of this amount.":"リクエストルールはこの金額に追加で適用されます。","Request simulation":"リクエストのシミュレーション","Request success rate sampled over the last 24 hours":"過去 24 時間にサンプリングされたリクエスト成功率","Request success rate; {{incidents}} incident buckets in the last 24 hours":"リクエスト成功率;過去 24 時間に {{incidents}} 個のインシデント時間枠","Request text filtering":"リクエストのテキストフィルター","Request timed out, please refresh and restart GitHub login":"タイムアウトしました。ページをリロードして GitHub ログインをやり直してください","Request-based":"リクエスト条件あり","Requested items":"リクエスト件数","Requested quota":"リクエスト額","Requested quota: {{quota}}":"リクエスト額:{{quota}}","Requested redemption code IDs":"削除を要求した引き換えコードの ID","Requested token IDs":"リクエストしたトークン ID","Requested token IDs truncated":"リクエストしたトークン ID の一覧は省略されています","Requested: {{total}}":"リクエスト:{{total}} 件","Requested: {{total}} · Deleted: {{processed}}":"リクエスト:{{total}} 件 · 削除:{{processed}} 件","Requested: {{total}} · Returned: {{processed}}":"リクエスト:{{total}} 件 · 返却:{{processed}} 件","Requests":"リクエスト","Requests (24h)":"リクエスト (24h)","Requests / 24h":"リクエスト / 24h","Requests per minute":"1分あたりのリクエスト数","requests served":"処理されたリクエスト","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"リクエストはこのワーカーに転送されます。末尾のスラッシュは自動的に削除されます。","Requests:":"リクエスト:","Require email verification for new accounts":"新しいアカウントにメール認証を要求する","Require job success before follow-up actions":"フォローアップ アクション前にジョブの成功を要求","Require login to view models":"モデルを表示するにはログインを要求する","Require login to view rankings":"ランキングを表示するにはログインを要求する","Require the original channel":"元のチャネルを必須にする","required":"必須","Required":"必須","Required events:":"必須イベント:","Required permission":"必要な権限","Required provider, authentication, model, and group settings":"必須のプロバイダー、認証、モデル、グループ設定","Required to expose MjProxy-style image generation to end users.":"エンドユーザーに MjProxy スタイルの画像生成を公開するために必要です。","Requires an available channel and access to its group.":"利用可能なチャネルと、そのグループへのアクセス権が必要です。","Requires global auto-disable and this channel option.":"全体とこのチャネルの両方で自動無効化を有効にする必要があります。","Requires upstream WebSocket support":"上流の WebSocket 対応が必要","Rerank":"再ランク付け","Reroll":"やり直し","Research, analysis, scientific reasoning":"リサーチ・分析・科学的推論","Resend ({{seconds}}s)":"再送信 ({{seconds}}秒)","Resend codes":"コードを再送信","Resend in {{seconds}}s":"{{seconds}}秒後に再送信","Reserve requested images; settle returned images.":"リクエストした枚数で仮課金し、返された枚数で精算します。","Reserve the estimated input cost multiplied by this value, without estimating output tokens. Defaults to 1; positive decimals such as 0.5 and 1.5 are supported. Final charges use actual usage. Per-request and task prices are unaffected.":"推定入力料金にこの倍率を掛けた額を確保し、出力トークンは推定しません。既定値は 1 で、0.5 や 1.5 などの正の小数を指定できます。最終料金は実際の使用量で精算します。リクエスト単位とタスクの料金には影響しません。","Reserved for viewing complete channel keys after secure verification.":"安全な検証後に完全なチャンネルキーを表示するために予約されています。","Reset":"リセット","Reset {{count}} active subscriptions":"{{count}} 件の有効なサブスクリプションをリセットしました","Reset 2FA":"2FAをリセット","Reset 2FA for {{username}}? The user must set up 2FA again to continue using it.":"{{username}} の 2FA をリセットしますか?引き続き使用するには、2FA を再設定する必要があります。","Reset active {{plan}} subscriptions for this user?":"このユーザーの有効な {{plan}} サブスクリプションをリセットしますか?","Reset all active subscriptions under {{plan}}?":"{{plan}} のすべての有効なサブスクリプションをリセットしますか?","Reset all model prices?":"すべてのモデル価格をリセットしますか?","Reset all model ratios?":"すべてのモデル比率をリセットしますか?","Resume drag demo":"ドラッグのデモを再開","Review the affected Passkeys and confirm the domain removal. If the settings or impact have changed, confirmation is required again.":"影響を受けるパスキーを確認し、ドメインの削除を確定してください。設定や影響範囲が変わった場合は、再度確認が必要です。","Reset all settings to default values":"すべての設定をデフォルト値にリセット","Reset at:":"リセット日時:","Reset balance and used quota":"残高と使用済みクォータをリセット","Reset completed":"リセット完了","Reset completed. Latest usage has been refreshed.":"リセットが完了しました。最新の使用状況を更新しました。","Reset Count":"リセット件数","Reset count:":"リセット回数:","Reset Credit":"リセット回数","Reset Credits":"リセット回数","Reset Cycle":"リセット周期","Reset email sent, please check your inbox":"リセットメールを送信しました、受信箱を確認してください","Reset failed":"リセット失敗","Reset model ratios":"モデル倍率をリセットしました","Reset Passkey":"Passkeyリセット","Reset Passkey for {{username}}? The user will need to register a new Passkey before using passwordless login.":"{{username}} の Passkey をリセットしますか?パスワードレスログインを使用するには、新しい Passkey の登録が必要です。","Reset password":"パスワードをリセット","Reset Period":"リセット期間","Reset prices":"価格をリセット","Reset quota":"クォータをリセット","Reset ratios":"比率をリセット","Reset Stats":"統計をリセット","Reset subscription quota":"サブスクリプションのクォータをリセット","Reset the user passkey":"ユーザーのパスキーをリセットしました","Reset to default":"デフォルトにリセット","Reset to Default":"デフォルトにリセット","Reset to default configuration":"デフォルト設定にリセットしました","Reset Two-Factor Authentication":"2要素認証のリセット","Reset usage window":"使用量ウィンドウをリセット","Resets in:":"リセットまで:","Resetting...":"リセット中...","Resize column":"列幅を変更","Resolve Conflicts":"競合を解決","Resource Configuration":"リソース設定","Resources":"リソース","Responding...":"応答中...","Response":"レスポンス","Response Model":"応答モデル","Response model mismatch":"応答モデルの不一致","Response model: {{model}}":"応答モデル:{{model}}","Response Time":"応答時間","Response time: {{duration}}":"応答時間: {{duration}}","Response too large":"応答が大きすぎます","Responses API Version":"応答APIバージョン","Responses WebSocket":"Responses WebSocket","Restore default pricing":"既定の料金に戻す","Restore defaults":"既定に戻す","Restore global Auto":"グローバル Auto に戻す","Restore notifications":"通知を再開","Restrict user model request frequency (may impact high concurrency performance)":"ユーザーモデルのリクエスト頻度を制限する(高並行性パフォーマンスに影響を与える可能性があります)","Result":"結果","Result not retained":"結果は保存されていません","Retain last N days":"最新N日間を保持","Retain last N files":"最新N個のファイルを保持","Retention days":"保持日数","Retrieve result":"結果を取得","Retry":"再試行","rule_name cannot be empty":"rule_name は空にできません","Retry budget":"再試行予算","Retry Chain":"リトライチェーン","Retry Settings":"再試行設定","Retry Suggestion":"リトライ提案","Retry Times":"再試行回数","Return a custom error immediately":"即座にカスタムエラーを返す","Return Custom Error":"カスタムエラーを返す","Return data conforming to a JSON schema":"JSON スキーマに準拠したデータを返却","Return Error":"エラーを返す","Return per-token log probabilities":"トークンごとの対数確率を返します","Return to dashboard":"ダッシュボードに戻る","Return to the original window to continue.":"元のウィンドウに戻って続行してください。","Return vector embeddings for inputs":"入力に対してベクトル埋め込みを返却","Returned keys":"返却したキー数","Returned token IDs":"返されたトークン ID","Returned: {{processed}}":"返却:{{processed}} 件","Reveal API key":"APIキーを表示","Reveal full keys":"完全なキーを表示","Reveal key":"キーを表示","Revenue":"収益","Review & initialize":"確認して初期化","Review and confirm the selected prices.":"選択した価格変更を確認します。","Review and sign out devices currently using your account.":"現在アカウントを使用しているデバイスを確認し、サインアウトできます。","Review and upgrade":"確認してアップグレード","Review confirmation":"確認内容を表示","Review every addition and overwrite before applying. Pricing, channels, and group access are not changed.":"追加・上書きする内容を適用前に確認してください。料金、チャネル、グループ権限は変更されません。","Review model rates before scaling traffic":"トラフィック拡大前にモデル料金を確認","Review selected changes":"選択した変更を確認","Review the affected records before applying. Pricing, channels, and model names are preserved.":"適用前に影響するレコードを確認してください。料金、チャネル、モデル名は維持されます。","Review the compatible domains and allowed websites, then save changes on the settings page.":"互換ドメインと許可するウェブサイトを確認し、設定ページで変更を保存してください。","Review the model changes before applying. Unselected models stay unchanged and will not be ignored.":"適用前に変更を確認してください。未選択のモデルは変更されず、無視リストにも追加されません。","Review the prices and billing expression. Confirming updates the draft; save model pricing to apply it.":"料金と課金式を確認してください。確定すると下書きが更新され、モデル料金の保存後に適用されます。","Review your payment details":"支払い詳細を確認","Review your purchase details before proceeding.":"続行前に購入詳細を確認してください。","Revoke":"取り消す","Revoke session?":"このセッションを取り消しますか?","Revoke this access token? Scripts using it stop working immediately.":"このアクセストークンを取り消しますか?使用中のスクリプトはすぐに動作しなくなります。","Revoked access tokens":"取り消されたアクセストークン","Revoked an access token":"アクセストークンを取り消しました","Rewards will be added directly to your balance":"報酬は直接残高に追加されます","Rewrite callback URLs to the local server":"コールバック URL をローカルサーバーに書き換え","Right to Left":"右から左","Role":"ロール","Roleplay":"ロールプレイ","Root":"Root","Root Diagnostics":"Root 診断","Rose Garden":"ローズガーデン","Route":"ルート","Route active":"ルート有効","Route Description":"ルートの説明","Route group":"ルートグループ","Route is required":"ルートは必須です","Route models must be unique for the same incoming path":"同じ入力パスではルートのモデルを一意にしてください","Route, auth, and balance check in one place":"ルート、認証、残高確認を一か所に集約","Routes":"ルート","Routes in this plan":"このプランのルート","Routes with the same incoming path are matched by model. Leave the model scope empty only for the final fallback route.":"同じ入口パスのルートはモデルで照合されます。モデル範囲を空にできるのは最後のフォールバックルートだけです。","Routes with the same incoming path are split by client model rules. Unmatched requests use the final fallback.":"同じ入口パスのルートはクライアント model ルールで分岐します。一致しないリクエストは最後のフォールバックを使います。","Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.":"同じ入口パスのルートは、クライアント model の完全一致で分岐します。一致しないリクエストは最後のフォールバックを使います。","Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.":"同じ入口パスのルートは、クライアントの正確なモデル名で一致します。複数のモデルはカンマで区切り、最後のフォールバックだけを空にします。","Routing & Mapping":"ルーティングとマッピング","Routing & Overrides":"ルーティングと上書き","Routing Group":"ルーティンググループ","Routing Reliability":"ルーティング信頼性","Routing Strategy":"ルーティング戦略","Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.":"行はユーザーグループ、列は課金グループです。空のセルはグレー表示の基本倍率にフォールバックします。","Rows per page":"ページあたりの行数","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = 1 分あたりリクエスト数、TPM = 1 分あたりトークン数、RPD = 1 日あたりリクエスト数。制限はトークングループ単位で適用されます。","RSA Private Key (Production)":"RSA秘密鍵(本番)","RSA Private Key (Sandbox)":"RSA秘密鍵(サンドボックス)","Rule":"ルール","Rule {{line}} is missing source field":"ルール {{line}} にソースフィールドがありません","Rule {{line}} is missing target field":"ルール {{line}} にターゲットフィールドがありません","Rule {{line}} is missing target path":"ルール {{line}} にターゲットパスがありません","Rule {{line}} is missing value":"ルール {{line}} に値がありません","Rule {{line}} pass_headers format is invalid":"ルール {{line}} のpass_headers形式が無効です","Rule {{line}} pass_headers is missing header names":"ルール {{line}} のpass_headersにヘッダー名がありません","Rule {{line}} prune_objects is missing conditions":"ルール {{line}} のprune_objectsに条件がありません","Rule {{line}} return_error requires a message field":"ルール {{line}} のreturn_errorにはmessageフィールドが必要です","Rule Description (optional)":"ルール説明(任意)","Rule editor mode":"ルールの編集モード","Rule group":"ルールグループ","Rule override":"ルールの個別設定","rules":"ルール","Rules":"ルール","Rules are checked in order. The first match determines the price.":"ルールは順番に判定され、最初に一致したルールで料金が決まります。","Rules can inherit or override these defaults.":"ルールはこの設定を継承または上書きできます。","Rules for {{group}}":"{{group}} のルール","Rules JSON":"ルール JSON","Rules JSON must be an array":"ルール JSON は配列である必要があります","Rules match the original model value from the client request body.":"ルールはクライアントリクエスト本文の元の model 値に一致します。","Run and manage maintenance tasks and performance settings.":"メンテナンスタスクの実行と管理、パフォーマンス設定を行います。","Run background checks using the selected test mode":"選択したテストモードでバックグラウンド検査を実行します","Run dry run":"ドライランを実行","Run GC":"GC 実行","Run tests for the selected models":"選択したモデルのテストを実行","running":"実行中","Running":"実行中","Running dry run":"ドライランを実行中","Running requests":"実行中のリクエスト","Runtime":"実行環境","Runtime status":"実行状態","Runway":"残り期間","s":"s","Safety Settings":"安全設定","Same as Local":"ローカルと同じ","Sample interval: {{seconds}} seconds":"サンプリング間隔:{{seconds}} 秒","Sampling temperature; lower is more deterministic":"サンプリング温度。低いほど決定論的になります","Sandbox":"サンドボックス","Sandbox mode":"サンドボックスモード","Save":"保存","Save & Submit":"保存して送信","Save all settings":"すべての設定を保存","Save as a file":"ファイルに保存","Save as Markdown":"Markdown で保存","Save as TXT":"TXT で保存","Save Backup Codes":"バックアップコードを保存","Save changes":"変更を保存","Save Changes":"変更を保存","Save chat settings":"チャット設定を保存","Save check-in settings":"チェックイン設定を保存","Save Creem settings":"Creem設定を保存","Save drawing settings":"描画設定を保存","Save Epay settings":"Epay設定を保存","Save failed":"保存に失敗しました","Save failed, please retry":"保存に失敗しました。もう一度お試しください","Save general settings":"一般設定を保存","Save group ratios":"グループ比率を保存","Save group settings":"グループ設定を保存","Save io.net settings":"io.net設定を保存","Save log settings":"ログ設定を保存","Save metadata":"メタデータを保存","Save model prices":"モデル価格を保存","Save model ratios":"モデル比率を保存","Save Models":"モデルを保存","Save monitoring rules":"監視ルールを保存","Save navigation":"ナビゲーションを保存","Save notice":"通知を保存","Save or discard pricing changes before renaming metadata.":"名前を変更する前に、料金の変更を保存または破棄してください。","Save Preferences":"設定を保存","Save preview":"保存プレビュー","Save rate limits":"レート制限を保存","Save redemption codes":"引き換えコードを保存","Save sensitive words":"敏感な言葉を保存","Save Settings":"設定を保存","Save sidebar modules":"サイドバーモジュールを保存","Save SSRF settings":"SSRF 設定を保存","Save Stripe settings":"Stripe設定を保存","Save these backup codes in a safe place. Each code can only be used once.":"これらのバックアップコードを安全な場所に保存してください。各コードは一度だけ使用できます。","Save these codes in a safe place. Each code can only be used once.":"これらのコードを安全な場所に保存してください。各コードは一度だけ使用できます。","Save token limits":"トークン制限を保存","Save tool prices":"ツール価格を保存","Save Waffo Pancake settings":"Waffo Pancake 設定を保存","Save Worker settings":"Worker設定を保存","Saved successfully":"保存しました","Saving permission changes requires security verification":"権限の変更を保存するにはセキュリティ認証が必要です","Saving...":"保存中...","Scan QR Code":"QRコードをスキャン","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"公式アカウントのQRコードを読み取り、「验证码」と返信して認証コードを受け取ってください。","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"このQRコードを認証アプリ(Google Authenticator、Microsoft Authenticatorなど)でスキャンしてください。","Scenario Templates":"シナリオテンプレート","Scheduled channel tests":"スケジュールされたチャネルテスト","Scheduled full test":"定期フルテスト","Scheduled full test probes non-manually-disabled channels; passive recovery only checks auto-disabled channels after real request failures.":"定期フルテストは手動で無効化されていないチャネルを検査します。パッシブ復旧は実リクエストの失敗後に自動無効化されたチャネルのみを確認します。","Scheduled or bulk health checks can disable a channel when this duration is exceeded, if both global and channel auto-disable are enabled.":"全体とチャネルの両方で自動無効化が有効な場合、定期または一括ヘルスチェックがこの時間を超えると無効化されることがあります。","Scheduled recovery is off. Bulk channel tests can still re-enable automatically disabled channels.":"定期復旧は無効です。一括チャネルテストでは、自動無効化されたチャネルを復旧できます。","Scheduled test options":"定期テストのオプション","scheduling controls":"スケジューリング制御","Science":"科学","Scope":"スコープ","Scopes":"スコープ","Search":"検索","Search by name or URL...":"名前またはURLで検索...","Select at least one valid permission.":"有効な権限を1つ以上選択してください。","Search by order number...":"注文番号で検索...","Search channel type...":"チャネルタイプを検索...","Search chat presets...":"チャットプリセットを検索...","Search colors...":"色を検索...","Search conflicting models or fields":"競合するモデルまたはフィールドを検索","Search deployments...":"デプロイを検索...","Search feature in development":"検索機能は開発中です","Search group names...":"グループ名を検索...","Search groups by name or description":"グループ名または説明で検索","Search groups...":"グループを検索...","Search icons or enter an icon key":"アイコンを検索、またはキーを入力","Search method identifiers...":"決済方法の識別子を検索...","Search missing models":"不足しているモデルを検索","Search model name, provider, endpoint, or tag...":"モデル名、プロバイダー、エンドポイント、タグを検索...","Search model name...":"モデル名を検索...","Search models":"モデルを検索","Search models or fields...":"モデルまたはフィールドを検索...","Search models...":"モデル名で検索...","Search payment methods...":"支払い方法を検索...","Search payment type keys...":"支払いタイプキーを検索...","Search payment types...":"支払いタイプを検索...","Search products...":"商品を検索...","Search providers, plugins, or type numbers":"プロバイダー、プラグイン、タイプ番号を検索","Search rules...":"ルールを検索…","Search tags...":"タグを検索...","Search the public web at inference time":"推論時に公開ウェブを検索","Search vendor names or descriptions":"プロバイダー名や説明で検索","Search vendors":"ベンダーを検索","Search vendors...":"ベンダーを検索...","Search, add, and edit model vendors.":"モデルのベンダーを検索・追加・編集します。","Search...":"検索...","second":"秒","Second":"秒","seconds":"秒","Secret env (JSON object)":"シークレット env (JSON オブジェクト)","Secret environment variables (JSON)":"シークレット環境変数(JSON)","Secret Key":"シークレットキー","Secure & Reliable":"セキュア&信頼性","Secured":"保護済み","Security":"セキュリティ","Security & Access":"セキュリティとアクセス","Security & Limits":"セキュリティと制限","Security Check":"セキュリティチェック","Security verification":"セキュリティ確認","Security verification has expired. Please verify again.":"セキュリティ確認の有効期限が切れました。再度確認してください。","Security verification is no longer valid. Please verify again.":"セキュリティ確認が無効になりました。再度確認してください。","Seed":"シード","Select":"選択","Select {{name}}":"{{name}} を選択","Select a color":"色を選択","Select a complete plan, then keep only the routes you need.":"完全なプランを選び、必要なルートだけを残します。","Select a concrete model to configure pricing. Metadata matching does not propagate prices.":"料金を設定する具体的なモデルを選択してください。メタデータのマッチングによって料金は継承されません。","Select a group":"グループを選択","Select a group type":"グループタイプを選択","Select a model to edit pricing":"料金を編集するモデルを選択","Select a preset...":"プリセットを選択...","Select a price source and review pricing changes. Model metadata and channel access are not changed.":"料金の取得元を選択し、変更を確認してください。メタデータとチャネル権限は変更されません。","Select a product":"商品を選択","Select a role":"ロールを選択","Select a rule to edit.":"編集するルールを選択してください。","Select a saved vendor.":"保存済みのプロバイダーを選択してください。","Select a store":"ストアを選択","Select a suggested icon or keep an existing advanced icon key.":"候補から選ぶか、既存の詳細なアイコンキーをそのまま使用できます。","Select a timestamp before clearing logs.":"ログをクリアする前にタイムスタンプを選択してください。","Select a usage mode to continue":"続行するには使用モードを選択してください","Select a verification method first":"まず検証方法を選択してください","Select a version to compare":"比較するバージョンを選択","Select active subscription plan":"有効なサブスクリプションプランを選択","Select all":"すべて選択","Select all (filtered)":"フィルタ結果をすべて選択(S)","Select all changed fields":"変更項目をすべて選択","Select all matching models":"一致するモデルをすべて選択","Select all models":"すべてのモデルを選択","Select all models in {{category}}":"{{category}} のモデルをすべて選択","Select all prices from {{source}}":"{{source}} の価格をすべて選択","Select all syncable models (all pages, {{count}})":"同期可能な全 {{count}} 件を選択(全ページ)","Select All Visible":"表示中のすべてを選択","Select an operation mode and enter the amount":"操作モードを選択し、金額を入力してください","Select announcement type":"アナウンスメントタイプを選択","Select at least one Auto group or restore global Auto.":"Auto グループを1つ以上選択するか、グローバル Auto に戻してください。","Select at least one field to overwrite.":"上書きするフィールドを少なくとも 1 つ選択してください。","Select at least one model to preview mappings.":"マッピングをプレビューするには、モデルを 1 つ以上選択してください。","Select at least one permission":"権限を 1 つ以上選択してください","Select at least one route":"少なくとも1つのルートを選択してください","Select at least one target model":"少なくとも1つの対象モデルを選択してください","Select at most {{max}} Auto groups":"Auto グループは最大 {{max}} 個まで選択できます","Select body font":"本文フォントを選択","Select border radius":"角丸を選択","Select channel type":"チャネルタイプを選択","Select color preset":"カラープリセットを選択","Select content width":"コンテンツ幅を選択","Select corner radius":"角の丸みを選択","Select currency":"通貨を選択","Select date":"日付を選択","Select default chart":"デフォルトチャートを選択","Select default range":"デフォルト範囲を選択","Select display mode":"表示モードを選択","Select end time":"終了時間を選択","Select from presets or type custom identifier.":"プリセットから選択するか、カスタム識別子を入力してください。","Select granularity":"粒度を選択","Select groups (leave empty to keep current)":"グループを選択 (現在の設定を維持するには空のままにしてください)","Select interface density":"インターフェイスの密度を選択","Select items...":"項目を選択...","Select key format":"キーフォーマットを選択","Select language":"言語を選択","Select Language":"言語を選択","Select layout style":"レイアウトスタイルを選択","Select locations":"ロケーションを選択","Select model":"モデルを選択","Select Model":"モデルを選択","Select model {{model}}":"モデル {{model}} を選択","Select models":"モデルを選択","Select models (empty for allow all)":"モデルを選択 (すべて許可する場合は空)","Select models and apply to channel models list.":"モデルを選択し、チャネルモデルリストに適用します。","Select models or add custom ones":"モデルを選択するか、カスタムモデルを追加","Select models to process. Unselected \\"add\\" models will be ignored.":"処理するモデルを選択してください。未選択の「追加」モデルは無視されます。","Select models to run batch tests.":"バッチテストを実行するモデルを選択してください。","Select or enter color value":"色の値を選択または入力","Select or enter method identifier":"決済方法の識別子を選択または入力","Select or enter model name":"モデル名を選択または入力","Select or enter payment type":"支払いタイプを選択または入力","Select or enter payment type key":"支払いタイプキーを選択または入力","Select payment method":"お支払い方法を選択","Select preset or enter custom CSS color value.":"プリセットを選択するか、カスタムCSSカラー値を入力してください。","Select price for {{model}} from {{source}}":"{{source}} の {{model}} の価格を選択","Select price sources":"価格の取得元を選択","Select publish date":"公開日を選択","Select requirement":"要件を選択","Select row":"行を選択","Select row {{number}}":"{{number}} 行目を選択","Select sidebar style":"サイドバースタイルを選択","Select site direction":"サイトの方向を選択","Select start time":"開始時間を選択","Select subscription plan":"サブスクリプションプランを選択","Select successful models ({{count}})":"成功したモデルを選択({{count}})","Select Sync Channels":"同期チャネルを選択","Select sync channels to compare prices":"価格比較のために同期チャネルを選択してください","Select sync channels to compare ratios":"比率を比較するために同期チャネルを選択","Select Sync Source":"同期元を選択","Select syncable models on this page":"このページの同期可能なモデルを選択","Select task plugin":"タスクプラグインを選択","Select the API endpoint region":"APIエンドポイントのリージョンを選択","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"アップストリームデータで上書きしたいフィールドを選択してください。選択されていないフィールドはローカル値を保持します。","Select the models to keep in this channel.":"このチャネルに残すモデルを選択してください。","Select the task plugins installed on the upstream gateway":"上流ゲートウェイにインストールされているタスクプラグインを選択","Settings updated":"設定を更新しました","Select theme preference":"テーマの好みを選択","Settled by the task usage expression":"タスク使用量の式で精算","Select theme preset":"テーマプリセットを選択","Select time granularity":"時間の粒度を選択","Select vendor":"ベンダーを選択","Select version":"バージョンを選択","Selectable groups":"選択可能なグループ","selected":"選択済み","Selected {{count}}":"{{count}} 件選択済み","Selected {{selected}} / {{total}}":"選択済み {{selected}} / {{total}}","selected channel(s). Leave empty to remove tag.":"選択されたチャネル。タグを削除するには空のままにしてください。","Selected conflicts were overwritten successfully.":"選択した競合が正常に上書きされました。","Selected names are":"選択した名前は","Selected nodes":"選択したノード","Selected when creating a token and used as the default billing group for API calls.":"トークン作成時に選択され、API 呼び出しのデフォルト課金グループとして使われます。","Selecting a plugin fills its declared models and default base URL.":"プラグインを選択すると宣言済みモデルと既定の Base URL が入力されます。","Self-Use Mode":"セルフユースモード","Send":"送信","Send a request":"リクエストを送信","Send chat completions to the OpenAI-compatible /v1/chat/completions instead of the native Ollama /api/chat":"チャット補完を Ollama ネイティブの /api/chat ではなく、OpenAI 互換の /v1/chat/completions に送信します","Send code":"コードを送信","Send reset email":"リセットメールを送信","Send the original request body to upstream without conversion. Only available for native forwarding routes.":"元のリクエストボディを変換せずにアップストリームへ送信します。ネイティブ転送ルートでのみ利用できます。","Sending...":"送信中...","Sensitive channel settings are read-only for your account.":"あなたのアカウントでは機密チャネル設定は読み取り専用です。","Sensitive Words":"機密語","Sent the API key to FluentRead.":"API キーを FluentRead に送信しました。","Separate image/audio prices are enabled.":"画像/音声の個別料金が有効です。","Separate multiple rules with English commas. For regex patterns that need commas, switch to JSON Text.":"複数のルールは半角カンマで区切ります。カンマが必要な正規表現は JSON Text に切り替えてください。","Separate several values with commas":"複数ある場合はカンマで区切ります","Serve multiple users or teams with billing and quota control.":"課金とクォータ管理で複数のユーザーやチームにサービスを提供します。","Server Address":"サーバーURL","Server IP":"サーバー IP","Server Log Management":"サーバーログ管理","Server logging is not enabled (log directory not configured)":"サーバーログが有効になっていません(ログディレクトリが未設定)","Server Token":"サーバートークン","Service account JSON file(s)":"サービスアカウントJSONファイル","Session":"セッション","Session behavior":"セッション維持","Session behavior prevents switching channels":"セッション設定によりチャネルの切り替えが禁止されています","Session defaults":"セッションのデフォルト","Session expired!":"セッションが期限切れです!","Session expired?":"セッションが期限切れになりましたか?","Session rule":"セッションルール","Session rule matched":"セッションルールに一致","Session rules":"セッションルール","Session rules table":"セッションルール一覧","Session signed out":"セッションからサインアウトしました","Sessions & Access":"セッションとアクセス","Sign in to bind an account":"アカウントを連携するにはログインしてください","Sessions and retries":"セッションと再試行","Set":"設定","Set a discount rate for a specific recharge amount threshold.":"特定のチャージ金額のしきい値に対して割引率を設定します。","Set a secure password (min. 8 characters)":"安全なパスワードを設定してください (最低8文字)","Set a tag for":"のタグを設定","Set API key access restrictions":"API キーのアクセス制限を設定","Set API key basic information":"API キーの基本情報を設定","Set default ranges and charts for model analytics.":"モデル分析の既定の範囲とチャートを設定します。","Set Field":"フィールドを設定","Set filters to customize your dashboard statistics and charts.":"ダッシュボードの統計とグラフをカスタマイズするためにフィルターを設定します。","Set filters to narrow down your log search results.":"ログ検索結果を絞り込むためにフィルターを設定します。","Set Header":"ヘッダーを設定","Set Password":"パスワードを設定","Set prices for each set of conditions below. Cost = usage × unit price + additional charge. Token prices are per million tokens.":"以下の条件ごとに料金を設定してください。料金 = 使用量 × 単価 + 追加料金。トークン単価は100万トークンあたりで入力します。","Set prices for each set of conditions below. Cost = usage × unit price + fixed fee. Token prices are per million tokens.":"以下の条件ごとに料金を設定してください。料金 = 使用量 × 単価 + 固定料金。トークン単価は100万トークンあたりで入力します。","Set Project to io.cloud when creating/selecting key":"キーを作成/選択する際にプロジェクトを io.cloud に設定","Set quota amount and limits":"クォータ量と制限を設定","Set Request Header":"リクエストヘッダーを設定","Set runtime request header: override entire value, or manipulate comma-separated tokens":"ランタイムリクエストヘッダーを設定:値全体を上書き、またはカンマ区切りトークンを操作","Set separate prices for cache reads and writes.":"キャッシュ読み取りと書き込みに個別の料金を設定します。","Set separately for this provider":"このプロバイダーを個別に設定","Set Tag":"タグを設定","Set tag for selected channels":"選択したチャネルにタグを設定","Set the language used across the interface":"インターフェースで使用する言語を設定します","Set the user\'s role (cannot be Root)":"ユーザーのロールを設定します(Rootにはできません)","Set the website where users will use their Passkeys.":"ユーザーが Passkey を使うサイトのドメインを入力してください。","Set these values in the provider application before enabling login.":"ログインを有効にする前に、プロバイダーアプリでこれらの値を設定してください。","Set up model redirects":"モデルのリダイレクトを設定","Set up redirect":"リダイレクトを設定","Setting Key":"設定キー","Setting saved":"設定が保存されました","Size {{size}}":"サイズ {{size}}","Setting up 2FA...":"2FAを設定中...","Setting updated successfully":"設定が正常に更新されました","Settings":"設定","Settings & Preferences":"設定と環境設定","Settings updated successfully":"設定が正常に更新されました","Setup expired. Scan the new QR code and save the new backup codes.":"設定の有効期限が切れました。新しいQRコードを読み取り、新しいバックアップコードを保存してください。","Setup guide":"セットアップガイド","Setup guide complete":"セットアップガイド完了","Setup guide is collapsed. Expand it anytime.":"セットアップガイドは折りたたまれています。いつでも展開できます。","Setup Instructions":"セットアップ手順","Setup progress: {{completed}}/{{total}}":"セットアップ進捗: {{completed}}/{{total}}","Setup Two-Factor Authentication":"2要素認証を設定","Setup: three groups and one override matrix cell.":"設定:3つのグループと1つのマトリクスセル。","Setup: three groups and one override rule.":"設定:3つのグループと1つの上書きルール。","SGLang":"SGLang","SMTP server is not configured":"SMTP サーバーが設定されていません","SGLang API key, or EMPTY if authentication is disabled":"SGLang API キー。認証が無効の場合は EMPTY","SGLang channel base URL cannot be empty":"SGLang チャネルのベース URL は必須です","SGLang server address, without /v1":"SGLang サーバーのアドレス(/v1 なし)","SGLang status":"SGLang の状態","Some files could not be deleted ({{failed}}/{{total}})":"一部のファイルを削除できませんでした({{failed}}/{{total}})","Share":"シェア","Share your link and earn rewards":"リンクを共有して報酬を獲得","Shared configuration for all payment gateways":"すべての決済ゲートウェイの共有設定","Shorten":"短縮","Show":"表示","Show All":"すべて表示","Show all providers including unbound":"未バインドを含むすべてのプロバイダーを表示","Show all tags":"すべてのタグを表示","Show in model catalog":"モデルカタログに表示","Show in model square":"モデル広場に表示","Show only bound providers":"バインド済みのプロバイダーのみ表示","Show or hide flow columns":"フロー列の表示・非表示","Show preview":"プレビューを表示","Show prices in currency instead of quota.":"クォータではなく通貨で価格を表示。","Show selected models in model square":"選択したモデルをモデル広場に表示","Show sensitive data":"機密データを表示","Show setup guide":"セットアップガイドを表示","Show source":"ソースを表示","Show token usage statistics in the UI":"UIでトークン使用統計を表示","Showcase core capabilities with demo credentials and limited access.":"デモ用の認証情報と制限付きアクセスでコア機能を紹介します。","Showing":"表示","Showing {{shown}} of {{total}} mappings":"{{total}} 件中 {{shown}} 件のマッピングを表示","showing •":"表示中 •","Showing the last successfully checked release.":"前回正常に確認できたリリース情報を表示しています。","Shown":"表示","Shown {{count}} models in model square":"モデル広場に {{count}} 件のモデルを表示しました","Sidebar":"サイドバー","Sidebar collapsed by default for new users":"新規ユーザー向けにサイドバーをデフォルトで折りたたむ","Sidebar modules":"サイドバーモジュール","Sidebar Personal Settings":"サイドバー個人設定","Sign in":"ログイン","Sign In":"ログイン","Sign in now":"今すぐログイン","Sign in required":"ログインが必要です","Sign in with Passkey":"Passkeyでログイン","Sign out":"ログアウト","Sign out other sessions":"他のセッションをサインアウト","Sign out other sessions?":"他のセッションからサインアウトしますか?","Sign out others":"他をサインアウト","Sign out this device?":"このデバイスからサインアウトしますか?","Sign up":"サインアップ","Signed in":"サインインしました","Signed in successfully!":"サインインに成功しました!","Signed in via WeChat":"WeChat経由でサインインしました","Signed in with Passkey":"パスキーでサインインしました","Signed out":"サインアウトしました","Significant outages detected":"大規模な障害を検出","Signing you in with {{provider}}":"{{provider}} でサインイン中","SiliconFlow":"SiliconFlow","Simple":"シンプル","Simple mode only returns message; status code and error type use system defaults.":"シンプルモードはメッセージのみ返します。ステータスコードとエラータイプはシステムデフォルトを使用します。","Simple mode: prune objects by type, e.g. redacted_thinking.":"シンプルモード:typeでオブジェクトを削除(例:redacted_thinking)。","Simulate a request including request rules and excluding group multipliers. Empty objects represent an empty request.":"リクエストルールを含み、グループ倍率を除いた料金を計算します。空のオブジェクトはフィールドのないリクエストを表します。","Simulated request body":"シミュレーション用リクエスト本文","Simulated request cost":"シミュレーションしたリクエストの料金","Simulated request headers":"シミュレーション用リクエストヘッダー","Sort by priority to drag channels":"優先度順にするとドラッグできます","Sort channels by":"チャンネルの並べ替え基準","State parameter is empty or mismatched":"state パラメーターが空か一致しません","Simulation context is missing.":"シミュレーションに必要なコンテキストがありません。","Simulation time":"シミュレーション時刻","Since previous sample":"前回のサンプル以降","Single .js file, up to 8 MiB. Its source is shown below before upload.":"単一の .js ファイル、最大 8 MiB。アップロード前に下部でソースを確認できます。","Single Key":"単一キー","Site & Branding":"サイトとブランド","Site currency ({{currency}})":"サイト通貨({{currency}})","Site Key":"サイトキー","Site URL":"サイト URL","Size:":"サイズ:","sk_xxx or rk_xxx":"sk_xxx または rk_xxx","Skip async task polling delay":"非同期タスクのポーリング遅延をスキップ","Skip pre-consumption when the wallet balance and limited API key balance both exceed this amount. Set to 0 to always pre-consume. Subscriptions and asynchronous tasks always reserve quota.":"ウォレット残高と上限付き API キーの残高が両方ともこの金額を超える場合、事前引き落としを省略します。0 にすると常に事前引き落としを行います。サブスクリプションと非同期タスクでは常にクォータを確保します。","Skip retry on failure":"失敗時にリトライしない","Skip SMTP TLS certificate verification":"SMTP TLS証明書の検証をスキップ","Skip to Main":"メインコンテンツへスキップ","Skip Upstream TLS Verification":"上流の TLS 証明書の検証をスキップ","Slug":"スラッグ","Slug can only contain letters, numbers, hyphens, and underscores":"スラッグには英数字、ハイフン、アンダースコアのみ使用できます","Slug is required":"スラッグは必須です","Slug must be less than 100 characters":"スラッグは100文字以内にしてください","Smallest USD amount users can recharge (Epay)":"ユーザーがチャージできる最小USD金額 (Epay)","SMTP encryption":"SMTP 暗号化方式","SMTP Host":"SMTPホスト","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"ソフトエラー","Some channels failed: {{errorMsg}}":"一部のチャネルが失敗しました:{{errorMsg}}","Some matching models are hidden or have no available channel.":"一致するモデルの一部は非表示、または利用可能なチャネルがありません。","Some plugin information could not be read":"プラグイン情報の一部を読み取れません","Something went wrong!":"問題が発生しました!","Sonnet Model":"Sonnet モデル","Sora":"Sora","Sort":"並べ替え","Sort by ID":"IDでソート","Sort Order":"並び順","Sort priority":"並び順の優先度","Source":"ソース","Source diff":"ソース差分","Source Endpoint":"ソースエンドポイント","Source Field":"コピー元フィールド","Source Header":"コピー元ヘッダー","Source ID":"コピー元 ID","Source name":"ソース名","Source vendors":"移動元のプロバイダー","Source vendors will be deleted after their model assignments are moved. The target vendor’s details are preserved.":"モデルの割り当てを移した後、移動元のプロバイダーは削除されます。移動先の情報は維持されます。","Source: global settings. Changes take effect after saving.":"適用元:全体設定。変更は保存後に反映されます。","sources":"ソース","Space-separated OAuth scopes":"スペース区切りのOAuthスコープ","Spark model version, e.g., v2.1 (version number in API URL)":"Sparkモデルバージョン(例:v2.1、API URLのバージョン番号)","Spec":"仕様","Special billing expression":"特殊な課金式","Stripe is not configured or key is invalid":"Stripe が設定されていないか、キーが無効です","Special group":"特別グループ","Stripe webhook is not configured":"Stripe Webhook が設定されていません","Special ratio rules":"特殊な倍率ルール","StripePriceId is not configured for this plan":"このプランには StripePriceId が設定されていません","Special ratios override the token group ratio for specific user group and token group combinations.":"特殊倍率は、特定のユーザーグループとトークングループの組み合わせでトークングループ倍率を上書きします。","Special usable group rules":"特別な使用可能グループルール","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"特殊利用可能グループルールでは、特定ユーザーグループ向けに選択可能なトークングループを追加、削除、追記できます。","Special usable group rules make extra token groups visible to, or hide default ones from, users of a specific user group.":"特殊利用可能グループルールにより、特定ユーザーグループのユーザーに追加のトークングループを表示したり、デフォルトのものを非表示にしたりできます。","Special visibility rules":"特殊表示ルール","Specified time":"指定時刻","Speculative decoding acceptance rate":"投機的デコードの受理率","Spend limited":"支出制限中","Spread HTTP/2 traffic across multiple reusable connections to the same upstream origin (1-8).":"同一上流オリジンへの再利用可能な複数接続に HTTP/2 トラフィックを分散します(1-8)。","SQLite stores all data in a single file. Make sure that file is persisted when running in containers.":"SQLite はすべてのデータを単一ファイルに保存します。コンテナで実行する場合は、ファイルが永続化されていることを確認してください。","SSL/TLS":"SSL/TLS","SSRF Protection":"SSRF保護","stale":"期限切れ","Standard":"標準","Standard price":"標準価格","Standard protocol interfaces":"標準プロトコルのインターフェース","Start":"開始","Start ≤ end: within the day; start > end: across midnight":"開始 ≤ 終了は日内範囲、開始 > 終了は日をまたぐ範囲","Subscription plan is not enabled":"サブスクリプションプランは有効になっていません","Subscription plan title cannot be empty":"サブスクリプションプランのタイトルを入力してください","Start a conversation to see messages here":"会話を開始すると、ここにメッセージが表示されます","Start a playground chat":"Playground でチャットを開始","Start again":"やり直す","Subscription purchased with balance, plan: {{plan}}, payment amount: {{amount}}, quota deducted: {{quota}}":"残高でサブスクリプションを購入しました。プラン:{{plan}}、支払額:{{amount}}、差し引かれたクォータ:{{quota}}","Subscription purchased, plan: {{plan}}, payment amount: {{amount}}, payment method: {{method}}":"サブスクリプションを購入しました。プラン:{{plan}}、支払額:{{amount}}、支払方法:{{method}}","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"法人を設立せずに世界中で決済を受け付けられます。個人開発者、OPC 個人事業主、スタートアップ向けに設計されています。Waffo Pancake は Merchant of Record として、消費税、請求書、サブスクリプション管理、返金、チャージバックなど、グローバル決済のコンプライアンス負担を引き受けます。個人開発者はコンプライアンスではなくプロダクトに集中しながら素早くローンチできます。数分でオンボーディングし、1 つのプロンプトから完全な統合まで進められます。","Start for free with generous limits. No credit card required.":"豊富な無料枠で始められます。クレジットカードは不要です。","Start SGLang with --enable-metrics to expose Prometheus metrics.":"Prometheus メトリクスを有効にするには、--enable-metrics を指定して SGLang を起動してください。","Start Time":"開始時間","Start weekday":"開始曜日","Started":"起動時刻","Started two-factor authentication setup":"二要素認証の設定を開始しました","STARTTLS":"STARTTLS","State changed":"状態の変更","State unchanged: {{status}}":"状態の変更なし:{{status}}","Static page describing the platform.":"プラットフォームを説明する静的ページ。","Statistical count":"統計数","Statistical quota":"統計クォータ","Statistical tokens":"統計トークン","Statistics reset":"統計をリセットしました","Status":"ステータス","Status & Sync":"ステータスと同期","Status change":"状態の変更","Status Code":"ステータスコード","Status Code Mapping":"ステータスコードマッピング","Status code mapping must use valid HTTP status codes":"ステータスコードマッピングには有効な HTTP ステータスコードを使用する必要があります","Status is outside the retry rules":"ステータスが再試行ルールの対象外","Status matches the retry rules":"ステータスが再試行ルールに一致","Status Page Slug":"ステータスページスラッグ","Status short":"状態","Status:":"ステータス:","Stay":"残る","Stay tuned though!":"引き続きご期待ください!","Steer behaviour with a system instruction":"システム指示でモデルの挙動を制御","Step":"ステップ","Step {{current}} of {{total}}: {{label}}":"ステップ {{current}}/{{total}}:{{label}}","Still pending addition":"追加待ち","Still pending removal":"削除待ち","Stop":"停止","Stop Retry":"リトライ停止","Stop testing":"テストを停止","Stopping batch test...":"バッチテストを停止中...","Stopping...":"停止中...","Storage":"ストレージ","Store":"Store","Store + product created":"ストア + 商品を作成しました","Store ID":"ストア ID","Store ID is required":"ストア ID は必須です","Stored configuration with effective defaults":"保存済みの設定と有効な既定値","Stored value is not echoed back for security":"セキュリティのため、保存済みの値は表示されません","stream":"ストリーム","Stream":"ストリーム","Stream did not complete successfully":"ストリームが正常完了しませんでした","Stream Mode":"ストリーミングモード","Stream Status":"ストリーム状態","Stream tokens incrementally as they are generated":"トークンを生成と同時にストリーミング","Stream tokens via Server-Sent Events":"Server-Sent Events でトークンをストリーミング","Streaming":"ストリーミング","String Replace":"文字列置換","Strip {{affix}}":"{{affix}} を削除","Strip prefix":"プレフィックスを削除","Strip suffix":"サフィックスを削除","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Stripe APIキー(更新する場合を除き空白のままにしてください)","Stripe Dashboard":"Stripeダッシュボード","Stripe Gateway":"Stripeゲートウェイ","Stripe product price ID":"Stripe製品価格ID","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem はサードパーティプラットフォームで商品を作成し、IDを入力する必要があります","Structured output":"構造化出力","Submit":"送信","Submit directly":"直接送信","Submit request":"リクエストを送信","Submit Result":"結果を送信","Submit Time":"送信時刻","Submitted":"送信済み","Submitting":"送信中","Submitting...":"送信中...","Submodel":"Submodel","Subscribe Now":"今すぐ購読","Subscribe to a plan for model access":"モデルアクセスのためにプランを登録","Subscription":"サブスクリプション","Subscription Billing":"サブスクリプション課金","Subscription First":"サブスクリプション優先","Subscription Management":"サブスクリプション管理","Subscription Only":"サブスクリプションのみ","System error: {{error}}":"システムエラー: {{error}}","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"管理者が支払いゲートウェイ設定でコンプライアンス条件を確認するまで、サブスクリプションプランの作成と変更はロックされます。","Subscription Plans":"サブスクリプションプラン","System initialized successfully":"システムの初期化が完了しました","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"サブスクリプションプランは紐付け済み商品を使用しません。各プランには専用の Pancake 商品があり、サブスクリプション管理画面で設定します(または「+ 作成」ボタンで自動作成します)。","Subscription purchased successfully":"サブスクリプションを購入しました","Subscriptions":"サブスクリプション","Subtract":"減算","succeeded":"成功","Success":"成功","Success rate":"成功率","Success rate excludes business rejections and includes the current partial hour.":"成功率は業務上の拒否を除外し、現在進行中の時間帯を含みます。","Successful scheduled or bulk checks can restore automatically disabled channels. Manually disabled channels stay disabled.":"定期または一括テストの成功後、自動無効化されたチャネルを復旧できます。手動で無効にしたチャネルは復旧しません。","Successfully created {{count}} API Key(s)":"{{count}}個のAPIキーが正常に作成されました","Successfully created {{count}} redemption codes":"{{count}}件の引き換えコードが正常に作成されました","Successfully deleted {{count}} API key(s)":"{{count}}個のAPIキーが正常に削除されました","Successfully deleted {{count}} invalid redemption codes":"{{count}} 件の無効な引き換えコードを削除しました","Successfully deleted {{count}} model(s)":"{{count}} 個のモデルを削除しました","Successfully deleted {{count}} redemption codes":"{{count}} 件の引き換えコードを削除しました","Successfully disabled {{count}} model(s)":"{{count}} 個のモデルを無効にしました","Successfully enabled {{count}} model(s)":"{{count}} 個のモデルを有効にしました","Suffix":"サフィックス","Suffix Match":"サフィックス一致","Suggested rules":"提案ルール","Summarize text":"テキストを要約","SunoAPI":"SunoAPI","Sunset Glow":"サンセットグロウ","Super admin":"スーパー管理者","Super Admin":"スーパー管理者","Tag cannot be empty":"タグは空にできません","Super Large":"極大","Support for high concurrency with automatic load balancing":"自動ロードバランシングによる高並行性のサポート","Supported Applications":"サポートされているアプリケーション","Supported endpoints":"対応エンドポイント","Supported Imagine Models":"対応Imagineモデル","Supported interfaces":"対応インターフェース","Supported modalities":"サポートされるモダリティ","Supported models":"対応モデル","Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.":"対応演算子:eq、ne、gt、gte、lt、lte、in、not_in、contains、not_contains、exists、not_exists。すべてのユーザーを許可する場合は空のままにしてください。","Supported parameters":"対応パラメータ","Supported variables":"サポートされる変数","Supports `-thinking`, `-thinking-":"「-thinking」、「-thinking-」をサポートします","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"HTMLマークアップまたはiframe埋め込みをサポートします。HTMLコードを直接入力するか、完全なURLを提供してiframeとして自動的に埋め込みます。","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"ワンクリック設定をサポートし、NewAPIマルチプロトコル設定に完全に適応します。","Supports plugin extensions":"プラグイン拡張に対応","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"PNG、JPG、SVG、WebPに対応。推奨サイズ: 128×128以下。","Surprise me":"おまかせ","Sustained tokens per second":"持続的な毎秒トークン数","Swap Face":"顔入れ替え","Switch affinity on success":"成功時にアフィニティを切替","Switch to JSON":"JSONに切り替え","Switch to Visual":"ビジュアルに切り替え","Switch to visual editor":"ビジュアル編集に切り替え","Switch to visual mode to add rules or apply templates.":"ルールの追加やテンプレートの適用はビジュアルモードで行えます。","Switch to visual pricing?":"ビジュアル料金設定に切り替えますか?","Switching regenerates the expression from the price table and replaces its original formatting and tier names. Changes apply only after saving.":"切り替えると価格表から式が再生成され、元の書式と段階名が置き換わります。変更は保存後に適用されます。","Sync":"同期","Sync Endpoint":"同期エンドポイント","Sync Endpoints":"同期エンドポイント","Sync Fields":"フィールド同期","Sync from the public upstream metadata repository.":"公開上流メタデータリポジトリから同期します。","Sync metadata":"メタデータを同期","Sync missing metadata":"不足するメタデータを同期","Sync model metadata":"モデルのメタデータを同期","Sync model pricing":"モデル料金を同期","Sync models":"モデルを同期","Sync Now":"今すぐ同期","Task timed out":"タスクがタイムアウトしました","Task timed out (a task left by the old system is not refunded; contact the administrator)":"タスクがタイムアウトしました(旧システムのタスクは返金されません。管理者に連絡してください)","Sync policy":"同期ポリシー","Sync pricing":"料金を同期","Sync results":"同期結果","Sync scope":"同期範囲","Sync steps":"同期手順","Sync this model with official upstream":"このモデルを公式アップストリームと同期","Sync Upstream":"アップストリームを同期","Sync Upstream Models":"アップストリームモデルを同期","Synced upstream models":"上流モデルを同期しました","Synchronize models and vendors from an upstream source":"アップストリームソースからモデルとベンダーを同期","Synchronous":"同期実行","Telegram ID is empty!":"Telegram ID が空です!","Syncing prices, please wait...":"価格を同期中、しばらくお待ちください...","Syncing...":"同期中...","System":"システム","System Administration":"システム管理","System Announcements":"システムのお知らせ","System Behavior":"システムの動作","System constraint":"システム制約","System data statistics":"システムデータ統計","System default":"システムデフォルト","System Info":"システム情報","System Information":"システム情報","System initialized successfully! Redirecting…":"システムが正常に初期化されました!リダイレクト中…","System logo":"システムロゴ","System maintenance":"システムメンテナンス","System Memory":"システムメモリ","System Memory Stats":"システムメモリ統計","System Name":"システム名称","System name is required":"システム名は必須です","System Notice":"システムからのお知らせ","System Performance Monitoring":"システムパフォーマンス監視","System prompt":"システムプロンプト","System Prompt":"システムプロンプト","System Prompt Concatenation":"システムプロンプトの連結","System Prompt Override":"システムプロンプト上書き","System retry exclusion":"システムによる再試行除外","System settings":"システム設定","System Settings":"システム設定","System setup wizard":"システムセットアップウィザード","System task records":"システムタスク記録","System Tasks":"システムタスク","System updates":"システム更新","System updates, current version: {{version}}":"システム更新、現在のバージョン:{{version}}","System Version":"システムバージョン","Table view":"テーブル表示","Tag":"タグ","Tag Aggregate":"タグ集計","Tag Mode":"タグモード","Tag Name":"タグ名","Tag set successfully":"タグが正常に設定されました","Tag updated successfully":"タグが正常に更新されました","The access token lacks the required permission: {{scope}}":"アクセストークンに必要な権限がありません:{{scope}}","Tag:":"タグ:","Tags":"タグ","Take photo":"写真を撮る","Take screenshot":"スクリーンショットを撮る","Target":"操作対象","Target Endpoint":"ターゲットエンドポイント","Target Field":"コピー先フィールド","Target Field Path":"ターゲットフィールドパス","Target group":"ターゲットグループ","Target Header":"コピー先ヘッダー","Target not recorded":"対象の記録なし","Target Path (optional)":"ターゲットパス(任意)","Target User":"対象ユーザー","Target user not found":"対象ユーザーが見つかりません","Target username":"対象ユーザー名","Target vendor":"移動先のプロバイダー","The Classic frontend has been removed. The theme can only be set to default":"Classic フロントエンドは削除されました。テーマは default にのみ設定できます","Task":"タスク","Task billing":"タスク課金","The current sign-in method does not support security verification":"現在のログイン方法はセキュリティ認証に対応していません","Task Details":"タスク詳細","Task failed":"タスク失敗","Task History":"タスク履歴","Task ID":"タスクID","Task ID:":"タスクID:","Task logs":"タスクログ","Task Logs":"タスクログ","Task Plugin":"タスクプラグイン","Task plugin *":"タスクプラグイン *","Task plugin setting updated":"タスクプラグイン設定を更新しました","Task plugins":"タスクプラグイン","Task Plugins":"タスクプラグイン","The longest log time range must be at least 1 day":"ログの最長期間は 1 日以上にしてください","The longest time range a user can view at once in the logs and on the dashboard, and the longest range any export can cover.":"ユーザーがログとダッシュボードで一度に表示できる最長の期間です。どのエクスポートもこの期間を超えられません。","Task pricing":"タスク料金","Task pricing must be converted manually using the task usage schema.":"タスク料金はタスクの使用量スキーマに基づいて手動で変換してください。","Task pricing not configured":"タスク料金が未設定","Task usage data is required to estimate this expression. Check the model\'s task plugin configuration.":"この式の料金を見積もるにはタスク使用量データが必要です。モデルのタスクプラグイン設定をご確認ください。","Task usage metadata is unavailable. Pricing details cannot be displayed.":"タスク使用量のフィールド定義がないため、料金の詳細を表示できません。","Task usage prices are USD per declared unit. They are not token prices and are not divided by one million.":"タスク使用量料金は、宣言された単位ごとの米ドル額です。トークン料金ではなく、100万で除算されません。","Task usage prices are USD per declared unit. Token fields use dollars per 1M tokens; the editor writes / 1000000 into the expression. Other units are not divided by one million.":"タスク使用量の価格は宣言された単位あたりの米ドルです。token フィールドは 100 万 token あたりのドルで、エディターは式に / 1000000 を書き込みます。他の単位は 100 万では割りません。","Tasks currently pending or running.":"現在待機中または実行中のタスクです。","Team Collaboration":"チームコラボレーション","The ratio config API is not enabled":"倍率設定 API は有効になっていません","Technical Support":"テクニカルサポート","Telegram":"Telegram","Telegram authorization failed. Please try again.":"Telegram の認証に失敗しました。もう一度お試しください。","The search pattern can contain at most 2 % wildcards":"検索パターンに使用できる % ワイルドカードは最大 2 個です","The search pattern cannot contain consecutive % wildcards":"検索パターンに連続した % ワイルドカードは使用できません","Telegram binding failed. Please try again.":"Telegram の連携に失敗しました。もう一度お試しください。","Telegram binding is disabled.":"Telegram 連携は無効です。","Telegram login has changed. Reload the page and start Telegram OAuth again.":"Telegram のログイン方法が更新されました。ページを再読み込みし、Telegram OAuth をやり直してください。","Telegram Login Widget":"Telegramログインウィジェット","Telegram OAuth Client ID from BotFather":"BotFather が発行した Telegram OAuth Client ID","Telegram OAuth Client Secret from BotFather":"BotFather が発行した Telegram OAuth Client Secret","Telegram OAuth is not configured or enabled. Please contact your administrator.":"Telegram OAuth が設定されていないか、無効になっています。管理者にお問い合わせください。","Temperature":"温度","Template":"テンプレート","The system is already initialized":"システムは既に初期化されています","Template variables:":"テンプレート変数:","Templates":"テンプレート","Templates appended":"テンプレートが追加されました","The time range cannot exceed {{days}} days":"期間は {{days}} 日を超えることはできません","Tencent":"テンセント","Termination requested":"終了リクエスト済み","Test":"テスト","Test {{count}} matching models":"{{count}} 件の一致モデルをテスト","Test {{count}} selected":"選択済み {{count}} 件をテスト","Test a model with a starter prompt, or write your own request below.":"スタータープロンプトでモデルをテストするか、下に独自のリクエストを入力してください。","Test all {{count}} models":"{{count}} 件すべてのモデルをテスト","Test All Channels":"すべてのチャネルをテスト","Test Channel Connection":"チャネル接続をテスト","Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.":"チャネルのテスト、残高の更新、個別・一括・タグ指定でのチャネル有効化/無効化を行います。","Test Connection":"接続をテスト","Test connectivity for:":"接続性をテスト:","Test failed":"テストに失敗しました","Test interval (minutes)":"テスト間隔(分)","Test Latency":"レイテンシをテスト","Test Mode":"テストモード","Test Model":"モデルをテスト","Test models and prompts from the browser":"ブラウザでモデルとプロンプトをテスト","Test selected models":"選択したモデルをテスト","Testing all enabled channels started. Please refresh to see results.":"有効な全チャネルのテストを開始しました。結果を確認するにはページを更新してください。","Testing...":"テスト中...","Text":"テキスト","Text description of the desired image":"生成したい画像のテキスト説明","Text description of the desired video":"生成したい動画のテキスト説明","Text Input":"テキスト入力","Text or array of texts to embed":"ベクトル化するテキストまたは配列","Text Output":"テキスト出力","Text to Video":"テキストから動画","Text-only requests":"テキストのみのリクエスト","The access token lacks the required permission":"アクセストークンに必要な権限がありません","The action details are invalid.":"操作の詳細が無効です。","The admin configured three groups and one special ratio rule:":"管理者は3つのグループと1つの特別倍率ルールを設定しました:","The admin wants vip users to pay even less when they use premium. That needs an override rule: in the override matrix, set the cell at row vip, column premium to 0.3.":"管理者は vip ユーザーが premium を使うときにさらに安くしたいと考えています。それには上書きルールが必要です:上書きマトリクスで「行 vip、列 premium」のセルに 0.3 を設定します。","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"管理者アカウントはすでに初期化されています。既存の認証情報を保持して、次のステップに進むことができます。","The administrator configured an external link for this document.":"管理者がこのドキュメントの外部リンクを設定しました。","The administrator has not configured a privacy policy yet.":"管理者がまだプライバシーポリシーを設定していません。","The administrator has not configured a user agreement yet.":"管理者がまだ利用規約を設定していません。","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"管理者はまだ「概要」コンテンツを設定していません。設定ページでHTMLまたはURLをサポートして設定できます。","The API key used for the requests":"リクエストに使用された API キー","The authenticator code is incorrect.":"認証アプリのコードが正しくありません。","The binding will complete automatically after authorization":"認証後、バインディングは自動的に完了します","This API is deprecated":"この API は廃止されました","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"紐付け済み商品はウォレットチャージに使用されます。ユーザーが任意の金額を入力すると、new-api はこの単一の Pancake 商品でチェックアウトを実行し、セッションごとに価格を上書きします。$1 / $5 / $10 の SKU を事前作成する必要はありません。","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"紐付け済みストアは、この管理画面から new-api が作成するすべての Pancake 商品の親コンテナです。ウォレットチャージ商品とサブスクリプションプラン商品が含まれます。通常は 1 つのストアで十分です。別々の Pancake カタログを本当に運用する場合のみ別のストアを固定してください。","The button fills in this website and keeps any existing website addresses. Save changes on the settings page to apply.":"ボタンを押すと現在のサイトが入力され、既存のサイトアドレスは保持されます。設定ページで保存すると反映されます。","The change succeeded, but the notification email could not be sent.":"変更は完了しましたが、通知メールを送信できませんでした。","The changelog could not be fetched or parsed. Please try again.":"変更履歴を取得または解析できませんでした。もう一度お試しください。","The converted price must be a finite, non-negative number.":"換算後の価格は有限の非負数である必要があります。","The current setting could not be loaded. You can still enter the website domain yourself.":"現在の設定を読み込めません。サイトのドメインを手動で入力できます。","The deployment node that handled the requests":"リクエストを処理したデプロイノード","This channel is not in multi-key mode":"このチャネルはマルチキーモードではありません","The downloaded source does not match the sha256 declared in the index. Do not install it.":"ダウンロードしたソースがインデックスに記載された sha256 と一致しません。インストールしないでください。","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"Passkey登録のための有効なドメイン。現在のドメインまたはその親ドメインと一致する必要があります。","The entered text does not match the required text.":"入力したテキストが必要なテキストと一致しません。","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"環境(テスト/本番)はここに貼り付けるキーで決まります。統合中はテストキーを使用し、本番公開時に本番キーへ切り替えてください。","The exact model identifier as used in API requests.":"APIリクエストで使用される正確なモデル識別子。","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"以下のモデルには請求タイプ(固定価格 vs 比率請求)の競合があります。変更を続行するには確認してください。","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"モデルリダイレクト内の以下のモデルは\\"モデル\\"リストに追加されていないため、利用可能なモデルが不足して呼び出しが失敗する可能性があります:","The gateway rejected this plugin":"ゲートウェイがこのプラグインを拒否しました","The index could not be fetched or parsed: {{message}}. The host may block cross-origin requests.":"インデックスの取得または解析に失敗しました:{{message}}。ホストがクロスオリジンリクエストを拒否している可能性があります。","The legacy token stops working on {{date}}. Create a new token to replace it.":"旧形式のトークンは {{date}} に使用できなくなります。新しいトークンを作成して置き換えてください。","The login session that started this Telegram binding is no longer valid.":"この Telegram 連携を開始したログインセッションは無効になりました。","The mapped upstream model(s)":"マッピングされたアップストリームモデル","The model routing configuration could not be verified.":"モデルのルーティング設定を検証できませんでした。","The model that was requested":"リクエストされたモデル","The model you\'re looking for doesn\'t exist.":"お探しのモデルは存在しません。","The model-level expression cannot be evaluated by: {{plugins}}":"次のプロバイダーではモデルの式を評価できません:{{plugins}}","The name displayed across the application":"アプリケーション全体に表示される名前","The new token will only be shown once. Copy it and store it securely.":"新しいトークンは一度だけ表示されます。コピーして安全に保管してください。","The OAuth account does not match the account linked to your profile.":"このOAuthアカウントは連携済みのアカウントと一致しません。","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"OAuthコールバック、Webhook、その他の外部統合に使用されるサーバーの公開URL","The requested chat preset does not exist or has been removed.":"要求されたチャットプリセットは存在しないか、削除されました。","The reset request stays disabled until a credit is available.":"リセット回数が利用可能になるまで、リセット要求は無効です。","The result was returned in the API response and was not saved as an artifact":"結果は API レスポンスで返され、成果物として保存されていません","The server returned the following result. Unselected models remain pending.":"サーバーから返された処理結果です。未選択のモデルは保留のままです。","The setup wizard will use this database during initialization.":"セットアップウィザードは初期化時にこのデータベースを使用します。","The site exchange rate is invalid. Prices are shown in USD.":"サイトの為替レートが無効なため、価格は米ドルで表示されます。","The site is not available at the moment.":"現在、このサイトは利用できません。","The slug is appended to the URL:":"スラッグがURLに追加されます:","The source is unavailable or this browser cannot calculate SHA-256. The gateway checks the published hash during installation.":"ソースを取得できないか、ブラウザが SHA-256 を計算できません。インストール時にゲートウェイが公開ハッシュを確認します。","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"同期により、選択されたソースから不足しているモデルとベンダーが取得されます。既存のレコードは、競合を承認した場合にのみ更新されます。","The system always bills in USD. Site currency makes entering and converting prices easier; amounts are converted to USD using the site exchange rate. Switching currencies does not change the actual price. Raw billing expressions always use USD.":"システムの内部計算は常に米ドルです。サイト通貨は価格の入力と換算を簡単にするためのもので、金額はサイトの為替レートで米ドルに換算されます。通貨を切り替えても実際の価格は変わりません。課金式の直接編集では常に米ドルを使用します。","The system currently uses: {{domain}}":"現在システムが使っている値:{{domain}}","The task was accepted; submission cannot be replayed":"タスク受理済みのため再送信不可","The Telegram authorization request is invalid or expired.":"Telegram の認証リクエストが無効か、有効期限が切れています。","The telegram OAuth provider name is reserved. Ask your administrator to rename the conflicting custom provider.":"OAuth プロバイダー名 telegram は予約されています。管理者に競合するカスタムプロバイダーの名前変更を依頼してください。","The token group that will have a custom ratio":"カスタム比率を持つトークングループ","The token has no group, so it is billed as the user group vip, using the base ratio of vip.":"トークンにグループがないため、ユーザーグループ vip として課金され、vip の基本倍率が使われます。","The two roles of a group":"グループの2つの役割","The two-factor setup has expired or changed. Start setup again.":"二段階認証の設定が期限切れか変更されています。設定をやり直してください。","The unique identifier for this model":"このモデルの一意の識別子","This OAuth provider still has linked users and cannot be deleted. Unbind all users first.":"この OAuth プロバイダーには連携中のユーザーがいるため削除できません。先にすべてのユーザーの連携を解除してください。","The unique name for this vendor":"このベンダーの一意の名前","The upstream address this plugin sends requests to. The plugin declares no default, so it must be filled in.":"このプラグインがリクエストを送信する上流アドレスです。既定値が宣言されていないため、入力が必要です。","The upstream channel that served the requests":"リクエストを処理した上流チャネル","The upstream key has unlimited quota. Turn on \\"Allow querying user quota\\" for this key on the upstream to see the real balance.":"上流のキーはクォータが無制限です。上流でこのキーの「ユーザーのクォータ照会を許可」をオンにすると、実際の残高を確認できます。","The upstream natively supports all three protocols; every selected route is forwarded without conversion.":"上流が3つのプロトコルをネイティブ対応し、選択したルートを変換せず転送します。","The upstream response is valid JSON, but it does not match the OpenAI credit_summary format. The channel balance was not updated.":"上流レスポンスは有効な JSON ですが、OpenAI credit_summary 形式ではありません。チャネル残高は更新されていません。","The upstream returned a model name different from both the requested and upstream models. Aliases or dated versions may also cause this; this warning alone does not prove model substitution.":"上流が返したモデル名は、リクエストモデルおよび上流に指定したモデルのいずれとも一致しません。別名や日付付きバージョンによる違いもあるため、この警告だけではモデルの置き換えを断定できません。","The URL for this chat client.":"このチャットクライアントのURL。","The URL returned HTTP {{status}}. Check the address, or download the file and paste its source below.":"URL が HTTP {{status}} を返しました。アドレスを確認するか、ファイルをダウンロードして下のソース欄に貼り付けてください。","The user group applied to the requests":"リクエストに適用されたユーザーグループ","The user who made the requests":"リクエストを行ったユーザー","The vendor no longer exists. Reload the vendor list.":"プロバイダーは既に削除されています。一覧を再読み込みしてください。","Theme":"テーマ","Theme preset":"テーマプリセット","Theme Settings":"テーマ設定","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"追加と削除の両方のモデルが保留中ですが、一方のタイプのみ選択されています。選択した項目のみ送信してよろしいですか?","This rule does not have include_rule_name enabled, so its cache cannot be cleared by rule":"このルールは include_rule_name が有効になっていないため、ルール単位でキャッシュをクリアできません","There is a rule for vip billed as premium → use its ratio 0.3":"「vip が premium として課金」のルールあり → ルールの 0.3 を使用","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"これらはまだ選択中ですが上流のリストにありません。model_mapping にのみソース別名として載る名前は除外されています。保存前に選択を調整してください。","This slug conflicts with a built-in OAuth provider":"このスラッグは組み込みの OAuth プロバイダーと競合しています","This slug is already in use":"このスラッグは既に使用されています","These models were not returned by the upstream. Uncheck to remove them, or select them again before saving. Model mapping source aliases are excluded.":"これらのモデルは上流から返されませんでした。チェックを外すと削除されますが、保存前なら再度選択できます。モデルマッピングの元のエイリアスは表示されません。","These plugins use this channel\'s connection settings.":"これらのプラグインは、このチャネルの接続設定を使用します。","These toggles affect whether certain request fields are passed through to the upstream provider.":"これらの切り替えは、特定の要求フィールドがアップストリームプロバイダーに渡されるかどうかに影響します。","These values come from the source index and are shown for review only. The gateway admits the plugin based on the metadata compiled from its source.":"これらの値はソースのインデックス由来で、確認のために表示しているだけです。ゲートウェイはソースからコンパイルされた実際のメタデータに基づいてプラグインを受け入れます。","Thinking Suffix Adapter":"思考サフィックスアダプター","Thinking to Content":"思考からコンテンツへ","Thinking...":"思考中...","Third-party":"サードパーティ","Third-party — use at your own risk":"サードパーティ — 自己責任","Third-party account bindings (read-only, managed by user in profile settings)":"サードパーティアカウントのバインディング(読み取り専用、プロファイル設定でユーザーが管理)","Third-party account bindings (read-only, managed by user in Security & Access)":"外部アカウント連携(読み取り専用、ユーザーが「セキュリティとアクセス」で管理)","This user has no active subscription to this plan":"このユーザーにはこのプランの有効なサブスクリプションがありません","Third-party Payment Config":"サードパーティ決済設定","This user is already a common user":"このユーザーは既に一般ユーザーです","This user is already an administrator":"このユーザーは既に管理者です","Third-party plugin risk":"サードパーティプラグインのリスク","Third-party source risk":"サードパーティソースのリスク","Third-party-only plugins become unavailable immediately. In-flight tasks will be handled by timeout cleanup.":"サードパーティ専用プラグインは直ちに利用不可になります。処理中タスクはタイムアウト清掃で処理されます。","This action cannot be undone.":"この操作は元に戻せません。","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"この操作は元に戻せません。これにより、あなたのアカウントは完全に削除され、すべてのデータがサーバーから削除されます。","This action will permanently remove 2FA protection from your account.":"この操作により、アカウントから2FA保護が完全に削除されます。","This announcement will be removed from the list.":"このお知らせはリストから削除されます。","This API key has no quota limit. Requests still require available wallet or subscription quota.":"このAPIキーに上限はありませんが、リクエストにはウォレット残高またはサブスクリプションの利用枠が必要です。","This API shortcut will be removed from the list.":"この API ショートカットはリストから削除されます。","This base URL points at a private or local network host. Make sure it is an upstream you control.":"この Base URL はプライベートまたはローカルネットワークのホストを指しています。自身が管理する上流であることを確認してください。","This base URL uses plain HTTP, so the channel key is sent unencrypted.":"この Base URL は平文の HTTP を使用しているため、チャネルキーが暗号化されずに送信されます。","This callback URL updates from the slug field and is the value to register with your provider.":"このコールバック URL は slug フィールドに合わせて更新されます。プロバイダーに登録する値です。","This changelog is not available in your language. Showing English.":"この変更履歴は現在の言語に対応していないため、英語で表示しています。","This channel has no configured models.":"このチャンネルには構成されたモデルがありません。","This channel is not an Ollama channel.":"このチャネルはOllamaチャネルではありません。","This channel serves the models of every selected plugin. The upstream New API gateway must have the same plugins installed.":"このチャネルは選択した各プラグインのモデルを提供します。上流の New API ゲートウェイに同じプラグインがインストールされている必要があります。","This channel type does not support fetching models":"このチャネルタイプはモデルの取得をサポートしていません","This channel type requires additional configuration":"このチャネルタイプには追加設定が必要です","This combination will be billed as free.":"この組み合わせの料金は発生しません。","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"この確認により、支払い、引換コード、サブスクリプションプラン、招待報酬の機能が解除されます。各項目をよく読んでください。","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"これはモデルリクエストのレート制限を制御します。Web/API ルートのスロットリングは環境変数で設定され、引き続き 429 を返す場合があります。","This data may be unreliable, use with caution":"このデータは信頼できない可能性があります。注意して使用してください","This device does not support Passkey":"このデバイスはPasskeyをサポートしていません","This device does not support Passkey verification.":"このデバイスはPasskey認証をサポートしていません。","This domain does not match the current website. Passkeys may not work here.":"このドメインは現在のサイトと一致しません。Passkey が使えない可能性があります。","This email address is already in use.":"このメールアドレスはすでに使用されています。","This {{provider}} account cannot be linked to an existing account automatically, please sign in or register another way and then link {{provider}} in account settings":"この {{provider}} アカウントは既存のアカウントに自動で連携できません。別の方法でログインまたは登録してから、アカウント設定で {{provider}} を連携してください","This {{provider}} account has already been bound":"この {{provider}} アカウントは既に連携されています","This email address is not allowed by the administrator\'s email policy.":"このメールアドレスは管理者のメールポリシーで許可されていません。","This expression cannot be edited visually without losing information.":"この式は情報を失わずにビジュアル編集へ変換できません。","This expression cannot be expanded into a price table. View the original expression below.":"この式は料金表に展開できません。以下の元の式をご確認ください。","This expression cannot be represented by the price table. Switching discards the entire expression, including request rules, and resets all prices to zero. Configure prices before saving.":"この式は価格表で表現できません。切り替えるとリクエストルールを含む式全体が破棄され、すべての価格がゼロにリセットされます。保存前に価格を再設定してください。","This expression cannot be represented by the price table. You can switch to visual editing by confirming that the expression will be discarded.":"この式は価格表で表現できません。式の破棄を確認すると、ビジュアル編集に切り替えられます。","This expression cannot be simulated in the browser.":"この式はブラウザーでシミュレーションできません。","This expression does not price each combination exactly once, so it opens as a raw expression. Sparse or custom pricing stays in this editor.":"この式では各組み合わせの料金がちょうど1回ずつ定義されていないため、生の式として開きます。疎な料金設定やカスタム料金設定はこのエディターに保持されます。","This expression exceeds the browser simulation limits.":"この式はブラウザーのシミュレーション上限を超えています。","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"この式はビジュアルエディタでは扱いにくいです。式モードに切り替えて編集してください。","This external account is already bound.":"この外部アカウントはすでに連携されています。","This FAQ entry will be removed from the list.":"この FAQ 項目はリストから削除されます。","This feature is experimental. Configuration format and behavior may change.":"この機能は実験的です。設定フォーマットや動作は変更される可能性があります。","This feature requires signing in to the dashboard":"この機能を使うにはダッシュボードへのログインが必要です","This field does not support wildcards or regular expressions.":"このフィールドではワイルドカードや正規表現は使えません。","This historical record predates audit-info tracking and cannot be backfilled. The current instance already records server IP, callback IP, payment method, and system version for new top-ups going forward.":"このレコードは監査情報の記録に対応する前の履歴データのため、監査情報がありません。現在のバージョンではサーバーIP、コールバックIP、支払い方法、システムバージョンなどの監査情報を記録できますが、これらは今後新しく作成されるレコードにのみ適用され、過去のレコードを遡って補完することはできません。","This identifier is sent to the payment backend when creating an order. Use alipay for Alipay, wxpay for WeChat Pay, stripe for Stripe. Custom values must be supported by your payment provider.":"注文作成時に、この識別子が決済バックエンドへ送信されます。Alipay は alipay、WeChat Pay は wxpay、Stripe は stripe を使ってください。カスタム値は決済サービス側で対応している必要があります。","This instance is using an automatic hostname. Set NODE_NAME to a stable unique value for multi-instance management.":"このインスタンスは自動ホスト名を使用しています。マルチインスタンス管理のために、安定した一意の NODE_NAME を設定してください。","This is a task model billed by usage (e.g. seconds, resolution). Prices entered here act as a per-call base rate, not per-token prices.":"これは使用量(秒数、解像度など)に基づいて課金されるタスクモデルです。ここで入力した価格は、トークン単価ではなく、1回の呼び出しごとの基本料金として適用されます。","This list does not include the current website. Add {{origin}} if users sign in here.":"現在のサイトが一覧にありません。ここでログインする場合は {{origin}} を追加してください。","This may cause cache failures.":"これによりキャッシュ障害が発生する可能性があります。","This may take a few moments while we validate the request and update your session.":"リクエストを検証し、セッションを更新するのに数分かかる場合があります。","This model already uses an expression.":"このモデルは既に式を使用しています。","This model has both fixed price and ratio billing conflicts":"このモデルには固定価格と比率請求の両方の競合があります","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"このモデルには固定価格と比率設定の両方があります。現在のモードで保存すると、競合するフィールドが上書きされます。","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"このモデルには固定価格とトークン価格設定の両方があります。現在のモードで保存すると、競合するフィールドが上書きされます。","This model has provider-specific billing and must be converted manually.":"このモデルはプロバイダー固有の課金を使用しているため、手動で変換してください。","This model is billed by usage, but the administrator has not configured its pricing yet.":"このモデルは使用量に基づいて課金されますが、管理者がまだ料金を設定していません。","This model is not available in any group, or no group pricing information is configured.":"このモデルはどのグループでも利用できないか、グループの料金情報が設定されていません。","This month":"今月","This OpenRouter Claude price derives cache-write usage from upstream cost and must be converted manually.":"このOpenRouter Claude料金は上流の費用からキャッシュ書き込み使用量を逆算するため、手動で変換してください。","This operation is only supported for vLLM channels":"この操作は vLLM チャネルでのみ利用できます","This operation is only supported for vLLM or SGLang channels":"この操作は vLLM または SGLang チャネルでのみ利用できます","This page has not been created yet.":"このページはまだ作成されていません。","This Passkey domain is not available on this website. Use its original website or another verification method.":"このパスキードメインは現在のサイトでは使えません。元のサイトか、別の認証方法を使用してください。","This plan does not allow balance redemption":"このプランでは残高での交換は許可されていません","This plugin has no factory fallback. Deleting or disabling it makes this platform unavailable.":"このプラグインには組み込みのフォールバックがありません。削除または無効化するとプラットフォームが利用できなくなります。","This plugin path does not resolve within the source repository.":"このプラグインのパスはソースリポジトリ内を指していません。","This preview reads static plugin declarations. The gateway validates the plugin during installation.":"このプレビューはプラグインの静的な宣言を読み取ります。インストール時にゲートウェイが検証します。","This project must be used in compliance with the":"このプロジェクトは、以下を遵守して使用する必要があります","This provider is unavailable for this model.":"このプロバイダーでは現在このモデルを利用できません。","This removes {{count}} failed models from this channel. This action cannot be undone.":"この操作はこのチャンネルから失敗した {{count}} 個のモデルを削除します。元に戻せません。","This route discovers upstream OpenAI models and cannot be split or matched by client model rules.":"このルートはアップストリームの OpenAI モデルを検出するためのもので、分割やクライアントモデルルールによる照合はできません。","This route is used only by channel management to discover upstream models.":"このルートは、チャネル管理で上流モデルを取得するためだけに使用されます。","This route is used only by channel management to query the upstream balance.":"このルートは、チャネル管理で上流残高を照会するためだけに使用されます。","This session will lose access immediately and must sign in again.":"このセッションは直ちにアクセスできなくなり、再度サインインが必要になります。","This site currently has {{count}} models enabled":"このサイトでは現在 {{count}} 個のモデルが有効です","This source does not publish a sha256 for this version, so the downloaded source cannot be pinned to what the source intended.":"このソースはこのバージョンの sha256 を公開していないため、ダウンロードしたソースがソース側の意図した内容と一致するか確認できません。","This source lists no installable task plugins.":"このソースにはインストール可能なタスクプラグインがありません。","This Telegram account is already bound.":"この Telegram アカウントはすでに連携されています。","This Telegram account is not linked. Sign in using another method and link it first.":"この Telegram アカウントは連携されていません。別の方法でログインしてから連携してください。","This Telegram binding request has expired or has already been used.":"この Telegram 連携リクエストは期限切れか、すでに使用されています。","This tier catches any request that did not match earlier tiers.":"この段階は、前の段階に一致しなかったすべてのリクエストを受け取ります。","this token group":"このトークングループ","This Uptime Kuma group will be removed from the list.":"この Uptime Kuma グループはリストから削除されます。","This user account is disabled.":"このユーザーアカウントは無効です。","This user account no longer exists.":"このユーザーアカウントは存在しません。","this user group":"このユーザーグループ","Token count exceeds the limit. Only exact search is allowed, do not use the % wildcard":"トークン数が上限を超えています。完全一致検索のみ可能なため、% ワイルドカードは使用しないでください","This user has no bindings":"このユーザーには連携がありません","This verification has already been used. Please verify again.":"この認証はすでに使用されています。もう一度認証してください。","This verification method is currently unavailable.":"この確認方法は現在利用できません。","This verification method is not allowed for this action.":"この操作ではこの確認方法を使用できません。","Token has expired and cannot be enabled. Please modify the expiration time or set it to never expire":"トークンの有効期限が切れているため有効にできません。有効期限を変更するか、無期限に設定してください","This verification method requires its dedicated verification flow.":"この確認方法では専用の確認フローを使用してください。","This version is ignored":"このバージョンの通知は停止中です","Token ID or user ID is empty":"トークン ID またはユーザー ID が空です","This version is saved but not active. Activate it to replace the current version, or activate it later from the Versions tab.":"このバージョンは保存済みですが、まだ有効ではありません。有効化すると現在のバージョンを置き換えます。後で「バージョン」タブから有効化することもできます。","Token IDs cannot be empty":"トークン ID は空にできません","This week":"今週","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"既存のルールリストに2つのテンプレートルール(Codex CLIとClaude CLI)を追加します。","This will clear custom pricing ratios and revert to upstream defaults.":"これにより、カスタム料金比率がクリアされ、上位のデフォルトに戻ります。","This will delete all":"これによりすべて削除されます","This will delete all used, disabled, and expired redemption codes.":"使用済み、無効化済み、期限切れの引き換えコードをすべて削除します。","This will delete all channel affinity cache entries still in memory.":"メモリ内のすべてのチャネルアフィニティキャッシュエントリが削除されます。","Token name is too long":"トークン名が長すぎます","This will delete temporary cache files that have not been used for more than 10 minutes":"10分以上使用されていない一時キャッシュファイルが削除されます","This will extend the deployment by the specified hours.":"これにより、デプロイメントを指定された時間分延長します。","This will permanently delete all manually and automatically disabled channels. This action cannot be undone.":"手動および自動で無効化されたすべてのチャネルを完全に削除します。この操作は元に戻せません。","This will permanently delete API key":"これによりAPIキーが完全に削除されます","This will permanently delete redemption code":"これにより引き換えコードが完全に削除されます","This will permanently delete user":"これによりユーザーが完全に削除されます","This will permanently remove all log entries created before {{date}}.":"{{date}} より前に作成されたすべてのログエントリが完全に削除されます。","This will permanently remove log entries before the selected timestamp.":"選択したタイムスタンプより前のログエントリが完全に削除されます。","This will rebuild the channel routing index from every channel configuration, including supported models, groups, priorities, and weights. Routing may be briefly incomplete while the rebuild is running. Continue?":"すべてのチャネル設定からルーティングインデックスを再構築します。対応モデル、グループ、優先度、重みが含まれます。再構築中はルーティングが一時的に不完全になる可能性があります。続行しますか?","Token quota is exhausted and cannot be enabled. Please modify the remaining quota or set it to unlimited":"トークンのクォータを使い切ったため有効にできません。残りクォータを変更するか、無制限に設定してください","This will remove {{removed}} forwarding routes and create {{created}} selected routes. Model list and balance routes will be preserved.":"{{removed}} 件の転送ルートを削除し、選択した {{created}} 件を作成します。モデル一覧と残高ルートは保持されます。","This will remove {{removed}} forwarding routes and replace them with the {{template}} template ({{created}} routes). Model list and balance routes will be preserved.":"{{removed}} 件の転送ルートを削除し、{{template}} テンプレート({{created}} 件のルート)に置き換えます。モデル一覧と残高ルートは保持されます。","This will update the priority to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"タグ \\"{{tag}}\\" の {{count}} 件すべてのチャネルの優先度を {{value}} に更新します。続行しますか?","This will update the weight to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"タグ \\"{{tag}}\\" の {{count}} 件すべてのチャネルの重みを {{value}} に更新します。続行しますか?","This year":"今年","Thought for {{duration}} seconds":"{{duration}} 秒間思考しました","Three calls made by the same user, whose user group is vip:":"同じユーザー(ユーザーグループは vip)による3回の呼び出し:","Three calls made by the same vip user. Assume the base price of one call is 10.":"同じ vip ユーザーによる3回の呼び出し。1回の基本価格を 10 とします:","Three groups; the override matrix has exactly one cell filled in (highlighted).":"3つのグループ。上書きマトリクスには1つのセルだけ値が入っています(ハイライト表示)。","Three steps to get started":"3ステップで始める","Throughput":"スループット","Throughput by group":"グループ別スループット","Throughput short":"TPS","Throughput trend":"スループット推移","Tier":"ティア","Tier billing mode":"階層の課金方式","Tier conditions":"段階条件","Tier name":"ティア名","Tiered":"段階的","Tiered (billing expression)":"段階的(課金式)","Tiered price table":"段階別価格表","Tiered pricing":"階層料金","tiers":"階層","Too many items in batch request, maximum is {{max}}":"一括リクエストの件数が多すぎます。最大 {{max}} 件です","Time":"時間","Time between scheduled channel checks":"定期チャネルチェックの実行間隔","Time functions use the timezone written in the expression.":"時刻関数は式で指定されたタイムゾーンを使用します。","Time Granularity":"時間の粒度","Tool price \\"{{name}}\\" must be a finite non-negative number":"ツール価格「{{name}}」は有限の 0 以上の数値である必要があります","Tool price \\"{{name}}\\" must be a non-negative number":"ツール価格「{{name}}」は 0 以上の数値である必要があります","Time range":"時間範囲","Time remaining":"残り時間","Tool prices must be a JSON object":"ツール価格は JSON オブジェクトである必要があります","Time window for rate limiting":"レート制限の時間枠","Time-based":"時間条件あり","Time-sliced cache (Claude)":"時間分割キャッシュ(Claude)","Time:":"時間:","Timeline":"タイムライン","times":"回","Timezone":"タイムゾーン","Timing":"所要時間","Tip":"ヒント","Tip: after configuring one model, select others in the table and use bulk copy.":"ヒント:1つのモデルを設定した後、表で他のモデルを選択して一括コピーを使用できます。","to":"〜","to access this resource.":"このリソースにアクセスするには。","To Anthropic Messages":"Anthropic Messages へ","to confirm":"確認する","To Gemini Generate Content":"Gemini Generate Content へ","To Lower":"小文字に変換","To Lowercase":"小文字化","Top-up amount cannot be less than {{min}}":"チャージ数量は {{min}} 未満にできません","Top-up amount cannot exceed {{max}}":"チャージ数量は {{max}} を超えることはできません","To OpenAI Chat":"OpenAI Chat へ","To OpenAI Responses":"OpenAI Responses へ","to override billing when a user in one group uses a token of another group.":"あるグループのユーザーが別のグループのトークンを使用する場合に、請求を上書きするため。","Top-up is processing, please try again later":"チャージを処理中です。しばらくしてから再試行してください","to the Models list so users can use them before the mapping sends traffic upstream.":"マッピングがトラフィックをアップストリームに送信する前にユーザーが使用できるように、モデルリストに追加します。","Top-up order does not exist":"チャージ注文が存在しません","Top-up quota exceeds the range the system can represent":"チャージクォータがシステムで扱える範囲を超えています","Top-up quota limit exceeded":"チャージクォータの上限を超えています","Top-up quota must be greater than 0":"チャージクォータは 0 より大きくする必要があります","To Upper":"大文字に変換","To Uppercase":"大文字化","Topped up {{quota}} with a redemption code, code ID {{id}}":"引き換えコードで {{quota}} をチャージ、コード ID {{id}}","to view this resource.":"このリソースを表示するには。","Today":"今日","Toggle columns":"列の切り替え","Toggle navigation menu":"ナビゲーションメニューの切り替え","Toggle plan":"プランの切り替え","Toggle theme":"テーマの切り替え","token":"トークン","Token":"トークン","token (unit)":"token","Token Breakdown":"トークン内訳","Token Endpoint":"トークンエンドポイント","Token Endpoint (Optional)":"トークンエンドポイント (オプション)","Token estimator":"トークン見積り","Token group":"トークングループ","Token has no group":"トークンにグループなし","Token ID":"トークン ID","Token identifier":"トークン識別子","Total quota cannot be negative":"合計クォータを負の値にすることはできません","Token Limits":"トークン制限","Token management":"トークン管理","Token Management":"トークン管理","Token Mgmt":"トークン管理","Token name":"トークン名","Token Name":"トークン名","Token obtained from your Gotify application":"Gotifyアプリケーションから取得したトークン","Token operation details":"トークン操作の詳細","Token or per-call pricing":"トークン単位またはリクエスト単位の課金","Token price for audio input.":"音声入力のトークン価格。","Token price for audio output.":"音声出力のトークン価格。","Token price for cache reads.":"キャッシュ読み取りのトークン価格。","Token price for creating cache entries.":"キャッシュ作成のトークン価格。","Token price for image input.":"画像入力のトークン価格。","Token prices":"トークン価格","Token regenerated and copied to clipboard":"トークンが再生成され、クリップボードにコピーされました","Token scope":"トークンの範囲","Token share by model author across the last 24 hours":"過去 24 時間におけるモデル提供者別のトークンシェア","Token share by model author across the past few weeks":"過去数週間におけるモデル提供者別のトークンシェア","Token share by model author across the past month":"過去 1 か月におけるモデル提供者別のトークンシェア","Token share by model author across the past year":"過去 1 年間におけるモデル提供者別のトークンシェア","Transfer failed {{error}}":"転送に失敗しました {{error}}","Token share by model author since launch":"リリース以降のモデル提供者別のトークンシェア","Token unit":"トークン単位","Token usage by model since launch":"リリース以降のモデル別トークン使用量","Token-based":"トークンベース","Tokenizer":"トークナイザー","tokens":"トークン","Tokens":"トークン","tokens / mo":"トークン / 月","Tokens by category":"カテゴリ別トークン","Tokens Only":"トークンのみ","Tokens per minute":"1分あたりのトークン","Tokens since launch":"リリース以降のトークン","Tokens_usage":"トークン","Tokens-only mode will show raw quota values regardless of this toggle.":"トークンのみモードでは、このトグルに関係なく生のクォータ値が表示されます。","Too many active login sessions. On a device where you are already signed in, open Login sessions and use “Sign out other sessions” to revoke them. If you cannot access a signed-in device, reset your password to sign out all sessions.":"有効なログインセッション数が上限に達しました。すでにログイン済みの端末で「ログインセッション」を開き、「他のセッションからログアウト」を使用して取り消してください。ログイン済み端末を利用できない場合は、パスワードをリセットしてすべてのセッションからログアウトしてください。","Too many files. Some were not added.":"ファイルが多すぎます。一部は追加されませんでした。","Too many incorrect codes. Start email verification again.":"コードの入力ミスが多すぎます。メール認証をやり直してください。","Too many login sessions were created recently. Please wait for the rolling window to pass, then try again.":"最近作成されたログインセッションが多すぎます。ローリングウィンドウが経過してから、もう一度お試しください。","Too many requests":"リクエストが多すぎます","Tool / function declarations the model may call":"モデルが呼び出せるツール / 関数の宣言","Tool identifier":"ツールID","Tool price settings":"ツール価格設定","Tool prices":"ツール価格","Tool-choice policy or specific tool name":"ツール選択ポリシーまたは具体的なツール名","Tools":"ツール","Top {{count}}":"上位 {{count}}","Turnstile token is empty":"Turnstile トークンが空です","Turnstile verification failed, please refresh and try again!":"Turnstile の検証に失敗しました。ページを更新して再試行してください!","Top app":"トップアプリ","Top apps":"人気アプリ","Top Apps":"人気アプリ","Top integrations using this model":"このモデルを利用する主要な連携","Top model":"トップモデル","Top models":"人気モデル","Top Models":"トップモデル","Top models by traffic":"トラフィック上位モデル","Top P":"Top P","Top up balance and view billing history.":"残高をチャージし、請求履歴を確認。","Top up, pay for subscriptions, check in, and transfer referral rewards.":"チャージ、サブスクリプションの支払い、チェックイン、紹介報酬の振替を行います。","Top Users":"上位ユーザー","Top vendors":"人気ベンダー","Top-up":"チャージ","Top-up amount options":"トップアップ金額オプション","Top-up Audit Info":"入金の監査情報","Top-up group ratios":"トップアップグループ比率","Top-Up Link":"チャージリンク","top-up ratio":"チャージ倍率","Top-up ratio":"チャージ倍率","Topup Amount":"チャージ額","Total":"合計","Unable to connect to {{provider}} server, please try again later":"{{provider}} サーバーに接続できません。しばらくしてから再試行してください","Unable to create the Passkey credential":"Passkey の資格情報を作成できません","Total {{count}} records":"全 {{count}} 件","Total = used + remaining. It is not an initial allocation or a periodic budget; changing the remaining quota changes the total and percentage.":"合計 = 使用済み + 残り。初期の割当量や期間ごとの予算ではありません。残りを変更すると合計と使用率も変わります。","Total Allocated":"総割り当て","Total attempt budget exhausted":"全試行回数を消費済み","Total check-ins":"総チェックイン数","Total consumed":"合計消費量","Total consumed quota":"合計消費クォータ","Total cost":"総費用","Total Cost":"総コスト","Total Count":"合計数","Total earned":"总收入","Total Earned":"総収益","Total GPUs":"合計 GPU","Unauthorized, insufficient privileges":"権限が不足しているため、この操作は実行できません","Unauthorized, invalid access token":"権限がありません。アクセストークンが無効です","Unauthorized, invalid user info":"権限がありません。ユーザー情報が無効です","Unauthorized, not logged in and no access token provided":"権限がありません。ログインしておらず、アクセストークンも指定されていません","Unauthorized, the access token has expired":"権限がありません。アクセストークンの有効期限が切れています","Total invitation revenue":"招待による総収益","Total Log Size":"ログ合計サイズ","Total Quota":"合計クォータ","Unbound successfully":"連携を解除しました","Total quota included in the plan, usable per billing period. 0 means unlimited.":"プランに含まれる合計クォータ。請求期間ごとに使用可能。0 は無制限を意味します。","Total requests allowed per period. 0 = unlimited.":"期間ごとに許可されるリクエストの総数。0 = 無制限。","Total requests made":"合計リクエスト数","Total Revenue":"累計収益","Total time":"総時間","Total tokens":"合計トークン","Total Tokens":"合計トークン","Total Usage":"総使用量","Total Used":"累計使用額","Total:":"合計:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"リクエストごとの消費を追跡し、使用状況分析に利用します。これをオンにすると、データベースへの書き込みが増加します。","Track usage, costs and performance with real-time analytics":"リアルタイム分析で使用量、コスト、パフォーマンスを追跡","Tracked apps":"追跡中のアプリ","Tracks current account base limits and additional metered usage on Codex upstream.":"Codex 上でのアカウント基礎枠と追加従量の利用量を表示します。","Trading insights, accounting, advisory":"トレーディング分析・会計・アドバイザリー","Traditional Chinese":"繁体字中国語","Transfer":"振替","Undo":"元に戻す","Unknown OAuth provider":"不明な OAuth プロバイダーです","Unknown rule name":"不明なルール名です","Unknown setting type: {{type}}":"不明な設定タイプです:{{type}}","Transfer Amount":"振替金額","Transfer failed":"転送に失敗しました","Transfer Rewards":"報酬の振替","Transfer successful":"転送が成功しました","Transfer to Balance":"残高への振替","Translation":"翻訳","Transparent Billing":"透明性のある請求","Trend":"トレンド","Trending down":"下降中","Unsupported add mode":"サポートされていない追加モードです","Unsupported operation":"サポートされていない操作です","Unsupported payment channel":"サポートされていない支払いチャネルです","Unsupported payment method":"サポートされていない支払い方法です","Trending up":"上昇中","Triggered garbage collection":"ガベージコレクションを実行しました","Trim leading/trailing whitespace":"先頭/末尾の空白を除去","Trim Prefix":"プレフィックス削除","Trim Space":"空白削除","Trim Suffix":"サフィックス削除","Truncate embeddings to this many dimensions":"指定した次元数にベクトルを切り詰めます","Trusted":"信頼済み","Try adjusting your search":"検索条件を調整してみてください","Try adjusting your search to locate a missing model.":"見つからないモデルを見つけるには、検索を調整してみてください。","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"グループ別の TTFT 分位数、スループット、30 日間の稼働率","TTL":"TTL","TTL (seconds, 0 = default)":"TTL(秒、0 = デフォルト)","TTL (seconds)":"TTL(秒)","Tune selection priority, testing, status handling, and request overrides.":"選択優先度、テスト、ステータス処理、リクエスト上書きを調整します。","Turnstile is enabled but site key is empty.":"Turnstile が有効ですが、サイトキーが空です。","Tutoring, learning aids, assessment":"個別指導・学習補助・評価","Two-factor Authentication":"2要素認証","Two-Factor Authentication":"2要素認証","Two-factor authentication disabled":"二要素認証が無効になりました","Two-factor authentication enabled successfully!":"二要素認証が正常に有効化されました!","Two-factor authentication is already enabled.":"二段階認証はすでに有効です。","Two-factor authentication is not enabled.":"二段階認証は有効になっていません。","Two-factor authentication is temporarily locked.":"二段階認証は一時的にロックされています。","Two-factor authentication reset":"二要素認証がリセットされました","Two-Step Verification":"2段階認証","Update successful":"更新しました","Type":"タイプ","Type (common)":"タイプ(共通)","Type *":"タイプ *","Type to confirm":"確認のため と入力してください","Type a command or search...":"コマンドまたは検索を入力...","Type the confirmation text here":"確認テキストをここに入力","Type-Specific Settings":"タイプ固有の設定","Type:":"タイプ:","UI granularity only — data is still aggregated hourly":"UIの粒度のみ — データは引き続き時間単位で集計されます","Unable to build Passkey assertion":"Passkey アサーションを作成できません","Unable to compare versions":"バージョンを比較できません","Unable to confirm the update result":"更新結果を確認できません","Unable to estimate price for this deployment.":"このデプロイメントの価格を推定できません。","Unable to generate chat link. Please contact your administrator.":"チャットリンクを生成できません。管理者にご連絡ください。","Unable to load groups":"グループをロードできません","Unable to load login sessions":"ログインセッションを読み込めません","Unable to load rankings":"ランキングを読み込めません","Unable to load rankings data":"ランキングデータを読み込めません","Unable to open chat":"チャットを開けません","Unable to parse Passkey login options from response":"応答からPasskeyのログインオプションを読み取れません","Unable to parse structured pricing":"構造化された価格を解析できません","Unable to prepare chat link. Please ensure you have an enabled API key.":"チャットリンクを準備できません。有効な API キーが設定されていることを確認してください。","Unable to read clipboard":"クリップボードを読み取れません","Unauthorized":"未認証","Unauthorized Access":"不正アクセス","Unavailable":"表示不可","Unbind":"連携解除","Unbind failed":"連携解除に失敗しました","Unbound {{provider}}":"{{provider}}の連携を解除しました","Unchanged":"変更なし","Underflow":"アンダーフロー","Underground":"アンダーグラウンド","Understand how user groups, token groups, ratios, and special rules work together.":"ユーザーグループ、トークングループ、倍率、特殊ルールがどのように連携するかを理解します。","Upgrade group does not exist":"アップグレードグループが存在しません","Understand image inputs alongside text":"テキストとともに画像入力を理解","Unexpected release payload":"予期しないリリースデータ","Unified API Gateway for":"統合APIゲートウェイ -","Unique identifier for this group.":"このグループの一意の識別子。","unit":"回","Unit":"単位","Unit price (local currency / USD)":"単価 (現地通貨 / USD)","Unit price (USD)":"単価 (USD)","Unit price must be greater than 0":"単価は 0 より大きい必要があります","Unit price: {{field}}":"{{field}}の単価","Units per USD":"USDあたりのユニット数","Unknown":"不明","Unknown device":"不明なデバイス","Unknown version":"不明なバージョン","Unlimited":"無制限","Unlimited Quota":"無制限のクォータ","Unrecognized status code":"認識できないステータスコード","Unsaved changes":"未保存の変更","Unset legacy prices use the billing engine defaults.":"未設定の旧方式の料金には、課金エンジンの既定値が適用されます。","Unset price":"価格未設定","Unset price models":"価格が未設定のモデル","Unsupported account password hashing configuration.":"アカウントのパスワードハッシュ設定がサポートされていません。","Unsupported verification method: {{method}}":"サポートされていない認証方法です: {{method}}","Until":"まで","Untitled":"無題","Untrusted upstream data:":"信頼されていないアップストリームデータ:","Unused":"未使用","Up to 4 strings that stop generation":"生成を停止する文字列を最大 4 個まで","Up to date":"最新","Update":"更新","Update All Balances":"すべての残高を更新","Update API Key":"API キーを更新","Update API token":"API トークンを更新","Update API token “{{name}}”":"API トークン「{{name}}」を更新","Update available":"更新あり","Update Balance":"残高を更新","Update balance for:":"残高を更新:","Update Channel":"チャネルを更新","Update channel configuration and click save when you\'re done.":"チャネル設定を更新し、完了したら保存をクリックしてください。","Update check timed out. Try again.":"更新の確認がタイムアウトしました。再試行してください。","Update completed":"更新が完了しました","Update configuration":"設定を更新","Update failed":"更新に失敗しました","Update Model":"モデルを更新","Update model configuration and click save when you\'re done.":"モデル設定を更新し、完了したら保存をクリックしてください。","Update plan info":"プラン情報を更新","Update Provider":"プロバイダーを更新","Update Redemption Code":"引き換えコードを更新","Update results":"更新結果","Update selected fields":"選択した項目を更新","Upstream returned no usage":"上流から使用量が返されませんでした","Upstream returned no usage, so nothing was charged (possibly an upstream timeout)":"上流から使用量が返されなかったため課金されていません(上流のタイムアウトの可能性があります)","Update succeeded":"更新に成功しました","Update the API key by providing necessary info.":"必要な情報を提供して API キーを更新してください。","Upstream task not found":"上流でタスクが見つかりません","Update the configuration for this custom OAuth provider.":"このカスタムOAuthプロバイダーの設定を更新します。","Upstream task timed out (over 1 hour)":"上流タスクがタイムアウトしました(1 時間超過)","Update the redemption code by providing necessary info.":"必要な情報を提供して、引き換えコードを更新してください。","Update the reusable bundle below.":"以下の再利用可能なバンドルを更新してください。","Update the session binding after a successful switch":"切り替え成功後にセッションの関連付けを更新","Update the user by providing necessary info.":"必要な情報を提供してユーザーを更新します。","Update vendor information for {{name}}":"{{name}} のベンダー情報を更新","Update your password for account:":"アカウントのパスワードを更新:","Update your password to keep your account secure":"アカウントを安全に保つためにパスワードを更新してください","Updated":"更新されました","Updated {{models}} model assignments and deleted {{vendors}} vendor records.":"{{models}} 件のモデル割り当てを更新し、{{vendors}} 件のプロバイダーを削除しました。","Uptime Kuma groups cannot exceed 20 entries":"Uptime Kuma グループは 20 件までです","Updated a custom OAuth provider":"カスタム OAuth プロバイダーを更新しました","Updated a deployment":"デプロイメントを更新しました","Updated a model":"モデルを更新しました","Updated a prefill group":"プリフィルグループを更新しました","Updated a redemption code":"引換コードを更新しました","URL must start with http:// or https://":"URL は http:// または https:// で始まる必要があります","Updated a subscription plan":"サブスクリプションプランを更新しました","Updated a vendor":"ベンダーを更新しました","Updated At":"更新日時","Updated channel {{name}} (ID: {{id}})":"チャネル {{name}} を更新しました(ID: {{id}})","Updated channel status (ID: {{id}})":"チャネルの状態を更新(ID: {{id}})","Updated daily":"毎日更新","Updated Passkey domains: removed {{domains}}; affected {{known}}; unknown {{unknown}}":"パスキードメインを更新:削除 {{domains}}、影響あり {{known}}、ドメイン不明 {{unknown}}","Updated successfully":"正常に更新されました","Updated system setting {{key}}":"システム設定 {{key}} を更新しました","Updated user {{username}} (ID: {{id}})":"ユーザー {{username}} を更新しました(ID: {{id}})","Updates have not been checked yet.":"更新はまだ確認されていません。","Updates with the system":"システムとともに更新","Updating all channel balances. This may take a while. Please refresh to see results.":"すべてのチャネル残高を更新中です。これには少し時間がかかる場合があります。結果を確認するには更新してください。","Updating...":"更新中...","Upgrade {{name}}":"{{name}} をアップグレード","Upgrade and enable":"アップグレードして有効化","Upgrade available: v{{installed}} to v{{latest}}":"アップグレード可能:v{{installed}} から v{{latest}}","Upgrade Group":"グループをアップグレード","Upgrade plaintext SMTP connection with STARTTLS before authentication":"認証前に STARTTLS で平文の SMTP 接続を暗号化する","Upload":"アップロード","Upload a JavaScript task platform plugin.":"JavaScript タスクプラットフォームプラグインをアップロードします。","Upload a single service account JSON file":"単一のサービスアカウントJSONファイルをアップロードする","Upload a task plugin to add a platform.":"タスクプラグインをアップロードしてプラットフォームを追加します。","Upload file":"ファイルをアップロード","Upload files":"ファイルをアップロード","Upload multiple JSON files in batch modes":"バッチモードで複数のJSONファイルをアップロードする","Upload new plugin version":"プラグインの新バージョンをアップロード","Upload new version":"新バージョンをアップロード","Upload or reference a local configuration file.":"ローカルの構成ファイルをアップロードまたは参照してください。","Upload photo":"写真をアップロード","Upload plugin":"プラグインをアップロード","Upload task plugin":"タスクプラグインをアップロード","Uploading a plugin is an administrator-level trust decision. A plugin can access channel credentials and shape upstream requests. Review its source and diff before activation.":"プラグインのアップロードは管理者レベルの信頼判断です。プラグインはチャネル認証情報にアクセスし、上流リクエストを構成できます。有効化前にソースと差分を確認してください。","Uploading...":"アップロード中...","Upscale":"アップスケール","Upstream":"アップストリーム","Upstream authentication":"上流サービスの認証","Upstream connection":"上流接続","Upstream did not return reset credit details.":"上流からリセット回数の詳細が返されませんでした。","Upstream JSON response":"上流 JSON レスポンス","Upstream Model":"上流へのリクエストモデル","Upstream Model Detection Settings":"アップストリームモデル検出設定","Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.":"上流モデル検出タスクを開始しました。システム情報で進捗を確認し、完了後に更新してステージングされた変更をご確認ください。","Upstream model list":"上流のモデル一覧","Upstream Model Name":"上流のモデル名","Upstream Model Update Check":"アップストリームモデル更新チェック","Upstream Model Updates":"上流モデルの更新","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"上流モデル更新を処理しました:{{added}} 個追加、{{removed}} 個削除、今回 {{ignored}} 個無視、合計 {{totalIgnored}} 個の無視モデル","Upstream names returned by the provider":"上流が返すモデル名","Upstream path":"上流パス","Upstream path is required":"上流パスは必須です","Upstream path must be a full URL or a path starting with /":"上流パスは完全な URL、または / で始まるパスである必要があります","Upstream price sync":"アップストリーム価格同期","Upstream prices fetched successfully":"上流価格を正常に取得しました","Upstream protocol plan":"上流プロトコルプラン","Upstream ratios fetched successfully":"アップストリーム比率が正常に取得されました","Upstream receives":"上流が受信","Upstream request failed":"上流リクエスト失敗","Upstream Request ID":"上流リクエストID","Upstream response":"上流レスポンス","Upstream Response":"アップストリームレスポンス","Upstream Response (billing-usage-anthropic-estimated)":"アップストリームレスポンス (billing-usage-anthropic-estimated)","Upstream Response (billing-usage-anthropic)":"アップストリームレスポンス (billing-usage-anthropic)","Upstream Response (billing-usage-gemini-estimated)":"アップストリームレスポンス (billing-usage-gemini-estimated)","Upstream Response (billing-usage-gemini)":"アップストリームレスポンス (billing-usage-gemini)","Upstream Response (billing-usage-openai-estimated)":"アップストリームレスポンス (billing-usage-openai-estimated)","Upstream Response (billing-usage-openai)":"アップストリームレスポンス (billing-usage-openai)","upstream services integrated":"アップストリームサービス連携","Upstream Task ID":"アップストリームタスク ID","Upstream task plugins":"上流タスクプラグイン","Upstream Updates":"アップストリーム更新","Upstream URL":"上流 URL","Upstream URL must be a full URL":"上流 URL は完全な URL である必要があります","Upstream vendor missing":"上流にベンダー情報がありません","uptime":"稼働時間","Uptime":"稼働時間","Uptime (30d)":"稼働率 (30 日)","Uptime (last 30 days)":"稼働率(過去 30 日間)","Uptime Kuma":"稼働時間Kuma","Uptime Kuma groups saved successfully":"Uptime Kuma グループが正常に保存されました","Uptime Kuma URL":"稼働時間KUMA URL","Uptime since":"稼働開始日時","URL":"URL","URL is required":"URL は必須です","URL to your logo image (optional)":"ロゴ画像のURL (オプション)","Use the same priority as the highlighted channels":"強調表示されたチャネルと同じ優先度にします","User does not exist":"ユーザーが存在しません","US dollar (USD)":"米ドル(USD)","Usage":"使用量","Usage · {{price}}":"使用量 · {{price}}","Usage at a glance":"使用状況の概要","Usage guide":"使用ガイド","User group will be reverted to {{group}}":"ユーザーグループは {{group}} に戻ります","User group will be upgraded to {{group}}":"ユーザーグループは {{group}} にアップグレードされます","Usage logs":"使用ログ","Usage Logs":"利用履歴","Usage mode":"利用モード","User has been banned":"ユーザーは利用停止されています","User has been deleted":"ユーザーは削除されています","Usage parameters":"使用量パラメータ","Usage percentage":"使用率","Usage prices":"使用量料金","Usage-based":"使用量ベース","Usage-based billing":"使用量ベースの課金","Usage-based billing · price not configured":"使用量ベースの課金 · 料金未設定","USD":"USD","USD Exchange Rate":"USD 為替レート","USD price per 1M input tokens.":"100万入力トークンあたりのUSD価格。","User registration failed or user ID retrieval failed":"ユーザー登録またはユーザー ID の取得に失敗しました","USD price per 1M tokens.":"100万トークンあたりのUSD価格。","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"+: はグループ追加、-: はデフォルト選択可能グループの削除、接頭辞なしはグループ追記に使います。","Use 8–128 characters.":"8~128文字で設定してください。","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"生体認証またはセキュリティキーを備えた互換性のあるブラウザまたはデバイスを使用して、パスキーを登録してください。","Use a different stable value for each instance, then restart the service.":"インスタンスごとに異なる安定した値を使用し、その後サービスを再起動してください。","Use a Passkey from another website":"別のサイトのパスキーを使用","Use a path to append it to the channel Base URL, or enter a full URL to override the Base URL for this route.":"パスを入力するとチャネルの Base URL に追加されます。完全な URL を入力すると、このルートでは Base URL を使わずその URL を使用します。","Username already exists or has been deleted":"このユーザー名は既に存在するか、削除済みです","Use access tokens to call the dashboard API from scripts. Each token only has the permissions you select.":"スクリプトからダッシュボード API を呼び出すときはアクセストークンを使います。各トークンには選択した権限だけが付与されます。","Use an HTTPS domain (or localhost for development) to configure Passkey.":"Passkey の設定には HTTPS のドメインを使用してください。開発時は localhost も使えます。","Username must be {{max}} characters or fewer":"ユーザー名は {{max}} 文字以内で入力してください","Use authenticator code":"認証コードを使用","Username or password is incorrect, or user has been banned":"ユーザー名またはパスワードが正しくないか、ユーザーが利用停止されています","Use backup code":"バックアップコードを使用","Use Bearer for all protocols":"すべてのプロトコルで Bearer を使用","Use channel type {{type}}":"チャネルタイプ {{type}} を使用","Users can download their own logs from the usage log page. Administrators can always export.":"ユーザーは利用履歴ページから自分のログをダウンロードできます。管理者はいつでもエクスポートできます。","Use default":"既定値を使用","Use disk cache when request body exceeds this size":"リクエストボディがこのサイズを超えた場合にディスクキャッシュを使用","Use exact client model names, separated by commas. Prefixes and wildcards are not supported.":"クライアントの正確なモデル名をカンマ区切りで入力します。プレフィックスやワイルドカードは使えません。","Use exact model names such as gpt-4o, or regex rules prefixed with re: such as re:^gemini-.":"gpt-4o のような完全一致のモデル名、または re:^gemini- のように re: で始まる正規表現ルールを使えます。","Use expression pricing when a dependent price is non-zero and its base price is zero.":"基準料金がゼロで関連料金がゼロでない場合は、式による料金設定を使用してください。","Use external tools to extend capabilities":"外部ツールを利用して機能を拡張","Use Mantle for supported Claude models and automatic prompt caching. Keep InvokeModel for older models and Amazon Nova.":"対応する Claude モデルと自動プロンプトキャッシュには Mantle を使用します。旧モデルと Amazon Nova には InvokeModel を使用してください。","Use model-level expression":"モデルの式を使用","Use model-level pricing":"モデルの料金設定を使用","Use one available reset credit for this channel. The reset request is sent only after confirmation.":"このチャンネルで利用可能なリセット回数を1回使用します。確認後にのみリセット要求を送信します。","Use one available reset credit to refresh the current Codex usage windows.":"利用可能なリセット回数を1回使用して、現在の Codex 使用量ウィンドウを更新します。","Use OpenAI-compatible Ollama chat API":"Ollama の OpenAI 互換チャット API を使用","Use our unified OpenAI-compatible endpoint in your applications":"アプリケーションでOpenAI互換の統一エンドポイントを使用","Use Passkey or 2FA to confirm your identity before revealing this channel key.":"チャネルキーを表示する前に、Passkey または 2FA で本人確認を行ってください。","Use Passkey to sign in without entering your password.":"パスワードを入力せずにサインインするには、パスキーを使用してください。","Use presets or upstream discovery to populate the model list faster.":"プリセットまたは上流検出を使ってモデルリストをすばやく入力します。","Use secure connection when sending emails":"メール送信時に安全な接続を使用する","Use sidebar shortcut":"サイドバーのショートカットを使用","Use the existing token total":"既存のトークン合計を使用","Use the full-width table to scan prices, then select a row to edit it here.":"表で価格を確認し、行を選択してここで編集します。","Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.":"トークンに設定されたグループを使います。トークンにグループがなければユーザーグループを使います。auto グループは自動割り当て順を上から順に試します。","Use the group set on the token. If the token has no group, use the user group. The auto group tries the configured groups from top to bottom.":"トークンに設定されたグループを使用します。未設定の場合はユーザーのグループを使用します。auto グループは設定されたグループを上から順に試行します。","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"料金グループ表で倍率と、トークン作成ドロップダウンに表示するかどうかを管理します。","Use this callback URL pattern when registering a custom OAuth provider.":"カスタム OAuth プロバイダーを登録するときは、このコールバック URL 形式を使用します。","Use this token for API authentication":"API認証にはこのトークンを使用してください","Use tier(name, fixed(amount)) for a USD price per request. Group and request multipliers still apply.":"tier(name, fixed(amount)) でリクエストごとの米ドル価格を設定します。グループ倍率とリクエスト倍率も適用されます。","Use your Passkey":"パスキーを使用","used":"使用済み","Used":"使用済み","Used {{used}} of {{total}} ({{percent}}%)":"使用済み {{used}} / {{total}}({{percent}}%)","Used / Remaining":"使用済み / 残り","Used amount":"使用済み","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"新しい商品の SuccessURL として使用されます。空のままにすると確認を求められます。","Used by route auth templates":"ルート認証テンプレートで使用","Used for load balancing. Higher weight = more requests":"ロードバランシングに使用されます。重みが高いほどリクエスト数が増えます","Used in URLs and API routes":"URLとAPIルートで使用されます","Used Quota":"使用済みクォータ","Used reset credits cannot be restored.":"使用済みのリセット回数は復元できません。","Used to authenticate with io.net deployment API":"io.net デプロイ API の認証に使用します","Used to authenticate with the worker. Leave blank to keep the existing secret.":"ワーカーの認証に使用されます。既存のシークレットを保持するには、空欄のままにしてください。","Used to decide the payment flow. Built-in keys include stripe for Stripe and waffo_pancake for Waffo Pancake; other values are sent to Epay as the type parameter.":"クリック後に使用する決済フローを決定します。組み込みキーは Stripe 用の stripe、Waffo Pancake 用の waffo_pancake です。それ以外の値は Epay の type パラメーターとして送信されます。","Used when a Task Plugin channel has no API address configured.":"タスクプラグインのチャネルに API アドレスが未設定の場合に使われます。","Used:":"使用済み:","Verification code is incorrect or has expired":"確認コードが正しくないか、期限切れです","User":"ユーザー","User {{id}}":"ユーザー {{id}}","User Agent":"ユーザーエージェント","User Agreement":"ユーザー利用規約","User Analytics":"ユーザー統計","User Consumption Ranking":"ユーザー消費ランキング","User Consumption Trend":"ユーザー消費トレンド","User Count":"ユーザー数","User created successfully":"ユーザーの作成に成功しました","User dashboard and quota controls.":"ユーザーダッシュボードとクォータ制御。","User deleted successfully":"ユーザーを削除しました","User demoted to regular user successfully":"ユーザーを通常ユーザーに降格しました","User disabled successfully":"ユーザーを無効化しました","User enabled successfully":"ユーザーを有効化しました","User Exclusive Ratio":"専用倍率","User group":"ユーザーグループ","User Group":"ユーザーグループ","User group name":"ユーザーグループ名","User Group: {{ratio}}x":"ユーザーグループ:{{ratio}}x","User groups that can access channels with this tag":"このタグを持つチャネルにアクセスできるユーザーグループ","User groups that can access this channel. ":"このチャネルにアクセスできるユーザグループ。","User ID":"ユーザー ID","User ID Field":"ユーザーIDフィールド","User ID:":"ユーザーID:","User Info Endpoint":"ユーザー情報エンドポイント","User Info Endpoint (Optional)":"ユーザー情報エンドポイント(オプション)","User Information":"ユーザー情報","User Menu":"ユーザーメニュー","User personal functions":"ユーザー個人機能","User promoted to admin successfully":"ユーザーを管理者に昇格しました","User selectable":"ユーザー選択可","User Subscription Management":"ユーザーサブスクリプション管理","User updated successfully":"ユーザーの更新に成功しました","User Verification":"ユーザー認証","User-Agent include (one per line)":"User-Agent include(1行に1つ)","Username":"ユーザー名","Username confirmation does not match":"ユーザー名の確認が一致しません","Username Field":"ユーザー名フィールド","Username or Email":"ユーザー名またはメールアドレス","Users":"ユーザー","Users call":"ユーザーの指定","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"ユーザーは左側のモデルを呼び出します。プラットフォームはリクエストを右側のアップストリームモデルに転送します。","Users in {{group}}":"{{group}} のユーザー","Users must wait for a successful drawing before upscales or variations.":"アップスケールやバリエーションを行う前に、ユーザーは成功した描画を待つ必要があります。","Users of vip, when billed as premium, pay ratio":"vip グループのユーザーが premium として課金されるときの倍率は","Vertex AI keys for batch adding cannot be empty":"一括追加する Vertex AI キーは空にできません","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"ユーザーにはユーザー選択可のグループだけが表示されます。選択不可グループも管理者は割り当てできます。","uses":"使用回数","Using built-in or default pricing":"組み込みまたは既定の料金を使用","Using the complete global Auto order ({{count}} groups)":"グローバル Auto の全順序を使用中({{count}} グループ)","v{{installed}} is installed but this source does not list it. Installing replaces it with v{{target}}.":"v{{installed}} がインストールされていますが、このソースには掲載されていません。インストールすると v{{target}} に置き換わります。","Validity":"有効期間","Validity Period":"有効期間","Value":"値","Value (supports JSON or plain text)":"値(JSONまたはプレーンテキスト対応)","Value is required":"値は必須です","Value metric":"値の指標","Value must be at least 0":"値は 0 以上である必要があります","Value Regex":"Value 正規表現","variable":"変数","variable)":"変数)","variable) *":"変数) *","Variables":"変数","Vary":"バリエーション","Vary (Strong)":"バリエーション(強)","Vary (Subtle)":"バリエーション(微)","Vast Range of AI Models":"膨大なAIモデル","vendor":"プロバイダー","Vendor":"ベンダー","Vendor created successfully":"ベンダーを作成しました","Vendor data changed. Preview again before applying.":"プロバイダーデータが変更されました。再度プレビューしてから適用してください。","Vendor deleted successfully":"ベンダーが正常に削除されました","Vendor details":"プロバイダー情報","Vendor management":"プロバイダー管理","Vendor Name":"ベンダー名","Vendor Name *":"ベンダー名 *","Vendor name and icon must not exceed 128 characters.":"プロバイダー名とアイコンキーはそれぞれ128文字以内で入力してください。","Vendor name is required":"プロバイダー名は必須です","Vendor updated successfully":"ベンダーを更新しました","Vendor:":"ベンダー:","Vendors":"プロバイダー","Vendors ranked by aggregated token volume":"トークン総使用量で順位付けされたベンダー","Vendors source":"ベンダーの取得元","Vendors still have {{count}} linked model records. Transfer or clear their assignments first.":"まだ {{count}} 件の関連モデルがあります。先に割り当てを移動または解除してください。","Verification code":"確認コード","Verification Code":"認証コード","Verification code must be 6 digits":"認証コードは6桁である必要があります","Verification code sent! Please check your email.":"認証コードを送信しました!メールを確認してください。","Verification code updates every 30 seconds.":"認証コードは 30 秒ごとに更新されます。","Verification does not match this action.":"確認がこの操作に対応していません。","Verification does not match this action\'s details. Please verify again.":"認証内容が今回の操作内容と一致しません。もう一度認証してください。","Verification email could not be sent. Start email verification again.":"確認メールを送信できませんでした。メール認証をやり直してください。","Verification email sent":"認証メールを送信しました","Verification failed":"認証に失敗しました","Verification failed. Please try again.":"確認に失敗しました。もう一度お試しください。","Verification flow expired":"認証手続きの有効期限が切れました","Verification is not configured properly":"認証が正しく設定されていません","Verification method":"検証方法","Verification proof was not returned":"認証証明が返されませんでした","Verification required to reveal the saved key.":"保存されたキーを表示するには、認証が必要です。","Verification scope is missing":"検証スコープがありません","Violation fee charged":"違反料金を請求しました","Verify":"認証","Verify again before retrying this action.":"この操作を再試行する前に、もう一度認証してください。","VIP group":"VIP グループ","Verify and Sign In":"確認してサインイン","Verify routing with Playground or your client":"Playground またはクライアントでルーティングを確認","Verify Setup":"設定を確認","Verify to create administrator":"認証して管理者を作成","Verify to delete user":"認証してユーザーを削除","Verify to demote user":"認証してユーザーを降格","Verify to disable user":"認証してユーザーを無効にする","Verify to enable user":"認証してユーザーを有効にする","Verify to promote user":"認証してユーザーを昇格","Verify to reset 2FA":"認証して 2FA をリセット","Verify to reset Passkey":"認証して Passkey をリセット","Verify to unbind account":"認証してアカウント連携を解除","Verify to update user credentials":"認証してユーザーの認証情報を更新","Verify to view channel key":"認証してチャネルキーを表示","Verify upstream pricing":"取得元の価格を確認","Verify your database connection":"データベース接続を確認","Verify your identity to finish signing in.":"本人確認を行い、ログインを完了してください。","Verifying credentials and pulling stores from your Pancake account...":"認証情報を検証し、Pancake アカウントからストアを取得しています...","Verifying your {{provider}} account":"{{provider}}アカウントを確認しています","Version":"バージョン","Version differences":"バージョンの差分","Version history":"バージョン履歴","Version Overrides":"バージョンオーバーライド","Versions":"バージョン","Vertex AI":"Vertex AI","Waffo Pancake configuration is incomplete":"Waffo Pancake の設定が不完全です","Waffo Pancake credentials are not configured":"Waffo Pancake の認証情報が設定されていません","Vertex AI API Key mode does not support batch creation":"Vertex AI API Key モードは一括作成をサポートしていません","Waffo Pancake is not configured or key is invalid":"Waffo Pancake が設定されていないか、キーが無効です","Waffo Pancake is not fully configured. Complete the gateway binding in payment settings first.":"Waffo Pancake の設定が完了していません。先に支払い設定でゲートウェイの連携を完了してください。","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI は functionResponse.id フィールドをサポートしません。有効にすると自動的に削除します。","Vertex AI Key Format":"Vertex AIキー形式","Vertex AI Project ID":"Vertex AI プロジェクト ID","e.g., my-project-123":"例: my-project-123","Vertex AI service account key must be valid JSON":"Vertex AI サービスアカウントキーは有効な JSON である必要があります","Video":"動画","Video length in seconds":"動画の長さ(秒)","Video pricing must be converted manually.":"動画料金は手動で変換してください。","Video Remix":"動画 Remix","Vidu":"Vidu","Waffo payment is not enabled":"Waffo 決済は有効になっていません","View":"表示","View all currently available models":"現在利用可能なすべてのモデルを表示","WaffoPancakeProductId is not configured for this plan":"このプランには WaffoPancakeProductId が設定されていません","View all top-up records, subscription plans, and user subscriptions.":"すべてのチャージ履歴、サブスクリプションプラン、ユーザーのサブスクリプションを表示します。","View all users\' usage logs, statistics, and tasks.":"すべてのユーザーの利用ログ、統計、タスクを表示します。","View API keys and their settings without the full key.":"API キーとその設定を表示します(完全なキーは含みません)。","View API token key":"API トークンキーを表示","View API token keys in batch":"API トークンキーを一括表示","View audit records from user and admin roles. Root records are always excluded.":"user と admin ロールの監査記録を表示します。root ロールの記録は常に除外されます。","View balance, top-up records, subscriptions, and referral information.":"残高、チャージ履歴、サブスクリプション、紹介情報を表示します。","View changelog source":"変更履歴のソースを表示","View channel lists and details without secrets.":"シークレットを含まないチャネル一覧と詳細を表示します。","View channel secrets":"チャンネルシークレットを表示","View complete API keys.":"API キーを完全な形で表示します。","View deployments and price estimates.":"デプロイと料金見積もりを表示します。","View detailed information about this user including balance, usage statistics, and invitation details.":"残高、使用統計、招待の詳細など、このユーザーに関する詳細情報を表示します。","View details":"詳細を表示","View document":"ドキュメントを表示","View groups and prefill groups.":"グループとプリフィルグループを表示します。","View installed task plugins and their settings.":"インストール済みのタスクプラグインとその設定を表示します。","View issued reset credits, grant dates, and expiration.":"発行済みリセット回数、付与日時、有効期限を表示します。","View key for API token “{{name}}”":"API トークン「{{name}}」のキーを表示","View logs":"ログを表示","View mapping":"マッピングを表示","View mode":"表示モード","View model statistics and charts":"モデルの統計とグラフを表示","View models":"モデルを表示","View models and vendors, and preview upstream sync.":"モデルとプロバイダーを表示し、アップストリーム同期をプレビューします。","View other accounts\' audit logs":"他のアカウントの監査ログを表示","View Passkey, two-factor, and sign-in binding status.":"Passkey、2要素認証、ログイン連携の状態を表示します。","View performance, system tasks, and system information.":"パフォーマンス、システムタスク、システム情報を表示します。","View Pricing":"価格を見る","View pricing for {{model}}":"{{model}} の料金を表示","View redemption codes.":"引き換えコードを表示します。","View scope":"表示範囲","View system settings, custom OAuth providers, and price sync sources.":"システム設定、カスタム OAuth プロバイダー、料金の同期元を表示します。","View the complete details for this":"この","Webhook URL cannot be empty":"Webhook URL を入力してください","View the complete details for this log entry":"このログエントリの完全な詳細を表示","View the complete details for this task":"このタスクの完全な詳細を表示します","View the complete error message and details":"エラーメッセージと詳細を表示","WeChat ID is empty!":"WeChat ID が空です!","View the complete prompt and its English translation":"プロンプト全文と英語訳を表示","View the generated image":"生成された画像を表示","View users, their sign-in bindings, and permission settings.":"ユーザー、ログイン連携、権限設定を表示します。","View your profile, groups, and available models.":"プロフィール、グループ、利用可能なモデルを表示します。","View your topup transaction records and payment history":"チャージ取引記録と支払い履歴を表示","View your usage logs, statistics, tasks, and audit logs.":"利用ログ、統計、タスク、監査ログを表示します。","Viewed channel key {{name}} (ID: {{id}})":"チャネルキー {{name}} を表示しました(ID: {{id}})","Violation Code":"違反コード","Violation deduction amount":"違反控除金額","Violation Fee":"違反料金","Violation Marker":"違反マーカー","vip":"vip","VIP users with premium access":"プレミアムアクセス権を持つVIPユーザー","Visible":"表示","Visible only to users with access to the model’s groups.":"モデルのグループにアクセスできるユーザーにのみ表示されます。","Vision":"ビジョン","Vision, image / video, document chat":"ビジョン・画像/動画・ドキュメントチャット","Visit Settings → General and adjust quota options...":"「設定」→「一般」にアクセスして、クォータオプションを調整してください...","Visitors must authenticate before accessing the pricing directory.":"訪問者は料金ディレクトリにアクセスする前に認証を行う必要があります。","Visitors must authenticate before accessing the rankings page.":"訪問者はランキングページにアクセスする前に認証を行う必要があります。","Visual":"ビジュアル","Visual edit":"ビジュアル編集","Visual editor":"ビジュアルエディター","Visual Editor":"ビジュアルエディタ","Visual indicator color for the API card":"APIカードの視覚的なインジケーターの色","Visual Mode":"ビジュアルモード","Visual Parameter Override":"パラメータ上書きのビジュアル編集","Visual prices use {{currency}} per declared unit; token prices are per 1M tokens. Raw expressions always use USD, with token terms divided by 1000000.":"ビジュアル価格は宣言された単位ごとの{{currency}}で、トークン価格は100万トークンあたりです。式の直接編集では常に米ドルを使用し、トークン項は1000000で割ります。","vLLM":"vLLM","vLLM API key, or EMPTY if authentication is disabled":"vLLM API キー(認証が無効の場合は EMPTY)","vLLM server address, without /v1":"vLLM サーバーのアドレス(/v1 を除く)","vLLM status":"vLLM の状態","VolcEngine":"VolcEngine","vs. previous":"前期比","Waffo":"Waffo","Waffo Aggregator Gateway":"Waffo アグリゲーターゲートウェイ","Waffo Pancake Dashboard":"Waffo Pancake Dashboard","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Waffo Pancake 決済ゲートウェイ","Waffo Pancake product created":"Waffo Pancake 商品を作成しました","Waffo Pancake product creation failed":"Waffo Pancake 商品の作成に失敗しました","Waffo Pancake save failed":"Waffo Pancake の保存に失敗しました","Waffo Pancake settings saved":"Waffo Pancake 設定を保存しました","Waffo Payment":"Waffo決済","Waffo Payment Gateway":"Waffo決済ゲートウェイ","Waffo Public Key (Production)":"Waffo公開鍵(本番)","Waffo Public Key (Sandbox)":"Waffo公開鍵(サンドボックス)","Waiting":"待機中","Waiting for email...":"メールを待っています...","Waiting for two comparable samples. Counter resets restart the sampling window.":"比較可能な2回のサンプルを待っています。カウンターのリセット後は集計をやり直します。","Waiting requests":"待機中のリクエスト","Wallet":"ウォレット","Wallet First":"ウォレット優先","Wallet Management":"ウォレット管理","Wallet management and personal preferences.":"ウォレット管理と個人設定。","Wallet Only":"ウォレットのみ","Wallet pre-consume bypass threshold (USD)":"ウォレットの事前引き落とし省略額(USD)","Wallet quota limit exceeded":"ウォレットのクォータ範囲を超えています","Warning":"警告","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"警告: Base URL は /v1 で終わってはいけません。New API が自動的に処理します。これによりリクエストが失敗する可能性があります。","Warning: Disabling 2FA will make your account less secure.":"警告: 2FAを無効にすると、アカウントのセキュリティが低下します。","Warning: This action is permanent and irreversible!":"警告: この操作は永続的で元に戻せません!","We apologize for the inconvenience.":"ご不便をおかけして申し訳ありません。","We could not load instances.":"インスタンス情報を読み込めませんでした。","We could not load system tasks.":"システムタスクを読み込めませんでした。","We could not load the setup status.":"セットアップステータスを読み込めませんでした。","We will prompt your device to confirm using biometrics or your hardware key.":"生体認証またはハードウェアキーを使用して確認するよう、デバイスにプロンプトが表示されます。","We\'ll be back online shortly.":"まもなくオンラインに戻ります。","Web search":"ウェブ検索","Web Search":"Web 検索","Webhook Configuration:":"Webhook設定:","Webhook public key (production)":"Webhook 公開鍵(本番)","Webhook public key (production) is required":"本番用 Webhook 公開鍵は必須です","Webhook public key (sandbox)":"Webhook 公開鍵(サンドボックス)","When a channel is disabled or re-enabled automatically, or a test of all channels finishes":"チャネルが自動で無効化または再有効化されたとき、または全チャネルのテストが完了したとき","You can create at most {{count}} access tokens":"アクセストークンは最大 {{count}} 個まで作成できます","Webhook public key (sandbox) is required":"サンドボックス用 Webhook 公開鍵は必須です","Webhook secret":"Webhookシークレット","Webhook Secret":"Webhookシークレット","Webhook signing secret (leave blank unless updating)":"Webhook署名シークレット (更新する場合を除き、空白のままにしてください)","You cannot grant one or more of these permissions.":"これらの権限の一部を付与することはできません。","Webhook URL":"Webhook URL","Webhook URL (Production):":"Webhook URL(本番):","Webhook URL (Test):":"Webhook URL(テスト):","Webhook URL:":"Webhook URL:","Website is under maintenance!":"ウェブサイトはメンテナンス中です!","WeChat":"WeChat Pay","WeChat login QR code":"WeChatログインQRコード","WeChat Pay":"WeChat Pay","WeChat sign in":"WeChatでサインイン","Week":"週","Weekday":"曜日","Weekly":"毎週","Weekly token usage by model across the past few weeks":"過去数週間にわたるモデル別の週次トークン使用量","Weekly token usage by model across the past year":"過去1年のモデル別週次トークン使用量","Weekly token usage by model since launch":"ローンチ以降のモデル別週次トークン使用量","Weekly Window":"週間ウィンドウ","Weight":"ウェイト","Weighted by request count":"リクエスト数で加重","Welcome back!":"おかえりなさい!","Welcome to our New API...":"New API へようこそ...","Well-Known URL":"Well-Known URL","Well-Known URL must start with http:// or https://":"Well-Known URL は http:// または https:// で始まる必要があります","What do you want to change?":"何を変更しますか?","What would you like to know?":"何を知りたいですか?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"トークンが auto グループを使用すると、システムは上から順に利用可能なグループを探します。","When billed as {{group}}":"{{group}} として課金時","When conditions match":"条件を満たす場合","When conditions match → {{name}}":"条件を満たす → {{name}}","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"条件に一致したとき、最終価格に X を掛けます。複数一致は掛け合わさり、1 未満は割引として効きます。","When disabled, all uploaded custom plugins are ignored and every platform falls back to its built-in factory plugin.":"無効にすると、アップロード済みのカスタムプラグインはすべて無視され、各プラットフォームは内蔵のファクトリープラグインにフォールバックします。","When disabled, the entire task plugin system stops serving, including factory and custom plugins.":"無効にすると、ファクトリープラグインとカスタムプラグインを含むタスクプラグインシステム全体が停止します。","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"有効にすると、現在のグループのチャネルが失敗した場合、次のグループのチャネルを順番に試します。","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.":"有効にすると、アフィニティチャネルが無効化された、または現在のグループ/モデルで利用できなくなった場合でも、そのアフィニティエントリを保持します。無効のままにすると、エントリを削除して別のチャネルを選択します。","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"有効にすると、大きなリクエストボディはメモリではなくディスクに一時保存され、メモリ使用量が大幅に削減されます。SSD環境での使用を推奨します。","When enabled, MjProxy callbacks are accepted (reveals server IP).":"有効にすると、MjProxy のコールバックを受け入れます (サーバーの IP を公開します)。","When enabled, newly created tokens start in the first auto group.":"有効にすると、新しく作成されたトークンは最初の自動グループで開始されます。","When enabled, prompts are scanned before reaching upstream models.":"有効にすると、プロンプトはアップストリームモデルに到達する前にスキャンされます。","When enabled, the store field will be blocked":"有効にすると、ストアフィールドはブロックされます","When enabled, this API key can be used to check your account\'s remaining and used quota.":"有効にすると、このAPIキーでアカウントの残りクォータと使用済みクォータを確認できます。","When enabled, users can pick this group when creating tokens.":"有効にすると、ユーザーはトークン作成時にこのグループを選択できます。","When enabled, violation requests will incur additional charges.":"有効にすると、違反リクエストに追加料金が発生します。","When enabled, zero-cost models also pre-consume quota before final settlement.":"有効にすると、ゼロコストモデルも最終決済前にクォータを事前消費します。","When no conditions are set, the operation always executes.":"条件が設定されていない場合、操作は常に実行されます。","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"パフォーマンス監視を有効にすると、システムリソース使用率が閾値を超えた場合、新しいRelayリクエストが拒否されます。","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"コンテナまたは一時的な環境で実行する場合、再起動時のデータ損失を防ぐために、SQLiteファイルが永続ストレージにマッピングされていることを確認してください。","When the primary domain changes, the previous domain is automatically kept in the compatible domains list.":"メインドメインを変更すると、以前のドメインは互換用ドメイン一覧に自動的に保持されます。","Whitelist":"ホワイトリスト","Whitelist (Only allow listed domains)":"ホワイトリスト (リストされたドメインのみを許可)","Whitelist (Only allow listed IPs)":"ホワイトリスト (リストされたIPのみを許可)","whsec_xxx":"whsec_xxx","Why only one store + product?":"なぜストア + 商品は 1 つだけなのか?","Why set a website domain?":"サイトのドメインを設定する理由","Why set this?":"なぜ設定が必要?","Window:":"ウィンドウ:","Wire encoding for the embedding vectors":"ベクトルの転送エンコーディング","with conflicts":"競合あり","With linked models":"関連モデルあり","with the API key from your token settings.":"をトークン設定の API キーに置き換えてください。","With these settings, automatic disabling is off for all channels.":"現在の設定では、すべてのチャネルで自動無効化が無効です。","Without additional conditions, only the type above is used for pruning.":"追加条件がない場合、上記のtypeのみが削除に使用されます。","Without linked models":"関連モデルなし","Worked example":"具体例","Worker Access Key":"Workerアクセスキー","Worker instances do not run master-only background tasks.":"worker インスタンスは master 専用のバックグラウンドタスクを実行しません。","Worker metrics":"ワーカー別メトリクス","Worker Proxy":"Workerプロキシ","Worker URL":"ワーカーURL","Workspaces":"ワークスペース","Write value to the target field":"ターゲットフィールドに値を書き込む","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"Xunfei","Year":"年","years":"年","Yes":"はい","You are about to delete {{count}} API key(s).":"{{count}}個のAPIキーを削除しようとしています。","You are offline. Updates will be checked when you reconnect.":"オフラインです。再接続後に更新を確認します。","You are running the latest version ({{version}}).":"最新バージョン ({{version}}) を使用中です。","You can add models manually or try fetching again.":"モデルを手動で追加するか、再取得できます。","You can close this tab once the binding completes or a success message appears in the original window.":"バインディングが完了するか、元のウィンドウに成功メッセージが表示されたら、このタブを閉じることができます。","You can create up to {{count}} access tokens":"アクセストークンは最大 {{count}} 個まで作成できます","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"\\"カスタムモデル名\\"で手動で追加し、\\"入力\\"をクリックしてから送信するか、以下の操作を使用して自動的に処理できます。","You can only check in once per day":"チェックインできるのは1日1回のみです","You can still edit non-sensitive operations fields such as models, groups, priority, and weight.":"モデル、グループ、優先度、重みなどの非機密の運用項目は引き続き編集できます。","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"適用される法令、規制要件、プラットフォーム規則、公共の利益、または第三者の正当な権利利益に違反する行為を、このシステムを用いて実施、支援、または間接的に実施しないことを約束します。","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"上流 API、アカウント、キー、クォータ、サービス機能を、上流サービス提供者、モデルサービス提供者、または関連する権利者から取得した合法的な許可の範囲内でのみ使用し、無許可の再販売、転売、配布、その他の不適切な商業利用を行わないことを約束します。","You do not have permission to edit channels":"チャンネルを編集する権限がありません","You do not have permission to edit sensitive channel settings.":"機密チャネル設定を編集する権限がありません。","You do not have permission to perform this action.":"この操作を実行する権限がありません。","You don\'t have necessary permission":"必要な権限がありません","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"接続されたモデル API、アカウント、キー、クォータについて合法的な許可を取得しています。","You have unsaved changes":"未保存の変更があります","You have unsaved changes. Are you sure you want to leave?":"未保存の変更があります。離れてもよろしいですか?","You Pay":"お支払い額","You save":"節約額","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"デプロイ、運用、課金行為に起因する法的責任を理解し、独立して負います。","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"このコンプライアンス注意事項はリスク通知にすぎず、法的助言、コンプライアンス審査の結論、または本システム利用の合法性の保証ではないことを理解しています。実際の事業状況に応じて、専門の法律またはコンプライアンス担当者に相談してください。","You will be redirected to Telegram to complete the binding process.":"バインドプロセスを完了するためにTelegramにリダイレクトされます。","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"自動的にリダイレクトされます。数秒経っても何も起こらない場合は、前のページに戻ることができます。","Your account can edit sensitive channel settings.":"あなたのアカウントは機密チャネル設定を編集できます。","Your account cannot edit sensitive channel settings.":"あなたのアカウントは機密チャネル設定を編集できません。","{{name}} called {{count}} times, cost {{quota}}":"{{name}} を {{count}} 回呼び出し、費用 {{quota}}","your AI integration?":"AIインテグレーションを?","Your Azure OpenAI endpoint URL":"あなたのAzure OpenAIエンドポイント URL","Your Bot Name":"あなたのボット名","Your changes have not been saved.":"変更は保存されていません。","Your Cloudflare Account ID":"あなたのCloudflareアカウントID","Your Discord OAuth Client ID":"Discord OAuth クライアント ID","Your Discord OAuth Client Secret":"Discord OAuth クライアント シークレット","{{provider}} login and registration has not been enabled by administrator":"管理者が {{provider}} でのログインと登録を有効にしていません","{{provider}} returned empty user info, please check settings":"{{provider}} から返されたユーザー情報が空です。設定を確認してください","{{provider}} top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"{{provider}} のチャージが完了しました。追加額:{{quota}}、支払額:{{amount}}","Your GitHub OAuth Client ID":"あなたのGitHub OAuthクライアントID","Your GitHub OAuth Client Secret":"あなたのGitHub OAuthクライアントシークレット","Your identity has been verified. Continue to the provider to finish linking your account.":"本人確認が完了しました。連携先でアカウント連携を完了してください。","Your new backup codes are ready":"新しいバックアップコードの準備ができました","Your Referral Link":"あなたの紹介リンク","Your setup guide is collapsed so usage stays in focus.":"利用状況に集中できるよう、セットアップガイドを折りたたみました。","Your Telegram Bot Token":"あなたのTelegramボットトークン","Your transaction history will appear here":"取引履歴はここに表示されます","Your Turnstile secret key":"あなたのTurnstileシークレットキー","Your Turnstile site key":"あなたのTurnstileサイトキー","Zero retention":"データ保持なし","Zhipu":"Zhipu","Zhipu GLM":"Zhipu GLM","Zhipu V4":"Zhipu V 4","Zoom":"ズーム"}}'),q=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","{{count}} outside this view":"{{count}} вне текущего представления","_copy":"_копировать",",":", ",", and":", и",",and ":" и ","、":", ","? This action cannot be undone.":"? Это действие невозможно отменить.",". Please fix the JSON before saving.":". Пожалуйста, исправьте JSON перед сохранением.",". This action cannot be undone.":". Это действие невозможно отменить.","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"({{total}} всего, {{omit}} скрыто)","(billed as vip itself, so base ratio of vip)":"(тарифицируется как сама vip, поэтому базовый коэффициент vip)","(falls back to billing as vip, so base ratio of vip)":"(возврат к тарификации по vip, поэтому базовый коэффициент vip)","(hits the override rule above)":"(срабатывает правило переопределения выше)","(ID: {{id}})":"(ID: {{id}})","(instead of {{ratio}})":"(вместо {{ratio}})","(Leave empty to dissolve tag)":"(Оставьте пустым, чтобы удалить тег)","(matrix cell vip × premium is set)":"(ячейка матрицы vip × premium задана)","(no matrix cell, so base ratio of default; the vip 0.8 is irrelevant)":"(ячейки нет, поэтому базовый коэффициент default; 0,8 группы vip не участвует)","(no override rule, so base ratio of default; the 0.8 of vip plays no part)":"(правила переопределения нет, поэтому базовый коэффициент default; 0,8 группы vip не участвует)","(Optional: redirect model names)":"(Необязательно: перенаправить имена моделей)","(Override all channels\' groups)":"(Переопределить группы всех каналов)","(Override all channels\' models)":"(Переопределить модели всех каналов)","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{bytes}} bytes":"{{bytes}} байт","{{category}} Models":"Модели {{category}}","{{channels}} channels, {{tasks}} in-flight tasks":"Каналов: {{channels}}, активных задач: {{tasks}}","{{completed}}/{{total}} completed":"{{completed}}/{{total}} завершено","{{condition}} ({{timezone}})":"{{condition}} ({{timezone}})","{{count}} / {{max}} groups selected":"Выбрано групп: {{count}} из {{max}}","{{count}} announcements will be removed from the list.":"{{count}} объявлений будут удалены из списка.","{{count}} API shortcuts will be removed from the list.":"{{count}} ярлыков API будут удалены из списка.","{{count}} available channels":"Доступных каналов: {{count}}","{{count}} channel(s) deleted":"Удалено {{count}} каналов","{{count}} channel(s) disabled":"Отключено {{count}} каналов","{{count}} channel(s) enabled":"Включено {{count}} каналов","{{count}} channel(s) failed to disable":"Не удалось отключить {{count}} каналов","{{count}} channel(s) failed to enable":"Не удалось включить {{count}} каналов","{{count}} combinations":"Комбинаций: {{count}}","{{count}} days ago":"{{count}} дней назад","{{count}} days remaining":"Осталось {{count}} дней","{{count}} disabled channel(s) deleted":"Удалено {{count}} отключённых каналов","{{count}} enabled channels and {{tasks}} in-flight tasks still use this plugin.":"Этот плагин используют {{count}} включённых каналов и {{tasks}} активных задач.","{{count}} enabled groups":"Включённых групп: {{count}}","{{count}} FAQ entries will be removed from the list.":"{{count}} записей FAQ будут удалены из списка.","{{count}} hours ago":"{{count}} часов назад","{{count}} incidents":"{{count}} инцидентов","{{count}} incidents in the last 24 hours":"{{count}} инцидентов за последние 24 часа","{{count}} incidents in the last 30 days":"{{count}} инцидентов за последние 30 дней","{{count}} IP(s)":"{{count}} IP","{{count}} linked model records":"Связанных записей моделей: {{count}}","{{count}} log entries removed.":"Удалено {{count}} записей журнала.","{{count}} minutes ago":"{{count}} минут назад","{{count}} model mapping(s)":"Сопоставлений моделей: {{count}}","{{count}} model(s) redirected":"Перенаправлено моделей: {{count}}","{{count}} model(s) skipped because another model derives the same request name":"Пропущено моделей с совпадающим именем запроса: {{count}}","{{count}} model(s) unchanged by the rule were skipped":"Пропущено моделей без изменений по правилу: {{count}}","{{count}} models":"моделей: {{count}}","{{count}} months ago":"{{count}} месяцев назад","{{count}} override":"{{count}} переопределений","{{count}} permissions":"Разрешений: {{count}}","{{count}} permissions are no longer available":"Больше недоступно разрешений: {{count}}","{{count}} providers":"Провайдеров: {{count}}","{{count}} records selected. Bulk actions are available.":"Выбрано записей: {{count}}. Доступны групповые действия.","{{count}} selected":"Выбрано: {{count}}","{{count}} selected models":"Выбрано моделей: {{count}}","{{count}} selected outside the current filters":"Выбрано вне текущих фильтров: {{count}}","{{count}} selected targets available for bulk copy.":"Для массового копирования выбрано целей: {{count}}.","{{count}} tiers":"{{count}} уровней","{{count}} Uptime Kuma groups will be removed from the list.":"{{count}} групп Uptime Kuma будут удалены из списка.","{{count}} vendors":"поставщиков: {{count}}","{{count}} weeks ago":"{{count}} недель назад","{{created}} models created, {{updated}} models updated, {{vendors}} vendors created.":"Создано моделей: {{created}}, обновлено: {{updated}}, создано поставщиков: {{vendors}}.","{{currency}} / {{unit}} tokens":"{{currency}} / {{unit}} токенов","{{currency}} price per 1M input tokens.":"Цена в {{currency}} за 1 млн входных токенов.","{{currency}} price per 1M tokens.":"Цена в {{currency}} за 1 млн токенов.","{{field}} updated to {{value}}":"{{field}} обновлено на {{value}}","A channel test task is already running or queued. Cannot start this manual task":"Задача тестирования каналов уже выполняется или ожидает в очереди. Невозможно запустить эту ручную задачу","a dashboard login session is required":"требуется сеанс входа в панель управления","{{field}} updated to {{value}} for tag: {{tag}}":"{{field}} обновлено на {{value}} для тега: {{tag}}","{{first}} and {{second}}":"{{first}} и {{second}}","A model update task is already running or queued. Cannot start this manual task":"Задача обновления моделей уже выполняется или ожидает в очереди. Невозможно запустить эту ручную задачу","{{first}} or {{second}}":"{{first}} или {{second}}","A repair task is already running. Please try again later":"Задача восстановления уже выполняется. Попробуйте позже","{{key}} · from {{source}}":"{{key}} · источник: {{source}}","{{key}} · version {{version}} · from {{source}}":"{{key}} · версия {{version}} · из {{source}}","A token can select at most {{max}} Auto groups":"Токен может выбрать не более {{max}} групп Auto","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"{{modality}} не поддерживается","{{modality}} supported":"{{modality}} поддерживается","{{n}} model(s) selected":"Выбрано моделей: {{n}}","{{operation}} (ID: {{id}})":"{{operation}} (ID: {{id}})","{{percent}}% OFF":"Скидка {{percent}}%","{{processed}} of {{total}} log entries processed.":"Обработано {{processed}} из {{total}} записей журнала.","{{protocol}} auth name":"Имя аутентификации {{protocol}}","{{protocol}} auth value":"Значение аутентификации {{protocol}}","{{protocol}} authentication":"Аутентификация {{protocol}}","{{selected}} of {{total}} changed fields selected":"Выбрано изменённых полей: {{selected}} из {{total}}","{{start}}–{{end}}":"{{start}}–{{end}}","{{success}} succeeded, {{failed}} failed":"{{success}} успешно, {{failed}} с ошибкой","{{target}} test failed":"Тест {{target}} не выполнен","{{target}} test succeeded":"Тест {{target}} успешно выполнен","{{total}} models · {{syncable}} syncable · {{skipped}} skipped this time":"Моделей: {{total}} · доступно: {{syncable}} · пропускается: {{skipped}}","{{unit}} tokens":"{{unit}} токенов","{{value}} tokens/s":"{{value}} токенов/с","{{value}}ms":"{{value}} мс","{{value}}s":"{{value}} с","@lobehub/icons key":"Ключ @lobehub/icons","@lobehub/icons key name":"Имя ключа @lobehub/icons","/status/":"/status/","/your/endpoint":"/your/endpoint","#1 App":"#1 Приложение","#1 by usage":"№1 по использованию","Access token expiry must be at least one hour from now.":"Срок действия токена доступа должен истекать не раньше чем через час.","Access token name must be 1 to 64 characters.":"Имя токена доступа должно содержать от 1 до 64 символов.","access token not found":"Токен доступа не найден","#1 Model":"#1 Модель","% off":"скидка","`, `-nothinking`, and effort suffixes such as `-high` while routing to the correct Gemini variant. When off, model names are sent upstream unchanged.":"суффиксы `, `-nothinking` и суффиксы усилия, такие как `-high`, при маршрутизации к правильному варианту Gemini. При отключении имена моделей отправляются вверх по потоку без изменений.","© 2025 Your Company. All rights reserved.":"© 2025 Ваша Компания. Все права защищены.","+{{count}} more":"ещё {{count}}","| Based on":"| На основе","0 means data is kept permanently":"0 означает, что данные хранятся постоянно","0 means unlimited":"0 означает без ограничений","1 Day":"1 день","1 day ago":"1 день назад","1 hour":"1 час","1 Hour":"1 ч.","1 hour ago":"1 час назад","1 minute":"1 минута","1 minute ago":"1 минуту назад","1 Month":"1 мес.","1 month ago":"1 месяц назад","1 week ago":"1 неделю назад","1 year":"1 год","1 year ago":"1 год назад","1. Create an application in your Gotify server":"1. Создайте приложение на вашем сервере Gotify","1. Select models users call":"1. Выберите модели для пользователей","1. Select upstream models":"1. Выберите модели провайдера","10 / page":"10 / страница","100 / page":"100 / страница","14 Days":"14 дней","Action {{action}}":"Действие {{action}}","180 days":"180 дней","192.168.1.1 10.0.0.0/8":"192.168.1.1 10.0.0.0/8","1M":"1М","1M token":"1M token","1W":"1Н","2. Copy the application token":"2. Скопируйте токен приложения","2. Set names users call":"2. Задайте имена для пользователей","2. Set upstream model names":"2. Задайте имена для провайдера","20 / page":"20 / страница","24 Hours":"24 часа","24 hours ago":"24 часа назад","29 Days":"29 дней","2xx, 504 and 524 are always excluded.":"2xx, 504 и 524 всегда исключены.","3. Enter your Gotify server URL and token above":"3. Введите URL вашего сервера Gotify и токен выше","3. Review mappings":"3. Проверьте сопоставления","30 days":"30 дней","30 Days":"30 дней","30 days ago":"30 дней назад","30d change":"Изменение за 30 дней","5 minutes":"5 минут","5-Hour Window":"5-часовое окно","50 / page":"50 / страница","7 Days":"7 дней","7 days ago":"7 дней назад","80,443,8080":"80,443,8080","90 days":"90 дней","A billing multiplier. Lower ratios mean lower API call costs.":"Множитель тарификации. Чем ниже коэффициент, тем ниже стоимость вызовов API.","A focused home for keys, balance, routing, and service health.":"Единый экран для ключей, баланса, маршрутов и состояния сервиса.","A matching hash confirms the published file, not the safety of its code.":"Совпадение хеша подтверждает соответствие опубликованному файлу, но не безопасность кода.","A Passkey created for www.example.com cannot be used on example.com. Keep the old website available so users can still verify there.":"Ключ доступа, созданный для www.example.com, не работает на example.com. Сохраните доступ к прежнему сайту, чтобы пользователи могли проходить проверку на нём.","A security operation is already in progress.":"Операция безопасности уже выполняется.","A selected model no longer exists. Reload the model list.":"Выбранная модель больше не существует. Обновите список моделей.","A token that never expires stays valid until you revoke it. Set an expiration date when possible.":"Бессрочный токен действует, пока вы его не отзовёте. По возможности задайте срок действия.","A vendor with this name already exists.":"Поставщик с таким именем уже существует.","About":"О проекте","About {{days}} days left":"Примерно {{days}} дней","About pricing currency":"О валюте цен","Accept Unpriced Models":"Принимать модели без цены","Accept upstream certificates that fail validation, such as self-signed ones. Only enable for trusted internal upstreams.":"Принимать сертификаты upstream-сервера, не прошедшие проверку, например самоподписанные. Включайте только для доверенных внутренних upstream-серверов.","Accepts a JSON array of model identifiers that support the Imagine API.":"Принимает JSON-массив идентификаторов моделей, поддерживающих Imagine API.","Accepts comma-separated status codes and inclusive ranges.":"Принимает коды статуса, разделенные запятыми, и включающие диапазоны.","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"Получите доступ к огромному выбору моделей через стандартный, единый протокол API. Развивайте приложения ИИ, управляйте цифровыми активами и соединяйте будущее.","Access Baidu Qianfan models through the legacy API":"Доступ к моделям Baidu Qianfan через прежний API","Access Baidu Qianfan models through the V2 API":"Доступ к моделям Baidu Qianfan через API V2","Access Codex using ChatGPT subscription credentials":"Доступ к Codex с учётными данными подписки ChatGPT","Access Denied Message":"Сообщение об отказе в доступе","Access Forbidden":"Доступ запрещен","Access hosted model predictions through Replicate":"Доступ к предсказаниям моделей, размещённых на Replicate","Access model services through MokaAI":"Доступ к моделям через MokaAI","Access model services through the OhMyGPT gateway":"Доступ к моделям через шлюз OhMyGPT","Access models from multiple providers through OpenRouter":"Доступ к моделям разных провайдеров через OpenRouter","Access models through Amazon Bedrock":"Доступ к моделям через Amazon Bedrock","Access models through Cloudflare Workers AI":"Доступ к моделям через Cloudflare Workers AI","Access models through Google Cloud Vertex AI":"Доступ к моделям через Google Cloud Vertex AI","Access Policy (JSON)":"Политика доступа (JSON)","Access previous conversations and start new ones.":"Доступ к предыдущим разговорам и начало новых.","Access records":"История доступа","Access Token":"Токен доступа","Access token expired":"Срок действия токена доступа истёк","Access token revoked":"Токен доступа отозван","Access tokens":"Токены доступа","Access tokens cannot use this feature":"Эта функция недоступна для токенов доступа","Access Zhipu models through the legacy API":"Доступ к моделям Zhipu через прежний API","Access Zhipu models through the V4 API":"Доступ к моделям Zhipu через API V4","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Actions":"Действия с аккаунтом","Account binding":"Привязка аккаунта","Account Binding Management":"Управление привязкой аккаунта","Account binding request":"Запрос на привязку аккаунта","Account Bindings":"Привязки аккаунта","Account bindings have changed. Start this operation again.":"Привязки аккаунта изменились. Начните операцию заново.","Account created! Please sign in":"Аккаунт создан! Пожалуйста, войдите в систему","Account deleted successfully":"Аккаунт успешно удалён","Account deletion":"Удаление аккаунта","Account ID":"ID аккаунта","Account ID *":"ID аккаунта *","Account Info":"Информация об аккаунте","Account password change":"Изменение пароля аккаунта","Account security":"Безопасность аккаунта","Account unlinking":"Отвязка аккаунта","Account used when authenticating with the SMTP server":"Учетная запись, используемая при аутентификации с SMTP-сервером","acknowledge the related legal risks":"признаю связанные правовые риски","Across all groups":"По всем группам","Action":"Действие","Action confirmation":"Подтверждение действия","Actions":"Операции","Actions for {{name}}":"Действия для {{name}}","Activate / Roll back":"Активировать / Откатить","Activate now":"Активировать сейчас","Activating...":"Активация...","active":"активный","Active":"Активна","Active apps":"Активные приложения","Active Cache Count":"Активных кэшей","Active Files":"Активных файлов","Active models":"Активные модели","Active Tasks":"Активные задачи","active users":"активных пользователей","Active version":"Активная версия","Actively check all channels":"Активно проверять все каналы","Actively check auto-disable-enabled channels":"Активно проверять каналы с автоотключением","Actual Amount":"Фактическая сумма","Actual Model":"Фактическая модель","Actual Model:":"Фактическая модель:","Adapt `-thinking`, `-nothinking`, and effort suffixes such as `-high` to Anthropic native thinking behavior while keeping billing predictable. When off, model names are sent upstream unchanged.":"Адаптировать запросы с суффиксами `-thinking`, `-nothinking` и суффиксами усилия, такими как `-high`, к собственному режиму размышления Anthropic, сохраняя предсказуемость биллинга. При отключении имена моделей отправляются вверх по потоку без изменений.","Add":"Добавить","Add \\"{{value}}\\"":"Добавить \\"{{value}}\\"","Add {{added}} models and remove {{removed}} models":"Добавить моделей: {{added}}, удалить: {{removed}}","Add {{count}} mapping(s)":"Добавить сопоставлений: {{count}}","Add {{title}}":"Добавить {{title}}","Add a group identifier to the auto assignment list.":"Добавить идентификатор группы в список автоматического назначения.","Add a new API key by providing necessary info.":"Добавьте новый API-ключ, предоставив необходимую информацию.","Add a new channel by providing the necessary information.":"Добавьте новый канал, предоставив необходимую информацию.","Add a new model to the system by providing the necessary information.":"Добавьте новую модель в систему, предоставив необходимую информацию.","Add a new user by providing necessary info.":"Добавьте нового пользователя, предоставив необходимую информацию.","Add a new vendor to the system":"Добавить нового поставщика в систему","Add a vendor or adjust your search.":"Добавьте поставщика или измените поиск.","Add an extra layer of security to your account":"Добавьте дополнительный уровень безопасности к вашей учетной записи","Add an index URL to browse installable plugins.":"Добавьте URL индекса, чтобы просматривать доступные для установки плагины.","Add and submit":"Добавить и отправить","Add Announcement":"Добавить объявление","Add another login method before unlinking this account.":"Перед отвязкой этого аккаунта добавьте другой способ входа.","Add API":"Добавить API","Add API Shortcut":"Добавить ярлык API","Add at least one condition to this group.":"Добавьте хотя бы одно условие в группу.","Add auto group":"Добавить автогруппу","Add Auto group":"Добавить группу Auto","Adjusted by the channel adaptor":"Скорректировано адаптером канала","Add chat preset":"Добавить предустановку чата","Add condition":"Добавить условие","Add Condition":"Добавить условие","Add condition group":"Добавить группу условий","Add credits":"Добавить средства","Add custom model \\"{{value}}\\"":"Добавить пользовательскую модель «{{value}}»","Add discount tier":"Добавить уровень скидки","Add each model or tag you want to include.":"Добавьте каждую модель или тег, который хотите включить.","Add FAQ":"Добавить вопрос-ответ","Add from available models...":"Добавить из доступных моделей...","Add Funds":"Добавить средства","Add group":"Добавить группу","Administrator completed the order, amount added: {{quota}}, payment amount: {{amount}}":"Администратор завершил заказ, зачислено: {{quota}}, сумма оплаты: {{amount}}","Administrator reset the quota of subscription plan {{plan_title}} (ID: {{plan_id}})":"Администратор сбросил квоту тарифа подписки {{plan_title}} (ID: {{plan_id}})","Add Group":"Добавить группу","Add group rate limit":"Добавить ограничение скорости группы","Add group rules":"Добавить правила группы","Add groups in the order they should be tried.":"Добавьте группы в порядке их использования.","Add management route":"Добавить служебный маршрут","Add Mapping":"Добавить сопоставление","Add metadata":"Дополнить","Add metadata to all selected models first.":"Сначала добавьте метаданные ко всем выбранным моделям.","Add method":"Добавить метод","Add missing models":"Добавить отсутствующие модели","Add Mode":"Добавить режим","Add model":"Добавить модель","Add Model":"Добавить модель","Add model pricing":"Добавить тариф модели","Add Models":"Добавить модели","Add new amount":"Добавить новую сумму","Add new redemption code(s) by providing necessary info.":"Добавьте новый(-ые) код(-ы) активации, предоставив необходимую информацию.","Add OAuth Provider":"Добавить поставщика OAuth","Add param/header":"Добавить param / header","Add payment method":"Добавить способ оплаты","Add photos or files":"Добавить фото или файлы","Add prefix":"Добавить префикс","Add pricing branch":"Добавить ветвь тарификации","Add product":"Добавить продукт","Add Provider":"Добавить поставщика","Add Quota":"Добавить квоту","Add ratio override":"Добавить переопределение коэффициента","Add route":"Добавить маршрут","Add routes individually or replace them from a template.":"Добавляйте маршруты по отдельности или замените их шаблоном.","Add Row":"Добавить строку","Add rule":"Добавить правило","Add Rule":"Добавить правило","Add rule group":"Добавить группу правил","Add rules for a user group":"Добавить правила для группы пользователей","Add selectable group":"Добавить выбираемую группу","Add source":"Добавить источник","Add split":"Добавить ветку","Add subscription":"Добавить подписку","Add suffix":"Добавить суффикс","Add tags...":"Добавить теги...","Add template":"Добавить шаблон","Add tier":"Добавить уровень","Add time condition":"Добавить условие по времени","Add time rule group":"Добавить группу правил по времени","Add to group {{path}}":"Добавить в группу {{path}}","Add Uptime Kuma Group":"Добавить группу Uptime Kuma","Add User":"Добавить пользователя","Add user group":"Добавить группу пользователей","Add Vendor":"Добавить поставщика","Add your API keys, set up channels and configure access permissions":"Добавьте ваши API-ключи, настройте каналы и права доступа","Added":"Добавлено","Added {{count}} model(s)":"Добавлено {{count}} моделей","Added {{count}} models from \\"{{name}}\\"":"Добавлено {{count}} моделей из «{{name}}»","Added models":"Добавленные модели","Added once per request. Set to 0 for usage-only billing.":"Добавляется один раз за запрос. Укажите 0 для оплаты только за использование.","Added successfully":"Успешно добавлено","Added to the usage cost. Set to 0 for no additional charge.":"Сумма сверх стоимости использования. Укажите 0, если доплата не нужна.","Additional charge":"Доплата","Additional Conditions":"Дополнительные условия","Additional information":"Дополнительная информация","Additional Information":"Дополнительная информация","Additional Limit":"Доп. лимит","Additional Limits":"Дополнительные лимиты","Additional metered capability":"Дополнительная зарезервированная ёмкость (metered)","Additional request domains":"Дополнительные домены","Additional verification required":"Требуется дополнительная проверка","Adjust filters, then search to refresh the logs.":"Настройте фильтры, затем выполните поиск, чтобы обновить журналы.","Adjust Quota":"Изменить квоту","Adjust quota for user “{{name}}”":"Изменить квоту пользователя «{{name}}»","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"Настройте форматирование ответов, поведение промпта, прокси и автоматизацию upstream.","Adjust the appearance and layout to suit your preferences.":"Настройте внешний вид и макет в соответствии с вашими предпочтениями.","Adjust user quota":"Изменить квоту пользователя","Adjustment mode":"Способ изменения","Admin":"Администратор","Admin access required":"Требуется доступ администратора","Admin area":"Область администратора","Admin Channel Permissions":"Права администратора для каналов","Admin notes (only visible to admins)":"Заметки администратора (видны только администраторам)","Admin Only":"Только для администраторов","Admin Permissions":"Права администратора","Admin permissions updated":"Права администратора обновлены","Administer user accounts and roles.":"Управление учетными записями пользователей и ролями.","Administration":"Администрирование","Administrator account":"Учетная запись администратора","Administrator username":"Имя пользователя администратора","Advance next reset time":"Перенести следующее время сброса","Advanced":"Расширенные","Advanced Configuration":"Расширенная конфигурация","Advanced Custom":"Расширенный пользовательский","Advanced custom configuration is required":"Требуется расширенная пользовательская конфигурация","Advanced custom configuration requires at least one route":"Расширенной пользовательской конфигурации нужен хотя бы один маршрут","Advanced Custom Routes":"Расширенные пользовательские маршруты","Advanced options":"Расширенные параметры","Advanced Options":"Расширенные параметры","Advanced platform configuration.":"Расширенная настройка платформы.","Advanced Settings":"Расширенные настройки","Advanced text editing":"Расширенное редактирование текста","Aesthetic style":"Стиль","Affected windows:":"Затронутые окна:","Affinity cache settings":"Настройки кеша привязки","After clicking the button, you\'ll be asked to authorize the bot":"После нажатия кнопки вам будет предложено авторизовать бота","After conversion":"После преобразования","After conversion, expression reservation and rounding rules apply. Effective unit prices are preserved; individual rounded charges may differ.":"После преобразования действуют правила резервирования и округления выражений. Текущие цены за единицу сохраняются, но округлённые суммы отдельных списаний могут отличаться.","Allow users to export logs":"Разрешить пользователям экспорт журналов","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"После отключения план не будет отображаться пользователям, но исторические заказы не затронуты. Продолжить?","After enabling, client request headers are forwarded to the upstream, excluding standard authentication headers, cookies and transport headers:":"После включения заголовки клиента передаются вышестоящему сервису, кроме стандартных заголовков аутентификации, Cookie и транспортных заголовков:","After enabling, the original request body is forwarded to the upstream without gateway rewriting:":"После включения исходное тело запроса передаётся вышестоящему сервису без изменений со стороны шлюза:","After enabling, the plan will be shown to users. Continue?":"После включения план будет отображаться пользователям. Продолжить?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"После аннулирования подписка будет немедленно деактивирована. Исторические записи не затронуты. Продолжить?","Agent ID":"Идентификатор агента","Agent ID *":"Идентификатор агента *","Aggregate tokens delivered across the platform":"Совокупное количество токенов, доставленных платформой","Aggregate traffic across every category":"Совокупный трафик по всем категориям","Aggregated across enabled groups":"Агрегировано по включённым группам","Aggregated across the apps below":"Агрегировано по приложениям ниже","Aggregated traffic by upstream model provider":"Агрегированный трафик по поставщикам моделей","Aggregated usage metrics and trend charts.":"Агрегированные метрики использования и графики трендов.","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"объединяет 50+ ИИ-провайдеров за единым API. Управляйте доступом, отслеживайте затраты и масштабируйтесь без усилий.","Aggregation bucket":"Интервал агрегации","AGPL v3.0 License":"Лицензия AGPL v3.0","AI Application Infrastructure Foundation":"Инфраструктурная основа для ИИ-приложений","Already checked in today":"Вы уже отметились сегодня","AI model testing environment":"Среда тестирования ИИ моделей","AI models":"Модели ИИ","AI models supported":"Поддерживаемые модели ИИ","AI Proxy":"AI Proxy","AI Proxy Library":"Библиотека прокси AI","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"Режим AK/SK: используйте AccessKey|SecretAccessKey|Region","Ali":"Alibaba Байлянь","Alipay":"Alipay","All":"Все","All API tokens":"Все API-ключи","All categories":"Все категории","All combinations are priced at zero. Matching requests will be billed as free.":"Для всех комбинаций установлена нулевая цена. Соответствующие запросы будут тарифицироваться бесплатно.","All conditions":"Все условия","All conditions must match before this tier is used.":"Все условия должны совпасть, прежде чем будет использован этот уровень.","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"Все изменения являются операциями перезаписи. Оставьте поля пустыми, чтобы сохранить текущие значения без изменений.","All files exceed the maximum size.":"Все файлы превышают максимальный размер.","All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.":"Все названия групп управляются здесь. Коэффициент применяется, когда вызовы тарифицируются по этой группе; коэффициент пополнения применяется к пользователям, состоящим в этой группе.","All Groups":"Все группы","All groups share one pool of names managed in the pricing group table, but a name plays two different roles: as a user group it describes the user, as a token group it decides routing and billing.":"Все группы используют общий набор имён из таблицы тарифных групп, но одно имя играет две разные роли: как группа пользователя оно описывает пользователя, как группа токена — определяет маршрутизацию и тарификацию.","All models":"Все модели","Announcement #{{index}} content cannot exceed 500 characters":"Содержимое объявления № {{index}} не может превышать 500 символов","Announcement #{{index}} has an invalid publish date format":"У объявления № {{index}} неверный формат даты публикации","Announcement #{{index}} has an invalid type value":"У объявления № {{index}} недопустимое значение типа","Announcement #{{index}} is missing the content field":"В объявлении № {{index}} отсутствует поле содержимого","Announcement #{{index}} is missing the publish date field":"В объявлении № {{index}} отсутствует поле даты публикации","Announcement #{{index}} note cannot exceed 100 characters":"Примечание к объявлению № {{index}} не может превышать 100 символов","Announcement #{{index}} publish date cannot be empty":"Дата публикации объявления № {{index}} не может быть пустой","All Models":"Все модели","All models in use are properly configured.":"Все используемые модели настроены правильно.","All Must Match (AND)":"Все должны совпасть (AND)","All nodes":"Все узлы","All playground messages saved in this browser will be removed. This cannot be undone.":"Все сообщения Playground, сохраненные в этом браузере, будут удалены. Это действие нельзя отменить.","All requests":"Все запросы","All requests must include":"Все запросы должны содержать","Announcements cannot exceed 100 entries":"Объявлений не может быть больше 100","All results":"Все результаты","Another log export is running. Try again after it finishes.":"Уже выполняется другой экспорт журналов. Повторите попытку после его завершения.","All routes":"Все маршруты","All Status":"Все статусы","All Sync Status":"Все статусы синхронизации","All systems operational":"Все системы работают штатно","All Tags":"Все теги","All tokens":"Все токены","All Types":"Все типы","All upstream data is trusted":"Все вышестоящие данные являются доверенными","All users":"Все пользователи","All Vendors":"Все поставщики","All-time":"За всё время","Allocated Memory":"Выделенная память","Allow accountFilter parameter":"Разрешить параметр accountFilter","Allow balance redemption":"Разрешить оплату балансом","Allow Claude beta query passthrough":"Разрешить проброс бета-запросов Claude","Allow clients to query configured prices via `/api/ratio`.":"Разрешить клиентам запрашивать настроенные цены через `/api/ratio`.","Allow clients to query configured ratios via `/api/ratio`.":"Разрешить клиентам запрашивать настроенные соотношения через `/api/ratio`.","API info #{{index}} contains disallowed content":"Информация об API № {{index}} содержит недопустимое содержимое","API info #{{index}} description cannot exceed 200 characters":"Описание в информации об API № {{index}} не может превышать 200 символов","API info #{{index}} has a URL that cannot be parsed: {{error}}":"Информация об API № {{index}}: не удаётся разобрать URL: {{error}}","API info #{{index}} has an invalid color value":"В информации об API № {{index}} недопустимое значение цвета","API info #{{index}} has an invalid URL format":"Информация об API № {{index}}: неверный формат URL","API info #{{index}} is missing the color field":"В информации об API № {{index}} отсутствует поле цвета","API info #{{index}} is missing the description field":"В информации об API № {{index}} отсутствует поле описания","API info #{{index}} is missing the route description field":"В информации об API № {{index}} отсутствует поле описания маршрута","API info #{{index}} is missing the URL field":"В информации об API № {{index}} отсутствует поле URL","API info #{{index}} route description cannot exceed 100 characters":"Описание маршрута в информации об API № {{index}} не может превышать 100 символов","API info #{{index}} URL cannot exceed 500 characters":"URL в информации об API № {{index}} не может превышать 500 символов","Allow HTTP image requests":"Разрешить HTTP-запросы изображений","API info cannot exceed 50 entries":"Информация об API не может содержать более 50 записей","Allow include usage obfuscation passthrough":"Разрешить проброс обфускации использования","Allow inference geography passthrough":"Разрешить проброс географии инференса","Allow inference_geo passthrough":"Разрешить передачу inference_geo","Allow Insecure Origins":"Разрешить небезопасные источники","Allow listing when a channel is available and the user has group access. This does not change API access.":"Разрешает отображение при наличии доступного канала и доступа к его группе. Не меняет доступ к API.","Allow metadata sync":"Разрешить синхронизацию метаданных","Allow new users to register":"Разрешить регистрацию новым пользователям","Allow Private IPs":"Разрешить частные IP-адреса","Allow querying user quota":"Разрешить просмотр квоты пользователя","Allow registration with password":"Разрешить регистрацию по паролю","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"Разрешить запросы к частным диапазонам IP-адресов (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"Разрешить повтор","Allow safety_identifier passthrough":"Разрешить сквозную передачу Safety_Identifier","Allow self-signed or hostname-mismatched SMTP certificates":"Разрешить самоподписанные SMTP-сертификаты или сертификаты с несоответствующим именем узла","Allow service_tier passthrough":"Разрешить сквозную передачу service_tier","Allow speed passthrough":"Разрешить передачу speed","Allow updates":"Разрешить обновления","Allow upstream callbacks":"Разрешить обратные вызовы upstream","Allow users to check in daily for random quota rewards":"Разрешить пользователям регистрироваться ежедневно для получения случайных квотных наград","Allow users to enter promo codes":"Разрешить пользователям вводить промокоды","Allow users to log in with password":"Разрешить пользователям входить по паролю","Allow users to register and sign in with Passkey (WebAuthn)":"Разрешить пользователям регистрироваться и входить с помощью Passkey (WebAuthn)","Allow users to sign in with Discord":"Разрешить пользователям входить через Discord","Allow users to sign in with GitHub":"Разрешить пользователям входить через GitHub","Allow users to sign in with LinuxDO":"Разрешить пользователям входить через LinuxDO","Allow users to sign in with OpenID Connect":"Разрешить пользователям входить через OpenID Connect","Allow users to sign in with Telegram":"Разрешить пользователям входить через Telegram","Allow users to sign in with this provider":"Разрешить пользователям входить через этого поставщика","Allow users to sign in with WeChat":"Разрешить пользователям входить через WeChat","Allow using models without price configuration":"Разрешить использование моделей без настройки цен","Allow wallet balance after quota used up":"Разрешить использование баланса кошелька после исчерпания квоты","Allowed":"Разрешено","Allowed hosts":"Разрешённые хосты","Allowed Origins":"Разрешенные Origins","Allowed Passkey websites":"Сайты, разрешённые для Passkey","Allowed Ports":"Разрешенные порты","Allows selected fields to be overwritten after a sync preview. No automatic synchronization.":"Разрешает перезапись выбранных полей после просмотра. Автоматическая синхронизация не выполняется.","Already have an account?":"Уже есть аккаунт?","Also remove custom pricing":"Также удалить пользовательские цены","Also remove from all channels":"Также удалить из всех каналов","Also remove pricing":"Также удалить цены","Always matches (default tier).":"Всегда совпадает (уровень по умолчанию).","Amount":"Сумма","Amount cannot be changed when editing.":"Количество нельзя изменить при редактировании.","Amount discount":"Скидка на сумму","Amount Due":"Сумма к оплате","Amount must be a whole number":"Сумма должна быть целым числом","Amount must be greater than 0":"Сумма должна быть больше 0","Amount of quota to credit to user account.":"Количество квоты для зачисления на счет пользователя.","Amount options must be a JSON array":"Варианты сумм должны быть JSON-массивом","Amount the user pays to purchase this plan (USD).":"Сумма, которую пользователь платит за покупку этого тарифа (USD).","Amount the user pays to purchase this plan; the actual currency depends on the payment gateway.":"Сумма, которую пользователь платит за покупку тарифа; фактическая валюта зависит от платёжного шлюза.","Amount to pay:":"Сумма к оплате:","An empty field uses the system website address. If Passkeys already work, keep the existing domain.":"Если поле пустое, используется адрес сайта системы. Если ключи доступа уже работают, сохраните текущий домен.","An expression draft already exists. Open the Expression tab to keep editing it.":"Черновик выражения уже существует. Откройте вкладку «Выражение», чтобы продолжить редактирование.","An unexpected error occurred":"Произошла непредвиденная ошибка","An unknown error occurred":"Произошла неизвестная ошибка","Analyze data":"Анализировать данные","and":"и","Announcement added. Click \\"Save Settings\\" to apply.":"Объявление добавлено. Нажмите \\"Сохранить настройки\\", чтобы применить.","Announcement content":"Содержимое объявления","Announcement deleted. Click \\"Save Settings\\" to apply.":"Объявление удалено. Нажмите \\"Сохранить настройки\\", чтобы применить.","Announcement Details":"Детали объявления","Announcement displayed to users (supports Markdown & HTML)":"Объявление, отображаемое пользователям (поддерживает Markdown и HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"Объявление обновлено. Нажмите \\"Сохранить настройки\\", чтобы применить.","Announcements":"Объявления","Announcements saved successfully":"Объявления успешно сохранены","Answer":"Ответ","Answers for common access and billing questions":"Ответы на частые вопросы о доступе и оплате","Anthropic":"Anthropic","Anthropic Messages to OpenAI Chat":"Anthropic Messages в OpenAI Chat","Anthropic Messages to OpenAI Responses":"Anthropic Messages в OpenAI Responses","Any condition":"Любое условие","Any Match (OR)":"Любое совпадение (OR)","Anyone can publish an index. A plugin installed from a third-party source has the same access as one you upload by hand: review its source before installing.":"Публиковать индекс может кто угодно. Плагин, установленный из стороннего источника, получает те же права, что и загруженный вручную: изучите его код перед установкой.","API":"API","API Access":"Доступ к API","API Addresses":"Адреса API","API Base URL":"Базовый URL API","API Base URL (Important: Not Chat API)":"Базовый URL API (Важно: Не Chat API)","API Base URL (Important: Not Chat API) *":"Базовый URL API (Важно: Не Chat API) *","API Base URL *":"Базовый URL API *","API Endpoints":"Конечные точки API","API Info":"Информация об API","API info added. Click \\"Save Settings\\" to apply.":"Информация API добавлена. Нажмите «Сохранить настройки», чтобы применить.","API info deleted. Click \\"Save Settings\\" to apply.":"Информация API удалена. Нажмите «Сохранить настройки», чтобы применить.","API info saved successfully":"Информация API успешно сохранена","API info updated. Click \\"Save Settings\\" to apply.":"Информация API обновлена. Нажмите «Сохранить настройки», чтобы применить.","API key":"Ключ API","API Key":"Ключ API","API Key (one per line for batch mode)":"Ключ API (по одному на строку для пакетного режима)","API Key (Production)":"API-ключ (Продакшн)","API Key (Sandbox)":"API-ключ (Песочница)","API Key *":"Ключ API *","API Key created successfully":"API ключ успешно создан","API Key deleted successfully":"API ключ успешно удален","API Key disabled successfully":"API ключ успешно отключен","API Key enabled successfully":"API ключ успешно включен","API key from the provider":"Ключ API от провайдера","API key is loading, please try again in a moment":"API-ключ загружается, пожалуйста, попробуйте еще раз через мгновение","API key is required":"Требуется ключ API","API Key mode (does not support batch creation)":"Режим API-ключа (не поддерживает пакетное создание)","API Key mode: use APIKey|Region":"Режим API Key: use APIKey|Region","API Key Quota":"Квота API-ключа","API Key updated successfully":"API ключ успешно обновлен","API keys":"Ключи API","API Keys":"Ключи API","API Private Key":"Секретный ключ API","API Requests":"Запросы API","API secret":"Секрет API","API token batch deletion":"Массовое удаление токенов API","API token batch key access":"Массовый просмотр ключей токенов API","API token configuration update":"Изменение настроек токена API","API token creation":"Создание токена API","API token deletion":"Удаление токена API","API token key access":"Просмотр ключа токена API","API token management":"Управление API токенами","API token status update":"Изменение статуса токена API","API URL":"URL API","API usage records":"Записи использования API","API version":"Версия API","API Version":"Версия API","API2GPT":"API2GPT","Ascending":"По возрастанию","Audio input cost {{quota}}":"Стоимость аудиовхода {{quota}}","App":"Приложение","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"Показанный рейтинг приложений сгенерирован для предпросмотра и будет заменён реальными данными после интеграции бэкенда.","Append":"Добавить в конец","Append mode: New keys will be added to the end of the existing key list":"Режим добавления: Новые ключи будут добавлены в конец существующего списка ключей","Append Template":"Добавить шаблон","Append to channel":"Добавить в канал","Append to End":"Добавить в конец","Append to existing keys":"Добавить к существующим ключам","Append value to array / string / object end":"Добавить значение в конец массива / строки / объекта","appended":"добавлено","Applicable channels":"Совместимые каналы","Applicable conditions":"Условия применения","Application":"Приложение","Applied {{name}} pricing to {{count}} models":"Тариф {{name}} применён к {{count}} моделям","Applied changes":"Применённые изменения","Applied upstream model changes to {{count}} channels":"Изменения вышестоящих моделей применены к {{count}} каналам","Applied upstream model changes to channel (ID: {{id}})":"Изменения вышестоящих моделей применены к каналу (ID: {{id}})","Applies to custom completion endpoints. JSON map of model → ratio.":"Применяется к пользовательским конечным точкам завершения. JSON-карта модель → коэффициент.","Apply":"Применить","Apply {{count}} model changes":"Применить изменения к {{count}} моделям","Apply {{field}} for {{name}}":"Применить {{field}} для {{name}}","Apply All Upstream Updates":"Применить все обновления из upstream","Apply changes":"Применить изменения","Apply disable rules to upstream request errors and scheduled or bulk health checks":"Применять правила отключения к ошибкам провайдера и периодическим или массовым проверкам","Apply Filters":"Применить фильтры","Apply IP Filter to Resolved Domains":"Применить IP-фильтр к разрешенным доменам","Apply Overwrite":"Применить перезапись","Apply plan":"Применить схему","Apply reset":"Выполнить сброс","Apply selected changes":"Применить выбранные изменения","Apply Sync":"Применить синхронизацию","Apply to all rows":"Применить ко всем строкам","Apply to draft":"Применить к черновику","Applying...":"Применение...","Approx.":"Примерно.","Approximate prices for common specs.":"Ориентировочные цены для типичных конфигураций.","apps":"приложений","Apps":"Приложения","apps tracked":"приложений отслеживается","Apps using the most tokens through new-api":"Приложения, использующие больше всего токенов через new-api","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"также перечислены здесь. Удалите их из Моделей, чтобы ответ `/v1/models` был удобным для пользователя и скрывал имена, специфичные для поставщиков.","Are you sure you want to delete":"Вы уверены, что хотите удалить","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"Вы уверены, что хотите удалить {{count}} модел(ей)? Это действие нельзя отменить.","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"Вы уверены, что хотите удалить все автоматически отключённые ключи? Это действие нельзя отменить.","Are you sure you want to delete channel \\"{{name}}\\"? This action cannot be undone.":"Вы уверены, что хотите удалить канал \\"{{name}}\\"? Это действие нельзя отменить.","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"Вы уверены, что хотите удалить развертывание \\"{{name}}\\"? Это действие нельзя отменить.","Are you sure you want to delete group \\"{{name}}\\"? This action cannot be undone.":"Удалить группу \\"{{name}}\\"? Это действие нельзя отменить.","Auto group {{group}} is duplicated":"Группа Auto {{group}} повторяется","Auto group {{group}} is unavailable or unauthorized":"Группа Auto {{group}} недоступна или нет прав доступа","Are you sure you want to delete model \\"{{name}}\\"? This action cannot be undone.":"Удалить модель \\"{{name}}\\"? Это действие нельзя отменить.","Are you sure you want to delete this key? This action cannot be undone.":"Вы уверены, что хотите удалить этот ключ? Это действие нельзя отменить.","Are you sure you want to disable all enabled keys?":"Вы уверены, что хотите отключить все включённые ключи?","Are you sure you want to enable all keys?":"Вы уверены, что хотите включить все ключи?","Are you sure you want to enable plugin {{name}} ({{key}})?":"Вы уверены, что хотите включить плагин {{name}} ({{key}})?","Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.":"Вы уверены, что хотите вручную завершить этот заказ? Пользователю будет начислена соответствующая квота.","Are you sure you want to sign out? You will need to sign in again to access your account.":"Вы уверены, что хотите выйти? Вам нужно будет войти снова, чтобы получить доступ к аккаунту.","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"Вы уверены, что хотите отвязать {{provider}} для этого пользователя? Пользователь больше не сможет входить через этот метод.","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"Вы уверены, что хотите отвязать {{provider}}? Вы больше не сможете входить через этот метод.","Are you sure?":"Вы уверены?","Area Chart":"Диаграмма с областями","Args (space separated)":"Аргументы (разделённые пробелами)","Arguments JSON":"Аргументы JSON","Arguments must be a JSON array":"Аргументы должны быть массивом JSON","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"Массив предустановок чат-клиентов. Каждый элемент представляет собой объект с одной парой ключ-значение: имя клиента и его URL.","Artifacts":"Артефакты","Asc":"По возрастанию","Ask anything":"Спросите что угодно","Assign models from the model list to see them here.":"Назначьте поставщика в списке моделей, чтобы они появились здесь.","Assigned by administrator only":"Назначается только администратором","Assigned by administrators and used to represent a user level, such as default or vip.":"Назначается администраторами и обозначает уровень пользователя, например default или vip.","Async":"Асинхронный","Async task polling":"Опрос асинхронных задач","Async Task Public Address":"Публичный адрес асинхронных задач","Async task refund":"Возврат асинхронной задачи","At least one model regex pattern is required":"Требуется хотя бы один шаблон регулярного выражения модели","At least one valid key source is required":"Требуется хотя бы один действительный источник ключа","Attach":"Прикрепить","Attempt":"Попытка","Audio":"Аудио","Audio and Realtime pricing must be converted manually.":"Тарифы аудио и Realtime необходимо преобразовать вручную.","Audio and text-only requests keep their respective pricing.":"Для аудио и текстовых запросов сохраняются соответствующие правила расчёта.","Audio comp.":"Аудио-вывод","Audio completion ratio":"Коэффициент завершения аудио","Audio In":"Аудиовход","Audio input":"Аудиовход","Audio Input":"Аудио вход","Audio input price":"Цена аудиовхода","Audio Input Price":"Цена аудиовхода","Audio Out":"Аудиовыход","Audio output":"Аудиовыход","Audio Output":"Аудио выход","Audio output price":"Цена аудиовыхода","Audio output price requires an audio input price.":"Для цены аудиовыхода нужна цена аудиовхода.","Audio playback failed":"Ошибка воспроизведения аудио","Audio Preview":"Предпросмотр аудио","Audio ratio":"Коэффициент аудио","Audio requests":"Аудиозапросы","Audio Tokens":"Аудио токены","Audit access changed. Showing only your records.":"Права доступа к аудиту изменились. Показаны только ваши записи.","Audit Logs":"Журнал аудита","Audit metadata is unavailable":"Дополнительные сведения аудита недоступны","Audit records start after this feature was enabled. Earlier records remain in Common Logs.":"Аудит ведётся с момента включения этой функции. Более ранние записи остаются в общих журналах.","Auth":"Аутентификация","Auth configured":"Аутентификация настроена","Auth name":"Имя auth","Auth name is required":"Имя auth обязательно","Auth Style":"Стиль аутентификации","Auth type is invalid":"Тип auth недействителен","Auth value":"Значение auth","Auth value is required":"Значение auth обязательно","auth.resetPasswordConfirm.backToLogin":"Вернуться ко входу","auth.resetPasswordConfirm.confirm":"Подтвердить сброс пароля","auth.resetPasswordConfirm.description":"Подтвердите запрос на сброс, чтобы создать новый пароль.","auth.resetPasswordConfirm.retry":"Повторить ({{seconds}}с)","auth.resetPasswordConfirm.success":"Ваш пароль успешно сброшен","Authentication":"Аутентификация","Authentication for upstream requests; channel credentials may still be used.":"Способ аутентификации запросов к провайдеру; учётные данные канала всё ещё могут использоваться.","Authentication Method":"Метод аутентификации","Authenticator code":"Код аутентификатора","Authenticator code or backup code":"Код аутентификатора или резервный код","Authorization callback URL":"URL обратного вызова авторизации","Authorization Endpoint":"Конечная точка авторизации","Authorization Endpoint (Optional)":"Конечная точка авторизации (необязательно)","Authorize":"Авторизовать","Auto":"Авто","Auto (Circuit Breaker)":"Авто (Автовыключатель)","Auto assignment order":"Порядок автоматического назначения","Auto Ban":"Автоматическая блокировка","Auto detect (default)":"Автоматическое определение (по умолчанию)","Auto Disabled":"Автоматически отключено","Bark push URL cannot be empty":"URL push-уведомлений Bark не может быть пустым","Auto group behavior":"Поведение группы auto","Auto Group Chain":"Автоматическая цепочка групп","Auto group order":"Порядок групп Auto","Auto groups must not contain duplicates":"Группы Auto не должны повторяться","Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.":"Авто согласовывает HTTP/2 при наличии. HTTP/1.1 использует несколько keep-alive соединений при параллельных запросах.","Auto refresh":"Автообновление","Auto refresh (5s)":"Автообновление (5 с)","Auto Sync Upstream Models":"Автоматическая синхронизация моделей провайдера","Auto-disable channel":"Автоотключение канала","Auto-disable disabled":"Автоотключение выключено","Auto-disable enabled":"Автоотключение включено","Auto-disable rules":"Правила автоотключения","Auto-disable status codes":"Коды автоотключения","Auto-disable-enabled channels only":"Только каналы с автовыключением","Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.":"В этом режиме проверяются только каналы с включённым автоматическим отключением, которые не были отключены вручную.","Auto-discover":"Автообнаружение","Auto-discovers endpoints from the provider":"Автоматически обнаруживает конечные точки от провайдера","Auto-fill when one field exists and another is missing":"Автозаполнение, когда одно поле есть, а другое отсутствует","Auto-refreshing every {{seconds}}s":"Автообновление каждые {{seconds}} с","Auto-retry status codes":"Коды авто-повтора","Automatic from system website address":"Автоматически из адреса сайта системы","Automatic selection":"Автовыбор","Automatically disable channel on repeated failures":"Автоматически отключать канал при повторных неудачах","Automatically disable channels exceeding this response time":"Автоматически отключать каналы, превышающие это время ответа","Automatically disable channels when tests fail":"Автоматически отключать каналы при сбое тестов","Automatically probe all channels in the background":"Автоматически проверять все каналы в фоновом режиме","Automatically replaces upstream callback URLs with the server address.":"Автоматически заменяет URL обратных вызовов upstream на адрес сервера.","Automatically selects the best available group with circuit breaker mechanism":"Автоматически выбирает лучшую доступную группу с механизмом circuit breaker","Automatically sync model list when upstream changes are detected":"Автоматически синхронизировать список моделей при обнаружении изменений у провайдера","Availability (last 24h)":"Доступность (последние 24 ч)","Available":"Доступно","Available Balance":"Доступный баланс","Available channels: {{count}}":"Доступно: {{count}}","Available credits are ordered by soonest expiration.":"Доступные сбросы отсортированы по ближайшему истечению.","Available disk space":"Доступное дисковое пространство","Available Models":"Доступные модели","Available reset credits":"Доступные сбросы лимита","Available Rewards":"Доступные награды","Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.":"Доступные переменные: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, а также пути вида {{current.roles}}.","Average latency":"Средняя задержка","Average latency, TTFT, and success rate by group":"Средняя задержка, TTFT и доля успешных запросов по группам","Average latency, TTFT, TPS, and success rate":"Средняя задержка, TTFT, TPS и доля успешных запросов","Average RPM":"Среднее число оборотов в минуту","Average time-to-first-token (TTFT) by group":"Среднее время до первого токена (TTFT) по группам","Average tokens per second sustained per group":"Средняя устойчивая пропускная способность (токенов/с) по группам","Average TPM":"Среднее число транзакций в минуту","Average TTFT":"Средний TTFT","Awake engines":"Активные движки","Batch-adding Vertex AI keys requires a JSON array, for example {{example}}. Check the input: {{error}}":"Для пакетного добавления ключей Vertex AI нужен массив JSON, например {{example}}. Проверьте ввод: {{error}}","AWS":"AWS","AWS API":"API AWS","AWS Bedrock Claude Compat":"AWS Bedrock Claude совместимость","AWS Key Format":"Формат ключа AWS","Azure":"Azure","AZURE_OPENAI_ENDPOINT":"AZURE_OPENAI_ENDPOINT","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"Назад","Back to configuration":"Вернуться к настройке","Back to Dashboard":"Вернуться к панели управления","Billed per request":"Тарификация за запрос","Back to footnote {{id}} reference":"Вернуться к ссылке на сноску {{id}}","Back to Home":"Вернуться на главную","Back to login":"Вернуться к входу","Back to Models":"Вернуться к моделям","Backed up":"Резервная копия создана","Billing expressions must be a JSON object mapping models to expressions: {{error}}":"Выражения тарификации должны быть JSON-объектом, сопоставляющим модели с выражениями: {{error}}","Background":"В фоновом режиме","Background job tracker for queued work.":"Отслеживатель фоновых заданий для задач в очереди.","Backup Code":"Резервный код","Backup code must be in format XXXX-XXXX":"Резервный код должен быть в формате XXXX-XXXX","Backup codes regenerated successfully":"Резервные коды успешно перегенерированы","Backup codes remaining: {{count}}":"Осталось резервных кодов: {{count}}","Bad Request":"Неверный запрос","Badge Color":"Цвет значка","Billing parameters: {{params}}":"Параметры тарификации: {{params}}","Baidu":"Baidu","Baidu V2":"Baidu V2","Balance":"Баланс","Balance and top-up management":"Управление балансом и пополнением","Balance depleted":"Баланс исчерпан","Balance is shown in quota units":"Баланс показан в единицах квоты","Balance queried successfully":"Баланс успешно запрошен","Balance Query":"Запрос баланса","Balance Query route does not support pass-through":"Маршрут запроса баланса не поддерживает сквозную передачу","Balance response not recognized":"Ответ с балансом не распознан","Balance updated successfully":"Баланс успешно обновлён","Balance updated: {{balance}}":"Баланс обновлён: {{balance}}","Bar Chart":"Столбчатая диаграмма","Bark Push URL":"URL для push-уведомлений Bark","Binding successful":"Привязка выполнена","Base":"Базовая","Base address provided by your Epay service":"Базовый адрес, предоставленный вашим сервисом Epay","Base amount. Actual deduction = base amount × system group rate.":"Базовая сумма. Фактический вычет = базовая сумма × коэффициент группы.","Base charge":"Базовая плата","Base group ratios apply until you add an override.":"Без переопределений применяются базовые коэффициенты групп.","Base input and output token prices for this tier.":"Базовые цены входных и выходных токенов для этого уровня.","Base input price only":"Только базовая цена входа","Base Limits":"Базовые лимиты","Base multipliers applied when users select specific groups.":"Базовые множители, применяемые, когда пользователи выбирают определенные группы.","Base Price":"Базовая цена","Base rate limit windows for this account.":"Окна базовых лимитов для этого аккаунта.","Base URL":"Адрес API","Base URL *":"Базовый URL *","Base URL is required for this channel type":"Для этого типа канала требуется Base URL","Bonus for inviting a user {{quota}}":"Бонус за приглашение пользователя {{quota}}","Base URL is required when an advanced route uses an upstream path":"Base URL требуется, когда расширенный маршрут использует путь upstream","Base URL of your Uptime Kuma instance":"Базовый URL вашего экземпляра Uptime Kuma","Basic Authentication":"Базовая аутентификация","Basic Configuration":"Базовая конфигурация","Basic Info":"Основная информация","Basic Information":"Основная информация","Basic Templates":"Базовые шаблоны","Batch Add":"Массовое добавление","Batch Add (one key per line)":"Пакетное добавление (один ключ на строку)","Batch add mappings":"Массовое добавление сопоставлений","Batch channel test":"Пакетное тестирование каналов","Batch delete API tokens":"Массовое удаление токенов API","Batch delete failed":"Пакетное удаление не удалось","Batch deleted {{count}} channels":"Пакетно удалено каналов: {{count}}","Batch deleted {{count}} redemption codes":"Массово удалено кодов погашения: {{count}}","Batch deleted redemption codes (count not recorded)":"Массовое удаление кодов погашения (количество не записано)","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"Пакетное обнаружение завершено: {{channels}} каналов, {{add}} для добавления, {{remove}} для удаления, {{fails}} ошибок","Batch detection failed":"Пакетное обнаружение не удалось","Batch disable failed":"Пакетное отключение не удалось","Batch Edit":"Пакетное редактирование","Batch edit all channels with this tag. Leave fields empty to keep current values.":"Пакетно редактировать все каналы с этим тегом. Оставьте поля пустыми, чтобы сохранить текущие значения.","Batch Edit by Tag":"Пакетное редактирование по тегу","Batch enable failed":"Пакетное включение не удалось","Batch Operations":"Пакетные операции","Batch processing failed":"Пакетная обработка не удалась","Batch redirect":"Массовое перенаправление","Batch set tag for {{count}} channels":"Тег пакетно задан для {{count}} каналов","Batch test completed: {{count}} succeeded":"Пакетный тест завершен: {{count}} успешно","Batch test completed: {{success}} succeeded, {{failed}} failed":"Пакетный тест завершен: {{success}} успешно, {{failed}} с ошибкой","Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed":"Пакетный тест остановлен: {{completed}}/{{total}} завершено, {{success}} успешно, {{failed}} с ошибкой","Batch testing models...":"Пакетное тестирование моделей...","Batch updated channel status ({{count}}/{{total}} changed)":"Массовое обновление статусов каналов (изменено: {{count}}/{{total}})","Batch upstream model update":"Пакетное обновление вышестоящих моделей","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"Пакетное обновление моделей: {{channels}} каналов, {{added}} добавлено, {{removed}} удалено, {{fails}} ошибок","Before conversion":"До преобразования","Best for single-tenant deployments. Pricing and billing options stay hidden.":"Лучший вариант для однопользовательских развёртываний. Опции ценообразования и биллинга будут скрыты.","Best TTFT":"Лучший TTFT","Billable image count":"Количество оплачиваемых изображений","Billable input tokens":"Оплачиваемые входные токены","Billable output tokens":"Оплачиваемые выходные токены","Billable token breakdown":"Разбивка оплачиваемых токенов","Billed as default. No cell for this combination, so the base ratio of default applies — the 0.8 of vip plays no part.":"Тарифицируется по default. Ячейки для этой комбинации нет, поэтому применяется базовый коэффициент default — 0,8 группы vip не участвует.","Billed as premium. The highlighted cell matches, so the override 0.3 applies.":"Тарифицируется по premium. Совпадает с выделенной ячейкой, поэтому применяется переопределение 0,3.","Billing":"Биллинг","Billing & Payment":"Биллинг и платежи","Billing currency":"Валюта оплаты","Billing Details":"Детали биллинга","Billing expression":"Выражение тарификации","Billing group":"Тарифная группа","Billing group = default (the token has a group, so use it)":"Тарифная группа = default (у токена есть группа, используем её)","Billing group = premium (the token has a group, so use it)":"Тарифная группа = premium (у токена есть группа, используем её)","Billing group = vip (the token has no group, so use the user group)":"Тарифная группа = vip (у токена нет группы, используем группу пользователя)","Billing History":"История биллинга","Billing management":"Управление оплатой","Billing Mode":"Режим биллинга","Billing parameters":"Параметры тарификации","Billing Path":"Путь тарификации","Billing Process":"Процесс тарификации","Billing rule: each call is billed as the token group (falling back to the user group when the token has none). The base ratio always comes from that billing group, not from the user group. To give a user group a special price on another billing group, add an entry in the override matrix.":"Правило тарификации: каждый вызов тарифицируется по группе токена (если у токена нет группы — по группе пользователя). Базовый коэффициент всегда берётся из этой тарифной группы, а не из группы пользователя. Чтобы задать группе пользователей особую цену для другой тарифной группы, добавьте запись в матрицу переопределений.","Billing Source":"Источник биллинга","Billing values must be finite and non-negative.":"Значения для расчёта стоимости должны быть конечными и неотрицательными.","Bind":"Привязать","Bind a Pancake store + product":"Привязать магазин и продукт Pancake","Bind an email address to your account.":"Привяжите адрес электронной почты к вашему аккаунту.","Bind Email":"Привязать Email","Bind task plugins":"Привязать плагины задач","Bind Telegram Account":"Привязать аккаунт Telegram","Bind WeChat":"Привязать WeChat","Bind WeChat Account":"Привязка аккаунта WeChat","Binding Information":"Информация о привязке","Binding successful!":"Привязка успешна!","Binding Type":"Тип привязки","Binding your {{provider}} account":"Привязка вашего аккаунта {{provider}}","Binding...":"Привязка...","Bindings":"Привязки","Calculating priority...":"Расчёт приоритета…","Callback URL configuration error":"Ошибка настройки URL обратного вызова","Blacklist":"Чёрный список","Blacklist (Block listed domains)":"Черный список (Блокировка доменов из списка)","Blacklist (Block listed IPs)":"Черный список (Блокировка IP из списка)","Blank Rule":"Пустое правило","Cannot create users with permission level equal to or higher than yourself":"Нельзя создать пользователя с уровнем прав, равным вашему или выше","Cannot delete super administrator account":"Нельзя удалить учётную запись суперадминистратора","Cannot delete the last key":"Нельзя удалить последний ключ","Cannot demote super administrator user":"Нельзя понизить суперадминистратора","Cannot disable super administrator user":"Нельзя отключить суперадминистратора","Cannot enable the email domain restriction. Enter the allowed email domains first.":"Невозможно включить ограничение по домену почты. Сначала укажите разрешённые домены.","Cannot enable Turnstile verification. Enter the Turnstile settings first.":"Невозможно включить проверку Turnstile. Сначала заполните настройки Turnstile.","Cannot enable WeChat login. Enter the WeChat login settings first.":"Невозможно включить вход через WeChat. Сначала заполните настройки входа WeChat.","Cannot enable {{provider}}. Enter the {{provider}} Client ID and Client Secret first.":"Невозможно включить {{provider}}. Сначала укажите Client ID и Client Secret для {{provider}}.","Blend":"Смешивание","Block email aliases (e.g., user+alias@domain.com)":"Блокировать псевдонимы email (например, user+alias@domain.com)","Blocked keywords":"Заблокированные ключевые слова","Blocks messages when sensitive keywords are detected.":"Блокирует сообщения при обнаружении конфиденциальных ключевых слов.","Body param":"Параметр тела запроса","Boolean":"Логический","Border radius":"Радиус скругления","Bot Name":"Имя бота","Bot Protection":"Защита от ботов","Bot Token":"Токен бота","Bot:":"Бот:","Bound":"Привязано","Bound a subscription":"Подписка привязана","Bound Channels":"Привязанные каналы","Bound Only":"Только привязанные","Bound product:":"Привязанный продукт:","Bound store:":"Привязанный магазин:","Branch actions {{path}}":"Действия ветви {{path}}","Bring channels back online after successful checks":"Вернуть каналы в онлайн после успешных проверок","Browse and compare":"Просмотр и сравнение","Browse available models and pricing":"Просмотрите доступные модели и цены","Browse rankings by category":"Просмотр рейтингов по категориям","Browser":"Браузер","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"Бюджетные токены = макс. токены × соотношение. Принимает десятичное число от 0.002 до 1. Рекомендуется поддерживать в соответствии с биллингом вышестоящего провайдера.","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"Бюджетные токены = макс. токены × соотношение. Принимает десятичное число от 0.1 до 1.","Budget Tokens Ratio":"Соотношение бюджетных токенов","Budgets":"Бюджеты","Build on your API gateway in minutes":"Начните работу с API-шлюзом за несколько минут","Built for developers,":"Создано для разработчиков,","Built-in":"Встроенный","Built-in Device":"Встроенное устройство","Built-in is v{{factory}}; delete the custom version to return to it":"Встроенная версия — v{{factory}}; удалите свою, чтобы вернуться к ней","Built-in pricing may become effective again.":"Встроенные цены могут снова вступить в силу.","Built-in v{{factory}} / marketplace v{{market}}":"Встроенный v{{factory}} / магазин v{{market}}","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"Встроенное: отпечаток пальца/лицо телефона или Windows Hello; Внешнее: USB-ключ безопасности","Bulk actions for {{count}} selected records":"Групповые действия для {{count}} записей","by":"от","By category":"По категориям","By model author":"По автору модели","By quota":"По квоте","By requests":"По запросам","By tokens":"По токенам","Changes save on drop. You can undo the last move.":"Изменения сохраняются при отпускании. Последнее перемещение можно отменить.","Channel affinity settings are not initialized":"Настройки привязки к каналу не инициализированы","Cache":"Кэш","Cache create (1h) price":"Цена создания кэша (1 ч)","Cache create price":"Цена создания кэша","Cache Creation":"Создание кэша","Cache Creation (1h)":"Создание кэша (1h)","Cache Creation (5m)":"Создание кэша (5m)","Cache Directory":"Каталог кэша","Cache Directory Disk Space":"Дисковое пространство каталога кэша","Cache Directory Info":"Информация о каталоге кэша","Channel does not exist":"Канал не существует","Cache Entries":"Записи кэша","Cache mode":"Режим кэша","Cache pricing":"Цены кэша","Cache ratio":"Коэффициент кэша","Cache Read":"Чтение кэша","Cache read price":"Цена чтения кэша","Cache repeated prompt prefixes for cheaper, faster reuse":"Кэшировать повторяющиеся префиксы промптов для дешёвого и быстрого повторного использования","Cache write":"Запись кэша","Cache Write":"Запись в кэш","Cache Write (1h)":"Запись кэша (1h)","Cache Write (5m)":"Запись кэша (5m)","Cache write price":"Цена записи кэша","Cached":"Кэш","Cached input":"Кэшированный ввод","Cached tokens":"Кэшированные токены","Calculated price: ${{price}} per 1M tokens":"Расчётная цена: ${{price}} за 1М токенов","Calculated ratio: {{ratio}}":"Расчётный коэффициент: {{ratio}}","Calculating...":"Вычисление...","Call 1: the token group is premium":"Вызов 1: группа токена — premium","Call 2: the token group is default":"Вызов 2: группа токена — default","Call 3: the token has no group":"Вызов 3: у токена нет группы","Call Count Distribution":"Распределение количества вызовов","Call Count Ranking":"Рейтинг по количеству вызовов","Call Proportion":"Доля вызовов","Call Trend":"Тенденция вызовов","Callback address":"Адрес обратного вызова","Callback Caller IP":"IP вызывающей стороны callback","Callback notification URL":"URL обратного вызова","Callback Payment Method":"Способ оплаты (callback)","Callback URL format":"Формат URL обратного вызова","Cancel":"Отмена","Cancelled":"Отменено","Cancelled at":"Отменено","Capabilities":"Возможности","Caps the response length":"Ограничивает длину ответа","Capture a reusable bundle of models, tags, or endpoints.":"Создайте повторно используемый набор моделей, тегов или конечных точек.","Card view":"Карточки","Cascade disable channels":"Отключить также каналы","Catalog visibility":"Видимость в каталоге","Catch-all route must be last for the same incoming path":"Резервный маршрут должен быть последним для этого входного пути","Category":"Категория","Category Name":"Название категории","Category name is required":"Название категории обязательно","Category name must be less than 50 characters":"Название категории должно содержать менее 50 символов","Caution":"Внимание","CC Switch":"CC Switch","Centered":"По центру","Chain":"Цепочка","Change":"Изменить","Change domain":"Изменить домен","Change language":"Изменить язык","Change model vendor":"Изменить поставщика моделей","Change Password":"Изменить пароль","Change provider":"Сменить поставщика","Change system settings and custom OAuth providers, and sync prices.":"Изменение системных настроек и пользовательских поставщиков OAuth, синхронизация цен.","Change the Passkey domain?":"Изменить домен ключей доступа?","Change To":"Изменить на","Change upstream model names":"Изменить имена моделей для провайдера","Change vendor":"Изменить поставщика","Change your display name and personal settings.":"Изменение отображаемого имени и личных настроек.","Changed":"Изменено","Changed / Total":"Изменено / Всего","Channel notifications":"Уведомления о каналах","Channel priorities changed. Refresh and try again.":"Приоритеты изменились. Обновите страницу и повторите попытку.","Channel priorities saved":"Приоритеты каналов сохранены","Channel priority is outside the sortable range":"Приоритет канала вне допустимого диапазона сортировки","Check-in failed, please try again later":"Не удалось отметиться, попробуйте позже","Check-in failed: quota update error":"Не удалось отметиться: ошибка обновления квоты","Check-in feature is not enabled":"Функция отметок не включена","Changed access token permissions":"Изменены права токена доступа","Changed Fields":"Изменённые поля","Check-in successful":"Отметка выполнена","Changed fields: {{fields}}":"Изменённые поля: {{fields}}","Changelog":"История изменений","Changes are written to the settings draft on save.":"Изменения будут записаны в черновик настроек при сохранении.","Changes declared endpoint types and custom paths shown to users.":"Изменяет типы конечных точек и пользовательские пути, отображаемые пользователям.","Changes visibility in the model catalog. Channels remain configured separately.":"Изменяет видимость в каталоге. Каналы настраиваются отдельно.","Changes visibility in the model square. Channel status and existing API access are unchanged.":"Меняет видимость в каталоге моделей, не затрагивая состояние каналов и существующий доступ к API.","Changes which model names inherit this metadata. Prices are not inherited.":"Изменяет набор имён моделей, наследующих эти метаданные. Цены не наследуются.","Changing...":"Изменение...","Channel":"Канал","Channel {{name}}":"Канал {{name}}","Channel {{name}} model {{model}}":"Канал {{name}}, модель {{model}}","Channel Affinity":"Привязка к каналу","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Привязка к каналу повторно использует последний успешный канал на основе ключей, извлечённых из контекста запроса или тела JSON.","Channel Affinity: Upstream Cache Hit":"Привязка к каналу: попадание в кэш upstream","Channel availability and group access are derived from enabled channels. Importing metadata does not create a callable channel.":"Доступность каналов и права групп определяются включёнными каналами. Импорт метаданных не создаёт доступный канал.","Choose a time range of up to {{days}} days. The other filters on this page also apply.":"Выберите период не длиннее {{days}} дн. Остальные фильтры на странице тоже применяются.","Channel configuration":"Настройка канала","Channel consistency repaired: {{success}} succeeded, {{fails}} failed":"Согласованность каналов восстановлена: успешно {{success}}, ошибок {{fails}}","Channel copied successfully":"Канал успешно скопирован","Channel created successfully":"Канал успешно создан","Channel deleted successfully":"Канал успешно удалён","Channel disable requested":"Запрошено отключение канала","Channel disabled successfully":"Канал успешно отключён","Channel enabled successfully":"Канал успешно включён","Channel error":"Ошибка канала","Channel Extra Settings":"Дополнительные настройки канала","Channel health":"Состояние каналов","Channel health checks":"Проверки состояния каналов","Channel ID":"ID канала","Channel ID is required":"Требуется ID канала","Channel is not selected":"Канал не выбран","Channel key":"Ключ канала","Channel key unlocked":"Ключ канала разблокирован","Channel Management":"Управление каналами","Channel models":"Модели каналов","Channel name is required":"Имя канала обязательно","Channel selected":"Канал выбран","Channel selection":"Выбор канала","Channel switching options":"Параметры переключения канала","Channel test completed":"Тест канала завершён","Channel test concurrency":"Параллельность проверки каналов","Channel test concurrency must be between 1 and 32":"Параллельность проверки каналов должна быть от 1 до 32","Channel test mode":"Режим проверки каналов","Channel type":"Тип канала","Channel type does not match the status endpoint":"Тип канала не соответствует эндпоинту состояния","Channel type is required":"Тип канала обязателен","Channel types":"Типы каналов","Channel types you can use when binding this plugin.":"Типы каналов, к которым можно привязать этот плагин.","Channel updated successfully":"Канал успешно обновлён","Channel-specific settings (JSON format)":"Настройки, специфичные для канала (формат JSON)","Channel:":"Канал:","channel(s)? This action cannot be undone.":"канал(ы)? Это действие нельзя отменить.","Channels":"Каналы","Channels {{channels}} · Groups {{groups}}":"Каналы {{channels}} · Группы {{groups}}","Channels and groups":"Каналы и группы","Channels deleted successfully":"Каналы успешно удалены","Channels must also enable Auto Ban before automatic disabling can take effect.":"Для применения правил автоотключение также должно быть включено у самого канала.","Character chat, storytelling, persona":"Диалог с персонажем, сторителлинг, персона","Charge.":"Списание.","Chart Preferences":"Настройки графиков","Chart Settings":"Настройки диаграммы","Chat":"Чат","Chat area":"Область чата","Chat Area":"Область чата","Chat Client Name":"Имя чат-клиента","Chat client name is required":"Название чат-клиента обязательно","Chat configuration JSON":"JSON конфигурации чата","Chat preset not found":"Предустановка чата не найдена","Chat Presets":"Предустановки чата","Chat session management":"Управление сессиями чата","ChatCompletions -> Responses Compatibility":"Совместимость ChatCompletions → Ответы","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Check again":"Проверить снова","Check channels awaiting recovery only":"Проверять только каналы, ожидающие восстановления","Check for new upstream models":"Периодически искать новые модели","Check for updates":"Проверить обновления","Check in daily to receive random quota rewards":"Регистрируйтесь ежедневно, чтобы получать случайные вознаграждения по квоте","Check in now":"Войдите сейчас","Check line {{line}} for a missing comma.":"Проверьте строку {{line}} на пропущенную запятую.","Check out the Quick Start":"Ознакомьтесь с быстрым стартом","Check resolved IPs against IP filters even when accessing by domain":"Проверять разрешенные IP-адреса по IP-фильтрам даже при доступе по домену","Check the override matrix at row = user group, column = billing group. If that cell is set, use it. Otherwise use the billing group base ratio from the pricing table.":"Проверьте матрицу переопределений: строка = группа пользователя, столбец = тарифная группа. Если ячейка задана — используется она, иначе базовый коэффициент тарифной группы из таблицы.","Check-in failed":"Регистрация не удалась.","Check-in Rewards":"Награды за отметку","Check-in Settings":"Настройки прибытия","Check-in successful! Received":"Прибытие прошло успешно! Получено","Checked in":"Зарегистрирован","Checking connection":"Проверка подключения","Checking file integrity...":"Проверка целостности файла…","Checking name...":"Проверяю имя...","Checking updates...":"Проверка обновлений...","Checking upstream models. Channel models will only change after confirmation.":"Проверка моделей провайдера. Модели канала будут изменены только после подтверждения.","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","Checks hourly while you are online, including pre-releases.":"Проверка каждый час при подключении к сети, включая предварительные версии.","Checks text extracted from supported requests against keywords, ignoring case. A match rejects the request before upstream processing and does not affect channel health. Images, audio and generated responses are not checked.":"Проверяет текст из поддерживаемых запросов по ключевым словам без учёта регистра. Совпадение отклоняет запрос до отправки провайдеру и не влияет на здоровье канала. Изображения, аудио и сгенерированные ответы не проверяются.","Chinese":"Китайский","Choose a complete upstream protocol plan or edit individual route groups.":"Выберите полную схему протокола поставщика или измените группы маршрутов.","Choose a provider or plugin to configure your channel.":"Выберите поставщика или плагин для настройки канала.","Choose a time at least one hour from now":"Выберите время не раньше чем через час","Choose a username":"Выберите имя пользователя","Choose a valid IANA timezone.":"Выберите допустимый часовой пояс IANA.","Choose an amount and payment method":"Выберите сумму и способ оплаты","Choose and order the groups this API key will try.":"Выберите и упорядочьте группы, которые будет использовать этот API-ключ.","Choose another file":"Выбрать другой файл","Choose between default expanded, compact icon-only, or full layout mode":"Выберите между развернутым по умолчанию, компактным (только иконки) или полным режимом макета","Choose between inset, floating, or standard sidebar layout":"Выберите между встроенным, плавающим или стандартным макетом боковой панели","Choose between left-to-right or right-to-left site direction":"Выберите между направлением сайта слева направо или справа налево","Choose between system preference, light mode, or dark mode":"Выберите между системными настройками, светлым режимом или темным режимом","Choose channels to sync upstream ratio configurations from":"Выберите каналы для синхронизации конфигураций соотношений из вышестоящих источников","Choose file":"Выбрать файл","Choose Group":"Выбрать группу","Choose how flow widths are calculated.":"Выберите, как рассчитывается ширина потоков.","Choose how quota values are shown to users":"Выберите, как значения квоты отображаются пользователям","Choose how the platform will operate":"Выберите режим работы платформы","Choose how to filter domains":"Выберите, как фильтровать домены","Choose how to filter IP addresses":"Выберите, как фильтровать IP-адреса","Choose one SMTP transport security mode":"Выберите один из режимов защиты SMTP-транспорта","Choose price sources":"Выберите источники цен","Choose the bundle type and define the items inside it.":"Выберите тип пакета и определите элементы внутри него.","Choose the default charts, range, and time granularity for model analytics.":"Выберите графики, диапазон и временную детализацию по умолчанию для аналитики моделей.","Choose the domain used when this Passkey was created, then try again.":"Выберите домен, использованный при создании этого ключа доступа, и повторите попытку.","Choose where to fetch upstream metadata.":"Выберите, откуда получать метаданные вышестоящего источника.","Choose which charts are selected by default when opening model analytics.":"Выберите графики, которые будут выбраны по умолчанию при открытии аналитики моделей.","Clamped to":"Ограничено до","Claude":"Клод","Claude CLI Header Passthrough":"Проброс заголовков Claude CLI","Claude only":"Только Claude","Clean":"Без конфликта","Clean history logs":"Очистить журналы истории","Clean logs":"Очистить логи","Clean task history":"Очистить историю задач","Clean up inactive cache":"Очистить неактивный кэш","Clean Up Log Files":"Очистить файлы журналов","Cleaned up {{count}} log files, freed {{size}}":"Очищено {{count}} файлов журналов, освобождено {{size}}","Cleaning...":"Очистка...","Cleanup failed":"Ошибка очистки","Cleanup Mode":"Режим очистки","Clear":"Очистить","Clear all":"Очистить все","Clear All":"Очистить все","Clear All Cache":"Очистить весь кэш","Clear all filters":"Очистить все фильтры","Clear cache for this rule":"Очистить кэш этого правила","Clear chat history":"Очистить историю чата","Clear chat history?":"Очистить историю чата?","Clear field selection":"Снять выделение полей","Clear filters":"Очистить фильтры","Clear Mapping":"Очистить сопоставление","Clear mode flags in prompts":"Очистить флаги режимов в промптах","Clear node filters":"Очистить фильтры узлов","Clear search":"Очистить поиск","Clear selection":"Снять выделение","Clear selection (Escape)":"Снять выделение (Escape)","Clear vendor":"Убрать поставщика","Cleared":"Очищено","Cleared {{bindingType}} binding for user {{username}}":"Привязка {{bindingType}} пользователя {{username}} удалена","Cleared all models":"Все модели очищены","Cleared channel affinity cache":"Кэш привязки каналов очищен","Cleared disk cache":"Дисковый кэш очищен","Cleared historical logs":"Исторические журналы очищены","Cleared log files":"Файлы журналов очищены","Click \\"Create Plan\\" to create your first subscription plan":"Нажмите «Создать план», чтобы создать первый план подписки","Click \\"Generate\\" to create a token":"Нажмите \\"Сгенерировать\\", чтобы создать токен","Click a stage to show or hide that column":"Нажмите на этап, чтобы показать или скрыть этот столбец","Click any category to drill into its models, apps, and trends":"Нажмите на категорию, чтобы изучить её модели, приложения и тренды","Click for details":"Нажмите для подробностей","Click save when you\'re done.":"Нажмите «Сохранить», когда закончите.","Click save when you're done.":"Нажмите сохранить, когда закончите.","Click the button below to bind your Telegram account":"Нажмите кнопку ниже, чтобы привязать ваш аккаунт Telegram","Click to copy":"Нажмите, чтобы скопировать","Click to open deployment":"Нажмите, чтобы открыть развертывание","Click to preview audio":"Нажмите для предпросмотра аудио","Click to preview video":"Нажмите, чтобы просмотреть видео","Click to update balance":"Нажмите, чтобы обновить баланс","Click to view Codex usage":"Нажмите, чтобы посмотреть использование Codex","Compliance confirmation fields cannot be changed through the general settings API":"Поля подтверждения соответствия нельзя изменить через общий API настроек","Click to view full details":"Нажмите для просмотра подробностей","Click to view full error message":"Нажмите, чтобы увидеть полное сообщение об ошибке","Click to view full prompt":"Нажмите, чтобы увидеть полный промпт","Composition failed":"Не удалось выполнить композицию","Click to view image":"Нажмите, чтобы просмотреть изображение","Client":"Клиент","Client header value":"Значение заголовка клиента","Client headers override the gateway defaults and may cause upstream errors":"Заголовки клиента заменяют заголовки шлюза по умолчанию и могут вызвать ошибки вышестоящего сервиса","Client ID":"ID клиента","Client information such as User-Agent and IP is exposed to the upstream":"Данные клиента, такие как User-Agent и IP, раскрываются вышестоящему сервису","Client model":"Модель клиента","Client model matching":"Сопоставление client model","Client model matching help":"Справка по сопоставлению client model","Client Secret":"Секрет клиента","Close":"Закрыть","Close dialog":"Закрыть диалог","Close menu":"Закрыть меню","Close panel":"Закрыть панель","Close the panel to edit here":"Закрыть панель и редактировать здесь","Close Today":"Закрыть сегодня","Cloudflare":"Cloudflare","CNY":"Юань","CNY per USD":"CNY за USD","Code":"Код","Code generation, refactoring, autocomplete":"Генерация кода, рефакторинг, автодополнение","Code interpreter":"Интерпретатор кода","Code samples":"Примеры кода","Codes copied!":"Коды скопированы!","Codex":"Codex","Codex Account & Usage":"Аккаунт и использование Codex","Codex Account Status":"Статус аккаунта Codex","Codex channels do not support batch creation":"Каналы Codex не поддерживают пакетное создание","Codex channels use an OAuth JSON credential as the key.":"Каналы Codex используют учётные данные OAuth в формате JSON в качестве ключа.","Codex CLI Header Passthrough":"Проброс заголовков Codex CLI","Codex credential must be a JSON object with access_token and account_id":"Учетные данные Codex должны быть JSON-объектом с access_token и account_id","Cohere":"Cohere","Collapse":"Свернуть","Collapse all":"Свернуть всё","Collapse All":"Свернуть все","Collapse panel":"Свернуть панель","Collect relay latency and success-rate metrics for the model square.":"Собирает метрики задержки Relay и доли успешных запросов для витрины моделей.","Color":"Цвет","Color is required":"Цвет обязателен","Color preset":"Цветовая предустановка","Color:":"Цвет:","Comfortable":"Просторная","Coming Soon!":"Скоро!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"Точные имена моделей через запятую. Добавьте префикс regex:, чтобы игнорировать по регулярному выражению.","Comma-separated list of allowed ports (empty = all ports)":"Список разрешенных портов, разделенных запятыми (пусто = все порты)","Comma-separated model names (leave empty to keep current)":"Названия моделей, разделенные запятыми (оставьте пустым, чтобы сохранить текущие)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"Имена моделей, разделённые запятыми, например, gpt-4,gpt-3.5-turbo","Command":"Команда","Common":"Общие","Common Keys":"Часто используемые ключи","Common Logs":"Общие журналы","Common pitfall: the user group base ratio is NOT a personal discount. It only applies when the user group itself is the billing group.":"Частая ошибка: базовый коэффициент группы пользователя — НЕ персональная скидка. Он применяется, только когда эта группа сама является тарифной.","Common ports include 25, 465, and 587":"Распространенные порты включают 25, 465 и 587","Common User":"Обычный пользователь","Community driven, self-hosted, and extensible":"Развивается сообществом, поддерживает самостоятельное размещение и расширение","Compact":"Компактная","Compare each vendor\'s token share across the past few weeks":"Сравните долю токенов каждого поставщика за последние несколько недель","Compare each vendor\'s token share across the past year":"Сравните долю токенов каждого поставщика за последний год","Compare each vendor\'s token share over the past 24 hours":"Сравните долю токенов каждого поставщика за последние 24 часа","Compare each vendor\'s token share over the past month":"Сравните долю токенов каждого поставщика за последний месяц","Compare each vendor\'s token share since launch":"Сравните долю токенов каждого поставщика с момента запуска","Compare prices and choose a source for each model.":"Сравните цены и выберите источник для каждой модели.","Compare the most popular models on the platform":"Сравните самые популярные модели на платформе","Comparison operator":"Оператор сравнения","compatible API routes":"совместимых API-маршрутов","Compatible API routes for common AI application workflows":"Совместимые API-маршруты для типовых сценариев ИИ-приложений","Compatible Passkey domains":"Совместимые домены ключей доступа","Compilation failed":"Ошибка компиляции","Complete API documentation with multi-language SDK support":"Полная документация API с поддержкой SDK на нескольких языках","Complete Order":"Вывод заказа","Complete sign-in":"Завершение входа","Complete the invalid fields before saving or switching modes. The last valid expression is preserved.":"Исправьте недопустимые поля перед сохранением или сменой режима. Последнее корректное выражение сохранено.","Complete these steps to finish the initial installation.":"Выполните эти шаги, чтобы завершить начальную установку.","Complete top-up orders and manage subscription plans and user subscriptions.":"Завершение заказов на пополнение и управление планами подписки и подписками пользователей.","Completed":"Завершено","Completed security verification":"Проверка безопасности завершена","Completed top-up order for the user":"Заказ на пополнение для пользователя выполнен","Completion":"Вывод","Completion price":"Цена завершения","Completion price ($/1M tokens)":"Цена завершения ($/1 млн токенов)","Completion ratio":"Коэффициент завершения","Compliance confirmation required":"Требуется подтверждение соответствия","Compliance confirmed":"Соответствие подтверждено","Compliance confirmed successfully":"Соответствие успешно подтверждено","Concatenate channel system prompt with user's prompt":"Объединить системный промпт канала с промптом пользователя","Condition {{path}}":"Условие {{path}}","Condition actions {{path}}":"Действия условия {{path}}","Condition group":"Группа условий","Condition group {{path}}":"Группа условий {{path}}","Condition input":"Переменная условия","Condition Path":"Путь условия","Condition Settings":"Настройки условия","Condition value":"Значение условия","Condition Value":"Значение условия","Conditional multipliers":"Условные множители","Conditions":"Условия","Conditions (AND)":"Условия (AND)","Confidence":"Уверенность","Configuration":"Конфигурация","Configuration File":"Файл конфигурации","Configuration for Creem payment integration":"Конфигурация для интеграции платежей Creem","Configuration for Epay payment integration":"Конфигурация для интеграции платежей Epay","Configuration for Stripe payment integration":"Конфигурация для интеграции платежей Stripe","Configuration required":"Требуется настройка","Configure":"Настройка","Configure a Creem product for user recharge options.":"Настройте продукт Creem для опций пополнения пользователя.","Configure a custom ratio for \\"{{userGroup}}\\" users when using a specific token group.":"Задайте коэффициент для пользователей «{{userGroup}}» при использовании определённой группы токенов.","Configure a custom ratio for when users use a specific token group.":"Настроить пользовательский коэффициент при использовании определённой группы токенов.","Configure a group that users can select when creating API keys.":"Настройте группу, которую пользователи могут выбрать при создании ключей API.","Configure a new custom OAuth provider for user authentication.":"Настройка нового пользовательского OAuth-провайдера для аутентификации пользователей.","Configure a payment method for user recharge options.":"Настройте способ оплаты для опций пополнения счета пользователя.","Configure a predefined chat link for end users.":"Настройте предопределенную ссылку для чата для конечных пользователей.","Configure an input price before converting this model.":"Перед преобразованием модели настройте цену ввода.","Configure and deploy a new container instance.":"Настройте и разверните новый экземпляр контейнера.","Configure API documentation links for the dashboard":"Настроить ссылки на документацию API для панели управления","Configure at:":"Настроить в:","Configure available payment methods. Provide a JSON array.":"Настроить доступные способы оплаты. Предоставьте JSON-массив.","Configure Creem products. Provide a JSON array.":"Настройте продукты Creem. Укажите массив JSON.","Configure discount rates based on recharge amounts":"Настроить скидки в зависимости от сумм пополнения","Configure endpoint routing, authentication and protocol conversion for different upstream services":"Гибкая настройка маршрутов, аутентификации и преобразования протоколов для разных внешних сервисов","Configure experimental data export for the dashboard":"Настроить экспериментальный экспорт данных для панели управления","Configure in your Creem dashboard":"Настройте в панели управления Creem","Configure keyword filtering for prompts and responses.":"Настроить фильтрацию по ключевым словам для запросов и ответов.","Configure model, caching, and group ratios used for billing":"Настроить модель, кэширование и групповые коэффициенты, используемые для выставления счетов","Configure Models":"Настроить модели","Configure monitoring status page groups for the dashboard":"Настроить группы страниц состояния мониторинга для панели управления","Configure NODE_NAME":"Настроить NODE_NAME","Configure per-model ratio for image inputs or outputs.":"Настроить коэффициент для каждой модели для ввода или вывода изображений.","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"Настройте стоимость единицы на инструмент ($/1K вызовов). Для моделей с оплатой за запрос доп. плата за инструменты не взимается.","Configure pricing ratios for a specific model.":"Настроить коэффициенты ценообразования для конкретной модели.","Configure rate limiting rules for a specific user group.":"Настроить правила ограничения скорости для конкретной группы пользователей.","Configure routes":"Настроить маршруты","Configure task pricing":"Настроить тарификацию задач","Configure the connection and models, then create the channel.":"Настройте подключение и модели, затем создайте канал.","Configure the ratio for this group.":"Настроить коэффициент для этой группы.","Configure upstream providers and routing.":"Настроить провайдеров верхнего уровня и маршрутизацию.","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"Настроить хостовую интеграцию Waffo Pancake (hosted checkout) для пополнений в USD","Configure Waffo payment aggregation platform integration":"Настроить интеграцию платёжной платформы Waffo","Configure your account behavior preferences":"Настроить предпочтения поведения вашей учетной записи","Configure your account preferences and integrations":"Настроить параметры и интеграции вашей учетной записи","Configured":"Настроено","Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.":"Сохраняется как JSON PayMethods. Значение type определяет платежный сценарий: stripe для Stripe, waffo_pancake для Waffo Pancake, остальные значения отправляются в Epay как параметр type.","Configured routes and latency checks":"Настроенные маршруты и проверки задержки","Confirm":"Подтверждение","Confirm Action":"Подтвердить действие","Confirm and enable":"Подтвердить и включить","Confirm Batch Update":"Подтвердить пакетное обновление","Confirm Billing Conflicts":"Подтвердить конфликты выставления счетов","Confirm both your current and new email addresses to finish this change.":"Подтвердите текущий и новый адреса почты, чтобы завершить изменение.","Confirm changes":"Подтвердить изменения","Confirm Changes":"Подтвердить изменения","Confirm Cleanup":"Подтвердить очистку","Confirm cleanup of inactive disk cache?":"Подтвердить очистку неактивного дискового кэша?","Confirm clearing all channel affinity cache":"Подтвердите очистку всего кэша привязки к каналу","Confirm clearing cache for this rule":"Подтвердите очистку кэша этого правила","Confirm compliance":"Подтвердить соответствие","Confirm compliance terms":"Подтвердить условия соответствия","Confirm Creem Purchase":"Подтвердить покупку Creem","Confirm delete":"Подтвердить удаление","Confirm disable":"Подтвердить отключение","Confirm email":"Подтвердить почту","Confirm enable":"Подтвердить включение","Confirm invalidate":"Подтвердить аннулирование","Confirm log cleanup":"Подтвердить очистку логов","Confirm log file cleanup?":"Подтвердить очистку файлов журналов?","Confirm model changes":"Подтвердить изменения моделей","Confirm New Password":"Подтвердить новый пароль","Confirm password":"Подтвердить пароль","Confirm Payment":"Подтвердить оплату","Confirm Selection":"Подтвердить выбор","Confirm settings and finish setup":"Подтвердите настройки и завершите установку","confirm that I bear legal responsibility arising from deployment":"подтверждаю, что несу юридическую ответственность, возникающую из развертывания","Confirm the final prices and removed settings. Metadata and channel access are not changed.":"Подтвердите итоговые цены и удаляемые настройки. Метаданные и доступ к каналам не изменятся.","Confirm the verification code sent to your new email address.":"Введите код подтверждения, отправленный на новую почту.","Confirm Unbind":"Подтвердить отвязку","Confirm usage reset":"Подтвердить сброс использования","Confirm your identity before accessing this sensitive action.":"Подтвердите личность перед выполнением этой важной операции.","Confirm your identity before changing the account {{username}}.":"Подтвердите личность перед изменением аккаунта {{username}}.","Confirm your identity before creating an administrator account.":"Подтвердите личность перед созданием аккаунта администратора.","Confirm your identity before permanently deleting the account {{username}}.":"Подтвердите личность перед безвозвратным удалением аккаунта {{username}}.","Confirm your identity before removing this Passkey from your account.":"Подтвердите свою личность перед удалением этой Passkey из вашей учётной записи.","Confirm your identity before unbinding {{provider}} from this user.":"Подтвердите личность перед отвязкой {{provider}} от этого пользователя.","Confirm your identity with Two-factor Authentication before registering a Passkey.":"Подтвердите свою личность с помощью двухфакторной аутентификации перед регистрацией Passkey.","Confirmed at {{time}} by user #{{userId}}":"Подтверждено {{time}} пользователем #{{userId}}","Confirmed payment compliance":"Соответствие платежа подтверждено","Confirmed removal of Passkey domains: {{domains}}; affected {{known}}; unknown {{unknown}}":"Удаление доменов ключей доступа подтверждено: {{domains}}; затронуто {{known}}; домен неизвестен {{unknown}}","Confirming the account linked to your profile.":"Проверяем привязанный к профилю аккаунт.","Conflict":"Противоречие","Connect":"Подключение","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"Подключайтесь через OpenAI, Claude, Gemini и другие совместимые API-маршруты","Connect to 360 model services":"Подключение к моделям 360","Connect to Alibaba Cloud Bailian model services":"Подключение к моделям Alibaba Cloud Bailian","Connect to Cohere model services":"Подключение к моделям Cohere","Connect to Coze bots":"Подключение к ботам Coze","Connect to DeepSeek model services":"Подключение к моделям DeepSeek","Connect to Dify applications and workflows":"Подключение к приложениям и рабочим процессам Dify","Connect to Doubao Seedance video and Seedream image generation through Volcengine Ark":"Подключение генерации видео Doubao Seedance и изображений Seedream через Volcengine Ark","Connect to FastGPT applications":"Подключение к приложениям FastGPT","Connect to iFlytek Spark model services":"Подключение к моделям iFlytek Spark","Connect to Jimeng image and video generation services":"Подключение к сервисам генерации изображений и видео Jimeng","Connect to Jina embedding and reranking services":"Подключение к сервисам эмбеддингов и переранжирования Jina","Connect to Kling video generation services":"Подключение к сервисам генерации видео Kling","Connect to LingYiWanWu model services":"Подключение к моделям LingYiWanWu","Connect to local or self-hosted Ollama models":"Подключение к локальным моделям Ollama или собственному серверу","Connect to MiniMax model services":"Подключение к моделям MiniMax","Connect to Mistral AI model services":"Подключение к моделям Mistral AI","Connect to model services through a Sub2API gateway":"Подключение к моделям через шлюз Sub2API","Connect to models through the Google Gemini API":"Подключение к моделям через API Google Gemini","Connect to Moonshot AI model services":"Подключение к моделям Moonshot AI","Connect to New API model services with support for multiple task plugins":"Доступ к моделям через New API с поддержкой нескольких плагинов задач","Connect to OpenAI models deployed on Azure":"Подключение к моделям OpenAI, развёрнутым в Azure","Connect to OpenAI Sora video generation services":"Подключение к сервисам генерации видео OpenAI Sora","Connect to Perplexity model services":"Подключение к моделям Perplexity","Connect to self-hosted models served by SGLang":"Подключение к моделям на собственном сервере SGLang","Connect to self-hosted models served by vLLM":"Подключение моделей на собственном сервере vLLM","Connect to self-hosted models served by Xinference":"Подключение к моделям на собственном сервере Xinference","Connect to SiliconFlow model inference services":"Подключение к сервисам инференса SiliconFlow","Connect to Submodel model services":"Подключение к моделям Submodel","Connect to Tencent Hunyuan model services":"Подключение к моделям Tencent Hunyuan","Connect to the Anthropic API or compatible services":"Подключение к API Anthropic или совместимым сервисам","Connect to the OpenAI API or compatible services":"Подключение к API OpenAI или совместимым сервисам","Connect to Vidu video generation services":"Подключение к сервисам генерации видео Vidu","Connect to Volcengine Ark model services":"Подключение к моделям Volcengine Ark","Connect to xAI Grok model services":"Подключение к моделям xAI Grok","Connected to io.net service normally.":"Соединение с сервисом io.net установлено.","Connection & Models":"Подключение и модели","Connection closed":"Соединение закрыто","Connection error":"Ошибка соединения","Connection failed":"Не удалось подключиться","Connection info detected in clipboard":"В буфере обмена найдены данные подключения","Connection info filled in":"Данные подключения заполнены","Connection settings":"Настройки подключения","Connection settings changed. Fetch models again to refresh the list.":"Настройки подключения изменены. Получите список моделей заново.","Connection successful":"Подключение успешно","Console":"Консоль","Console area":"Область консоли","Console Area":"Область консоли","Console Content":"Содержимое консоли","Consume":"Расход","Consumed in the last 24 hours":"Потреблено за последние 24 часа","Container":"Контейнер","Container name":"Имя контейнера","Containers":"Контейнеры","Contains":"Содержит","Contains Match":"Совпадение по содержанию","Content":"Содержание","Content displayed on the home page (supports Markdown)":"Содержимое, отображаемое на главной странице (поддерживает Markdown)","Content not found.":"Контент не найден.","Content not modified!":"Контент не изменён!","Content width":"Ширина контента","Context":"Контекст","Continue":"Продолжить","Continue account binding":"Продолжить привязку аккаунта","Continue with {{name}}":"Продолжить с {{name}}","Continue with an account already linked to your profile.":"Продолжите с аккаунтом, уже привязанным к профилю.","Continue with Discord":"Продолжить с Discord","Continue with GitHub":"Продолжить с GitHub","Continue with LinuxDO":"Продолжить с LinuxDO","Continue with OIDC":"Продолжить с OIDC","Continue with Telegram":"Продолжить с Telegram","Continue with WeChat":"Продолжить с WeChat","Contract review, compliance, summarisation":"Анализ контрактов, комплаенс, резюме","Control which models are exposed and which groups may use them.":"Управляйте тем, какие модели доступны и какие группы могут их использовать.","Controls catalog visibility. Channel availability is configured separately.":"Управляет видимостью в каталоге. Доступность каналов настраивается отдельно.","Controls how much the model thinks before answering":"Регулирует глубину размышлений модели перед ответом","Controls randomness and creativity":"Управляет случайностью и креативностью","Controls visibility in the model square. Channel status and existing API access are unchanged.":"Управляет видимостью в каталоге моделей, не затрагивая состояние каналов и существующий доступ к API.","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"Определяет, требуется ли проверка пользователя (биометрия/PIN) во время процессов Passkey.","Conversation cleared":"Диалог очищен","Conversion rate from USD to your custom currency":"Курс конвертации из USD в вашу пользовательскую валюту","Convert reasoning_content to tag in content":"Преобразовать reasoning_content в тег в content","Convert string to lowercase":"Преобразовать строку в нижний регистр","Convert string to uppercase":"Преобразовать строку в верхний регистр","Convert to expression":"Преобразовать в выражение","Converter":"Конвертер","Converter does not match incoming path":"Конвертер не соответствует входящему пути","Converter is not registered":"Конвертер не зарегистрирован","Copied":"Скопировано","Copied {{count}} key(s)":"Скопировано {{count}} ключ(ей)","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"Канал скопирован (исходный ID: {{sourceId}}) в {{name}} (новый ID: {{id}})","Copied to clipboard":"Скопировано в буфер обмена","Copied: {{model}}":"Скопировано: {{model}}","Copied!":"Скопировано!","Copy":"Копировать","Copy {{field}}":"Копировать {{field}}","Copy {{name}} pricing":"Копировать тариф {{name}}","Copy a request header":"Копировать заголовок запроса","Copy All":"Скопировать все","Copy all backup codes":"Скопировать все резервные коды","Copy All Codes":"Скопировать все коды","Copy all models":"Копировать все модели","Copy API key":"Скопировать ключ API","Copy API URL":"Копировать URL API","Copy base URL":"Копировать базовый URL","Copy billing expression":"Копировать выражение тарификации","Copy callback URL":"Скопировать URL обратного вызова","Copy Channel":"Скопировать канал","Copy code":"Копировать код","Copy Connection Info":"Копировать данные подключения","Copy endpoint path":"Копировать путь эндпоинта","Copy failed":"Не удалось скопировать","Copy Field":"Копировать поле","Copy Header":"Копировать заголовок","Copy homepage URL":"Скопировать URL главной страницы","Copy Key":"Копировать ключ","Copy Link":"Копировать ссылку","Copy model name":"Скопировать имя модели","Copy model names":"Скопировать имена моделей","Copy plugin key":"Копировать идентификатор плагина","Copy prompt":"Копировать промпт","Copy ready-to-run curl":"Скопировать готовый curl","Copy redemption code":"Скопировать код активации","Copy redirect URL":"Скопировать URL перенаправления","Copy referral link":"Скопировать реферальную ссылку","Copy Request Header":"Копировать заголовок запроса","Copy secret key":"Скопировать секретный ключ","Copy selected codes":"Копировать выбранные коды","Copy selected keys":"Копировать выбранные ключи","Copy selected models":"Копировать выбранные модели","Copy selected models separated by commas (e.g. a,b)":"Копировать выбранные модели через запятую (например, a,b)","Copy source field to target field":"Копировать исходное поле в целевое","Copy the key and paste it here":"Скопируйте ключ и вставьте его сюда","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"Скопируйте этот промпт и отправьте его LLM (например, ChatGPT / Claude), чтобы помочь с разработкой выражения тарификации.","Copy this token now. It will not be shown again.":"Скопируйте этот токен сейчас. Он больше не будет показан.","Copy to clipboard":"Копировать в буфер обмена","Copy token":"Копировать токен","Copy URL":"Скопировать URL","Copying...":"Копирование...","Copywriting, ad creative, SEO":"Копирайтинг, рекламные креативы, SEO","Core concepts":"Основные понятия","Core Configuration":"Основная конфигурация","Core Features":"Основные функции","Core pricing":"Основные цены","Correct the invalid settings before saving.":"Исправьте некорректные настройки перед сохранением.","Cost":"Стоимость","Cost = 10 × 0.3 = 3":"Стоимость = 10 × 0,3 = 3","Cost = 10 × 0.8 = 8":"Стоимость = 10 × 0,8 = 8","Cost = 10 × 1.0 = 10":"Стоимость = 10 × 1,0 = 10","Cost = model price × that one ratio. Nothing else from the group settings enters the formula.":"Стоимость = цена модели × этот единственный коэффициент. Другие настройки групп в формуле не участвуют.","Cost calculator":"Расчёт стоимости","Creem webhook is not configured":"Webhook Creem не настроен","CreemProductId is not configured for this plan":"Для этого плана не настроен CreemProductId","Cost in {{currency}} per request, regardless of tokens used.":"Стоимость запроса в {{currency}}, независимо от числа токенов.","Cost in USD per request, regardless of tokens used.":"Стоимость в долларах США за запрос, независимо от использованных токенов.","Cost Tracking":"Отслеживание затрат","Could not fetch the plugin source from this browser. The host may block cross-origin requests or be unreachable.":"Не удалось загрузить код плагина из браузера. Хост может блокировать кросс-доменные запросы или быть недоступен.","Could not fetch this URL from the browser. The host may block cross-origin requests or be unreachable. Download the file and paste its source below.":"Не удалось загрузить этот URL из браузера. Хост может блокировать кросс-доменные запросы или быть недоступен. Скачайте файл и вставьте его код ниже.","Could not load the changelog":"Не удалось загрузить историю изменений","Could not load this source":"Не удалось загрузить этот источник","Count":"Количество","Count must be between {{min}} and {{max}}":"Количество должно быть от {{min}} до {{max}}","Counters and averages cover the period since the upstream metrics were initialized or reset.":"Счётчики и средние значения охватывают период с инициализации или сброса метрик сервера.","Coze":"Coze","CPU":"ЦП","CPU Threshold (%)":"Порог CPU (%)","Create":"Создать","Create a copy of:":"Создать копию:","Create a key for your app or service":"Создайте ключ для приложения или сервиса","Create a new user group to configure ratio overrides for.":"Создайте новую группу пользователей для настройки переопределений соотношений.","Create access token":"Создать токен доступа","Create account":"Создать аккаунт","Create aliases for users":"Создать псевдонимы для пользователей","Create an account":"Создать аккаунт","Create an API key to unlock the real request":"Создайте API-ключ, чтобы открыть реальный запрос","Create and review invite or credit codes.":"Создать и просмотреть коды приглашений или кредитов.","Create API Key":"Создать ключ API","Create API token":"Создание токена API","Create API token “{{name}}”":"Создание токена API «{{name}}»","Create cache":"Создать кеш","Create cache ratio":"Создать коэффициент кэширования","Create Channel":"Создать канал","Create channels or edit keys, base URLs, and overrides.":"Создание каналов или изменение ключей, базовых URL и переопределений.","Create Code":"Создать код","Create credentials for the root user":"Создайте учётные данные для администратора","Create deployment":"Создать развертывание","Create metadata":"Создать метаданные","Create Model":"Создать модель","Create multiple API keys at once (random suffix will be added to names)":"Создать несколько API-ключей одновременно (случайный суффикс будет добавлен к именам)","Create multiple channels from multiple keys":"Создать несколько каналов из нескольких ключей","Create multiple redemption codes at once (1-100)":"Создать несколько кодов активации одновременно (1-100)","Create new subscription plan":"Создать новый план подписки","Create or update frequently asked questions for users":"Создать или обновить часто задаваемые вопросы для пользователей","Create or update system announcements for the dashboard":"Создать или обновить системные объявления для панели управления","Create Plan":"Создать план","Create Prefill Group":"Создать группу предзаполнения","Create Provider":"Создать провайдер","Create Redemption Code":"Создать код активации","Create request parameter override rules with a visual editor or raw JSON.":"Создавайте правила переопределения параметров запроса с помощью визуального редактора или необработанного JSON.","Create request parameter override rules without editing raw JSON.":"Создавайте правила переопределения параметров запроса без редактирования raw JSON.","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"Создавайте многократно используемые пакеты моделей, тегов, конечных точек и групп пользователей для ускорения настройки в других частях консоли.","Create succeeded":"Успешно создано","Create Vendor":"Создать поставщика","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"Создайте свою первую группу для повторного использования выбранных моделей, тегов или конечных точек в любом месте панели управления.","Create, edit, and delete API keys.":"Создание, изменение и удаление API-ключей.","Create, edit, and delete deployments, and test connections.":"Создание, изменение и удаление развертываний, проверка подключений.","Create, edit, and delete prefill groups.":"Создание, изменение и удаление групп автозаполнения.","Create, edit, and delete redemption codes.":"Создание, изменение и удаление кодов активации.","Create, edit, disable, and delete users, and reset their security settings.":"Создание, изменение, отключение и удаление пользователей, а также сброс их настроек безопасности.","Create, revoke, and audit API tokens.":"Создать, отозвать и аудитировать токены API.","Created":"Создано","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"Создано кодов погашения: {{count}} с именем {{name}} (по {{quota}} каждый)","Created {{time}}":"Создан {{time}}","Custom reset cycle must be greater than 0 seconds":"Пользовательский цикл сброса должен быть больше 0 секунд","Created a custom OAuth provider":"Создан пользовательский провайдер OAuth","Created a deployment":"Создано развёртывание","Created a model":"Создана модель","Created a prefill group":"Создана группа предзаполнения","Created a subscription plan":"Создан тарифный план подписки","Created a vendor":"Создан поставщик","Created an access token":"Создан токен доступа","Created At":"Дата создания","Daily check-in, received {{quota}}":"Ежедневная отметка, получено {{quota}}","Created channel {{name}} (type {{type}}, count {{count}})":"Создан канал {{name}} (тип {{type}}, количество {{count}})","Created user {{username}} (role {{role}})":"Создан пользователь {{username}} (роль {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"Создает продукт Pancake в сохраненном магазине с названием и ценой этого плана. Сначала необходимо полностью настроить Waffo Pancake в настройках платежей.","Creating...":"Создание...","Creation failed":"Создание не удалось","Credential refreshed":"Учётные данные обновлены","Credentials":"Учетные данные","Credentials verification failed":"Не удалось проверить учетные данные","Credentials verification failed — double-check Merchant ID and API private key.":"Не удалось проверить учетные данные — проверьте Merchant ID и приватный ключ API.","credit":"credit","Credit remaining":"Остаток средств","Creem API key (leave blank unless updating)":"Ключ API Creem (оставьте пустым, если не обновляете)","Creem Gateway":"Шлюз Creem","Creem Payment":"Платеж Creem","Creem product ID from your Creem dashboard.":"ID продукта Creem из вашего дашборда Creem.","Creem products must be a JSON array":"Продукты Creem должны быть JSON-массивом","Database connection failed":"Не удалось подключиться к базе данных","Database error, please contact the administrator":"Ошибка базы данных, обратитесь к администратору","Cross-group":"Межгрупповой","Cross-group retry":"Повтор между группами","Cumulative usage":"Суммарное использование","Currency":"Валюта","Currency & Display":"Валюта и отображение","Current":"Текущий","Current Balance":"Текущий баланс","Current Billing":"Текущие счета","Current Cache Size":"Текущий размер кэша","Current domain":"Текущий домен","Current domain: {{domain}}":"Текущий домен: {{domain}}","Current email verification code":"Код подтверждения текущей почты","Current email: {{email}}. Enter a new email to change.":"Текущий email: {{email}}. Введите новый email для изменения.","Current exchange rate: 1 USD = {{rate}} {{currency}}":"Текущий курс: 1 USD = {{rate}} {{currency}}","Current key":"Текущий ключ","Current key disable requested":"Запрошено отключение текущего ключа","Current legacy JSON is invalid, cannot append":"Текущий JSON старого формата невалиден, добавление невозможно","Current Level Only":"Только текущий уровень","Current load":"Текущая нагрузка","Current models for the longest channel in this tag. May not include all models from all channels.":"Текущие модели для самого длинного канала в этом теге. Может не включать все модели из всех каналов.","Current models: {{count}}":"Текущие модели: {{count}}","Current month":"Текущий месяц","Current Password":"Текущий пароль","Current password is incorrect.":"Текущий пароль неверен.","Current period price":"Цена текущего периода","Current Price":"Текущая цена","Default group":"Группа по умолчанию","Current pricing conditions":"Текущие условия тарификации","Current quota":"Текущая квота","Current site: {{origin}}":"Текущий сайт: {{origin}}","Current time":"Текущее время","Current token":"Текущий токен","Current total = used + remaining. Changing the remaining quota updates the total and percentage.":"Текущий итог = использовано + остаток. Изменение остатка квоты обновляет итог и процент использования.","Current total quota":"Текущая общая квота","Current v{{from}} → install v{{to}}":"Текущая v{{from}} → установка v{{to}}","Current value":"Текущее значение","Current Value":"Текущее значение","Current vendor":"Текущий поставщик","Current version":"Текущая версия","Current:":"Текущий:","Custom":"Пользовательский","Custom (overrides factory {{version}})":"Пользовательский (заменяет встроенный {{version}})","Custom (seconds)":"Пользовательский (секунды)","Custom Amount":"Пользовательская сумма","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"Пользовательский базовый URL API. Для официальных каналов New API имеет встроенные адреса. Заполняйте это поле только для сторонних прокси-сайтов или специальных конечных точек. Не добавляйте /v1 или завершающий слэш.","Custom API base URL. Leave empty to use provider default.":"Пользовательский базовый URL API. Оставьте пустым для использования значения по умолчанию провайдера.","Custom Currency":"Пользовательская валюта","Custom Currency Symbol":"Пользовательский символ валюты","Custom currency symbol is required":"Пользовательский символ валюты обязателен","Custom database driver detected.":"Обнаружен пользовательский драйвер базы данных.","Custom endpoints":"Пользовательские конечные точки","Custom Epay method":"Пользовательский метод Epay","Custom Error Response":"Пользовательский ответ с ошибкой","Custom Home Page":"Пользовательская домашняя страница","Custom message shown when access is denied":"Пользовательское сообщение, отображаемое при отказе в доступе","Custom model (comma-separated)":"Пользовательская модель (через запятую)","Custom model icon":"Своя иконка модели","Custom module":"Пользовательский модуль","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"Пользовательские множители, когда определенные группы пользователей используют определенные группы токенов. Пример: VIP-пользователи получают ставку 0.9x при использовании токенов группы \\"edit_this\\".","Custom OAuth":"Пользовательский OAuth","Custom OAuth Providers":"Пользовательские OAuth-провайдеры","Custom Seconds":"Пользовательские секунды","Custom sidebar section":"Пользовательский раздел боковой панели","Custom task plugin setting updated":"Настройка пользовательских плагинов задач обновлена","Custom Time Range":"Пользовательский диапазон времени","Custom Zoom":"Пользовательский зум","Customize sidebar display content":"Настроить содержимое боковой панели","Daily":"Ежедневно","Daily Check-in":"Ежедневный вход","Daily token usage by model across the past few weeks":"Ежедневное использование токенов по моделям за последние несколько недель","Daily token usage by model across the past month":"Ежедневное использование токенов по моделям за последний месяц","Daily token usage by model over the past month":"Ежедневное использование токенов по моделям за последний месяц","Daily uptime over the last 30 days":"Ежедневная доступность за последние 30 дней","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"Ежедневная доступность; {{incidents}} инцидентов общей длительностью {{minutes}} мин.","Dark":"Тёмная","Dashboard":"Панель управления","Dashboard Preferences":"Настройки панели управления","Dashboards, tokens, and usage analytics.":"Панели управления, токены и аналитика использования.","Data Dashboard":"Панель мониторинга данных","Data directory:":"Каталог данных:","Data is stored locally on this device. Use system backups to keep a safe copy.":"Данные хранятся локально на этом устройстве. Используйте системные резервные копии для сохранения безопасной копии.","Data management and log viewing":"Управление данными и просмотр логов","Data retention":"Хранение данных","Database":"База данных","Database check":"Проверка базы данных","Date and time when this announcement should be displayed":"Дата и время отображения этого объявления","Date Range":"Диапазон дат","Day":"День","Day of month":"День месяца","days":"дней","Days to Retain":"Дней хранения","decides the top-up ratio, which groups the user can pick for tokens, and whether an override ratio applies.":"определяет коэффициент пополнения, какие группы пользователь может выбирать для токенов и применяется ли переопределение коэффициента.","decides which channels are used and which base ratio applies.":"определяет используемые каналы и применяемый базовый коэффициент.","Declared capabilities":"Заявленные возможности","Decrease quota for user “{{name}}”":"Уменьшить квоту пользователя «{{name}}»","Decrease user quota":"Уменьшить квоту пользователя","Decreased user quota by {{quota}}":"Квота пользователя уменьшена на {{quota}}","Deducted by subscription":"Списано по подписке","DeepSeek":"DeepSeek","default":"по умолчанию","Default":"По умолчанию","Default / range":"По умолчанию / диапазон","Default administrator permissions can be overridden for this user.":"Для этого пользователя можно переопределить стандартные права администратора.","Default API address":"Адрес API по умолчанию","Default API Version":"Версия API по умолчанию","Default API Version *":"Версия API по умолчанию *","Default API version for this channel":"Версия API по умолчанию для этого канала","Default base URL":"Базовый URL по умолчанию","Default Bearer":"Bearer по умолчанию","Default Collapse Sidebar":"Сворачивать боковую панель по умолчанию","Default consumption chart":"График потребления по умолчанию","Default Max Tokens":"Максимальное количество токенов по умолчанию","Default model call chart":"График вызовов моделей по умолчанию","Default placeholder":"Значок по умолчанию","Default range":"Диапазон по умолчанию","Default reminder threshold":"Порог напоминания по умолчанию","Default Responses API version, if empty, will use the API version above":"Версия API ответов по умолчанию; если пусто, будет использоваться версия API, указанная выше","Deleted {{count}} auto-disabled keys":"Удалено автоматически отключённых ключей: {{count}}","Default session lifetime (seconds)":"Срок сессии по умолчанию (секунды)","Default system prompt for this channel":"Системный промпт по умолчанию для этого канала","Default time granularity":"Гранулярность времени по умолчанию","Default to auto groups":"По умолчанию использовать автогруппы","Default TTL (seconds)":"TTL по умолчанию (секунды)","Defaults to \\"OIDC\\" if left blank":"Если оставить пустым, будет отображаться «OIDC».","Defaults to the wallet page when empty":"Если пусто, по умолчанию открывается страница кошелька","Define API endpoints for this model (JSON format)":"Определить конечные точки API для этой модели (формат JSON)","Define endpoint mappings for each provider.":"Определите сопоставления конечных точек для каждого провайдера.","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"Определите правила для групп, чтобы добавлять, удалять или дополнять доступные группы для конкретных групп пользователей.","Degraded performance recently":"Недавно наблюдалось снижение производительности","Delete":"Удалить","Delete (":"Удалить (","Delete {{count}} API key(s)?":"Удалить {{count}} API-ключ(а/ей)?","Delete {{count}} models?":"Удалить {{count}} моделей?","Delete {{count}} redemption codes?":"Удалить коды погашения ({{count}})?","Delete {{count}} selected vendor records? Vendors with linked models cannot be deleted.":"Удалить выбранные записи поставщиков ({{count}})? Поставщиков со связанными моделями удалить нельзя.","Delete {{count}} stale instance records? Online instances will not be deleted.":"Удалить {{count}} записей устаревших экземпляров? Онлайн-экземпляры не будут удалены.","Delete a runtime request header":"Удалить заголовок запроса во время выполнения","Delete Account":"Удалить аккаунт","Deployment region cannot be empty":"Регион развертывания не может быть пустым","Deployment region must be valid JSON, for example {{example}}":"Регион развертывания должен быть корректным JSON, например {{example}}","Deployment region must include a default field":"Регион развертывания должен содержать поле default","Delete active custom version":"Удалить активную пользовательскую версию","Delete All Disabled":"Удалить все отключенные","Delete All Disabled Channels?":"Удалить все отключенные каналы?","Delete all stale":"Удалить все устаревшие","Delete API token":"Удаление токена API","Delete API token “{{name}}”":"Удаление токена API «{{name}}»","Delete Auto-Disabled":"Удалить автоматически отключенные","Delete Channel":"Удалить канал","Delete Channels?":"Удалить каналы?","Delete completed tasks matching the current filters across all pages? Active tasks and the latest run of each task type are retained for scheduling. This cannot be undone.":"Удалить завершённые задачи, соответствующие текущим фильтрам, на всех страницах? Активные задачи и последняя запись каждого типа сохраняются для планирования. Это действие нельзя отменить.","Delete condition":"Удалить условие","Delete Condition":"Удалить условие","Delete failed":"Не удалось удалить","Delete failed models":"Удалить неуспешные модели","Delete failed models ({{count}})":"Удалить неуспешные модели ({{count}})","Delete Field":"Удалить поле","Delete group":"Удалить группу","Delete Header":"Удалить заголовок","Delete Invalid":"Удалить недействительные","Delete invalid codes":"Удалить недействительные коды","Delete invalid codes (used/disabled/expired)":"Удалить недействительные коды (использованные/отключенные/истекшие)","Delete invalid redemption codes":"Удалить недействительные коды активации","Delete Invalid Redemption Codes?":"Удалить недействительные коды активации?","Delete logs":"Удалить логи","Delete mapping":"Удалить сопоставление","Delete metadata and custom pricing for {{count}} models?":"Удалить метаданные и пользовательские цены {{count}} моделей?","Delete metadata for \\"{{name}}\\"? Pricing and channel configurations will be retained.":"Удалить метаданные «{{name}}»? Цены и настройки каналов сохранятся.","Delete metadata for \\"{{name}}\\"? Pricing will be retained.":"Удалить метаданные «{{name}}»? Цены будут сохранены.","Delete metadata for {{count}} models? Pricing will be retained.":"Удалить метаданные {{count}} моделей? Цены будут сохранены.","Delete Model":"Удалить модель","Delete model \\"{{name}}\\"?":"Удалить модель «{{name}}»?","Delete Models?":"Удалить модели?","Delete plugin version?":"Удалить версию плагина?","Delete Provider":"Удалить провайдер","Delete Request Header":"Удалить заголовок запроса","Delete rule":"Удалить правило","Delete Rule":"Удалить правило","Delete selected API keys":"Удалить выбранные ключи API","Delete selected channels":"Удалить выбранные каналы","Delete selected models":"Удалить выбранные модели","Delete selected redemption codes":"Удалить выбранные коды погашения","Delete session rule “{{name}}”? Save your changes to apply the removal.":"Удалить правило сессии «{{name}}»? Сохраните изменения, чтобы применить удаление.","Delete stale instance":"Удалить устаревший экземпляр","Delete stale instance \\"{{name}}\\"? If it has reported again, it will not be deleted.":"Удалить устаревший экземпляр \\"{{name}}\\"? Если он снова отправил отчет, он не будет удален.","Delete stale instances":"Удалить устаревшие экземпляры","Delete vendor record":"Удалить запись поставщика","Delete vendors":"Удалить поставщиков","Deleted":"Удалён","Deleted \\"{{name}}\\"":"\\"{{name}}\\" удалено","Deleted ({{id}})":"Удалён ({{id}})","Deleted {{count}} failed models":"Удалено неуспешных моделей: {{count}}","Deleted {{count}} historical system tasks":"Удалено записей истории системных задач: {{count}}","Deleted {{count}} stale instances":"Удалено устаревших экземпляров: {{count}}","Deleted a custom OAuth provider":"Удалён пользовательский провайдер OAuth","Deleted a deployment":"Удалено развёртывание","Deleted a model":"Удалена модель","Deleted a passkey":"Ключ доступа удалён","Descending":"По убыванию","Disable tag grouping to drag channels":"Отключите группировку по тегам для перетаскивания","Disabled {{count}} keys":"Отключено ключей: {{count}}","Deleted a prefill group":"Удалена группа предзаполнения","Deleted a redemption code":"Код погашения удалён","Deleted a vendor":"Удалён поставщик","Deleted all disabled channels ({{count}})":"Удалены все отключённые каналы ({{count}})","Deleted channel {{name}} (ID: {{id}})":"Удалён канал {{name}} (ID: {{id}})","Deleted invalid redemption codes":"Недействительные коды погашения удалены","Deleted stale instance":"Устаревший экземпляр удален","Discord ID is empty!":"Discord ID не указан!","Deleted successfully":"Удалено успешно","Deleted tokens":"Удалённые токены","Deleted user {{username}} (ID: {{id}})":"Удалён пользователь {{username}} (ID: {{id}})","Deleted: {{processed}}":"Удалено: {{processed}}","Deleting this custom version does not disable the platform. The same-name factory plugin will be restored automatically.":"Удаление этой пользовательской версии не отключит платформу. Одноимённый встроенный плагин будет восстановлен автоматически.","Deleting will permanently remove this subscription record (including benefit details). Continue?":"Удаление безвозвратно удалит запись подписки (включая детали льгот). Продолжить?","Deleting...":"Удаление...","Demo site":"Демо-сайт","Demo site mode":"Режим демо-сайта","Demo Site Mode":"Режим демонстрационного сайта","Demote":"Понизить версию","Density":"Плотность","Deploy your own gateway and start routing requests through your configured upstream services.":"Разверните собственный шлюз и начните маршрутизировать запросы через настроенные вышестоящие сервисы.","Deployment created successfully":"Развертывание создано успешно","Deployment details":"Детали развертывания","Deployment ID":"ID развертывания","Deployment location":"Локация развертывания","Deployment logs":"Логи развертывания","Deployment Region":"Регион развертывания","Deployment Region *":"Регион развертывания *","Deployment requested":"Развертывание запрошено","Deployments":"Развертывания","Deprecated":"Устарело","Derives the request names your users call":"Формирует имена запроса, которые вызывают пользователи","Derives the upstream names sent to the provider":"Формирует имена, отправляемые провайдеру","Desc":"По убыванию","Describe":"Описание","Describe this model...":"Опишите эту модель...","Describe this vendor...":"Опишите этого поставщика...","Description":"Описание","Description is required":"Описание обязательно","Designed and Developed by":"Разработано и создано","designed for scale":"спроектировано для масштабирования","Destroyed":"Уничтожено","Detail":"Подробности","Detailed request logs for investigations.":"Подробные журналы запросов для расследований.","Details":"Детали","Detect All Upstream Updates":"Обнаружить все обновления из upstream","Detect model updates":"Проверять обновления моделей","Detected database":"Обнаруженная база данных","Detected high-risk status code redirect rules":"Обнаружены следующие правила перенаправления кодов состояния высокого риска:","Detection complete: {{add}} to add, {{remove}} to remove":"Обнаружение завершено: {{add}} для добавления, {{remove}} для удаления","Detection failed":"Обнаружение не удалось","Determines how this group is applied elsewhere.":"Определяет, как эта группа применяется в других местах.","Deterministic sampling seed (best-effort)":"Сид детерминированного сэмплирования (по возможности)","Developer Friendly":"Удобно для разработчиков","Device Type Preference":"Предпочтения типа устройства","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Каналы Dify поддерживают только chatflow и agent, а agent не поддерживает изображения","Digest:":"Дайджест:","Direction":"Направление","Directory File Count":"Файлов в каталоге","Directory Total Size":"Общий размер каталога","Disable":"Отключить","Disable 2FA":"Отключить 2FA","Downgrade group does not exist":"Группа понижения не существует","Disable All":"Отключить все","Disable channels on repeated failures":"Отключать при повторных сбоях","Disable custom task plugins?":"Отключить пользовательские плагины задач?","Disable on failure":"Отключить при сбое","Disable plugin {{name}} ({{key}})? Requests using this plugin may be affected.":"Отключить плагин {{name}} ({{key}})? Это может повлиять на запросы, использующие этот плагин.","Disable plugin?":"Отключить плагин?","Disable selected channels":"Отключить выбранные каналы","Disable selected models":"Отключить выбранные модели","Disable store passthrough":"Отключить сквозной переход магазина","Disable task plugins?":"Отключить плагины задач?","Disable this key?":"Отключить этот ключ?","Disable threshold (seconds)":"Порог отключения (секунды)","Disable Two-Factor Authentication":"Отключить двухфакторную аутентификацию","disabled":"отключено","Disabled":"Отключено","Disabled all channels with tag: {{tag}}":"Все каналы с тегом {{tag}} отключены","Disabled channels with tag {{tag}}":"Отключены каналы с тегом {{tag}}","Disabled globally":"Отключено глобально","Disabled lanes are omitted on save.":"Отключённые каналы цен не сохраняются.","Disabled Reason":"Причина отключения","Disabled Time":"Время отключения","Disabled two-factor authentication":"Двухфакторная аутентификация отключена","Disabled; fell back to factory":"Отключён; используется встроенная версия","Disabled; platform unavailable":"Отключён; платформа недоступна","Disabling...":"Отключение...","Discard changes":"Отменить изменения","Discard unsaved changes?":"Отменить несохранённые изменения?","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"Предупреждение: только для личного использования. Не распространяйте и не передавайте учетные данные. Для этого канала требуются предварительные условия и начальная настройка; используйте его только если понимаете процедуру и риски, и соблюдайте условия и политики OpenAI. Учетные данные и конфигурация предназначены только для интеграции с Codex CLI и не предназначены для других клиентов, платформ или каналов.","Discord":"Discord","Discount":"Скидка","Discount map by recharge amount (JSON object)":"Карта скидок по сумме пополнения (объект JSON)","Discount Rate":"Ставка скидки","Discount rate must be ≤ 1":"Ставка скидки должна быть ≤ 1","Discount rate must be greater than 0":"Ставка скидки должна быть больше 0","Discount Rate:":"Ставка скидки:","Discount ratio for cache hits.":"Коэффициент скидки для попаданий в кэш.","Discouraged":"Не рекомендуется","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"Откройте для себя подобранные AI-модели, сравнивайте цены и возможности и выбирайте подходящую модель для каждого сценария.","Discover the leading models in each domain":"Откройте для себя ведущие модели в каждой области","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"Изучайте самые популярные модели и растущих поставщиков платформы на основе актуальных данных использования.","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"Узнайте, какие модели, приложения и поставщики лидируют на платформе — данные обновляются по каждой категории.","Discovering...":"Обнаружение...","Disk cache cleared":"Дисковый кэш очищен","Disk Cache Settings":"Настройки дискового кэша","Disk Cache Threshold (MB)":"Порог дискового кэша (МБ)","Disk cache, system performance monitoring, and operation statistics":"Дисковый кэш, мониторинг производительности и статистика","Disk Hits":"Попаданий диска","Disk Threshold (%)":"Порог диска (%)","Display in Currency":"Отображать в валюте","Display limit":"Лимит отображения","Display Mode":"Режим отображения","Display name":"Отображаемое имя","Display Name":"Отображаемое имя","Display name and email used in outgoing messages":"Отображаемое имя и адрес электронной почты, используемые в исходящих сообщениях","Display Name Field":"Поле отображаемого имени","Display name for this chat client.":"Отображаемое имя для этого чат-клиента.","Display name for this monitoring group (max 50 characters)":"Отображаемое имя для этой группы мониторинга (макс. 50 символов)","Display name for this payment method.":"Отображаемое имя для этого метода оплаты.","Display name shown to users.":"Отображаемое название для пользователей.","Display Options":"Параметры отображения","Display policy":"Правило показа","Display Token Statistics":"Показать статистику токенов","Displayed":"Отображается","Displayed in":"Отображается в","Displays the mobile sidebar.":"Отображает мобильную боковую панель.","Do not keep sessions":"Не сохранять привязку","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"Не доверяйте этой функции слишком сильно. IP может быть подделан. Используйте с nginx, CDN и другими шлюзами.","Do not repeat check-in; only once per day":"Не повторяйте отметку; только один раз в день","Do not wait one second between polling async tasks for this channel":"Не ждать одну секунду между опросами асинхронных задач для этого канала","Do regex replacement in the target field":"Выполнить замену по регулярному выражению в целевом поле","Do string replacement in the target field":"Выполнить замену строки в целевом поле","Docs":"Документы","Documentation Link":"Ссылка на документацию","Documentation or external knowledge base.":"Документация или внешняя база знаний.","Does not check healthy channels. It only rechecks auto-disabled channels and restores them after they recover.":"Рабочие каналы не проверяются. Повторно проверяются только автоматически отключённые каналы, которые включаются после восстановления.","does not exist or might have been removed.":"не существует или, возможно, был удален.","Domain":"Домен","Domain Filter Mode":"Режим фильтра домена","Don\'t have an account?":"У вас нет аккаунта?","Done":"Готово","Doubao":"Doubao","Doubao custom API address editing unlocked":"Редактирование пользовательского адреса API Doubao разблокировано","Double check the configuration below. Your system will be locked until initialization is complete.":"Дважды проверьте конфигурацию ниже. Ваша система будет заблокирована до завершения инициализации.","Downgrade Group":"Понизить группу","Downgrade to pre-purchase group":"Понизить до группы до покупки","Downgrade to this group after the subscription expires":"Понизить до этой группы после истечения подписки","Download":"Скачать","Drag {{group}} to reorder":"Перетащите {{group}}, чтобы изменить порядок","Drag mode":"Режим перетаскивания","Drag mode help":"Справка по перетаскиванию","Drag the handle to move a channel.":"Перетащите канал за ручку.","Drag to change priority. Use arrow keys to move, Escape to cancel.":"Перетащите для изменения приоритета. Стрелки — перемещение, Esc — отмена.","Drag to move":"Перетащите, чтобы переместить","Drag to resize":"Перетащите, чтобы изменить размер","Drag to set channel priority":"Приоритет каналов перетаскиванием","Draw":"Рисование","Drawing":"Рисование","Drawing logs":"Журналы рисования","Drawing Logs":"Журнал рисования","Drawing task polling":"Опрос задач рисования","Drawing task records":"Записи задач рисования","Drop a JavaScript plugin file here":"Перетащите сюда файл плагина JavaScript","Drop at an edge to create a different priority.":"Отпустите у края, чтобы создать другой приоритет.","Drop between tiers to change priority, or in the center to join a tier":"Перетащите между уровнями для изменения приоритета или в центр для объединения","Drop in the center to use the same priority.":"Отпустите в центре, чтобы задать тот же приоритет.","Dry run result":"Результат пробного запуска","Duplicate":"Дублировать","Duplicate group names: {{names}}":"Повторяющиеся имена групп: {{names}}","Duplicate model in route models":"В моделях маршрута есть дубликат модели","Duplicate source model mappings are not allowed":"Повторяющиеся сопоставления исходных моделей не допускаются","Duplicate source model(s): {{models}}":"Повторяющиеся исходные модели: {{models}}","Duration":"Длительность","Duration (hours)":"Длительность (часы)","Duration Settings":"Настройки срока действия","Duration Unit":"Единица срока","Duration Value":"Значение срока","Dynamic declarations cannot be previewed. Retry or review the source below.":"Динамические объявления нельзя просмотреть заранее. Повторите попытку или изучите исходный код ниже.","Dynamic multiplier":"Динамический множитель","Dynamic operation":"Динамическая операция","Dynamic Pricing":"Динамическое ценообразование","e.g. ¥ or HK$":"напр. ¥ или HK$","e.g. 401, 403, 429, 500-599":"напр. 401, 403, 429, 500-599","e.g. 8 means 1 USD = 8 units":"напр. 8 означает 1 USD = 8 единиц","e.g. Basic Plan":"напр. Базовый план","e.g. Clean tool parameters to avoid upstream validation errors":"напр. Очистить параметры инструментов во избежание ошибок валидации","e.g. Company SSO":"например, корпоративный SSO","e.g. example.com":"напр. example.com","e.g. gpt-4o, gemini-2.5-flash":"например, gpt-4o, gemini-2.5-flash","e.g. llama3.1:8b":"например llama3.1:8b","e.g. My GitLab":"например, My GitLab","e.g. my-gitlab":"например, my-gitlab","e.g. New API Console":"напр. консоль New API","e.g. openid profile email":"например, openid profile email","e.g. Requires level {{required}}; your current level is {{current}}":"напр. Требуется уровень {{required}}; ваш текущий уровень — {{current}}","e.g. Suitable for light usage":"напр. Подходит для лёгкого использования","e.g. This request does not meet access policy":"напр. Этот запрос не соответствует политике доступа","e.g., 0.95":"напр., 0.95","Email & Notifications":"Почта и уведомления","Email address is already in use":"Этот адрес электронной почты уже используется","e.g., 100":"напр., 100","e.g., 123456":"напр., 123456","e.g., 2025-04-01-preview":"напр., 2025-04-01-preview","e.g., 50":"напр., 50","e.g., 500000":"напр., 500000","e.g., 7342866812345":"напр., 7342866812345","Email is empty!":"Адрес электронной почты не указан!","Email or password is empty!":"Не указан адрес электронной почты или пароль!","e.g., 8 means 8 local currency per USD":"например, 8 означает 8 местной валюты за доллар США","e.g., Alipay, WeChat":"например, Alipay, WeChat","e.g., Basic Package":"напр., Базовый пакет","Email verification is enabled, please enter email address and verification code":"Включена проверка электронной почты, введите адрес электронной почты и код подтверждения","e.g., CN2 GIA":"например, CN2 GIA","e.g., Core APIs, OpenAI, Claude":"например, Core APIs, OpenAI, Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"например, d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"например, default, vip, premium","e.g., gpt-4, claude-3":"напр. gpt-4, claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"например: gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"например, https://api.example.com (путь до /suno)","e.g., https://api.openai.com/v1/chat/completions":"например, https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"например, https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"например, https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"например, https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"напр., OpenAI GPT-4 Production","e.g., preview":"например, preview","e.g., prod_xxx":"напр., prod_xxx","e.g., Recommended for China Mainland Users":"например, Рекомендуется для пользователей материкового Китая","e.g., SiAlipay":"например, SiAlipay","e.g., us-central1 or JSON format for model-specific regions":"например, us-central1 или формат JSON для регионов, специфичных для модели","e.g., v2.1":"например, v2.1","Each backup code can only be used once.":"Каждый код восстановления можно использовать только один раз.","Each item must be an object with a single key-value pair.":"Каждый элемент должен быть объектом с одной парой ключ-значение.","Each item must have exactly one key-value pair.":"Каждый элемент должен иметь ровно одну пару ключ-значение.","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"Каждая строка представляет одно ключевое слово. Оставьте пустым, чтобы отключить список, но сохранить состояния переключателей.","Each matrix cell is one rule: users of this row group pay this ratio when billed as this column group. In JSON the row is the outer key and the column is the inner key.":"Каждая ячейка матрицы — одно правило: пользователи группы строки платят этот коэффициент при тарификации по группе столбца. В JSON строка — внешний ключ, столбец — внутренний.","Each row prices one combination of {{fields}}.":"В каждой строке задаётся цена для одной комбинации {{fields}}.","Each rule reads as a sentence: users of one group pay a special ratio when billed as another group. Without a rule, the billing group base ratio applies.":"Каждое правило читается как предложение: пользователи одной группы платят особый коэффициент при тарификации по другой группе. Без правила применяется базовый коэффициент тарифной группы.","Each source serves an index.json listing installable plugins. Indexes are fetched by your browser; the gateway makes no outbound requests.":"Каждый источник отдаёт index.json со списком доступных плагинов. Индексы загружает ваш браузер; шлюз не выполняет исходящих запросов.","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"Каждый уровень поддерживает 0–2 условия (по len, p, c); последний уровень — резервный, без условий. Используйте len (полная длина ввода, включая попадания в кэш) для условий уровня, чтобы избежать ошибочной маршрутизации, когда попадания в кэш уменьшают p.","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"Каждый уровень поддерживает до 2 условий; последний уровень является резервным и не содержит условий. Используйте полную длину входа для условий уровня, чтобы кэш-попадания не снижали оплачиваемые входные токены и не приводили к неверному маршруту.","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"Каждый уровень поддерживает до 2 условий. Последний уровень без условий используется как резервный.","Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.":"Получайте вознаграждения, когда пользователи регистрируются по вашей реферальной ссылке. Переводите накопленные вознаграждения на баланс в любое время.","Earnings":"Доход","Edit":"Редактировать","Edit {{title}}":"Редактировать {{title}}","Edit access token":"Изменить токен доступа","Edit all channels with tag:":"Редактировать все каналы с тегом:","Edit Announcement":"Редактировать объявление","Edit API Shortcut":"Редактировать ярлык API","Edit billing ratios and user-selectable groups in one table.":"Редактируйте коэффициенты тарификации и доступные пользователю группы в одной таблице.","Edit Channel":"Редактировать канал","Edit channel routing":"Изменение маршрутизации каналов","Edit chat preset":"Редактировать пресет чата","Edit discount tier":"Редактировать уровень скидки","Edit FAQ":"Редактировать FAQ","Edit group":"Редактировать группу","Edit group rate limit":"Редактировать лимит скорости группы","Edit group settings as JSON. Changes are shared with the visual editor.":"Редактируйте настройки групп в JSON. Изменения синхронизируются с визуальным редактором.","Edit JSON object directly. Suitable for simple parameter overrides.":"Редактируйте JSON-объект напрямую. Подходит для простых переопределений параметров.","Edit JSON text directly. Format will be validated on save.":"Редактируйте JSON-текст напрямую. Формат будет проверен при сохранении.","Edit mapping":"Изменить сопоставление","Edit model":"Редактировать модель","Edit Model":"Редактировать модель","Edit model pricing":"Изменить тариф модели","Edit models and vendors, and sync them from upstream.":"Изменение моделей и поставщиков и их синхронизация с источником.","Edit non-sensitive settings such as models, groups, and routing rules.":"Изменение нечувствительных настроек, таких как модели, группы и правила маршрутизации.","Edit OAuth Provider":"Редактировать поставщика OAuth","Edit payment method":"Редактировать способ оплаты","Edit Prefill Group":"Редактировать группу предзаполнения","Edit pricing rule {{name}}":"Изменить правило {{name}}","Edit product":"Редактировать продукт","Edit ratio override":"Редактировать переопределение коэффициента","Edit Rule":"Редактировать правило","Edit selectable group":"Редактировать выбираемую группу","Edit sensitive channel settings":"Изменение чувствительных настроек каналов","Edit Tag":"Редактировать тег","Edit Tag:":"Редактировать тег:","Edit Uptime Kuma Group":"Редактировать группу Uptime Kuma","Edit Vendor":"Редактировать поставщика","Enabled {{count}} keys":"Включено ключей: {{count}}","edit_this":"изменить_это","Edited channels with tag {{tag}}":"Изменены каналы с тегом {{tag}}","Editor mode":"Режим редактора","Education":"Образование","Effective icon":"Используемая иконка","Email":"Электронная почта","Email (required for verification)":"Email (требуется для верификации)","Email Address":"Адрес электронной почты","Email Alias Restriction":"Ограничение по псевдониму Email","Email bound successfully!":"Email успешно привязан!","Email confirmation code resend":"Повторная отправка кода подтверждения почты","Email Domain Restriction":"Ограничение по домену Email","Email Domain Whitelist":"Белый список доменов Email","Email Field":"Поле email","Email Verification":"Верификация Email","Email verification code is incorrect.":"Неверный код подтверждения почты.","Email verification has ended. Start again to continue.":"Подтверждение почты завершено. Начните заново, чтобы продолжить.","Email, summarisation, knowledge work":"Электронная почта, резюме, knowledge work","Embeddings":"Встраивания","Empty":"Пусто","Empty value will be saved as {}.":"Пустое значение будет сохранено как {}.","Enable":"Включить","Enable {{parameter}}":"Включить {{parameter}}","Enable 2FA":"Включить 2FA","Enable All":"Включить все","Enable check-in feature":"Включить функцию прибытия","Enable custom task plugins":"Включить пользовательские плагины задач","Enable Data Dashboard":"Включить панель данных","Enable demo mode with limited functionality":"Включить демонстрационный режим с ограниченной функциональностью","Enable Discord OAuth":"Включить Discord OAuth","Enable Disk Cache":"Включить дисковый кэш","Enable drawing features":"Включить функции рисования","Enable filtering":"Включить фильтрацию","Enable FunctionCall thoughtSignature Fill":"Включить автозаполнение thoughtSignature для FunctionCall","Enable GitHub OAuth":"Включить GitHub OAuth","Enable Groups":"Включить группы","Enable if this is an OpenRouter enterprise account with special response format":"Включите, если это корпоративный аккаунт OpenRouter со специальным форматом ответа","Enable io.net deployments":"Включить развертывания io.net","Enable io.net model deployment service in console":"Включить сервис развертывания моделей io.net в консоли","Enable LinuxDO OAuth":"Включить LinuxDO OAuth","Enable model performance metrics":"Включить метрики производительности моделей","Enable OIDC":"Включить OIDC","Enable only if the upstream supports Responses WebSocket. HTTP requests are unaffected when disabled.":"Включайте, только если провайдер поддерживает Responses WebSocket. При отключении обычные HTTP-запросы остаются доступны.","Enable or disable this channel":"Включить или отключить этот канал","Enable or disable this model":"Включить или отключить эту модель","Enable Passkey":"Включить Passkey","Enable passthrough":"Включить проброс","Enable Performance Monitoring":"Включить мониторинг производительности","Enable plugin {{key}}":"Включить плагин {{key}}","Enable plugin?":"Включить плагин?","Enable rate limiting":"Включить ограничение скорости","Enable request body passthrough?":"Включить проброс тела запроса?","Enable request header passthrough?":"Включить проброс заголовков запроса?","Enable Request Passthrough":"Включить сквозную передачу запросов","Enable Responses WebSocket":"Включить Responses WebSocket","Enable selected channels":"Включить выбранные каналы","Enable selected models":"Включить выбранные модели","Enable session affinity":"Включить привязку сессии","Enable SSL/TLS":"Включить SSL/TLS","Enable SSRF Protection":"Включить защиту от SSRF","Enable STARTTLS":"Включить STARTTLS","Enable streaming mode for the test request.":"Включить потоковый режим для тестового запроса.","Enable task plugins":"Включить плагины задач","Enable Telegram OAuth":"Включить Telegram OAuth","Enable test mode for Creem payments":"Включить тестовый режим для платежей Creem","Enable this key?":"Включить этот ключ?","Enable Turnstile":"Включить Turnstile","Enable Two-factor Authentication or Passkey in Security & Access to continue.":"Для продолжения включите двухфакторную аутентификацию или ключ доступа в разделе «Безопасность и доступ».","Enable Two-factor Authentication or Passkey in Security & Access to unlock sensitive operations.":"Для выполнения чувствительных операций включите двухфакторную аутентификацию или ключ доступа в разделе «Безопасность и доступ».","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"Включите двухфакторную аутентификацию или Passkey в своем профиле, чтобы разблокировать конфиденциальные операции.","Enable unlimited quota for this API key":"Включить неограниченную квоту для этого ключа API","Enable violation deduction":"Включить вычет за нарушения","Enable Waffo":"Включить Waffo","Enable Waffo Pancake":"Включить Waffo Pancake","Enable WeChat Auth":"Включить аутентификацию WeChat","Enable when proxying workers that fetch images over HTTP.":"Включить при проксировании воркеров, которые получают изображения по HTTP.","Enable when the client and upstream use the same API format and you need to preserve upstream-specific or new fields the gateway does not yet support. Usually leave this off.":"Включайте, если клиент и вышестоящий сервис используют один формат API и нужно сохранить специфичные для сервиса или новые поля, которые шлюз ещё не поддерживает. Обычно включать не требуется.","Enable when the upstream needs client information from Codex or Claude Code headers; may expose client information":"Включайте, если вышестоящему сервису нужны сведения из заголовков Codex или Claude Code; возможно раскрытие информации о клиенте","Enable when the upstream needs information from clients such as Codex or Claude Code, including User-Agent, client version or session headers. Usually leave this off.":"Включайте, если вышестоящему сервису нужны сведения о клиентах Codex, Claude Code и подобных: User-Agent, версия клиента или заголовки сеанса. Обычно включать не требуется.","Enabled":"Включено","Enabled all channels with tag: {{tag}}":"Все каналы с тегом {{tag}} включены","Enabled channels with tag {{tag}}":"Включены каналы с тегом {{tag}}","Enabled Status":"Статус включения","Enabled two-factor authentication":"Двухфакторная аутентификация включена","Enabling...":"Включается...","Encourages introducing new topics":"Поощряет введение новых тем","Encourages new topics":"Стимулирует новые темы","End":"End","End Error":"Ошибка завершения","End Reason":"Причина завершения","End Time":"Время окончания","End time must be after start time":"Время окончания должно быть позже начала","Enter the Discovery URL or Issuer URL first":"Сначала укажите Discovery URL или Issuer URL","End weekday":"Конечный день недели","End-user identifier for abuse monitoring":"Идентификатор конечного пользователя для мониторинга злоупотреблений","Endpoint":"Точка доступа","Endpoint config":"Конфигурация конечной точки","Endpoint Configuration":"Конфигурация конечной точки","Endpoint Type":"Тип конечной точки","Endpoint, provider-specific settings, and credentials.":"Эндпоинт, настройки провайдера и учетные данные.","Endpoint:":"Конечная точка:","Endpoints":"Конечные точки","English":"Английский","Ensure Prefix":"Обеспечить префикс","Ensure Suffix":"Обеспечить суффикс","Ensure the string has a specified prefix":"Убедиться, что строка имеет указанный префикс","Ensure the string has a specified suffix":"Убедиться, что строка имеет указанный суффикс","Enter 6-digit code":"Введите 6-значный код","Enter a domain such as example.com or localhost, without a protocol, port or path. Put addresses with ports in Allowed Passkey websites.":"Укажите домен, например example.com или localhost, без протокола, порта и пути. Адреса с портами добавьте в «Сайты, разрешённые для Passkey».","Enter a finite, non-negative price":"Введите конечную неотрицательную цену","Enter a finite, non-negative price.":"Введите конечную неотрицательную цену.","Enter a name":"Введите имя","Enter a new name":"Введите новое имя","Enter a positive integer":"Введите положительное целое число","Enter a positive or negative amount to adjust the quota":"Введите положительную или отрицательную сумму для корректировки квоты","Enter a react-icons component name. Invalid names show no icon.":"Введите имя компонента react-icons. Недопустимые имена не отображают значок.","Enter a rule to preview mappings.":"Введите правило для просмотра сопоставлений.","Enter a valid condition value.":"Введите допустимое значение условия.","Enter a valid email or leave blank":"Введите действительный email или оставьте пустым","Enter a value and press Enter":"Введите значение и нажмите Enter","Enter amount in {{currency}}":"Введите сумму в {{currency}}","Enter amount in tokens":"Введите сумму в токенах","Enter an absolute HTTP(S) URL without credentials, query parameters, or fragments":"Введите абсолютный URL HTTP(S) без учётных данных, параметров запроса и фрагмента","Enter an absolute http(s) URL.":"Укажите полный http(s) URL.","Enter an ISO date and time with a timezone offset.":"Введите дату и время в формате ISO со смещением часового пояса.","Enter announcement content (supports Markdown & HTML)":"Введите содержимое объявления (поддерживает Markdown и HTML)","Enter announcement content (supports Markdown/HTML)":"Введите содержимое объявления (поддерживает Markdown/HTML)","Enter API Key":"Введите API-ключ","Enter API key for this channel":"Введите ключ API для этого канала","Enter API Key, format: APIKey|Region":"Введите ключ API, формат: APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"Введите ключ API, по одному на строку, формат: APIKey|Region","Enter application token":"Введите токен приложения","Enter authenticator code":"Введите код аутентификатора","Enter backup code (e.g., CAWD-OQDV)":"Введите резервный код (например, CAWD-OQDV)","Enter code":"Введите код","Enter code or backup code":"Введите код или резервный код","Enter Completion price to calculate ratio":"Введите цену Completion для расчёта коэффициента","Enter Creem API key":"Введите ключ API Creem","Enter custom API endpoint URL":"Введите URL пользовательской конечной точки API","Enter deployment region or JSON mapping:":"Введите регион развертывания или JSON-сопоставление:","Enter display name":"Введите отображаемое имя","Enter HTML code (e.g.,

About us...

) or a URL (e.g., https://example.com) to embed as iframe":"Введите HTML-код (например,

О нас...

) или URL (например, https://example.com) для встраивания в виде iframe","Enter Input price to calculate ratio":"Введите цену Input для расчёта коэффициента","Enter JSON to override request headers":"Введите JSON для переопределения заголовков","Enter key, format: AccessKey|SecretAccessKey|Region":"Введите ключ, формат: AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"Введите ключ, по одному на строку, формат: AccessKey|SecretAccessKey|Region","Enter model name":"Введите имя модели","Enter new key to update":"Введите новый ключ для обновления","Enter new key to update, or leave empty to keep current key":"Введите новый ключ для обновления или оставьте пустым, чтобы сохранить текущий ключ","Enter new tag name (leave empty to disband tag)":"Введите новое имя тега (оставьте пустым, чтобы удалить тег)","Enter new tag name or leave empty":"Введите новое имя тега или оставьте пустым","Enter new token to update":"Введите новый токен для обновления","Enter one API key per line for batch creation":"Введите по одному API-ключу на строку для пакетного создания","Enter one key per line for batch creation":"Введите по одному ключу на строку для пакетного создания","Enter one keyword per line":"Введите по одному ключевому слову на строку","Enter one website address per line, such as https://example.com. Do not include a page path.":"Введите по одному адресу сайта на строку, например https://example.com, без пути страницы.","Enter only a top-level callback domain, for example https://api.example.com, without any path.":"Введите только домен верхнего уровня для callback, например https://api.example.com, без пути.","Enter only the domain, such as example.com, without https://, a port or a page path. If you use both example.com and api.example.com, you can enter example.com.":"Введите только домен, например example.com, без https://, порта и пути страницы. Если используются example.com и api.example.com, можно указать example.com.","Enter only the domain, without https://, a port or a page path. example.com and www.example.com are different Passkey domains; changing between them does not migrate existing Passkeys.":"Введите только домен, без https://, порта и пути страницы. example.com и www.example.com — разные домены для ключей доступа; переключение между ними не переносит существующие ключи.","Enter password":"Введите пароль","Enter password (8-20 characters)":"Введите пароль (8-20 символов)","Enter password (8–128 characters)":"Введите пароль (8–128 символов)","Enter previous domains, one per line, without a protocol, port or path. Different ports on the same domain do not need compatible domains.":"Укажите прежние домены, по одному на строку, без протокола, порта и пути. Разные порты одного домена не требуют добавления совместимых доменов.","Enter previous Passkey domains, one per line. Existing Passkeys can still verify with these domains; new Passkeys use the primary domain.":"Введите прежние домены ключей доступа, по одному в строке. Существующие ключи продолжат работать с этими доменами, а новые будут использовать основной домен.","Enter quota in {{currency}}":"Введите квоту в {{currency}}","Enter quota in tokens":"Введите квоту в токенах","Enter sample usage to estimate the cost. Group and request multipliers are not included.":"Введите объём использования для одного запроса. Множители группы и правил запроса не учитываются.","Enter secret key":"Введите секретный ключ","Enter system prompt (user prompt takes priority)":"Введите системный промпт (пользовательский промпт имеет приоритет)","Enter tag name (optional)":"Введите имя тега (необязательно)","Enter the 6-digit authenticator code or an unused backup code.":"Введите 6-значный код аутентификатора или неиспользованный резервный код.","Enter the 6-digit authenticator code.":"Введите 6-значный код из приложения-аутентификатора.","Enter the 6-digit code from your authenticator app":"Введите 6-значный код из вашего приложения-аутентификатора","Enter the 6-digit email verification code.":"Введите 6-значный код из письма.","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"Введите 6-значный одноразовый пароль на основе времени или 8-значный резервный код из вашего приложения-аутентификатора.","Enter the complete URL, supports":"Введите полный URL, поддерживает","Expiration time cannot be earlier than current time":"Время истечения не может быть раньше текущего времени","Enter the Coze agent ID":"Введите ID агента Coze","Enter the full URL of your Gotify server":"Введите полный URL вашего сервера Gotify","Enter the knowledge base ID":"Введите ID базы знаний","Enter the path before /suno, usually just the domain":"Введите путь перед /suno, обычно это просто домен","Enter the quota amount in {{currency}}":"Введите сумму квоты в {{currency}}","Enter the quota amount in tokens":"Введите количество квоты в токенах","Enter the verification code":"Введите проверочный код","Enter the website domain, such as example.com.":"Введите домен сайта, например example.com.","Export":"Экспорт","Export logs":"Экспорт журналов","Exported {{count}} logs":"Экспортировано записей: {{count}}","Enter token counts to preview the estimated cost (excluding group multipliers).":"Введите количество токенов для оценки стоимости (множители групп не учитываются).","Enter URL...":"Введите URL...","Enter username":"Введите имя пользователя","Enter verification code":"Введите проверочный код","Enter webhook secret":"Введите секрет webhook","Enter your authenticator code or a backup code":"Введите код аутентификатора или резервный код","Enter your email":"Введите ваш адрес электронной почты","Enter your redemption code":"Введите код активации","Enter your registered email and we will send you a link to reset your password.":"Введите ваш зарегистрированный адрес электронной почты, и мы вышлем вам ссылку для сброса пароля.","Enter your username":"Введите ваше имя пользователя","Enter your username or email":"Введите ваше имя пользователя или адрес электронной почты","Enterprise Account":"Корпоративная учетная запись","Enterprise-grade security with comprehensive permission management":"Безопасность корпоративного уровня с комплексным управлением разрешениями","Entries configured in Request Header Override still take priority":"Записи из переопределения заголовков по-прежнему имеют приоритет","Entrypoint (space separated)":"Точка входа (через пробелы)","Enum":"Перечисление","Enum values":"Значения перечисления","Env (JSON object)":"Env (объект JSON)","Environment variables":"Переменные окружения","Environment variables (JSON)":"Переменные окружения (JSON)","Epay Alipay":"Alipay через Epay","Epay endpoint":"Конечная точка Epay","Epay Gateway":"Шлюз Epay","Epay is a payment protocol, not a specific official website. Verify the provider yourself and do not trust random third-party Epay deployments.":"Epay — это платежный протокол, а не конкретный официальный сайт. Самостоятельно проверяйте поставщика и не доверяйте случайным сторонним развертываниям Epay.","Epay merchant ID":"ID торговца EasyPay","Epay safety reminder":"Напоминание о безопасности Epay","Epay secret key":"Секретный ключ Epay","Epay WeChat Pay":"WeChat Pay через Epay","Equals":"Равно","Error":"Ошибка","Error Code (optional)":"Код ошибки (необязательно)","Error establishing connection":"Ошибка при установлении соединения","Error Message":"Сообщение об ошибке","Error Message (required)":"Сообщение об ошибке (обязательно)","Error parsing response data":"Ошибка при разборе данных ответа","Error Type (optional)":"Тип ошибки (необязательно)","Estimated cost":"Примерная стоимость","Estimated quota cost":"Ориентир стоимости квоты","Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.":"Проверяет поля ответа с данными пользователя от провайдера. Условия и вложенные группы используют логику and/or.","Event":"Событие","Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.":"Каждое имя группы из таблицы тарифов используется в двух местах: у пользователя (группа пользователя, назначается администратором) и у токена (группа токена, выбирается при создании). Один набор имён — две разные роли.","Failed to check user bindings, please try again later":"Не удалось проверить привязки пользователей, повторите попытку позже","Every other device will lose access immediately. This device will remain signed in.":"Все остальные устройства немедленно потеряют доступ. Это устройство останется в системе.","Everything configured for this group, in one place.":"Все настройки этой группы в одном месте.","Exact":"Точное","Exact Match":"Точное совпадение","Exact match only and case-sensitive. Prefixes, regex, and * wildcards are not supported.":"Только точное совпадение с учетом регистра. Префиксы, регулярные выражения и подстановки * не поддерживаются.","Example":"Пример","Example (all channels):":"Пример (все каналы):","Failed to copy channel. Please try again later":"Не удалось скопировать канал. Попробуйте позже","Example (specific channels):":"Пример (указанные каналы):","Example price":"Пример цены","Example spec":"Пример спецификации","Failed to count channel types. Please try again later":"Не удалось подсчитать типы каналов. Попробуйте позже","Failed to count channels. Please try again later":"Не удалось подсчитать каналы. Попробуйте позже","Failed to count tags. Please try again later":"Не удалось подсчитать теги. Попробуйте позже","Example:":"Пример:","Example: users call gpt-4o; upstream receives gpt-4o-all.":"Пример: пользователь вызывает gpt-4o, провайдер получает gpt-4o-all.","example.com blocked-site.com":"example.com blocked-site.com","Failed to create default token":"Не удалось создать токен по умолчанию","example.com company.com":"example.com company.com","Failed to create order":"Не удалось создать заказ","Excellent":"Отлично","Exchange rate is required":"Требуется курс обмена","Failed to create redemption code, please try again later":"Не удалось создать код активации, попробуйте позже","Failed to create the administrator account: {{error}}":"Не удалось создать учётную запись администратора: {{error}}","Failed to create the Discovery request: {{error}}":"Не удалось создать запрос Discovery: {{error}}","Failed to create the plan product":"Не удалось создать продукт плана","Exchange rate must be greater than 0":"Курс обмена должен быть больше 0","Excludes the first attempt. Counted per group.":"Без первой попытки, отдельно для каждой группы.","Execute code in a sandbox during the response":"Выполнять код в песочнице во время ответа","Executor":"Исполнитель","Exhausted":"Исчерпано","Existing account will be reused":"Существующая учётная запись будет использована повторно","Existing Models ({{count}})":"Существующие модели ({{count}})","Existing models: select fields to replace their current values with the values on the right. Unselected fields stay unchanged.":"Существующие модели: выберите поля, текущие значения которых нужно заменить значениями справа. Остальные поля останутся без изменений.","Existing Passkeys remain tied to the old domain and may stop working. Keep the old domain to preserve access, or confirm only if you have a recovery plan.":"Существующие ключи доступа останутся привязаны к старому домену и могут перестать работать. Сохраните старый домен для доступа или подтвердите изменение, только если у вас есть план восстановления.","Exists":"Существует","Expand":"Развернуть","Expand All":"Развернуть все","Expand panel":"Развернуть панель","Expected a JSON array of group identifiers":"Ожидается JSON-массив идентификаторов групп","Expected a JSON array.":"Ожидается JSON-массив.","Experiment with prompts and models in real time.":"Экспериментируйте с промптами и моделями в реальном времени.","Expiration":"Срок действия","Expiration Time":"Время истечения срока действия","expired":"истек","Expired":"Просрочено","Expired at":"Истекает","Expired time cannot be earlier than current time":"Время истечения срока действия не может быть раньше текущего времени","Expires":"Истекает","Expires {{time}}":"Истекает {{time}}","Expires at":"Истекает","Expires in":"До истечения","Export snapshot":"Экспорт снимка","Failed to encode Vertex AI key JSON: {{error}}":"Не удалось закодировать JSON ключа Vertex AI: {{error}}","Failed to export logs":"Не удалось экспортировать журналы","Expose ratio API":"Интерфейс экспонирования коэффициента","Failed to fetch channel. Please try again later":"Не удалось получить канал. Попробуйте позже","Failed to fetch channels with this tag. Please try again later":"Не удалось получить каналы с этим тегом. Попробуйте позже","Failed to fetch channels. Please try again later":"Не удалось получить список каналов. Попробуйте позже","Exposes the pricing/models catalog in the top navigation.":"Отображает каталог цен/моделей в верхней навигации.","Expression":"Выражение","Expression - Task pricing":"Выражение — тарификация задач","Failed to fetch models: {{error}}":"Не удалось получить модели: {{error}}","Expression argument types do not match.":"Типы аргументов выражения не совпадают.","Failed to fetch Ollama version: {{error}}":"Не удалось получить версию Ollama: {{error}}","Expression based":"На основе выражения","Failed to fetch reset credit details. Please try again later":"Не удалось получить сведения о сбросах. Попробуйте позже","Failed to fetch tags. Please try again later":"Не удалось получить теги. Попробуйте позже","Failed to fetch the catalog":"Не удалось получить каталог","Failed to fetch the Discovery configuration: {{error}}":"Не удалось получить конфигурацию Discovery: {{error}}","Failed to fetch the product list":"Не удалось получить список продуктов","Expression billing":"Тарификация по выражению","Expression compatibility will be checked when saving.":"Совместимость выражения будет проверена при сохранении.","Expression editor":"Редактор выражения","Failed to fetch usage. Please try again later":"Не удалось получить данные об использовании. Попробуйте позже","Expression error":"Ошибка выражения","Expression pricing":"Тарификация выражением","Failed to generate default token":"Не удалось сгенерировать токен по умолчанию","Extend":"Продлить","Failed to get the channel information. Please contact the administrator":"Не удалось получить сведения о канале. Обратитесь к администратору","Failed to get the token count":"Не удалось получить количество токенов","Failed to get the user group":"Не удалось получить группу пользователя","Failed to get token from {{provider}}, please check settings":"Не удалось получить токен от {{provider}}, проверьте настройки","Failed to get user information":"Не удалось получить информацию о пользователе","Extend deployment":"Продлить развертывание","Extend failed":"Не удалось продлить","Extended successfully":"Продлено успешно","Failed to initialize the system: {{error}}":"Не удалось инициализировать систему: {{error}}","External Device":"Внешнее устройство","External link for users to purchase quota":"Внешняя ссылка для пользователей для покупки квоты","External operations":"Внешние операции","External operations mode":"Режим внешних операций","External Speed Test":"Внешний тест скорости","Extra":"Дополнительно","Extra destinations beyond the channel API address. The channel address remains accessible.":"Дополнительные адреса помимо API канала. Сам адрес канала остаётся доступным.","Extra Notes (Optional)":"Дополнительные примечания (необязательно)","Extra visible":"Дополнительно видимая","Extra visible to {{group}}":"Дополнительно видима для {{group}}","extras":"доп. пункты","Factory":"Встроенный","Factory and custom plugin behavior":"Поведение встроенных и пользовательских плагинов","Factory and custom plugins all stop serving immediately. In-flight tasks will be handled by timeout cleanup.":"Заводские и пользовательские плагины сразу перестают обслуживать запросы. Текущие задачи обработает очистка по таймауту.","Factory plugins cannot be deleted or disabled individually. A custom version can override them; deleting or disabling that version restores the factory plugin. Third-party-only platforms become unavailable when their plugin is deleted or disabled.":"Встроенные плагины нельзя удалять или отключать отдельно. Пользовательская версия может заменить их; её удаление или отключение восстанавливает встроенный плагин. Сторонняя платформа становится недоступной при удалении или отключении её плагина.","Fail Reason":"Причина сбоя","Fail Reason Details":"Детали причины сбоя","failed":"ошибка","Failed":"Неудача","Failed to {{action}} user":"Не удалось выполнить {{action}} для пользователя","Failed to adjust quota":"Не удалось изменить квоту","Failed to apply overwrite.":"Не удалось применить перезапись.","Failed to apply vendor changes":"Не удалось применить изменения поставщиков","Failed to batch delete redemption codes":"Не удалось массово удалить коды погашения","Failed to bind email":"Не удалось привязать email","Failed to change password":"Не удалось изменить пароль","Failed to check for updates":"Не удалось проверить обновления","Failed to clean logs":"Не удалось очистить логи","Failed to complete order":"Не удалось завершить заказ","Failed to complete Passkey login":"Не удалось завершить вход с Passkey","Failed to confirm compliance":"Не удалось подтвердить соответствие","Failed to parse appended keys: {{error}}":"Не удалось разобрать добавляемые ключи: {{error}}","Failed to parse credentials. Please check the channel configuration":"Не удалось разобрать учётные данные. Проверьте настройки канала","Failed to contact GitHub releases API":"Не удалось связаться с API GitHub Releases","Failed to copy":"Не удалось скопировать","Failed to parse the Discovery configuration: {{error}}":"Не удалось разобрать конфигурацию Discovery: {{error}}","Failed to parse tool price \\"{{name}}\\": {{error}}":"Не удалось разобрать цену инструмента «{{name}}»: {{error}}","Failed to parse tool prices: {{error}}":"Не удалось разобрать цены инструментов: {{error}}","Failed to copy channel":"Не удалось скопировать канал","Failed to copy keys":"Не удалось скопировать ключи","Failed to copy model names":"Не удалось скопировать названия моделей","Failed to copy to clipboard":"Не удалось скопировать в буфер обмена","Failed to query channels":"Не удалось запросить каналы","Failed to query logs":"Не удалось получить журналы","Failed to query statistics":"Не удалось получить статистику","Failed to query the upstream task status":"Не удалось получить статус задачи в upstream","Failed to create account":"Не удалось создать аккаунт","Failed to create API key":"Не удалось создать API ключ","Failed to refresh credentials. Please try again later":"Не удалось обновить учётные данные. Попробуйте позже","Failed to create channel":"Не удалось создать канал","Failed to create deployment":"Не удалось создать развертывание","Failed to create provider":"Не удалось создать поставщика","Failed to create redemption code":"Не удалось создать код активации","Failed to create user":"Не удалось создать пользователя","Failed to delete {{count}} model(s)":"Не удалось удалить {{count}} моделей","Failed to delete {{count}} redemption codes":"Не удалось удалить коды погашения: {{count}}","Failed to delete account":"Не удалось удалить аккаунт","Failed to reset usage. Please try again later":"Не удалось сбросить использование. Попробуйте позже","Failed to delete API key":"Не удалось удалить API ключ","Failed to delete API keys":"Не удалось удалить API ключи","Failed to delete channel":"Не удалось удалить канал","Failed to delete disabled channels":"Не удалось удалить отключённые каналы","Failed to save backup codes":"Не удалось сохранить резервные коды","Failed to save configuration":"Не удалось сохранить настройки","Failed to delete failed models":"Не удалось удалить неуспешные модели","Failed to delete group":"Не удалось удалить группу","Failed to save the demo site mode setting: {{error}}":"Не удалось сохранить настройку режима демо-сайта: {{error}}","Failed to save the self-use mode setting: {{error}}":"Не удалось сохранить настройку режима личного использования: {{error}}","Failed to delete invalid redemption codes":"Не удалось удалить недействительные коды активации","Failed to delete model":"Не удалось удалить модель","Failed to delete provider":"Не удалось удалить поставщика","Failed to search tokens":"Не удалось выполнить поиск токенов","Failed to search top-up records":"Не удалось найти записи пополнений","Failed to delete redemption code":"Не удалось удалить код активации","Failed to delete user":"Не удалось удалить пользователя","Failed to delete vendor":"Не удалось удалить поставщика","Failed to disable {{count}} model(s)":"Не удалось отключить {{count}} моделей","Failed to disable 2FA":"Не удалось отключить 2FA","Failed to set the audio completion ratio: {{error}}":"Не удалось задать коэффициент аудиодополнения: {{error}}","Failed to set the audio ratio: {{error}}":"Не удалось задать коэффициент аудио: {{error}}","Failed to set the cache creation ratio: {{error}}":"Не удалось задать коэффициент создания кэша: {{error}}","Failed to set the image ratio: {{error}}":"Не удалось задать коэффициент изображений: {{error}}","Failed to disable channels":"Не удалось отключить каналы","Failed to disable model":"Не удалось отключить модель","Failed to disable tag channels":"Не удалось отключить каналы тегов","Failed to discover OIDC endpoints":"Не удалось обнаружить конечные точки OIDC","Failed to enable {{count}} model(s)":"Не удалось включить {{count}} моделей","Failed to enable 2FA":"Не удалось включить 2FA","Failed to enable channels":"Не удалось включить каналы","Failed to enable model":"Не удалось включить модель","Failed to enable tag channels":"Не удалось включить каналы тегов","Failed to fetch channel key":"Не удалось получить ключ канала","Failed to start payment":"Не удалось начать оплату","Failed to fetch checkin status":"Не удалось получить статус регистрации","Failed to fetch deployment details":"Не удалось получить сведения о развертывании","Failed to fetch models":"Не удалось получить модели","Failed to fetch OIDC configuration. Please check the URL and network status":"Не удалось получить конфигурацию OIDC. Проверьте URL и состояние сети","Failed to fetch reset credit details":"Не удалось получить сведения о сбросах лимита","Failed to fetch upstream prices":"Не удалось получить цены провайдера","Failed to fetch upstream ratios":"Не удалось получить коэффициенты upstream","Failed to fetch usage":"Не удалось получить данные об использовании","Failed to fetch user information":"Не удалось получить данные пользователя","Failed to fix abilities":"Не удалось восстановить согласованность каналов","Failed to generate token":"Не удалось сгенерировать токен","Failed to hide model from model square":"Не удалось скрыть модель в каталоге","Failed to initialize OAuth":"Не удалось инициализировать OAuth","Failed to initialize system":"Не удалось инициализировать систему","Failed to load":"Не удалось загрузить","Failed to load access tokens":"Не удалось загрузить токены доступа","Failed to load API keys":"Не удалось загрузить API ключи","Failed to load artifacts":"Не удалось загрузить артефакты","Failed to load audit records":"Не удалось загрузить аудит","Failed to load billing history":"Не удалось загрузить историю платежей","Failed to load channel":"Не удалось загрузить канал","Failed to load enabled models":"Не удалось загрузить включённые модели","Failed to load home page content":"Не удалось загрузить содержимое главной страницы","Failed to load image":"Не удалось загрузить изображение","Failed to load key status":"Не удалось загрузить статус ключей","Failed to load login sessions":"Не удалось загрузить сеансы входа","Failed to load logs":"Не удалось загрузить логи","Failed to load model":"Не удалось загрузить модель","Failed to load model pricing":"Не удалось загрузить цены модели","Failed to load models":"Не удалось загрузить модели","Failed to load Passkey status":"Не удалось загрузить статус Passkey","Failed to load playground groups":"Не удалось загрузить группы площадки","Failed to load playground models":"Не удалось загрузить модели площадки","FAQ #{{index}} answer cannot exceed 1000 characters":"Ответ в FAQ № {{index}} не может превышать 1000 символов","FAQ #{{index}} is missing the answer field":"В FAQ № {{index}} отсутствует поле ответа","FAQ #{{index}} is missing the question field":"В FAQ № {{index}} отсутствует поле вопроса","FAQ #{{index}} question cannot exceed 200 characters":"Вопрос в FAQ № {{index}} не может превышать 200 символов","Failed to load plugins":"Не удалось загрузить плагины","FAQ cannot exceed 100 entries":"FAQ не может содержать более 100 записей","Failed to load profile":"Не удалось загрузить профиль","Failed to load redemption codes":"Не удалось загрузить коды активации","Failed to load settings":"Не удалось загрузить настройки","Failed to load setup data":"Не удалось загрузить данные настройки","Failed to load setup status":"Не удалось загрузить статус настройки","Failed to load SGLang status":"Не удалось загрузить состояние SGLang","Failed to load tag data":"Не удалось загрузить данные тегов","Failed to load users":"Не удалось загрузить пользователей","Failed to load vendor":"Не удалось загрузить поставщика","Failed to load vendors":"Не удалось загрузить поставщиков","Failed to load vLLM status":"Не удалось загрузить состояние vLLM","Failed to parse group items":"Не удалось разобрать элементы группы","Failed to parse JSON file: {{name}}":"Не удалось проанализировать файл JSON: {{name}}","Failed to prepare pricing conversion":"Не удалось подготовить преобразование тарифа","Fetched successfully":"Успешно получено","Failed to preview metadata":"Не удалось получить предпросмотр метаданных","Failed to preview vendor changes":"Не удалось просмотреть изменения поставщиков","Failed to query balance":"Не удалось запросить баланс","Failed to refresh cache stats":"Не удалось обновить статистику кэша","Failed to refresh credential":"Не удалось обновить учетные данные","Failed to regenerate backup codes":"Не удалось перегенерировать резервные коды","Failed to register Passkey":"Не удалось зарегистрировать Passkey","Failed to remove Passkey":"Не удалось удалить Passkey","Failed to repair channel consistency":"Не удалось восстановить согласованность каналов","Failed to reset 2FA":"Не удалось сбросить 2FA","Failed to reset model ratios":"Не удалось сбросить коэффициенты модели","Failed to reset Passkey":"Не удалось сбросить Passkey","Failed to reset usage":"Не удалось сбросить использование","Failed to revoke token":"Не удалось отозвать токен","Failed to save":"Не удалось сохранить","Failed to save announcements":"Не удалось сохранить объявления","Failed to save API info":"Не удалось сохранить информацию API","Failed to save FAQ":"Не удалось сохранить FAQ","Failed to save model pricing":"Не удалось сохранить цены модели","Failed to save Uptime Kuma groups":"Не удалось сохранить группы Uptime Kuma","Failed to search API keys":"Не удалось найти API ключи","Failed to search redemption codes":"Не удалось найти коды активации","Failed to search users":"Не удалось найти пользователей","Failed to send reset email":"Не удалось отправить письмо для сброса пароля","Failed to send verification code":"Не удалось отправить код подтверждения","Failed to send verification email":"Не удалось отправить письмо с подтверждением","Failed to set tag":"Не удалось установить тег","Failed to setup 2FA":"Не удалось настроить 2FA","Failed to show model in model square":"Не удалось отобразить модель в каталоге","Failed to sign out other sessions":"Не удалось завершить другие сеансы","Failed to sign out session":"Не удалось завершить сеанс","Failed to start {{provider}} login":"Не удалось начать вход через {{provider}}","Failed to start Discord login":"Не удалось начать вход через Discord","Failed to start GitHub login":"Не удалось начать вход через GitHub","Failed to start LinuxDO login":"Не удалось начать вход через LinuxDO","Failed to start OIDC login":"Не удалось начать вход через OIDC","Failed to start Passkey login":"Не удалось начать вход с Passkey","Failed to start Passkey registration":"Не удалось начать регистрацию Passkey","Failed to start Telegram binding":"Не удалось начать привязку Telegram","Failed to start testing all channels":"Не удалось начать тестирование всех каналов","Failed to start verification":"Не удалось начать проверку","Failed to sync prices":"Не удалось синхронизировать цены","Failed to sync ratios":"Не удалось синхронизировать коэффициенты","Failed to test all channels":"Не удалось протестировать все каналы","Failed to test channel":"Не удалось протестировать канал","Failed to update all balances":"Не удалось обновить все балансы","Failed to update API key":"Не удалось обновить API ключ","Failed to update API key status":"Не удалось обновить статус API ключа","Failed to update balance":"Не удалось обновить баланс","Failed to update channel":"Не удалось обновить канал","Failed to update models":"Не удалось обновить модели","Failed to update profile":"Не удалось обновить профиль","Failed to update provider":"Не удалось обновить поставщика","Failed to update redemption code":"Не удалось обновить код активации","Failed to update redemption code status":"Не удалось обновить статус кода активации","Failed to update setting":"Не удалось обновить настройку","Failed to update settings":"Не удалось обновить настройки","Failed to update tag":"Не удалось обновить тег","Failed to update user":"Не удалось обновить пользователя","Failure keywords":"Ключевые слова сбоя","Failure reason":"Причина сбоя","Fair":"Удовлетворительно","Fallback":"Резерв","Fallback base URL":"Base URL fallback","Fallback for remaining models":"Резерв для остальных моделей","Fallback must be last":"Резервный маршрут последним","Fallback route":"Резервный маршрут","Fallback tier":"Резервный уровень","FAQ":"Часто задаваемые вопросы","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ добавлен. Нажмите \\"Сохранить настройки\\" чтобы применить.","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ удалён. Нажмите \\"Сохранить настройки\\" чтобы применить.","FAQ saved successfully":"FAQ сохранён успешно","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ обновлён. Нажмите \\"Сохранить настройки\\" чтобы применить.","FastGPT":"FastGPT","Feature in development":"Функция в разработке","Fee":"Сбор","Fee Amount":"Сумма сбора","Fetch":"Загрузить","Fetch available models for:":"Получить доступные модели для:","Fetch available models from upstream":"Получить доступные модели от вышестоящего поставщика","Fetch from Upstream":"Получить из Upstream","Fetch mode":"Режим получения","Fetch Models":"Получить модели","Fetched {{count}} model(s) from upstream":"Получено {{count}} моделей из upstream","Fetched {{count}} models":"Получено {{count}} моделей","Fetched in your browser and placed in the source field below for review. GitHub and gist page URLs are rewritten to their raw URL automatically.":"Загружается браузером и помещается в поле кода ниже для проверки. URL страниц GitHub и gist автоматически преобразуются в raw URL.","Fetching models...":"Получение моделей…","Fetching plugin source...":"Загрузка кода плагина…","Fetching prefill groups...":"Загрузка групп предварительного заполнения...","Fetching upstream prices...":"Получение цен провайдера...","Fetching upstream ratios...":"Загрузка коэффициентов upstream...","Fetching...":"Загрузка…","field":"поле","Field":"Поле","Field change details were not recorded":"Подробности изменения полей не записаны","Field Mapping":"Сопоставление полей","Field passthrough controls":"Полевые сквозные элементы управления","Field Path":"Путь к полю","Fields":"Поля","File":"Файл","File could not be verified":"Файл не проверен","File integrity verified":"Целостность файла подтверждена","File Search":"Поиск файлов","File verification":"Проверка файла","Files to Retain":"Файлов для хранения","Fill a CLI template or add a blank rule.":"Заполните шаблон CLI или добавьте пустое правило.","Fill All Models":"Заполнить все модели","Fill Codex CLI / Claude CLI Templates":"Заполнить шаблоны Codex CLI / Claude CLI","Fill entire column":"Заполнить весь столбец","Fill example (all channels)":"Подставить пример (все каналы)","Fill example (specific channels)":"Подставить пример (указанные каналы)","Fill in":"Заполнить","Fill in both Merchant ID and API Private Key before creating.":"Перед созданием заполните Merchant ID и приватный ключ API.","Fill in the credentials above to begin.":"Чтобы начать, заполните учетные данные выше.","Fill in the following info to create a new subscription plan":"Заполните следующую информацию для создания нового плана подписки","Fill in this website":"Подставить текущий сайт","Fill Related Models":"Заполнить связанные модели","Fill Template":"Заполнить шаблон","Fill template: level and active":"Заполнить шаблон: уровень и активность","Fill template: level message":"Заполнить шаблон: сообщение об уровне","Fill template: organization message":"Заполнить шаблон: сообщение об организации","Fill template: organization or role":"Заполнить шаблон: организация или роль","Fill Templates":"Заполнить шаблоны","Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.":"Укажите полное значение model из тела запроса клиента, например gpt-4o или gemini-2.5-flash. Несколько моделей разделяйте запятыми.","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"Заполнять thoughtSignature только для каналов Gemini/Vertex, использующих формат OpenAI","Filled {{count}} model(s)":"Заполнено {{count}} моделей","Filled {{count}} related model(s)":"Заполнено {{count}} связанных моделей","Filter":"Фильтр","Filter by API key...":"Фильтр по API-ключу...","Filter by channel ID":"Фильтр по ID канала","Filter by group":"Фильтр по группе","Filter by MjProxy task ID":"Фильтр по ID задачи MjProxy","Filter by model name":"Фильтр по имени модели","Filter by model name...":"Фильтр по имени модели...","Filter by model...":"Фильтровать по модели...","Filter by name or ID...":"Фильтр по имени или ID...","Filter by name, ID, or key...":"Фильтровать по имени, ID или ключу...","Filter by name...":"Фильтр по имени...","Filter by node":"Фильтр по узлу","Filter by price field":"Фильтр по полю цены","Filter by ratio type":"Фильтровать по типу коэффициента","Filter by request ID":"Фильтр по ID запроса","Filter by task ID":"Фильтр по ID задачи","Filter by token name":"Фильтр по имени токена","Filter by username":"Фильтр по имени пользователя","Filter by username, name or email...":"Фильтр по имени пользователя, имени или email...","Filter Dashboard Models":"Фильтровать модели панели управления","Filter mappings":"Фильтр сопоставлений","Filter models by provider, group, type, endpoint, and tags.":"Фильтруйте модели по поставщику, группе, типу, endpoint и тегам.","Filter models by type, endpoint, vendor, group and tags":"Фильтровать модели по типу, точке доступа, поставщику, группе и тегам","Filter models...":"Фильтровать модели...","Filter plugins...":"Фильтр плагинов...","Filter the model analytics view by time range and user.":"Фильтруйте представление аналитики моделей по периоду и пользователю.","Filter the traffic flow view by time range and user.":"Фильтруйте представление потока трафика по диапазону времени и пользователю.","Filter...":"Фильтр...","Filters":"Фильтры","Filters active":"Фильтры активны","Final Consumed":"Итоговое потребление","Final cost = base × multiplier when conditions match":"Итоговая стоимость = база × множитель, если условия совпадают","Final price multiplier (0.95 = 5% discount":"Конечный множитель цены (0.95 = скидка 5%","Finance":"Финансы","Find":"Найти","Find the billing group.":"Определите тарифную группу.","Find the ratio.":"Определите коэффициент.","Finish reordering":"Завершить сортировку","Finish Time":"Время завершения","Finished requests":"Завершённые запросы","First API request":"Первый API-запрос","First token":"Первый токен","First/Last Frame to Video":"Первый/последний кадр в видео","Fix Abilities":"Восстановить согласованность каналов","Fix order":"Исправить порядок","Fix the Request Header Override JSON first":"Сначала исправьте JSON переопределения заголовков","Fuzzy search keywords must be at least 2 characters long":"Ключевые слова для нечёткого поиска должны содержать не менее 2 символов","Fixed":"Исправлено","Fixed abilities: {{success}} succeeded, {{fails}} failed":"Согласованность каналов восстановлена: успешно {{success}}, ошибок {{fails}}","Fixed channel constraint":"Ограничение фиксированного канала","Fixed fee per request":"Фиксированная плата за запрос","Fixed price":"Фиксированная цена","Fixed price (USD)":"Фиксированная цена (USD)","Fixed request price":"Фиксированная цена запроса","Flexible integration":"Гибкое подключение","Floating":"Плавающая","Flow":"Поток","Flow Filters":"Фильтры потока","Flow width metric":"Метрика ширины потока","FluentRead extension not detected. Please ensure it is installed and active.":"Расширение FluentRead не обнаружено. Убедитесь, что оно установлено и активно.","Flush interval (minutes)":"Интервал записи (минуты)","Follow the guided steps to prepare your workspace before the first login.":"Следуйте пошаговым инструкциям, чтобы подготовить рабочее пространство перед первым входом.","Follow user group":"Группа пользователя","Font":"Шрифт","Footer":"Подвал","Footer text displayed at the bottom of pages":"Текст нижнего колонтитула, отображаемый внизу страниц","footer.columns.about.links.aboutProject":"О проекте","footer.columns.about.links.contact":"Связаться с нами","footer.columns.about.links.features":"Возможности","footer.columns.about.title":"О нас","footer.columns.docs.links.apiDocs":"Документация API","footer.columns.docs.links.installation":"Руководство по установке","footer.columns.docs.links.quickStart":"Быстрый старт","footer.columns.docs.title":"Документация","footer.columns.related.links.midjourney":"MjProxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"Один API","footer.columns.related.title":"Связанные проекты","footer.defaultCopyright":"Все права защищены.","footer.newapi.projectAttributionSuffix":"Все права защищены. Разработано участниками проекта.","For advanced custom channels this applies only to /v1/responses routes without protocol conversion.":"Для расширенных пользовательских каналов это действует только для маршрутов /v1/responses без преобразования протокола.","GitHub ID is empty!":"GitHub ID не указан!","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"Для каналов, добавленных после 10 мая 2025 г., не нужно удалять \\".\\" из имён моделей при развёртывании","For private deployments, format: https://fastgpt.run/api/openapi":"Для частных развертываний, формат: https://fastgpt.run/api/openapi","For this channel, map the model name in client requests to the model name sent upstream.":"Для этого канала сопоставьте имя модели в запросе клиента с именем модели, отправляемым провайдеру.","For this website, you can enter: {{domain}}":"Для этого сайта можно указать: {{domain}}","Force a syntactically valid JSON response":"Принудительно возвращать синтаксически корректный JSON","Force AUTH LOGIN":"Принудительный AUTH LOGIN","Force Format":"Принудительный формат","Force format response to OpenAI standard (OpenAI channel only)":"Принудительно форматировать ответ в соответствии со стандартом OpenAI (только для канала OpenAI)","Force JSON object or schema-conforming output":"Принудительно вернуть JSON или соответствующий схеме вывод","Force operation":"Выполнить принудительно","Force SMTP authentication using AUTH LOGIN method":"Принудительная аутентификация SMTP с использованием метода AUTH LOGIN","Force-disabled two-factor authentication for the user":"Двухфакторная аутентификация пользователя принудительно отключена","Forest Whisper":"Лесной шёпот","Forgot password":"Забыли пароль","Forgot password?":"Забыли пароль?","Form reset to saved values":"Форма сброшена к сохранённым значениям","Format":"Формат","Format conversion is unavailable; the client must use a format the upstream supports":"Преобразование формата недоступно; клиент должен использовать формат, который поддерживает вышестоящий сервис","Format JSON":"Форматировать JSON","Format:":"Формат:","Format: Access Key ID|Secret Access Key":"Формат: Идентификатор ключа доступа|Секретный ключ доступа","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"Формат: AccessKey|SecretKey (или просто ApiKey, если upstream — New API)","Format: Ak|Sk|Region":"Формат: Ak|Sk|Регион","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"Формат: APIKey-AppId, напр., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"Формат: APIKey|SecretKey","Format: APPID|APISecret|APIKey":"Формат: APPID|APISecret|APIKey","Format: TokenHub API Key, or legacy AppId|SecretId|SecretKey":"Формат: TokenHub API Key или устаревший AppId|SecretId|SecretKey","Got it":"Понятно","Gotify server URL cannot be empty":"Адрес сервера Gotify не может быть пустым","Gotify token cannot be empty":"Токен Gotify не может быть пустым","Forward requests directly to upstream providers without any post-processing.":"Перенаправлять запросы напрямую upstream-провайдерам без какой-либо постобработки.","Forwarding Routes":"Маршруты пересылки","Frames per second":"Кадров в секунду","Free":"Свободно","Free: {{free}} / Total: {{total}}":"Свободно: {{free}} / Всего: {{total}}","Frequency Penalty":"Штраф за частоту","Friendly name to identify this channel":"Дружественное имя для идентификации этого канала","From Address":"Отправитель","From IO.NET deployment":"Из развертывания IO.NET","From marketplace index":"Из индекса каталога","From model redirect, not yet added to models list":"Из перенаправления модели, еще не добавлено в список моделей","Full API Key":"Полный ключ API","Full Base URL (supports":"Полный базовый URL (поддерживает","Group #{{index}} category name cannot exceed 50 characters":"Название категории группы № {{index}} не может превышать 50 символов","Group #{{index}} category name duplicates another group":"Название категории группы № {{index}} совпадает с другой группой","Group #{{index}} contains disallowed content":"Группа № {{index}} содержит недопустимое содержимое","Group #{{index}} description cannot exceed 200 characters":"Описание группы № {{index}} не может превышать 200 символов","Group #{{index}} has a URL that cannot be parsed: {{error}}":"Группа № {{index}}: не удаётся разобрать URL: {{error}}","Group #{{index}} has an invalid URL format":"Группа № {{index}}: неверный формат URL","Group #{{index}} is missing the category name field":"В группе № {{index}} отсутствует поле названия категории","Group #{{index}} is missing the slug field":"В группе № {{index}} отсутствует поле slug","Group #{{index}} is missing the URL field":"В группе № {{index}} отсутствует поле URL","Group #{{index}} slug can only contain letters, numbers, underscores and hyphens":"Slug группы № {{index}} может содержать только буквы, цифры, подчёркивания и дефисы","Group #{{index}} slug cannot exceed 100 characters":"Slug группы № {{index}} не может превышать 100 символов","Group #{{index}} URL cannot exceed 500 characters":"URL группы № {{index}} не может превышать 500 символов","Full Code":"Полный код","Full input length":"Полная длина входа","Full input length override":"Задать полную длину входного контекста","Full JSON":"Полный JSON","Full layout":"Полная разметка","Full source":"Полный исходный код","Full upstream catalog":"Полный каталог источника","Full width":"Полная ширина","Function calling":"Вызов функций","Functions":"Функции","Gateways":"Шлюзы","Group name already exists":"Имя группы уже существует","Group name and type cannot be empty":"Имя и тип группы не могут быть пустыми","GC Count":"Кол-во GC","GC executed":"GC выполнен","GC execution failed":"Ошибка выполнения GC","Gemini":"Gemini","Gemini and OpenAI audio prices differ for this model. Use separate billing model names to convert them.":"У этой модели разные аудиотарифы для Gemini и OpenAI. Для преобразования используйте отдельные имена расчётных моделей.","Gemini Generate Content to OpenAI Chat":"Gemini Generate Content в OpenAI Chat","Gemini Generate Content to OpenAI Responses":"Gemini Generate Content в OpenAI Responses","Gemini Image 4K":"Gemini Image 4K","Gemini only":"Только Gemini","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"Gemini продолжит автоматически определять режим мышления, даже если адаптер отключен. Включайте это только тогда, когда вам нужен более тонкий контроль над ценообразованием и бюджетированием.","General":"Общие","General Settings":"Общие настройки","Generate":"Создать","Generate Lyrics":"Создать текст песни","Generate Midjourney images through MjProxy":"Генерация изображений Midjourney через MjProxy","Generate Midjourney images through MjProxyPlus":"Генерация изображений Midjourney через MjProxyPlus","Generate Music":"Создать музыку","Generate music and lyrics through SunoAPI":"Генерация музыки и текстов песен через SunoAPI","Generate new backup codes for account recovery":"Сгенерировать новые резервные коды для восстановления аккаунта","Generate New Codes":"Сгенерировать новые коды","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"Создавайте токены на странице «Токены». Их можно ограничить моделями, группами, IP и лимитами частоты.","Generated image":"Сгенерированное изображение","Generating new codes will invalidate all existing backup codes.":"Генерация новых кодов аннулирует все существующие резервные коды.","Generating...":"Создание...","Generation quality preset":"Пресет качества генерации","Generation was interrupted":"Генерация была прервана","Generic cache":"Общий кэш","Get advice":"Получить совет","Get one here":"Получить здесь","Get started":"Начало работы","Get Started":"Начать","GitHub":"GitHub","GitHub rate limit reached. Try again later.":"Достигнут лимит запросов GitHub. Повторите попытку позже.","Give the group a recognizable name and optional description.":"Дайте группе узнаваемое имя и необязательное описание.","Give this group a recognizable name.":"Дайте этой группе узнаваемое имя.","Header override must be valid JSON format":"Переопределение заголовков должно быть в валидном формате JSON","Global and channel settings":"Глобальные настройки и настройки канала","Global configuration and administrative tools.":"Глобальная конфигурация и административные инструменты.","Global Coverage":"Глобальное покрытие","Global default":"Глобальное значение по умолчанию","Global default: {{mode}}":"Общий режим: {{mode}}","Global Model Configuration":"Глобальная конфигурация модели","Global throughput":"Общая пропускная способность","Go Back":"Назад","Go back and edit":"Вернуться и изменить","Go to Dashboard":"Перейти в панель управления","Go to first page":"Перейти на первую страницу","Go to GitHub":"Перейти на GitHub","Go to home":"На главную","Go to io.net API Keys":"Перейти к ключам API io.net","Go to last page":"Перейти на последнюю страницу","Go to next page":"Перейти на следующую страницу","Go to page {{page}}":"Перейти на страницу {{page}}","Go to previous page":"Перейти на предыдущую страницу","Go to settings":"Перейти к настройкам","Go to Settings":"Перейти к настройкам","Good":"Хорошо","Gotify Application Token":"Токен приложения Gotify","Gotify Documentation":"Документация Gotify","Gotify Server URL":"URL-адрес сервера Gotify","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus и т. д.","GPU count":"Количество GPU","Granted at":"Выдано","Greater than":"Больше","Greater Than":"Больше","Greater than or equal":"Больше или равно","Greater Than or Equal":"Больше или равно","Grok":"Grok","Grok Settings":"Настройки Grok","Group":"Группа","Group {{path}}":"Группа {{path}}","Group & Quota":"Группа и квота","Group added. Click \\"Save Settings\\" to apply.":"Группа добавлена. Нажмите \\"Сохранить настройки\\", чтобы применить.","Group channels by tag for batch operations":"Группировать каналы по тегу для пакетных операций","Group config overrides global limits, shares the same period":"Конфигурация группы переопределяет глобальные лимиты, использует тот же период","Group deleted. Click \\"Save Settings\\" to apply.":"Группа удалена. Нажмите \\"Сохранить настройки\\", чтобы применить.","Group description":"Описание группы","Group details":"Детали группы","Group identifier":"Идентификатор группы","Group is required":"Группа обязательна","Group name":"Имя группы","Group Name":"Имя группы","Group name cannot be changed when editing.":"Имя группы нельзя изменить при редактировании.","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"Цены по группам нельзя развернуть, потому что это не стандартное выражение тарифов по уровням.","Group Pricing":"Тарификация групп","Group pricing usage guide":"Руководство по групповой тарификации","group ratio":"коэффициент группы","Group Ratio":"Групповой коэффициент","Group ratios":"Соотношения группы","Group settings":"Настройки групп","Group updated. Click \\"Save Settings\\" to apply.":"Группа обновлена. Нажмите \\"Сохранить настройки\\", чтобы применить.","Group visibility":"Видимость групп","Group-based rate limits":"Лимиты скорости на основе групп","Group:":"Группа:","Group: {{ratio}}x":"Группа: {{ratio}}x","Grouped monitor status from Uptime Kuma":"Состояние групп мониторинга из Uptime Kuma","Groups":"Группы","Groups *":"Группы *","Groups that users can select when creating API keys.":"Группы, которые пользователи могут выбрать при создании ключей API.","Growth":"Рост","Guardrails":"Ограничители","Guest":"Гость","h":"h","Haiku Model":"Модель Haiku","Hang tight while we finish connecting your account.":"Подождите, пока мы завершим подключение вашего аккаунта.","Hang tight while we securely link this account to your profile.":"Подождите, пока мы безопасно привяжем этот аккаунт к вашему профилю.","Hardware":"Аппаратное обеспечение","Hardware type":"Тип оборудования","Has been disabled":"Успешно отключено","Has been enabled":"Успешно включено","Has been invalidated":"Аннулировано","Have a Code?":"Есть код?","Header":"Заголовок","header instead.":".","Header Name":"Имя заголовка","Header navigation":"Навигация по заголовку","Header Override":"Переопределение заголовка","Header Passthrough (X-Request-Id)":"Проброс заголовка (X-Request-Id)","Header Value (supports string or JSON mapping)":"Значение заголовка (строка или JSON-маппинг)","header. Anthropic-formatted endpoints accept the":". Эндпоинты формата Anthropic вместо этого принимают","Health":"Здоровье","Health check timeout threshold (seconds)":"Порог длительности проверки (секунды)","Healthy":"В норме","Hidden":"Скрыта","Hidden — verify to reveal":"Скрыто — подтвердите, чтобы показать","Hidden {{count}} models from model square":"Скрыто моделей в каталоге: {{count}}","Hidden from {{group}}":"Скрыта от {{group}}","Hidden from catalog":"Скрыто в каталоге","Hidden from the model square by metadata policy.":"Модель скрыта из каталога настройками метаданных.","Hide":"Скрыть","Hide API key":"Скрыть API ключ","Hide from catalog":"Скрыть из каталога","Hide from model square":"Скрыть в каталоге моделей","Hide redirect panel":"Скрыть панель перенаправлений","ID is empty":"ID не указан","ID is empty!":"ID не указан!","Hide selected models from model square":"Скрыть выбранные модели в каталоге","Hide sensitive data":"Скрыть конфиденциальные данные","Hide setup guide":"Скрыть руководство по настройке","High Performance":"Высокая производительность","High-risk operation confirmation":"Подтверждение высокорисковой операции","High-risk status code retry confirmation text":"Я понимаю риски многократного списания и сбоя и подтверждаю включение","High-risk status code retry input mismatch":"Введённый текст не совпадает с требуемым.","High-risk status code retry input placeholder":"Введите в точности текст выше","High-risk status code retry risk check 1":"Я полностью прочитал и понял все предупреждения выше, включая разрушительные последствия принудительных повторов для кодов 504 и 524.","High-risk status code retry risk check 2":"Я связался с вышестоящим провайдером и подтвердил, что текущий тайм-аут вызван узким местом вышестоящего сервиса, которое сейчас нельзя устранить на его стороне, поэтому принудительный повтор используется только как компромисс.","High-risk status code retry risk check 3":"Я добровольно принимаю все риски двойного или многократного списания и не буду создавать issue или жалобы в репозитории этого проекта из-за аномалий оплаты, вызванных такими повторами.","High-risk status code retry risk check 4":"Я добровольно принимаю риски для стабильности системы, включая серьёзные тайм-ауты клиента и возможный сбой сервиса, и несу ответственность за возникшую очередь запросов или недоступность сервиса.","High-risk status code retry risk disclaimer":"### ⚠️ Операция высокого риска: предупреждение и отказ от ответственности при повторах для кодов 504/524\\n\\nПо умолчанию проект не повторяет запросы при кодах `400` (неверный запрос), `504` (тайм-аут шлюза) и `524` (истекло время ожидания). Коды 504 и 524 обычно означают, что **запрос успешно дошёл до вышестоящего ИИ-сервиса и обработка на его стороне уже началась, но соединение закрылось из-за слишком долгой обработки вышестоящим сервисом**. Обычно это указывает на узкое место именно вышестоящего сервиса.\\n\\nВключение перенаправления или повторов для таких кодов тайм-аута — **операция чрезвычайно высокого риска**. Перед включением внимательно прочитайте и поймите следующие последствия:\\n\\n#### 1. Основные риски (прочитайте внимательно)\\n\\n1. 💸 Двойное или многократное списание: большинство вышестоящих ИИ-провайдеров **всё равно взимают плату** за запросы, обработка которых началась, но была прервана сетевым тайм-аутом (504/524). Повтор отправляет новый запрос вышестоящему сервису и может привести к **двойному или многократному списанию**.\\n2. ⏳ Серьёзный тайм-аут клиента: если запрос уже завершился по тайм-ауту, повторы могут многократно увеличить общую задержку и вызвать неприемлемое ожидание у конечного клиента.\\n3. 💥 Очередь запросов и сбой сервиса: принудительные повторы дольше занимают потоки и соединения. При высокой нагрузке это может создать серьёзную **очередь запросов**, исчерпать ресурсы, вызвать каскадный отказ и остановить прокси-сервис.\\n\\n#### 2. Принятие рисков\\n\\nЕсли вы всё же включаете эту функцию, вы подтверждаете следующее:","Higher priority channels are selected first":"Каналы с более высоким приоритетом выбираются первыми","Historical capitalization":"Исторический регистр","Historical tokens":"Предыдущие токены","Historical Usage":"История использования","History of MjProxy-style image tasks.":"История задач генерации изображений в стиле MjProxy.","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"Критерий попадания: если в usage есть кэшированные токены, это считается попаданием.","Image count {{count}}":"Количество изображений {{count}}","Hit Rate":"Частота попаданий","Hit tier":"Совпавший уровень","Home":"Главная","Home Page Content":"Содержимое главной страницы","Homepage URL":"URL главной страницы","Hook":"Хук","Hostname or IP of your SMTP provider":"Имя хоста или IP-адрес вашего SMTP-провайдера","Hour":"Час","Hour of day":"Час суток","Hourly token usage by model across the last 24 hours":"Почасовое использование токенов по моделям за последние 24 часа","Hourly token usage by model over the past 24 hours":"Почасовое использование токенов по моделям за последние 24 часа","hours":"часов","How a call is priced":"Как рассчитывается стоимость вызова","How a session is identified and which channel it keeps.":"Как определяется сессия и какой канал она сохраняет.","How client credentials are sent to the token endpoint":"Как учетные данные клиента отправляются на конечную точку токена","How frequently the system checks auto-disabled channels for recovery":"Как часто система проверяет автоматически отключенные каналы для восстановления","How frequently the system tests all channels":"Как часто система тестирует все каналы","How It Works":"Как это работает","How model mapping works":"Как работает сопоставление моделей","How much to charge for each US dollar of balance (Epay)":"Сколько взимать за каждый доллар США баланса (Epay)","How this model name should match requests":"Как это имя модели должно соответствовать запросам","How to deliver the resulting image":"Способ доставки изображения","Inactive disk cache cleared":"Неактивный дисковый кэш очищен","How to get an io.net API Key":"Как получить ключ API io.net","How to reset my quota?":"Как сбросить мою квоту?","How to select keys: random or sequential polling":"Как выбирать ключи: случайно или последовательный опрос","How to set up Passkey domains":"Настройка доменов ключей доступа","How will you use the platform?":"Как вы будете использовать платформу?","HTTP Protocol":"HTTP-протокол","HTTP protocol must be Auto or HTTP/1.1":"HTTP-протокол должен быть Auto или HTTP/1.1","HTTP/1.1":"HTTP/1.1","HTTP/2 Connection Shards":"Шарды соединений HTTP/2","HTTP/2 connection shards are unavailable when HTTP/1.1 is selected.":"Шарды соединений HTTP/2 недоступны при выборе HTTP/1.1.","HTTP/2 connection shards must be 1 when HTTP/1.1 is selected":"При выборе HTTP/1.1 число шардов соединений HTTP/2 должно быть 1","HTTP/2 connection shards must be between 1 and 8":"Число шардов соединений HTTP/2 должно быть от 1 до 8","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"Понятное для человека имя, отображаемое пользователям во время запросов Passkey.","I confirm enabling high-risk retry":"Я подтверждаю включение высокорискового повтора","I have read and agree to the":"Я прочитал и согласен с","I have read and understood the above compliance reminder":"Я прочитал и понял приведенное выше напоминание о соответствии","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"Я прочитал и понял приведенное выше напоминание о соответствии, признаю связанные правовые риски и подтверждаю, что несу юридическую ответственность за развертывание, эксплуатацию и взимание платы.","I understand that disabling 2FA removes its authenticator and backup codes.":"Я понимаю, что отключение 2FA удалит привязку приложения-аутентификатора и резервные коды.","I understand that disabling 2FA will remove all protection and backup codes":"Я понимаю, что отключение 2FA удалит всю защиту и резервные коды","Icon":"Значок","Icon file must be 100 KB or smaller":"Файл иконки должен быть не более 100 КБ","Icon identifier (e.g. github, gitlab)":"Идентификатор иконки (например, github, gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"Если ошибка вышестоящего уровня содержит любое из этих ключевых слов (без учета регистра), канал будет автоматически отключен.","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"При успешной авторизации сгенерированный JSON будет вставлен в поле ключа. Сохраните канал, чтобы применить изменения.","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"При подключении к upstream One API или проектам-ретрансляторам New API используйте тип OpenAI, если только вы точно знаете, что делаете","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"Если группа auto включена по умолчанию, новые токены создаются с auto вместо пустой группы.","If left blank, the system may use a different website address and Passkey sign-in can fail here.":"Если оставить поле пустым, система может использовать адрес другого сайта, и вход с Passkey здесь может не работать.","If no preceding rule matched: {{condition}}":"Если предыдущие правила не совпали: {{condition}}","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"Если привязанный канал не работает и повторная попытка удалась через другой канал, привязка обновляется на успешный канал.","If this keeps happening, please report it on GitHub Issues.":"Если проблема повторяется, сообщите о ней в GitHub Issues.","If users already have Passkeys, changing this domain may require them to sign in another way and set up their Passkeys again.":"Если у пользователей уже есть Passkey, после смены домена им может потребоваться войти другим способом и настроить Passkey заново.","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"Если вы предоставляете услуги генеративного ИИ населению материкового Китая, вы будете выполнять юридические обязанности, включая регистрацию, оценку безопасности, безопасность контента, обработку жалоб, маркировку сгенерированного контента, хранение журналов и защиту персональных данных.","If your Passkey belongs to another website, start sign-in there:":"Если ключ доступа относится к другому сайту, войдите на том сайте:","Ignore":"Игнорировать","Ignore this version":"Игнорировать эту версию","Ignored upstream models":"Игнорируемые upstream-модели","image":"изображение","Image":"Изображение","Image Cache":"Кэш изображений","Image cache input price":"Цена ввода изображений из кэша","Image count":"Количество изображений","Image Generation":"Генерация изображений","Image In":"Вход изображения","Image input":"Ввод изображения","Image input price":"Цена входного изображения","Image not available":"Изображение недоступно","Image Out":"Выход изображения","Image output price":"Цена выходного изображения","Image Preview":"Предпросмотр изображения","Image prices with count, size or quality adjustments must be converted manually.":"Тарифы изображений с поправками на количество, размер или качество необходимо преобразовать вручную.","Image ratio":"Коэффициент изображения","Image to Video":"Изображение в видео","Image Tokens":"Токены изображений","Imagine the pricing table has three groups: default (ratio 1.0), premium (ratio 0.5), and vip (ratio 0.8). Users whose account is in the vip group get user-level perks, and premium is a cheaper channel pool that users can pick for their tokens.":"Представьте, что в таблице тарифов три группы: default (коэффициент 1,0), premium (коэффициент 0,5) и vip (коэффициент 0,8). Пользователи из группы vip получают привилегии на уровне аккаунта, а premium — более дешёвый пул каналов, который пользователи могут выбирать для своих токенов.","Import from URL":"Импорт по URL","Import to CC Switch":"Импорт в CC Switch","Input Price: High to Low":"Цена ввода: от высокой к низкой","Input Price: Low to High":"Цена ввода: от низкой к высокой","Insert a new priority tier":"Новый уровень приоритета","Invalid announcements format: {{error}}":"Неверный формат объявлений: {{error}}","Invalid API info format: {{error}}":"Неверный формат информации об API: {{error}}","Invalid authorization code":"Недействительный код авторизации","Invalid Bark push URL":"Недопустимый URL push-уведомлений Bark","Invalid billing expression for model {{model}}: {{error}}":"Недопустимое выражение тарификации для модели {{model}}: {{error}}","Important":"Важно","Invalid channel ID":"Неверный ID канала","Importing metadata does not add channels, enable model access, or configure prices.":"Импорт метаданных не добавляет каналы, не открывает доступ к моделям и не задаёт цены.","Invalid channel priority move":"Недопустимое изменение приоритета канала","Invalid channel settings format: {{error}}":"Неверный формат настроек канала: {{error}}","In BotFather, open Login Widget, register this callback URL, and copy the Client ID and Client Secret. Existing Telegram bindings will continue to work after configuration.":"Откройте Login Widget в BotFather, зарегистрируйте этот URL обратного вызова и скопируйте Client ID и Client Secret. После настройки существующие привязки Telegram продолжат работать.","In JSON, the user group is the outer key and the billing group is the inner key. The example below means: vip users pay 0.8 when billed as standard, and 0.3 when billed as premium.":"В JSON внешний ключ — группа пользователя, внутренний — тарифная группа. Пример ниже означает: пользователи vip платят 0,8 по standard и 0,3 по premium.","In Progress":"Выполняется","Invalid Discovery URL. Only http and https are supported":"Недопустимый Discovery URL. Поддерживаются только http и https","Invalid email address":"Недопустимый адрес электронной почты","In the visual editor these appear as Extra visible and Hidden. In JSON, +: (or no prefix) adds a group and -: removes one.":"В визуальном редакторе это отображается как «Дополнительно видимая» и «Скрыта». В JSON префикс +: (или его отсутствие) добавляет группу, а -: удаляет её.","Invalid FAQ format: {{error}}":"Неверный формат FAQ: {{error}}","Invalid Gotify server URL":"Недопустимый адрес сервера Gotify","Invalid ID":"Недопустимый ID","In:":"Вх:","Invalid input":"Недопустимые входные данные","Invalid input {{error}}":"Недопустимые входные данные {{error}}","incident":"инцидент","incidents":"инцидентов","Incidents":"Инциденты","Include {{price}}":"Включить {{price}}","Include at least one price variable.":"Включите хотя бы одну ценовую переменную.","Include Group":"Включить группу","Include Model":"Включить модель","Invalid parameters":"Недопустимые параметры","Include name":"Включить название","Invalid Passkey login state":"Недопустимое состояние входа по Passkey","Include quota":"Включить квоту","Include Rule Name":"Включить имя правила","Invalid Passkey verification request":"Недопустимый запрос проверки Passkey","Includes changes that require security verification, such as password, two-factor settings, and account deletion.":"Включает изменения, требующие подтверждения безопасности, например пароль, настройки двухфакторной аутентификации и удаление аккаунта.","Includes request rules":"Включает правила запросов","Invalid provider ID":"Недопустимый ID поставщика","Invalid request":"Недопустимый запрос","Invalid request body.":"Недопустимое тело запроса.","Invalid request parameter format":"Неверный формат параметров запроса","Invalid request parameters: {{error}}":"Недопустимые параметры запроса: {{error}}","Includes tool-call surcharge":"Включает доплату за вызов инструмента","Including failed requests, 0 = unlimited":"Включая неудачные запросы, 0 = без ограничений","Incoming path":"Входящий путь","Incoming path is required":"Входящий путь обязателен","Incoming path must be unique":"Входящий путь должен быть уникальным","Incoming path must not include query":"Входящий путь не должен содержать query","Incoming path must start with /":"Входящий путь должен начинаться с /","Invalid subscription ID":"Недопустимый ID подписки","Invalid top-up amount":"Недопустимая сумма пополнения","Invalid top-up quota":"Недопустимая квота пополнения","Invalid Uptime Kuma group settings format: {{error}}":"Неверный формат настроек групп Uptime Kuma: {{error}}","Invalid user ID":"Недопустимый ID пользователя","Incomplete":"Не завершено","Invalid warning type":"Недопустимый тип предупреждения","Invalid Webhook URL":"Недопустимый адрес Webhook","Increase quota for user “{{name}}”":"Увеличить квоту пользователя «{{name}}»","Increase user quota":"Увеличить квоту пользователя","Increased user quota by {{quota}}":"Квота пользователя увеличена на {{quota}}","Index":"Индекс","Invitation code bonus {{quota}}":"Бонус за код приглашения {{quota}}","Index request failed with HTTP {{status}}":"Запрос индекса завершился ошибкой HTTP {{status}}","Invitation quota is insufficient!":"Недостаточно квоты за приглашения!","Index URL":"URL индекса","Information unavailable":"Информация недоступна","Inherit global Auto order":"Наследовать глобальный порядок Auto","Inherit global default":"Наследовать общий режим","Inherit vendor icon":"Использовать иконку поставщика","Inherited":"Наследуется","Inherited from {{vendor}}":"От поставщика {{vendor}}","Initial quota given to new users":"Начальная квота, предоставляемая новым пользователям","Initial quota given to new users ({{formattedQuota}})":"Начальная квота, предоставляемая новым пользователям ({{formattedQuota}})","Initialization failed, please try again.":"Инициализация не удалась, попробуйте ещё раз.","Initialize":"Инициализировать","Initialize system":"Инициализация системы","Initializing…":"Инициализация…","Inpaint":"Инпейнтинг","Input":"Ввод","Input mode":"Режим ввода","Input pre-consume multiplier":"Множитель предсписания за ввод","Input price":"Цена входа","Input price is required before saving dependent prices.":"Перед сохранением зависимых цен укажите входную цену.","Input token rate":"Скорость входных токенов","Input tokens":"Входные токены","Input Tokens":"Входные токены","Inset":"Встроенная","Inspect requests, errors, and billing details":"Проверяйте запросы, ошибки и детали оплаты","Inspect user prompts":"Просмотр запросов пользователя","Install":"Установить","Install {{name}}":"Установка {{name}}","Install and enable":"Установить и включить","Install, configure, test, and remove task plugins.":"Установка, настройка, проверка и удаление плагинов задач.","Installed":"Установленные","Installed {{name}} v{{version}}":"{{name}} v{{version}} установлен","Installed v{{from}} → marketplace v{{to}}":"Установлено v{{from}} → магазин v{{to}}","Installed v{{installed}} not listed":"v{{installed}} установлена, нет в индексе","Installed version is not in this index":"Установленной версии нет в этом индексе","Installing...":"Установка…","Instance":"Экземпляр","Instances":"Экземпляры","Insufficient balance":"Недостаточно средств","Insufficient permission to adjust this user":"Недостаточно прав для изменения квоты этого пользователя","Integrations":"Интеграции","Integrity check failed":"Проверка целостности не пройдена","Integrity hash":"Хеш целостности","Integrity verification unavailable in this environment":"Проверка недоступна в этой среде","Inter-group overrides":"Переопределения между группами","Inter-group ratio overrides":"Переопределения соотношений между группами","Interface Language":"Язык интерфейса","Internal Notes":"Внутренние заметки","Internal notes (not shown to users)":"Внутренние заметки (не показываются пользователям)","Internal Server Error!":"Внутренняя ошибка сервера!","Interval must be at least 1 minute":"Интервал должен быть не менее 1 минуты","Invalid (NaN)":"Недопустимо (NaN)","Invalid adjustment parameters":"Недопустимые параметры изменения квоты","Invalid channel header override":"Некорректное переопределение заголовков канала","Invalid channel proxy":"Некорректная настройка прокси канала","Invalid chat link. Please contact the administrator.":"Неверная ссылка на чат. Пожалуйста, обратитесь к администратору.","Invalid chat link. Please contact your administrator.":"Недействительная ссылка чата. Обратитесь к администратору.","Invalid code":"Неверный код","Invalid expression syntax":"Недопустимый синтаксис выражения","Invalid inference server address":"Недопустимый адрес сервера вывода","Invalid items format":"Неверный формат элементов","Invalid JSON":"Некорректный JSON","Invalid JSON format":"Неверный формат JSON","Invalid JSON format or values out of allowed range":"Неверный формат JSON или значения вне допустимого диапазона","Invalid JSON in parameter override template":"Недопустимый JSON в шаблоне переопределения параметров","Invalid JSON string.":"Недопустимая строка JSON.","Invalid model mapping format":"Неверный формат сопоставления моделей","Invalid Passkey domain. Enter a domain without a scheme, port, path or wildcard.":"Недопустимый домен ключа доступа. Введите домен без протокола, порта, пути и подстановочных символов.","Join the same priority tier":"Присоединиться к тому же уровню приоритета","Key deleted":"Ключ удалён","Key disabled":"Ключ отключён","Key enabled":"Ключ включён","Invalid Passkey registration response":"Неверный ответ на регистрацию Passkey","Key index out of range":"Индекс ключа вне диапазона","Invalid Passkey response":"Недопустимый ответ Passkey","Invalid payment redirect URL":"Недопустимый URL перенаправления для оплаты","Invalid pricing value":"Недопустимое значение цены","Invalid reset link, please request a new password reset":"Недействительная ссылка для сброса пароля, пожалуйста, запросите сброс пароля заново","Invalid reset link, please request a new password reset.":"Недействительная ссылка для сброса, пожалуйста, запросите новый сброс пароля.","Invalid response":"Некорректный ответ","Invalid rules JSON format":"Неверный формат JSON правил","Invalid status code mapping entries: {{entries}}":"Недопустимые записи маппинга кодов состояния: {{entries}}","Invalid status code rules":"Недопустимые правила кодов состояния","Invalid status code rules: {{tokens}}":"Недопустимые правила кодов состояния: {{tokens}}","Invalid vLLM server address":"Некорректный адрес сервера vLLM","Invalidate":"Аннулировать","Invalidated":"Аннулирована","Invert match":"Инвертировать совпадение","Invitation Code":"Код приглашения","Invitation Quota":"Квота приглашений","Invite Info":"Информация о приглашении","Invited":"Приглашен","Invited {{count}} users":"Приглашено: {{count}}","Invited by user ID":"Приглашен пользователем с ID","Invited Users":"Приглашенные пользователи","Invitee Reward":"Награда приглашенному","Inviter":"Пригласивший","Inviter ID: {{id}}":"ID пригласившего: {{id}}","Inviter Reward":"Награда приглашающему","Invites":"Приглашения","Invoke developer-defined functions with structured arguments":"Вызывать заданные разработчиком функции со структурированными аргументами","InvokeModel (legacy)":"InvokeModel (прежний API)","io.net API Key":"Ключ API io.net","io.net Deployments":"Развертывания io.net","IP":"IP","IP Address":"IP-адрес","IP Filter Mode":"Режим фильтрации IP","IP Restriction":"Ограничение IP","IP Whitelist (supports CIDR)":"Белый список IP (поддерживает CIDR)","IP: {{ip}} · Method: {{method}}":"IP: {{ip}} · Способ: {{method}}","is less than the configured maximum cache size":"меньше настроенного максимального размера кэша","is the default price; ":"— цена по умолчанию; ","It seems like the page you\'re looking for":"Похоже, страница, которую вы ищете","Items":"Элементы","Japanese":"Японский","JavaScript file":"Файл JavaScript","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"Массив JSON идентификаторов групп. Если включено ниже, новые токены будут циклически перебираться по этому списку.","JSON Editor":"Редактирование JSON","JSON format error":"Ошибка формата JSON","JSON format supports service account JSON files":"Формат JSON поддерживает JSON-файлы сервисного аккаунта","JSON is invalid at line {{line}}, column {{column}}.":"JSON недействителен в строке {{line}}, столбце {{column}}.","JSON is invalid at position {{position}}.":"JSON недействителен в позиции {{position}}.","JSON is invalid. Please check the syntax.":"JSON недействителен. Проверьте синтаксис.","JSON keys are request model names; values are upstream model names.":"Ключи JSON — имена моделей в запросах; значения — имена моделей у провайдера.","JSON map of group → description exposed when users create API keys.":"JSON-карта группы → описание, отображаемое при создании пользователями ключей API.","JSON map of group → ratio applied when the user selects the group explicitly.":"JSON-карта группы → соотношение, применяемое, когда пользователь явно выбирает группу.","JSON map of model → multiplier applied to quota billing.":"JSON-карта модели → множитель, применяемый к тарификации по квоте.","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"JSON-карта модели → стоимость в долларах США за запрос. Имеет приоритет над тарификацией на основе соотношения.","JSON mode":"Режим JSON","JSON Mode":"Режим JSON","JSON must be an object":"JSON должен быть объектом","JSON object:":"Объект JSON:","JSON structure is invalid":"Структура JSON недействительна","JSON Text":"JSON текст","Leave empty to use the site default ({{amount}})":"Оставьте пустым, чтобы использовать значение сайта по умолчанию ({{amount}})","Legacy access tokens have been retired. Create a new access token in security settings":"Устаревшие токены доступа отключены. Создайте новый токен доступа в настройках безопасности","JSON-based access control rules. Leave empty to allow all users.":"Правила контроля доступа на основе JSON. Оставьте пустым, чтобы разрешить всем пользователям.","Just now":"Только что","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"Сохранять привязку при отключении канала","Keep enabled if you need to proxy requests for different upstream accounts.":"Оставьте включённым, если нужно проксировать запросы для разных upstream-аккаунтов.","Keep enough balance before production traffic":"Поддерживайте достаточный баланс перед рабочим трафиком","Keep existing domain":"Сохранить текущий домен","Keep local":"Сохранять локальные данные","Keep original value":"Сохранить исходное значение","Keep original value (skip if target exists)":"Сохранить исходное значение (пропустить если цель существует)","Keep the domains used by existing Passkeys, one per line. If the primary domain changed from www.example.com to example.com, enter www.example.com here.":"Укажите домены существующих ключей доступа, по одному на строку. Если основной домен изменился с www.example.com на example.com, сохраните здесь www.example.com.","Keep the names users call; change what is sent upstream.":"Сохраните имена для пользователей и измените имена, отправляемые провайдеру.","Keep the platform ready":"Поддерживайте платформу в готовности","Keep the session binding when the channel is unavailable":"Сохранять привязку, если канал недоступен","Keep this above 1 minute to avoid heavy database load":"Держите это значение выше 1 минуты, чтобы избежать высокой нагрузки на базу данных","Keep this vendor":"Сохранить этого поставщика","Keep upstream names; choose what users call.":"Сохраните имена у провайдера и задайте имена для пользователей.","Keep-alive Ping":"Пинг Keep-alive","Keeps compatible responses more repeatable":"Делает совместимые ответы более воспроизводимыми","Key":"Ключ","Key Fingerprint":"Отпечаток ключа","Key Sources":"Источники ключей","Key Summary":"Сводка ключа","Key Update Mode":"Режим обновления ключа","Keys, OAuth credentials, and multi-key update behavior.":"Ключи, учетные данные OAuth и поведение обновления нескольких ключей.","Kind":"Тип","Linux DO trust level does not meet the minimum required by administrator":"Уровень доверия Linux DO ниже минимального, установленного администратором","Kling":"Kling","Knowledge Base ID":"ID базы знаний","Knowledge Base ID *":"ID базы знаний *","Knowledge cutoff":"Дата актуальности данных","Lake View":"Вид на озеро","Landing page with system overview.":"Главная страница с обзором системы.","Language preference saved":"Языковая настройка сохранена","Language Preferences":"Языковые настройки","Language preferences sync across your signed-in devices and affect API error messages.":"Языковые настройки синхронизируются на всех ваших устройствах после входа и влияют на язык сообщений об ошибках API.","Last 24h usage":"Расход за 24ч","Last 30 days uptime":"Доступность за 30 дней","Last active {{time}} · Expires {{expires}}":"Последняя активность: {{time}} · Истекает: {{expires}}","Last check time":"Время последней проверки","Last detected addable models":"Последние обнаруженные модели для добавления","Last Login":"Последний вход","Last Seen":"Последний сигнал","Last successful check":"Последняя успешная проверка","Last Tested":"Последняя проверка","Last updated":"Последнее обновление","Last updated:":"Последнее обновление:","Last Used":"Последнее использование","Last used {{time}}":"Последнее использование {{time}}","Last used:":"Последнее использование:","Latency":"Задержка","Latency check":"Проверка задержки","Latency short":"Зад.","Latency trend (last 24h)":"Тренд задержки (за 24 часа)","Later":"Позже","Later requests follow the new channel.":"Последующие запросы используют новый канал.","Latest platform updates and notices":"Последние обновления и уведомления платформы","Latest version":"Последняя версия","Lavender Dream":"Лавандовая мечта","Layout":"Макет","lead":"лидер","Leaderboards":"Рейтинги","Learn more":"Узнать больше","Learn more:":"Узнать больше:","Leave":"Выйти","Leave blank to keep the existing credential":"Оставьте пустым, чтобы сохранить существующие учетные данные","Leave blank to keep the existing key":"Оставьте пустым, чтобы сохранить существующий ключ","Leave blank unless rotating the secret":"Оставьте пустым, если не меняете секрет","Leave empty for fallback":"Оставьте пустым для резерва","Leave empty for never expires":"Оставьте пустым для бессрочного действия","Leave empty only for the final fallback split.":"Оставляйте пустым только последнюю резервную ветку.","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Оставьте пустым, чтобы отключить требование соглашения. Поддерживает Markdown, HTML или полный URL для перенаправления пользователей.","Log export is disabled":"Экспорт журналов отключён","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Оставьте пустым, чтобы отключить требование политики конфиденциальности. Поддерживает Markdown, HTML или полный URL для перенаправления пользователей.","Leave empty to disband the tag":"Оставьте пустым, чтобы удалить тег","Leave empty to keep existing key":"Оставьте пустым, чтобы сохранить существующий ключ","Leave empty to keep unchanged":"Оставьте пустым, чтобы сохранить без изменений","Log recording":"Запись журналов","Log search and export":"Поиск и экспорт журналов","Leave empty to match all models":"Оставьте пустым, чтобы сопоставлять все модели","Leave empty to use account email":"Оставьте пустым, чтобы использовать электронную почту учетной записи","Leave empty to use default":"Оставьте пустым для использования по умолчанию","Leave empty to use system temp directory":"Оставьте пустым для системного временного каталога","Leave empty to use username":"Оставьте пустым, чтобы использовать имя пользователя","Leave the final split empty as the fallback for models not matched above.":"Оставьте последний маршрут пустым как резервный для моделей, не совпавших выше.","Leave this empty only for the final fallback split; it catches client models not matched above.":"Оставляйте пустым только последнюю резервную ветку; она принимает модели клиента, не совпавшие выше.","Left to Right":"Слева направо","Legacy Format (JSON Object)":"Старый формат (JSON-объект)","Legacy format must be a JSON object":"Старый формат должен быть JSON-объектом","Legacy Format Template":"Шаблон старого формата","Legacy full-URL integration; use Advanced Custom for new channels":"Устаревшее подключение по полному URL; для новых каналов используйте «Расширенный пользовательский»","Legacy pricing is deprecated. Convert the current prices to an expression draft, then save to apply it.":"Старый режим тарификации устарел. Преобразуйте текущие цены в черновик выражения и сохраните для применения.","Legacy token":"Устаревший токен","Legal":"Юриспруденция","Less":"Меньше","Longest log time range (days)":"Максимальный период журналов (дни)","Less than":"Меньше","Less Than":"Меньше","Less than 1 day left":"Менее 1 дня","Less than or equal":"Меньше или равно","Less Than or Equal":"Меньше или равно","License":"Лицензия","Light":"Светлая","Lightning Fast":"Молниеносно быстро","Limit period":"Период ограничения","Limit Reached":"Достигнут лимит","Limit which models can be used with this key":"Ограничить модели, которые могут быть использованы с этим ключом","Limited":"Ограничено","Limits only token-specific Auto snapshots. Global Auto inheritance remains unlimited.":"Ограничивает только снимки Auto для отдельных токенов. Глобальное наследование Auto не ограничено.","Limits token selection to a probability mass":"Ограничивает выбор токенов суммарной вероятностью","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"Ссылка на ваш сайт документации","Linked account":"Привязанный аккаунт","Linked models":"Связанные модели","Linked records are counted once. Matching rules show their covered models separately.":"Каждая связанная запись учитывается один раз. Модели, охваченные правилами, считаются отдельно.","LinuxDO":"LinuxDO","LinuxDO Client ID":"ID клиента LinuxDO","LinuxDO Client Secret":"Секрет клиента LinuxDO","List of models supported by this channel. Use comma to separate multiple models.":"Список моделей, поддерживаемых этим каналом. Используйте запятую для разделения нескольких моделей.","List of origins (one per line) allowed for Passkey registration and authentication.":"Список источников (один на строку), разрешенных для регистрации и аутентификации Passkey.","List registered task plugins and bind them when creating or editing task plugin channels.":"Просматривать зарегистрированные плагины задач и привязывать их при создании или изменении каналов.","List view":"Вид списка","Listing also depends on metadata visibility and the user’s group access.":"Отображение также зависит от настроек видимости метаданных и доступа пользователя к группам.","Listing hidden":"Скрыто","Live refresh pauses when no task is running":"Автообновление приостанавливается, когда нет выполняемых задач","LLM Leaderboard":"Рейтинг LLM","LLM prompt helper":"Помощник с промптом для LLM","Load Balancing":"Балансировка нагрузки","Load metadata preview":"Загрузить предпросмотр","Load template...":"Загрузить шаблон...","Loader":"Загрузчик","Loading":"Загрузка","Loading channel details":"Загрузка сведений о канале","Loading configuration":"Загрузка конфигурации","Loading content settings...":"Загрузка настроек контента...","Loading conversation...":"Загрузка диалога...","Loading current models...":"Загрузка текущих моделей...","Loading failed":"Ошибка загрузки","Loading installed source...":"Загрузка установленного кода…","Loading maintenance settings...":"Загрузка настроек обслуживания...","Loading plugins...":"Загрузка плагинов…","Loading settings...":"Загрузка настроек...","Loading setup status…":"Загрузка статуса установки...","Loading verification methods...":"Загрузка способов подтверждения…","Loading...":"Загрузка...","Local":"Локальный","Local Billing":"Локальная тарификация","Local check":"Локальная проверка","Local Estimate (billing-usage-anthropic)":"Локальная оценка (billing-usage-anthropic)","Local Estimate (billing-usage-gemini)":"Локальная оценка (billing-usage-gemini)","Local Estimate (billing-usage-openai)":"Локальная оценка (billing-usage-openai)","Local models":"Локальные модели","Locations":"Местоположения","Locked":"Заблокировано","log":"записи","Log cleanup":"Очистка журналов","Log cleanup progress":"Ход очистки журнала","Log cleanup task started.":"Задача очистки журнала запущена.","Log Details":"Детали журнала","Log Directory":"Каталог журналов","Log File Count":"Кол-во файлов журналов","Log files older than {{value}} days will be deleted.":"Файлы журналов старше {{value}} дней будут удалены.","Log IP address for usage and error logs":"Записывать IP-адрес для журналов использования и ошибок","Log Maintenance":"Журнал обслуживания","Log Type":"Тип журнала","Low balance reminder":"Напоминание о низком балансе","Maximum 100 redemption codes can be generated at once":"За один раз можно создать не более 100 кодов активации","Logged in successfully via {{method}}":"Успешный вход через {{method}}","Logic":"Логика","Login":"Вход","Login & Authentication":"Вход и аутентификация","Login failed":"Ошибка входа","Login flow expired. Please sign in again.":"Процесс входа истёк. Войдите снова.","Login Info":"Информация о входе","Login Method":"Способ входа","Login session":"Сеанс входа","Login sessions":"Сеансы входа","Maximum number of tokens reached ({{max}})":"Достигнуто максимальное количество токенов ({{max}})","Login, security and access records":"Записи о входах, безопасности и доступе","Logo":"Логотип","Logo URL":"URL логотипа","Logs":"Журналы","Long passwords are unavailable until the password storage upgrade is complete.":"Длинные пароли будут доступны после обновления системы хранения паролей.","Look for a special ratio rule matching this user group and this billing group. If one exists, use its ratio. Otherwise use the billing group base ratio from the pricing table.":"Найдите правило особого коэффициента для этой группы пользователя и тарифной группы. Если оно есть — используется его коэффициент, иначе базовый коэффициент тарифной группы.","Low balance":"Низкий баланс","Lowest median first-token latency":"Минимальная медианная задержка первого токена","m":"m","Maintenance":"Обслуживание","Make extra groups visible to, or hide default groups from, users of a specific group.":"Показать дополнительные группы пользователям определённой группы или скрыть от них группы по умолчанию.","Make it easier for teammates to pick the right group.":"Упростите выбор правильной группы для товарищей по команде.","Make sure you understand these effects before enabling.":"Убедитесь, что понимаете эти последствия, прежде чем включать.","Manage":"Управление","Manage account bindings for this user":"Управление привязками аккаунта пользователя","Manage Bindings":"Управление привязками","Manage catalog visibility and pricing.":"Управление видимостью каталога и ценообразованием.","Manage custom OAuth providers for user authentication":"Управление пользовательскими поставщиками OAuth для аутентификации пользователей","Manage Keys":"Управление ключами","Manage local models for:":"Управление локальными моделями для:","Manage metadata, pricing, and channel connections. Each section saves separately.":"Управляйте метаданными, ценами и каналами. Каждый раздел сохраняется отдельно.","Manage multi-key status and configuration for this channel":"Управление статусом и конфигурацией нескольких ключей для этого канала","Manage Ollama Models":"Управление моделями Ollama","Manage pricing, visibility and automatic routing for your groups.":"Управляйте тарифами, видимостью и автоматической маршрутизацией групп.","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"Управление файлами журналов сервера. Файлы журналов накапливаются со временем; рекомендуется регулярная очистка.","Manage sources":"Управление источниками","Manage subscription plans and pricing.":"Управление планами подписок и ценообразованием.","Manage Subscriptions":"Управление подписками","Manage vendor details and linked model records.":"Управление данными поставщика и связанными моделями.","Manage Vendors":"Управление поставщиками","Manage your LinuxDO OAuth app":"Управлять приложением OAuth LinuxDO","Manage your security settings and account access":"Управление настройками безопасности и доступом к аккаунту","Mantle (Messages API)":"Mantle (Messages API)","Manual Disabled":"Ручное отключение","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"Сопоставление полей из ответа информации о пользователе с локальными атрибутами пользователя. Поддерживает вложенные пути (например, ocs.data.id).","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"Сопоставьте идентификаторы моделей с версиями Gemini API. Запись `default` применяется, если не найдено конкретного совпадения.","Map request model names to actual provider model names (JSON format)":"Сопоставление имён моделей запроса реальным именам моделей провайдера (формат JSON)","Map response status codes (JSON format)":"Сопоставить коды статусов ответа (JSON-формат)","Map upstream status codes to different codes":"Сопоставить коды статуса вышестоящего сервера с различными кодами","Market Share":"Доля рынка","Marketing":"Маркетинг","Marketplace":"Магазин","Marketplace installs never force past a conflict. Resolve it on the task plugins page, then install again.":"Установка из магазина никогда не игнорирует конфликт принудительно. Устраните его на странице плагинов задач и повторите установку.","Marketplace sources":"Источники магазина","Marketplace sources updated":"Источники магазина обновлены","Master instances run scheduled background tasks.":"Экземпляры master выполняют плановые фоновые задачи.","Match All (AND)":"Все совпадения (AND)","Match Any (OR)":"Любое совпадение (OR)","Match Mode":"Режим сопоставления","Minimum transfer quota is {{min}}!":"Минимальная квота для перевода — {{min}}!","Match model name exactly":"Точное совпадение имени модели","Match models containing this name":"Совпадение моделей, содержащих это имя","Match models ending with this name":"Совпадение моделей, заканчивающихся на это имя","Match models starting with this name":"Совпадение моделей, начинающихся с этого имени","Match Text":"Текст совпадения","Match Type":"Тип соответствия","Match Value":"Значение сопоставления","Match Value (optional)":"Значение сопоставления (необязательно)","Missing group ID":"Отсутствует ID группы","Matched":"Совпадение","Missing model ID":"Отсутствует ID модели","Matched models":"Модели для сопоставления","Missing parameter rule_name, or use all=true to clear everything":"Отсутствует параметр rule_name; либо используйте all=true, чтобы очистить всё","Matched Tier":"Подходящий уровень","Missing vendor ID":"Отсутствует ID поставщика","Matches models not claimed by earlier splits.":"Совпадает с моделями, не занятыми предыдущими ветками.","Matching Rules":"Правила сопоставления","Matching rules apply to metadata. Pricing is configured for each concrete model.":"Правила сопоставления применяются к метаданным. Цены задаются для конкретных моделей.","Max context tokens":"Максимум токенов контекста","Max Disk Cache Size (MB)":"Макс. размер дискового кэша (МБ)","Max Entries":"Макс. записей","Max output":"Макс. вывод","Max Requests (incl. failures)":"Макс. запросов (вкл. сбои)","Max Requests (including failures)":"Макс. запросов (включая сбои)","Max requests per period":"Макс. запросов за период","Max Retries":"Макс. повторов","Max Success":"Макс. успешных","Max successful requests":"Макс. успешных запросов","Max Successful Requests":"Макс. успешных запросов","Max Tokens":"Макс. токены","Maximum {{max}} groups selected":"Выбрано максимально допустимое число групп: {{max}}","Maximum 1000 characters. Supports Markdown and HTML.":"Максимум 1000 символов. Поддерживает Markdown и HTML.","Maximum 200 characters":"Максимум 200 символов","Maximum 500 characters. Supports Markdown and HTML.":"Максимум 500 символов. Поддерживает Markdown и HTML.","Maximum cached sessions":"Максимум сессий в кеше","Maximum check-in quota":"Максимальная квота регистрации","Maximum custom groups per token":"Максимум пользовательских групп на токен","Maximum input window":"Максимальное окно ввода","Maximum number of channels tested at the same time (1-32)":"Максимальное число одновременно проверяемых каналов (1–32)","Maximum number of tokens each user can create. Default 1000. Setting too large may affect performance.":"Максимальное количество токенов, которое может создать каждый пользователь. По умолчанию 1000. Слишком большое значение может повлиять на производительность.","Maximum number of tokens in the response":"Максимальное число токенов в ответе","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}":"Фиксированная цена модели {{model_price}}, коэффициент группы {{group_ratio}}, действие {{action}}","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}, ID {{id}}":"Фиксированная цена модели {{model_price}}, коэффициент группы {{group_ratio}}, действие {{action}}, ID {{id}}","Maximum quota amount awarded for check-in":"Максимальная сумма квоты, присуждаемая за регистрацию","Maximum retries":"Максимум повторов","Maximum tokens including hidden reasoning tokens":"Максимум токенов с учётом скрытых reasoning-токенов","Maximum tokens per response":"Максимум токенов на ответ","Maximum tokens per user":"Максимальное количество токенов на пользователя","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1, оба ≤ 2,147,483,647","May be used for training by upstream provider":"Может использоваться поставщиком для обучения","Mean queue time":"Среднее время в очереди","Mean request latency":"Средняя задержка запроса","Mean time per output token":"Среднее время на выходной токен","Mean time to first token":"Средняя задержка первого токена","Media access expired. Please try again.":"Срок доступа к медиафайлу истёк. Повторите попытку.","Media preview failed. Please try again.":"Не удалось просмотреть медиафайл. Повторите попытку.","Media pricing":"Цены для медиа","Median time-to-first-token (TTFT) sampled hourly per group":"Медианная задержка первого токена (TTFT), измеряемая ежечасно по группам","Medical Q&A, mental health support":"Медицинские Q&A, поддержка ментального здоровья","Memory":"Память","Memory Hits":"Попаданий памяти","Memory Threshold (%)":"Порог памяти (%)","Merchant ID":"ID мерчанта","Merchant ID is required":"Требуется ID мерчанта","Merge into Other":"Объединить в «Другое»","Model name already exists":"Имя модели уже существует","Model name cannot be empty":"Имя модели не может быть пустым","Merge vendors":"Объединить поставщиков","Model name is too long: {{model}}":"Слишком длинное имя модели: {{model}}","Message Priority":"Приоритет сообщения","Metadata":"Метаданные","Metadata changes":"Изменения метаданных","Metadata language":"Язык метаданных","Metadata only":"Только метаданные","Metadata sync completed":"Синхронизация метаданных завершена","Model price {{model_price}}, group ratio {{group_ratio}}":"Цена модели {{model_price}}, коэффициент группы {{group_ratio}}","Metadata sync disabled":"Синхронизация метаданных запрещена","Metadata sync failed":"Не удалось синхронизировать метаданные","Method":"Метод","Migration notes":"Примечания по миграции","min downtime":"мин простоя","Min Top-up":"Мин. пополнение","Min Top-up:":"Мин. пополнение:","Model ratio {{model_ratio}}, completion ratio {{completion_ratio}}, audio ratio {{audio_ratio}}, audio completion ratio {{audio_completion_ratio}}, group ratio {{group_ratio}}":"Коэффициент модели {{model_ratio}}, коэффициент завершения {{completion_ratio}}, коэффициент аудио {{audio_ratio}}, коэффициент завершения аудио {{audio_completion_ratio}}, коэффициент группы {{group_ratio}}","MiniMax":"MiniMax","Model ratios reset":"Коэффициенты моделей сброшены","Minimum {{amount}}":"Минимум {{amount}}","Minimum check-in quota":"Минимальная квота регистрации","Minimum LinuxDO trust level required":"Требуемый минимальный уровень доверия LinuxDO","Minimum quota amount awarded for check-in":"Минимальная сумма квоты, присуждаемая за регистрацию","Minimum recharge amount in USD":"Минимальная сумма пополнения в USD","Minimum recharge amount to qualify for this discount.":"Минимальная сумма пополнения для получения этой скидки.","Minimum top-up (optional)":"Минимальное пополнение (необязательно)","Minimum top-up (USD)":"Минимальное пополнение (USD)","Minimum top-up amount must be at least 1":"Минимальная сумма пополнения — не менее 1","Minimum top-up quantity":"Минимальное количество пополнения","Minimum topup amount: {{amount}}":"Минимальная сумма пополнения: {{amount}}","Minimum Trust Level":"Минимальный уровень доверия","Minimum:":"Минимум:","Model test":"Тест модели","Minor blips in the last 30 days":"Небольшие сбои за последние 30 дней","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"Создайте новую пару ниже или выберите существующую дальше. Когда будете готовы, нажмите Сохранить.","Minute":"Минута","minutes":"минут","Missing code":"Код отсутствует","Missing metadata":"Нет метаданных","Missing Models":"Отсутствующие модели","Missing user data from Passkey login response":"В ответе Passkey для входа отсутствуют данные пользователя","Mistral":"Mistral","MjProxy":"MjProxy","MjProxyPlus":"MjProxyPlus","Modalities":"Модальности","Modality":"Модальность","Mode":"Режим","model":"модель","Model":"Модель","Model {{model}}":"Модель {{model}}","Model Access":"Доступ к моделям","Model Analytics":"Аналитика моделей","Model Analytics Defaults":"Настройки аналитики моделей по умолчанию","Model Analytics Filters":"Фильтры аналитики моделей","Model assignments":"Привязка моделей","model billing support":"поддержка биллинга моделей","Model Call Analytics":"Аналитика вызовов моделей","Model context usage":"Использование контекста модели","Model deleted":"Модель удалена","Model deleted successfully":"Модель успешно удалена","Model Deployment":"Развертывание моделей","Model deployment service is disabled":"Сервис развертывания моделей отключен","Model Description":"Описание модели","Model details":"Сведения о модели","Model disabled successfully":"Модель успешно отключена","Model discovery uses the first key; other keys are not tested.":"Модели запрашиваются с первым ключом; остальные ключи не проверяются.","Model discovery uses the saved channel connection settings.":"Для получения моделей используются сохранённые настройки подключения канала.","Model enabled successfully":"Модель успешно включена","Model fixed pricing":"Фиксированная цена модели","Model Group":"Группа моделей","Model hidden from model square":"Модель скрыта в каталоге","Model ID is required":"Требуется ID модели","Model Limits":"Лимиты модели","Model limits enabled":"Ограничения моделей включены","Model List":"Список моделей","Model management":"Управление моделями","Model Mapping":"Сопоставление моделей","Model Mapping (JSON)":"Сопоставление моделей (JSON)","Model Mapping must be a JSON object like":"Сопоставление моделей должно быть JSON-объектом, например","Model mapping must be a JSON object with string values":"Сопоставление моделей должно быть JSON-объектом со строковыми значениями","Model mapping must be a valid JSON object":"Сопоставление моделей должно быть действительным объектом JSON","Model mapping must be valid JSON":"Сопоставление моделей должно быть допустимым JSON","Model mapping must be valid JSON format":"Сопоставление моделей должно быть в действительном формате JSON","Model mapping values must be strings":"Значения сопоставления моделей должны быть строками","Model mappings are being edited in the floating panel.":"Сопоставления моделей редактируются в плавающей панели.","Model metadata":"Метаданные модели","Model metadata saved":"Метаданные модели сохранены","Model name":"Имя модели","Model Name":"Название модели","Model Name *":"Имя модели *","Model name is required":"Название модели обязательно","Model names copied to clipboard":"Названия моделей скопированы в буфер обмена","Model not found":"Модель не найдена","Model performance metrics":"Метрики производительности моделей","Model Price":"Цена модели","Model price is not configured. Please complete model pricing in settings.":"Цена модели не настроена. Заполните тарификацию модели в настройках.","Model Price Not Configured":"Цена модели не настроена","Model prices":"Цены моделей","Model prices reset successfully":"Цены моделей успешно сброшены","Model Pricing":"Тарификация моделей","Model pricing is managed by a super administrator.":"Цены моделей задаёт суперадминистратор.","Model pricing saved":"Цены модели сохранены","Model pull failed: {{msg}}":"Ошибка тяги модели: {{msg}}","Move channels into a priority tier or between tiers. Priority values update automatically.":"Перемещайте каналы на один уровень или между уровнями. Приоритеты рассчитываются автоматически.","Multi-key channels do not support balance queries":"Каналы с несколькими ключами не поддерживают запрос баланса","Model ratio":"Коэффициент модели","Model ratios":"Коэффициенты модели","Model ratios reset successfully":"Соотношения моделей успешно сброшены","Model redirect is unavailable":"Перенаправление модели недоступно","Model redirects":"Перенаправления моделей","Model Regex":"Регулярное выражение модели","Model Regex (one per line)":"Регулярное выражение модели (по одному на строку)","Model regex cannot be empty":"Регулярное выражение модели не может быть пустым","Model scope":"Область моделей","Model selected":"Модель выбрана","Model shown in model square":"Модель отображается в каталоге","Model source":"Источник модели","Model Square":"Витрина моделей","Model square visibility":"В каталоге","Model Tags":"Теги моделей","Model to use for testing":"Модель для использования при тестировании","Model to use when testing channel connectivity":"Модель для использования при тестировании подключения канала","Model Version":"Версия модели","Model Version *":"Версия модели *","Model-scoped only":"Только по моделям","model(s) selected out of":"модель(и) выбрано из","model(s)? This action cannot be undone.":"модель(и)? Это действие нельзя отменить.","models":"моделей","Models":"Модели","Models *":"Модели *","Models & Groups":"Модели и группы","Models & Routing":"Модели и маршрутизация","Models appended successfully":"Модели успешно добавлены","Models are required":"Требуются модели","Models climbing the leaderboard":"Модели, поднимающиеся в рейтинге","Models climbing the leaderboard fastest":"Модели, быстрее всех растущие в рейтинге","Models directory":"Каталог моделей","Models Directory":"Каталог моделей","Models exposed by this channel":"Модели, доступные через этот канал","Models fetched successfully":"Модели успешно получены","Models filled to form":"Модели заполнены в форму","Models listed here skip automatic -thinking / -nothinking suffix handling. Matched names are also exempt from @-modifier parsing and 400 validation. Prefix an entry with re: to match the full model name as a Go regular expression, for example re:.*@sha256:.*":"Модели из этого списка не получают и не теряют автоматически суффиксы -thinking / -nothinking. Совпавшие имена также освобождаются от разбора модификаторов @ и проверки с ответом 400. Запись с префиксом re: — регулярное выражение Go по полному имени модели, например re:.*@sha256:.*","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"Модели из этого списка не будут автоматически добавлять или удалять суффиксы -thinking / -nothinking.","Models losing positions":"Модели, теряющие позиции","Models losing the most positions":"Модели, потерявшие больше всего позиций","Models not in list, may fail to invoke":"Модели не в списке, вызов может не сработать","Models source":"Источник моделей","Models that are being used but not configured in the system":"Модели, которые используются, но не настроены в системе","Models that skip thinking suffix processing":"Модели, пропускающие обработку суффиксов thinking","Models updated successfully":"Модели успешно обновлены","Models used on this site":"Модели этого сайта","models.dev pricing preset":"Набор цен models.dev","Modify existing subscription plan configuration":"Изменить конфигурацию существующего плана","Module availability":"Доступность модуля","MokaAI":"MokaAI","Monitor":"Мониторинг","Monitor balance, usage, and request volume":"Отслеживайте баланс, расход и объем запросов","Monitored relay requests":"Отслеживаемые ретрансляционные запросы","Month":"Месяц","Month number":"Номер месяца","Monthly":"Ежемесячно","Monthly tokens":"Токенов в месяц","months":"месяцев","Moonshot":"Moonshot","More":"Ещё","More actions":"Другие действия","More Apps":"Еще","more mapping":"больше сопоставлений","More models ({{count}})":"Другие модели ({{count}})","More rules":"Другие правила","More templates...":"Другие шаблоны…","More than 999 days left":"Более 999 дней","More...":"Подробнее...","Most-used models in the selected period and category":"Самые используемые модели в выбранном периоде и категории","Move":"Переместить","Move {{group}} down":"Переместить {{group}} вниз","Move {{group}} up":"Переместить {{group}} вверх","Move a request header":"Переместить заголовок запроса","Move affiliate rewards to your main balance":"Перевести партнерские вознаграждения на основной баланс","Move fallback to end":"Переместить резерв в конец","Move Field":"Переместить поле","Move Header":"Переместить заголовок","Move Request Header":"Переместить заголовок запроса","Move route down":"Переместить маршрут вниз","Move route up":"Переместить маршрут вверх","Move source field to target field":"Переместить исходное поле в целевое","ms":"мс","Multi-key channel: Keys will be":"Многоключевой канал: Ключи будут","Multi-Key Management":"Управление несколькими ключами","New priority: {{priority}}":"Новый приоритет: {{priority}}","New priority: {{priority}} · {{count}} channels affected":"Новый приоритет: {{priority}} · затронуто каналов: {{count}}","New user registration has been disabled by administrator":"Администратор отключил регистрацию новых пользователей","New user sign-up bonus {{quota}}":"Бонус за регистрацию {{quota}}","Multi-key management {{action}} on channel (ID: {{id}})":"Управление мультиключами {{action}} для канала (ID: {{id}})","Multi-Key Mode (multiple keys, one channel)":"Режим нескольких ключей (несколько ключей, один канал)","Multi-Key Strategy":"Стратегия нескольких ключей","Multi-key: Polling rotation":"Мульти-ключ: Циклическая ротация","Multi-key: Random rotation":"Мульти-ключ: Случайная ротация","Multi-protocol Compatible":"Совместимо с несколькими протоколами","Multi-region deployment for stable global access":"Мультирегиональное развертывание для стабильного глобального доступа","Multi-step thinking before final answer":"Многошаговые рассуждения перед итоговым ответом","Multi-user management with flexible permission allocation":"Многопользовательское управление с гибким распределением разрешений","Multilingual translation and localisation":"Многоязычный перевод и локализация","Multimodal":"Мультимодальное","Multiplier":"Множитель","Multiplier applied when":"Множитель применяется, когда","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"Множитель при использовании {{targetGroup}} группой {{userGroup}}","Multiplier for audio inputs.":"Множитель для аудиовходов.","Multiplier for audio outputs.":"Множитель для аудиовыходов.","Multiplier for completion tokens.":"Множитель для токенов завершения.","Multiplier for image processing.":"Множитель для обработки изображений.","Multiplier for prompt tokens.":"Множитель для токенов промпта.","Multipliers for recharge pricing based on user groups.":"Множители для ценообразования пополнения на основе групп пользователей.","Must be a valid URL":"Должен быть действительный URL","Must be at least 8 characters":"Должно быть не менее 8 символов","Must be greater than 0":"Значение должно быть больше 0","Must be greater than or equal to 0":"Значение должно быть не меньше 0","My Subscriptions":"Мои подписки","my-status":"мой-статус","MySQL detected":"Обнаружен MySQL","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL — реляционная база данных, готовая к продакшену. Храните учётные данные в безопасности.","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL готов к работе. Убедитесь, что настроены автоматические резервные копии и выделенный пользователь с минимально необходимыми привилегиями.","No auto-disabled keys to delete":"Нет автоматически отключённых ключей для удаления","N/A":"Н/Д","Name":"Название","Name *":"Имя *","Name for this redemption code (1-20 characters)":"Имя для этого кода активации (1-20 символов)","Name is available":"Имя доступно","Name is not available":"Имя недоступно","Name Matching Rule":"Правило сопоставления имени","Name must be 64 characters or fewer":"Имя должно содержать не более 64 символов","Name must be between {{min}} and {{max}} characters":"Имя должно быть длиной от {{min}} до {{max}} символов","Name Rule":"Правило именования","Name Suffix":"Суффикс имени","Name the channel and choose the upstream provider.":"Задайте имя канала и выберите upstream-провайдера.","Name the channel, choose the provider, configure API access, and set credentials.":"Задайте имя канала, выберите провайдера, настройте доступ к API и учетные данные.","Name, provider type, and availability.":"Название, тип провайдера и доступность.","name@example.com":"name@example.com","Native Claude Messages plus OpenAI Chat compatibility forwarding.":"Нативный Claude Messages и совместимая пересылка OpenAI Chat.","Native format":"Собственный формат","Native forwarding":"Нативная пересылка","Native Gemini routes plus OpenAI Chat and Responses compatibility forwarding.":"Нативные маршруты Gemini и совместимая пересылка OpenAI Chat и Responses.","Native OpenAI routes plus optional Claude and Gemini compatibility routes.":"Нативные маршруты OpenAI и дополнительные маршруты совместимости Claude и Gemini.","Native routes":"Нативные маршруты","Need a redemption code?":"Нужен код активации?","Needs API key":"Нужен API-ключ","Negate condition":"Инвертировать условие","Negated group":"Инверсия группы","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"Вложенный JSON, определяющий правила для каждой группы для добавления (+:), удаления (-:) или добавления используемых групп.","Nested JSON: source group →":"Вложенный JSON: исходная группа →","Network connection failed or server not responding":"Сбой сетевого подключения или сервер не отвечает","Network proxy for this channel (supports HTTP, HTTPS, SOCKS5, and SOCKS5H)":"Сетевой прокси для этого канала (поддерживает HTTP, HTTPS, SOCKS5 и SOCKS5H)","Never":"Никогда","Never expires":"Никогда не истекает","Never used":"Не использовался","Never used an API Gateway?":"Никогда не пользовались API-шлюзом?","NEW":"НОВОЕ","New API":"Новый API","New API <noreply@example.com>":"Новый API <noreply@example.com>","New API Project Repository:":"Репозиторий проекта New API:","New API\'s flexible channel lets you configure upstream addresses and authentication per endpoint, choose native forwarding or supported protocol conversions, and configure model listing and balance queries independently":"Гибкий канал New API позволяет задавать адреса внешних сервисов и аутентификацию для каждого эндпоинта, выбирать прямую пересылку или поддерживаемое преобразование протоколов, а также отдельно настраивать получение списка моделей и запрос баланса","New domain: {{domain}}":"Новый домен: {{domain}}","New email verification code":"Код подтверждения новой почты","New Format Template":"Шаблон нового формата","New Group":"Новая группа","New metadata":"Новые метаданные","New model":"Новая модель","New Models ({{count}})":"Новые модели ({{count}})","New models: all metadata shown below will be imported automatically. No selection is needed.":"Новые модели: все показанные ниже метаданные будут импортированы автоматически. Выбирать поля не нужно.","New name will be:":"Новое имя будет:","New Passkeys use the primary domain. Compatible domains keep existing Passkeys working.":"Новые ключи доступа используют основной домен. Совместимые домены позволяют продолжать использовать существующие ключи.","New Passkeys use this domain. Enter a domain without https://, a port or a path. An empty field uses the system website address.":"Новые ключи доступа используют этот домен. Укажите только домен, без https://, порта или пути. Если поле пустое, используется адрес сайта системы.","New Passkeys will use the new primary domain. The previous domain will be kept so existing Passkeys can still verify.":"Новые ключи доступа будут использовать новый основной домен. Прежний домен будет сохранён, чтобы существующие ключи продолжали работать.","New password":"Новый пароль","New Password":"Новый пароль","New password must be different from current password":"Новый пароль должен отличаться от текущего пароля","New records include the fields below. Existing fields are kept unless explicitly selected.":"Новые записи включают перечисленные поля. Существующие поля сохраняются, если не выбраны явно.","New User Quota":"Новая квота пользователя","New value":"Новое значение","New vendors":"Новые поставщики","New version available: {{version}}":"Доступна новая версия: {{version}}","NewAPI":"NewAPI","Newly released":"Новые релизы","Next":"Следующий шаг","Next branch":"Следующая ветка","Next page":"Следующая страница","Next reset":"Следующий сброс","No":"Нет","No About Content Set":"Содержимое раздела \\"О нас\\" не установлено","No access tokens":"Нет токенов доступа","No key index specified to delete":"Не указан индекс ключа для удаления","No key index specified to disable":"Не указан индекс ключа для отключения","No key index specified to enable":"Не указан индекс ключа для включения","No Active":"Нет активных","No keys to disable":"Нет ключей для отключения","No active login sessions":"Нет активных сеансов входа","No active system tasks.":"Нет активных системных задач.","No additional type-specific settings for this channel type.":"Нет дополнительных настроек, специфичных для этого типа канала.","No amount options configured. Add amounts below to get started.":"Не настроены параметры суммы. Добавьте суммы ниже, чтобы начать.","No announcements at this time":"Нет объявлений на данный момент","No announcements yet. Click \\"Add Announcement\\" to create one.":"Пока нет объявлений. Нажмите \\"Добавить объявление\\", чтобы создать одно.","No API Domains yet. Click \\"Add API\\" to create one.":"Пока нет доменов API. Нажмите \\"Добавить API\\", чтобы создать один.","No API key yet":"API-ключ пока не создан","No API keys available. Create your first API key to get started.":"Нет доступных ключей API. Создайте свой первый ключ API, чтобы начать.","No API Keys Found":"Ключи API не найдены","No API routes configured":"Нет настроенных маршрутов API","No API tokens":"Нет API-ключей","No app usage data available for this model.":"Данные об использовании приложений для этой модели пока недоступны.","No apps match the selected filters":"Нет приложений, соответствующих фильтрам","No Auth":"Без auth","No auto groups configured":"Автоматические группы не настроены","No available channels":"Нет доступных каналов","No available groups in the global Auto order.":"В глобальном порядке Auto нет доступных групп.","No available models":"Нет доступных моделей","No available Web chat links":"Нет доступных веб-ссылок для чата","No backup":"Нет резервной копии","No base input price":"Нет базовой цены входа","No billing parameters declared":"Параметры тарификации не объявлены","No billing records found":"Записи о выставлении счетов не найдены","No capabilities reported for this model.":"Для этой модели не указаны возможности.","No Change":"Без изменений","No changelog for this version.":"Для этой версии нет истории изменений.","No changes":"Нет изменений","No changes made":"Изменения не внесены","No changes to save":"Нет изменений для сохранения","No channel is configured. This model will not appear in the model square.":"Каналы не настроены. Модель не появится в каталоге.","No channel is currently available. This model will not appear in the model square.":"Нет доступных каналов. Сейчас модель не отображается в каталоге.","No channel selected":"Канал не выбран","No channel type found.":"Тип канала не найден.","No channels available. Create your first channel to get started.":"Нет доступных каналов. Создайте свой первый канал, чтобы начать.","No channels found":"Каналы не найдены","No Channels Found":"Каналы не найдены","No channels selected":"Каналы не выбраны","No chat presets configured. Click \\"Add chat preset\\" to get started.":"Пресеты чата не настроены. Нажмите \\"Добавить пресет чата\\", чтобы начать.","No chat presets match your search":"Нет пресетов чата, соответствующих вашему поиску","No configured channel models match this metadata rule.":"Ни одна модель настроенных каналов не соответствует этому правилу метаданных.","No conflict entries available.":"Нет доступных записей конфликтов.","No conflicts match your search.":"Конфликты, соответствующие вашему поиску, не найдены.","No connection info found in clipboard":"В буфере обмена нет данных подключения","No console output":"Нет вывода консоли","No containers":"Нет контейнеров","No content to copy":"Нет содержимого для копирования","No custom groups. Saving will inherit the complete global Auto order.":"Пользовательские группы не заданы. После сохранения будет унаследован полный глобальный порядок Auto.","No custom OAuth providers configured yet.":"Пользовательские поставщики OAuth еще не настроены.","No data":"Нет данных","No Data":"Нет данных","No data available":"Нет доступных данных","No deployments available. Create one to get started.":"Нет доступных развертываний. Создайте одно, чтобы начать.","No Deployments Found":"Развертывания не найдены","No description available.":"Описание отсутствует.","No notifications are available to you right now":"Сейчас для вас нет доступных уведомлений","No permission to access users of same or higher level":"Нет прав на просмотр пользователей того же или более высокого уровня","No permission to change the 2FA settings of users at the same or higher level":"Нет прав на изменение настроек 2FA пользователей того же или более высокого уровня","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"Не настроены уровни скидок. Нажмите \\"Добавить уровень скидки\\", чтобы начать.","No permission to update users of same or higher permission level":"Нет прав на изменение пользователей с тем же или более высоким уровнем прав","No duplicate keys found":"Дубликаты ключей не найдены","No enabled channel key":"Нет активного ключа канала","No enabled groups":"Нет включённых групп","No enabled tokens available":"Нет доступных активных токенов","No encryption":"Без шифрования","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"Конечные точки не настроены. Переключитесь в режим JSON или добавьте строки для определения конечных точек.","No endpoints inferred from channels":"Конечные точки не определены по каналам","No extra domains declared":"Дополнительные домены не объявлены","No FAQ entries available":"Нет доступных записей FAQ","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"Пока нет записей FAQ. Нажмите \\"Добавить FAQ\\", чтобы создать одну.","No files match the accepted types.":"Нет файлов, соответствующих допустимым типам.","No flow data available":"Нет данных потока","No group":"Без группы","No group found.":"Группа не найдена.","No group-based rate limits configured. Click \\"Add group\\" to get started.":"Групповые лимиты скорости не настроены. Нажмите \\"Добавить группу\\", чтобы начать.","No groups match your search":"Нет групп, соответствующих вашему поиску","No groups yet. Add a group to get started.":"Групп пока нет. Добавьте группу, чтобы начать.","No header overrides configured.":"Нет настроенных переопределений заголовков.","No historical system tasks.":"Нет исторических системных задач.","No history data available":"Исторические данные недоступны","No incidents in the last 24 hours":"За последние 24 часа инцидентов не было","No incidents in the last 30 days":"За последние 30 дней инцидентов не было","No instances have reported yet.":"Экземпляры еще не отправляли данные.","No integrity hash":"Нет хеша целостности","No integrity verification":"Без проверки целостности","No Inviter":"Нет пригласившего","No IP restriction":"Без ограничений","No keys found":"Ключи не найдены","No latency data available":"Данные о задержке недоступны","No linked models":"Нет связанных моделей","No linked OAuth provider is available.":"Нет доступного привязанного провайдера OAuth.","No log entries matched the selected time.":"Нет записей журнала, соответствующих выбранному времени.","No logs":"Нет логов","No Logs Found":"Логи не найдены","No mappings configured. Click \\"Add Row\\" to get started.":"Нет настроенных сопоставлений. Нажмите \\"Добавить строку\\", чтобы начать.","No marketplace sources configured.":"Источники магазина не настроены.","No matches found":"Совпадений не найдено","No matching channels":"Нет совпадений","No matching icons":"Подходящих иконок нет","No matching items":"Нет подходящих элементов","No matching provider":"Подходящий поставщик не найден","No matching results":"Нет совпадений","No matching rules":"Нет совпадающих правил","No matching token and channel usage was found.":"Подходящее использование токенов и каналов не найдено.","No messages yet":"Сообщений пока нет","No missing models found.":"Недостающие модели не найдены.","No model found.":"Модель не найдена.","No model mappings configured. Click \\"Add Mapping\\" to get started.":"Не настроены сопоставления моделей. Нажмите \\"Добавить сопоставление\\", чтобы начать.","No model price changes to save":"Нет изменений цен моделей для сохранения","No models available":"Модели недоступны","No models available in this category":"В этой категории нет моделей","No models available. Create your first model to get started.":"Нет доступных моделей. Создайте свою первую модель, чтобы начать.","No models can be synced with the current filters. Adjust the search or sync scope.":"Нет моделей для синхронизации с текущими фильтрами. Измените поиск или область синхронизации.","No models configured. Use Add model to get started.":"Модели не настроены. Используйте добавление модели, чтобы начать.","No models fetched from upstream":"Модели не получены от upstream","No models fetched yet.":"Модели еще не получены.","No models found":"Модели не найдены","No Models Found":"Модели не найдены","No models found.":"Модели не найдены.","No models match the selected filters":"Нет моделей, соответствующих фильтрам","No models match these filters":"Нет моделей, соответствующих фильтрам","No valid upstream channel":"Нет действительного вышестоящего канала","No models match your current filters.":"Модели, соответствующие вашим текущим фильтрам, не найдены.","No models match your search":"Модели не найдены","No models matched your search.":"Нет моделей, соответствующих вашему поиску.","No models returned by the upstream":"Поставщик не вернул модели","No models selected":"Модели не выбраны","No models to add":"Нет моделей для добавления","No models to copy":"Нет моделей для копирования","No models to remove":"Нет моделей для удаления","No models with unset prices":"Нет моделей без цены","No new models to add":"Нет новых моделей для добавления","No new models yet":"Новых моделей пока нет","No newer version available.":"Более новой версии нет.","No nodes":"Нет узлов","No notable climbers right now":"Сейчас нет значимых поднявшихся моделей","No notable drops right now":"Сейчас нет значимых упавших моделей","No parameter overrides configured.":"Нет настроенных переопределений параметров.","No Passkey is registered.":"Passkey не зарегистрирован.","No payment methods available. Please contact administrator.":"Нет доступных способов оплаты. Пожалуйста, свяжитесь с администратором.","No payment methods configured":"Способы оплаты не настроены","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"Способы оплаты не настроены. Нажмите \\"Добавить способ\\" или используйте шаблоны, чтобы начать.","No payment methods match your search":"Нет способов оплаты, соответствующих вашему поиску","No performance data available":"Нет доступных данных о производительности","No permission to perform this action":"Нет прав для выполнения этого действия","No plans available":"Нет доступных планов","No plugins available for binding":"Нет доступных для привязки плагинов","No preceding rule matched":"Ни одно предыдущее правило не совпало","No preference":"Без предпочтений","No prefill groups yet":"Пока нет групп предзаполнения","Not implemented yet":"Ещё не реализовано","No price differences found":"Различий в ценах не найдено","No processable upstream model updates for this channel":"Нет обрабатываемых обновлений моделей для этого канала","No products configured. Click \\"Add product\\" to get started.":"Продукты не настроены. Нажмите \\"Добавить продукт\\", чтобы начать.","No products match your search":"Нет продуктов, соответствующих вашему поиску","Not logged in":"Вход не выполнен","No providers available":"Нет доступных провайдеров","No Quota":"Нет квоты","No quota limit":"Без лимита","No ratio differences found":"Различия в коэффициентах не найдены","No recent usage":"Нет недавнего использования","No records":"Нет записей","No records found. Try adjusting your filters.":"Записи не найдены. Попробуйте изменить фильтры.","No redemption codes available. Create your first redemption code to get started.":"Нет доступных кодов активации. Создайте свой первый код активации, чтобы начать.","No Redemption Codes Found":"Коды активации не найдены","No related models available for this channel type":"Для этого типа канала нет доступных связанных моделей","No release notes provided.":"Примечания к выпуску не предоставлены.","No releases found.":"Доступные выпуски не найдены.","No Reset":"Без сброса","No reset credits":"Нет сбросов лимита","No reset credits available":"Нет доступных сбросов","No restriction":"Без ограничений","No results for \\"{{query}}\\". Try adjusting your search or filters.":"Нет результатов для \\"{{query}}\\". Попробуйте изменить поиск или фильтры.","No results found":"Поиск не дал результатов","No results found.":"Результаты не найдены.","No Retry":"Без повтора","No rule for vip billed as default → use the base ratio of default, 1.0 (the 0.8 of vip is not used)":"Нет правила «vip по default» → базовый коэффициент default, 1,0 (0,8 группы vip не используется)","No rule for vip billed as vip → use the base ratio of vip, 0.8":"Нет правила «vip по vip» → базовый коэффициент vip, 0,8","No rules yet":"Правила отсутствуют","No rules yet. Add a group below to get started.":"Правил пока нет. Добавьте группу ниже, чтобы начать.","No separate media pricing configured.":"Отдельные цены для медиа не настроены.","No source available":"Исходный код недоступен","No source changes":"Исходный код не изменён","No special ratios configured":"Особые коэффициенты не настроены","No status code mappings configured.":"Сопоставления кодов состояния не настроены.","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"У этого продавца пока нет магазинов. Укажите URL возврата и нажмите Создать, чтобы создать первую пару.","No subscription plans yet":"Планов подписки пока нет","No subscription records":"Нет записей подписок","No Sync":"Без синхронизации","No syncable models":"Нет моделей для синхронизации","No system announcements":"Нет системных объявлений","No system tasks yet.":"Пока нет системных задач.","No task plugins found":"Плагины задач не найдены","No token found.":"Токен не найден.","No tools configured":"Нет настроенных инструментов","No Upgrade":"Без повышения","No upstream price differences found":"Различий в ценах провайдера не найдено","No upstream ratio differences found":"Различия в коэффициентах вышестоящего потока не найдены","Notifications to receive":"Получаемые уведомления","OAuth provider not found":"Поставщик OAuth не найден","No uptime data available":"Данные о доступности недоступны","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"Пока нет групп Uptime Kuma. Нажмите \\"Добавить группу\\", чтобы создать одну.","No uptime monitoring configured":"Мониторинг доступности не настроен","No usage logs available. Logs will appear here once API calls are made.":"Нет логов использования. Они появятся после вызовов API.","No user information available":"Нет данных пользователя","No user selected":"Пользователь не выбран","No users":"Нет пользователей","No users available. Try adjusting your search or filters.":"Нет доступных пользователей. Попробуйте изменить параметры поиска или фильтры.","No Users Found":"Пользователи не найдены","No valid custom Auto groups remain. Add a group or restore global Auto.":"Доступных пользовательских групп Auto не осталось. Добавьте группу или восстановите глобальный порядок Auto.","No vendor":"Поставщик не указан","No vendor data available":"Данных по поставщикам нет","No vendors found":"Поставщики не найдены","No verification method is available for this action.":"Для этой операции нет доступного способа подтверждения.","No version history":"История версий отсутствует","No X Found":"X не найдено","Node":"Узел","Node filters":"Фильтры узлов","Node Name":"Имя узла","Node role":"Роль узла","Nodes reporting from this deployment and their latest heartbeat.":"Узлы этого развертывания и их последнее сердцебиение.","Non-stream":"Не потоковый","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"Ненулевые награды за приглашения требуют подтверждения соответствия в настройках платежного шлюза.","None":"Нет","None (plugin declaration)":"Нет (объявлено плагином)","noreply@example.com":"noreply@example.com","Normalized:":"Нормализовано:","Not available":"Недоступно","Not backed up":"Не сохранено","Not bound":"Не привязан","OIDC ID is empty!":"OIDC ID не указан!","Not configured":"Не настроено","Not configured for some providers":"Цены для некоторых провайдеров не настроены","Not configured for this provider":"Цены для этого провайдера не настроены","Not declared":"Не заявлено","Not declared by this plugin":"Не объявлено плагином","Not declared; an API key may still be required.":"Способ не объявлен; ключ API всё ещё может требоваться.","Not Equals":"Не равно","Not found upstream":"Не найдено в источнике","Not in pricing table":"Нет в таблице тарифных групп","Not included":"Не включена","Not installed":"Не установлен","Not listed":"Скрыта","Not matched":"Не совпало","Online top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"Онлайн-пополнение выполнено, зачислено: {{quota}}, сумма оплаты: {{amount}}","Not provided by this source":"Не предоставлено этим источником","Not recorded":"Не записано","Not registered":"Не зарегистрирован","Not set":"Не задано","Not Set":"Не установлено","Not set yet":"Ещё не задано","Not shown":"Скрыто","Not Started":"Не начато","Not Submitted":"Не отправлено","Not tested":"Не протестировано","Not used for upstream training by default":"По умолчанию не используется для обучения у поставщика","Not used yet":"Ещё не использовался","Note":"Примечание","Notice":"Уведомления","Notification Email":"Электронная почта для уведомлений","Notification Method":"Метод уведомления","Notifications":"Уведомления","Now a user whose user group is vip creates tokens with different groups and makes one call with each:":"Теперь пользователь с группой vip создаёт токены с разными группами и делает по одному вызову с каждым:","Nucleus sampling probability mass":"Накопленная вероятность для nucleus-сэмплинга","Number":"Число","Number of codes to create":"Количество кодов для создания","Number of completions to generate":"Число генерируемых вариантов","Number of images to generate":"Количество изображений","Number of keys to create":"Количество ключей для создания","Number of times to retry failed requests (0-10)":"Количество повторных попыток для неудачных запросов (0-10)","Number of tokens per unit quota":"Количество токенов на единицу квоты","Number of top log probabilities returned per token":"Количество top-вероятностей на токен","Number of users invited":"Количество приглашенных пользователей","OAuth":"OAuth","OAuth 2.0 service account":"Сервисный аккаунт OAuth 2.0","OAuth authorization timed out. Please try again.":"Время авторизации OAuth истекло. Повторите попытку.","OAuth authorization was cancelled.":"Авторизация OAuth отменена.","OAuth binding timed out. Please try again.":"Время ожидания привязки OAuth истекло. Повторите попытку.","OAuth binding window is no longer available":"Окно привязки OAuth больше недоступно","OAuth callback URL":"URL обратного вызова OAuth","OAuth Client ID":"Идентификатор клиента OAuth","OAuth Client Secret":"OAuth Client Secret","OAuth failed":"OAuth не удался","OAuth Integrations":"Интеграции OAuth","OAuth pop-up was blocked":"Всплывающее окно OAuth заблокировано","OAuth popup storage is unavailable.":"Хранилище всплывающего окна OAuth недоступно.","OAuth window is no longer available.":"Окно OAuth больше недоступно.","Object Prune Rules":"Правила очистки объектов","Observability":"Наблюдаемость","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"Получите API-ключ, ID мерчанта и пару RSA-ключей в панели управления Waffo и настройте URL обратного вызова.","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: /api/waffo-pancake/webhook":"Получите в панели Waffo ID мерчанта, магазина, товара и ключи подписи. Webhook: /api/waffo-pancake/webhook","Ocean Breeze":"Океанский бриз","of":"записей, всего","of 3:":"из 3:","off":"выкл.","Official":"Официальный","Official Claude Messages":"Официальные Claude Messages","Official documentation":"Официальная документация","Official Gemini from OpenAI Chat":"Официальный Gemini из OpenAI Chat","Official Gemini Native":"Официальный Gemini Native","Official OpenAI Chat":"Официальный OpenAI Chat","Official OpenAI Embeddings":"Официальные OpenAI Embeddings","Official OpenAI Images":"Официальные OpenAI Images","Official OpenAI Responses":"Официальный OpenAI Responses","Official pricing preset":"Официальный набор цен","Official Repository":"Официальный репозиторий","Official Sync":"Официальная синхронизация","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"ID клиента OIDC","OIDC Client Secret":"Секрет клиента OIDC","OIDC configuration fetched successfully":"Конфигурация OIDC успешно получена","OIDC discovery can fill the endpoint fields automatically when the provider supports it.":"OIDC Discovery может автоматически заполнить поля конечных точек, если провайдер это поддерживает.","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"URL обнаружения OIDC. Нажмите \\"Автообнаружение\\" для автоматического получения конечных точек.","OIDC Display Name":"Отображаемое имя OIDC","OIDC endpoints discovered successfully":"Конечные точки OIDC успешно обнаружены","Old Format Template":"Шаблон старого формата","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"Старый формат: прямое переопределение. Новый формат: поддерживает условные суждения и пользовательские операции JSON.","Ollama":"Ollama","Ollama Models":"Ollama Модели","One API":"Один API","One domain per line":"Один домен на строку","One domain per line (only used when domain restriction is enabled)":"Один домен на строку (используется только при включении ограничения домена)","One IP or CIDR range per line":"Один IP или диапазон CIDR на строку","One IP per line (empty for no restriction)":"Один IP на строку (пусто для отсутствия ограничений)","one keyword per line":"одно ключевое слово на строку","online":"онлайн","Online":"Онлайн","Online payment is not enabled. Please contact the administrator.":"Онлайн-оплата не включена. Пожалуйста, свяжитесь с администратором.","Online topup is not enabled. Please use redemption code or contact administrator.":"Онлайн-пополнение не включено. Пожалуйста, используйте код активации или свяжитесь с администратором.","Only allow specific email domains":"Разрешить только определенные домены электронной почты","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"Доступно только для администраторов. При включении вы будете получать сводное уведомление выбранным способом, когда запланированная проверка моделей обнаружит изменения в вышестоящих моделях или сбои проверки.","Only available for exact matching":"Только при точном совпадении","Only configured combinations are overridden. All other calls keep the billing group base ratio.":"Переопределяются только настроенные комбинации. Остальные вызовы используют базовый коэффициент тарифной группы.","Only configured combinations are overridden. All other calls keep the token group base ratio.":"Переопределяются только настроенные комбинации. Остальные вызовы используют базовый коэффициент группы токена.","Only enabled parameters are sent with the request.":"С запросом отправляются только включенные параметры.","Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.":"Введите только origin сайта, например https://api.example.com. Не добавляйте пути, например /api/user/epay/notify. Оставьте пустым, чтобы использовать адрес сервера.","Only exact model names are removed from enabled and disabled channels. Matching rules are not expanded, and channel records are retained.":"Из активных и отключённых каналов удаляются только полностью совпадающие имена моделей. Правила сопоставления не расширяются, сами каналы сохраняются.","Only Mine":"Только мои","Only one catch-all route is allowed for the same incoming path":"Для одного входного пути разрешен только один резервный маршрут","Order is not pending payment and cannot be completed":"Заказ не ожидает оплаты, его нельзя завершить","Order number not provided":"Номер заказа не указан","Only one OpenAI Models route is allowed":"Допускается только один маршрут моделей OpenAI","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.":"Будут перезаписаны только выбранные поля. Вы можете повторно запустить мастер синхронизации, если появятся новые конфликты.","Only show syncable models":"Только доступные для синхронизации","Only successful requests":"Только успешные запросы","Only successful requests count toward this limit.":"Только успешные запросы учитываются в этом лимите.","Only the changes listed here will be committed. If any write fails, none of these changes are applied.":"Будут сохранены только перечисленные изменения. При ошибке записи ни одно из них не применяется.","Only the first {{shown}} IDs were recorded":"Записаны только первые {{shown}} ID","Only the first {{shown}} IDs were recorded ({{total}} requested)":"Записаны только первые {{shown}} ID (запрошено: {{total}})","Only the last {{value}} log files will be retained; the rest will be deleted.":"Будут сохранены только последние {{value}} файлов журналов; остальные будут удалены.","Only used to find historical logs. New records are available in Audit Logs.":"Только для поиска старых журналов. Новые записи доступны в журнале аудита.","Oops! Page Not Found!":"Ой! Страница не найдена!","Oops! Something went wrong":"Ой! Что-то пошло не так","Open":"Открыть","Open a source model first":"Сначала откройте исходную модель","Open CC Switch":"Открыть CC Switch","Open filtered model list":"Открыть отфильтрованный список","Open in chat":"Открыть в чате","Open in new tab":"Открыть в новой вкладке","Open in New Tab":"Открыть в новой вкладке","Open menu":"Открыть меню","Open Query Balance to view the upstream JSON response":"Откройте «Запрос баланса», чтобы просмотреть JSON-ответ поставщика","Open release":"Открыть выпуск","Open source":"Открытый исходный код","Open Source":"Открытый исходный код","Open the io.net console API Keys page":"Открыть страницу ключей API консоли io.net","Open theme settings":"Открыть настройки темы","Open weights":"Открытые веса","OpenAI":"OpenAI","OpenAI Chat Completions":"Чат-завершения OpenAI","OpenAI Chat to Anthropic Messages":"OpenAI Chat в Anthropic Messages","OpenAI Chat to Gemini Generate Content":"OpenAI Chat в Gemini Generate Content","OpenAI Chat to OpenAI Responses":"OpenAI Chat в OpenAI Responses","OpenAI Compatible":"Совместимо с OpenAI","OpenAI Compatible Upstream":"Поставщик, совместимый с OpenAI","OpenAI Models route does not support client model rules":"Маршрут моделей OpenAI не поддерживает правила клиентских моделей","OpenAI Models route does not support pass-through":"Маршрут моделей OpenAI не поддерживает сквозную передачу","OpenAI Models route is required to enable upstream model checks":"Для проверки моделей вышестоящего сервиса требуется маршрут моделей OpenAI","OpenAI Models route must use native forwarding":"Маршрут моделей OpenAI должен использовать прямую передачу","OpenAI Models upstream path must not contain {model}":"Путь вышестоящего сервиса для моделей OpenAI не должен содержать {model}","OpenAI only":"Только OpenAI","OpenAI Organization":"Организация OpenAI","OpenAI Organization ID (optional)":"Идентификатор организации OpenAI (необязательно)","OpenAI Responses to Gemini Generate Content":"OpenAI Responses в Gemini Generate Content","OpenAI Responses to OpenAI Chat":"OpenAI Responses в OpenAI Chat","OpenAI, Anthropic, etc.":"OpenAI, Anthropic и т.д.","OpenAI, Anthropic, Google, etc.":"OpenAI, Anthropic, Google и т.д.","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"открывается во внешнем клиенте. Запустите его из боковой панели или действий с ключом API, чтобы запустить настроенное приложение.","Operate channels":"Обслуживание каналов","Operation":"Операция","operation and charging behavior":"эксплуатацию и взимание платы","Operation audit":"Аудит операций","Operation Audit Info":"Информация об аудите операций","Operation cancelled":"Операция отменена","Operation failed":"Операция не удалась","Operation successful":"Операция выполнена успешно","Operation Type":"Тип операции","Operations":"Операции","Operator":"Исполнитель","Operator Admin":"Оператор-администратор","Optimize system for self-hosted single-user usage":"Оптимизировать систему для самостоятельного использования одним пользователем","Optimized network architecture ensures millisecond response times":"Оптимизированная сетевая архитектура обеспечивает время отклика в миллисекунды","Optional callback override. Leave blank to use server address":"Необязательное переопределение обратного вызова. Оставьте пустым, чтобы использовать адрес сервера","Optional icon identifier for the login button":"Необязательный идентификатор иконки для кнопки входа","Optional icon.svg or icon.png shipped next to plugin.js, up to 512 KiB. Stored separately from the source.":"Необязательно: icon.svg или icon.png рядом с plugin.js, до 512 КиБ. Хранится отдельно от исходного кода.","Optional JSON policy to restrict access based on user info fields":"Необязательная политика JSON для ограничения доступа на основе полей информации о пользователе","Optional minimum recharge amount for this method.":"Необязательная минимальная сумма пополнения для этого метода.","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"Необязательный множитель для группы пользователей, используемый при расчете цен на пополнение. Предоставьте JSON-объект, например","Optional note describing this version":"Необязательное примечание к этой версии","Optional notes about this channel":"Необязательные заметки об этом канале","Optional notes about when to use this group":"Необязательные примечания о том, когда использовать эту группу","Optional ratio used when upstream cache hits occur.":"Необязательное соотношение, используемое при попаданиях в вышестоящий кэш.","Optional request-rule multiplier expression. Leave empty when no request rule applies.":"Необязательное выражение множителя для правил запроса. Оставьте пустым, если правила не применяются.","Optional rule description":"Необязательное описание правила","Optional settings for advanced container configuration.":"Дополнительные настройки для расширенной конфигурации контейнера.","Optional supplementary information (max 100 characters)":"Необязательная дополнительная информация (макс. 100 символов)","Optional tag for grouping channels":"Необязательный тег для группировки каналов","Optional. Without it, Google picks the region; with it, requests go to the deployment region below.":"Необязательно. Без него регион выбирает Google, а с ним запросы отправляются в регион развертывания ниже.","Opus Model":"Модель Opus","Or continue with":"Или продолжить с","Or enter this key manually:":"Или введите этот ключ вручную:","or pick existing":"или выбрать существующую","Order completed successfully":"Заказ успешно завершен","Order History":"История заказов","Order Payment Method":"Способ оплаты (заказа)","org-...":"орг-...","Original Model":"Оригинальная модель","Original value":"Исходное значение","Other":"Другое","Other cases":"Остальные случаи","Other channels":"Другие каналы","Other groups":"Другие группы","Other models":"Другие модели","Other nodes":"Другие узлы","Other sessions signed out":"Другие сеансы завершены","Other Settings":"Другие настройки","Other tokens":"Другие токены","Other users":"Другие пользователи","Otherwise (the preceding conditions do not match)":"Иначе (предыдущие условия не выполнены)","Otherwise → {{name}}":"Иначе → {{name}}","Otherwise the binding is removed.":"Иначе привязка удаляется.","Outage":"Простой","Output":"Вывод","Output aspect ratio":"Соотношение сторон","Output image size":"Размер выходного изображения","Output price":"Цена выхода","Output Price: High to Low":"Цена вывода: от высокой к низкой","Output Price: Low to High":"Цена вывода: от низкой к высокой","Output token price for generated tokens.":"Цена выходных токенов для сгенерированного текста.","Output token rate":"Скорость выходных токенов","Output tokens":"Выходные токены","Output Tokens":"Выходные токены","Outside these times: {{condition}}":"Вне этих периодов: {{condition}}","Overage limited":"Ограничение перерасхода","overall":"всего","Overflow":"Переполнение","Overflow items":"Элементы сверх лимита","override":"переопределить","Override":"Перезаписать","Override auto-discovered endpoint":"Переопределить автоматически обнаруженную конечную точку","Override matrix":"Матрица переопределений","Override quota for user “{{name}}”":"Заменить квоту пользователя «{{name}}»","Override request headers":"Переопределить заголовки запроса","Override request headers (JSON format)":"Переопределение заголовков запроса (формат JSON)","Override request parameters":"Переопределить параметры запроса","Override request parameters (JSON format)":"Переопределить параметры запроса (формат JSON)","Override request parameters. Cannot override":"Переопределить параметры запроса. Невозможно переопределить","Override request parameters. Cannot override stream parameter.":"Переопределяет параметры запроса. Параметр stream переопределить нельзя.","Override rule: when a vip user is billed as premium, the ratio is 0.3 instead of 0.5":"Правило переопределения: когда пользователь vip тарифицируется по premium, коэффициент равен 0,3 вместо 0,5","Override Rules":"Правила переопределения","Password login has been disabled by administrator":"Администратор отключил вход по паролю","Override the endpoint used for testing. Leave empty to auto detect.":"Переопределить конечную точку, используемую для тестирования. Оставьте пустым для автоматического определения.","Override user quota":"Заменить квоту пользователя","overrides for matching model prefix.":"переопределяет цену по совпавшему префиксу модели.","Overrode user quota from {{from}} to {{to}}":"Квота пользователя изменена с {{from}} на {{to}}","Overview":"Обзор","Password registration has been disabled by administrator, please use third-party account verification":"Администратор отключил регистрацию по паролю, используйте проверку через сторонний аккаунт","Overwritten":"Перезаписано","Password reset link is invalid or has expired":"Ссылка для сброса пароля недействительна или устарела","Page":"Страница","Page {{current}} of {{total}}":"Страница {{current}} из {{total}}","PaLM":"PaLM","Pan":"Панорама","Pancake":"Pancake","Param Override":"Переопределение параметров","Parameter":"Параметр","Parameter configuration error":"Ошибка конфигурации параметров","Parameter Override":"Переопределение параметра","Parameter override and system prompt are unavailable":"Переопределение параметров и системный промпт недоступны","Parameter override must be a valid JSON object":"Переопределение параметров должно быть валидным JSON-объектом","Parameter override must be valid JSON format":"Переопределение параметров должно быть в валидном формате JSON","Parameter Override Template (JSON)":"Шаблон переопределения параметров (JSON)","Parameter override template must be a JSON object":"Шаблон переопределения параметров должен быть объектом JSON","Parameter settings":"Параметры","parameter.":"параметр.","Parameters":"Параметры","Parsed {{count}} service account file(s)":"Проанализировано файлов сервисного аккаунта {{count}}","Pause drag demo":"Приостановить демонстрацию","Payment amount is too low":"Сумма оплаты слишком мала","Payment cancel redirect URL is not in the trusted domain list":"URL перенаправления при отмене оплаты не входит в список доверенных доменов","Parsed plugin metadata":"Распознанные метаданные плагина","Payment configuration error":"Ошибка настройки оплаты","Partial Submission":"Частичная отправка","Payment information has not been configured by administrator":"Администратор не настроил платежные данные","Partly shown":"Частично","Pass Headers":"Пропустить заголовки","Payment method does not exist":"Способ оплаты не существует","Pass specified request headers to upstream":"Передать указанные заголовки запроса вышестоящему серверу","Pass Through Body":"Передача тела запроса","Pass Through Headers":"Передать заголовки","Pass Through Request Headers":"Проброс заголовков запроса","Pass through the anthropic-beta header for beta features":"Проброс заголовка anthropic-beta для бета-функций","Pass through the include field for usage obfuscation":"Проброс поля include для обфускации использования","Pass through the inference_geo field for Claude data residency region control":"Проброс поля inference_geo для управления регионом размещения данных Claude","Pass through the inference_geo field for geographic routing":"Проброс поля inference_geo для географической маршрутизации","Pass through the safety_identifier field":"Пройдите через поле safety_identifier","Pass through the service_tier field":"Пройдите через поле service_tier","Pass through the speed field for Claude inference speed mode control":"Проброс поля speed для управления режимом скорости инференса Claude","Pass when key is missing":"Пропускать при отсутствии ключа","Payment success redirect URL is not in the trusted domain list":"URL перенаправления после успешной оплаты не входит в список доверенных доменов","Pass-through":"Сквозная передача","Pass-Through":"Сквозной доступ","Pass-through Headers (comma-separated or JSON array)":"Пробрасываемые заголовки (через запятую или JSON-массив)","Payment, redemption, subscription, and invitation reward features are disabled. The administrator must confirm compliance terms before enabling them.":"Функции оплаты, активации кодов, подписок и вознаграждений за приглашения отключены. Администратор должен подтвердить условия соответствия, прежде чем включить их.","Pass-through help":"Справка по сквозной передаче","Pass-through requires native forwarding":"Сквозная передача требует нативной пересылки","Passive recovery only":"Только пассивное восстановление","Passkey":"Passkey","Passkey Authentication":"Аутентификация Passkey","Passkey authentication is disabled.":"Аутентификация Passkey отключена.","Passkey display name":"Отображаемое имя Passkey","Passkey domain change blocked: {{domains}}; affected {{known}}; unknown {{unknown}}":"Изменение доменов ключей доступа заблокировано: {{domains}}; затронуто {{known}}; домен неизвестен {{unknown}}","Passkey domain update failed":"Не удалось обновить домены ключей доступа","Passkey domains":"Домены ключей доступа","Passkey is not available in this browser":"Passkey недоступен в этом браузере","Passkey is not supported in this environment":"Passkey не поддерживается в этой среде","Passkey is not supported on this device":"Passkey не поддерживается на этом устройстве","Passkey is not supported on this device.":"Passkey не поддерживается на этом устройстве.","Passkey Login":"Вход через Passkey","Passkey login failed":"Ошибка входа с Passkey","Passkey login was cancelled":"Вход с Passkey был отменён","Passkey login was cancelled or timed out":"Вход с Passkey был отменён или истёк тайм-аут","Passkey not supported on this device":"Passkey не поддерживается на этом устройстве","Passkey registered successfully":"Passkey успешно зарегистрирован","Passkey registration was cancelled":"Регистрация Passkey была отменена","Passkey removed successfully":"Passkey успешно удалён","Passkey reset successfully":"Passkey успешно сброшен","Passkey verification failed":"Проверка Passkey не удалась","Passkey verification is not available in the current state":"Проверка Passkey недоступна в текущем состоянии","Passkey verification is not supported in this environment":"Проверка Passkey не поддерживается в этой среде","Passkey verification was cancelled":"Проверка Passkey отменена","Passkey verification was cancelled or timed out":"Проверка Passkey отменена или истекло время ожидания","Passkey website domain":"Домен сайта для Passkey","Passkeys for removed domains will stop working. Confirm only if affected users can sign in another way.":"Ключи доступа удалённых доменов перестанут работать. Подтверждайте только если затронутые пользователи могут войти другим способом.","Passkeys known to use removed domains: {{amount}}":"Ключи доступа, использующие удаляемые домены: {{amount}}","Passkeys only work on the website they were created for. This helps prevent other websites from misusing them.":"Passkey работают только на сайте, для которого были созданы. Это защищает их от использования посторонними сайтами.","Passkeys with an unknown domain that may be affected: {{amount}}":"Ключи доступа с неизвестным доменом, которые могут быть затронуты: {{amount}}","Passthrough Template":"Шаблон сквозной передачи","Password":"Пароль","Password / Access Token":"Пароль / Токен доступа","Password authentication is disabled.":"Аутентификация по паролю отключена.","Password changed successfully":"Пароль успешно изменён","Password copied to clipboard: {{password}}":"Пароль скопирован в буфер обмена: {{password}}","Password has been copied to clipboard":"Пароль скопирован в буфер обмена","Password Login":"Вход по паролю","Password must be at least 8 characters":"Пароль должен содержать не менее 8 символов","Password must be at most 20 characters long":"Пароль должен содержать не более 20 символов","Password must be between 8 and 20 characters":"Пароль должен содержать от 8 до 20 символов","Password must contain between 8 and 128 characters.":"Пароль должен содержать от 8 до 128 символов.","Password Registration":"Регистрация пароля","Password reset and copied to clipboard: {{password}}":"Пароль сброшен и скопирован в буфер обмена: {{password}}","Password reset: {{password}}":"Пароль сброшен: {{password}}","Password set successfully":"Пароль установлен","Password settings have changed. Reload the page and try again.":"Настройки пароля изменились. Перезагрузите страницу и повторите попытку.","Passwords do not match":"Пароли не совпадают","Passwords don\'t match.":"Пароли не совпадают.","Paste Connection Info":"Вставить данные подключения","Paste JavaScript source here...":"Вставьте исходный код JavaScript...","Path":"Путь","Path not set":"Путь не задан","Path Regex (one per line)":"Регулярное выражение пути (по одному на строку)","Path:":"Путь:","Pay":"Pay","Pay {{amount}}":"К оплате {{amount}}","Per-request Price: High to Low":"Цена за запрос: от высокой к низкой","Per-request Price: Low to High":"Цена за запрос: от низкой к высокой","Plan amount is too low":"Сумма плана слишком мала","Pay {{amount}} • Save {{saved}}":"К оплате {{amount}} • Экономия {{saved}}","Pay with Balance":"Оплатить балансом","Plan name cannot be empty":"Название плана не может быть пустым","Pay-as-you-go with real-time usage monitoring":"Оплата по мере использования с мониторингом в реальном времени","Plan price cannot be empty":"Цена плана не может быть пустой","Payment":"Платеж","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"Режим платежного агрегатора — подключение через вашу зарегистрированную компанию (офшорное юрлицо). Создано для Enterprise.","Payment Channel":"Платёжный канал","Payment Gateway":"Платежный шлюз","Payment initiated":"Платёж инициирован","Payment Method":"Способ оплаты","Payment method identifier":"Идентификатор способа оплаты","Payment method identifier is required":"Идентификатор способа оплаты обязателен","Payment method name":"Название способа оплаты","Payment method name is required":"Название способа оплаты обязательно","Payment method type":"Тип способа оплаты","Payment method type is required":"Тип способа оплаты обязателен","Payment methods":"Способы оплаты","Payment Methods":"Способы оплаты","Please confirm the compliance statement":"Подтвердите заявление о соответствии","Payment page opened":"Страница оплаты открыта","Payment request failed":"Запрос на оплату не удался","Payment return URL":"URL возврата после оплаты","Payment return URL is empty. Create the product without a SuccessURL redirect?":"URL возврата платежа пуст. Создать продукт без перенаправления SuccessURL?","Payment type key":"Ключ типа оплаты","Payment type key is required":"Ключ типа оплаты обязателен","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"Платежи, коды пополнения, планы подписки и награды за приглашения заблокированы, пока root-администратор не подтвердит условия соответствия.","Peak":"Пик","Peak KV cache usage":"Максимальная загрузка KV-кэша","Peak throughput":"Пиковая пропускная способность","Peak token pool usage":"Максимальная загрузка пула токенов","Penalises repetition of frequent tokens":"Штрафует повторение частых токенов","pending":"ожидание","Pending":"Ожидает","per":"за","Per 1K tokens":"За 1K токенов","Per 1M tokens":"За 1M токенов","Per image":"За изображение","Per matched model":"Для каждой совпавшей модели","per request":"за запрос","Per request":"За запрос","Per Request":"За запрос","Per Second":"За секунду","Per token":"За токен","Per Unit":"За единицу","Per-call":"По вызову","Per-feature metered windows split by model or capability.":"Окна с поминутной тарификацией по фиче, в разбивке по модели или возможностям.","Per-group performance":"Производительность по группам","Per-request":"За запрос","Per-request (deprecated)":"За запрос (устарело)","Per-request (fixed price)":"За запрос (фиксированная цена)","Per-token":"За токен","Per-token (deprecated)":"За токен (устарело)","Per-token (ratio based)":"За токен (на основе соотношения)","Per-token logit bias map":"Карта смещений логитов по токенам","Percentage:":"Процент:","Performance":"Производительность","Please select a product":"Выберите продукт","Performance data is not yet available for this model.":"Данные о производительности этой модели пока недоступны.","Performance health":"Состояние производительности","Performance metrics for the last 24 hours":"Метрики производительности за последние 24 часа","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"Показанные метрики производительности сгенерированы для предпросмотра и будут заменены реальными данными наблюдаемости после интеграции бэкенда.","Performance Monitor":"Монитор производительности","Performance Settings":"Настройки производительности","Performed {{action}} on user {{username}} (ID: {{id}})":"Выполнено действие {{action}} над пользователем {{username}} (ID: {{id}})","Period":"Период","Periodically check for upstream model changes":"Периодически проверять изменения моделей провайдера","Periodically checks all channels except manually disabled ones to detect failures and recover channels automatically.":"Периодически проверяет все каналы, кроме отключённых вручную, чтобы выявлять сбои и автоматически восстанавливать каналы.","Periodically checks only channels with auto-disable enabled, excluding manually disabled channels.":"Периодически проверяет только каналы с включённым автоотключением, исключая отключённые вручную.","Periodically send ping frames to keep streaming connections active.":"Периодически отправлять пинг-кадры для поддержания активности потоковых соединений.","Permanently delete your account and all data":"Безвозвратно удалить ваш аккаунт и все данные","Permissions":"Права","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"Разрешить регистрацию Passkey на не-HTTPS источниках (рекомендуется только для разработки)","Please wait {{seconds}} seconds before requesting another verification code.":"Подождите {{seconds}} с, прежде чем запрашивать новый код подтверждения.","Perplexity":"Perplexity","Persist your data file":"Сохранить ваш файл данных","Personal":"Личное","Personal area":"Личный кабинет","Personal Center Area":"Область личного кабинета","Personal info settings":"Настройки личной информации","Personal Settings":"Личные настройки","Personal settings and profile management.":"Персональные настройки и управление профилем.","Personal use":"Личное использование","Personal use mode":"Режим личного использования","Pick a date":"Выберите дату","Pick models and derive the other side with a rule to create request-to-upstream mappings.":"Выберите модели и получите вторую сторону по правилу, чтобы создать сопоставления запрос → провайдер.","Pick or create both a store and a product before saving.":"Перед сохранением выберите или создайте и магазин, и продукт.","Ping Interval (seconds)":"Интервал Ping (секунды)","Plan":"План","Plugin metadata contains an unknown field \\"{{field}}\\". If this plugin was downloaded from the official marketplace, it may require a newer version of new-api. Try updating new-api and installing the plugin again.":"Метаданные плагина содержат неизвестное поле «{{field}}». Если плагин загружен из официального маркетплейса, ему может требоваться более новая версия new-api. Обновите new-api и установите плагин заново.","Plan ID":"ID плана","Plan Name":"Название плана","Plan Price":"Цена тарифа","Plan price must be greater than zero":"Цена плана должна быть больше нуля","Plan Quota":"Квота тарифа","Plan Subtitle":"Подзаголовок плана","Plan Title":"Название плана","Plan title is required":"Название плана обязательно","Planned action":"Планируемое действие","Planned maintenance on Friday at 22:00 UTC...":"Запланированное обслуживание в пятницу в 22:00 UTC...","Platform":"Платформа","Playground":"Песочница","Playground and chat functions":"Функции песочницы и чата","Playground experiments and live conversations.":"Эксперименты в песочнице и живые беседы.","Please agree to the legal terms first":"Сначала согласитесь с юридическими условиями","Please complete the security check to continue.":"Пожалуйста, завершите проверку безопасности, чтобы продолжить.","Please confirm that you understand the consequences":"Пожалуйста, подтвердите, что понимаете последствия","Please confirm your password":"Пожалуйста, подтвердите пароль","Possibly an upstream timeout":"Возможно, истекло время ожидания upstream","Please enable io.net model deployment service and configure an API key in System Settings.":"Пожалуйста, включите сервис развертывания моделей io.net и настройте API-ключ в системных настройках.","Please enable Two-factor Authentication or Passkey before proceeding":"Пожалуйста, включите двухфакторную аутентификацию или Passkey перед продолжением","Please enter a code.":"Пожалуйста, введите код.","Please enter a name":"Пожалуйста, введите имя","Please enter a new password":"Пожалуйста, введите новый пароль","Please enter a redemption code":"Пожалуйста, введите код активации","Please enter a valid duration":"Пожалуйста, введите действительную длительность","Please enter a valid email address":"Пожалуйста, введите действительный адрес электронной почты","Please enter a valid number":"Пожалуйста, введите допустимое число","Please enter a Well-Known URL first":"Пожалуйста, сначала введите Well-Known URL","Please enter amount":"Пожалуйста, введите сумму","Please enter an administrator username":"Пожалуйста, введите имя пользователя администратора","Please enter API key first":"Сначала введите ключ API","Please enter chat client name":"Пожалуйста, введите имя чат-клиента","Please enter email and verification code":"Пожалуйста, введите email и код подтверждения","Please enter keys first":"Сначала введите ключи","Please enter model name":"Введите название модели","Please enter plan title":"Пожалуйста, введите название плана","Please enter the authentication code.":"Пожалуйста, введите код аутентификации.","Please enter the URL":"Пожалуйста, введите URL","Please enter the verification code":"Введите код подтверждения","Please enter the verification code or backup code":"Введите код подтверждения или резервный код","Please enter your current password":"Пожалуйста, введите текущий пароль","Please enter your email":"Введите адрес электронной почты","Please enter your email first":"Пожалуйста, сначала введите ваш email","Please enter your password":"Пожалуйста, введите пароль","Please enter your username":"Пожалуйста, введите имя пользователя","Please enter your username or email":"Пожалуйста, введите имя пользователя или адрес электронной почты","Please enter your verification code":"Пожалуйста, введите код подтверждения","Please enter your verification code or backup code":"Пожалуйста, введите код подтверждения или резервный код","Please fix JSON errors before saving":"Исправьте ошибки JSON перед сохранением","Please fix the highlighted fields before saving":"Исправьте выделенные поля перед сохранением","Please log in with the appropriate credentials":"Пожалуйста, войдите с соответствующими учетными данными","Please select a container":"Пожалуйста, выберите контейнер","Please select a payment method":"Пожалуйста, выберите способ оплаты","Please select a primary model":"Пожалуйста, выберите основную модель","Please select a subscription plan":"Пожалуйста, выберите план подписки","Please select at least one channel":"Пожалуйста, выберите хотя бы один канал","Please select at least one model":"Пожалуйста, выберите хотя бы одну модель","Please select items to delete":"Пожалуйста, выберите элементы для удаления","Please Select user groups that can access this channel.":"Пожалуйста, выберите группы пользователей, которые могут получить доступ к этому каналу.","Please set Ollama API Base URL first":"Сначала установите базовый URL-адрес API Ollama","Please sign in to view {{module}}.":"Войдите, чтобы просмотреть {{module}}.","Please try again later.":"Пожалуйста, попробуйте еще раз позже.","Please type the following text to confirm:":"Введите следующий текст для подтверждения:","Please upload key file(s)":"Загрузите ключевой файл(ы)","Please wait a moment before trying again.":"Пожалуйста, подождите немного и попробуйте снова.","Please wait a moment, human check is initializing...":"Пожалуйста, подождите немного, инициализация проверки человеком...","Please wait before editing to avoid overwriting saved values.":"Дождитесь загрузки перед редактированием, чтобы не перезаписать сохраненные значения.","Please wait before requesting another verification code.":"Подождите перед повторным запросом кода подтверждения.","Please wait for the current generation to complete":"Дождитесь завершения текущей генерации","Plugin":"Плагин","Plugin activation failed":"Не удалось активировать плагин","Plugin author":"Автор плагина","Plugin default":"Значение плагина по умолчанию","Plugin details":"Сведения о плагине","Plugin extensions":"Расширения через плагины","Plugin Generation":"Поколение плагина","Plugin icon":"Иконка плагина","Plugin icon exceeds the 512 KiB limit.":"Иконка плагина превышает лимит 512 КиБ.","Plugin icon must be an .svg or .png file.":"Иконка плагина должна быть файлом .svg или .png.","Plugin indexes are fetched by your browser. Installing runs the same review and admission pipeline as a manual upload.":"Индексы плагинов загружает ваш браузер. Установка проходит тот же путь проверки и допуска, что и загрузка вручную.","Plugin installation failed":"Не удалось установить плагин","Plugin is still in use":"Плагин всё ещё используется","Plugin key":"Ключ плагина","Plugin metadata":"Метаданные плагина","Plugin sandbox":"Песочница плагина","Plugin saved, activation required":"Плагин сохранён, требуется активация","Plugin source":"Исходный код плагина","Plugin source exceeds the 8 MiB limit.":"Код плагина превышает лимит 8 МиБ.","Plugin uploaded successfully":"Плагин успешно загружен","Plugin version activated":"Версия плагина активирована","Price cannot be negative":"Цена не может быть отрицательной","Price cannot exceed 9999":"Цена не может превышать 9999","Plugin version deleted":"Версия плагина удалена","Plugin website":"Сайт плагина","Plugin-defined interfaces":"Собственные интерфейсы плагина","Plugins":"Плагины","Plugins can access channel credentials. Review the source and differences before installing.":"Плагины могут получать доступ к учётным данным каналов. Перед установкой проверьте исходный код и различия.","Policy JSON":"JSON политики","Polling":"Опрос","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"Режим опроса требует Redis и кэш памяти, в противном случае производительность будет значительно снижена","Poor":"Плохо","Port":"Порт","Port must be a positive integer":"Порт должен быть положительным целым числом","Position {{position}}":"Позиция {{position}}","Post Delta":"Дельта после расчёта","PostgreSQL detected":"PostgreSQL обнаружен","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL обеспечивает высокую надёжность и целостность данных для продакшен-нагрузок.","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL предлагает надежные гарантии. Дважды проверьте окно обслуживания и политики хранения данных перед запуском.","Power AI applications, manage digital assets, connect the Future":"Обеспечивайте AI-приложения, управляйте цифровыми активами, соединяйте Будущее","Powerful API Management Platform":"Мощная платформа управления API","Pre-Consume for Free Models":"Предварительное потребление для бесплатных моделей","Pre-consumed":"Предоплата","Pre-Consumed Quota":"Предварительно потребленная квота","Pre-release":"Предварительная версия","Prefer the original channel, allow switching":"Предпочитать исходный канал, разрешать смену","Preference saved as {{pref}}, but no active subscription. Requests will be rejected.":"Настройка сохранена как {{pref}}, но нет активной подписки. Запросы будут отклонены.","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"Настройка сохранена как {{pref}}, но нет активной подписки. Кошелёк будет использоваться автоматически.","Preferences":"Настройки","Prefill Group Management":"Управление группами автозаполнения","Prefill Groups":"Группы автозаполнения","Prefill groups help you keep complex configurations in sync.":"Группы автозаполнения помогают синхронизировать сложные конфигурации.","Prefix":"Префикс","Prefix cache hit rate":"Доля попаданий в кэш префиксов","Prefix Match":"Совпадение по префиксу","Prefix used when displaying prices":"Префикс, используемый при отображении цен","Prefix/Suffix Text":"Текст префикса/суффикса","Premium chat models":"Премиум-модели чата","Premium plan, half price":"Премиум-план, половина цены","Preparing chat keys…":"Подготовка ключей чата…","Preparing conversion...":"Подготовка преобразования…","Preparing your chat link, please try again in a moment.":"Подготовка вашей ссылки на чат, попробуйте снова через мгновение.","Preparing your chat link…":"Подготовка вашей ссылки для чата…","Prepend":"Добавить в начало","Prepend to Start":"Добавить в начало","Prepend value to array / string / object start":"Добавить значение в начало массива / строки / объекта","Presence Penalty":"Штраф за присутствие","Preserve the original field when applying this rule":"Сохранять исходное поле при применении этого правила","Preserve upstream-specific fields when API formats match; bypasses model redirect, parameter override and format conversion":"Сохраняет поля вышестоящего сервиса при совпадении форматов API; отключает перенаправление модели, переопределение параметров и преобразование формата","Preset groups":"Предустановленные группы","Preset recharge amounts (JSON array)":"Предустановленные суммы пополнения (массив JSON)","Preset recharge amounts displayed to users":"Предустановленные суммы пополнения, отображаемые пользователям","Preset Template":"Предустановленный шаблон","Preset templates":"Предустановленные шаблоны","preset.anthropic":"Anthropic","preset.default":"По умолчанию","preset.forest-whisper":"Лесной шёпот","Product configuration error":"Ошибка настройки продукта","Product does not exist":"Продукт не существует","preset.lake-view":"Озёрный вид","preset.lavender-dream":"Лавандовый сон","preset.ocean-breeze":"Морской бриз","preset.rose-garden":"Розовый сад","preset.simple-large":"Простая крупная","preset.sunset-glow":"Закатное сияние","preset.underground":"Подполье","Press Enter or comma to add tags":"Нажмите Enter или запятую, чтобы добавить теги","Press Enter to use \\"{{value}}\\"":"Нажмите Enter, чтобы использовать «{{value}}»","Prevent server-side request forgery attacks":"Предотвращение атак подделки запросов на стороне сервера","Preview":"Предварительный просмотр","Preview again":"Повторить предпросмотр","Preview changes":"Предпросмотр изменений","Preview excludes group ratios and request rule multipliers.":"Предпросмотр не учитывает коэффициенты групп и множители правил запроса.","Preview fields":"Предпросмотр полей","Preview is unavailable for custom expressions.":"Предпросмотр недоступен для пользовательских выражений.","Preview metadata first":"Сначала просмотрите метаданные","Preview price changes":"Предпросмотр изменений цен","Preview pricing conversion":"Предпросмотр преобразования цен","Preview selected changes":"Просмотреть выбранные изменения","Preview unavailable":"Предпросмотр недоступен","Preview upstream model changes":"Просмотр изменений моделей провайдера","Previous":"Предыдущий шаг","Previous branch":"Предыдущая ветка","Previous page":"Предыдущая страница","Previous permissions":"Прежние права","Previous value":"Предыдущее значение","Price":"Цена","Price ($/1K calls)":"Цена ($/1K вызовов)","Price (local currency / USD)":"Цена (местная валюта / USD)","Price display":"Отображение цены","Price display mode":"Режим отображения цены","Price estimation":"Оценка стоимости","Price estimation description":"После настройки типа оборудования, места размещения, количества реплик и т.д. стоимость будет рассчитана автоматически.","Price examples":"Примеры цен","Price ID":"ID цены","Price mode (USD per 1M tokens)":"Режим ценообразования (USD за 1 млн токенов)","Price per image":"Цена за изображение","Price per request":"Цена за запрос","Price source":"Источник цен","Price summary":"Сводка цен","price_xxx":"price_xxx","Price:":"Цена:","Prices are in {{currency}}, with units shown below. Use USD when editing expressions directly.":"Цены указаны в {{currency}}, единицы — ниже. При ручном редактировании выражений используйте USD.","Prices changed while preparing the conversion. Try again.":"Во время подготовки цены изменились. Повторите попытку.","Prices for each set of conditions":"Цены для каждого набора условий","Prices shown per":"Цены указаны за","Prices shown per {{unit}} tokens":"Цены указаны за {{unit}} токенов","Prices shown per usage unit":"Цены указаны за единицу использования","Prices synced successfully":"Цены успешно синхронизированы","Prices vary by usage tier and request conditions":"Цена зависит от уровня использования и условий запроса","Pricing":"Ценообразование","Pricing & Display":"Цены и отображение","Pricing by condition":"Тарификация по условиям","Pricing by Group":"Ценообразование по группам","Pricing conditions":"Условия тарификации","Pricing Configuration":"Конфигурация ценообразования","Purchase limit cannot be negative":"Лимит покупок не может быть отрицательным","Purchase limit for this plan has been reached":"Достигнут лимит покупок для этого плана","Pricing currency":"Валюта цен","Pricing group example":"Пример группы тарификации","Pricing groups":"Группы тарификации","Pricing mode":"Режим ценообразования","Quality {{quality}}":"Качество {{quality}}","Pricing must be a JSON object":"Настройки цен должны быть объектом JSON","Pricing Ratios":"Коэффициенты ценообразования","Pricing rule {{number}}":"Правило тарификации {{number}}","Pricing rules":"Правила тарификации","Pricing tier {{name}}":"Тарифный уровень {{name}}","Pricing Type":"Тип ценообразования","Primary Model":"Основная модель","Primary Passkey domain":"Основной домен","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"Приоритет повторного использования последнего успешного канала на основе ключей из контекста запроса (липкая маршрутизация)","Priority":"Приоритет","Priority (Default)":"Приоритет (По умолчанию)","Priority level from 0 (lowest) to 10 (highest), default is 5":"Уровень приоритета от 0 (самый низкий) до 10 (самый высокий), по умолчанию 5","Priority order for automatic group assignment. New tokens rotate through this list.":"Порядок приоритета для автоматического назначения групп. Новые токены ротируются по этому списку.","Priority order for tokens in the auto group. The system tries groups from top to bottom.":"Порядок приоритета для токенов группы auto. Система перебирает группы сверху вниз.","Privacy":"Конфиденциальность","Privacy Policy":"Политика конфиденциальности","Private Deployment URL":"URL частного развертывания","Processed requests":"Обработанные запросы","Processing OAuth response...":"Обработка ответа OAuth...","Processing...":"Обработка...","Quota change amount cannot be zero":"Изменение квоты не может быть равно нулю","Product":"Продукт","Product ID":"ID продукта","Product ID is required":"Требуется ID товара","Product Name":"Название продукта","Productivity":"Продуктивность","Products":"Продукты","Professional team providing 24/7 technical support":"Профессиональная команда, обеспечивающая круглосуточную техническую поддержку","Profile":"Профиль","Profile updated successfully":"Профиль успешно обновлён","Programming":"Программирование","Progress":"Прогресс","Project":"Проект","Promote":"Повысить","Promotion codes":"Промокоды","Prompt":"Промпт","Prompt (EN)":"Промпт (EN)","Quota unit is misconfigured":"Единица квоты настроена неверно","Prompt cache ratio":"Коэффициент кэша промптов","Quota value cannot be negative":"Значение квоты не может быть отрицательным","Quota value exceeds valid range, maximum is {{max}}":"Значение квоты вне допустимого диапазона, максимум {{max}}","Prompt caching":"Кэширование промптов","Prompt Caching":"Кэширование промптов","Prompt Details":"Детали промпта","Prompt price ($/1M tokens)":"Цена промпта ($/1 млн токенов)","Prompt text filtering is active with the current form values.":"При текущих значениях формы фильтрация текста промптов включена.","Prompt text filtering needs both switches enabled and a non-empty keyword list.":"Для фильтрации промптов включите оба переключателя и задайте непустой список ключевых слов.","Proprietary":"Проприетарная","Protect login and registration with Cloudflare Turnstile":"Защитить вход и регистрацию с помощью Cloudflare Turnstile","Provide a JSON object where each key maps to an endpoint definition.":"Предоставьте JSON-объект, в котором каждый ключ соответствует определению конечной точки.","Provide a valid URL starting with http:// or https://":"Укажите действительный URL, начинающийся с http:// или https://","Provide Markdown, HTML, or an external URL for the privacy policy":"Укажите Markdown, HTML или внешний URL для политики конфиденциальности","Provide Markdown, HTML, or an external URL for the user agreement":"Укажите Markdown, HTML или внешний URL для пользовательского соглашения","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"Предоставьте переопределения безопасности по категориям в формате JSON. Используйте `default` для резервных значений.","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"Предоставьте переопределения заголовков для каждой модели в формате JSON. Полезно для включения бета-функций, таких как расширенные окна контекста.","Provider":"Провайдер","Provider & data privacy":"Поставщик и конфиденциальность","Provider created successfully":"Поставщик успешно создан","Provider deleted successfully":"Поставщик успешно удален","Provider ID":"ID провайдера","Provider Name":"Имя поставщика","Provider source":"Источник поставщика","Provider type (OpenAI, Anthropic, etc.)":"Тип провайдера (OpenAI, Anthropic и т.д.)","Provider updated successfully":"Поставщик успешно обновлен","Provider-specific endpoint, account, and compatibility settings.":"Настройки endpoint, аккаунта и совместимости для конкретного провайдера.","Proxy Address":"Адрес прокси","Proxy address must use HTTP, HTTPS, SOCKS5, or SOCKS5H and include a valid host":"Адрес прокси должен использовать HTTP, HTTPS, SOCKS5 или SOCKS5H и содержать допустимый узел","Prune Object Items":"Очистить элементы объекта","Prune object items by conditions":"Удалить элементы объекта по условиям","Prune Rule (string or JSON object)":"Правило очистки (строка или JSON-объект)","Public base URL for async task media. Supports a dedicated media domain, port, or Nginx path prefix; falls back to Server Address when empty.":"Публичный базовый URL для медиафайлов асинхронных задач. Поддерживает отдельный медиадомен, порт или префикс пути Nginx; если поле пусто, используется адрес сервера.","Public model catalog and pricing page.":"Публичная страница каталога моделей и цен.","Public rankings page based on live usage data.":"Публичная страница рейтингов на основе реальных данных использования.","Publish Date":"Дата публикации","Publish the request names and remove the raw upstream names from the model list":"Добавить имена запроса в список моделей и убрать исходные имена провайдера","Published":"Опубликовано","Published as {{model}}":"Опубликовано как {{model}}","Published at":"Дата публикации","Published models, groups, and model remapping rules.":"Опубликованные модели, группы и правила переназначения моделей.","Recalculated from tokens: tokens {{tokens}}, model ratio {{model_ratio}}, group ratio {{group_ratio}}, other multiplier {{other_multiplier}}":"Пересчитано по токенам: токены {{tokens}}, коэффициент модели {{model_ratio}}, коэффициент группы {{group_ratio}}, прочий множитель {{other_multiplier}}","Published:":"Опубликовано:","Pull":"Загрузить","Pull model":"Загрузить модель","Pulling...":"Загрузка...","Purchase Limit":"Лимит покупок","Purchase limit reached":"Достигнут лимит покупок","Purchase Subscription":"Приобрести подписку","QR Code Image URL":"URL изображения QR-кода","QR code is not configured. Please contact support.":"QR-код не настроен. Пожалуйста, свяжитесь со службой поддержки.","Quantity":"Количество","QuantumNous":"QuantumNous","Query":"Query","Query Balance":"Баланс запросов","Query Param":"Параметр запроса","Querying...":"Выполняется запрос...","Question":"Вопрос","Queued":"В очереди","Quick actions":"Быстрые действия","Quick insert common payment methods":"Быстрая вставка распространенных способов оплаты","Quick insert payment entries":"Быстро вставить платежные записи","Quick options":"Быстрые настройки","Quick Range":"Быстрый диапазон","Quick Setup from Preset":"Быстрая настройка из предустановки","Quota":"Квота","Quota ({{currency}})":"Квота ({{currency}})","Quota adjusted successfully":"Квота успешно изменена","Quota adjustment details":"Подробности изменения квоты","Redemption code count must be greater than 0":"Количество кодов активации должно быть больше 0","Quota after adjustment":"Квота после изменения","Quota before adjustment":"Квота до изменения","Quota clamped":"Квота ограничена","Redemption code name length must be between 1-20":"Длина названия кода активации должна быть от 1 до 20 символов","Quota consumed before charging users":"Квота, потребляемая до взимания платы с пользователей","Quota Distribution":"Распределение квоты","Quota given to invited users":"Квота, предоставляемая приглашенным пользователям","Quota given to invited users ({{formattedQuota}})":"Квота, предоставляемая приглашенным пользователям ({{formattedQuota}})","Quota given to users who invite others":"Квота, предоставляемая пользователям, которые приглашают других","Quota given to users who invite others ({{formattedQuota}})":"Квота, предоставляемая пользователям, которые приглашают других ({{formattedQuota}})","Quota must be a positive number":"Квота должна быть положительным числом","Quota must be zero or greater":"Квота не может быть отрицательной","Redemption failed, please try again later":"Не удалось активировать код, повторите попытку позже","Redemption quota must be positive":"Квота кода активации должна быть положительной","Quota Per Unit":"Квота на единицу","Quota Reset":"Сброс квоты","Quota saturation protection triggered":"Сработала защита от переполнения квоты","Quota Settings":"Настройки квоты","Quota Types":"Типы квот","Quota unchanged":"Квота не изменилась","Quota update failed":"Не удалось обновить квоту","Quota:":"Квота:","Radius":"Радиус","Random":"Случайный","Randomly select a key from the pool for each request":"Случайно выбирать ключ из пула для каждого запроса","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"Сейчас данные рейтинга смоделированы для превью; после внедрения бэкенда они будут заменены реальной аналитикой.","Rankings":"Рейтинги","Rate Limit Windows":"Окна ограничения скорости","Rate Limited":"Ограничение частоты","Rate Limiting":"Ограничение скорости","Rate limits":"Ограничения частоты","Ratio":"Коэффициент","Ratio applied to audio completions for streaming models.":"Коэффициент, применяемый к аудио-завершениям для потоковых моделей.","Ratio applied to audio inputs where supported by the upstream model.":"Коэффициент, применяемый к аудио-входам, где это поддерживается вышестоящей моделью.","Ratio applied when creating cache entries for supported models.":"Коэффициент, применяемый при создании записей кэша для поддерживаемых моделей.","Ratio mode":"Режим соотношения","Ratio overrides for users of this group":"Переопределения коэффициента для пользователей этой группы","Ratio overrides when billed as this group":"Переопределения коэффициента при тарификации по этой группе","Ratio Type":"Тип соотношения","Ratio: {{value}}":"Коэффициент: {{value}}","Ratios synced successfully":"Соотношения успешно синхронизированы","Raw expression":"Исходное выражение","Raw expressions and presets use USD. Currency selection only converts visual price inputs and monetary previews.":"Исходные выражения и шаблоны используют USD. Выбор валюты влияет только на ввод цен в визуальном редакторе и предпросмотр сумм.","Raw JSON":"Сырой JSON","Raw Quota":"Исходная квота","Raw response":"Исходный ответ","Re-enable on success":"Повторно включить при успехе","Re-login":"Повторный вход","Read channels":"Чтение каналов","Ready":"Готово","Ready to initialize":"Готов к инициализации","Ready to simplify":"Готовы упростить","Real exchange rate between USD and your payment gateway currency":"Реальный обменный курс между USD и валютой вашего платежного шлюза","Realtime pricing must be converted manually.":"Тарифы Realtime необходимо преобразовать вручную.","Reason":"Причина","Reason:":"Причина:","Reasoning":"Обоснование","Reasoning Effort":"Интенсивность рассуждения","Received":"Получено","Regular administrators cannot promote other users to administrator":"Обычные администраторы не могут назначать других пользователей администраторами","Received amount":"Полученная сумма","Recent maintenance tasks running across instances and their execution status.":"Недавние задачи обслуживания, выполняемые на всех экземплярах, и их статус выполнения.","Recent success-rate samples; gray bars indicate missing data.":"Последние замеры успешности запросов; серые полоски означают отсутствие данных.","Recently completed or failed system task runs.":"Недавние запуски системных задач, завершенные или завершившиеся с ошибкой.","Recently launched models":"Недавно запущенные модели","Recently launched models gaining traction":"Недавно вышедшие модели, набирающие популярность","Recharge":"Пополнение","Recharge Amount":"Сумма пополнения","Recharge Amount (USD)":"Сумма пополнения (USD)","Recommended":"Рекомендуется","Recommended actions":"Рекомендуемые действия","Recommended to keep this high to avoid upstream throttling.":"Рекомендуется поддерживать это значение высоким, чтобы избежать регулирования со стороны вышестоящего поставщика.","Record IP Address":"Записывать IP-адрес","Record quota usage":"Записывать использование квоты","Recover auto-disabled channels only":"Только восстанавливать автоотключённые каналы","Recursion Strategy":"Стратегия рекурсии","Recursive":"Рекурсивно","Redeem":"Обменять квоту","Redeem codes":"Активировать коды","Redeemed":"Использовано","Redeemed at":"Использовано в","Redeemed By":"Активировано","Redeemed:":"Активировано:","redemption code":"код активации","Redemption Code":"Код активации","Redemption code deleted successfully":"Код активации успешно удален","Redemption code disabled successfully":"Код активации успешно отключен","Redemption code enabled successfully":"Код активации успешно включен","Redemption code updated successfully":"Код активации успешно обновлен","Redemption code(s) created successfully":"Код(ы) активации успешно создан(ы)","Redemption codes":"Коды активации","Redemption Codes":"Коды активации","Redemption codes are disabled until the administrator confirms compliance terms.":"Коды пополнения отключены, пока администратор не подтвердит условия соответствия.","Redemption codes created":"Коды погашения созданы","redemption codes.":"коды активации.","Redemption failed":"Погашение не удалось","Redemption successful! Added: {{quota}}":"Погашение успешно! Добавлено: {{quota}}","Redirect {{model}}":"Перенаправить {{model}}","Redirect fetched upstream names to the names your users call.":"Перенаправьте полученные имена провайдера на имена, которые вызывают пользователи.","Redirect panel":"Панель перенаправлений","Redirect URL":"URL перенаправления","Redirecting to chat page...":"Перенаправление на страницу чата...","Redirecting to Creem checkout...":"Перенаправление на кассу Creem...","Redirecting to GitHub...":"Перенаправление на GitHub...","Redirecting to payment page...":"Перенаправление на страницу оплаты...","Redirecting to sign in in {{seconds}} seconds.":"Переход на страницу входа через {{seconds}} сек.","Redirects to {{model}}":"Перенаправляется на {{model}}","Reduces cache hit rate":"Снижает долю попаданий в кэш","Reduces repeated wording":"Уменьшает повторение формулировок","Reference Video":"Эталонное видео","Referral link:":"Реферальная ссылка:","Referral Program":"Реферальная программа","Referral reward transfer is disabled until the administrator confirms compliance terms.":"Перевод реферальных наград отключен, пока администратор не подтвердит условия соответствия.","Refine models by provider, group, type, and tags.":"Уточняйте список моделей по поставщику, группе, типу и тегам.","Refresh":"Обновить","Refresh Cache":"Обновить кэш","Refresh credential":"Обновить учётные данные","Refresh details":"Обновить сведения","Refresh failed":"Ошибка обновления","Refresh failed. Showing the last successful snapshot.":"Обновление не удалось. Показан последний успешно полученный снимок.","Refresh interval (minutes)":"Интервал обновления (минуты)","Refresh preview":"Обновить предпросмотр","Refresh Stats":"Обновить статистику","Refresh the list and try again.":"Обновите список и повторите попытку.","Refresh the preview before trying again; some changes may already have been saved.":"Обновите предпросмотр перед повторной попыткой: часть изменений уже могла сохраниться.","Refreshing...":"Обновление...","Refund":"Возврат","Refund Details":"Детали возврата","Regenerate":"Перегенерировать","Regenerate Backup Codes":"Сгенерировать резервные коды","Regenerated two-factor backup codes":"Резервные коды двухфакторной аутентификации обновлены","Regenerating immediately invalidates any existing token.":"Перегенерация немедленно делает недействительными все существующие токены.","Regex":"Регулярное выражение","Regex Pattern":"Регулярное выражение","Regex Replace":"Замена по regex","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"Зарегистрируйте каждый URL в соответствующем слоте вебхука Test Mode / Production Mode в панели Pancake. Раздельные конечные точки предотвращают случайное зачисление тестового трафика на производственные аккаунты.","Register Passkey":"Регистрация Passkey","Registered":"Зарегистрирован","Registered a passkey":"Ключ доступа зарегистрирован","Registration Enabled":"Регистрация включена","Registration flow expired. Please try again.":"Процесс регистрации истёк. Повторите попытку.","Registry (optional)":"Реестр (необязательно)","Registry secret":"Секрет реестра","Registry username":"Имя пользователя реестра","Reinstall latest":"Переустановить последнюю","Reject Reason":"Причина отклонения","Release details":"Детали релиза","Release to insert a new priority tier":"Отпустите, чтобы вставить новый уровень приоритета","Release to join priority {{priority}}":"Отпустите, чтобы присоединиться к приоритету {{priority}}","Released":"Выпущено","Reload pricing":"Перезагрузить цены","Reload vendor details":"Перезагрузить данные поставщика","Relying Party Display Name":"Отображаемое имя проверяющей стороны","Relying Party ID":"Идентификатор проверяющей стороны","Remaining":"Остаток","Remaining percentage":"Оставшаяся доля","Remaining quota":"Остаток квоты","Remaining Quota ({{currency}})":"Остаток квоты ({{currency}})","Remaining quota units":"Остаток единиц квоты","Remaining:":"Осталось:","Remark":"Примечания","Remind me once when my balance drops below the threshold":"Напомнить один раз, когда баланс опустится ниже порога","Remind users through their chosen notification method when their balance drops below the threshold":"Напоминать пользователям выбранным ими способом уведомления, когда баланс опускается ниже порога","Reminder threshold":"Порог напоминания","Reminder threshold cannot be negative":"Порог напоминания не может быть отрицательным","Remove":"Удалить","Remove {{group}}":"Удалить {{group}}","Remove {{value}}":"Удалить {{value}}","Remove ${{amount}}":"Удалить ${{amount}}","Remove all custom prices, ratios and billing expressions for these exact model names. Built-in pricing may become effective again.":"Удаляет все пользовательские цены, коэффициенты и выражения тарификации для точных имён моделей. Встроенные цены могут снова вступить в силу.","Remove all log entries created before the selected timestamp.":"Удалить все записи журнала, созданные до выбранной отметки времени.","Remove attachment":"Удалить вложение","Remove branch":"Удалить ветвь","Remove compatible Passkey domains?":"Удалить совместимые домены ключей доступа?","Remove condition":"Удалить условие","Remove domains":"Удалить домены","Remove Duplicates":"Удалить дубликаты","Remove end condition":"Удалить конечное условие","Remove filter":"Удалить фильтр","Remove functionResponse.id field":"Удалить поле functionResponse.id","Remove mapped targets":"Удалить сопоставленные цели","Remove Models":"Удалить модели","Remove negation":"Отменить инверсию","Remove node filter":"Удалить фильтр узла","Remove Passkey":"Отвязать Passkey","Remove Passkey?":"Удалить ключ доступа?","Remove rule group":"Удалить группу правил","Remove saved price":"Удалить сохранённую цену","Remove source {{name}}":"Удалить источник {{name}}","Remove start condition":"Удалить начальное условие","Remove string prefix":"Удалить префикс строки","Remove string suffix":"Удалить суффикс строки","Remove the target field":"Удалить целевое поле","Remove this model’s custom pricing and use the built-in defaults. A model without a default may become unpriced.":"Удалить пользовательские цены и восстановить встроенные значения. Модель без цены по умолчанию может остаться без тарифа.","Remove tier":"Удалить уровень","Removed":"Удалено","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"Удалено {{removed}} дублирующихся ключей. До: {{before}}, После: {{after}}","Removed an OAuth binding for the user":"Привязка OAuth пользователя удалена","Removed models":"Удалённые модели","Removed Models ({{count}})":"Удалённые модели ({{count}})","Removed models will no longer be available through this channel. Select removals explicitly.":"Удалённые модели станут недоступны через этот канал. Явно выберите модели для удаления.","Removed settings":"Удаляемые настройки","Removes MjProxy flags such as --fast, --relax, and --turbo from user prompts.":"Удаляет флаги MjProxy, такие как --fast, --relax и --turbo, из промптов пользователя.","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"Удаление ключа доступа потребует от вас входа с паролем в следующий раз. Вы можете перерегистрироваться в любое время.","Rename":"Переименовать","Rename deployment":"Переименовать развертывание","Rename failed":"Ошибка переименования","Renamed an access token":"Переименован токен доступа","Renamed successfully":"Успешно переименовано","Renaming metadata does not rename channel models or move pricing. Existing prices stay with the original model name.":"Переименование метаданных не меняет имена моделей каналов и не переносит цены. Цены остаются у исходного имени модели.","Reorder channel {{id}}":"Изменить порядок канала {{id}}","Repair":"Восстановить","Repair Channel Consistency":"Восстановить согласованность каналов","Repair channel consistency?":"Восстановить согласованность каналов?","Repeat the administrator password":"Повторите пароль администратора","Replace":"Заменить","Replace {{find}} with {{replaceWith}}":"Заменить {{find}} на {{replaceWith}}","Replace all existing keys":"Заменить все существующие ключи","Replace channel models":"Замена моделей каналов","Replace forwarding routes?":"Заменить маршруты пересылки?","Replace mode: Will completely replace all existing keys":"Режим замены: полностью заменит все существующие ключи","Replace text":"Заменить текст","Replace with":"Заменить на","Replace With":"Заменить на","replaced":"заменено","Replacement Model":"Модель замены","Replay drag demo":"Повторить показ","Replica count":"Количество реплик","Replicate":"Replicate","Report an issue":"Сообщить о проблеме","request":"запрос","Request":"Запрос","Request & Response":"Запрос и ответ","Request Body Disk Cache":"Дисковый кэш тела запроса","Request Body Field":"Поле тела запроса","Request Body Memory Cache":"Кэш памяти тела запроса","Request body must be a JSON object.":"Тело запроса должно быть объектом JSON.","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"Проброс тела запроса включён. Тело запроса будет отправлено напрямую без конвертации.","Request checks":"Проверка запросов","Request completed":"Запрос завершён","Request conversion":"Преобразование запроса","Request Conversion":"Конвертация запроса","Request Count":"Количество запросов","Request decision flow":"Схема решений по запросу","Request error occurred":"Произошла ошибка запроса","Request failed":"Запрос не выполнен","Request flow":"Поток запросов","Request Header Field":"Поле заголовка запроса","Request Header Override":"Переопределение заголовков запроса","Request Header Overrides":"Переопределения заголовков запроса","Request headers must be a JSON object with string values.":"Заголовки должны быть объектом JSON со строковыми значениями.","Request ID":"ID запроса","Request Limits":"Лимиты запросов","Request Model":"Запрошенная модель","Request Model Name":"Имя модели в запросе","Request Model:":"Модель запроса:","Request names your users call":"Имена запроса, которые вызывают пользователи","Request overrides, routing behavior, and upstream model automation":"Переопределения запросов, маршрутизация и автоматизация upstream-моделей","Request Path":"Путь запроса","Request policies":"Политики запросов","Request policy decisions":"Решения политики запросов","Request processing":"Обработка запросов","Request rejected locally":"Запрос отклонён локально","Request retry":"Повтор запросов","Request rule pricing":"Правила ценообразования по запросу","Request rules apply on top of this amount.":"Правила запроса применяются дополнительно к этой сумме.","Request simulation":"Моделирование запроса","Request success rate sampled over the last 24 hours":"Доля успешных запросов по выборкам за последние 24 часа","Request success rate; {{incidents}} incident buckets in the last 24 hours":"Доля успешных запросов; {{incidents}} интервалов с инцидентами за последние 24 часа","Request text filtering":"Фильтрация текста запросов","Request timed out, please refresh and restart GitHub login":"Время ожидания истекло, обновите страницу и снова запустите вход через GitHub","Request-based":"Зависит от запроса","Requested items":"Запрошенные элементы","Requested quota":"Запрошенная сумма","Requested quota: {{quota}}":"Запрошенная сумма: {{quota}}","Requested redemption code IDs":"ID кодов погашения, запрошенных к удалению","Requested token IDs":"Запрошенные ID токенов","Requested token IDs truncated":"Список запрошенных ID токенов усечён","Requested: {{total}}":"Запрошено: {{total}}","Requested: {{total}} · Deleted: {{processed}}":"Запрошено: {{total}} · Удалено: {{processed}}","Requested: {{total}} · Returned: {{processed}}":"Запрошено: {{total}} · Возвращено: {{processed}}","Requests":"Запросы","Requests (24h)":"Запросы (24 ч)","Requests / 24h":"Запросы / 24 ч","Requests per minute":"Запросов в минуту","requests served":"обслуженных запросов","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"Запросы будут перенаправлены этому воркеру. Конечные слеши удаляются автоматически.","Requests:":"Запросы:","Require email verification for new accounts":"Требовать подтверждение электронной почты для новых учетных записей","Require job success before follow-up actions":"Требовать успеха задания перед последующими действиями","Require login to view models":"Требовать вход для просмотра моделей","Require login to view rankings":"Требовать вход для просмотра рейтингов","Require the original channel":"Использовать только исходный канал","required":"обязателен","Required":"Обязательно","Required events:":"Обязательные события:","Required permission":"Требуемое право","Required provider, authentication, model, and group settings":"Обязательные настройки провайдера, аутентификации, моделей и групп","Required to expose MjProxy-style image generation to end users.":"Необходимо для предоставления генерации изображений в стиле MjProxy конечным пользователям.","Requires an available channel and access to its group.":"Нужен доступный канал и доступ к его группе.","Requires global auto-disable and this channel option.":"Нужно включить автоотключение глобально и для этого канала.","Requires upstream WebSocket support":"Требуется поддержка WebSocket провайдером","Rerank":"Переранжировать","Reroll":"Повторить","Research, analysis, scientific reasoning":"Исследования, анализ, научные рассуждения","Resend ({{seconds}}s)":"Отправить повторно ({{seconds}}с)","Resend codes":"Отправить коды повторно","Resend in {{seconds}}s":"Повторная отправка через {{seconds}} с","Reserve requested images; settle returned images.":"Резервирование по запрошенному количеству, расчёт — по полученному.","Reserve the estimated input cost multiplied by this value, without estimating output tokens. Defaults to 1; positive decimals such as 0.5 and 1.5 are supported. Final charges use actual usage. Per-request and task prices are unaffected.":"Резервируется оценочная стоимость ввода, умноженная на это значение, без оценки выходных токенов. По умолчанию 1; допустимы положительные дроби, например 0,5 и 1,5. Итоговая плата зависит от фактического использования. Тарифы за запрос и за задачу не меняются.","Reserved for viewing complete channel keys after secure verification.":"Зарезервировано для просмотра полных ключей каналов после безопасной проверки.","Reset":"Сброс","Reset {{count}} active subscriptions":"Сброшено активных подписок: {{count}}","Reset 2FA":"Сбросить 2FA","Reset 2FA for {{username}}? The user must set up 2FA again to continue using it.":"Сбросить 2FA для {{username}}? Пользователь должен будет настроить 2FA заново, чтобы продолжить ее использовать.","Reset active {{plan}} subscriptions for this user?":"Сбросить активные подписки {{plan}} для этого пользователя?","Reset all active subscriptions under {{plan}}?":"Сбросить все активные подписки по {{plan}}?","Reset all model prices?":"Сбросить все цены моделей?","Reset all model ratios?":"Сбросить все соотношения моделей?","Resume drag demo":"Продолжить демонстрацию","Review the affected Passkeys and confirm the domain removal. If the settings or impact have changed, confirmation is required again.":"Проверьте затронутые Passkey и подтвердите удаление домена. Если настройки или последствия изменились, потребуется повторное подтверждение.","Reset all settings to default values":"Сбросить все настройки до значений по умолчанию","Reset at:":"Сброс в:","Reset balance and used quota":"Сбросить баланс и использованную квоту","Reset completed":"Сброс завершён","Reset completed. Latest usage has been refreshed.":"Сброс завершён. Последние данные использования обновлены.","Reset Count":"Количество сбросов","Reset count:":"Сбросов:","Reset Credit":"Сброс лимита","Reset Credits":"Сбросы лимита","Reset Cycle":"Цикл сброса","Reset email sent, please check your inbox":"Письмо для сброса отправлено, проверьте входящие","Reset failed":"Ошибка сброса","Reset model ratios":"Коэффициенты моделей сброшены","Reset Passkey":"Сброс Passkey","Reset Passkey for {{username}}? The user will need to register a new Passkey before using passwordless login.":"Сбросить Passkey для {{username}}? Пользователю нужно будет зарегистрировать новый Passkey перед входом без пароля.","Reset password":"Сбросить пароль","Reset Period":"Период сброса","Reset prices":"Сбросить цены","Reset quota":"Сбросить квоту","Reset ratios":"Сбросить соотношения","Reset Stats":"Сбросить статистику","Reset subscription quota":"Сбросить квоту подписки","Reset the user passkey":"Ключ доступа пользователя сброшен","Reset to default":"Сбросить до значений по умолчанию","Reset to Default":"Сбросить по умолчанию","Reset to default configuration":"Сброшено к конфигурации по умолчанию","Reset Two-Factor Authentication":"Сброс 2FA","Reset usage window":"Сбросить окно использования","Resets in:":"Сброс через:","Resetting...":"Сброс...","Resize column":"Изменить ширину столбца","Resolve Conflicts":"Разрешить конфликты","Resource Configuration":"Конфигурация ресурсов","Resources":"Ресурсы","Responding...":"Отвечаем...","Response":"Ответ","Response Model":"Модель в ответе","Response model mismatch":"Несовпадение модели в ответе","Response model: {{model}}":"Модель в ответе: {{model}}","Response Time":"Время ответа","Response time: {{duration}}":"Время ответа: {{duration}}","Response too large":"Ответ слишком большой","Responses API Version":"Версия API ответов","Responses WebSocket":"Responses WebSocket","Restore default pricing":"Восстановить цены по умолчанию","Restore defaults":"Сбросить к значениям по умолчанию","Restore global Auto":"Восстановить глобальный Auto","Restore notifications":"Включить уведомления","Restrict user model request frequency (may impact high concurrency performance)":"Ограничить частоту запросов пользовательских моделей (может повлиять на производительность при высокой конкуренции)","Result":"Результат","Result not retained":"Результат не сохранён","Retain last N days":"Хранить последние N дней","Retain last N files":"Хранить последние N файлов","Retention days":"Дней хранения","Retrieve result":"Получить результат","Retry":"Повторить попытку","rule_name cannot be empty":"rule_name не может быть пустым","Retry budget":"Бюджет повторов","Retry Chain":"Цепочка повторов","Retry Settings":"Настройки повторов","Retry Suggestion":"Рекомендация по повтору","Retry Times":"Количество повторных попыток","Return a custom error immediately":"Немедленно вернуть пользовательскую ошибку","Return Custom Error":"Вернуть пользовательскую ошибку","Return data conforming to a JSON schema":"Возвращать данные, соответствующие JSON-схеме","Return Error":"Вернуть ошибку","Return per-token log probabilities":"Возвращать логарифмические вероятности по токенам","Return to dashboard":"Вернуться на панель управления","Return to the original window to continue.":"Вернитесь в исходное окно, чтобы продолжить.","Return vector embeddings for inputs":"Возвращать векторные эмбеддинги для входных данных","Returned keys":"Возвращённые ключи","Returned token IDs":"Возвращённые ID токенов","Returned: {{processed}}":"Возвращено: {{processed}}","Reveal API key":"Показать API ключ","Reveal full keys":"Показ полных ключей","Reveal key":"Показать ключ","Revenue":"Доход","Review & initialize":"Проверить и инициализировать","Review and confirm the selected prices.":"Проверьте и подтвердите выбранные цены.","Review and sign out devices currently using your account.":"Просмотрите устройства, использующие вашу учётную запись, и завершите их сеансы.","Review and upgrade":"Проверить и обновить","Review confirmation":"Проверить подтверждение","Review every addition and overwrite before applying. Pricing, channels, and group access are not changed.":"Перед применением проверьте каждое добавление и перезапись. Цены, каналы и права групп не изменятся.","Review model rates before scaling traffic":"Проверьте тарифы моделей перед масштабированием трафика","Review selected changes":"Проверить выбранные изменения","Review the affected records before applying. Pricing, channels, and model names are preserved.":"Перед применением проверьте затронутые записи. Цены, каналы и имена моделей сохраняются.","Review the compatible domains and allowed websites, then save changes on the settings page.":"Проверьте совместимые домены и разрешённые сайты, затем сохраните изменения на странице настроек.","Review the model changes before applying. Unselected models stay unchanged and will not be ignored.":"Проверьте изменения перед применением. Невыбранные модели не изменятся и не попадут в список игнорируемых.","Review the prices and billing expression. Confirming updates the draft; save model pricing to apply it.":"Проверьте цены и выражение тарификации. Подтверждение обновит черновик; изменения вступят в силу после сохранения цен модели.","Review your payment details":"Проверьте свои платежные данные","Review your purchase details before proceeding.":"Просмотрите детали покупки перед продолжением.","Revoke":"Отозвать","Revoke session?":"Отозвать сеанс?","Revoke this access token? Scripts using it stop working immediately.":"Отозвать этот токен доступа? Скрипты, которые его используют, сразу перестанут работать.","Revoked access tokens":"Отозванные токены доступа","Revoked an access token":"Отозван токен доступа","Rewards will be added directly to your balance":"Награды будут добавлены напрямую в ваш баланс","Rewrite callback URLs to the local server":"Перезаписывать URL обратных вызовов на локальный сервер","Right to Left":"Справа налево","Role":"Роль","Roleplay":"Ролевые игры","Root":"Root","Root Diagnostics":"Диагностика Root","Rose Garden":"Розовый сад","Route":"Маршрут","Route active":"Маршрут активен","Route Description":"Описание маршрута","Route group":"Группа маршрутов","Route is required":"Маршрут обязателен","Route models must be unique for the same incoming path":"Модели маршрутов для одного входного пути должны быть уникальными","Route, auth, and balance check in one place":"Маршрут, аутентификация и баланс в одном месте","Routes":"Маршруты","Routes in this plan":"Маршруты в этой схеме","Routes with the same incoming path are matched by model. Leave the model scope empty only for the final fallback route.":"Маршруты с одним входным путем сопоставляются по модели. Оставляйте область моделей пустой только для последнего резервного маршрута.","Routes with the same incoming path are split by client model rules. Unmatched requests use the final fallback.":"Маршруты с одним входным путем разделяются правилами client model. Неподходящие запросы используют последний резервный маршрут.","Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.":"Маршруты с одним входным путем разделяются по точной модели клиента. Несовпавшие запросы идут в последний резерв.","Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.":"Маршруты с одним входным путем сопоставляются с точными именами моделей клиента. Несколько моделей разделяйте запятыми, пустым оставляйте только последний резерв.","Routing & Mapping":"Маршрутизация и сопоставление","Routing & Overrides":"Маршрутизация и переопределения","Routing Group":"Группа маршрутизации","Routing Reliability":"Надежность маршрутизации","Routing Strategy":"Стратегия маршрутизации","Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.":"Строки — группы пользователей, столбцы — тарифные группы. Пустые ячейки используют базовый коэффициент, показанный серым.","Rows per page":"Строк на страницу","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = запросов в минуту, TPM = токенов в минуту, RPD = запросов в день. Ограничения применяются к каждой группе токенов.","RSA Private Key (Production)":"RSA-приватный ключ (Продакшн)","RSA Private Key (Sandbox)":"RSA-приватный ключ (Песочница)","Rule":"Правило","Rule {{line}} is missing source field":"В правиле {{line}} отсутствует исходное поле","Rule {{line}} is missing target field":"В правиле {{line}} отсутствует целевое поле","Rule {{line}} is missing target path":"В правиле {{line}} отсутствует целевой путь","Rule {{line}} is missing value":"В правиле {{line}} отсутствует значение","Rule {{line}} pass_headers format is invalid":"Формат pass_headers в правиле {{line}} невалиден","Rule {{line}} pass_headers is missing header names":"В правиле {{line}} pass_headers отсутствуют имена заголовков","Rule {{line}} prune_objects is missing conditions":"В правиле {{line}} prune_objects отсутствуют условия","Rule {{line}} return_error requires a message field":"В правиле {{line}} return_error требуется поле message","Rule Description (optional)":"Описание правила (необязательно)","Rule editor mode":"Режим редактирования правил","Rule group":"Группа правил","Rule override":"Настройка правила","rules":"правила","Rules":"Правила","Rules are checked in order. The first match determines the price.":"Правила проверяются по порядку. Первое совпадение определяет цену.","Rules can inherit or override these defaults.":"Правила могут наследовать или переопределять эти значения.","Rules for {{group}}":"Правила для {{group}}","Rules JSON":"Правила JSON","Rules JSON must be an array":"JSON правил должен быть массивом","Rules match the original model value from the client request body.":"Правила сопоставляются с исходным значением model из тела клиентского запроса.","Run and manage maintenance tasks and performance settings.":"Запуск и управление задачами обслуживания и настройками производительности.","Run background checks using the selected test mode":"Выполнять фоновые проверки в выбранном режиме","Run dry run":"Пробный запуск","Run GC":"Запустить GC","Run tests for the selected models":"Запустить тесты для выбранных моделей","running":"выполняется","Running":"Выполняется","Running dry run":"Выполняется пробный запуск","Running requests":"Выполняемые запросы","Runtime":"Среда выполнения","Runtime status":"Состояние выполнения","Runway":"Запас","s":"s","Safety Settings":"Настройки безопасности","Same as Local":"То же, что и локальный","Sample interval: {{seconds}} seconds":"Интервал выборки: {{seconds}} с","Sampling temperature; lower is more deterministic":"Температура сэмплирования; чем ниже, тем детерминированнее","Sandbox":"Песочница","Sandbox mode":"Режим песочницы","Save":"Сохранить","Save & Submit":"Сохранить и отправить","Save all settings":"Сохранить все настройки","Save as a file":"Сохранить в файл","Save as Markdown":"Сохранить в Markdown","Save as TXT":"Сохранить в TXT","Save Backup Codes":"Сохранить резервные коды","Save changes":"Сохранить изменения","Save Changes":"Сохранить изменения","Save chat settings":"Сохранить настройки чата","Save check-in settings":"Сохранить настройки прибытия","Save Creem settings":"Сохранить настройки Creem","Save drawing settings":"Сохранить настройки рисования","Save Epay settings":"Сохранить настройки Epay","Save failed":"Не удалось сохранить","Save failed, please retry":"Не удалось сохранить, попробуйте снова","Save general settings":"Сохранить общие настройки","Save group ratios":"Сохранить коэффициенты групп","Save group settings":"Сохранить настройки групп","Save io.net settings":"Сохранить настройки io.net","Save log settings":"Сохранить настройки журнала","Save metadata":"Сохранить метаданные","Save model prices":"Сохранить цены моделей","Save model ratios":"Сохранить коэффициенты моделей","Save Models":"Сохранить модели","Save monitoring rules":"Сохранить правила мониторинга","Save navigation":"Сохранить навигацию","Save notice":"Сохранить уведомление","Save or discard pricing changes before renaming metadata.":"Перед переименованием метаданных сохраните или отмените изменения цен.","Save Preferences":"Сохранить настройки","Save preview":"Предпросмотр сохранения","Save rate limits":"Сохранить лимиты скорости","Save redemption codes":"Сохранить коды погашения","Save sensitive words":"Сохранить чувствительные слова","Save Settings":"Сохранить настройки","Save sidebar modules":"Сохранить модули боковой панели","Save SSRF settings":"Сохранить настройки SSRF","Save Stripe settings":"Сохранить настройки Stripe","Save these backup codes in a safe place. Each code can only be used once.":"Сохраните эти резервные коды в безопасном месте. Каждый код может быть использован только один раз.","Save these codes in a safe place. Each code can only be used once.":"Сохраните эти коды в безопасном месте. Каждый код может быть использован только один раз.","Save token limits":"Сохранить лимиты токенов","Save tool prices":"Сохранить цены инструментов","Save Waffo Pancake settings":"Сохранить настройки Waffo Pancake","Save Worker settings":"Сохранить настройки Worker","Saved successfully":"Сохранено успешно","Saving permission changes requires security verification":"Для сохранения изменений прав требуется проверка безопасности","Saving...":"Сохранение...","Scan QR Code":"Сканировать QR-код","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"Отсканируйте QR-код, откройте официальный аккаунт и ответьте «验证码», чтобы получить код подтверждения.","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"Отсканируйте этот QR-код с помощью вашего приложения-аутентификатора (Google Authenticator, Microsoft Authenticator и т.д.)","Scenario Templates":"Шаблоны сценариев","Scheduled channel tests":"Запланированные тесты канала","Scheduled full test":"Полная проверка по расписанию","Scheduled full test probes non-manually-disabled channels; passive recovery only checks auto-disabled channels after real request failures.":"Полная проверка по расписанию проверяет каналы, не отключенные вручную; пассивное восстановление проверяет только автоматически отключенные каналы после сбоев реальных запросов.","Scheduled or bulk health checks can disable a channel when this duration is exceeded, if both global and channel auto-disable are enabled.":"Если автоотключение включено глобально и для канала, превышение этой длительности при периодической или массовой проверке может отключить канал.","Scheduled recovery is off. Bulk channel tests can still re-enable automatically disabled channels.":"Периодическое восстановление отключено. Массовые проверки могут восстановить автоматически отключённые каналы.","Scheduled test options":"Параметры плановых проверок","scheduling controls":"механизмов управления маршрутизацией","Science":"Наука","Scope":"Область","Scopes":"Области доступа","Search":"Поиск","Search by name or URL...":"Поиск по имени или URL...","Select at least one valid permission.":"Выберите хотя бы одно допустимое разрешение.","Search by order number...":"Поиск по номеру заказа...","Search channel type...":"Поиск типа канала...","Search chat presets...":"Поиск предустановок чата...","Search colors...":"Поиск цветов...","Search conflicting models or fields":"Поиск конфликтующих моделей или полей","Search deployments...":"Поиск развертываний...","Search feature in development":"Функция поиска в разработке","Search group names...":"Поиск названий групп...","Search groups by name or description":"Поиск по названию или описанию","Search groups...":"Поиск групп...","Search icons or enter an icon key":"Найдите иконку или введите её ключ","Search method identifiers...":"Поиск идентификаторов способов...","Search missing models":"Поиск отсутствующих моделей","Search model name, provider, endpoint, or tag...":"Поиск по названию модели, поставщику, endpoint или тегу...","Search model name...":"Поиск имени модели...","Search models":"Поиск моделей","Search models or fields...":"Поиск моделей или полей...","Search models...":"Поиск моделей...","Search payment methods...":"Поиск способов оплаты...","Search payment type keys...":"Поиск ключей типа оплаты...","Search payment types...":"Поиск типов оплаты...","Search products...":"Поиск продуктов...","Search providers, plugins, or type numbers":"Поиск поставщика, плагина или номера типа","Search rules...":"Поиск правил…","Search tags...":"Поиск тегов...","Search the public web at inference time":"Искать в общедоступной сети во время инференса","Search vendor names or descriptions":"Поиск по имени или описанию поставщика","Search vendors":"Поиск поставщиков","Search vendors...":"Поиск поставщиков...","Search, add, and edit model vendors.":"Поиск, добавление и редактирование поставщиков моделей.","Search...":"Поиск...","second":"секунда","Second":"Секунда","seconds":"секунды","Secret env (JSON object)":"Секретные переменные окружения (объект JSON)","Secret environment variables (JSON)":"Секретные переменные окружения (JSON)","Secret Key":"Секретный ключ","Secure & Reliable":"Безопасно и надежно","Secured":"Защищено","Security":"Безопасность","Security & Access":"Безопасность и доступ","Security & Limits":"Безопасность и лимиты","Security Check":"Проверка безопасности","Security verification":"Подтверждение безопасности","Security verification has expired. Please verify again.":"Срок подтверждения безопасности истёк. Подтвердите личность снова.","Security verification is no longer valid. Please verify again.":"Подтверждение безопасности больше не действует. Пройдите его снова.","Seed":"Seed","Select":"Выбрать","Select {{name}}":"Выбрать {{name}}","Select a color":"Выбрать цвет","Select a complete plan, then keep only the routes you need.":"Выберите полную схему, затем оставьте только нужные маршруты.","Select a concrete model to configure pricing. Metadata matching does not propagate prices.":"Выберите конкретную модель для настройки цены. Сопоставление метаданных не распространяет цены.","Select a group":"Выбрать группу","Select a group type":"Выбрать тип группы","Select a model to edit pricing":"Выберите модель для редактирования тарифа","Select a preset...":"Выберите предустановку...","Select a price source and review pricing changes. Model metadata and channel access are not changed.":"Выберите источник цен и проверьте изменения. Метаданные и доступ к каналам не изменятся.","Select a product":"Выберите продукт","Select a role":"Выбрать роль","Select a rule to edit.":"Выберите правило для редактирования.","Select a saved vendor.":"Выберите сохранённого поставщика.","Select a store":"Выберите магазин","Select a suggested icon or keep an existing advanced icon key.":"Выберите предложенную иконку или сохраните существующий расширенный ключ.","Select a timestamp before clearing logs.":"Выберите временную метку перед очисткой журналов.","Select a usage mode to continue":"Выберите режим использования для продолжения","Select a verification method first":"Сначала выберите метод верификации","Select a version to compare":"Выберите версию для сравнения","Select active subscription plan":"Выберите активный тариф подписки","Select all":"Выбрать все","Select all (filtered)":"& Выбрать все отфильтрованные","Select all changed fields":"Выбрать все изменённые поля","Select all matching models":"Выбрать все подходящие модели","Select all models":"Выбрать все модели","Select all models in {{category}}":"Выбрать все модели в {{category}}","Select all prices from {{source}}":"Выбрать все цены из {{source}}","Select all syncable models (all pages, {{count}})":"Выбрать все доступные модели (все страницы, {{count}})","Select All Visible":"Выбрать все видимые","Select an operation mode and enter the amount":"Выберите режим операции и введите сумму","Select announcement type":"Выбрать тип объявления","Select at least one Auto group or restore global Auto.":"Выберите хотя бы одну группу Auto или восстановите глобальный порядок Auto.","Select at least one field to overwrite.":"Выберите хотя бы одно поле для перезаписи.","Select at least one model to preview mappings.":"Выберите хотя бы одну модель для предварительного просмотра сопоставлений.","Select at least one permission":"Выберите хотя бы одно право","Select at least one route":"Выберите хотя бы один маршрут","Select at least one target model":"Выберите хотя бы одну целевую модель","Select at most {{max}} Auto groups":"Выберите не более {{max}} групп Auto","Select body font":"Выберите шрифт текста","Select border radius":"Выберите радиус скругления","Select channel type":"Выбрать тип канала","Select color preset":"Выберите цветовую предустановку","Select content width":"Выберите ширину контента","Select corner radius":"Выберите радиус скругления","Select currency":"Выберите валюту","Select date":"Выберите дату","Select default chart":"Выберите график по умолчанию","Select default range":"Выберите диапазон по умолчанию","Select display mode":"Выбрать режим отображения","Select end time":"Выбрать время окончания","Select from presets or type custom identifier.":"Выберите из предустановок или введите пользовательский идентификатор.","Select granularity":"Выбрать детализацию","Select groups (leave empty to keep current)":"Выбрать группы (оставьте пустым, чтобы сохранить текущие)","Select interface density":"Выберите плотность интерфейса","Select items...":"Выберите элементы...","Select key format":"Выберите формат ключа","Select language":"Выберите язык","Select Language":"Выбрать язык","Select layout style":"Выбрать стиль макета","Select locations":"Выбрать локации","Select model":"Выбрать модель","Select Model":"Выбрать модель","Select model {{model}}":"Выбрать модель {{model}}","Select models":"Выбрать модели","Select models (empty for allow all)":"Выбрать модели (пусто для разрешения всех)","Select models and apply to channel models list.":"Выберите модели и примените к списку моделей каналов.","Select models or add custom ones":"Выбрать модели или добавить пользовательские","Select models to process. Unselected \\"add\\" models will be ignored.":"Выберите модели для обработки. Невыбранные модели «добавить» будут проигнорированы.","Select models to run batch tests.":"Выберите модели для запуска пакетных тестов.","Select or enter color value":"Выбрать или ввести значение цвета","Select or enter method identifier":"Выберите или введите идентификатор способа","Select or enter model name":"Выберите или введите имя модели","Select or enter payment type":"Выбрать или ввести тип оплаты","Select or enter payment type key":"Выберите или введите ключ типа оплаты","Select payment method":"Выберите способ оплаты","Select preset or enter custom CSS color value.":"Выберите предустановку или введите пользовательское значение цвета CSS.","Select price for {{model}} from {{source}}":"Выбрать цену {{model}} из {{source}}","Select price sources":"Выбрать источники цен","Select publish date":"Выберите дату публикации","Select requirement":"Выбрать требование","Select row":"Выбрать строку","Select row {{number}}":"Выбрать строку {{number}}","Select sidebar style":"Выбрать стиль боковой панели","Select site direction":"Выбрать направление сайта","Select start time":"Выбрать время начала","Select subscription plan":"Выбрать план подписки","Select successful models ({{count}})":"Выбрать успешные модели ({{count}})","Select Sync Channels":"Выбрать каналы синхронизации","Select sync channels to compare prices":"Выберите каналы синхронизации для сравнения цен","Select sync channels to compare ratios":"Выбрать каналы синхронизации для сравнения соотношений","Select Sync Source":"Выбрать источник синхронизации","Select syncable models on this page":"Выбрать доступные модели на этой странице","Select task plugin":"Выберите плагин задач","Select the API endpoint region":"Выбрать регион конечной точки API","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"Выберите поля, которые вы хотите перезаписать данными из вышестоящего источника. Невыбранные поля сохранят свои локальные значения.","Select the models to keep in this channel.":"Выберите модели, которые нужно оставить в этом канале.","Select the task plugins installed on the upstream gateway":"Выберите плагины задач, установленные на вышестоящем шлюзе","Settings updated":"Настройки обновлены","Select theme preference":"Выбрать предпочтение темы","Settled by the task usage expression":"Расчёт по выражению использования задачи","Select theme preset":"Выберите пресет темы","Select time granularity":"Выбрать детализацию времени","Select vendor":"Выбрать поставщика","Select version":"Выбрать версию","Selectable groups":"Выбираемые группы","selected":"выбрано","Selected {{count}}":"Выбрано: {{count}}","Selected {{selected}} / {{total}}":"Выбрано {{selected}} / {{total}}","selected channel(s). Leave empty to remove tag.":"выбранный канал(ы). Оставьте пустым, чтобы удалить тег.","Selected conflicts were overwritten successfully.":"Выбранные конфликты успешно перезаписаны.","Selected names are":"Выбранные имена","Selected nodes":"Выбранные узлы","Selected when creating a token and used as the default billing group for API calls.":"Выбирается при создании токена и используется как группа тарификации по умолчанию для вызовов API.","Selecting a plugin fills its declared models and default base URL.":"Выбор плагина заполняет заявленные модели и базовый URL по умолчанию.","Self-Use Mode":"Режим самоиспользования","Send":"Отправить","Send a request":"Отправить запрос","Send chat completions to the OpenAI-compatible /v1/chat/completions instead of the native Ollama /api/chat":"Отправлять chat completions на OpenAI-совместимый /v1/chat/completions вместо нативного /api/chat Ollama","Send code":"Отправить код","Send reset email":"Отправить письмо для сброса пароля","Send the original request body to upstream without conversion. Only available for native forwarding routes.":"Отправлять исходное тело запроса вышестоящему серверу без преобразования. Доступно только для маршрутов с нативной пересылкой.","Sending...":"Отправка...","Sensitive channel settings are read-only for your account.":"Чувствительные настройки каналов доступны вашей учетной записи только для чтения.","Sensitive Words":"Чувствительные слова","Sent the API key to FluentRead.":"API-ключ отправлен в FluentRead.","Separate image/audio prices are enabled.":"Отдельные цены для изображений и аудио включены.","Separate multiple rules with English commas. For regex patterns that need commas, switch to JSON Text.":"Разделяйте несколько правил английскими запятыми. Если regex нужны запятые, переключитесь на JSON Text.","Separate several values with commas":"Несколько значений разделяйте запятыми","Serve multiple users or teams with billing and quota control.":"Обслуживание нескольких пользователей или команд с управлением биллингом и квотами.","Server Address":"Адрес сервера","Server IP":"IP сервера","Server Log Management":"Управление журналами сервера","Server logging is not enabled (log directory not configured)":"Журналирование сервера не включено (каталог журналов не настроен)","Server Token":"Токен сервера","Service account JSON file(s)":"JSON-файл сервисного аккаунта","Session":"Сессия","Session behavior":"Поведение сессии","Session behavior prevents switching channels":"Настройка сессии запрещает переключение каналов","Session defaults":"Настройки сеанса по умолчанию","Session expired!":"Сессия истекла!","Session expired?":"Сессия истекла?","Session rule":"Правило сессии","Session rule matched":"Совпало правило сессии","Session rules":"Правила сессии","Session rules table":"Таблица правил сессий","Session signed out":"Сеанс завершён","Sessions & Access":"Сеансы и доступ","Sign in to bind an account":"Войдите, чтобы привязать аккаунт","Sessions and retries":"Сессии и повторы","Set":"Установить","Set a discount rate for a specific recharge amount threshold.":"Установите ставку скидки для определенного порога суммы пополнения.","Set a secure password (min. 8 characters)":"Установите надежный пароль (минимум 8 символов)","Set a tag for":"Установить тег для","Set API key access restrictions":"Настройте ограничения доступа API-ключа","Set API key basic information":"Настройте основные сведения API-ключа","Set default ranges and charts for model analytics.":"Настройте диапазоны и графики по умолчанию для аналитики моделей.","Set Field":"Установить поле","Set filters to customize your dashboard statistics and charts.":"Установите фильтры, чтобы настроить статистику и диаграммы вашей панели управления.","Set filters to narrow down your log search results.":"Установите фильтры, чтобы сузить результаты поиска по журналам.","Set Header":"Установить заголовок","Set Password":"Установить пароль","Set prices for each set of conditions below. Cost = usage × unit price + additional charge. Token prices are per million tokens.":"Задайте цены для условий ниже. Стоимость = объём × цена за единицу + доплата. Цены токенов указываются за миллион.","Set prices for each set of conditions below. Cost = usage × unit price + fixed fee. Token prices are per million tokens.":"Задайте цены для условий ниже. Стоимость = объём × цена за единицу + фиксированная плата. Цены токенов указываются за миллион.","Set Project to io.cloud when creating/selecting key":"Установите Проект в io.cloud при создании/выборе ключа","Set quota amount and limits":"Настройте квоту и лимиты","Set Request Header":"Установить заголовок запроса","Set runtime request header: override entire value, or manipulate comma-separated tokens":"Установить заголовок запроса: переопределить значение или управлять токенами через запятую","Set separate prices for cache reads and writes.":"Задайте отдельные цены для чтения и записи кэша.","Set separately for this provider":"Настроить отдельно для этого провайдера","Set Tag":"Установить тег","Set tag for selected channels":"Установить тег для выбранных каналов","Set the language used across the interface":"Настроить язык интерфейса","Set the user\'s role (cannot be Root)":"Установить роль пользователя (не может быть Root)","Set the website where users will use their Passkeys.":"Укажите домен сайта, на котором пользователи будут использовать Passkey.","Set these values in the provider application before enabling login.":"Укажите эти значения в приложении провайдера перед включением входа.","Set up model redirects":"Настроить перенаправления моделей","Set up redirect":"Настроить перенаправление","Setting Key":"Ключ настройки","Setting saved":"Настройка сохранена","Size {{size}}":"Размер {{size}}","Setting up 2FA...":"Настройка 2FA...","Setting updated successfully":"Настройка успешно обновлена","Settings":"Настройки","Settings & Preferences":"Настройки и предпочтения","Settings updated successfully":"Настройки успешно обновлены","Setup expired. Scan the new QR code and save the new backup codes.":"Срок настройки истёк. Отсканируйте новый QR-код и сохраните новые резервные коды.","Setup guide":"Руководство по настройке","Setup guide complete":"Руководство по настройке завершено","Setup guide is collapsed. Expand it anytime.":"Руководство по настройке свернуто. Его можно открыть в любой момент.","Setup Instructions":"Инструкции по настройке","Setup progress: {{completed}}/{{total}}":"Прогресс настройки: {{completed}}/{{total}}","Setup Two-Factor Authentication":"Настроить двухфакторную аутентификацию","Setup: three groups and one override matrix cell.":"Настройка: три группы и одна ячейка матрицы переопределений.","Setup: three groups and one override rule.":"Настройка: три группы и одно правило переопределения.","SGLang":"SGLang","SMTP server is not configured":"SMTP-сервер не настроен","SGLang API key, or EMPTY if authentication is disabled":"API-ключ SGLang или EMPTY, если аутентификация отключена","SGLang channel base URL cannot be empty":"Базовый URL канала SGLang не может быть пустым","SGLang server address, without /v1":"Адрес сервера SGLang без /v1","SGLang status":"Состояние SGLang","Some files could not be deleted ({{failed}}/{{total}})":"Не удалось удалить некоторые файлы ({{failed}}/{{total}})","Share":"Доля","Share your link and earn rewards":"Поделитесь своей ссылкой и получайте вознаграждения","Shared configuration for all payment gateways":"Общая конфигурация для всех платежных шлюзов","Shorten":"Сократить","Show":"Показать","Show All":"Показать все","Show all providers including unbound":"Показать всех провайдеров (включая непривязанные)","Show all tags":"Показать все метки","Show in model catalog":"Показывать в каталоге","Show in model square":"Показать в каталоге моделей","Show only bound providers":"Показать только привязанных провайдеров","Show or hide flow columns":"Показать или скрыть столбцы потока","Show preview":"Показать предпросмотр","Show prices in currency instead of quota.":"Показывать цены в валюте вместо квоты.","Show selected models in model square":"Показать выбранные модели в каталоге","Show sensitive data":"Показать конфиденциальные данные","Show setup guide":"Показать руководство по настройке","Show source":"Показать исходный текст","Show token usage statistics in the UI":"Показывать статистику использования токенов в пользовательском интерфейсе","Showcase core capabilities with demo credentials and limited access.":"Демонстрация основных возможностей с демо-учётными данными и ограниченным доступом.","Showing":"Отображать","Showing {{shown}} of {{total}} mappings":"Показано {{shown}} из {{total}} сопоставлений","showing •":"отображается •","Showing the last successfully checked release.":"Показаны сведения о выпуске из последней успешной проверки.","Shown":"Показано","Shown {{count}} models in model square":"Показано моделей в каталоге: {{count}}","Sidebar":"Боковая панель","Sidebar collapsed by default for new users":"Боковая панель свернута по умолчанию для новых пользователей","Sidebar modules":"Модули боковой панели","Sidebar Personal Settings":"Личные настройки боковой панели","Sign in":"Войти","Sign In":"Войти","Sign in now":"Войти сейчас","Sign in required":"Требуется вход","Sign in with Passkey":"Войти с Passkey","Sign out":"Выйти","Sign out other sessions":"Завершить другие сеансы","Sign out other sessions?":"Завершить другие сеансы?","Sign out others":"Завершить другие","Sign out this device?":"Выйти на этом устройстве?","Sign up":"Регистрация","Signed in":"Вход выполнен","Signed in successfully!":"Успешный вход!","Signed in via WeChat":"Вошли через WeChat","Signed in with Passkey":"Вошли с помощью Passkey","Signed out":"Выход выполнен","Significant outages detected":"Обнаружены серьёзные сбои","Signing you in with {{provider}}":"Входим через {{provider}}","SiliconFlow":"SiliconFlow","Simple":"Простой","Simple mode only returns message; status code and error type use system defaults.":"Простой режим возвращает только сообщение; код статуса и тип ошибки используют системные значения по умолчанию.","Simple mode: prune objects by type, e.g. redacted_thinking.":"Простой режим: очистка объектов по типу, например redacted_thinking.","Simulate a request including request rules and excluding group multipliers. Empty objects represent an empty request.":"Стоимость учитывает правила запроса, но не множители групп. Пустые объекты обозначают запрос без соответствующих полей.","Simulated request body":"Тело моделируемого запроса","Simulated request cost":"Стоимость моделируемого запроса","Simulated request headers":"Заголовки моделируемого запроса","Sort by priority to drag channels":"Для перетаскивания выберите сортировку по приоритету","Sort channels by":"Сортировать каналы по","State parameter is empty or mismatched":"Параметр state пуст или не совпадает","Simulation context is missing.":"Отсутствует контекст для моделирования.","Simulation time":"Время моделирования","Since previous sample":"С предыдущей выборки","Single .js file, up to 8 MiB. Its source is shown below before upload.":"Один файл .js размером до 8 МиБ. Его исходный код показан ниже перед загрузкой.","Single Key":"Одиночный ключ","Site & Branding":"Сайт и брендинг","Site currency ({{currency}})":"Валюта сайта ({{currency}})","Site Key":"Ключ сайта","Site URL":"URL сайта","Size:":"Размер:","sk_xxx or rk_xxx":"sk_xxx или rk_xxx","Skip async task polling delay":"Пропускать задержку опроса асинхронных задач","Skip pre-consumption when the wallet balance and limited API key balance both exceed this amount. Set to 0 to always pre-consume. Subscriptions and asynchronous tasks always reserve quota.":"Предсписание пропускается, если баланс кошелька и остаток лимита API-ключа превышают эту сумму. Значение 0 включает предсписание всегда. Для подписок и асинхронных задач квота резервируется всегда.","Skip retry on failure":"Не повторять при ошибке","Skip SMTP TLS certificate verification":"Пропустить проверку TLS-сертификата SMTP","Skip to Main":"Перейти к основному содержимому","Skip Upstream TLS Verification":"Пропустить проверку TLS-сертификата upstream-сервера","Slug":"Идентификатор","Slug can only contain letters, numbers, hyphens, and underscores":"Slug может содержать только буквы, цифры, дефисы и подчёркивания","Slug is required":"Slug обязателен","Slug must be less than 100 characters":"Slug должен содержать менее 100 символов","Smallest USD amount users can recharge (Epay)":"Минимальная сумма в USD, которую пользователи могут пополнить (Epay)","SMTP encryption":"Шифрование SMTP","SMTP Host":"Хост SMTP","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"Мягкие ошибки","Some channels failed: {{errorMsg}}":"Некоторые каналы не удались: {{errorMsg}}","Some matching models are hidden or have no available channel.":"Часть соответствующих моделей скрыта или не имеет доступных каналов.","Some plugin information could not be read":"Не удалось прочитать часть данных плагина","Something went wrong!":"Что-то пошло не так!","Sonnet Model":"Модель Sonnet","Sora":"Sora","Sort":"Сортировать","Sort by ID":"Сортировать по ID","Sort Order":"Порядок сортировки","Sort priority":"Приоритет сортировки","Source":"Источник","Source diff":"Различия исходного кода","Source Endpoint":"Исходная точка","Source Field":"Исходное поле","Source Header":"Исходный заголовок","Source ID":"ID источника","Source name":"Название источника","Source vendors":"Исходные поставщики","Source vendors will be deleted after their model assignments are moved. The target vendor’s details are preserved.":"После переноса моделей исходные поставщики будут удалены. Данные целевого поставщика сохраняются.","Source: global settings. Changes take effect after saving.":"Источник: глобальные настройки. Изменения вступают в силу после сохранения.","sources":"источники","Space-separated OAuth scopes":"Области доступа OAuth, разделенные пробелами","Spark model version, e.g., v2.1 (version number in API URL)":"Версия модели Spark, например, v2.1 (номер версии в URL API)","Spec":"Спецификация","Special billing expression":"Специальное выражение тарификации","Stripe is not configured or key is invalid":"Stripe не настроен или ключ недействителен","Special group":"Специальная группа","Stripe webhook is not configured":"Webhook Stripe не настроен","Special ratio rules":"Специальные правила коэффициентов","StripePriceId is not configured for this plan":"Для этого плана не настроен StripePriceId","Special ratios override the token group ratio for specific user group and token group combinations.":"Специальные коэффициенты переопределяют коэффициент группы токена для конкретных сочетаний группы пользователя и группы токена.","Special usable group rules":"Специальные правила для групп с доступом","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"Правила специальных доступных групп могут добавлять, удалять или дополнять выбираемые группы токенов для конкретной группы пользователей.","Special usable group rules make extra token groups visible to, or hide default ones from, users of a specific user group.":"Правила особых доступных групп показывают дополнительные группы токенов пользователям определённой группы или скрывают от них группы по умолчанию.","Special visibility rules":"Особые правила видимости","Specified time":"Указанное время","Speculative decoding acceptance rate":"Доля принятых спекулятивных токенов","Spend limited":"Ограничение расходов","Spread HTTP/2 traffic across multiple reusable connections to the same upstream origin (1-8).":"Распределяет трафик HTTP/2 по нескольким переиспользуемым соединениям к одному upstream-источнику (1-8).","SQLite stores all data in a single file. Make sure that file is persisted when running in containers.":"SQLite хранит все данные в одном файле. Убедитесь, что файл сохраняется при работе в контейнерах.","SSL/TLS":"SSL/TLS","SSRF Protection":"Защита от SSRF","stale":"устарел","Standard":"Стандартный","Standard price":"Стандартная цена","Standard protocol interfaces":"Интерфейсы стандартных протоколов","Start":"Начало","Start ≤ end: within the day; start > end: across midnight":"Начало ≤ конца — в пределах дня, начало > конца — через полночь","Subscription plan is not enabled":"План подписки не включен","Subscription plan title cannot be empty":"Название плана подписки не может быть пустым","Start a conversation to see messages here":"Начните разговор, чтобы увидеть сообщения здесь","Start a playground chat":"Начните чат в Playground","Start again":"Начать заново","Subscription purchased with balance, plan: {{plan}}, payment amount: {{amount}}, quota deducted: {{quota}}":"Подписка оформлена с баланса, тариф: {{plan}}, сумма оплаты: {{amount}}, списано квоты: {{quota}}","Subscription purchased, plan: {{plan}}, payment amount: {{amount}}, payment method: {{method}}":"Подписка оформлена, тариф: {{plan}}, сумма оплаты: {{amount}}, способ оплаты: {{method}}","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"Начните принимать платежи по всему миру без регистрации компании. Подходит для независимых разработчиков, индивидуальных предпринимателей OPC и стартапов. Waffo Pancake выступает как Merchant of Record и берет на себя комплаенс глобального приема платежей: потребительские налоги, выставление счетов, управление подписками, возвраты и чарджбеки. Одиночные разработчики могут быстро запуститься и сосредоточиться на продукте, а не на комплаенсе. Подключение за минуты — от одного запроса до полной интеграции.","Start for free with generous limits. No credit card required.":"Начните бесплатно с щедрыми лимитами. Кредитная карта не требуется.","Start SGLang with --enable-metrics to expose Prometheus metrics.":"Запустите SGLang с --enable-metrics для включения метрик Prometheus.","Start Time":"Время начала","Start weekday":"Начальный день недели","Started":"Запущен","Started two-factor authentication setup":"Начата настройка двухфакторной аутентификации","STARTTLS":"STARTTLS","State changed":"Состояние изменено","State unchanged: {{status}}":"Статус не изменился: {{status}}","Static page describing the platform.":"Статическая страница, описывающая платформу.","Statistical count":"Статистический подсчет","Statistical quota":"Статистическая квота","Statistical tokens":"Статистические токены","Statistics reset":"Статистика сброшена","Status":"Статус","Status & Sync":"Статус и синхронизация","Status change":"Изменение статуса","Status Code":"Код статуса","Status Code Mapping":"Сопоставление кодов состояния","Status code mapping must use valid HTTP status codes":"Сопоставление кодов состояния должно использовать допустимые HTTP-коды","Status is outside the retry rules":"Код состояния не входит в правила повторов","Status matches the retry rules":"Код состояния соответствует правилам повторов","Status Page Slug":"Slug страницы статуса","Status short":"Стат.","Status:":"Статус:","Stay":"Остаться","Stay tuned though!":"Оставайтесь на связи!","Steer behaviour with a system instruction":"Управлять поведением с помощью системной инструкции","Step":"Шаг","Step {{current}} of {{total}}: {{label}}":"Шаг {{current}} из {{total}}: {{label}}","Still pending addition":"Ещё ожидают добавления","Still pending removal":"Ещё ожидают удаления","Stop":"Остановить","Stop Retry":"Остановить повтор","Stop testing":"Остановить тестирование","Stopping batch test...":"Остановка пакетного теста...","Stopping...":"Остановка...","Storage":"Хранилище","Store":"Store","Store + product created":"Магазин и продукт созданы","Store ID":"ID магазина","Store ID is required":"Требуется ID магазина","Stored configuration with effective defaults":"Сохранённые настройки и действующие значения","Stored value is not echoed back for security":"В целях безопасности сохранённое значение не отображается","stream":"Поток","Stream":"Поток","Stream did not complete successfully":"Поток не завершился успешно","Stream Mode":"Потоковый режим","Stream Status":"Статус потока","Stream tokens incrementally as they are generated":"Передавать токены по мере их генерации","Stream tokens via Server-Sent Events":"Стримить токены через Server-Sent Events","Streaming":"Стриминг","String Replace":"Замена строки","Strip {{affix}}":"Убрать {{affix}}","Strip prefix":"Убрать префикс","Strip suffix":"Убрать суффикс","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Ключ API Stripe (оставьте пустым, если не обновляете)","Stripe Dashboard":"Панель управления Stripe","Stripe Gateway":"Шлюз Stripe","Stripe product price ID":"ID цены продукта Stripe","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem требует создания продуктов на сторонней платформе и ввода ID","Structured output":"Структурированный вывод","Submit":"Отправить","Submit directly":"Отправить напрямую","Submit request":"Отправить запрос","Submit Result":"Отправить результат","Submit Time":"Время отправки","Submitted":"Отправлено","Submitting":"Отправка","Submitting...":"Отправка...","Submodel":"Submodel","Subscribe Now":"Подписаться сейчас","Subscribe to a plan for model access":"Подпишитесь на план для доступа к моделям","Subscription":"Подписка","Subscription Billing":"Биллинг подписки","Subscription First":"Подписка в приоритете","Subscription Management":"Управление подписками","Subscription Only":"Только подписка","System error: {{error}}":"Системная ошибка: {{error}}","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"Создание и изменение планов подписки заблокированы, пока администратор не подтвердит условия соответствия в настройках платежного шлюза.","Subscription Plans":"Планы подписки","System initialized successfully":"Система успешно инициализирована","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"Планы подписки НЕ используют привязанный продукт — у каждого плана есть собственный продукт Pancake, задаваемый в администрировании подписок (или автоматически создаваемый кнопкой «+ Создать»).","Subscription purchased successfully":"Подписка успешно приобретена","Subscriptions":"Подписки","Subtract":"Вычесть","succeeded":"успешно","Success":"Успешно","Success rate":"Доля успешных запросов","Success rate excludes business rejections and includes the current partial hour.":"Доля успешных запросов не учитывает отказы по бизнес-правилам и включает текущий неполный час.","Successful scheduled or bulk checks can restore automatically disabled channels. Manually disabled channels stay disabled.":"Успешные периодические или массовые проверки могут восстановить автоматически отключённые каналы. Отключённые вручную остаются отключёнными.","Successfully created {{count}} API Key(s)":"Успешно создано {{count}} API-ключ(а/ей)","Successfully created {{count}} redemption codes":"Успешно создано {{count}} кодов активации","Successfully deleted {{count}} API key(s)":"Успешно удалено {{count}} API-ключ(а/ей)","Successfully deleted {{count}} invalid redemption codes":"Успешно удалено {{count}} недействительных кодов активации","Successfully deleted {{count}} model(s)":"Успешно удалено {{count}} моделей","Successfully deleted {{count}} redemption codes":"Коды погашения удалены: {{count}}","Successfully disabled {{count}} model(s)":"Успешно отключено {{count}} моделей","Successfully enabled {{count}} model(s)":"Успешно включено {{count}} моделей","Suffix":"Суффикс","Suffix Match":"Совпадение по суффиксу","Suggested rules":"Предлагаемые правила","Summarize text":"Кратко изложить текст","SunoAPI":"SunoAPI","Sunset Glow":"Закатное сияние","Super admin":"Суперадминистратор","Super Admin":"Суперадмин","Tag cannot be empty":"Тег не может быть пустым","Super Large":"Очень крупная","Support for high concurrency with automatic load balancing":"Поддержка высокой конкурентности с автоматической балансировкой нагрузки","Supported Applications":"Поддерживаемые приложения","Supported endpoints":"Поддерживаемые конечные точки","Supported Imagine Models":"Поддерживаемые модели Imagine","Supported interfaces":"Поддерживаемые интерфейсы","Supported modalities":"Поддерживаемые модальности","Supported models":"Поддерживаемые модели","Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.":"Поддерживаемые операторы: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Оставьте поле пустым, чтобы разрешить доступ всем пользователям.","Supported parameters":"Поддерживаемые параметры","Supported variables":"Поддерживаемые переменные","Supports `-thinking`, `-thinking-":"Поддерживает `-thinking`, `-thinking-","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"Поддерживает HTML-разметку или встраивание iframe. Введите HTML-код напрямую или укажите полный URL для автоматического встраивания в виде iframe.","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"Поддерживает настройку в один клик и идеально адаптируется к многопротокольной конфигурации NewAPI.","Supports plugin extensions":"Поддержка плагинов","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"Поддерживаются PNG, JPG, SVG или WebP. Рекомендуемый размер: 128×128 или меньше.","Surprise me":"Удиви меня","Sustained tokens per second":"Устойчивая скорость токенов в секунду","Swap Face":"Замена лица","Switch affinity on success":"Переключить привязку при успехе","Switch to JSON":"Переключиться на JSON","Switch to Visual":"Переключиться на визуальный режим","Switch to visual editor":"Перейти к визуальному редактору","Switch to visual mode to add rules or apply templates.":"Перейдите в визуальный режим, чтобы добавить правила или применить шаблоны.","Switch to visual pricing?":"Перейти к визуальной настройке цен?","Switching regenerates the expression from the price table and replaces its original formatting and tier names. Changes apply only after saving.":"При переключении выражение будет создано заново из таблицы цен. Исходное форматирование и названия уровней будут заменены. Изменения вступят в силу после сохранения.","Sync":"Синхронный","Sync Endpoint":"Конечная точка синхронизации","Sync Endpoints":"Точки синхронизации","Sync Fields":"Синхронизировать поля","Sync from the public upstream metadata repository.":"Синхронизировать из публичного репозитория метаданных верхнего уровня.","Sync metadata":"Синхронизировать метаданные","Sync missing metadata":"Синхронизировать недостающие метаданные","Sync model metadata":"Синхронизация метаданных моделей","Sync model pricing":"Синхронизация цен моделей","Sync models":"Синхронизировать модели","Sync Now":"Синхронизировать сейчас","Task timed out":"Истекло время выполнения задачи","Task timed out (a task left by the old system is not refunded; contact the administrator)":"Истекло время выполнения задачи (задачи старой системы не возмещаются; обратитесь к администратору)","Sync policy":"Политика синхронизации","Sync pricing":"Синхронизировать цены","Sync results":"Результаты синхронизации","Sync scope":"Область синхронизации","Sync steps":"Этапы синхронизации","Sync this model with official upstream":"Синхронизировать эту модель с официальным upstream","Sync Upstream":"Синхронизировать Upstream","Sync Upstream Models":"Синхронизировать модели Upstream","Synced upstream models":"Вышестоящие модели синхронизированы","Synchronize models and vendors from an upstream source":"Синхронизировать модели и поставщиков из upstream источника","Synchronous":"Синхронно","Telegram ID is empty!":"Telegram ID не указан!","Syncing prices, please wait...":"Синхронизация цен, подождите...","Syncing...":"Синхронизация...","System":"Система","System Administration":"Администрирование системы","System Announcements":"Системные объявления","System Behavior":"Поведение системы","System constraint":"Системное ограничение","System data statistics":"Статистика системных данных","System default":"По умолчанию","System Info":"Информация о системе","System Information":"Системная информация","System initialized successfully! Redirecting…":"Система успешно инициализирована! Перенаправление…","System logo":"Логотип системы","System maintenance":"Обслуживание системы","System Memory":"Системная память","System Memory Stats":"Статистика системной памяти","System Name":"Название системы","System name is required":"Название системы обязательно","System Notice":"Системные объявления","System Performance Monitoring":"Мониторинг производительности системы","System prompt":"Системный промпт","System Prompt":"Системное приглашение","System Prompt Concatenation":"Конкатенация системных промптов","System Prompt Override":"Переопределение системного промпта","System retry exclusion":"Системный запрет повторов","System settings":"Системные настройки","System Settings":"Настройки системы","System setup wizard":"Мастер настройки системы","System task records":"Записи системных задач","System Tasks":"Системные задачи","System updates":"Обновления системы","System updates, current version: {{version}}":"Обновления системы, текущая версия: {{version}}","System Version":"Версия системы","Table view":"Вид таблицы","Tag":"Тег","Tag Aggregate":"Агрегация тегов","Tag Mode":"Режим тегов","Tag Name":"Название метки","Tag set successfully":"Тег успешно установлен","Tag updated successfully":"Тег успешно обновлён","The access token lacks the required permission: {{scope}}":"У токена доступа нет нужного разрешения: {{scope}}","Tag:":"Тег:","Tags":"Теги","Take photo":"Сделать фото","Take screenshot":"Сделать скриншот","Target":"Объект операции","Target Endpoint":"Целевая точка","Target Field":"Целевое поле","Target Field Path":"Путь целевого поля","Target group":"Целевая группа","Target Header":"Целевой заголовок","Target not recorded":"Объект не записан","Target Path (optional)":"Целевой путь (необязательно)","Target User":"Целевой пользователь","Target user not found":"Целевой пользователь не найден","Target username":"Имя целевого пользователя","Target vendor":"Целевой поставщик","The Classic frontend has been removed. The theme can only be set to default":"Интерфейс Classic удалён. Тему можно установить только в default","Task":"Задача","Task billing":"Тарификация задач","The current sign-in method does not support security verification":"Текущий способ входа не поддерживает проверку безопасности","Task Details":"Сведения о задаче","Task failed":"Задача не выполнена","Task History":"История задач","Task ID":"ID задачи","Task ID:":"ID задачи:","Task logs":"Журналы задач","Task Logs":"Журнал задач","Task Plugin":"Плагин задач","Task plugin *":"Плагин задач *","Task plugin setting updated":"Настройка плагинов задач обновлена","Task plugins":"Плагины задач","Task Plugins":"Плагины задач","The longest log time range must be at least 1 day":"Максимальный период журналов должен быть не меньше 1 дня","The longest time range a user can view at once in the logs and on the dashboard, and the longest range any export can cover.":"Самый длинный период, который пользователь может просмотреть за один раз в журналах и на панели управления, и предел для любого экспорта.","Task pricing":"Тарификация задач","Task pricing must be converted manually using the task usage schema.":"Тарифы задач необходимо преобразовать вручную по схеме использования задачи.","Task pricing not configured":"Тарификация задач не настроена","Task usage data is required to estimate this expression. Check the model\'s task plugin configuration.":"Для оценки стоимости по этому выражению нужны данные использования задач. Проверьте настройки плагина задач модели.","Task usage metadata is unavailable. Pricing details cannot be displayed.":"Метаданные использования задач недоступны. Не удалось отобразить подробные цены.","Task usage prices are USD per declared unit. They are not token prices and are not divided by one million.":"Цены за использование указываются в USD за объявленную единицу. Это не цены за токены, и они не делятся на миллион.","Task usage prices are USD per declared unit. Token fields use dollars per 1M tokens; the editor writes / 1000000 into the expression. Other units are not divided by one million.":"Цены за использование задач указаны в USD за объявленную единицу. Поля token задаются в долларах за 1 млн token; редактор записывает / 1000000 в выражение. Остальные единицы на миллион не делятся.","Tasks currently pending or running.":"Задачи, которые ожидают выполнения или выполняются сейчас.","Team Collaboration":"Совместная работа в команде","The ratio config API is not enabled":"API конфигурации коэффициентов не включён","Technical Support":"Техническая поддержка","Telegram":"Telegram","Telegram authorization failed. Please try again.":"Не удалось выполнить авторизацию Telegram. Повторите попытку.","The search pattern can contain at most 2 % wildcards":"Шаблон поиска может содержать не более 2 подстановочных знаков %","The search pattern cannot contain consecutive % wildcards":"Шаблон поиска не может содержать подряд идущие подстановочные знаки %","Telegram binding failed. Please try again.":"Не удалось привязать Telegram. Повторите попытку.","Telegram binding is disabled.":"Привязка Telegram отключена.","Telegram login has changed. Reload the page and start Telegram OAuth again.":"Способ входа через Telegram изменился. Обновите страницу и снова начните вход через Telegram OAuth.","Telegram Login Widget":"Виджет входа Telegram","Telegram OAuth Client ID from BotFather":"Client ID Telegram OAuth из BotFather","Telegram OAuth Client Secret from BotFather":"Client Secret Telegram OAuth из BotFather","Telegram OAuth is not configured or enabled. Please contact your administrator.":"Telegram OAuth не настроен или отключён. Обратитесь к администратору.","Temperature":"Температура","Template":"Шаблон","The system is already initialized":"Система уже инициализирована","Template variables:":"Переменные шаблона:","Templates":"Шаблоны","Templates appended":"Шаблоны добавлены","The time range cannot exceed {{days}} days":"Временной диапазон не может превышать {{days}} дн.","Tencent":"Tencent","Termination requested":"Запрошено завершение","Test":"Проверить","Test {{count}} matching models":"Проверить совпадающие модели: {{count}}","Test {{count}} selected":"Проверить {{count}} выбранных","Test a model with a starter prompt, or write your own request below.":"Проверьте модель с начальным промптом или напишите собственный запрос ниже.","Test all {{count}} models":"Проверить все модели: {{count}}","Test All Channels":"Проверить все каналы","Test Channel Connection":"Проверить подключение канала","Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.":"Тестирование каналов, обновление балансов и включение/отключение отдельных, пакетных или помеченных каналов.","Test Connection":"Проверить подключение","Test connectivity for:":"Проверить подключение для:","Test failed":"Тест не выполнен","Test interval (minutes)":"Интервал проверки (минуты)","Test Latency":"Проверить задержку","Test Mode":"Тестовый режим","Test Model":"Проверить модель","Test models and prompts from the browser":"Тестируйте модели и промпты в браузере","Test selected models":"Проверить выбранные модели","Testing all enabled channels started. Please refresh to see results.":"Тестирование всех включенных каналов начато. Пожалуйста, обновите страницу, чтобы увидеть результаты.","Testing...":"Тестирование...","Text":"Текст","Text description of the desired image":"Текстовое описание желаемого изображения","Text description of the desired video":"Текстовое описание желаемого видео","Text Input":"Текстовый вход","Text or array of texts to embed":"Текст или массив текстов для векторизации","Text Output":"Текстовый выход","Text to Video":"Текст в видео","Text-only requests":"Только текстовые запросы","The access token lacks the required permission":"У токена доступа нет нужного права","The action details are invalid.":"Недопустимые параметры действия.","The admin configured three groups and one special ratio rule:":"Администратор настроил три группы и одно правило особого коэффициента:","The admin wants vip users to pay even less when they use premium. That needs an override rule: in the override matrix, set the cell at row vip, column premium to 0.3.":"Администратор хочет, чтобы пользователи vip платили ещё меньше при использовании premium. Для этого нужно правило переопределения: в матрице задайте ячейку на пересечении строки vip и столбца premium равной 0,3.","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"Учетная запись администратора уже инициализирована. Вы можете сохранить существующие учетные данные и перейти к следующему шагу.","The administrator configured an external link for this document.":"Администратор настроил внешнюю ссылку для этого документа.","The administrator has not configured a privacy policy yet.":"Администратор ещё не настроил политику конфиденциальности.","The administrator has not configured a user agreement yet.":"Администратор ещё не настроил пользовательское соглашение.","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"Администратор еще не настроил содержимое раздела «О программе». Вы можете установить его на странице настроек, поддерживается HTML или URL.","The API key used for the requests":"API-ключ, использованный для запросов","The authenticator code is incorrect.":"Неверный код аутентификатора.","The binding will complete automatically after authorization":"Привязка завершится автоматически после авторизации","This API is deprecated":"Этот API устарел","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"Привязанный продукт используется для пополнения кошелька: когда пользователь вводит любую сумму, new-api запускает оплату через этот единственный продукт Pancake и переопределяет цену для каждой сессии — не нужно заранее создавать SKU на $1 / $5 / $10.","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"Привязанный магазин является родительским контейнером для всех продуктов Pancake, которые new-api создает из этой админки: как продукта пополнения кошелька, так и продуктов планов подписки. Одного магазина достаточно; выбирайте другой только если действительно ведете отдельные каталоги Pancake.","The button fills in this website and keeps any existing website addresses. Save changes on the settings page to apply.":"Кнопка подставит текущий сайт и сохранит уже указанные адреса. Для применения сохраните изменения на странице настроек.","The change succeeded, but the notification email could not be sent.":"Изменение выполнено, но отправить уведомление по почте не удалось.","The changelog could not be fetched or parsed. Please try again.":"Не удалось получить или разобрать историю изменений. Повторите попытку.","The converted price must be a finite, non-negative number.":"Цена после пересчёта должна быть конечным неотрицательным числом.","The current setting could not be loaded. You can still enter the website domain yourself.":"Не удалось загрузить текущую настройку. Вы можете ввести домен сайта вручную.","The deployment node that handled the requests":"Узел развёртывания, обработавший запросы","This channel is not in multi-key mode":"Этот канал не в режиме нескольких ключей","The downloaded source does not match the sha256 declared in the index. Do not install it.":"Загруженный код не соответствует sha256, указанному в индексе. Не устанавливайте его.","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"Действующий домен для регистрации Passkey. Должен совпадать с текущим доменом или быть его родительским доменом.","The entered text does not match the required text.":"Введенный текст не совпадает с требуемым.","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"Окружение (тестовое или рабочее) определяется ключом, который вы вставляете здесь: используйте тестовый ключ при интеграции, затем замените его на рабочий при запуске.","The exact model identifier as used in API requests.":"Точный идентификатор модели, используемый в запросах API.","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"Следующие модели имеют конфликты типов тарификации (фиксированная цена против тарификации по соотношению). Подтвердите, чтобы продолжить изменения.","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"Следующие модели в перенаправлении модели не были добавлены в список \\"Модели\\" и могут не работать при вызове из-за отсутствия доступных моделей:","The gateway rejected this plugin":"Шлюз отклонил этот плагин","The index could not be fetched or parsed: {{message}}. The host may block cross-origin requests.":"Не удалось загрузить или разобрать индекс: {{message}}. Хост может блокировать кросс-доменные запросы.","The legacy token stops working on {{date}}. Create a new token to replace it.":"Устаревший токен перестанет работать {{date}}. Создайте новый токен ему на замену.","The login session that started this Telegram binding is no longer valid.":"Сеанс входа, из которого была начата привязка Telegram, больше недействителен.","The mapped upstream model(s)":"Сопоставленные upstream модель(и)","The model routing configuration could not be verified.":"Не удалось проверить настройки маршрутизации модели.","The model that was requested":"Запрошенная модель","The model you\'re looking for doesn\'t exist.":"Модель, которую вы ищете, не существует.","The model-level expression cannot be evaluated by: {{plugins}}":"Эти провайдеры не могут вычислить выражение модели: {{plugins}}","The name displayed across the application":"Имя, отображаемое в приложении","The new token will only be shown once. Copy it and store it securely.":"Новый токен будет показан только один раз. Скопируйте его и сохраните в безопасном месте.","The OAuth account does not match the account linked to your profile.":"Этот аккаунт OAuth не совпадает с аккаунтом, привязанным к профилю.","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"Публичный URL вашего сервера, используемый для OAuth-перенаправлений, вебхуков и других внешних интеграций","The requested chat preset does not exist or has been removed.":"Запрошенный предустановленный чат не существует или был удален.","The reset request stays disabled until a credit is available.":"Запрос сброса недоступен, пока нет доступного сброса.","The result was returned in the API response and was not saved as an artifact":"Результат был возвращён в ответе API и не сохранён как артефакт","The server returned the following result. Unselected models remain pending.":"Ниже результат, полученный от сервера. Невыбранные модели остаются в ожидании обработки.","The setup wizard will use this database during initialization.":"Мастер настройки будет использовать эту базу данных при инициализации.","The site exchange rate is invalid. Prices are shown in USD.":"Курс сайта недействителен. Цены отображаются в USD.","The site is not available at the moment.":"Сайт в данный момент недоступен.","The slug is appended to the URL:":"Слаг добавляется к URL:","The source is unavailable or this browser cannot calculate SHA-256. The gateway checks the published hash during installation.":"Исходный код недоступен или браузер не может вычислить SHA-256. При установке шлюз проверит опубликованный хеш.","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"Синхронизация получит отсутствующие модели и поставщиков из выбранного источника. Существующие записи обновляются только после подтверждения конфликтов.","The system always bills in USD. Site currency makes entering and converting prices easier; amounts are converted to USD using the site exchange rate. Switching currencies does not change the actual price. Raw billing expressions always use USD.":"Система всегда рассчитывает стоимость в USD. Валюта сайта упрощает ввод и пересчёт цен; суммы переводятся в USD по курсу сайта. Переключение валюты не меняет фактическую цену. В исходных выражениях тарификации всегда используется USD.","The system currently uses: {{domain}}":"Сейчас система использует: {{domain}}","The task was accepted; submission cannot be replayed":"Задача принята; повторная отправка запрещена","The Telegram authorization request is invalid or expired.":"Запрос авторизации Telegram недействителен или истёк.","The telegram OAuth provider name is reserved. Ask your administrator to rename the conflicting custom provider.":"Имя OAuth-провайдера telegram зарезервировано. Попросите администратора переименовать конфликтующего пользовательского провайдера.","The token group that will have a custom ratio":"Группа токенов, которая будет иметь пользовательское соотношение","The token has no group, so it is billed as the user group vip, using the base ratio of vip.":"У токена нет группы, поэтому вызов тарифицируется по группе пользователя vip с базовым коэффициентом vip.","The two roles of a group":"Две роли группы","The two-factor setup has expired or changed. Start setup again.":"Настройка двухфакторной аутентификации истекла или изменилась. Начните заново.","The unique identifier for this model":"Уникальный идентификатор для этой модели","This OAuth provider still has linked users and cannot be deleted. Unbind all users first.":"У этого поставщика OAuth есть привязанные пользователи, поэтому его нельзя удалить. Сначала отвяжите всех пользователей.","The unique name for this vendor":"Уникальное имя для этого поставщика","The upstream address this plugin sends requests to. The plugin declares no default, so it must be filled in.":"Адрес вышестоящего сервиса, на который плагин отправляет запросы. Плагин не объявляет значение по умолчанию, поэтому поле обязательно.","The upstream channel that served the requests":"Вышестоящий канал, обслуживший запросы","The upstream key has unlimited quota. Turn on \\"Allow querying user quota\\" for this key on the upstream to see the real balance.":"У вышестоящего ключа неограниченная квота. Включите для него «Разрешить просмотр квоты пользователя» на вышестоящем сервере, чтобы увидеть реальный баланс.","The upstream natively supports all three protocols; every selected route is forwarded without conversion.":"Поставщик нативно поддерживает все три протокола; выбранные маршруты пересылаются без преобразования.","The upstream response is valid JSON, but it does not match the OpenAI credit_summary format. The channel balance was not updated.":"Ответ поставщика содержит допустимый JSON, но не соответствует формату OpenAI credit_summary. Баланс канала не обновлён.","The upstream returned a model name different from both the requested and upstream models. Aliases or dated versions may also cause this; this warning alone does not prove model substitution.":"Провайдер вернул имя модели, отличное и от запрошенного, и от переданного ему. Причиной также могут быть псевдонимы или версии с датой; само по себе это предупреждение не доказывает подмену модели.","The URL for this chat client.":"URL для этого чат-клиента.","The URL returned HTTP {{status}}. Check the address, or download the file and paste its source below.":"URL вернул HTTP {{status}}. Проверьте адрес или скачайте файл и вставьте его код ниже.","The user group applied to the requests":"Группа пользователей, применённая к запросам","The user who made the requests":"Пользователь, отправивший запросы","The vendor no longer exists. Reload the vendor list.":"Поставщик больше не существует. Обновите список поставщиков.","Theme":"Тема","Theme preset":"Пресет темы","Theme Settings":"Настройки темы","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"Есть модели для добавления и удаления, но вы выбрали только один тип. Подтвердить отправку только выбранных элементов?","This rule does not have include_rule_name enabled, so its cache cannot be cleared by rule":"Для этого правила не включён include_rule_name, поэтому его кэш нельзя очистить по правилу","There is a rule for vip billed as premium → use its ratio 0.3":"Есть правило «vip по premium» → используется его коэффициент 0,3","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"Эти имена всё ещё отмечены в выборе, но не возвращены в списке upstream; ключи только как источники model_mapping исключены. Скорректируйте выбор перед сохранением.","This slug conflicts with a built-in OAuth provider":"Этот идентификатор конфликтует со встроенным поставщиком OAuth","This slug is already in use":"Этот идентификатор уже используется","These models were not returned by the upstream. Uncheck to remove them, or select them again before saving. Model mapping source aliases are excluded.":"Эти модели не были возвращены вышестоящим сервисом. Снимите флажки, чтобы удалить их, или выберите их снова перед сохранением. Исходные псевдонимы сопоставления моделей исключены.","These plugins use this channel\'s connection settings.":"Эти плагины используют настройки подключения этого канала.","These toggles affect whether certain request fields are passed through to the upstream provider.":"Эти переключатели влияют на то, передаются ли определенные поля запроса вышестоящему поставщику.","These values come from the source index and are shown for review only. The gateway admits the plugin based on the metadata compiled from its source.":"Эти значения взяты из индекса источника и показаны только для проверки. Шлюз допускает плагин по метаданным, скомпилированным из его кода.","Thinking Suffix Adapter":"Адаптер суффикса thinking","Thinking to Content":"Мышление в контент","Thinking...":"Размышление...","Third-party":"Сторонний","Third-party — use at your own risk":"Сторонний — на ваш риск","Third-party account bindings (read-only, managed by user in profile settings)":"Привязки сторонних учетных записей (только для чтения, управляется пользователем в настройках профиля)","Third-party account bindings (read-only, managed by user in Security & Access)":"Привязанные сторонние аккаунты (только чтение, управляются пользователем в разделе «Безопасность и доступ»)","This user has no active subscription to this plan":"У этого пользователя нет активной подписки на этот план","Third-party Payment Config":"Настройка стороннего платежа","This user is already a common user":"Этот пользователь уже является обычным пользователем","This user is already an administrator":"Этот пользователь уже является администратором","Third-party plugin risk":"Риск стороннего плагина","Third-party source risk":"Риск сторонних источников","Third-party-only plugins become unavailable immediately. In-flight tasks will be handled by timeout cleanup.":"Сторонние плагины сразу станут недоступны. Активные задачи обработает очистка по тайм-ауту.","This action cannot be undone.":"Это действие невозможно отменить.","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"Это действие невозможно отменить. Это безвозвратно удалит вашу учетную запись и все ваши данные с наших серверов.","This action will permanently remove 2FA protection from your account.":"Это действие безвозвратно удалит защиту 2FA из вашей учетной записи.","This announcement will be removed from the list.":"Это объявление будет удалено из списка.","This API key has no quota limit. Requests still require available wallet or subscription quota.":"У этого API-ключа нет лимита. Для запросов по-прежнему нужен доступный баланс кошелька или квота подписки.","This API shortcut will be removed from the list.":"Этот ярлык API будет удален из списка.","This base URL points at a private or local network host. Make sure it is an upstream you control.":"Этот базовый URL указывает на частный или локальный хост. Убедитесь, что это подконтрольный вам вышестоящий сервис.","This base URL uses plain HTTP, so the channel key is sent unencrypted.":"Этот базовый URL использует незашифрованный HTTP, поэтому ключ канала передаётся в открытом виде.","This callback URL updates from the slug field and is the value to register with your provider.":"Этот URL обратного вызова обновляется на основе поля slug; зарегистрируйте его у провайдера.","This changelog is not available in your language. Showing English.":"История изменений недоступна на вашем языке. Показана английская версия.","This channel has no configured models.":"У этого канала нет настроенных моделей.","This channel is not an Ollama channel.":"Этот канал не является каналом Ollama.","This channel serves the models of every selected plugin. The upstream New API gateway must have the same plugins installed.":"Этот канал обслуживает модели каждого выбранного плагина. На вышестоящем шлюзе New API должны быть установлены те же плагины.","This channel type does not support fetching models":"Этот тип канала не поддерживает получение моделей","This channel type requires additional configuration":"Для этого типа канала требуется дополнительная конфигурация","This combination will be billed as free.":"Эта комбинация будет тарифицироваться бесплатно.","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"Это подтверждение разблокирует функции платежей, кодов пополнения, планов подписки и наград за приглашения. Внимательно прочитайте заявления.","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"Этот параметр управляет ограничением частоты запросов к моделям. Ограничение маршрутов Web/API настраивается переменными окружения и всё ещё может возвращать 429.","This data may be unreliable, use with caution":"Эти данные могут быть ненадежными, используйте с осторожностью","This device does not support Passkey":"Это устройство не поддерживает Passkey","This device does not support Passkey verification.":"Это устройство не поддерживает проверку с помощью Passkey.","This domain does not match the current website. Passkeys may not work here.":"Этот домен не соответствует текущему сайту. Passkey могут здесь не работать.","This email address is already in use.":"Этот адрес почты уже используется.","This {{provider}} account cannot be linked to an existing account automatically, please sign in or register another way and then link {{provider}} in account settings":"Этот аккаунт {{provider}} нельзя автоматически привязать к существующему аккаунту. Войдите или зарегистрируйтесь другим способом, затем привяжите {{provider}} в настройках аккаунта","This {{provider}} account has already been bound":"Этот аккаунт {{provider}} уже привязан","This email address is not allowed by the administrator\'s email policy.":"Этот адрес почты запрещён политикой администратора.","This expression cannot be edited visually without losing information.":"Это выражение нельзя редактировать визуально без потери информации.","This expression cannot be expanded into a price table. View the original expression below.":"Это выражение нельзя представить в виде таблицы цен. Исходное выражение приведено ниже.","This expression cannot be represented by the price table. Switching discards the entire expression, including request rules, and resets all prices to zero. Configure prices before saving.":"Это выражение нельзя представить в таблице цен. При переключении всё выражение, включая правила запросов, будет удалено, а все цены сброшены до нуля. Настройте цены перед сохранением.","This expression cannot be represented by the price table. You can switch to visual editing by confirming that the expression will be discarded.":"Это выражение нельзя представить в таблице цен. Вы можете перейти к визуальному редактору, подтвердив удаление выражения.","This expression cannot be simulated in the browser.":"Это выражение нельзя смоделировать в браузере.","This expression does not price each combination exactly once, so it opens as a raw expression. Sparse or custom pricing stays in this editor.":"Это выражение не задаёт цену ровно один раз для каждой комбинации, поэтому оно открыто в режиме исходного выражения. Неполные или пользовательские правила ценообразования остаются в этом редакторе.","This expression exceeds the browser simulation limits.":"Это выражение превышает ограничения моделирования в браузере.","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"Для визуального редактора это выражение слишком сложно. Переключитесь в режим выражения для правки.","This external account is already bound.":"Этот внешний аккаунт уже привязан.","This FAQ entry will be removed from the list.":"Эта запись FAQ будет удалена из списка.","This feature is experimental. Configuration format and behavior may change.":"Эта функция является экспериментальной. Формат конфигурации и поведение могут измениться.","This feature requires signing in to the dashboard":"Для этой функции нужно войти в панель","This field does not support wildcards or regular expressions.":"Это поле не поддерживает подстановочные знаки или регулярные выражения.","This historical record predates audit-info tracking and cannot be backfilled. The current instance already records server IP, callback IP, payment method, and system version for new top-ups going forward.":"Эта историческая запись была создана до появления функции аудита и не содержит данных аудита. Текущая версия уже поддерживает запись IP-адреса сервера, IP обратного вызова, способа оплаты и версии системы, но эти поля будут заполняться только в новых записях — восполнить их в старых записях задним числом невозможно.","This identifier is sent to the payment backend when creating an order. Use alipay for Alipay, wxpay for WeChat Pay, stripe for Stripe. Custom values must be supported by your payment provider.":"Этот идентификатор отправляется в платежный backend при создании заказа. Для Alipay используйте alipay, для WeChat Pay — wxpay, для Stripe — stripe. Пользовательские значения должны поддерживаться вашим платежным провайдером.","This instance is using an automatic hostname. Set NODE_NAME to a stable unique value for multi-instance management.":"Этот экземпляр использует автоматическое имя хоста. Задайте стабильное уникальное значение NODE_NAME для управления несколькими экземплярами.","This is a task model billed by usage (e.g. seconds, resolution). Prices entered here act as a per-call base rate, not per-token prices.":"Эта модель задач оплачивается по объёму использования (например, секундам или разрешению). Указанные здесь цены действуют как базовая ставка за вызов, а не как цена за токены.","This list does not include the current website. Add {{origin}} if users sign in here.":"Текущего сайта нет в списке. Добавьте {{origin}}, если пользователи входят здесь.","This may cause cache failures.":"Это может привести к сбоям кэша.","This may take a few moments while we validate the request and update your session.":"Это может занять несколько мгновений, пока мы проверяем запрос и обновляем вашу сессию.","This model already uses an expression.":"Эта модель уже использует выражение.","This model has both fixed price and ratio billing conflicts":"Эта модель имеет конфликты как фиксированной цены, так и пропорциональной тарификации","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"У этой модели одновременно заданы фиксированная цена и коэффициенты. Сохранение текущего режима перезапишет конфликтующие поля.","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"У этой модели одновременно заданы фиксированная цена и цены за токены. Сохранение текущего режима перезапишет конфликтующие поля.","This model has provider-specific billing and must be converted manually.":"Эта модель использует особую тарификацию провайдера и требует ручного преобразования.","This model is billed by usage, but the administrator has not configured its pricing yet.":"Эта модель оплачивается по объёму использования, но администратор ещё не настроил её цену.","This model is not available in any group, or no group pricing information is configured.":"Эта модель недоступна ни в одной группе, или информация о ценах для групп не настроена.","This month":"В этом месяце","This OpenRouter Claude price derives cache-write usage from upstream cost and must be converted manually.":"Этот тариф OpenRouter Claude определяет объём записи в кэш по стоимости провайдера и требует ручного преобразования.","This operation is only supported for vLLM channels":"Операция доступна только для каналов vLLM","This operation is only supported for vLLM or SGLang channels":"Эта операция доступна только для каналов vLLM или SGLang","This page has not been created yet.":"Эта страница еще не создана.","This Passkey domain is not available on this website. Use its original website or another verification method.":"Этот домен ключа доступа недоступен на текущем сайте. Используйте исходный сайт или другой способ проверки.","This plan does not allow balance redemption":"Этот план не разрешает оплату балансом","This plugin has no factory fallback. Deleting or disabling it makes this platform unavailable.":"У этого плагина нет встроенной резервной версии. Его удаление или отключение сделает платформу недоступной.","This plugin path does not resolve within the source repository.":"Этот путь плагина не ведёт внутрь репозитория источника.","This preview reads static plugin declarations. The gateway validates the plugin during installation.":"Предпросмотр показывает статические объявления плагина. Шлюз проверит плагин при установке.","This project must be used in compliance with the":"Этот проект должен использоваться в соответствии с","This provider is unavailable for this model.":"Этот провайдер сейчас недоступен для данной модели.","This removes {{count}} failed models from this channel. This action cannot be undone.":"Это удалит {{count}} неуспешных моделей из этого канала. Действие необратимо.","This route discovers upstream OpenAI models and cannot be split or matched by client model rules.":"Этот маршрут обнаруживает модели OpenAI вышестоящего сервиса; его нельзя разделять или сопоставлять по правилам клиентских моделей.","This route is used only by channel management to discover upstream models.":"Этот маршрут используется только управлением каналами для получения моделей поставщика.","This route is used only by channel management to query the upstream balance.":"Этот маршрут используется только управлением каналами для запроса баланса поставщика.","This session will lose access immediately and must sign in again.":"Этот сеанс немедленно потеряет доступ, и потребуется повторный вход.","This site currently has {{count}} models enabled":"На этом сайте сейчас включено моделей: {{count}}","This source does not publish a sha256 for this version, so the downloaded source cannot be pinned to what the source intended.":"Источник не публикует sha256 для этой версии, поэтому нельзя убедиться, что загруженный код совпадает с опубликованным.","This source lists no installable task plugins.":"В этом источнике нет плагинов задач, доступных для установки.","This Telegram account is already bound.":"Эта учётная запись Telegram уже привязана.","This Telegram account is not linked. Sign in using another method and link it first.":"Этот аккаунт Telegram не привязан. Войдите другим способом и привяжите его.","This Telegram binding request has expired or has already been used.":"Этот запрос на привязку Telegram истёк или уже был использован.","This tier catches any request that did not match earlier tiers.":"Этот уровень обрабатывает все запросы, которые не совпали с предыдущими уровнями.","this token group":"эта группа токенов","This Uptime Kuma group will be removed from the list.":"Эта группа Uptime Kuma будет удалена из списка.","This user account is disabled.":"Эта учётная запись пользователя отключена.","This user account no longer exists.":"Эта учётная запись пользователя больше не существует.","this user group":"эта группа пользователей","Token count exceeds the limit. Only exact search is allowed, do not use the % wildcard":"Количество токенов превышает лимит. Разрешён только точный поиск, не используйте подстановочный знак %","This user has no bindings":"У этого пользователя нет привязок","This verification has already been used. Please verify again.":"Это подтверждение уже использовано. Подтвердите личность ещё раз.","This verification method is currently unavailable.":"Этот способ подтверждения сейчас недоступен.","This verification method is not allowed for this action.":"Этот способ подтверждения не разрешён для данной операции.","Token has expired and cannot be enabled. Please modify the expiration time or set it to never expire":"Срок действия токена истёк, включить его нельзя. Измените время истечения или сделайте его бессрочным","This verification method requires its dedicated verification flow.":"Для этого способа необходимо пройти отдельную процедуру подтверждения.","This version is ignored":"Уведомления об этой версии отключены","Token ID or user ID is empty":"ID токена или ID пользователя пуст","This version is saved but not active. Activate it to replace the current version, or activate it later from the Versions tab.":"Эта версия сохранена, но не активна. Активируйте её, чтобы заменить текущую версию, или сделайте это позже на вкладке «Версии».","Token IDs cannot be empty":"ID токенов не могут быть пустыми","This week":"На этой неделе","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"Это добавит 2 шаблонных правила (Codex CLI и Claude CLI) к существующему списку правил.","This will clear custom pricing ratios and revert to upstream defaults.":"Это очистит пользовательские ценовые коэффициенты и вернет к стандартным значениям поставщика.","This will delete all":"Это удалит все","This will delete all used, disabled, and expired redemption codes.":"Все использованные, отключённые и просроченные коды погашения будут удалены.","This will delete all channel affinity cache entries still in memory.":"Это удалит все записи кэша привязки каналов из памяти.","Token name is too long":"Слишком длинное имя токена","This will delete temporary cache files that have not been used for more than 10 minutes":"Будут удалены временные файлы кэша, не использовавшиеся более 10 минут","This will extend the deployment by the specified hours.":"Это продлит развертывание на указанное количество часов.","This will permanently delete all manually and automatically disabled channels. This action cannot be undone.":"Это навсегда удалит все каналы, отключённые вручную и автоматически. Это действие нельзя отменить.","This will permanently delete API key":"Это безвозвратно удалит ключ API","This will permanently delete redemption code":"Это безвозвратно удалит код активации","This will permanently delete user":"Это безвозвратно удалит пользователя","This will permanently remove all log entries created before {{date}}.":"Это безвозвратно удалит все записи журнала, созданные до {{date}}.","This will permanently remove log entries before the selected timestamp.":"Это безвозвратно удалит записи журнала до выбранной временной метки.","This will rebuild the channel routing index from every channel configuration, including supported models, groups, priorities, and weights. Routing may be briefly incomplete while the rebuild is running. Continue?":"Будет заново построен индекс маршрутизации каналов на основе всех конфигураций каналов, включая поддерживаемые модели, группы, приоритеты и веса. Во время перестроения маршрутизация может кратковременно быть неполной. Продолжить?","Token quota is exhausted and cannot be enabled. Please modify the remaining quota or set it to unlimited":"Квота токена исчерпана, включить его нельзя. Измените оставшуюся квоту или сделайте её неограниченной","This will remove {{removed}} forwarding routes and create {{created}} selected routes. Model list and balance routes will be preserved.":"Будут удалены маршруты пересылки ({{removed}}) и созданы выбранные маршруты ({{created}}). Маршруты моделей и баланса сохранятся.","This will remove {{removed}} forwarding routes and replace them with the {{template}} template ({{created}} routes). Model list and balance routes will be preserved.":"Будет удалено маршрутов переадресации: {{removed}}. Они будут заменены шаблоном {{template}} (маршрутов: {{created}}). Маршруты списка моделей и баланса сохранятся.","This will update the priority to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"Приоритет всех каналов ({{count}}) с тегом \\"{{tag}}\\" будет изменен на {{value}}. Продолжить?","This will update the weight to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"Вес всех каналов ({{count}}) с тегом \\"{{tag}}\\" будет изменен на {{value}}. Продолжить?","This year":"Этот год","Thought for {{duration}} seconds":"Размышлял {{duration}} сек.","Three calls made by the same user, whose user group is vip:":"Три вызова одного пользователя с группой vip:","Three calls made by the same vip user. Assume the base price of one call is 10.":"Три вызова одного пользователя vip. Пусть базовая цена одного вызова равна 10.","Three groups; the override matrix has exactly one cell filled in (highlighted).":"Три группы; в матрице переопределений заполнена ровно одна ячейка (выделена).","Three steps to get started":"Три шага для начала работы","Throughput":"Пропускная способность","Throughput by group":"Пропускная способность по группам","Throughput short":"TPS","Throughput trend":"Тренд пропускной способности","Tier":"Уровень","Tier billing mode":"Тарификация уровня","Tier conditions":"Условия уровня","Tier name":"Название уровня","Tiered":"Ступенчато","Tiered (billing expression)":"Ступенчато (платёжное выражение)","Tiered price table":"Тариф по уровням","Tiered pricing":"Многоуровневая тарификация","tiers":"уровни","Too many items in batch request, maximum is {{max}}":"Слишком много элементов в пакетном запросе, максимум {{max}}","Time":"Время","Time between scheduled channel checks":"Интервал между периодическими проверками каналов","Time functions use the timezone written in the expression.":"Функции времени используют часовой пояс, указанный в выражении.","Time Granularity":"Гранулярность времени","Tool price \\"{{name}}\\" must be a finite non-negative number":"Цена инструмента «{{name}}» должна быть конечным неотрицательным числом","Tool price \\"{{name}}\\" must be a non-negative number":"Цена инструмента «{{name}}» должна быть неотрицательным числом","Time range":"Временной диапазон","Time remaining":"Осталось времени","Tool prices must be a JSON object":"Цены инструментов должны быть JSON-объектом","Time window for rate limiting":"Временное окно для ограничения скорости запросов","Time-based":"Зависит от времени","Time-sliced cache (Claude)":"Сегментированный кэш (Claude)","Time:":"Время:","Timeline":"Хронология","times":"раз","Timezone":"Часовой пояс","Timing":"Время","Tip":"Совет","Tip: after configuring one model, select others in the table and use bulk copy.":"Совет: настроив одну модель, выберите другие в таблице и воспользуйтесь массовым копированием.","to":"до","to access this resource.":"для доступа к этому ресурсу.","To Anthropic Messages":"В Anthropic Messages","to confirm":"для подтверждения","To Gemini Generate Content":"В Gemini Generate Content","To Lower":"В нижний регистр","To Lowercase":"В нижний регистр","Top-up amount cannot be less than {{min}}":"Сумма пополнения не может быть меньше {{min}}","Top-up amount cannot exceed {{max}}":"Сумма пополнения не может превышать {{max}}","To OpenAI Chat":"В OpenAI Chat","To OpenAI Responses":"В OpenAI Responses","to override billing when a user in one group uses a token of another group.":"для переопределения выставления счетов, когда пользователь одной группы использует токен другой группы.","Top-up is processing, please try again later":"Пополнение обрабатывается, повторите попытку позже","to the Models list so users can use them before the mapping sends traffic upstream.":"в список моделей, чтобы пользователи могли использовать их до того, как сопоставление отправит трафик выше по течению.","Top-up order does not exist":"Заказ на пополнение не существует","Top-up quota exceeds the range the system can represent":"Квота пополнения превышает допустимый диапазон системы","Top-up quota limit exceeded":"Превышен лимит квоты пополнения","Top-up quota must be greater than 0":"Квота пополнения должна быть больше 0","To Upper":"В верхний регистр","To Uppercase":"В верхний регистр","Topped up {{quota}} with a redemption code, code ID {{id}}":"Пополнение на {{quota}} кодом погашения, ID кода {{id}}","to view this resource.":"для просмотра этого ресурса.","Today":"Сегодня","Toggle columns":"Переключить столбцы","Toggle navigation menu":"Переключить меню навигации","Toggle plan":"Переключить план","Toggle theme":"Переключить тему","token":"токен","Token":"Токен","token (unit)":"token","Token Breakdown":"Детализация токенов","Token Endpoint":"Конечная точка токена","Token Endpoint (Optional)":"Конечная точка токена (необязательно)","Token estimator":"Оценка токенов","Token group":"Группа токена","Token has no group":"У токена нет группы","Token ID":"ID токена","Token identifier":"Идентификатор токена","Total quota cannot be negative":"Общая квота не может быть отрицательной","Token Limits":"Ограничения токенов","Token management":"Управление токенами","Token Management":"Управление токенами","Token Mgmt":"Управление токенами","Token name":"Имя токена","Token Name":"Имя токена","Token obtained from your Gotify application":"Токен, полученный из вашего приложения Gotify","Token operation details":"Подробности операции с токенами","Token or per-call pricing":"По токенам или за запрос","Token price for audio input.":"Цена токенов для аудиовхода.","Token price for audio output.":"Цена токенов для аудиовыхода.","Token price for cache reads.":"Цена токенов для чтения кэша.","Token price for creating cache entries.":"Цена токенов для создания записей кэша.","Token price for image input.":"Цена токенов для входного изображения.","Token prices":"Цены токенов","Token regenerated and copied to clipboard":"Токен перегенерирован и скопирован в буфер обмена","Token scope":"Выбор токенов","Token share by model author across the last 24 hours":"Доля токенов по автору модели за последние 24 часа","Token share by model author across the past few weeks":"Доля токенов по автору модели за последние недели","Token share by model author across the past month":"Доля токенов по автору модели за последний месяц","Token share by model author across the past year":"Доля токенов по автору модели за последний год","Transfer failed {{error}}":"Перевод не удался {{error}}","Token share by model author since launch":"Доля токенов по автору модели с момента запуска","Token unit":"Единица токенов","Token usage by model since launch":"Использование токенов по моделям с момента запуска","Token-based":"На основе токенов","Tokenizer":"Токенизатор","tokens":"токены","Tokens":"Токены","tokens / mo":"токенов / мес.","Tokens by category":"Токены по категориям","Tokens Only":"Только токены","Tokens per minute":"Токенов в минуту","Tokens since launch":"Токенов с запуска","Tokens_usage":"Токены","Tokens-only mode will show raw quota values regardless of this toggle.":"Режим «только токены» будет показывать необработанные значения квот независимо от этого переключателя.","Too many active login sessions. On a device where you are already signed in, open Login sessions and use “Sign out other sessions” to revoke them. If you cannot access a signed-in device, reset your password to sign out all sessions.":"Достигнут лимит активных сеансов входа. На устройстве, где вы уже вошли, откройте «Сеансы входа» и выберите «Завершить другие сеансы», чтобы отозвать их. Если доступа к такому устройству нет, сбросьте пароль, чтобы завершить все сеансы.","Too many files. Some were not added.":"Слишком много файлов. Некоторые не были добавлены.","Too many incorrect codes. Start email verification again.":"Слишком много неверных кодов. Начните подтверждение почты заново.","Too many login sessions were created recently. Please wait for the rolling window to pass, then try again.":"За последнее время создано слишком много сеансов входа. Дождитесь окончания скользящего временного окна и повторите попытку.","Too many requests":"Слишком много запросов","Tool / function declarations the model may call":"Объявления инструментов и функций, которые модель может вызывать","Tool identifier":"Идентификатор инструмента","Tool price settings":"Настройки цен на инструменты","Tool prices":"Цены инструментов","Tool-choice policy or specific tool name":"Политика выбора инструмента или конкретное имя","Tools":"Инструменты","Top {{count}}":"Топ {{count}}","Turnstile token is empty":"Токен Turnstile пуст","Turnstile verification failed, please refresh and try again!":"Проверка Turnstile не пройдена, обновите страницу и повторите попытку!","Top app":"Лидирующее приложение","Top apps":"Топ приложений","Top Apps":"Топ приложений","Top integrations using this model":"Основные интеграции, использующие эту модель","Top model":"Лидирующая модель","Top models":"Топ моделей","Top Models":"Лучшие модели","Top models by traffic":"Популярные модели по трафику","Top P":"Top P","Top up balance and view billing history.":"Пополнить баланс и просмотреть историю платежей.","Top up, pay for subscriptions, check in, and transfer referral rewards.":"Пополнение, оплата подписок, ежедневная отметка и перевод реферальных вознаграждений.","Top Users":"Лучшие пользователи","Top vendors":"Топ поставщиков","Top-up":"Пополнение","Top-up amount options":"Варианты суммы пополнения","Top-up Audit Info":"Аудит пополнений","Top-up group ratios":"Коэффициенты групп пополнения","Top-Up Link":"Ссылка для пополнения","top-up ratio":"коэффициент пополнения","Top-up ratio":"Коэффициент пополнения","Topup Amount":"Сумма пополнения","Total":"Всего","Unable to connect to {{provider}} server, please try again later":"Не удалось подключиться к серверу {{provider}}, повторите попытку позже","Unable to create the Passkey credential":"Не удалось создать учётные данные Passkey","Total {{count}} records":"Всего записей: {{count}}","Total = used + remaining. It is not an initial allocation or a periodic budget; changing the remaining quota changes the total and percentage.":"Итого = использовано + остаток. Это не начальная квота и не бюджет на период. Изменение остатка меняет итог и процент использования.","Total Allocated":"Всего выделено","Total attempt budget exhausted":"Общий лимит попыток исчерпан","Total check-ins":"Общая проверка","Total consumed":"Всего использовано","Total consumed quota":"Всего использованной квоты","Total cost":"Общая стоимость","Total Cost":"Общая стоимость","Total Count":"Общее количество","Total earned":"Итого заработано","Total Earned":"Всего заработано","Total GPUs":"Всего GPU","Unauthorized, insufficient privileges":"Нет доступа, недостаточно прав","Unauthorized, invalid access token":"Нет доступа: недействительный токен доступа","Unauthorized, invalid user info":"Нет доступа: недействительные данные пользователя","Unauthorized, not logged in and no access token provided":"Нет доступа: вход не выполнен и токен доступа не передан","Unauthorized, the access token has expired":"Нет доступа: срок действия токена доступа истёк","Total invitation revenue":"Общий доход от приглашений","Total Log Size":"Общий размер журналов","Total Quota":"Общая квота","Unbound successfully":"Отвязка выполнена","Total quota included in the plan, usable per billing period. 0 means unlimited.":"Общая квота, включённая в тариф, доступна за каждый расчётный период. 0 означает безлимит.","Total requests allowed per period. 0 = unlimited.":"Общее количество запросов, разрешенных за период. 0 = без ограничений.","Total requests made":"Всего сделанных запросов","Total Revenue":"Общий доход","Total time":"Общее время","Total tokens":"Всего токенов","Total Tokens":"Всего токенов","Total Usage":"Общее использование","Total Used":"Всего использовано","Total:":"Всего:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"Отслеживать потребление для каждого запроса для аналитики использования. Сохранение этой опции увеличивает количество записей в базу данных.","Track usage, costs and performance with real-time analytics":"Отслеживайте использование, затраты и производительность с помощью аналитики в реальном времени","Tracked apps":"Отслеживаемые приложения","Tracks current account base limits and additional metered usage on Codex upstream.":"Отслеживает базовые лимиты и дополнительное потребление (metered) аккаунта на стороне Codex.","Trading insights, accounting, advisory":"Торговые инсайты, учёт, консалтинг","Traditional Chinese":"Традиционный китайский","Transfer":"Перевод","Undo":"Отменить","Unknown OAuth provider":"Неизвестный поставщик OAuth","Unknown rule name":"Неизвестное имя правила","Unknown setting type: {{type}}":"Неизвестный тип настройки: {{type}}","Transfer Amount":"Сумма перевода","Transfer failed":"Перевод не удался","Transfer Rewards":"Перевести награды","Transfer successful":"Перевод успешен","Transfer to Balance":"Перевести на баланс","Translation":"Перевод","Transparent Billing":"Прозрачная тарификация","Trend":"Тренд","Trending down":"Падают","Unsupported add mode":"Неподдерживаемый режим добавления","Unsupported operation":"Неподдерживаемая операция","Unsupported payment channel":"Неподдерживаемый платежный канал","Unsupported payment method":"Неподдерживаемый способ оплаты","Trending up":"Растут","Triggered garbage collection":"Запущена сборка мусора","Trim leading/trailing whitespace":"Удалить пробелы в начале/конце","Trim Prefix":"Обрезать префикс","Trim Space":"Обрезать пробелы","Trim Suffix":"Обрезать суффикс","Truncate embeddings to this many dimensions":"Усечь эмбеддинги до указанного числа измерений","Trusted":"Доверенный","Try adjusting your search":"Попробуйте изменить условия поиска","Try adjusting your search to locate a missing model.":"Попробуйте изменить параметры поиска, чтобы найти отсутствующую модель.","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"Перцентили TTFT, пропускная способность и доступность за 30 дней по группам","TTL":"TTL","TTL (seconds, 0 = default)":"TTL (секунды, 0 = по умолчанию)","TTL (seconds)":"TTL (секунды)","Tune selection priority, testing, status handling, and request overrides.":"Настройте приоритет выбора, тестирование, обработку статусов и переопределения запросов.","Turnstile is enabled but site key is empty.":"Turnstile включён, но ключ сайта пуст.","Tutoring, learning aids, assessment":"Репетиторство, учебные материалы, оценка","Two-factor Authentication":"Двухфакторная аутентификация","Two-Factor Authentication":"Двухфакторная аутентификация","Two-factor authentication disabled":"Двухфакторная аутентификация отключена","Two-factor authentication enabled successfully!":"Двухфакторная аутентификация успешно включена!","Two-factor authentication is already enabled.":"Двухфакторная аутентификация уже включена.","Two-factor authentication is not enabled.":"Двухфакторная аутентификация не включена.","Two-factor authentication is temporarily locked.":"Двухфакторная аутентификация временно заблокирована.","Two-factor authentication reset":"Двухфакторная аутентификация сброшена","Two-Step Verification":"Двухэтапная проверка","Update successful":"Обновление выполнено","Type":"Тип","Type (common)":"Тип (общий)","Type *":"Тип *","Type to confirm":"Введите для подтверждения","Type a command or search...":"Введите команду или поиск...","Type the confirmation text here":"Введите текст подтверждения здесь","Type-Specific Settings":"Настройки для конкретного типа","Type:":"Тип:","UI granularity only — data is still aggregated hourly":"Только детализация пользовательского интерфейса — данные по-прежнему агрегируются ежечасно","Unable to build Passkey assertion":"Не удалось создать утверждение Passkey","Unable to compare versions":"Невозможно сравнить версии","Unable to confirm the update result":"Не удалось подтвердить результат обновления","Unable to estimate price for this deployment.":"Не удается оценить цену для этого развертывания.","Unable to generate chat link. Please contact your administrator.":"Не удалось сгенерировать ссылку для чата. Пожалуйста, свяжитесь с вашим администратором.","Unable to load groups":"Не удалось загрузить группы","Unable to load login sessions":"Не удалось загрузить сеансы входа","Unable to load rankings":"Не удалось загрузить рейтинги","Unable to load rankings data":"Не удалось загрузить данные рейтингов","Unable to open chat":"Не удалось открыть чат","Unable to parse Passkey login options from response":"Не удалось прочитать параметры входа Passkey из ответа","Unable to parse structured pricing":"Не удалось разобрать структурированные цены","Unable to prepare chat link. Please ensure you have an enabled API key.":"Не удается подготовить ссылку для чата. Убедитесь, что у вас есть активированный API-ключ.","Unable to read clipboard":"Не удалось прочитать буфер обмена","Unauthorized":"Не авторизован","Unauthorized Access":"Несанкционированный доступ","Unavailable":"Недоступно","Unbind":"Отвязать","Unbind failed":"Не удалось отвязать","Unbound {{provider}}":"{{provider}} отвязан","Unchanged":"Без изменений","Underflow":"Переполнение снизу","Underground":"Подземелье","Understand how user groups, token groups, ratios, and special rules work together.":"Поймите, как вместе работают группы пользователей, группы токенов, коэффициенты и специальные правила.","Upgrade group does not exist":"Группа повышения не существует","Understand image inputs alongside text":"Понимать изображения наряду с текстом","Unexpected release payload":"Неожиданный формат данных релиза","Unified API Gateway for":"Единый API-шлюз для","Unique identifier for this group.":"Уникальный идентификатор для этой группы.","unit":"ед.","Unit":"Единица","Unit price (local currency / USD)":"Цена за единицу (местная валюта / USD)","Unit price (USD)":"Цена за единицу (USD)","Unit price must be greater than 0":"Цена за единицу должна быть больше 0","Unit price: {{field}}":"Цена за единицу: {{field}}","Units per USD":"Единиц за USD","Unknown":"Неизвестно","Unknown device":"Неизвестное устройство","Unknown version":"Неизвестная версия","Unlimited":"Без ограничений","Unlimited Quota":"Неограниченная квота","Unrecognized status code":"Нераспознанный код состояния","Unsaved changes":"Несохранённые изменения","Unset legacy prices use the billing engine defaults.":"Для неуказанных старых цен используются значения по умолчанию системы тарификации.","Unset price":"Цена не задана","Unset price models":"Модели с неустановленной ценой","Unsupported account password hashing configuration.":"Неподдерживаемая конфигурация хеширования паролей.","Unsupported verification method: {{method}}":"Неподдерживаемый способ проверки: {{method}}","Until":"До","Untitled":"Без названия","Untrusted upstream data:":"Недоверенные вышестоящие данные:","Unused":"Неиспользованные","Up to 4 strings that stop generation":"До 4 строк, останавливающих генерацию","Up to date":"Актуален","Update":"Обновить","Update All Balances":"Обновить все балансы","Update API Key":"Обновить API-ключ","Update API token":"Изменение токена API","Update API token “{{name}}”":"Изменение токена API «{{name}}»","Update available":"Доступно обновление","Update Balance":"Обновить баланс","Update balance for:":"Обновить баланс для:","Update Channel":"Обновить канал","Update channel configuration and click save when you\'re done.":"Обновите конфигурацию канала и нажмите сохранить, когда закончите.","Update check timed out. Try again.":"Время проверки обновлений истекло. Повторите попытку.","Update completed":"Обновление завершено","Update configuration":"Обновить конфигурацию","Update failed":"Обновление не удалось","Update Model":"Обновить модель","Update model configuration and click save when you\'re done.":"Обновите конфигурацию модели и нажмите сохранить, когда закончите.","Update plan info":"Обновить информацию о плане","Update Provider":"Обновить поставщика","Update Redemption Code":"Обновить код активации","Update results":"Результаты обновления","Update selected fields":"Обновить выбранные поля","Upstream returned no usage":"Upstream не вернул данные об использовании","Upstream returned no usage, so nothing was charged (possibly an upstream timeout)":"Upstream не вернул данные об использовании, поэтому ничего не списано (возможно, истекло время ожидания)","Update succeeded":"Успешно обновлено","Update the API key by providing necessary info.":"Обновите API-ключ, указав необходимую информацию.","Upstream task not found":"Задача не найдена в upstream","Update the configuration for this custom OAuth provider.":"Обновить конфигурацию этого пользовательского поставщика OAuth.","Upstream task timed out (over 1 hour)":"Истекло время задачи upstream (более 1 часа)","Update the redemption code by providing necessary info.":"Обновите промокод, предоставив необходимую информацию.","Update the reusable bundle below.":"Обновите переиспользуемый бандл ниже.","Update the session binding after a successful switch":"Обновлять привязку после успешного переключения","Update the user by providing necessary info.":"Обновите пользователя, предоставив необходимую информацию.","Update vendor information for {{name}}":"Обновить информацию о поставщике для {{name}}","Update your password for account:":"Обновите свой пароль для учетной записи:","Update your password to keep your account secure":"Обновите пароль, чтобы обеспечить безопасность вашей учётной записи","Updated":"Обновлено","Updated {{models}} model assignments and deleted {{vendors}} vendor records.":"Обновлено привязок моделей: {{models}}. Удалено поставщиков: {{vendors}}.","Uptime Kuma groups cannot exceed 20 entries":"Групп Uptime Kuma не может быть больше 20","Updated a custom OAuth provider":"Обновлён пользовательский провайдер OAuth","Updated a deployment":"Обновлено развёртывание","Updated a model":"Обновлена модель","Updated a prefill group":"Обновлена группа предзаполнения","Updated a redemption code":"Код погашения обновлён","URL must start with http:// or https://":"URL должен начинаться с http:// или https://","Updated a subscription plan":"Обновлён тарифный план подписки","Updated a vendor":"Обновлён поставщик","Updated At":"Дата обновления","Updated channel {{name}} (ID: {{id}})":"Обновлён канал {{name}} (ID: {{id}})","Updated channel status (ID: {{id}})":"Обновлён статус канала (ID: {{id}})","Updated daily":"Обновляется ежедневно","Updated Passkey domains: removed {{domains}}; affected {{known}}; unknown {{unknown}}":"Домены ключей доступа обновлены: удалены {{domains}}; затронуто {{known}}; домен неизвестен {{unknown}}","Updated successfully":"Обновлено успешно","Updated system setting {{key}}":"Обновлён системный параметр {{key}}","Updated user {{username}} (ID: {{id}})":"Обновлён пользователь {{username}} (ID: {{id}})","Updates have not been checked yet.":"Обновления ещё не проверялись.","Updates with the system":"Обновляется с системой","Updating all channel balances. This may take a while. Please refresh to see results.":"Обновление балансов всех каналов. Это может занять некоторое время. Пожалуйста, обновите страницу, чтобы увидеть результаты.","Updating...":"Обновление...","Upgrade {{name}}":"Обновление {{name}}","Upgrade and enable":"Обновить и включить","Upgrade available: v{{installed}} to v{{latest}}":"Доступно обновление: с v{{installed}} до v{{latest}}","Upgrade Group":"Повысить группу","Upgrade plaintext SMTP connection with STARTTLS before authentication":"Перед аутентификацией повысить открытое SMTP-соединение до STARTTLS","Upload":"Загрузка","Upload a JavaScript task platform plugin.":"Загрузите JavaScript-плагин платформы задач.","Upload a single service account JSON file":"Загрузите JSON-файл одного сервисного аккаунта","Upload a task plugin to add a platform.":"Загрузите плагин задач, чтобы добавить платформу.","Upload file":"Загрузить файл","Upload files":"Загрузить файлы","Upload multiple JSON files in batch modes":"Загрузка нескольких файлов JSON в пакетных режимах","Upload new plugin version":"Загрузить новую версию плагина","Upload new version":"Загрузить новую версию","Upload or reference a local configuration file.":"Загрузить или сослаться на локальный файл конфигурации.","Upload photo":"Загрузить фото","Upload plugin":"Загрузить плагин","Upload task plugin":"Загрузить плагин задач","Uploading a plugin is an administrator-level trust decision. A plugin can access channel credentials and shape upstream requests. Review its source and diff before activation.":"Загрузка плагина — решение об уровне доверия администратора. Плагин может получать доступ к данным каналов и формировать запросы к провайдеру. Перед активацией проверьте код и различия.","Uploading...":"Загрузка...","Upscale":"Увеличение","Upstream":"Источник","Upstream authentication":"Аутентификация у провайдера","Upstream connection":"Соединение с вышестоящим сервером","Upstream did not return reset credit details.":"Вышестоящий сервис не вернул сведения о сбросах лимита.","Upstream JSON response":"JSON-ответ поставщика","Upstream Model":"Модель запроса провайдеру","Upstream Model Detection Settings":"Настройки обнаружения моделей провайдера","Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.":"Задача обнаружения моделей вышестоящего источника запущена. Следите за ходом в разделе «Информация о системе», затем обновите, чтобы просмотреть подготовленные изменения.","Upstream model list":"Список моделей провайдера","Upstream Model Name":"Имя модели у провайдера","Upstream Model Update Check":"Проверка обновлений моделей провайдера","Upstream Model Updates":"Обновления моделей источника","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"Обновления моделей применены: {{added}} добавлено, {{removed}} удалено, {{ignored}} проигнорировано, всего {{totalIgnored}} проигнорированных моделей","Upstream names returned by the provider":"Имена, возвращаемые провайдером","Upstream path":"Путь upstream","Upstream path is required":"Путь upstream обязателен","Upstream path must be a full URL or a path starting with /":"Путь upstream должен быть полным URL или путем, начинающимся с /","Upstream price sync":"Синхронизация цен upstream","Upstream prices fetched successfully":"Цены провайдера успешно получены","Upstream protocol plan":"Схема протокола поставщика","Upstream ratios fetched successfully":"Коэффициенты upstream успешно получены","Upstream receives":"Провайдер получает","Upstream request failed":"Запрос провайдеру не выполнен","Upstream Request ID":"ID вышестоящего запроса","Upstream response":"Ответ провайдера","Upstream Response":"Ответ Upstream","Upstream Response (billing-usage-anthropic-estimated)":"Ответ upstream (billing-usage-anthropic-estimated)","Upstream Response (billing-usage-anthropic)":"Ответ upstream (billing-usage-anthropic)","Upstream Response (billing-usage-gemini-estimated)":"Ответ upstream (billing-usage-gemini-estimated)","Upstream Response (billing-usage-gemini)":"Ответ upstream (billing-usage-gemini)","Upstream Response (billing-usage-openai-estimated)":"Ответ upstream (billing-usage-openai-estimated)","Upstream Response (billing-usage-openai)":"Ответ upstream (billing-usage-openai)","upstream services integrated":"интеграций с вышестоящими сервисами","Upstream Task ID":"ID задачи вышестоящего сервиса","Upstream task plugins":"Плагины задач вышестоящего шлюза","Upstream Updates":"Обновления вышестоящих моделей","Upstream URL":"URL вышестоящего сервиса","Upstream URL must be a full URL":"Upstream URL должен быть полным URL","Upstream vendor missing":"Поставщик отсутствует в источнике","uptime":"время бесперебойной работы","Uptime":"Время работы","Uptime (30d)":"Доступность (30 дн.)","Uptime (last 30 days)":"Доступность (за 30 дней)","Uptime Kuma":"Время безотказной работы Kuma","Uptime Kuma groups saved successfully":"Группы Uptime Kuma успешно сохранены","Uptime Kuma URL":"URL Uptime Kuma","Uptime since":"Время работы с","URL":"URL","URL is required":"URL обязателен","URL to your logo image (optional)":"URL изображения вашего логотипа (необязательно)","Use the same priority as the highlighted channels":"Использовать тот же приоритет, что и у выделенных каналов","User does not exist":"Пользователь не существует","US dollar (USD)":"Доллар США (USD)","Usage":"Использование","Usage · {{price}}":"Объём · {{price}}","Usage at a glance":"Краткий обзор использования","Usage guide":"Руководство","User group will be reverted to {{group}}":"Группа пользователя будет возвращена к {{group}}","User group will be upgraded to {{group}}":"Группа пользователя будет повышена до {{group}}","Usage logs":"Журналы использования","Usage Logs":"Журнал использования","Usage mode":"Режим использования","User has been banned":"Пользователь заблокирован","User has been deleted":"Пользователь удалён","Usage parameters":"Параметры использования","Usage percentage":"Процент использования","Usage prices":"Цены за использование","Usage-based":"На основе использования","Usage-based billing":"Оплата по объёму","Usage-based billing · price not configured":"Оплата по объёму · цена не настроена","USD":"USD","USD Exchange Rate":"Обменный курс USD","USD price per 1M input tokens.":"Цена в USD за 1 млн входных токенов.","User registration failed or user ID retrieval failed":"Не удалось зарегистрировать пользователя или получить его ID","USD price per 1M tokens.":"Цена в USD за 1 млн токенов.","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"Используйте +: для добавления группы, -: для удаления выбираемой по умолчанию группы, без префикса — для добавления в конец.","Use 8–128 characters.":"Используйте от 8 до 128 символов.","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"Используйте совместимый браузер или устройство с биометрической аутентификацией или ключ безопасности для регистрации ключа доступа.","Use a different stable value for each instance, then restart the service.":"Используйте разные стабильные значения для каждого экземпляра, затем перезапустите сервис.","Use a Passkey from another website":"Использовать ключ доступа другого сайта","Use a path to append it to the channel Base URL, or enter a full URL to override the Base URL for this route.":"Укажите путь, чтобы добавить его к Base URL канала, или введите полный URL, чтобы переопределить Base URL для этого маршрута.","Username already exists or has been deleted":"Имя пользователя уже занято или было удалено","Use access tokens to call the dashboard API from scripts. Each token only has the permissions you select.":"Используйте токены доступа, чтобы вызывать API панели из скриптов. Каждый токен получает только выбранные вами права.","Use an HTTPS domain (or localhost for development) to configure Passkey.":"Настраивайте Passkey на домене с HTTPS или на localhost для разработки.","Username must be {{max}} characters or fewer":"Имя пользователя должно содержать не более {{max}} символов","Use authenticator code":"Использовать код аутентификатора","Username or password is incorrect, or user has been banned":"Неверное имя пользователя или пароль, либо пользователь заблокирован","Use backup code":"Использовать резервный код","Use Bearer for all protocols":"Использовать Bearer для всех протоколов","Use channel type {{type}}":"Использовать тип канала {{type}}","Users can download their own logs from the usage log page. Administrators can always export.":"Пользователи могут скачивать свои журналы на странице журнала использования. Администраторы могут экспортировать всегда.","Use default":"Использовать значение по умолчанию","Use disk cache when request body exceeds this size":"Использовать дисковый кэш, когда тело запроса превышает этот размер","Use exact client model names, separated by commas. Prefixes and wildcards are not supported.":"Укажите точные имена моделей клиента через запятую. Префиксы и подстановочные знаки не поддерживаются.","Use exact model names such as gpt-4o, or regex rules prefixed with re: such as re:^gemini-.":"Используйте точные имена моделей, например gpt-4o, или regex-правила с префиксом re:, например re:^gemini-.","Use expression pricing when a dependent price is non-zero and its base price is zero.":"Используйте выражение, если зависимая цена ненулевая, а базовая цена равна нулю.","Use external tools to extend capabilities":"Использовать внешние инструменты для расширения возможностей","Use Mantle for supported Claude models and automatic prompt caching. Keep InvokeModel for older models and Amazon Nova.":"Используйте Mantle для поддерживаемых моделей Claude и автоматического кэширования промптов. Для старых моделей и Amazon Nova оставьте InvokeModel.","Use model-level expression":"Использовать выражение модели","Use model-level pricing":"Использовать цену модели","Use one available reset credit for this channel. The reset request is sent only after confirmation.":"Для этого канала будет использован один доступный сброс. Запрос отправляется только после подтверждения.","Use one available reset credit to refresh the current Codex usage windows.":"Использует один доступный сброс, чтобы обновить текущие окна использования Codex.","Use OpenAI-compatible Ollama chat API":"Использовать OpenAI-совместимый chat API Ollama","Use our unified OpenAI-compatible endpoint in your applications":"Используйте наш единый OpenAI-совместимый эндпоинт в ваших приложениях","Use Passkey or 2FA to confirm your identity before revealing this channel key.":"Подтвердите личность с помощью Passkey или 2FA перед просмотром ключа канала.","Use Passkey to sign in without entering your password.":"Используйте ключ доступа для входа без ввода пароля.","Use presets or upstream discovery to populate the model list faster.":"Используйте пресеты или обнаружение upstream, чтобы быстрее заполнить список моделей.","Use secure connection when sending emails":"Использовать безопасное соединение при отправке электронных писем","Use sidebar shortcut":"Использовать ярлык боковой панели","Use the existing token total":"Использовать текущую сумму токенов","Use the full-width table to scan prices, then select a row to edit it here.":"Просмотрите цены в таблице, затем выберите строку для редактирования здесь.","Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.":"Используется группа токена. Если у токена нет группы — группа пользователя. Группа auto перебирает порядок автоназначения сверху вниз.","Use the group set on the token. If the token has no group, use the user group. The auto group tries the configured groups from top to bottom.":"Используется группа токена. Если она не задана, используется группа пользователя. Группа auto перебирает настроенные группы сверху вниз.","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"Используйте таблицу групп тарификации, чтобы управлять коэффициентом и отображением группы в списке создания токена.","Use this callback URL pattern when registering a custom OAuth provider.":"Используйте этот формат URL обратного вызова при регистрации пользовательского провайдера OAuth.","Use this token for API authentication":"Используйте этот токен для аутентификации API","Use tier(name, fixed(amount)) for a USD price per request. Group and request multipliers still apply.":"Используйте tier(name, fixed(amount)) для цены за запрос в USD. Множители группы и запроса по-прежнему применяются.","Use your Passkey":"Используйте свой ключ доступа","used":"использовано","Used":"Использовано","Used {{used}} of {{total}} ({{percent}}%)":"Использовано {{used}} из {{total}} ({{percent}}%)","Used / Remaining":"Использовано / Осталось","Used amount":"Использовано","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"Используется как SuccessURL для нового продукта. Если оставить пустым, потребуется подтверждение.","Used by route auth templates":"Используется шаблонами auth маршрута","Used for load balancing. Higher weight = more requests":"Используется для балансировки нагрузки. Больший вес = больше запросов","Used in URLs and API routes":"Используется в URL и маршрутах API","Used Quota":"Лимит потребления","Used reset credits cannot be restored.":"Использованные сбросы нельзя восстановить.","Used to authenticate with io.net deployment API":"Используется для аутентификации в API развертывания io.net","Used to authenticate with the worker. Leave blank to keep the existing secret.":"Используется для аутентификации с воркером. Оставьте пустым, чтобы сохранить существующий секрет.","Used to decide the payment flow. Built-in keys include stripe for Stripe and waffo_pancake for Waffo Pancake; other values are sent to Epay as the type parameter.":"Определяет платежный сценарий после нажатия. Встроенные ключи: stripe для Stripe и waffo_pancake для Waffo Pancake; остальные значения отправляются в Epay как параметр type.","Used when a Task Plugin channel has no API address configured.":"Используется, если для канала плагина задач не задан адрес API.","Used:":"Использовано:","Verification code is incorrect or has expired":"Код подтверждения неверен или устарел","User":"Пользователь","User {{id}}":"Пользователь {{id}}","User Agent":"Пользовательский агент","User Agreement":"Пользовательское соглашение","User Analytics":"Аналитика пользователей","User Consumption Ranking":"Рейтинг потребления","User Consumption Trend":"Тренд потребления","User Count":"Количество пользователей","User created successfully":"Пользователь успешно создан","User dashboard and quota controls.":"Панель пользователя и управление квотами.","User deleted successfully":"Пользователь успешно удален","User demoted to regular user successfully":"Пользователь успешно понижен до обычного пользователя","User disabled successfully":"Пользователь успешно отключен","User enabled successfully":"Пользователь успешно включен","User Exclusive Ratio":"Эксклюзивный коэффициент","User group":"Группа пользователя","User Group":"Группа пользователей","User group name":"Название группы пользователей","User Group: {{ratio}}x":"Группа пользователя: {{ratio}}x","User groups that can access channels with this tag":"Группы пользователей, которые могут получить доступ к каналам с этим тегом","User groups that can access this channel. ":"Группы пользователей, которые могут получить доступ к этому каналу. ","User ID":"ID пользователя","User ID Field":"Поле ID пользователя","User ID:":"ID пользователя:","User Info Endpoint":"Конечная точка информации о пользователе","User Info Endpoint (Optional)":"Конечная точка информации о пользователе (необязательно)","User Information":"Информация о пользователе","User Menu":"Меню пользователя","User personal functions":"Личные функции пользователя","User promoted to admin successfully":"Пользователь успешно повышен до администратора","User selectable":"Доступно пользователю","User Subscription Management":"Управление подписками пользователя","User updated successfully":"Пользователь успешно обновлен","User Verification":"Проверка пользователя","User-Agent include (one per line)":"User-Agent include (по одному на строку)","Username":"Имя пользователя","Username confirmation does not match":"Подтверждение имени пользователя не совпадает","Username Field":"Поле имени пользователя","Username or Email":"Имя пользователя или Email","Users":"Пользователи","Users call":"Пользователь вызывает","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"Пользователи вызывают модель слева. Платформа перенаправляет запрос вышестоящей модели справа.","Users in {{group}}":"Пользователи группы {{group}}","Users must wait for a successful drawing before upscales or variations.":"Пользователи должны дождаться успешного рисунка перед апскейлом или вариациями.","Users of vip, when billed as premium, pay ratio":"Пользователи vip при тарификации по premium платят коэффициент","Vertex AI keys for batch adding cannot be empty":"Ключи Vertex AI для пакетного добавления не могут быть пустыми","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"Пользователи видят только группы, отмеченные как доступные для выбора. Недоступные для выбора группы всё равно могут назначаться администраторами.","uses":"использует","Using built-in or default pricing":"Используются встроенные цены или значения по умолчанию","Using the complete global Auto order ({{count}} groups)":"Используется полный глобальный порядок Auto (групп: {{count}})","v{{installed}} is installed but this source does not list it. Installing replaces it with v{{target}}.":"Установлена версия v{{installed}}, но этот источник её не содержит. Установка заменит её на v{{target}}.","Validity":"Срок действия","Validity Period":"Срок действия","Value":"Значение","Value (supports JSON or plain text)":"Значение (JSON или текст)","Value is required":"Значение обязательно","Value metric":"Метрика значения","Value must be at least 0":"Значение должно быть не менее 0","Value Regex":"Регулярное выражение значения","variable":"переменная","variable)":"переменная)","variable) *":"переменная) *","Variables":"Переменные","Vary":"Вариация","Vary (Strong)":"Вариация (сильная)","Vary (Subtle)":"Вариация (лёгкая)","Vast Range of AI Models":"Огромный выбор моделей ИИ","vendor":"поставщик","Vendor":"Поставщик","Vendor created successfully":"Поставщик создан","Vendor data changed. Preview again before applying.":"Данные поставщиков изменились. Повторите предпросмотр перед применением.","Vendor deleted successfully":"Поставщик успешно удалён","Vendor details":"Данные поставщика","Vendor management":"Управление поставщиками","Vendor Name":"Название поставщика","Vendor Name *":"Название поставщика *","Vendor name and icon must not exceed 128 characters.":"Имя поставщика и ключ иконки не должны превышать 128 символов.","Vendor name is required":"Укажите имя поставщика","Vendor updated successfully":"Поставщик обновлён","Vendor:":"Поставщик:","Vendors":"Поставщики","Vendors ranked by aggregated token volume":"Поставщики, ранжированные по совокупному объёму токенов","Vendors source":"Источник поставщиков","Vendors still have {{count}} linked model records. Transfer or clear their assignments first.":"У поставщиков осталось {{count}} связанных моделей. Сначала перенесите или уберите их привязки.","Verification code":"Код подтверждения","Verification Code":"Код подтверждения","Verification code must be 6 digits":"Код подтверждения должен содержать 6 цифр","Verification code sent! Please check your email.":"Код подтверждения отправлен! Пожалуйста, проверьте вашу электронную почту.","Verification code updates every 30 seconds.":"Код подтверждения обновляется каждые 30 секунд.","Verification does not match this action.":"Подтверждение не соответствует этой операции.","Verification does not match this action\'s details. Please verify again.":"Подтверждение не соответствует параметрам этого действия. Подтвердите личность ещё раз.","Verification email could not be sent. Start email verification again.":"Не удалось отправить письмо с кодом. Начните подтверждение почты заново.","Verification email sent":"Письмо для подтверждения отправлено","Verification failed":"Подтверждение не удалось","Verification failed. Please try again.":"Подтверждение не удалось. Повторите попытку.","Verification flow expired":"Процесс проверки истёк","Verification is not configured properly":"Подтверждение настроено неправильно","Verification method":"Метод верификации","Verification proof was not returned":"Подтверждение проверки не было получено","Verification required to reveal the saved key.":"Требуется подтверждение для отображения сохраненного ключа.","Verification scope is missing":"Область проверки не указана","Violation fee charged":"Списан штраф за нарушение","Verify":"Проверить","Verify again before retrying this action.":"Прежде чем повторить действие, подтвердите личность ещё раз.","VIP group":"VIP-группа","Verify and Sign In":"Подтвердить и войти","Verify routing with Playground or your client":"Проверьте маршрутизацию через Playground или ваш клиент","Verify Setup":"Проверить настройку","Verify to create administrator":"Подтвердить для создания администратора","Verify to delete user":"Подтвердить для удаления пользователя","Verify to demote user":"Подтвердить для понижения пользователя","Verify to disable user":"Подтвердить для отключения пользователя","Verify to enable user":"Подтвердить для включения пользователя","Verify to promote user":"Подтвердить для повышения пользователя","Verify to reset 2FA":"Подтвердить для сброса 2FA","Verify to reset Passkey":"Подтвердить для сброса Passkey","Verify to unbind account":"Подтвердить для отвязки аккаунта","Verify to update user credentials":"Подтвердить для изменения учётных данных пользователя","Verify to view channel key":"Подтвердить для просмотра ключа канала","Verify upstream pricing":"Проверьте цены источника","Verify your database connection":"Проверьте подключение к базе данных","Verify your identity to finish signing in.":"Подтвердите свою личность, чтобы завершить вход.","Verifying credentials and pulling stores from your Pancake account...":"Проверяем учетные данные и загружаем магазины из вашего аккаунта Pancake...","Verifying your {{provider}} account":"Проверка аккаунта {{provider}}","Version":"Версия","Version differences":"Различия версий","Version history":"История версий","Version Overrides":"Переопределения версий","Versions":"Версии","Vertex AI":"Vertex AI","Waffo Pancake configuration is incomplete":"Настройка Waffo Pancake не завершена","Waffo Pancake credentials are not configured":"Учетные данные Waffo Pancake не настроены","Vertex AI API Key mode does not support batch creation":"Режим API Key Vertex AI не поддерживает пакетное создание","Waffo Pancake is not configured or key is invalid":"Waffo Pancake не настроен или ключ недействителен","Waffo Pancake is not fully configured. Complete the gateway binding in payment settings first.":"Waffo Pancake настроен не полностью. Сначала завершите привязку шлюза в настройках оплаты.","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI не поддерживает functionResponse.id. Включите, чтобы автоматически удалить это поле.","Vertex AI Key Format":"Формат ключа Vertex AI","Vertex AI Project ID":"ID проекта Vertex AI","e.g., my-project-123":"напр. my-project-123","Vertex AI service account key must be valid JSON":"Ключ сервисного аккаунта Vertex AI должен быть допустимым JSON","Video":"Видео","Video length in seconds":"Длительность видео в секундах","Video pricing must be converted manually.":"Тарифы видео необходимо преобразовать вручную.","Video Remix":"Ремикс видео","Vidu":"Vidu","Waffo payment is not enabled":"Оплата Waffo не включена","View":"Просмотр","View all currently available models":"Просмотреть все доступные модели","WaffoPancakeProductId is not configured for this plan":"Для этого плана не настроен WaffoPancakeProductId","View all top-up records, subscription plans, and user subscriptions.":"Просмотр всех пополнений, планов подписки и подписок пользователей.","View all users\' usage logs, statistics, and tasks.":"Просмотр журналов использования, статистики и задач всех пользователей.","View API keys and their settings without the full key.":"Просмотр API-ключей и их настроек без полного ключа.","View API token key":"Просмотр ключа токена API","View API token keys in batch":"Массовый просмотр ключей токенов API","View audit records from user and admin roles. Root records are always excluded.":"Просмотр записей аудита ролей user и admin. Записи роли root всегда исключены.","View balance, top-up records, subscriptions, and referral information.":"Просмотр баланса, истории пополнений, подписок и реферальной информации.","View changelog source":"Открыть исходный файл","View channel lists and details without secrets.":"Просмотр списков и сведений о каналах без секретов.","View channel secrets":"Просматривать секреты каналов","View complete API keys.":"Просмотр API-ключей целиком.","View deployments and price estimates.":"Просмотр развертываний и оценок стоимости.","View detailed information about this user including balance, usage statistics, and invitation details.":"Просмотр подробной информации об этом пользователе, включая баланс, статистику использования и данные приглашения.","View details":"Просмотреть детали","View document":"Просмотреть документ","View groups and prefill groups.":"Просмотр групп и групп автозаполнения.","View installed task plugins and their settings.":"Просмотр установленных плагинов задач и их настроек.","View issued reset credits, grant dates, and expiration.":"Показать выданные сбросы лимита, даты выдачи и истечения.","View key for API token “{{name}}”":"Просмотр ключа токена API «{{name}}»","View logs":"Просмотреть логи","View mapping":"Показать сопоставление","View mode":"Режим отображения","View model statistics and charts":"Просмотр статистики и графиков моделей","View models":"Показать модели","View models and vendors, and preview upstream sync.":"Просмотр моделей и поставщиков, предпросмотр синхронизации с источником.","View other accounts\' audit logs":"Просмотр аудита других аккаунтов","View Passkey, two-factor, and sign-in binding status.":"Просмотр состояния Passkey, двухфакторной аутентификации и привязок для входа.","View performance, system tasks, and system information.":"Просмотр производительности, системных задач и сведений о системе.","View Pricing":"Посмотреть цены","View pricing for {{model}}":"Цены для {{model}}","View redemption codes.":"Просмотр кодов активации.","View scope":"Область просмотра","View system settings, custom OAuth providers, and price sync sources.":"Просмотр системных настроек, пользовательских поставщиков OAuth и источников синхронизации цен.","View the complete details for this":"Просмотр полных деталей этой","Webhook URL cannot be empty":"Адрес Webhook не может быть пустым","View the complete details for this log entry":"Просмотр полной информации об этой записи журнала","View the complete details for this task":"Просмотреть полные сведения об этой задаче","View the complete error message and details":"Просмотр полного сообщения об ошибке и деталей","WeChat ID is empty!":"WeChat ID не указан!","View the complete prompt and its English translation":"Просмотр полного промпта и его перевода на английский","View the generated image":"Просмотр сгенерированного изображения","View users, their sign-in bindings, and permission settings.":"Просмотр пользователей, их привязок для входа и настроек прав.","View your profile, groups, and available models.":"Просмотр профиля, групп и доступных моделей.","View your topup transaction records and payment history":"Просмотреть записи о пополнении счета и историю платежей","View your usage logs, statistics, tasks, and audit logs.":"Просмотр ваших журналов использования, статистики, задач и журнала аудита.","Viewed channel key {{name}} (ID: {{id}})":"Просмотрен ключ канала {{name}} (ID: {{id}})","Violation Code":"Код нарушения","Violation deduction amount":"Сумма вычета за нарушение","Violation Fee":"Штраф за нарушение","Violation Marker":"Маркер нарушения","vip":"vip","VIP users with premium access":"VIP-пользователи с премиум-доступом","Visible":"Видима","Visible only to users with access to the model’s groups.":"Отображается только пользователям с доступом к группам модели.","Vision":"Зрение","Vision, image / video, document chat":"Зрение, изображения / видео, чат по документам","Visit Settings → General and adjust quota options...":"Перейдите в Настройки → Общие и настройте параметры квоты...","Visitors must authenticate before accessing the pricing directory.":"Посетители должны пройти аутентификацию перед доступом к каталогу цен.","Visitors must authenticate before accessing the rankings page.":"Посетители должны пройти аутентификацию перед доступом к странице рейтингов.","Visual":"Визуально","Visual edit":"Визуальное редактирование","Visual editor":"Визуальный редактор","Visual Editor":"Визуальный редактор","Visual indicator color for the API card":"Цвет визуального индикатора для карточки API","Visual Mode":"Визуальный режим","Visual Parameter Override":"Визуальное переопределение параметров","Visual prices use {{currency}} per declared unit; token prices are per 1M tokens. Raw expressions always use USD, with token terms divided by 1000000.":"В визуальном редакторе цены задаются в {{currency}} за указанную единицу, а для токенов — за 1 млн. Исходные выражения всегда используют USD; слагаемые для токенов делятся на 1000000.","vLLM":"vLLM","vLLM API key, or EMPTY if authentication is disabled":"API-ключ vLLM или EMPTY, если аутентификация отключена","vLLM server address, without /v1":"Адрес сервера vLLM без /v1","vLLM status":"Состояние vLLM","VolcEngine":"VolcEngine","vs. previous":"к предыдущему","Waffo":"Waffo","Waffo Aggregator Gateway":"Шлюз-агрегатор Waffo","Waffo Pancake Dashboard":"Waffo Pancake Dashboard","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Платёжный шлюз Waffo Pancake","Waffo Pancake product created":"Продукт Waffo Pancake создан","Waffo Pancake product creation failed":"Не удалось создать продукт Waffo Pancake","Waffo Pancake save failed":"Не удалось сохранить Waffo Pancake","Waffo Pancake settings saved":"Настройки Waffo Pancake сохранены","Waffo Payment":"Оплата Waffo","Waffo Payment Gateway":"Платёжный шлюз Waffo","Waffo Public Key (Production)":"Публичный ключ Waffo (Продакшн)","Waffo Public Key (Sandbox)":"Публичный ключ Waffo (Песочница)","Waiting":"Ожидание","Waiting for email...":"Ожидание письма...","Waiting for two comparable samples. Counter resets restart the sampling window.":"Ожидание двух сопоставимых выборок. Сброс счётчиков начинает новый период.","Waiting requests":"Запросы в очереди","Wallet":"Кошелек","Wallet First":"Кошелёк в приоритете","Wallet Management":"Управление кошельком","Wallet management and personal preferences.":"Управление кошельком и личные предпочтения.","Wallet Only":"Только кошелёк","Wallet pre-consume bypass threshold (USD)":"Порог кошелька без предсписания (USD)","Wallet quota limit exceeded":"Превышены границы квоты кошелька","Warning":"Предупреждение","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"Предупреждение: базовый URL не должен заканчиваться на /v1. Новый API обработает это автоматически. Это может привести к сбоям запросов.","Warning: Disabling 2FA will make your account less secure.":"Внимание: Отключение 2FA сделает вашу учетную запись менее безопасной.","Warning: This action is permanent and irreversible!":"Внимание: Это действие является постоянным и необратимым!","We apologize for the inconvenience.":"Приносим извинения за неудобства.","We could not load instances.":"Не удалось загрузить экземпляры.","We could not load system tasks.":"Не удалось загрузить системные задачи.","We could not load the setup status.":"Не удалось загрузить статус настройки.","We will prompt your device to confirm using biometrics or your hardware key.":"Мы предложим вашему устройству подтвердить действие с помощью биометрии или аппаратного ключа.","We\'ll be back online shortly.":"Мы скоро вернемся в сеть.","Web search":"Веб-поиск","Web Search":"Веб-поиск","Webhook Configuration:":"Конфигурация веб-хука:","Webhook public key (production)":"Публичный ключ webhook (production)","Webhook public key (production) is required":"Требуется публичный ключ webhook (production)","Webhook public key (sandbox)":"Публичный ключ webhook (sandbox)","When a channel is disabled or re-enabled automatically, or a test of all channels finishes":"Когда канал автоматически отключается или снова включается, а также по завершении проверки всех каналов","You can create at most {{count}} access tokens":"Можно создать не более {{count}} токенов доступа","Webhook public key (sandbox) is required":"Требуется публичный ключ webhook (sandbox)","Webhook secret":"Секрет веб-хука","Webhook Secret":"Секрет веб-хука","Webhook signing secret (leave blank unless updating)":"Секрет подписи веб-хука (оставьте пустым, если не обновляете)","You cannot grant one or more of these permissions.":"Вы не можете предоставить одно или несколько из этих разрешений.","Webhook URL":"Адрес Webhook","Webhook URL (Production):":"URL вебхука (Production):","Webhook URL (Test):":"URL вебхука (Test):","Webhook URL:":"URL веб-хука:","Website is under maintenance!":"Сайт находится на техническом обслуживании!","WeChat":"WeChat","WeChat login QR code":"QR-код для входа в WeChat","WeChat Pay":"WeChat Pay","WeChat sign in":"Вход через WeChat","Week":"Неделя","Weekday":"День недели","Weekly":"Еженедельно","Weekly token usage by model across the past few weeks":"Еженедельное использование токенов по моделям за последние недели","Weekly token usage by model across the past year":"Еженедельное использование токенов по моделям за последний год","Weekly token usage by model since launch":"Еженедельное использование токенов по моделям с момента запуска","Weekly Window":"Недельное окно","Weight":"Вес","Weighted by request count":"Взвешено по количеству запросов","Welcome back!":"Добро пожаловать обратно!","Welcome to our New API...":"Добро пожаловать в наш New API...","Well-Known URL":"Well-Known URL","Well-Known URL must start with http:// or https://":"Well-Known URL должен начинаться с http:// или https://","What do you want to change?":"Что вы хотите изменить?","What would you like to know?":"Что вы хотели бы узнать?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"Когда токен использует группу auto, система перебирает группы сверху вниз, пока не найдёт доступную.","When billed as {{group}}":"При тарификации по {{group}}","When conditions match":"Если условия выполнены","When conditions match → {{name}}":"Условия выполнены → {{name}}","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"При совпадении условий итоговая цена умножается на X. Несколько совпадений умножаются вместе; значения < 1 действуют как скидки.","When disabled, all uploaded custom plugins are ignored and every platform falls back to its built-in factory plugin.":"При отключении все загруженные пользовательские плагины игнорируются, а каждая платформа использует встроенный заводской плагин.","When disabled, the entire task plugin system stops serving, including factory and custom plugins.":"При отключении вся система плагинов задач перестаёт обслуживать запросы, включая заводские и пользовательские плагины.","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"Если включено, при сбое каналов в текущей группе система попробует каналы следующей группы по порядку.","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.":"Если включено, запись привязки сохраняется, даже когда привязанный канал отключён или больше не подходит для текущей группы/модели. Оставьте выключенным, чтобы удалять запись и выбирать другой канал.","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"При включении большие тела запросов временно сохраняются на диске, что значительно снижает использование памяти. Рекомендуется SSD.","When enabled, MjProxy callbacks are accepted (reveals server IP).":"При включении принимаются обратные вызовы MjProxy (раскрывает IP сервера).","When enabled, newly created tokens start in the first auto group.":"При включении вновь созданные токены начинаются в первой автогруппе.","When enabled, prompts are scanned before reaching upstream models.":"При включении запросы сканируются перед достижением вышестоящих моделей.","When enabled, the store field will be blocked":"Если включено, поле магазина будет заблокировано","When enabled, this API key can be used to check your account\'s remaining and used quota.":"Если включено, через этот API-ключ можно узнать оставшуюся и использованную квоту вашего аккаунта.","When enabled, users can pick this group when creating tokens.":"Если включено, пользователи могут выбрать эту группу при создании токенов.","When enabled, violation requests will incur additional charges.":"При включении за нарушения будут начисляться дополнительные расходы.","When enabled, zero-cost models also pre-consume quota before final settlement.":"При включении бесплатные модели также предварительно потребляют квоту до окончательного расчета.","When no conditions are set, the operation always executes.":"Без условий операция выполняется всегда.","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"Когда мониторинг включён и использование ресурсов превышает порог, новые Relay-запросы будут отклонены.","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"При работе в контейнерах или эфемерных средах убедитесь, что файл SQLite сопоставлен с постоянным хранилищем, чтобы избежать потери данных при перезапуске.","When the primary domain changes, the previous domain is automatically kept in the compatible domains list.":"При изменении основного домена прежний домен автоматически сохраняется в списке совместимых доменов.","Whitelist":"Белый список","Whitelist (Only allow listed domains)":"Белый список (Разрешить только указанные домены)","Whitelist (Only allow listed IPs)":"Белый список (Разрешить только указанные IP-адреса)","whsec_xxx":"whsec_xxx","Why only one store + product?":"Почему только один магазин и продукт?","Why set a website domain?":"Зачем указывать домен сайта?","Why set this?":"Зачем это настраивать?","Window:":"Окно:","Wire encoding for the embedding vectors":"Кодирование векторов в передаче","with conflicts":"с конфликтами","With linked models":"Со связанными моделями","with the API key from your token settings.":"на API-ключ из настроек токенов.","With these settings, automatic disabling is off for all channels.":"При этих настройках автоотключение не действует ни для одного канала.","Without additional conditions, only the type above is used for pruning.":"Без дополнительных условий для очистки используется только тип выше.","Without linked models":"Без связанных моделей","Worked example":"Разобранный пример","Worker Access Key":"Ключ доступа воркера","Worker instances do not run master-only background tasks.":"Экземпляры worker не выполняют фоновые задачи только для master.","Worker metrics":"Метрики рабочих процессов","Worker Proxy":"Прокси воркера","Worker URL":"URL воркера","Workspaces":"Рабочие пространства","Write value to the target field":"Записать значение в целевое поле","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"Xunfei","Year":"Год","years":"лет","Yes":"Да","You are about to delete {{count}} API key(s).":"Вы собираетесь удалить {{count}} API-ключ(а/ей).","You are offline. Updates will be checked when you reconnect.":"Нет подключения к сети. Проверка обновлений возобновится после подключения.","You are running the latest version ({{version}}).":"Вы используете последнюю версию ({{version}}).","You can add models manually or try fetching again.":"Добавьте модели вручную или повторите запрос.","You can close this tab once the binding completes or a success message appears in the original window.":"Вы можете закрыть эту вкладку, как только привязка завершится или в исходном окне появится сообщение об успехе.","You can create up to {{count}} access tokens":"Можно создать не более {{count}} токенов доступа","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"Вы можете вручную добавить их в \\"Пользовательские имена моделей\\", нажать \\"Заполнить\\", а затем отправить, или использовать операции ниже для автоматической обработки.","You can only check in once per day":"Вы можете заселяться только один раз в день","You can still edit non-sensitive operations fields such as models, groups, priority, and weight.":"Вы по-прежнему можете изменять нечувствительные операционные поля, такие как модели, группы, приоритет и вес.","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"Вы обязуетесь не использовать эту систему для совершения, содействия или косвенного совершения действий, нарушающих применимые законы и нормы, регуляторные требования, правила платформ, общественные интересы либо законные права и интересы третьих лиц.","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"Вы обязуетесь использовать вышестоящие API, аккаунты, ключи, квоты и сервисные возможности только в пределах законного разрешения, полученного от вышестоящих поставщиков услуг, поставщиков моделей или соответствующих правообладателей, и не осуществлять несанкционированную перепродажу, оборот, распространение или иную несоответствующую коммерциализацию.","You do not have permission to edit channels":"У вас нет прав на редактирование каналов","You do not have permission to edit sensitive channel settings.":"У вас нет права изменять чувствительные настройки каналов.","You do not have permission to perform this action.":"У вас нет прав на выполнение этого действия.","You don\'t have necessary permission":"У вас нет необходимых разрешений","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"Вы законно получили разрешение на подключенные API моделей, аккаунты, ключи и квоты.","You have unsaved changes":"У вас есть несохранённые изменения","You have unsaved changes. Are you sure you want to leave?":"У вас есть несохранённые изменения. Вы уверены, что хотите уйти?","You Pay":"Вы платите","You save":"Вы экономите","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"Вы понимаете и самостоятельно несете юридическую ответственность, возникающую из развертывания, эксплуатации и взимания платы.","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"Вы понимаете, что это напоминание о соответствии является только уведомлением о рисках и не является юридической консультацией, заключением проверки соответствия или гарантией законности использования этой системы; вам следует обратиться к профессиональным юридическим или комплаенс-консультантам с учетом вашей реальной бизнес-ситуации.","You will be redirected to Telegram to complete the binding process.":"Вы будете перенаправлены в Telegram для завершения процесса привязки.","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"Вы будете автоматически перенаправлены. Если через несколько секунд ничего не происходит, вы можете вернуться на предыдущую страницу.","Your account can edit sensitive channel settings.":"Ваша учетная запись может изменять чувствительные настройки каналов.","Your account cannot edit sensitive channel settings.":"Ваша учетная запись не может изменять чувствительные настройки каналов.","{{name}} called {{count}} times, cost {{quota}}":"{{name}}: вызовов {{count}}, стоимость {{quota}}","your AI integration?":"вашу интеграцию с ИИ?","Your Azure OpenAI endpoint URL":"Ваш URL конечной точки Azure OpenAI","Your Bot Name":"Имя бота","Your changes have not been saved.":"Изменения не сохранены.","Your Cloudflare Account ID":"Ваш ID аккаунта Cloudflare","Your Discord OAuth Client ID":"Ваш Discord OAuth Client ID","Your Discord OAuth Client Secret":"Ваш Discord OAuth Client Secret","{{provider}} login and registration has not been enabled by administrator":"Администратор не включил вход и регистрацию через {{provider}}","{{provider}} returned empty user info, please check settings":"{{provider}} вернул пустые данные пользователя, проверьте настройки","{{provider}} top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"Пополнение через {{provider}} выполнено, зачислено: {{quota}}, сумма оплаты: {{amount}}","Your GitHub OAuth Client ID":"Ваш ID клиента GitHub OAuth","Your GitHub OAuth Client Secret":"Ваш секрет клиента GitHub OAuth","Your identity has been verified. Continue to the provider to finish linking your account.":"Ваша личность подтверждена. Перейдите к провайдеру, чтобы завершить привязку аккаунта.","Your new backup codes are ready":"Ваши новые резервные коды готовы","Your Referral Link":"Ваша реферальная ссылка","Your setup guide is collapsed so usage stays in focus.":"Руководство свернуто, чтобы основные показатели оставались в фокусе.","Your Telegram Bot Token":"Ваш токен Telegram-бота","Your transaction history will appear here":"Ваша история транзакций появится здесь","Your Turnstile secret key":"Секретный ключ Turnstile","Your Turnstile site key":"Ключ сайта Turnstile","Zero retention":"Без хранения данных","Zhipu":"Zhipu","Zhipu GLM":"Zhipu GLM","Zhipu V4":"Zhipu V4","Zoom":"Zoom"}}'),U=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","{{count}} outside this view":"{{count}} kênh ngoài chế độ xem này","_copy":"_bản sao",",":", ",", and":", và",",and ":" và ","、":", ","? This action cannot be undone.":"? Hành động này không thể hoàn tác.",". Please fix the JSON before saving.":". Vui lòng sửa JSON trước khi lưu.",". This action cannot be undone.":". Hành động này không thể hoàn tác.","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"({{total}} tổng cộng, đã lược bỏ {{omit}})","(billed as vip itself, so base ratio of vip)":"(tính phí theo chính vip, nên dùng hệ số cơ bản của vip)","(falls back to billing as vip, so base ratio of vip)":"(quay về tính phí theo vip, nên dùng hệ số cơ bản của vip)","(hits the override rule above)":"(khớp quy tắc ghi đè ở trên)","(ID: {{id}})":"(ID: {{id}})","(instead of {{ratio}})":"(thay vì {{ratio}})","(Leave empty to dissolve tag)":"Để trống để xóa thẻ.","(matrix cell vip × premium is set)":"(ô ma trận vip × premium đã được đặt)","(no matrix cell, so base ratio of default; the vip 0.8 is irrelevant)":"(không có ô ma trận, nên dùng hệ số cơ bản của default; 0.8 của vip không liên quan)","(no override rule, so base ratio of default; the 0.8 of vip plays no part)":"(không có quy tắc ghi đè, nên dùng hệ số cơ bản của default; 0.8 của vip không tham gia)","(Optional: redirect model names)":"(Tùy chọn: chuyển hướng tên mô hình)","(Override all channels\' groups)":"(Ghi đè các nhóm của tất cả các kênh)","(Override all channels\' models)":"(Ghi đè các mô hình của tất cả các kênh)","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]":"[{\\"name\\":\\"Alipay\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{bytes}} bytes":"{{bytes}} byte","{{category}} Models":"Mô hình {{category}}","{{channels}} channels, {{tasks}} in-flight tasks":"{{channels}} kênh, {{tasks}} tác vụ đang chạy","{{completed}}/{{total}} completed":"Đã hoàn tất {{completed}}/{{total}}","{{condition}} ({{timezone}})":"{{condition}} ({{timezone}})","{{count}} / {{max}} groups selected":"Đã chọn {{count}} / {{max}} nhóm","{{count}} announcements will be removed from the list.":"{{count}} thông báo sẽ bị xóa khỏi danh sách.","{{count}} API shortcuts will be removed from the list.":"{{count}} lối tắt API sẽ bị xóa khỏi danh sách.","{{count}} available channels":"{{count}} kênh khả dụng","{{count}} channel(s) deleted":"Đã xóa {{count}} kênh","{{count}} channel(s) disabled":"Đã tắt {{count}} kênh","{{count}} channel(s) enabled":"Đã bật {{count}} kênh","{{count}} channel(s) failed to disable":"{{count}} kênh không thể tắt","{{count}} channel(s) failed to enable":"{{count}} kênh không thể bật","{{count}} combinations":"{{count}} tổ hợp","{{count}} days ago":"{{count}} ngày trước","{{count}} days remaining":"{{count}} days remaining","{{count}} disabled channel(s) deleted":"Đã xóa {{count}} kênh đã tắt","{{count}} enabled channels and {{tasks}} in-flight tasks still use this plugin.":"{{count}} kênh đang bật và {{tasks}} tác vụ đang chạy vẫn dùng plugin này.","{{count}} enabled groups":"{{count}} nhóm đang bật","{{count}} FAQ entries will be removed from the list.":"{{count}} mục FAQ sẽ bị xóa khỏi danh sách.","{{count}} hours ago":"{{count}} giờ trước","{{count}} incidents":"{{count}} sự cố","{{count}} incidents in the last 24 hours":"{{count}} sự cố trong 24 giờ qua","{{count}} incidents in the last 30 days":"{{count}} sự cố trong 30 ngày qua","{{count}} IP(s)":"{{count}} IP","{{count}} linked model records":"{{count}} bản ghi mô hình liên kết","{{count}} log entries removed.":"Đã xóa {{count}} mục nhật ký.","{{count}} minutes ago":"{{count}} phút trước","{{count}} model mapping(s)":"{{count}} ánh xạ mô hình","{{count}} model(s) redirected":"Đã chuyển hướng {{count}} mô hình","{{count}} model(s) skipped because another model derives the same request name":"Đã bỏ qua {{count}} mô hình vì trùng tên yêu cầu với mô hình khác","{{count}} model(s) unchanged by the rule were skipped":"Đã bỏ qua {{count}} mô hình không thay đổi theo quy tắc","{{count}} models":"{{count}} mô hình","{{count}} months ago":"{{count}} tháng trước","{{count}} override":"{{count}} ghi đè","{{count}} permissions":"{{count}} quyền","{{count}} permissions are no longer available":"{{count}} quyền không còn trong danh mục quyền hiện tại","{{count}} providers":"{{count}} nhà cung cấp","{{count}} records selected. Bulk actions are available.":"Đã chọn {{count}} bản ghi. Có thể thực hiện thao tác hàng loạt.","{{count}} selected":"Đã chọn {{count}}","{{count}} selected models":"Đã chọn {{count}} mô hình","{{count}} selected outside the current filters":"{{count}} mô hình đã chọn nằm ngoài bộ lọc hiện tại","{{count}} selected targets available for bulk copy.":"Có {{count}} mục tiêu đã chọn để sao chép hàng loạt.","{{count}} tiers":"{{count}} bậc","{{count}} Uptime Kuma groups will be removed from the list.":"{{count}} nhóm Uptime Kuma sẽ bị xóa khỏi danh sách.","{{count}} vendors":"{{count}} nhà cung cấp","{{count}} weeks ago":"{{count}} tuần trước","{{created}} models created, {{updated}} models updated, {{vendors}} vendors created.":"Đã tạo {{created}} mô hình, cập nhật {{updated}} mô hình và tạo {{vendors}} nhà cung cấp.","{{currency}} / {{unit}} tokens":"{{currency}} / {{unit}} token","{{currency}} price per 1M input tokens.":"Giá bằng {{currency}} cho mỗi 1 triệu token đầu vào.","{{currency}} price per 1M tokens.":"Giá bằng {{currency}} cho mỗi 1 triệu token.","{{field}} updated to {{value}}":"{{field}} đã cập nhật thành {{value}}","A channel test task is already running or queued. Cannot start this manual task":"Đã có tác vụ kiểm tra kênh đang chạy hoặc đang chờ. Không thể bắt đầu tác vụ thủ công này","a dashboard login session is required":"cần có phiên đăng nhập bảng điều khiển","{{field}} updated to {{value}} for tag: {{tag}}":"{{field}} đã cập nhật thành {{value}} cho nhãn: {{tag}}","{{first}} and {{second}}":"{{first}} và {{second}}","A model update task is already running or queued. Cannot start this manual task":"Đã có tác vụ cập nhật mô hình đang chạy hoặc đang chờ. Không thể bắt đầu tác vụ thủ công này","{{first}} or {{second}}":"{{first}} hoặc {{second}}","A repair task is already running. Please try again later":"Đã có tác vụ sửa chữa đang chạy. Vui lòng thử lại sau","{{key}} · from {{source}}":"{{key}} · nguồn {{source}}","{{key}} · version {{version}} · from {{source}}":"{{key}} · phiên bản {{version}} · từ {{source}}","A token can select at most {{max}} Auto groups":"Mỗi token chỉ được chọn tối đa {{max}} nhóm Auto","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"Không hỗ trợ {{modality}}","{{modality}} supported":"Hỗ trợ {{modality}}","{{n}} model(s) selected":"Đã chọn {{n}} model","{{operation}} (ID: {{id}})":"{{operation}} (ID: {{id}})","{{percent}}% OFF":"Giảm {{percent}}%","{{processed}} of {{total}} log entries processed.":"Đã xử lý {{processed}}/{{total}} mục nhật ký.","{{protocol}} auth name":"Tên xác thực {{protocol}}","{{protocol}} auth value":"Giá trị xác thực {{protocol}}","{{protocol}} authentication":"Xác thực {{protocol}}","{{selected}} of {{total}} changed fields selected":"Đã chọn {{selected}} / {{total}} trường thay đổi","{{start}}–{{end}}":"{{start}}–{{end}}","{{success}} succeeded, {{failed}} failed":"{{success}} thành công, {{failed}} thất bại","{{target}} test failed":"Kiểm tra {{target}} thất bại","{{target}} test succeeded":"Kiểm tra {{target}} thành công","{{total}} models · {{syncable}} syncable · {{skipped}} skipped this time":"{{total}} mô hình · {{syncable}} có thể đồng bộ · {{skipped}} bỏ qua lần này","{{unit}} tokens":"{{unit}} token","{{value}} tokens/s":"{{value}} token/giây","{{value}}ms":"{{value}} ms","{{value}}s":"{{value}} s","@lobehub/icons key":"@lobehub/icons khóa","@lobehub/icons key name":"@lobehub/icons tên khóa","/status/":"/status/","/your/endpoint":"/điểm cuối của bạn","#1 App":"#1 Ứng dụng","#1 by usage":"Hạng 1 theo mức sử dụng","Access token expiry must be at least one hour from now.":"Thời hạn của token truy cập phải cách hiện tại ít nhất một giờ.","Access token name must be 1 to 64 characters.":"Tên token truy cập phải có từ 1 đến 64 ký tự.","access token not found":"Không tìm thấy token truy cập","#1 Model":"#1 Mô hình","% off":"% giảm giá","`, `-nothinking`, and effort suffixes such as `-high` while routing to the correct Gemini variant. When off, model names are sent upstream unchanged.":"`, `-nothinking` và các hậu tố mức suy luận như `-high` khi định tuyến đến biến thể Gemini đúng. Khi tắt, tên mô hình được gửi nguyên vẹn lên upstream.","© 2025 Your Company. All rights reserved.":"© 2025 Công ty của bạn. Mọi quyền được bảo lưu.","+{{count}} more":"thêm {{count}} mục","| Based on":"| Dựa trên","0 means data is kept permanently":"0 nghĩa là dữ liệu được giữ vĩnh viễn","0 means unlimited":"0 có nghĩa là không giới hạn","1 Day":"1 ngày","1 day ago":"1 ngày trước","1 hour":"1 giờ","1 Hour":"1 giờ","1 hour ago":"1 giờ trước","1 minute":"1 phút","1 minute ago":"1 phút trước","1 Month":"1 tháng","1 month ago":"1 tháng trước","1 week ago":"1 tuần trước","1 year":"1 năm","1 year ago":"1 năm trước","1. Create an application in your Gotify server":"1. Tạo một ứng dụng trong máy chủ Gotify của bạn","1. Select models users call":"1. Chọn mô hình người dùng gọi","1. Select upstream models":"1. Chọn mô hình phía nhà cung cấp","10 / page":"10 / trang","100 / page":"100 / trang","14 Days":"14 ngày","Action {{action}}":"Thao tác {{action}}","180 days":"180 ngày","192.168.1.1 10.0.0.0/8":"192.168.1.1 10.0.0.0/8","1M":"1M","1M token":"1M token","1W":"1W","2. Copy the application token":"2. Sao chép token ứng dụng","2. Set names users call":"2. Đặt tên để người dùng gọi","2. Set upstream model names":"2. Đặt tên gửi lên nhà cung cấp","20 / page":"20 / trang","24 Hours":"24 giờ","24 hours ago":"24 giờ trước","29 Days":"29 ngày","2xx, 504 and 524 are always excluded.":"2xx, 504 và 524 luôn bị loại trừ.","3. Enter your Gotify server URL and token above":"3. Nhập URL máy chủ Gotify và mã thông báo của bạn ở trên","3. Review mappings":"3. Kiểm tra ánh xạ","30 days":"30 ngày","30 Days":"30 ngày","30 days ago":"30 ngày trước","30d change":"Thay đổi 30 ngày","5 minutes":"5 phút","5-Hour Window":"Cửa sổ 5 giờ","50 / page":"50 / trang","7 Days":"7 ngày","7 days ago":"7 ngày trước","80,443,8080":"80,443,8080","90 days":"90 ngày","A billing multiplier. Lower ratios mean lower API call costs.":"Hệ số tính phí. Tỷ lệ càng thấp thì chi phí gọi API càng thấp.","A focused home for keys, balance, routing, and service health.":"Trang tổng quan tập trung cho khóa, số dư, định tuyến và trạng thái dịch vụ.","A matching hash confirms the published file, not the safety of its code.":"Mã băm khớp chỉ xác nhận tệp đúng với bản phát hành, không đảm bảo mã an toàn.","A Passkey created for www.example.com cannot be used on example.com. Keep the old website available so users can still verify there.":"Khóa truy cập tạo cho www.example.com không thể dùng trên example.com. Hãy duy trì trang web cũ để người dùng vẫn có thể xác minh tại đó.","A security operation is already in progress.":"Một thao tác bảo mật đang được thực hiện.","A selected model no longer exists. Reload the model list.":"Một mô hình đã chọn không còn tồn tại. Hãy tải lại danh sách.","A token that never expires stays valid until you revoke it. Set an expiration date when possible.":"Token không hết hạn sẽ còn hiệu lực cho đến khi bạn thu hồi. Nên đặt thời hạn khi có thể.","A vendor with this name already exists.":"Nhà cung cấp có tên này đã tồn tại.","About":"Giới thiệu","About {{days}} days left":"Còn khoảng {{days}} ngày","About pricing currency":"Về tiền tệ định giá","Accept Unpriced Models":"Chấp nhận các Mô hình chưa định giá","Accept upstream certificates that fail validation, such as self-signed ones. Only enable for trusted internal upstreams.":"Chấp nhận chứng chỉ upstream không vượt qua xác minh, chẳng hạn chứng chỉ tự ký. Chỉ bật cho upstream nội bộ đáng tin cậy.","Accepts a JSON array of model identifiers that support the Imagine API.":"Chấp nhận một mảng JSON gồm các mã định danh mô hình hỗ trợ API Imagine.","Accepts comma-separated status codes and inclusive ranges.":"Chấp nhận mã trạng thái phân cách bằng dấu phẩy và phạm vi bao gồm.","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"Truy cập số lượng lớn các mô hình thông qua giao thức API chuẩn hóa và thống nhất. Thúc đẩy các ứng dụng AI, quản lý tài sản kỹ thuật số và kết nối tương lai.","Access Baidu Qianfan models through the legacy API":"Truy cập mô hình Baidu Qianfan qua API cũ","Access Baidu Qianfan models through the V2 API":"Truy cập mô hình Baidu Qianfan qua API V2","Access Codex using ChatGPT subscription credentials":"Truy cập Codex bằng thông tin xác thực gói đăng ký ChatGPT","Access Denied Message":"Thông báo từ chối truy cập","Access Forbidden":"Truy cập bị cấm","Access hosted model predictions through Replicate":"Truy cập dịch vụ dự đoán của mô hình được lưu trữ trên Replicate","Access model services through MokaAI":"Truy cập dịch vụ mô hình qua MokaAI","Access model services through the OhMyGPT gateway":"Truy cập dịch vụ mô hình qua cổng OhMyGPT","Access models from multiple providers through OpenRouter":"Truy cập mô hình của nhiều nhà cung cấp qua OpenRouter","Access models through Amazon Bedrock":"Truy cập các mô hình qua Amazon Bedrock","Access models through Cloudflare Workers AI":"Truy cập các mô hình qua Cloudflare Workers AI","Access models through Google Cloud Vertex AI":"Truy cập các mô hình qua Google Cloud Vertex AI","Access Policy (JSON)":"Chính sách truy cập (JSON)","Access previous conversations and start new ones.":"Truy cập các cuộc trò chuyện trước đó và bắt đầu các cuộc trò chuyện mới.","Access records":"Lịch sử truy cập","Access Token":"Token truy cập","Access token expired":"Token truy cập đã hết hạn","Access token revoked":"Đã thu hồi token truy cập","Access tokens":"Token truy cập","Access tokens cannot use this feature":"Token truy cập không thể dùng tính năng này","Access Zhipu models through the legacy API":"Truy cập mô hình Zhipu qua API cũ","Access Zhipu models through the V4 API":"Truy cập mô hình Zhipu qua API V4","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Actions":"Thao tác tài khoản","Account binding":"Liên kết tài khoản","Account Binding Management":"Quản lý liên kết tài khoản","Account binding request":"Yêu cầu liên kết tài khoản","Account Bindings":"Liên kết tài khoản","Account bindings have changed. Start this operation again.":"Liên kết tài khoản đã thay đổi. Vui lòng thực hiện lại.","Account created! Please sign in":"Tài khoản đã được tạo! Vui lòng đăng nhập","Account deleted successfully":"Tài khoản đã được xóa thành công","Account deletion":"Xóa tài khoản","Account ID":"ID tài khoản","Account ID *":"ID tài khoản *","Account Info":"Thông tin tài khoản","Account password change":"Thay đổi mật khẩu tài khoản","Account security":"Bảo mật tài khoản","Account unlinking":"Hủy liên kết tài khoản","Account used when authenticating with the SMTP server":"Tài khoản được sử dụng khi xác thực với máy chủ SMTP","acknowledge the related legal risks":"thừa nhận các rủi ro pháp lý liên quan","Across all groups":"Trên mọi nhóm","Action":"Hành động","Action confirmation":"Xác nhận hành động","Actions":"Hành động","Actions for {{name}}":"Thao tác cho {{name}}","Activate / Roll back":"Kích hoạt / Khôi phục","Activate now":"Kích hoạt ngay","Activating...":"Đang kích hoạt...","active":"hoạt động","Active":"Hoạt động","Active apps":"Ứng dụng đang hoạt động","Active Cache Count":"Số bộ nhớ đệm hoạt động","Active Files":"Tệp đang hoạt động","Active models":"Mô hình đang hoạt động","Active Tasks":"Tác vụ đang hoạt động","active users":"Người dùng tích cực","Active version":"Phiên bản đang hoạt động","Actively check all channels":"Chủ động kiểm tra tất cả kênh","Actively check auto-disable-enabled channels":"Chủ động kiểm tra kênh đã bật tự động vô hiệu hóa","Actual Amount":"Số tiền thực tế","Actual Model":"Mô hình thực tế","Actual Model:":"Mô hình thực tế:","Adapt `-thinking`, `-nothinking`, and effort suffixes such as `-high` to Anthropic native thinking behavior while keeping billing predictable. When off, model names are sent upstream unchanged.":"Điều chỉnh các yêu cầu có hậu tố `-thinking`, `-nothinking` và các hậu tố mức suy luận như `-high` sang hành vi suy luận gốc của Anthropic trong khi vẫn giữ tính phí dễ dự đoán. Khi tắt, tên mô hình được gửi nguyên vẹn lên upstream.","Add":"Add","Add \\"{{value}}\\"":"Thêm \\"{{value}}\\"","Add {{added}} models and remove {{removed}} models":"Thêm {{added}} mô hình và xóa {{removed}} mô hình","Add {{count}} mapping(s)":"Thêm {{count}} ánh xạ","Add {{title}}":"Thêm {{title}}","Add a group identifier to the auto assignment list.":"Thêm một mã định danh nhóm vào danh sách phân công tự động.","Add a new API key by providing necessary info.":"Thêm khóa API mới bằng cách cung cấp thông tin cần thiết.","Add a new channel by providing the necessary information.":"Thêm kênh mới bằng cách cung cấp thông tin cần thiết.","Add a new model to the system by providing the necessary information.":"Thêm một mô hình mới vào hệ thống bằng cách cung cấp thông tin cần thiết.","Add a new user by providing necessary info.":"Thêm người dùng mới bằng cách cung cấp thông tin cần thiết.","Add a new vendor to the system":"Thêm một nhà cung cấp mới vào hệ thống","Add a vendor or adjust your search.":"Thêm nhà cung cấp hoặc điều chỉnh tìm kiếm.","Add an extra layer of security to your account":"Thêm một lớp bảo mật bổ sung cho tài khoản của bạn","Add an index URL to browse installable plugins.":"Thêm một URL chỉ mục để xem các plugin có thể cài đặt.","Add and submit":"Thêm và gửi","Add Announcement":"Thêm Thông báo","Add another login method before unlinking this account.":"Thêm phương thức đăng nhập khác trước khi hủy liên kết tài khoản này.","Add API":"Thêm API","Add API Shortcut":"Thêm lối tắt API","Add at least one condition to this group.":"Thêm ít nhất một điều kiện vào nhóm này.","Add auto group":"Thêm nhóm tự động","Add Auto group":"Thêm nhóm Auto","Adjusted by the channel adaptor":"Điều chỉnh bởi bộ chuyển đổi kênh","Add chat preset":"Thêm mẫu trò chuyện","Add condition":"Thêm điều kiện","Add Condition":"Thêm điều kiện","Add condition group":"Thêm nhóm điều kiện","Add credits":"Thêm tín dụng","Add custom model \\"{{value}}\\"":"Thêm mô hình tùy chỉnh \\"{{value}}\\"","Add discount tier":"Thêm bậc giảm giá","Add each model or tag you want to include.":"Thêm mỗi mô hình hoặc thẻ bạn muốn đưa vào.","Add FAQ":"Thêm FAQ","Add from available models...":"Thêm từ các mô hình có sẵn...","Add Funds":"Thêm Tiền","Add group":"Thêm nhóm","Administrator completed the order, amount added: {{quota}}, payment amount: {{amount}}":"Quản trị viên đã hoàn tất đơn hàng, số tiền đã nạp: {{quota}}, số tiền thanh toán: {{amount}}","Administrator reset the quota of subscription plan {{plan_title}} (ID: {{plan_id}})":"Quản trị viên đã đặt lại hạn mức của gói đăng ký {{plan_title}} (ID: {{plan_id}})","Add Group":"Thêm Nhóm","Add group rate limit":"Thêm giới hạn tốc độ nhóm","Add group rules":"Thêm quy tắc nhóm","Add groups in the order they should be tried.":"Thêm nhóm theo thứ tự cần thử.","Add management route":"Thêm route quản lý","Add Mapping":"Thêm ánh xạ","Add metadata":"Bổ sung","Add metadata to all selected models first.":"Hãy bổ sung siêu dữ liệu cho tất cả mô hình đã chọn trước.","Add method":"Thêm phương thức","Add missing models":"Thêm mô hình còn thiếu","Add Mode":"Thêm Chế độ","Add model":"Thêm mô hình","Add Model":"Thêm Mô hình","Add model pricing":"Thêm giá mô hình","Add Models":"Thêm mô hình","Add new amount":"Thêm số tiền mới","Add new redemption code(s) by providing necessary info.":"Thêm mã đổi thưởng mới bằng cách cung cấp thông tin cần thiết.","Add OAuth Provider":"Thêm nhà cung cấp OAuth","Add param/header":"Thêm tham số/header","Add payment method":"Thêm phương thức thanh toán","Add photos or files":"Thêm ảnh hoặc tệp","Add prefix":"Thêm tiền tố","Add pricing branch":"Thêm nhánh tính phí","Add product":"Thêm sản phẩm","Add Provider":"Thêm nhà cung cấp","Add Quota":"Thêm Hạn mức","Add ratio override":"Thêm ghi đè tỷ lệ","Add route":"Thêm route","Add routes individually or replace them from a template.":"Thêm từng tuyến hoặc thay thế bằng một mẫu.","Add Row":"Thêm Hàng","Add rule":"Thêm quy tắc","Add Rule":"Thêm quy tắc","Add rule group":"Thêm nhóm quy tắc","Add rules for a user group":"Thêm quy tắc cho nhóm người dùng","Add selectable group":"Thêm nhóm có thể chọn","Add source":"Thêm nguồn","Add split":"Thêm nhánh","Add subscription":"Thêm đăng ký","Add suffix":"Thêm hậu tố","Add tags...":"Thêm thẻ...","Add template":"Thêm mẫu","Add tier":"Thêm bậc","Add time condition":"Thêm điều kiện thời gian","Add time rule group":"Thêm nhóm quy tắc theo thời gian","Add to group {{path}}":"Thêm vào nhóm {{path}}","Add Uptime Kuma Group":"Thêm Nhóm Uptime Kuma","Add User":"Thêm người dùng","Add user group":"Thêm nhóm người dùng","Add Vendor":"Thêm nhà cung cấp","Add your API keys, set up channels and configure access permissions":"Thêm khóa API, thiết lập kênh và cấu hình quyền truy cập","Added":"Đã thêm","Added {{count}} model(s)":"Đã thêm {{count}} mô hình","Added {{count}} models from \\"{{name}}\\"":"Đã thêm {{count}} mô hình từ “{{name}}”","Added models":"Mô hình đã thêm","Added once per request. Set to 0 for usage-only billing.":"Cộng một lần cho mỗi yêu cầu. Nhập 0 để chỉ tính phí theo mức sử dụng.","Added successfully":"Thêm thành công","Added to the usage cost. Set to 0 for no additional charge.":"Khoản cộng thêm vào chi phí sử dụng. Nhập 0 nếu không thu thêm.","Additional charge":"Phí bổ sung","Additional Conditions":"Điều kiện bổ sung","Additional information":"Thông tin bổ sung","Additional Information":"Thông tin bổ sung","Additional Limit":"Hạn mức bổ sung","Additional Limits":"Các hạn mức bổ sung","Additional metered capability":"Tính năng tính phí theo mức dùng bổ sung","Additional request domains":"Miền truy cập bổ sung","Additional verification required":"Cần xác minh bổ sung","Adjust filters, then search to refresh the logs.":"Điều chỉnh bộ lọc, sau đó tìm kiếm để làm mới nhật ký.","Adjust Quota":"Điều chỉnh hạn mức","Adjust quota for user “{{name}}”":"Điều chỉnh hạn mức cho người dùng “{{name}}”","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"Điều chỉnh định dạng phản hồi, hành vi prompt, proxy và tự động hóa upstream.","Adjust the appearance and layout to suit your preferences.":"Điều chỉnh giao diện và bố cục để phù hợp với sở thích của bạn.","Adjust user quota":"Điều chỉnh hạn mức người dùng","Adjustment mode":"Cách điều chỉnh","Admin":"Quản trị viên","Admin access required":"Yêu cầu quyền truy cập Admin","Admin area":"Khu vực quản trị","Admin Channel Permissions":"Quyền kênh của quản trị viên","Admin notes (only visible to admins)":"Ghi chú của quản trị viên (chỉ hiển thị với quản trị viên)","Admin Only":"Chỉ dành cho quản trị viên","Admin Permissions":"Quyền quản trị viên","Admin permissions updated":"Đã cập nhật quyền quản trị viên","Administer user accounts and roles.":"Quản lý tài khoản người dùng và vai trò.","Administration":"Quản trị","Administrator account":"Tài khoản quản trị viên","Administrator username":"Tên người dùng quản trị viên","Advance next reset time":"Dời thời gian đặt lại tiếp theo","Advanced":"Nâng cao","Advanced Configuration":"Cấu hình nâng cao","Advanced Custom":"Tùy chỉnh nâng cao","Advanced custom configuration is required":"Bắt buộc cấu hình tùy chỉnh nâng cao","Advanced custom configuration requires at least one route":"Cấu hình tùy chỉnh nâng cao cần ít nhất một route","Advanced Custom Routes":"Route tùy chỉnh nâng cao","Advanced options":"Tùy chọn nâng cao","Advanced Options":"Tùy chọn nâng cao","Advanced platform configuration.":"Cấu hình nền tảng nâng cao.","Advanced Settings":"Cài đặt nâng cao","Advanced text editing":"Chỉnh sửa văn bản nâng cao","Aesthetic style":"Phong cách","Affected windows:":"Cửa sổ bị ảnh hưởng:","Affinity cache settings":"Cài đặt bộ nhớ đệm phiên","After clicking the button, you\'ll be asked to authorize the bot":"Sau khi nhấp vào nút, bạn sẽ được yêu cầu ủy quyền cho bot","After conversion":"Sau khi chuyển đổi","After conversion, expression reservation and rounding rules apply. Effective unit prices are preserved; individual rounded charges may differ.":"Sau khi chuyển đổi, áp dụng quy tắc tạm trừ và làm tròn của biểu thức. Giữ nguyên đơn giá hiện hành nhưng số tiền làm tròn của từng lần tính phí có thể khác.","Allow users to export logs":"Cho phép người dùng xuất nhật ký","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"Sau khi vô hiệu hóa, sẽ không hiển thị cho người dùng nữa, nhưng đơn hàng lịch sử không bị ảnh hưởng. Tiếp tục?","After enabling, client request headers are forwarded to the upstream, excluding standard authentication headers, cookies and transport headers:":"Khi bật, tiêu đề yêu cầu của ứng dụng khách được chuyển đến thượng nguồn, ngoại trừ tiêu đề xác thực tiêu chuẩn, Cookie và tiêu đề điều khiển truyền tải:","After enabling, the original request body is forwarded to the upstream without gateway rewriting:":"Khi bật, nội dung yêu cầu gốc được chuyển đến thượng nguồn mà không bị cổng viết lại:","After enabling, the plan will be shown to users. Continue?":"Sau khi kích hoạt, gói sẽ được hiển thị cho người dùng. Tiếp tục?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"Sau khi vô hiệu hóa, đăng ký này sẽ bị hủy kích hoạt ngay lập tức. Hồ sơ lịch sử không bị ảnh hưởng. Tiếp tục?","Agent ID":"Mã đại lý","Agent ID *":"Mã đại lý *","Aggregate tokens delivered across the platform":"Tổng số token được phục vụ trên toàn hệ thống","Aggregate traffic across every category":"Tổng hợp lưu lượng tất cả danh mục","Aggregated across enabled groups":"Tổng hợp các nhóm đang bật","Aggregated across the apps below":"Tổng hợp các ứng dụng bên dưới","Aggregated traffic by upstream model provider":"Lưu lượng tổng hợp theo nhà cung cấp mô hình","Aggregated usage metrics and trend charts.":"Chỉ số sử dụng tổng hợp và biểu đồ xu hướng.","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"tổng hợp hơn 50 nhà cung cấp AI sau một API thống nhất. Quản lý truy cập, theo dõi chi phí và mở rộng dễ dàng.","Aggregation bucket":"Khoảng tổng hợp","AGPL v3.0 License":"Giấy phép AGPL v3.0","AI Application Infrastructure Foundation":"Nền tảng hạ tầng ứng dụng AI","Already checked in today":"Hôm nay bạn đã điểm danh","AI model testing environment":"Môi trường thử nghiệm mô hình AI","AI models":"mô hình AI","AI models supported":"Các mô hình AI được hỗ trợ","AI Proxy":"AI Proxy","AI Proxy Library":"Thư viện AI Proxy","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"Chế độ AK/SK: sử dụng AccessKey|SecretAccessKey|Region","Ali":"Alibaba Bailian","Alipay":"Alipay","All":"All","All API tokens":"Tất cả khóa API","All categories":"Tất cả danh mục","All combinations are priced at zero. Matching requests will be billed as free.":"Tất cả tổ hợp đều có giá bằng 0. Các yêu cầu khớp sẽ không phát sinh phí.","All conditions":"Thỏa mãn tất cả","All conditions must match before this tier is used.":"Tất cả điều kiện phải khớp trước khi tầng này được sử dụng.","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"Tất cả các chỉnh sửa đều là thao tác ghi đè. Để trống các trường để giữ nguyên giá trị hiện tại.","All files exceed the maximum size.":"Tất cả các tệp vượt quá kích thước tối đa.","All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.":"Tất cả tên nhóm được quản lý tại đây. Hệ số áp dụng khi cuộc gọi được tính phí theo nhóm này; hệ số nạp tiền áp dụng cho người dùng thuộc nhóm này.","All Groups":"Tất cả các nhóm","All groups share one pool of names managed in the pricing group table, but a name plays two different roles: as a user group it describes the user, as a token group it decides routing and billing.":"Tất cả các nhóm dùng chung một bộ tên được quản lý trong bảng nhóm định giá, nhưng một tên có hai vai trò khác nhau: là nhóm người dùng thì mô tả người dùng, là nhóm token thì quyết định định tuyến và tính phí.","All models":"Tất cả mô hình","Announcement #{{index}} content cannot exceed 500 characters":"Nội dung của thông báo #{{index}} không được vượt quá 500 ký tự","Announcement #{{index}} has an invalid publish date format":"Thông báo #{{index}} có định dạng ngày đăng không hợp lệ","Announcement #{{index}} has an invalid type value":"Thông báo #{{index}} có giá trị loại không hợp lệ","Announcement #{{index}} is missing the content field":"Thông báo #{{index}} thiếu trường nội dung","Announcement #{{index}} is missing the publish date field":"Thông báo #{{index}} thiếu trường ngày đăng","Announcement #{{index}} note cannot exceed 100 characters":"Ghi chú của thông báo #{{index}} không được vượt quá 100 ký tự","Announcement #{{index}} publish date cannot be empty":"Ngày đăng của thông báo #{{index}} không được để trống","All Models":"Tất cả các mẫu","All models in use are properly configured.":"Tất cả các mô hình đang được sử dụng đều được cấu hình đúng cách.","All Must Match (AND)":"Tất cả phải khớp (AND)","All nodes":"Tất cả nút","All playground messages saved in this browser will be removed. This cannot be undone.":"Tất cả tin nhắn Playground đã lưu trong trình duyệt này sẽ bị xóa. Không thể hoàn tác hành động này.","All requests":"Tất cả yêu cầu","All requests must include":"Mọi yêu cầu phải có header","Announcements cannot exceed 100 entries":"Thông báo không được vượt quá 100 mục","All results":"Tất cả kết quả","Another log export is running. Try again after it finishes.":"Đang có một lượt xuất nhật ký khác. Hãy thử lại sau khi lượt đó hoàn tất.","All routes":"Tất cả tuyến","All Status":"Tất cả trạng thái","All Sync Status":"Tất cả Trạng thái Đồng bộ","All systems operational":"Tất cả hệ thống hoạt động bình thường","All Tags":"Tất cả Thẻ","All tokens":"Tất cả token","All Types":"All types","All upstream data is trusted":"Tất cả dữ liệu thượng nguồn đều được tin cậy","All users":"Tất cả người dùng","All Vendors":"Tất cả Nhà cung cấp","All-time":"Mọi thời điểm","Allocated Memory":"Bộ nhớ đã cấp phát","Allow accountFilter parameter":"Cho phép tham số accountFilter","Allow balance redemption":"Cho phép thanh toán bằng số dư","Allow Claude beta query passthrough":"Cho phép chuyển tiếp truy vấn beta Claude","Allow clients to query configured prices via `/api/ratio`.":"Cho phép ứng dụng khách truy vấn giá đã cấu hình qua `/api/ratio`.","Allow clients to query configured ratios via `/api/ratio`.":"Cho phép khách hàng truy vấn các tỷ lệ đã cấu hình thông qua `/api/ratio`.","API info #{{index}} contains disallowed content":"Thông tin API #{{index}} chứa nội dung không được phép","API info #{{index}} description cannot exceed 200 characters":"Mô tả của thông tin API #{{index}} không được vượt quá 200 ký tự","API info #{{index}} has a URL that cannot be parsed: {{error}}":"Không thể phân tích URL của thông tin API #{{index}}: {{error}}","API info #{{index}} has an invalid color value":"Thông tin API #{{index}} có giá trị màu không hợp lệ","API info #{{index}} has an invalid URL format":"Thông tin API #{{index}} có định dạng URL không hợp lệ","API info #{{index}} is missing the color field":"Thông tin API #{{index}} thiếu trường màu","API info #{{index}} is missing the description field":"Thông tin API #{{index}} thiếu trường mô tả","API info #{{index}} is missing the route description field":"Thông tin API #{{index}} thiếu trường mô tả tuyến","API info #{{index}} is missing the URL field":"Thông tin API #{{index}} thiếu trường URL","API info #{{index}} route description cannot exceed 100 characters":"Mô tả tuyến của thông tin API #{{index}} không được vượt quá 100 ký tự","API info #{{index}} URL cannot exceed 500 characters":"URL của thông tin API #{{index}} không được vượt quá 500 ký tự","Allow HTTP image requests":"Cho phép yêu cầu hình ảnh HTTP","API info cannot exceed 50 entries":"Thông tin API không được vượt quá 50 mục","Allow include usage obfuscation passthrough":"Cho phép chuyển tiếp che giấu sử dụng","Allow inference geography passthrough":"Cho phép chuyển tiếp vị trí địa lý suy luận","Allow inference_geo passthrough":"Cho phép truyền inference_geo","Allow Insecure Origins":"Cho phép Nguồn gốc Không an toàn","Allow listing when a channel is available and the user has group access. This does not change API access.":"Cho phép hiển thị khi có kênh khả dụng và quyền truy cập nhóm. Không thay đổi quyền truy cập API.","Allow metadata sync":"Cho phép đồng bộ siêu dữ liệu","Allow new users to register":"Cho phép người dùng mới đăng ký","Allow Private IPs":"Cho phép IP riêng","Allow querying user quota":"Cho phép tra cứu hạn mức người dùng","Allow registration with password":"Cho phép đăng ký bằng mật khẩu","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"Cho phép các yêu cầu đến các dải IP riêng (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"Cho phép thử lại","Allow safety_identifier passthrough":"Cho phép chuyển tiếp safety_identifier","Allow self-signed or hostname-mismatched SMTP certificates":"Cho phép chứng chỉ SMTP tự ký hoặc không khớp tên máy chủ","Allow service_tier passthrough":"Cho phép chuyển tiếp service_tier","Allow speed passthrough":"Cho phép truyền speed","Allow updates":"Cho phép cập nhật","Allow upstream callbacks":"Cho phép callback upstream","Allow users to check in daily for random quota rewards":"Cho phép người dùng điểm danh hàng ngày để nhận phần thưởng hạn ngạch ngẫu nhiên","Allow users to enter promo codes":"Cho phép người dùng nhập mã khuyến mãi","Allow users to log in with password":"Cho phép người dùng đăng nhập bằng mật khẩu","Allow users to register and sign in with Passkey (WebAuthn)":"Cho phép người dùng đăng ký và đăng nhập bằng Passkey (WebAuthn)","Allow users to sign in with Discord":"Cho phép người dùng đăng nhập bằng Discord","Allow users to sign in with GitHub":"Cho phép người dùng đăng nhập bằng GitHub","Allow users to sign in with LinuxDO":"Cho phép người dùng đăng nhập bằng LinuxDO","Allow users to sign in with OpenID Connect":"Cho phép người dùng đăng nhập bằng OpenID Connect","Allow users to sign in with Telegram":"Cho phép người dùng đăng nhập bằng Telegram","Allow users to sign in with this provider":"Cho phép người dùng đăng nhập bằng nhà cung cấp này","Allow users to sign in with WeChat":"Cho phép người dùng đăng nhập bằng WeChat","Allow using models without price configuration":"Cho phép sử dụng mô hình không có cấu hình giá","Allow wallet balance after quota used up":"Cho phép dùng số dư ví sau khi dùng hết hạn ngạch","Allowed":"Cho phép","Allowed hosts":"Máy chủ được phép","Allowed Origins":"Nguồn gốc được phép","Allowed Passkey websites":"Các trang được phép dùng Passkey","Allowed Ports":"Cổng được phép","Allows selected fields to be overwritten after a sync preview. No automatic synchronization.":"Cho phép ghi đè các trường đã chọn sau khi xem trước. Không tự động đồng bộ.","Already have an account?":"Đã có tài khoản?","Also remove custom pricing":"Đồng thời xóa giá tùy chỉnh","Also remove from all channels":"Đồng thời xóa khỏi tất cả các kênh","Also remove pricing":"Đồng thời xóa giá","Always matches (default tier).":"Luôn khớp (bậc mặc định).","Amount":"Số lượng","Amount cannot be changed when editing.":"Số tiền không thể thay đổi khi chỉnh sửa.","Amount discount":"Số tiền giảm giá","Amount Due":"Số tiền cần thanh toán","Amount must be a whole number":"Số tiền phải là số nguyên","Amount must be greater than 0":"Số tiền phải lớn hơn 0","Amount of quota to credit to user account.":"Số lượng quota để ghi có vào tài khoản người dùng.","Amount options must be a JSON array":"Tùy chọn số tiền phải là mảng JSON","Amount the user pays to purchase this plan (USD).":"Số tiền người dùng trả để mua gói này (USD).","Amount the user pays to purchase this plan; the actual currency depends on the payment gateway.":"Số tiền người dùng trả để mua gói này; loại tiền tệ thực tế tùy thuộc vào cổng thanh toán.","Amount to pay:":"Amount due:","An empty field uses the system website address. If Passkeys already work, keep the existing domain.":"Nếu để trống, địa chỉ trang web của hệ thống sẽ được sử dụng. Nếu khóa truy cập đang hoạt động, hãy giữ tên miền hiện tại.","An expression draft already exists. Open the Expression tab to keep editing it.":"Đã có bản nháp biểu thức. Mở thẻ Biểu thức để tiếp tục chỉnh sửa.","An unexpected error occurred":"Đã xảy ra lỗi không mong muốn","An unknown error occurred":"Đã xảy ra lỗi không xác định","Analyze data":"Phân tích dữ liệu","and":"and","Announcement added. Click \\"Save Settings\\" to apply.":"Đã thêm thông báo. Nhấp \\"Save Settings\\" để áp dụng.","Announcement content":"Nội dung thông báo","Announcement deleted. Click \\"Save Settings\\" to apply.":"Đã xóa thông báo. Nhấp \\"Save Settings\\" để áp dụng.","Announcement Details":"Chi tiết thông báo","Announcement displayed to users (supports Markdown & HTML)":"Thông báo hiển thị cho người dùng (hỗ trợ Markdown & HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"Đã cập nhật thông báo. Nhấp \\"Save Settings\\" để áp dụng.","Announcements":"Thông báo","Announcements saved successfully":"Đã lưu thông báo thành công","Answer":"Trả lời","Answers for common access and billing questions":"Câu trả lời cho các câu hỏi thường gặp về truy cập và thanh toán","Anthropic":"Anthropic","Anthropic Messages to OpenAI Chat":"Anthropic Messages sang OpenAI Chat","Anthropic Messages to OpenAI Responses":"Anthropic Messages sang OpenAI Responses","Any condition":"Thỏa mãn bất kỳ","Any Match (OR)":"Bất kỳ khớp (OR)","Anyone can publish an index. A plugin installed from a third-party source has the same access as one you upload by hand: review its source before installing.":"Bất kỳ ai cũng có thể công bố một chỉ mục. Plugin cài từ nguồn bên thứ ba có quyền truy cập hệt như plugin bạn tự tải lên: hãy xem mã nguồn trước khi cài.","API":"API","API Access":"Truy cập API","API Addresses":"Địa chỉ API","API Base URL":"URL cơ sở API","API Base URL (Important: Not Chat API)":"URL cơ sở API (Quan trọng: Không phải API Chat)","API Base URL (Important: Not Chat API) *":"URL cơ sở API (Quan trọng: Không phải API Chat) *","API Base URL *":"URL cơ sở API *","API Endpoints":"Điểm cuối API","API Info":"Thông tin API","API info added. Click \\"Save Settings\\" to apply.":"Thông tin API đã được thêm. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","API info deleted. Click \\"Save Settings\\" to apply.":"Thông tin API đã được xóa. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","API info saved successfully":"Đã lưu thông tin API thành công","API info updated. Click \\"Save Settings\\" to apply.":"Thông tin API đã được cập nhật. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","API key":"Khóa API","API Key":"Khóa API","API Key (one per line for batch mode)":"Khóa API (mỗi khóa một dòng cho chế độ hàng loạt)","API Key (Production)":"API Key (Sản xuất)","API Key (Sandbox)":"Khóa API (Sandbox)","API Key *":"Khóa API *","API Key created successfully":"Tạo khóa API thành công","API Key deleted successfully":"Xóa khóa API thành công","API Key disabled successfully":"Vô hiệu hóa khóa API thành công","API Key enabled successfully":"Kích hoạt khóa API thành công","API key from the provider":"khóa API từ nhà cung cấp","API key is loading, please try again in a moment":"Khóa API đang tải, vui lòng thử lại sau một chút","API key is required":"Khóa API là bắt buộc","API Key mode (does not support batch creation)":"Chế độ Khóa API (không hỗ trợ tạo hàng loạt)","API Key mode: use APIKey|Region":"Chế độ khóa API: sử dụng APIKey|Region","API Key Quota":"Hạn mức khóa API","API Key updated successfully":"API Key đã được cập nhật thành công","API keys":"Khóa API","API Keys":"Khóa API","API Private Key":"Khóa riêng API","API Requests":"Yêu cầu API","API secret":"Bí mật API","API token batch deletion":"Xóa hàng loạt mã thông báo API","API token batch key access":"Xem hàng loạt khóa mã thông báo API","API token configuration update":"Cập nhật cấu hình mã thông báo API","API token creation":"Tạo mã thông báo API","API token deletion":"Xóa mã thông báo API","API token key access":"Xem khóa mã thông báo API","API token management":"Quản lý token API","API token status update":"Cập nhật trạng thái mã thông báo API","API URL":"API URL","API usage records":"Lịch sử sử dụng API","API version":"Phiên bản API","API Version":"Phiên bản API","API2GPT":"API2GPT","Ascending":"Tăng dần","Audio input cost {{quota}}":"Chi phí đầu vào âm thanh {{quota}}","App":"Ứng dụng","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"Bảng xếp hạng ứng dụng hiển thị tại đây là dữ liệu mô phỏng để xem trước và sẽ được thay thế bằng dữ liệu thực sau khi tích hợp backend.","Append":"Thêm vào cuối","Append mode: New keys will be added to the end of the existing key list":"Chế độ nối: Các khóa mới sẽ được thêm vào cuối danh sách khóa hiện có","Append Template":"Thêm mẫu","Append to channel":"Nối vào kênh","Append to End":"Thêm vào cuối","Append to existing keys":"Add to existing keys","Append value to array / string / object end":"Thêm giá trị vào cuối mảng / chuỗi / đối tượng","appended":"đã thêm vào cuối, được phụ lục","Applicable channels":"Kênh tương thích","Applicable conditions":"Điều kiện áp dụng","Application":"Ứng dụng","Applied {{name}} pricing to {{count}} models":"Đã áp dụng giá của {{name}} cho {{count}} mô hình","Applied changes":"Thay đổi đã áp dụng","Applied upstream model changes to {{count}} channels":"Đã áp dụng thay đổi mô hình thượng nguồn cho {{count}} kênh","Applied upstream model changes to channel (ID: {{id}})":"Đã áp dụng thay đổi mô hình thượng nguồn cho kênh (ID: {{id}})","Applies to custom completion endpoints. JSON map of model → ratio.":"Áp dụng cho các điểm cuối hoàn thành tùy chỉnh. Bản đồ JSON của mô hình → tỷ lệ.","Apply":"Áp dụng","Apply {{count}} model changes":"Áp dụng thay đổi cho {{count}} mô hình","Apply {{field}} for {{name}}":"Áp dụng {{field}} cho {{name}}","Apply All Upstream Updates":"Áp dụng Tất cả Cập nhật Upstream","Apply changes":"Áp dụng thay đổi","Apply disable rules to upstream request errors and scheduled or bulk health checks":"Áp dụng quy tắc vô hiệu hóa cho lỗi thượng nguồn và kiểm tra định kỳ hoặc hàng loạt","Apply Filters":"Áp dụng bộ lọc","Apply IP Filter to Resolved Domains":"Áp dụng Bộ lọc IP cho Tên miền đã phân giải","Apply Overwrite":"Áp dụng Ghi đè","Apply plan":"Áp dụng cấu hình","Apply reset":"Thực hiện đặt lại","Apply selected changes":"Áp dụng thay đổi đã chọn","Apply Sync":"Áp dụng đồng bộ","Apply to all rows":"Áp dụng cho tất cả hàng","Apply to draft":"Áp dụng vào bản nháp","Applying...":"Đang áp dụng...","Approx.":"Xấp xỉ.","Approximate prices for common specs.":"Giá tham khảo cho các cấu hình phổ biến.","apps":"ứng dụng","Apps":"Ứng dụng","apps tracked":"ứng dụng được theo dõi","Apps using the most tokens through new-api":"Ứng dụng dùng nhiều token nhất qua new-api","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"cũng được liệt kê ở đây. Xóa chúng khỏi Models để giữ cho phản hồi `/v1/models` thân thiện với người dùng và ẩn các tên dành riêng cho nhà cung cấp.","Are you sure you want to delete":"Bạn có chắc chắn muốn xóa ","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"Bạn có chắc muốn xóa {{count}} mô hình không? Hành động này không thể hoàn tác.","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"Bạn có chắc chắn muốn xóa tất cả các khóa bị tắt tự động? Hành động này không thể hoàn tác.","Are you sure you want to delete channel \\"{{name}}\\"? This action cannot be undone.":"Bạn có chắc muốn xóa kênh \\"{{name}}\\" không? Hành động này không thể hoàn tác.","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"Bạn có chắc muốn xóa triển khai \\"{{name}}\\" không? Hành động này không thể hoàn tác.","Are you sure you want to delete group \\"{{name}}\\"? This action cannot be undone.":"Bạn có chắc muốn xóa nhóm \\"{{name}}\\" không? Không thể hoàn tác thao tác này.","Auto group {{group}} is duplicated":"Nhóm Auto {{group}} bị trùng lặp","Auto group {{group}} is unavailable or unauthorized":"Nhóm Auto {{group}} không khả dụng hoặc không có quyền truy cập","Are you sure you want to delete model \\"{{name}}\\"? This action cannot be undone.":"Bạn có chắc muốn xóa mô hình \\"{{name}}\\" không? Không thể hoàn tác thao tác này.","Are you sure you want to delete this key? This action cannot be undone.":"Bạn có chắc chắn muốn xóa khóa này? Hành động này không thể hoàn tác.","Are you sure you want to disable all enabled keys?":"Bạn có chắc chắn muốn vô hiệu hóa tất cả các khóa đang bật không?","Are you sure you want to enable all keys?":"Bạn có chắc chắn muốn bật tất cả các khóa không?","Are you sure you want to enable plugin {{name}} ({{key}})?":"Bạn có chắc muốn bật plugin {{name}} ({{key}})?","Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.":"Bạn có chắc muốn hoàn thành thủ công đơn hàng này không? Người dùng sẽ được cộng hạn mức tương ứng.","Are you sure you want to sign out? You will need to sign in again to access your account.":"Bạn có chắc chắn muốn đăng xuất? Bạn sẽ cần đăng nhập lại để truy cập tài khoản của mình.","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"Bạn có chắc chắn muốn hủy liên kết {{provider}} cho người dùng này? Người dùng sẽ không thể đăng nhập bằng phương thức này nữa.","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"Bạn có chắc chắn muốn hủy liên kết {{provider}}? Bạn sẽ không thể đăng nhập bằng phương thức này nữa.","Are you sure?":"Bạn có chắc không?","Area Chart":"Biểu đồ vùng","Args (space separated)":"Đối số (cách nhau bằng khoảng trắng)","Arguments JSON":"Đối số JSON","Arguments must be a JSON array":"Đối số phải là một mảng JSON","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"Mảng các thiết lập sẵn của ứng dụng trò chuyện. Mỗi mục là một đối tượng với","Artifacts":"Sản phẩm","Asc":"Asc","Ask anything":"Hỏi gì cũng được","Assign models from the model list to see them here.":"Gán nhà cung cấp từ danh sách mô hình để hiển thị tại đây.","Assigned by administrator only":"Chỉ quản trị viên gán","Assigned by administrators and used to represent a user level, such as default or vip.":"Do quản trị viên gán và dùng để biểu thị cấp người dùng, ví dụ default hoặc vip.","Async":"Bất đồng bộ","Async task polling":"Thăm dò tác vụ bất đồng bộ","Async Task Public Address":"Địa chỉ công khai của tác vụ bất đồng bộ","Async task refund":"Hoàn tiền tác vụ bất đồng bộ","At least one model regex pattern is required":"Cần ít nhất một mẫu regex mô hình","At least one valid key source is required":"Cần ít nhất một nguồn khóa hợp lệ","Attach":"Đính kèm","Attempt":"Lần thử","Audio":"Âm thanh","Audio and Realtime pricing must be converted manually.":"Cần chuyển đổi giá âm thanh và Realtime thủ công.","Audio and text-only requests keep their respective pricing.":"Yêu cầu âm thanh và yêu cầu chỉ có văn bản giữ nguyên cách tính phí tương ứng.","Audio comp.":"Nén âm thanh","Audio completion ratio":"Tỷ lệ hoàn thành âm thanh","Audio In":"Đầu vào âm thanh","Audio input":"Đầu vào âm thanh","Audio Input":"Đầu vào âm thanh","Audio input price":"Giá đầu vào âm thanh","Audio Input Price":"Giá đầu vào âm thanh","Audio Out":"Đầu ra âm thanh","Audio output":"Đầu ra âm thanh","Audio Output":"Đầu ra âm thanh","Audio output price":"Giá đầu ra âm thanh","Audio output price requires an audio input price.":"Giá đầu ra âm thanh cần có giá đầu vào âm thanh.","Audio playback failed":"Phát âm thanh thất bại","Audio Preview":"Xem trước âm thanh","Audio ratio":"Tỷ lệ âm thanh","Audio requests":"Yêu cầu âm thanh","Audio Tokens":"Token âm thanh","Audit access changed. Showing only your records.":"Quyền truy cập kiểm toán đã thay đổi. Chỉ hiển thị bản ghi của bạn.","Audit Logs":"Nhật ký kiểm toán","Audit metadata is unavailable":"Thông tin kiểm toán bổ sung không khả dụng","Audit records start after this feature was enabled. Earlier records remain in Common Logs.":"Bản ghi kiểm toán bắt đầu từ khi tính năng này được bật. Các bản ghi cũ vẫn nằm trong nhật ký chung.","Auth":"Xác thực","Auth configured":"Đã cấu hình xác thực","Auth name":"Tên xác thực","Auth name is required":"Bắt buộc tên xác thực","Auth Style":"Kiểu xác thực","Auth type is invalid":"Loại xác thực không hợp lệ","Auth value":"Giá trị xác thực","Auth value is required":"Bắt buộc giá trị xác thực","auth.resetPasswordConfirm.backToLogin":"Quay lại đăng nhập","auth.resetPasswordConfirm.confirm":"Xác nhận đặt lại mật khẩu","auth.resetPasswordConfirm.description":"Xác nhận yêu cầu đặt lại để tạo mật khẩu mới.","auth.resetPasswordConfirm.retry":"Thử lại ({{seconds}} giây)","auth.resetPasswordConfirm.success":"Mật khẩu của bạn đã được đặt lại thành công","Authentication":"Xác thực","Authentication for upstream requests; channel credentials may still be used.":"Cách xác thực yêu cầu tới nhà cung cấp; plugin vẫn có thể dùng thông tin xác thực của kênh.","Authentication Method":"Phương thức xác thực","Authenticator code":"Mã xác thực","Authenticator code or backup code":"Mã xác thực hoặc mã dự phòng","Authorization callback URL":"URL callback ủy quyền","Authorization Endpoint":"Điểm cuối ủy quyền","Authorization Endpoint (Optional)":"Điểm cuối ủy quyền (Tùy chọn)","Authorize":"Ủy quyền","Auto":"Tự động","Auto (Circuit Breaker)":"Tự động (Bộ ngắt mạch)","Auto assignment order":"Thứ tự gán tự động","Auto Ban":"Cấm tự động","Auto detect (default)":"Tự động phát hiện (mặc định)","Auto Disabled":"Vô hiệu hóa tự động","Bark push URL cannot be empty":"URL đẩy Bark không được để trống","Auto group behavior":"Cách hoạt động của nhóm auto","Auto Group Chain":"Chuỗi nhóm tự động","Auto group order":"Thứ tự nhóm Auto","Auto groups must not contain duplicates":"Các nhóm Auto không được trùng lặp","Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.":"Tự động đàm phán HTTP/2 khi khả dụng. HTTP/1.1 buộc dùng nhiều kết nối keep-alive khi có đồng thời.","Auto refresh":"Tự động làm mới","Auto refresh (5s)":"Tự làm mới (5 giây)","Auto Sync Upstream Models":"Tự động đồng bộ mô hình nguồn","Auto-disable channel":"Tự động tắt kênh","Auto-disable disabled":"Tự động vô hiệu hóa đã tắt","Auto-disable enabled":"Tự động vô hiệu hóa đã bật","Auto-disable rules":"Quy tắc tự động tắt","Auto-disable status codes":"Mã trạng thái tự tắt","Auto-disable-enabled channels only":"Chỉ kênh đã bật tự động vô hiệu hóa","Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.":"Chế độ này chỉ kiểm tra các kênh đã bật tự động vô hiệu hóa và không bị vô hiệu hóa thủ công.","Auto-discover":"Tự động khám phá","Auto-discovers endpoints from the provider":"Tự động khám phá các điểm cuối từ nhà cung cấp","Auto-fill when one field exists and another is missing":"Tự động điền khi một trường có giá trị và trường khác thiếu","Auto-refreshing every {{seconds}}s":"Tự động làm mới mỗi {{seconds}} giây","Auto-retry status codes":"Mã trạng thái tự thử lại","Automatic from system website address":"Tự động từ địa chỉ trang web hệ thống","Automatic selection":"Chọn tự động","Automatically disable channel on repeated failures":"Tự động vô hiệu hóa kênh khi xảy ra lỗi lặp lại","Automatically disable channels exceeding this response time":"Tự động vô hiệu hóa các kênh vượt quá thời gian phản hồi này","Automatically disable channels when tests fail":"Tự động vô hiệu hóa các kênh khi kiểm thử thất bại","Automatically probe all channels in the background":"Tự động dò tất cả các kênh trong nền","Automatically replaces upstream callback URLs with the server address.":"Tự động thay thế URL callback upstream bằng địa chỉ máy chủ.","Automatically selects the best available group with circuit breaker mechanism":"Tự động chọn nhóm tốt nhất hiện có với cơ chế ngắt mạch","Automatically sync model list when upstream changes are detected":"Tự động đồng bộ danh sách mô hình khi phát hiện thay đổi từ nguồn","Availability (last 24h)":"Khả dụng (24 giờ qua)","Available":"Khả dụng","Available Balance":"Số dư khả dụng","Available channels: {{count}}":"Kênh khả dụng: {{count}}","Available credits are ordered by soonest expiration.":"Các lượt khả dụng được sắp xếp theo thời điểm hết hạn gần nhất.","Available disk space":"Dung lượng đĩa khả dụng","Available Models":"Mô hình khả dụng","Available reset credits":"Lượt đặt lại khả dụng","Available Rewards":"Phần thưởng hiện có","Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.":"Các biến khả dụng: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}} và các đường dẫn như {{current.roles}}.","Average latency":"Độ trễ trung bình","Average latency, TTFT, and success rate by group":"Độ trễ trung bình, TTFT và tỷ lệ thành công theo nhóm","Average latency, TTFT, TPS, and success rate":"Độ trễ trung bình, TTFT, TPS và tỷ lệ thành công","Average RPM":"RPM trung bình","Average time-to-first-token (TTFT) by group":"Thời gian trung bình tới token đầu tiên (TTFT) theo nhóm","Average tokens per second sustained per group":"Số token mỗi giây trung bình duy trì cho từng nhóm","Average TPM":"TPM trung bình","Average TTFT":"TTFT trung bình","Awake engines":"Số engine đang hoạt động","Batch-adding Vertex AI keys requires a JSON array, for example {{example}}. Check the input: {{error}}":"Thêm hàng loạt khóa Vertex AI cần một mảng JSON, ví dụ {{example}}. Hãy kiểm tra dữ liệu nhập: {{error}}","AWS":"AWS","AWS API":"API AWS","AWS Bedrock Claude Compat":"AWS Bedrock Claude tương thích","AWS Key Format":"Định dạng khóa AWS","Azure":"Azure","AZURE_OPENAI_ENDPOINT":"AZURE_OPENAI_ENDPOINT","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"Quay lại","Back to configuration":"Quay lại cấu hình","Back to Dashboard":"Quay lại Bảng điều khiển","Billed per request":"Tính phí theo lượt","Back to footnote {{id}} reference":"Quay lại tham chiếu chú thích {{id}}","Back to Home":"Trở về Trang chủ","Back to login":"Quay lại đăng nhập","Back to Models":"Quay lại Mô hình","Backed up":"Đã sao lưu","Billing expressions must be a JSON object mapping models to expressions: {{error}}":"Biểu thức tính phí phải là đối tượng JSON ánh xạ mô hình sang biểu thức: {{error}}","Background":"Chạy nền","Background job tracker for queued work.":"Theo dõi công việc nền cho công việc chờ xử lý.","Backup Code":"Mã dự phòng","Backup code must be in format XXXX-XXXX":"Mã dự phòng phải có định dạng XXXX-XXXX","Backup codes regenerated successfully":"Mã dự phòng đã được tạo lại thành công","Backup codes remaining: {{count}}":"Mã dự phòng còn lại: {{count}}","Bad Request":"Yêu cầu không hợp lệ","Badge Color":"Màu huy hiệu","Billing parameters: {{params}}":"Tham số tính phí: {{params}}","Baidu":"Baidu","Baidu V2":"Baidu V2","Balance":"Cân bằng","Balance and top-up management":"Quản lý số dư và nạp tiền","Balance depleted":"Đã hết số dư","Balance is shown in quota units":"Số dư được hiển thị theo đơn vị hạn mức","Balance queried successfully":"Truy vấn số dư thành công","Balance Query":"Truy vấn số dư","Balance Query route does not support pass-through":"Tuyến truy vấn số dư không hỗ trợ truyền thẳng","Balance response not recognized":"Không nhận dạng được phản hồi số dư","Balance updated successfully":"Đã cập nhật số dư thành công","Balance updated: {{balance}}":"Số dư đã cập nhật: {{balance}}","Bar Chart":"Biểu đồ cột","Bark Push URL":"URL đẩy Bark","Binding successful":"Liên kết thành công","Base":"Cơ bản","Base address provided by your Epay service":"Địa chỉ cơ sở được cung cấp bởi dịch vụ Epay của bạn","Base amount. Actual deduction = base amount × system group rate.":"Số tiền cơ sở. Số tiền trừ thực tế = số tiền cơ sở × tỷ lệ nhóm hệ thống.","Base charge":"Phí cơ bản","Base group ratios apply until you add an override.":"Hệ số cơ bản của nhóm được áp dụng khi chưa có quy tắc ghi đè.","Base input and output token prices for this tier.":"Giá token đầu vào và đầu ra cơ bản cho tầng này.","Base input price only":"Chỉ có giá đầu vào cơ bản","Base Limits":"Giới hạn cơ bản","Base multipliers applied when users select specific groups.":"Hệ số nhân cơ bản được áp dụng khi người dùng chọn các nhóm cụ thể.","Base Price":"Giá cơ bản","Base rate limit windows for this account.":"Cửa sổ giới hạn tốc độ cơ bản cho tài khoản này.","Base URL":"URL cơ sở","Base URL *":"URL cơ sở *","Base URL is required for this channel type":"Loại kênh này yêu cầu Base URL","Bonus for inviting a user {{quota}}":"Thưởng mời người dùng {{quota}}","Base URL is required when an advanced route uses an upstream path":"Cần Base URL khi tuyến nâng cao dùng đường dẫn upstream","Base URL of your Uptime Kuma instance":"URL cơ sở của phiên bản Uptime Kuma của bạn","Basic Authentication":"Xác thực cơ bản","Basic Configuration":"Cấu hình cơ bản","Basic Info":"Thông tin cơ bản","Basic Information":"Thông tin cơ bản","Basic Templates":"Mẫu cơ bản","Batch Add":"Thêm hàng loạt","Batch Add (one key per line)":"Thêm hàng loạt (mỗi khóa một dòng)","Batch add mappings":"Thêm ánh xạ hàng loạt","Batch channel test":"Kiểm tra kênh hàng loạt","Batch delete API tokens":"Xóa hàng loạt mã thông báo API","Batch delete failed":"Xóa hàng loạt thất bại","Batch deleted {{count}} channels":"Đã xóa hàng loạt {{count}} kênh","Batch deleted {{count}} redemption codes":"Đã xóa hàng loạt {{count}} mã quy đổi","Batch deleted redemption codes (count not recorded)":"Đã xóa hàng loạt mã quy đổi (không ghi lại số lượng)","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"Phát hiện hàng loạt hoàn tất: {{channels}} kênh, {{add}} để thêm, {{remove}} để xóa, {{fails}} thất bại","Batch detection failed":"Phát hiện hàng loạt thất bại","Batch disable failed":"Vô hiệu hóa hàng loạt thất bại","Batch Edit":"Chỉnh sửa hàng loạt","Batch edit all channels with this tag. Leave fields empty to keep current values.":"Chỉnh sửa hàng loạt tất cả các kênh có gắn thẻ này. Để trống các trường để giữ nguyên giá trị hiện tại.","Batch Edit by Tag":"Chỉnh sửa hàng loạt theo Thẻ","Batch enable failed":"Kích hoạt hàng loạt thất bại","Batch Operations":"Thao tác hàng loạt","Batch processing failed":"Xử lý hàng loạt thất bại","Batch redirect":"Chuyển hướng hàng loạt","Batch set tag for {{count}} channels":"Đã đặt thẻ hàng loạt cho {{count}} kênh","Batch test completed: {{count}} succeeded":"Kiểm thử hàng loạt hoàn tất: {{count}} thành công","Batch test completed: {{success}} succeeded, {{failed}} failed":"Kiểm thử hàng loạt hoàn tất: {{success}} thành công, {{failed}} thất bại","Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed":"Đã dừng kiểm thử hàng loạt: hoàn tất {{completed}}/{{total}}, {{success}} thành công, {{failed}} thất bại","Batch testing models...":"Đang kiểm thử mô hình hàng loạt...","Batch updated channel status ({{count}}/{{total}} changed)":"Đã cập nhật trạng thái kênh hàng loạt ({{count}}/{{total}} đã thay đổi)","Batch upstream model update":"Cập nhật mô hình thượng nguồn hàng loạt","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"Đã áp dụng cập nhật hàng loạt mô hình upstream: {{channels}} kênh, {{added}} đã thêm, {{removed}} đã xóa, {{fails}} thất bại","Before conversion":"Trước khi chuyển đổi","Best for single-tenant deployments. Pricing and billing options stay hidden.":"Phù hợp nhất cho triển khai đơn người dùng. Các tùy chọn giá và thanh toán sẽ được ẩn.","Best TTFT":"TTFT tốt nhất","Billable image count":"Số ảnh tính phí","Billable input tokens":"Token đầu vào tính phí","Billable output tokens":"Token đầu ra tính phí","Billable token breakdown":"Chi tiết token tính phí","Billed as default. No cell for this combination, so the base ratio of default applies — the 0.8 of vip plays no part.":"Tính phí theo default. Không có ô cho tổ hợp này, nên áp dụng hệ số cơ bản của default — 0.8 của vip không tham gia.","Billed as premium. The highlighted cell matches, so the override 0.3 applies.":"Tính phí theo premium. Khớp ô được tô sáng, nên áp dụng hệ số ghi đè 0.3.","Billing":"Thanh toán","Billing & Payment":"Thanh toán & chi phí","Billing currency":"Loại tiền thanh toán","Billing Details":"Chi tiết thanh toán","Billing expression":"Biểu thức tính phí","Billing group":"Nhóm tính phí","Billing group = default (the token has a group, so use it)":"Nhóm tính phí = default (token có nhóm nên dùng nhóm đó)","Billing group = premium (the token has a group, so use it)":"Nhóm tính phí = premium (token có nhóm nên dùng nhóm đó)","Billing group = vip (the token has no group, so use the user group)":"Nhóm tính phí = vip (token không có nhóm nên dùng nhóm người dùng)","Billing History":"Lịch sử thanh toán","Billing management":"Quản lý thanh toán","Billing Mode":"Chế độ thanh toán","Billing parameters":"Tham số tính phí","Billing Path":"Đường dẫn tính phí","Billing Process":"Quá trình tính phí","Billing rule: each call is billed as the token group (falling back to the user group when the token has none). The base ratio always comes from that billing group, not from the user group. To give a user group a special price on another billing group, add an entry in the override matrix.":"Quy tắc tính phí: mỗi cuộc gọi được tính phí theo nhóm token (nếu token không có nhóm thì dùng nhóm người dùng). Hệ số cơ bản luôn lấy từ nhóm tính phí đó, không phải từ nhóm người dùng. Để cho một nhóm người dùng giá đặc biệt trên nhóm tính phí khác, hãy thêm mục vào ma trận ghi đè.","Billing Source":"Nguồn thanh toán","Billing values must be finite and non-negative.":"Giá trị tính phí phải hữu hạn và không âm.","Bind":"Buộc","Bind a Pancake store + product":"Liên kết cửa hàng + sản phẩm Pancake","Bind an email address to your account.":"Liên kết địa chỉ email với tài khoản của bạn.","Bind Email":"Liên kết Email","Bind task plugins":"Gắn plugin tác vụ","Bind Telegram Account":"Liên kết tài khoản Telegram","Bind WeChat":"Liên kết WeChat","Bind WeChat Account":"Liên kết tài khoản WeChat","Binding Information":"Thông tin Ràng buộc","Binding successful!":"Liên kết thành công!","Binding Type":"Loại liên kết","Binding your {{provider}} account":"Đang liên kết tài khoản {{provider}} của bạn","Binding...":"Đang liên kết...","Bindings":"Ràng buộc","Calculating priority...":"Đang tính độ ưu tiên…","Callback URL configuration error":"Lỗi cấu hình URL callback","Blacklist":"Danh sách đen","Blacklist (Block listed domains)":"Danh sách đen (Các tên miền bị chặn)","Blacklist (Block listed IPs)":"Danh sách đen (Các IP bị chặn)","Blank Rule":"Quy tắc trống","Cannot create users with permission level equal to or higher than yourself":"Không thể tạo người dùng có cấp quyền bằng hoặc cao hơn bạn","Cannot delete super administrator account":"Không thể xóa tài khoản quản trị viên cấp cao","Cannot delete the last key":"Không thể xóa khóa cuối cùng","Cannot demote super administrator user":"Không thể hạ cấp quản trị viên cấp cao","Cannot disable super administrator user":"Không thể vô hiệu hóa quản trị viên cấp cao","Cannot enable the email domain restriction. Enter the allowed email domains first.":"Không thể bật giới hạn tên miền email. Hãy nhập các tên miền email được phép trước.","Cannot enable Turnstile verification. Enter the Turnstile settings first.":"Không thể bật xác minh Turnstile. Hãy nhập cài đặt Turnstile trước.","Cannot enable WeChat login. Enter the WeChat login settings first.":"Không thể bật đăng nhập WeChat. Hãy nhập cài đặt đăng nhập WeChat trước.","Cannot enable {{provider}}. Enter the {{provider}} Client ID and Client Secret first.":"Không thể bật {{provider}}. Hãy nhập Client ID và Client Secret của {{provider}} trước.","Blend":"Trộn","Block email aliases (e.g., user+alias@domain.com)":"Chặn bí danh email (ví dụ: user+alias@domain.com)","Blocked keywords":"Blocked keyword","Blocks messages when sensitive keywords are detected.":"Chặn tin nhắn khi phát hiện từ khóa nhạy cảm.","Body param":"Tham số body","Boolean":"Boolean","Border radius":"Độ bo góc","Bot Name":"Tên Bot","Bot Protection":"Bảo vệ Bot","Bot Token":"Mã thông báo Bot","Bot:":"Bot:","Bound":"Ràng buộc","Bound a subscription":"Đã liên kết một gói đăng ký","Bound Channels":"Các kênh ràng buộc","Bound Only":"Chỉ đã liên kết","Bound product:":"Sản phẩm đã liên kết:","Bound store:":"Cửa hàng đã liên kết:","Branch actions {{path}}":"Thao tác nhánh {{path}}","Bring channels back online after successful checks":"Khôi phục các kênh trực tuyến sau khi kiểm tra thành công","Browse and compare":"Duyệt và so sánh","Browse available models and pricing":"Duyệt mô hình khả dụng và giá","Browse rankings by category":"Duyệt bảng xếp hạng theo danh mục","Browser":"Trình duyệt","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"Số token ngân sách = số token tối đa × tỷ lệ. Chấp nhận một số thập phân từ 0.002 đến 1. Khuyến nghị nên giữ cho phù hợp với cách tính phí của nhà cung cấp.","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"Số token ngân sách = số token tối đa × tỷ lệ. Chấp nhận một số thập phân từ 0.1 đến 1.","Budget Tokens Ratio":"Tỷ lệ Mã thông báo Ngân sách","Budgets":"Ngân sách","Build on your API gateway in minutes":"Xây dựng trên cổng API của bạn trong vài phút","Built for developers,":"Được xây dựng cho nhà phát triển,","Built-in":"Tích hợp sẵn","Built-in Device":"Thiết bị tích hợp","Built-in is v{{factory}}; delete the custom version to return to it":"Bản tích hợp là v{{factory}}; xóa bản tùy chỉnh để trở lại","Built-in pricing may become effective again.":"Giá tích hợp có thể có hiệu lực trở lại.","Built-in v{{factory}} / marketplace v{{market}}":"Tích hợp v{{factory}} / chợ v{{market}}","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"Tích hợp sẵn: vân tay/khuôn mặt điện thoại, hoặc Windows Hello; Bên ngoài: khóa bảo mật USB","Bulk actions for {{count}} selected records":"Thao tác hàng loạt cho {{count}} bản ghi đã chọn","by":"by","By category":"Theo danh mục","By model author":"Theo nhà phát triển mô hình","By quota":"Theo hạn ngạch","By requests":"Theo số yêu cầu","By tokens":"Theo số token","Changes save on drop. You can undo the last move.":"Thay đổi được lưu khi thả. Bạn có thể hoàn tác lần di chuyển gần nhất.","Channel affinity settings are not initialized":"Cài đặt ưu tiên kênh chưa được khởi tạo","Cache":"Bộ nhớ đệm","Cache create (1h) price":"Giá tạo cache (1 giờ)","Cache create price":"Giá tạo cache","Cache Creation":"Tạo cache","Cache Creation (1h)":"Tạo cache (1h)","Cache Creation (5m)":"Tạo cache (5m)","Cache Directory":"Thư mục bộ nhớ đệm","Cache Directory Disk Space":"Dung lượng đĩa thư mục bộ nhớ đệm","Cache Directory Info":"Thông tin thư mục bộ nhớ đệm","Channel does not exist":"Kênh không tồn tại","Cache Entries":"Mục bộ nhớ đệm","Cache mode":"Chế độ bộ đệm","Cache pricing":"Giá bộ nhớ đệm","Cache ratio":"Tỷ lệ bộ nhớ đệm","Cache Read":"Đọc bộ nhớ đệm","Cache read price":"Giá đọc cache","Cache repeated prompt prefixes for cheaper, faster reuse":"Lưu cache phần đầu lời nhắc lặp lại để tái sử dụng nhanh và rẻ hơn","Cache write":"Ghi cache","Cache Write":"Ghi bộ nhớ đệm","Cache Write (1h)":"Ghi cache (1h)","Cache Write (5m)":"Ghi cache (5m)","Cache write price":"Giá ghi cache","Cached":"Đã cache","Cached input":"Đầu vào đã cache","Cached tokens":"Token đã lưu đệm","Calculated price: ${{price}} per 1M tokens":"Giá tính toán: ${{price}} mỗi 1M token","Calculated ratio: {{ratio}}":"Tỷ lệ tính toán: {{ratio}}","Calculating...":"Đang tính...","Call 1: the token group is premium":"Cuộc gọi 1: nhóm token là premium","Call 2: the token group is default":"Cuộc gọi 2: nhóm token là default","Call 3: the token has no group":"Cuộc gọi 3: token không có nhóm","Call Count Distribution":"Phân bổ số lượt gọi","Call Count Ranking":"Xếp hạng số lượt gọi","Call Proportion":"Tỷ lệ cuộc gọi","Call Trend":"Xu hướng cuộc gọi","Callback address":"Địa chỉ callback","Callback Caller IP":"IP người gọi callback","Callback notification URL":"URL thông báo callback","Callback Payment Method":"Phương thức thanh toán callback","Callback URL format":"Định dạng URL callback","Cancel":"Hủy bỏ","Cancelled":"Đã hủy","Cancelled at":"Đã hủy lúc","Capabilities":"Khả năng","Caps the response length":"Giới hạn độ dài phản hồi","Capture a reusable bundle of models, tags, or endpoints.":"Đóng gói một bộ có thể tái sử dụng gồm các mô hình, thẻ hoặc điểm cuối.","Card view":"Dạng thẻ","Cascade disable channels":"Tắt kèm các kênh","Catalog visibility":"Hiển thị trong danh mục","Catch-all route must be last for the same incoming path":"Tuyến dự phòng phải đứng cuối cho cùng đường dẫn đầu vào","Category":"Danh mục","Category Name":"Tên danh mục","Category name is required":"Tên danh mục là bắt buộc","Category name must be less than 50 characters":"Tên danh mục phải ít hơn 50 ký tự","Caution":"Thận trọng","CC Switch":"CC Switch","Centered":"Căn giữa","Chain":"Chuỗi","Change":"Thay đổi","Change domain":"Đổi tên miền","Change language":"Đổi ngôn ngữ","Change model vendor":"Đổi nhà cung cấp mô hình","Change Password":"Đổi mật khẩu","Change provider":"Đổi nhà cung cấp","Change system settings and custom OAuth providers, and sync prices.":"Thay đổi cài đặt hệ thống, nhà cung cấp OAuth tùy chỉnh và đồng bộ giá.","Change the Passkey domain?":"Đổi tên miền khóa truy cập?","Change To":"Thay đổi thành","Change upstream model names":"Đổi tên mô hình gửi lên nhà cung cấp","Change vendor":"Đổi nhà cung cấp","Change your display name and personal settings.":"Thay đổi tên hiển thị và cài đặt cá nhân.","Changed":"Đã thay đổi","Changed / Total":"Đã thay đổi / Tổng số","Channel notifications":"Thông báo về kênh","Channel priorities changed. Refresh and try again.":"Độ ưu tiên đã thay đổi. Hãy làm mới và thử lại.","Channel priorities saved":"Đã lưu độ ưu tiên kênh","Channel priority is outside the sortable range":"Độ ưu tiên kênh nằm ngoài phạm vi sắp xếp","Check-in failed, please try again later":"Điểm danh thất bại, vui lòng thử lại sau","Check-in failed: quota update error":"Điểm danh thất bại: lỗi cập nhật hạn mức","Check-in feature is not enabled":"Tính năng điểm danh chưa được bật","Changed access token permissions":"Đã thay đổi quyền của token truy cập","Changed Fields":"Trường đã thay đổi","Check-in successful":"Điểm danh thành công","Changed fields: {{fields}}":"Trường đã thay đổi: {{fields}}","Changelog":"Nhật ký thay đổi","Changes are written to the settings draft on save.":"Các thay đổi sẽ được ghi vào bản nháp cài đặt khi lưu.","Changes declared endpoint types and custom paths shown to users.":"Thay đổi loại điểm cuối và đường dẫn tùy chỉnh hiển thị cho người dùng.","Changes visibility in the model catalog. Channels remain configured separately.":"Thay đổi khả năng hiển thị trong danh mục. Kênh vẫn được cấu hình riêng.","Changes visibility in the model square. Channel status and existing API access are unchanged.":"Thay đổi hiển thị trong kho mô hình, không ảnh hưởng trạng thái kênh và quyền gọi API hiện có.","Changes which model names inherit this metadata. Prices are not inherited.":"Thay đổi tên mô hình kế thừa siêu dữ liệu này. Giá không được kế thừa.","Changing...":"Đang thay đổi...","Channel":"Kênh","Channel {{name}}":"Kênh {{name}}","Channel {{name}} model {{model}}":"Kênh {{name}} mô hình {{model}}","Channel Affinity":"Ưu tiên kênh","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"Ưu tiên kênh sẽ sử dụng lại kênh thành công gần nhất dựa trên các khóa được trích xuất từ ngữ cảnh yêu cầu hoặc JSON body.","Channel Affinity: Upstream Cache Hit":"Ưu tiên kênh: Cache hit từ upstream","Channel availability and group access are derived from enabled channels. Importing metadata does not create a callable channel.":"Khả năng sử dụng kênh và quyền nhóm được xác định từ các kênh đang bật. Nhập siêu dữ liệu không tạo kênh có thể gọi.","Choose a time range of up to {{days}} days. The other filters on this page also apply.":"Chọn khoảng thời gian tối đa {{days}} ngày. Các bộ lọc khác trên trang này cũng được áp dụng.","Channel configuration":"Cấu hình kênh","Channel consistency repaired: {{success}} succeeded, {{fails}} failed":"Đã sửa tính nhất quán kênh: {{success}} thành công, {{fails}} thất bại","Channel copied successfully":"Sao chép kênh thành công","Channel created successfully":"Tạo kênh thành công","Channel deleted successfully":"Xóa kênh thành công","Channel disable requested":"Đã yêu cầu vô hiệu hóa kênh","Channel disabled successfully":"Kênh đã bị vô hiệu hóa thành công","Channel enabled successfully":"Kênh đã được bật thành công","Channel error":"Lỗi kênh","Channel Extra Settings":"Cài đặt thêm kênh","Channel health":"Tình trạng kênh","Channel health checks":"Kiểm tra tình trạng kênh","Channel ID":"Mã kênh","Channel ID is required":"Cần có ID kênh","Channel is not selected":"Chưa chọn kênh","Channel key":"Khóa kênh","Channel key unlocked":"Khóa kênh đã được mở khóa","Channel Management":"Quản lý kênh","Channel models":"Mô hình kênh","Channel name is required":"Tên kênh là bắt buộc","Channel selected":"Đã chọn kênh","Channel selection":"Chọn kênh","Channel switching options":"Tùy chọn chuyển kênh","Channel test completed":"Kiểm tra kênh hoàn tất","Channel test concurrency":"Mức đồng thời khi kiểm tra kênh","Channel test concurrency must be between 1 and 32":"Mức đồng thời khi kiểm tra kênh phải từ 1 đến 32","Channel test mode":"Chế độ kiểm tra kênh","Channel type":"Loại kênh","Channel type does not match the status endpoint":"Loại kênh không khớp với điểm cuối trạng thái","Channel type is required":"Loại kênh là bắt buộc","Channel types":"Loại kênh","Channel types you can use when binding this plugin.":"Các loại kênh có thể chọn khi liên kết plugin này.","Channel updated successfully":"Kênh đã được cập nhật thành công","Channel-specific settings (JSON format)":"Cài đặt dành riêng cho kênh (định dạng JSON)","Channel:":"Kênh:","channel(s)? This action cannot be undone.":"kênh(s)? Hành động này không thể hoàn tác.","Channels":"Kênh","Channels {{channels}} · Groups {{groups}}":"Kênh {{channels}} · Nhóm {{groups}}","Channels and groups":"Kênh và nhóm","Channels deleted successfully":"Xóa kênh thành công","Channels must also enable Auto Ban before automatic disabling can take effect.":"Từng kênh cũng phải bật tự động vô hiệu hóa để quy tắc chung có hiệu lực.","Character chat, storytelling, persona":"Trò chuyện nhân vật, kể chuyện, nhân cách hoá","Charge.":"Tính phí.","Chart Preferences":"Tùy chọn biểu đồ","Chart Settings":"Cài đặt Biểu đồ","Chat":"Trò chuyện","Chat area":"Khu vực trò chuyện","Chat Area":"Khu vực trò chuyện","Chat Client Name":"Tên ứng dụng khách trò chuyện","Chat client name is required":"Tên ứng dụng chat là bắt buộc","Chat configuration JSON":"Cấu hình trò chuyện JSON","Chat preset not found":"Thiết lập sẵn trò chuyện không tìm thấy","Chat Presets":"Cài đặt sẵn trò chuyện","Chat session management":"Quản lý phiên trò chuyện","ChatCompletions -> Responses Compatibility":"Tương thích ChatCompletions -> Phản hồi","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Check again":"Kiểm tra lại","Check channels awaiting recovery only":"Chỉ kiểm tra các kênh đang chờ khôi phục","Check for new upstream models":"Định kỳ tìm mô hình mới từ thượng nguồn","Check for updates":"Kiểm tra cập nhật","Check in daily to receive random quota rewards":"Nhận phòng hàng ngày để nhận phần thưởng theo hạn ngạch ngẫu nhiên","Check in now":"Điểm danh ngay","Check line {{line}} for a missing comma.":"Kiểm tra dòng {{line}} xem có thiếu dấu phẩy không.","Check out the Quick Start":"Xem hướng dẫn bắt đầu nhanh","Check resolved IPs against IP filters even when accessing by domain":"Kiểm tra các IP đã phân giải đối chiếu với các bộ lọc IP ngay cả khi truy cập bằng tên miền","Check the override matrix at row = user group, column = billing group. If that cell is set, use it. Otherwise use the billing group base ratio from the pricing table.":"Kiểm tra ma trận ghi đè tại hàng = nhóm người dùng, cột = nhóm tính phí. Nếu ô đó được đặt thì dùng nó, nếu không thì dùng hệ số cơ bản của nhóm tính phí trong bảng định giá.","Check-in failed":"Điểm danh thất bại","Check-in Rewards":"Phần thưởng điểm danh","Check-in Settings":"Cài đặt điểm danh","Check-in successful! Received":"Điểm danh thành công! Đã nhận","Checked in":"Đã check-in","Checking connection":"Đang kiểm tra kết nối","Checking file integrity...":"Đang kiểm tra tính toàn vẹn của tệp…","Checking name...":"Đang kiểm tra tên...","Checking updates...":"Đang kiểm tra cập nhật...","Checking upstream models. Channel models will only change after confirmation.":"Đang kiểm tra mô hình thượng nguồn. Mô hình của kênh chỉ thay đổi sau khi xác nhận.","checkout.session.completed":"thanh toán.phiên.hoàn thành","checkout.session.expired":"Phiên thanh toán đã hết hạn.","Checks hourly while you are online, including pre-releases.":"Kiểm tra mỗi giờ khi trực tuyến, bao gồm các bản phát hành thử.","Checks text extracted from supported requests against keywords, ignoring case. A match rejects the request before upstream processing and does not affect channel health. Images, audio and generated responses are not checked.":"Đối chiếu văn bản trích xuất từ yêu cầu được hỗ trợ với từ khóa, không phân biệt hoa thường. Khi khớp, yêu cầu bị từ chối trước khi gửi đến thượng nguồn và không ảnh hưởng tình trạng kênh. Không kiểm tra hình ảnh, âm thanh hay phản hồi được tạo.","Chinese":"Tiếng Trung","Choose a complete upstream protocol plan or edit individual route groups.":"Chọn cấu hình giao thức thượng nguồn đầy đủ hoặc chỉnh sửa từng nhóm route.","Choose a provider or plugin to configure your channel.":"Chọn nhà cung cấp hoặc plugin để cấu hình kênh.","Choose a time at least one hour from now":"Hãy chọn thời điểm cách hiện tại ít nhất một giờ","Choose a username":"Chọn tên người dùng","Choose a valid IANA timezone.":"Chọn múi giờ IANA hợp lệ.","Choose an amount and payment method":"Chọn số tiền và phương thức thanh toán","Choose and order the groups this API key will try.":"Chọn và sắp xếp các nhóm mà khóa API này sẽ thử.","Choose another file":"Chọn tệp khác","Choose between default expanded, compact icon-only, or full layout mode":"Chọn giữa chế độ mở rộng mặc định, chế độ chỉ biểu tượng thu gọn, hoặc chế độ bố cục đầy đủ","Choose between inset, floating, or standard sidebar layout":"Chọn giữa bố cục thanh bên chìm, nổi hoặc tiêu chuẩn","Choose between left-to-right or right-to-left site direction":"Chọn giữa hướng trang từ trái sang phải hoặc từ phải sang trái","Choose between system preference, light mode, or dark mode":"Lựa chọn giữa tùy chọn hệ thống, chế độ sáng hoặc chế độ tối","Choose channels to sync upstream ratio configurations from":"Chọn các kênh để đồng bộ cấu hình tỷ lệ đường lên từ","Choose file":"Chọn tệp","Choose Group":"Chọn Nhóm","Choose how flow widths are calculated.":"Chọn cách tính độ rộng của các luồng.","Choose how quota values are shown to users":"Chọn cách hiển thị giá trị hạn ngạch cho người dùng","Choose how the platform will operate":"Chọn cách nền tảng sẽ hoạt động","Choose how to filter domains":"Chọn cách lọc tên miền","Choose how to filter IP addresses":"Chọn cách lọc địa chỉ IP","Choose one SMTP transport security mode":"Chọn một chế độ bảo mật truyền tải SMTP","Choose price sources":"Chọn nguồn giá","Choose the bundle type and define the items inside it.":"Chọn loại gói và định nghĩa các mục bên trong nó.","Choose the default charts, range, and time granularity for model analytics.":"Chọn biểu đồ, khoảng thời gian và độ chi tiết thời gian mặc định cho phân tích mô hình.","Choose the domain used when this Passkey was created, then try again.":"Chọn tên miền đã dùng khi tạo khóa truy cập này rồi thử lại.","Choose where to fetch upstream metadata.":"Chọn nơi để tìm nạp siêu dữ liệu thượng nguồn.","Choose which charts are selected by default when opening model analytics.":"Chọn biểu đồ được chọn mặc định khi mở phân tích mô hình.","Clamped to":"Giới hạn thành","Claude":"Claude","Claude CLI Header Passthrough":"Chuyển tiếp header Claude CLI","Claude only":"Chỉ Claude","Clean":"Không xung đột","Clean history logs":"Xóa nhật ký lịch sử","Clean logs":"Dọn dẹp nhật ký","Clean task history":"Xóa lịch sử tác vụ","Clean up inactive cache":"Dọn dẹp bộ nhớ đệm không hoạt động","Clean Up Log Files":"Dọn dẹp tệp nhật ký","Cleaned up {{count}} log files, freed {{size}}":"Đã dọn dẹp {{count}} tệp nhật ký, giải phóng {{size}}","Cleaning...":"Đang dọn dẹp...","Cleanup failed":"Dọn dẹp thất bại","Cleanup Mode":"Chế độ dọn dẹp","Clear":"Xóa","Clear all":"Xóa tất cả","Clear All":"Xóa tất cả","Clear All Cache":"Xóa toàn bộ bộ nhớ đệm","Clear all filters":"Xóa tất cả bộ lọc","Clear cache for this rule":"Xóa bộ nhớ đệm của quy tắc này","Clear chat history":"Xóa lịch sử trò chuyện","Clear chat history?":"Xóa lịch sử trò chuyện?","Clear field selection":"Bỏ chọn các trường","Clear filters":"Clear filter","Clear Mapping":"Xóa Ánh xạ","Clear mode flags in prompts":"Xóa các cờ chế độ trong lời nhắc","Clear node filters":"Xóa bộ lọc nút","Clear search":"Xóa tìm kiếm","Clear selection":"Bỏ chọn","Clear selection (Escape)":"Bỏ chọn (Escape)","Clear vendor":"Xóa gán nhà cung cấp","Cleared":"Đã xóa","Cleared {{bindingType}} binding for user {{username}}":"Đã xóa liên kết {{bindingType}} của người dùng {{username}}","Cleared all models":"Đã xóa tất cả các mô hình","Cleared channel affinity cache":"Đã xóa bộ nhớ đệm liên kết kênh","Cleared disk cache":"Đã xóa bộ nhớ đệm trên đĩa","Cleared historical logs":"Đã xóa nhật ký lịch sử","Cleared log files":"Đã xóa tệp nhật ký","Click \\"Create Plan\\" to create your first subscription plan":"Nhấp \\"Tạo gói\\" để tạo gói đăng ký đầu tiên","Click \\"Generate\\" to create a token":"Nhấp \\"Tạo\\" để tạo một token","Click a stage to show or hide that column":"Nhấp vào một giai đoạn để hiện hoặc ẩn cột đó","Click any category to drill into its models, apps, and trends":"Bấm vào danh mục để xem chi tiết mô hình, ứng dụng và xu hướng","Click for details":"Nhấp để xem chi tiết","Click save when you\'re done.":"Nhấn lưu khi bạn hoàn tất.","Click save when you're done.":"Nhấn lưu khi bạn hoàn tất.","Click the button below to bind your Telegram account":"Nhấp vào nút bên dưới để liên kết tài khoản Telegram của bạn","Click to copy":"Nhấp để sao chép","Click to open deployment":"Nhấp để mở triển khai","Click to preview audio":"Nhấp để xem trước âm thanh","Click to preview video":"Nhấp để xem trước video","Click to update balance":"Nhấp để cập nhật số dư","Click to view Codex usage":"Nhấp để xem mức sử dụng Codex","Compliance confirmation fields cannot be changed through the general settings API":"Không thể thay đổi các trường xác nhận tuân thủ qua API cài đặt chung","Click to view full details":"Nhấn để xem chi tiết đầy đủ","Click to view full error message":"Nhấp để xem toàn bộ thông báo lỗi","Click to view full prompt":"Nhấp để xem toàn bộ lời nhắc","Composition failed":"Dựng bố cục thất bại","Click to view image":"Nhấp để xem hình ảnh","Client":"Máy khách","Client header value":"Giá trị header client","Client headers override the gateway defaults and may cause upstream errors":"Header của client sẽ ghi đè header mặc định của gateway và có thể gây lỗi ở upstream","Client ID":"Mã khách hàng","Client information such as User-Agent and IP is exposed to the upstream":"Thông tin client như User-Agent và IP sẽ bị lộ cho upstream","Client model":"Model phía client","Client model matching":"Khớp client model","Client model matching help":"Trợ giúp khớp client model","Client Secret":"Bí mật máy khách","Close":"Đóng","Close dialog":"Đóng hộp thoại","Close menu":"Đóng menu","Close panel":"Đóng bảng","Close the panel to edit here":"Đóng bảng để chỉnh sửa tại đây","Close Today":"Đóng cửa hôm nay","Cloudflare":"Cloudflare","CNY":"CNY","CNY per USD":"CNY trên USD","Code":"Mã","Code generation, refactoring, autocomplete":"Sinh code, refactor, gợi ý hoàn thành","Code interpreter":"Trình thông dịch mã","Code samples":"Mẫu mã","Codes copied!":"Đã sao chép mã!","Codex":"Codex","Codex Account & Usage":"Tài khoản và sử dụng Codex","Codex Account Status":"Trạng thái tài khoản Codex","Codex channels do not support batch creation":"Kênh Codex không hỗ trợ tạo hàng loạt","Codex channels use an OAuth JSON credential as the key.":"Kênh Codex dùng thông tin xác thực OAuth JSON làm khóa.","Codex CLI Header Passthrough":"Chuyển tiếp header Codex CLI","Codex credential must be a JSON object with access_token and account_id":"Thông tin xác thực Codex phải là đối tượng JSON có access_token và account_id","Cohere":"Cohere","Collapse":"Thu gọn","Collapse all":"Thu gọn tất cả","Collapse All":"Thu gọn tất cả","Collapse panel":"Thu gọn bảng","Collect relay latency and success-rate metrics for the model square.":"Thu thập độ trễ Relay và tỷ lệ thành công cho quảng trường mô hình.","Color":"Màu","Color is required":"Màu sắc là bắt buộc","Color preset":"Cài đặt màu sẵn","Color:":"Màu sắc:","Comfortable":"Thoải mái","Coming Soon!":"Sắp ra mắt!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"Tên mô hình chính xác, phân tách bằng dấu phẩy. Thêm tiền tố regex: để bỏ qua bằng biểu thức chính quy.","Comma-separated list of allowed ports (empty = all ports)":"Danh sách các cổng được phép, phân cách bằng dấu phẩy (để trống = tất cả các cổng)","Comma-separated model names (leave empty to keep current)":"Tên mô hình phân tách bằng dấu phẩy (để trống để giữ nguyên hiện tại)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"Tên mô hình được phân tách bằng dấu phẩy, ví dụ: gpt-4,gpt-3.5-turbo","Command":"Lệnh","Common":"Chung","Common Keys":"Khóa thường dùng","Common Logs":"Logarit thập phân","Common pitfall: the user group base ratio is NOT a personal discount. It only applies when the user group itself is the billing group.":"Lỗi thường gặp: hệ số cơ bản của nhóm người dùng KHÔNG phải giảm giá cá nhân. Nó chỉ áp dụng khi chính nhóm người dùng là nhóm tính phí.","Common ports include 25, 465, and 587":"Các cổng phổ biến bao gồm 25, 465 và 587","Common User":"Người dùng thông thường","Community driven, self-hosted, and extensible":"Do cộng đồng phát triển, tự lưu trữ và có thể mở rộng","Compact":"Gọn","Compare each vendor\'s token share across the past few weeks":"So sánh thị phần token của từng nhà cung cấp trong vài tuần qua","Compare each vendor\'s token share across the past year":"So sánh thị phần token của từng nhà cung cấp trong năm qua","Compare each vendor\'s token share over the past 24 hours":"So sánh thị phần token của từng nhà cung cấp trong 24 giờ qua","Compare each vendor\'s token share over the past month":"So sánh thị phần token của từng nhà cung cấp trong tháng qua","Compare each vendor\'s token share since launch":"So sánh thị phần token của từng nhà cung cấp kể từ khi ra mắt","Compare prices and choose a source for each model.":"So sánh giá và chọn nguồn cho từng mô hình.","Compare the most popular models on the platform":"So sánh các mô hình phổ biến nhất trên nền tảng","Comparison operator":"Toán tử so sánh","compatible API routes":"tuyến API tương thích","Compatible API routes for common AI application workflows":"Các tuyến API tương thích cho quy trình ứng dụng AI phổ biến","Compatible Passkey domains":"Tên miền khóa truy cập tương thích","Compilation failed":"Biên dịch thất bại","Complete API documentation with multi-language SDK support":"Tài liệu API đầy đủ với hỗ trợ SDK đa ngôn ngữ","Complete Order":"Hoàn thành đơn hàng","Complete sign-in":"Hoàn tất đăng nhập","Complete the invalid fields before saving or switching modes. The last valid expression is preserved.":"Sửa các trường không hợp lệ trước khi lưu hoặc đổi chế độ. Biểu thức hợp lệ gần nhất vẫn được giữ nguyên.","Complete these steps to finish the initial installation.":"Hoàn thành các bước này để hoàn tất quá trình cài đặt ban đầu.","Complete top-up orders and manage subscription plans and user subscriptions.":"Hoàn tất đơn nạp tiền và quản lý gói đăng ký cùng đăng ký của người dùng.","Completed":"Hoàn thành","Completed security verification":"Đã hoàn tất xác minh bảo mật","Completed top-up order for the user":"Đã hoàn tất đơn nạp tiền cho người dùng","Completion":"Hoàn thành","Completion price":"Giá hoàn thành","Completion price ($/1M tokens)":"Giá hoàn thành ($/1M tokens)","Completion ratio":"Tỷ lệ hoàn thành","Compliance confirmation required":"Cần xác nhận tuân thủ","Compliance confirmed":"Đã xác nhận tuân thủ","Compliance confirmed successfully":"Xác nhận tuân thủ thành công","Concatenate channel system prompt with user's prompt":"Nối lời nhắc hệ thống kênh với lời nhắc của người dùng","Condition {{path}}":"Điều kiện {{path}}","Condition actions {{path}}":"Thao tác điều kiện {{path}}","Condition group":"Nhóm điều kiện","Condition group {{path}}":"Nhóm điều kiện {{path}}","Condition input":"Biến điều kiện","Condition Path":"Đường dẫn điều kiện","Condition Settings":"Cài đặt điều kiện","Condition value":"Giá trị điều kiện","Condition Value":"Giá trị điều kiện","Conditional multipliers":"Hệ số nhân có điều kiện","Conditions":"Điều kiện","Conditions (AND)":"Điều kiện (AND)","Confidence":"Tự tin","Configuration":"Cấu hình","Configuration File":"Tệp Cấu hình","Configuration for Creem payment integration":"Cấu hình tích hợp thanh toán Creem","Configuration for Epay payment integration":"Cấu hình cho tích hợp thanh toán Epay","Configuration for Stripe payment integration":"Cấu hình cho tích hợp thanh toán Stripe","Configuration required":"Cần cấu hình","Configure":"Cấu hình","Configure a Creem product for user recharge options.":"Cấu hình một sản phẩm Creem cho các tùy chọn nạp tiền người dùng.","Configure a custom ratio for \\"{{userGroup}}\\" users when using a specific token group.":"Đặt hệ số riêng cho người dùng thuộc nhóm \\"{{userGroup}}\\" khi sử dụng một nhóm token cụ thể.","Configure a custom ratio for when users use a specific token group.":"Cấu hình tỷ lệ tùy chỉnh khi người dùng sử dụng nhóm token cụ thể.","Configure a group that users can select when creating API keys.":"Cấu hình một nhóm mà người dùng có thể chọn khi tạo khóa API.","Configure a new custom OAuth provider for user authentication.":"Cấu hình nhà cung cấp OAuth tùy chỉnh mới để xác thực người dùng.","Configure a payment method for user recharge options.":"Cấu hình phương thức thanh toán cho các tùy chọn nạp tiền của người dùng.","Configure a predefined chat link for end users.":"Cấu hình một liên kết trò chuyện được xác định trước cho người dùng cuối.","Configure an input price before converting this model.":"Hãy cấu hình giá đầu vào trước khi chuyển đổi mô hình này.","Configure and deploy a new container instance.":"Cấu hình và triển khai một phiên bản container mới.","Configure API documentation links for the dashboard":"Cấu hình các liên kết tài liệu API cho bảng điều khiển","Configure at:":"Cấu hình tại:","Configure available payment methods. Provide a JSON array.":"Cấu hình các phương thức thanh toán khả dụng. Cung cấp một mảng JSON.","Configure Creem products. Provide a JSON array.":"Cấu hình sản phẩm Creem. Cung cấp một mảng JSON.","Configure discount rates based on recharge amounts":"Cấu hình tỷ lệ chiết khấu dựa trên số tiền nạp","Configure endpoint routing, authentication and protocol conversion for different upstream services":"Tùy chỉnh định tuyến, xác thực và chuyển đổi giao thức cho các dịch vụ thượng nguồn khác nhau","Configure experimental data export for the dashboard":"Cấu hình xuất dữ liệu thử nghiệm cho bảng điều khiển","Configure in your Creem dashboard":"Cấu hình trong bảng điều khiển Creem của bạn","Configure keyword filtering for prompts and responses.":"Định cấu hình lọc từ khóa để xem lời nhắc và câu trả lời.","Configure model, caching, and group ratios used for billing":"Cấu hình mô hình, bộ nhớ đệm và tỷ lệ nhóm được sử dụng để tính phí.","Configure Models":"Cấu hình mô hình","Configure monitoring status page groups for the dashboard":"Cấu hình các nhóm trang trạng thái giám sát cho bảng điều khiển","Configure NODE_NAME":"Cấu hình NODE_NAME","Configure per-model ratio for image inputs or outputs.":"Cấu hình tỷ lệ theo mô hình cho đầu vào hoặc đầu ra hình ảnh.","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"Cấu hình giá theo từng công cụ ($/1K lần gọi). Mô hình tính phí theo request không phát sinh thêm phí công cụ.","Configure pricing ratios for a specific model.":"Cấu hình tỷ lệ định giá cho một mô hình cụ thể.","Configure rate limiting rules for a specific user group.":"Cấu hình quy tắc giới hạn tốc độ cho một nhóm người dùng cụ thể.","Configure routes":"Cấu hình route","Configure task pricing":"Cấu hình giá tác vụ","Configure the connection and models, then create the channel.":"Cấu hình kết nối và mô hình, sau đó tạo kênh.","Configure the ratio for this group.":"Cấu hình tỷ lệ cho nhóm này.","Configure upstream providers and routing.":"Cấu hình nhà cung cấp upstream và định tuyến.","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"Cấu hình tích hợp thanh toán Waffo Pancake (hosted checkout) cho nạp tiền theo USD","Configure Waffo payment aggregation platform integration":"Cấu hình tích hợp nền tảng tổng hợp thanh toán Waffo","Configure your account behavior preferences":"Cấu hình tùy chọn hành vi tài khoản của bạn","Configure your account preferences and integrations":"Cấu hình các tùy chọn và tích hợp tài khoản của bạn","Configured":"Đã cấu hình","Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.":"Được lưu dưới dạng JSON PayMethods. Giá trị type quyết định luồng thanh toán sẽ dùng: stripe cho Stripe, waffo_pancake cho Waffo Pancake, các giá trị khác được gửi tới Epay dưới dạng tham số type.","Configured routes and latency checks":"Tuyến đã cấu hình và kiểm tra độ trễ","Confirm":"Xác nhận","Confirm Action":"Xác nhận hành động","Confirm and enable":"Xác nhận và bật","Confirm Batch Update":"Xác nhận Cập nhật Hàng loạt","Confirm Billing Conflicts":"Xác nhận xung đột thanh toán","Confirm both your current and new email addresses to finish this change.":"Xác nhận cả email hiện tại và email mới để hoàn tất thay đổi.","Confirm changes":"Xác nhận thay đổi","Confirm Changes":"Xác nhận thay đổi","Confirm Cleanup":"Xác nhận dọn dẹp","Confirm cleanup of inactive disk cache?":"Xác nhận dọn dẹp bộ nhớ đệm đĩa không hoạt động?","Confirm clearing all channel affinity cache":"Xác nhận xóa toàn bộ bộ nhớ đệm ưu tiên kênh","Confirm clearing cache for this rule":"Xác nhận xóa bộ nhớ đệm của quy tắc này","Confirm compliance":"Xác nhận tuân thủ","Confirm compliance terms":"Xác nhận điều khoản tuân thủ","Confirm Creem Purchase":"Xác nhận mua Creem","Confirm delete":"Xác nhận xóa","Confirm disable":"Xác nhận vô hiệu hóa","Confirm email":"Xác nhận email","Confirm enable":"Xác nhận kích hoạt","Confirm invalidate":"Xác nhận vô hiệu hóa","Confirm log cleanup":"Xác nhận dọn dẹp nhật ký","Confirm log file cleanup?":"Xác nhận dọn dẹp tệp nhật ký?","Confirm model changes":"Xác nhận thay đổi mô hình","Confirm New Password":"Xác nhận mật khẩu mới","Confirm password":"Xác nhận mật khẩu","Confirm Payment":"Xác nhận Thanh toán","Confirm Selection":"Xác nhận lựa chọn","Confirm settings and finish setup":"Xác nhận cài đặt và hoàn tất thiết lập","confirm that I bear legal responsibility arising from deployment":"xác nhận rằng tôi chịu trách nhiệm pháp lý phát sinh từ việc triển khai","Confirm the final prices and removed settings. Metadata and channel access are not changed.":"Xác nhận giá cuối cùng và cấu hình sẽ bị xóa. Siêu dữ liệu và quyền truy cập kênh không thay đổi.","Confirm the verification code sent to your new email address.":"Nhập mã xác minh đã gửi đến địa chỉ email mới.","Confirm Unbind":"Xác nhận hủy liên kết","Confirm usage reset":"Xác nhận đặt lại mức dùng","Confirm your identity before accessing this sensitive action.":"Xác minh danh tính trước khi thực hiện thao tác nhạy cảm này.","Confirm your identity before changing the account {{username}}.":"Xác minh danh tính trước khi thay đổi tài khoản {{username}}.","Confirm your identity before creating an administrator account.":"Xác minh danh tính trước khi tạo tài khoản quản trị viên.","Confirm your identity before permanently deleting the account {{username}}.":"Xác minh danh tính trước khi xóa vĩnh viễn tài khoản {{username}}.","Confirm your identity before removing this Passkey from your account.":"Hãy xác minh danh tính trước khi gỡ Passkey khỏi tài khoản.","Confirm your identity before unbinding {{provider}} from this user.":"Xác minh danh tính trước khi hủy liên kết {{provider}} khỏi người dùng này.","Confirm your identity with Two-factor Authentication before registering a Passkey.":"Hãy xác minh danh tính bằng Xác thực hai yếu tố trước khi đăng ký Passkey.","Confirmed at {{time}} by user #{{userId}}":"Được xác nhận lúc {{time}} bởi người dùng #{{userId}}","Confirmed payment compliance":"Đã xác nhận tuân thủ thanh toán","Confirmed removal of Passkey domains: {{domains}}; affected {{known}}; unknown {{unknown}}":"Đã xác nhận xóa miền khóa truy cập: {{domains}}; bị ảnh hưởng {{known}}; chưa rõ miền {{unknown}}","Confirming the account linked to your profile.":"Đang xác minh tài khoản đã liên kết với hồ sơ của bạn.","Conflict":"Xung đột","Connect":"Kết nối","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"Kết nối qua OpenAI, Claude, Gemini và các tuyến API tương thích khác","Connect to 360 model services":"Kết nối với dịch vụ mô hình 360","Connect to Alibaba Cloud Bailian model services":"Kết nối với dịch vụ mô hình Alibaba Cloud Bailian","Connect to Cohere model services":"Kết nối với dịch vụ mô hình Cohere","Connect to Coze bots":"Kết nối với các bot Coze","Connect to DeepSeek model services":"Kết nối với dịch vụ mô hình DeepSeek","Connect to Dify applications and workflows":"Kết nối với các ứng dụng và quy trình làm việc Dify","Connect to Doubao Seedance video and Seedream image generation through Volcengine Ark":"Kết nối tạo video Doubao Seedance và tạo ảnh Seedream qua Volcengine Ark","Connect to FastGPT applications":"Kết nối với các ứng dụng FastGPT","Connect to iFlytek Spark model services":"Kết nối với dịch vụ mô hình iFlytek Spark","Connect to Jimeng image and video generation services":"Kết nối với dịch vụ tạo ảnh và video Jimeng","Connect to Jina embedding and reranking services":"Kết nối với dịch vụ nhúng vectơ và xếp hạng lại của Jina","Connect to Kling video generation services":"Kết nối với dịch vụ tạo video Kling","Connect to LingYiWanWu model services":"Kết nối với dịch vụ mô hình LingYiWanWu","Connect to local or self-hosted Ollama models":"Kết nối với các mô hình Ollama chạy cục bộ hoặc tự lưu trữ","Connect to MiniMax model services":"Kết nối với dịch vụ mô hình MiniMax","Connect to Mistral AI model services":"Kết nối với dịch vụ mô hình Mistral AI","Connect to model services through a Sub2API gateway":"Kết nối với dịch vụ mô hình qua cổng Sub2API","Connect to models through the Google Gemini API":"Kết nối với các mô hình qua API Google Gemini","Connect to Moonshot AI model services":"Kết nối với dịch vụ mô hình Moonshot AI","Connect to New API model services with support for multiple task plugins":"Kết nối dịch vụ mô hình qua New API, hỗ trợ nhiều plugin tác vụ","Connect to OpenAI models deployed on Azure":"Kết nối với các mô hình OpenAI được triển khai trên Azure","Connect to OpenAI Sora video generation services":"Kết nối với dịch vụ tạo video OpenAI Sora","Connect to Perplexity model services":"Kết nối với dịch vụ mô hình Perplexity","Connect to self-hosted models served by SGLang":"Kết nối mô hình tự lưu trữ bằng SGLang","Connect to self-hosted models served by vLLM":"Kết nối mô hình tự triển khai bằng vLLM","Connect to self-hosted models served by Xinference":"Kết nối với các mô hình tự lưu trữ bằng Xinference","Connect to SiliconFlow model inference services":"Kết nối với dịch vụ suy luận mô hình SiliconFlow","Connect to Submodel model services":"Kết nối với dịch vụ mô hình Submodel","Connect to Tencent Hunyuan model services":"Kết nối với dịch vụ mô hình Tencent Hunyuan","Connect to the Anthropic API or compatible services":"Kết nối với API Anthropic hoặc các dịch vụ tương thích","Connect to the OpenAI API or compatible services":"Kết nối với API OpenAI hoặc các dịch vụ tương thích","Connect to Vidu video generation services":"Kết nối với dịch vụ tạo video Vidu","Connect to Volcengine Ark model services":"Kết nối với dịch vụ mô hình Volcengine Ark","Connect to xAI Grok model services":"Kết nối với dịch vụ mô hình xAI Grok","Connected to io.net service normally.":"Đã kết nối bình thường tới dịch vụ io.net.","Connection & Models":"Kết nối và mô hình","Connection closed":"Kết nối đã đóng","Connection error":"Lỗi kết nối","Connection failed":"Kết nối thất bại","Connection info detected in clipboard":"Đã phát hiện thông tin kết nối trong bảng tạm","Connection info filled in":"Đã điền thông tin kết nối","Connection settings":"Cấu hình kết nối","Connection settings changed. Fetch models again to refresh the list.":"Cấu hình kết nối đã thay đổi. Hãy lấy lại danh sách mô hình.","Connection successful":"Kết nối thành công","Console":"Bảng điều khiển","Console area":"Khu vực bảng điều khiển","Console Area":"Khu vực bảng điều khiển","Console Content":"Nội dung bảng điều khiển","Consume":"Tiêu thụ","Consumed in the last 24 hours":"Đã tiêu thụ trong 24 giờ qua","Container":"Thùng chứa","Container name":"Tên container","Containers":"Các thùng chứa","Contains":"Chứa","Contains Match":"Khớp Chứa","Content":"Nội dung","Content displayed on the home page (supports Markdown)":"Nội dung hiển thị trên trang chủ (hỗ trợ Markdown)","Content not found.":"Không tìm thấy nội dung.","Content not modified!":"Nội dung không được thay đổi!","Content width":"Chiều rộng nội dung","Context":"Ngữ cảnh","Continue":"Tiếp tục","Continue account binding":"Tiếp tục liên kết tài khoản","Continue with {{name}}":"Tiếp tục với {{name}}","Continue with an account already linked to your profile.":"Tiếp tục bằng tài khoản đã liên kết với hồ sơ của bạn.","Continue with Discord":"Tiếp tục với Discord","Continue with GitHub":"Tiếp tục với GitHub","Continue with LinuxDO":"Tiếp tục với LinuxDO","Continue with OIDC":"Tiếp tục với OIDC","Continue with Telegram":"Tiếp tục với Telegram","Continue with WeChat":"Tiếp tục với WeChat","Contract review, compliance, summarisation":"Rà soát hợp đồng, tuân thủ, tóm tắt","Control which models are exposed and which groups may use them.":"Kiểm soát mô hình được hiển thị và nhóm nào có thể sử dụng chúng.","Controls catalog visibility. Channel availability is configured separately.":"Kiểm soát hiển thị trong danh mục. Khả năng sử dụng kênh được cấu hình riêng.","Controls how much the model thinks before answering":"Điều chỉnh mức suy luận trước khi trả lời","Controls randomness and creativity":"Điều chỉnh độ ngẫu nhiên và sáng tạo","Controls visibility in the model square. Channel status and existing API access are unchanged.":"Kiểm soát hiển thị trong kho mô hình, không ảnh hưởng trạng thái kênh và quyền gọi API hiện có.","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"Kiểm soát xem liệu có yêu cầu xác minh người dùng (sinh trắc học/mã PIN) trong các luồng Passkey hay không.","Conversation cleared":"Đã xóa cuộc trò chuyện","Conversion rate from USD to your custom currency":"Tỷ giá chuyển đổi từ USD sang đơn vị tiền tệ tùy chỉnh của bạn","Convert reasoning_content to tag in content":"Chuyển đổi reasoning_content thành thẻ trong nội dung","Convert string to lowercase":"Chuyển chuỗi sang chữ thường","Convert string to uppercase":"Chuyển chuỗi sang chữ hoa","Convert to expression":"Chuyển sang biểu thức","Converter":"Bộ chuyển đổi","Converter does not match incoming path":"Bộ chuyển đổi không khớp path đầu vào","Converter is not registered":"Bộ chuyển đổi chưa được đăng ký","Copied":"Đã sao chép","Copied {{count}} key(s)":"Đã sao chép {{count}} khóa","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"Đã sao chép kênh (ID nguồn: {{sourceId}}) thành {{name}} (ID mới: {{id}})","Copied to clipboard":"Đã sao chép vào bộ nhớ tạm","Copied: {{model}}":"Đã sao chép: {{model}}","Copied!":"Đã sao chép!","Copy":"Sao chép","Copy {{field}}":"Sao chép {{field}}","Copy {{name}} pricing":"Sao chép giá của {{name}}","Copy a request header":"Sao chép header yêu cầu","Copy All":"Sao chép tất cả","Copy all backup codes":"Sao chép tất cả mã dự phòng","Copy All Codes":"Sao chép Tất cả Mã","Copy all models":"Sao chép tất cả mô hình","Copy API key":"Sao chép khóa API","Copy API URL":"Sao chép URL API","Copy base URL":"Sao chép URL cơ sở","Copy billing expression":"Sao chép biểu thức tính phí","Copy callback URL":"Sao chép URL callback","Copy Channel":"Sao chép kênh","Copy code":"Sao chép mã","Copy Connection Info":"Sao chép thông tin kết nối","Copy endpoint path":"Sao chép đường dẫn điểm cuối","Copy failed":"Sao chép thất bại","Copy Field":"Sao chép trường","Copy Header":"Sao chép tiêu đề","Copy homepage URL":"Sao chép URL trang chủ","Copy Key":"Sao chép khóa","Copy Link":"Sao chép liên kết","Copy model name":"Sao chép tên mô hình","Copy model names":"Sao chép tên mô hình","Copy plugin key":"Sao chép mã định danh plugin","Copy prompt":"Sao chép prompt","Copy ready-to-run curl":"Sao chép curl có thể chạy ngay","Copy redemption code":"Sao chép mã đổi thưởng","Copy redirect URL":"Sao chép URL chuyển hướng","Copy referral link":"Sao chép liên kết giới thiệu","Copy Request Header":"Sao chép header yêu cầu","Copy secret key":"Sao chép khóa bí mật","Copy selected codes":"Sao chép các mã đã chọn","Copy selected keys":"Sao chép các khóa đã chọn","Copy selected models":"Sao chép các mô hình đã chọn","Copy selected models separated by commas (e.g. a,b)":"Sao chép các mô hình đã chọn, phân tách bằng dấu phẩy (ví dụ: a,b)","Copy source field to target field":"Sao chép trường nguồn sang trường đích","Copy the key and paste it here":"Sao chép khóa và dán vào đây","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"Sao chép prompt này và gửi cho LLM (ví dụ: ChatGPT / Claude) để được hỗ trợ thiết kế biểu thức tính phí.","Copy this token now. It will not be shown again.":"Hãy sao chép token này ngay. Nó sẽ không được hiển thị lại.","Copy to clipboard":"Sao chép vào bảng tạm","Copy token":"Sao chép mã thông báo","Copy URL":"Sao chép URL","Copying...":"Đang sao chép...","Copywriting, ad creative, SEO":"Viết copy, sáng tạo quảng cáo, SEO","Core concepts":"Khái niệm chính","Core Configuration":"Cấu hình chính","Core Features":"Tính năng cốt lõi","Core pricing":"Giá cốt lõi","Correct the invalid settings before saving.":"Hãy sửa các cài đặt không hợp lệ trước khi lưu.","Cost":"Chi phí","Cost = 10 × 0.3 = 3":"Chi phí = 10 × 0.3 = 3","Cost = 10 × 0.8 = 8":"Chi phí = 10 × 0.8 = 8","Cost = 10 × 1.0 = 10":"Chi phí = 10 × 1.0 = 10","Cost = model price × that one ratio. Nothing else from the group settings enters the formula.":"Chi phí = giá mô hình × đúng một hệ số đó. Không có mục nào khác trong cài đặt nhóm tham gia công thức.","Cost calculator":"Ước tính chi phí","Creem webhook is not configured":"Chưa cấu hình webhook Creem","CreemProductId is not configured for this plan":"Gói này chưa cấu hình CreemProductId","Cost in {{currency}} per request, regardless of tokens used.":"Chi phí mỗi yêu cầu bằng {{currency}}, không phụ thuộc số token sử dụng.","Cost in USD per request, regardless of tokens used.":"Chi phí bằng USD cho mỗi yêu cầu, bất kể số lượng token được sử dụng.","Cost Tracking":"Theo dõi chi phí","Could not fetch the plugin source from this browser. The host may block cross-origin requests or be unreachable.":"Không thể tải mã nguồn plugin từ trình duyệt này. Máy chủ có thể chặn yêu cầu cross-origin hoặc không truy cập được.","Could not fetch this URL from the browser. The host may block cross-origin requests or be unreachable. Download the file and paste its source below.":"Không thể tải URL này từ trình duyệt. Máy chủ có thể chặn yêu cầu cross-origin hoặc không truy cập được. Hãy tải tệp về và dán mã nguồn vào bên dưới.","Could not load the changelog":"Không thể tải nhật ký thay đổi","Could not load this source":"Không thể tải nguồn này","Count":"Số lượng","Count must be between {{min}} and {{max}}":"Số lượng phải nằm trong khoảng từ {{min}} đến {{max}}.","Counters and averages cover the period since the upstream metrics were initialized or reset.":"Bộ đếm và giá trị trung bình được tính từ khi chỉ số máy chủ nguồn được khởi tạo hoặc đặt lại.","Coze":"Coze","CPU":"CPU","CPU Threshold (%)":"Ngưỡng CPU (%)","Create":"Tạo","Create a copy of:":"Tạo bản sao của:","Create a key for your app or service":"Tạo khóa cho ứng dụng hoặc dịch vụ của bạn","Create a new user group to configure ratio overrides for.":"Tạo một nhóm người dùng mới để cấu hình ghi đè tỷ lệ.","Create access token":"Tạo token truy cập","Create account":"Tạo tài khoản","Create aliases for users":"Tạo bí danh cho người dùng","Create an account":"Tạo tài khoản","Create an API key to unlock the real request":"Tạo khóa API để mở yêu cầu thật","Create and review invite or credit codes.":"Tạo và xem xét mã mời hoặc mã tín dụng.","Create API Key":"Tạo Khóa API","Create API token":"Tạo mã thông báo API","Create API token “{{name}}”":"Tạo mã thông báo API “{{name}}”","Create cache":"Tạo bộ nhớ đệm","Create cache ratio":"Tạo tỷ lệ bộ nhớ đệm","Create Channel":"Tạo Kênh","Create channels or edit keys, base URLs, and overrides.":"Tạo kênh hoặc chỉnh sửa khóa, URL cơ sở và quy tắc ghi đè.","Create Code":"Tạo Mã","Create credentials for the root user":"Tạo thông tin đăng nhập cho tài khoản quản trị","Create deployment":"Tạo triển khai","Create metadata":"Tạo siêu dữ liệu","Create Model":"Tạo Mô hình","Create multiple API keys at once (random suffix will be added to names)":"Tạo nhiều khóa API cùng lúc (hậu tố ngẫu nhiên sẽ được thêm vào tên)","Create multiple channels from multiple keys":"Tạo nhiều kênh từ nhiều khóa","Create multiple redemption codes at once (1-100)":"Tạo nhiều mã đổi thưởng cùng lúc (1-100)","Create new subscription plan":"Tạo gói đăng ký mới","Create or update frequently asked questions for users":"Tạo hoặc cập nhật các câu hỏi thường gặp cho người dùng","Create or update system announcements for the dashboard":"Tạo hoặc cập nhật thông báo hệ thống cho bảng điều khiển","Create Plan":"Tạo gói","Create Prefill Group":"Tạo Nhóm Điền Sẵn","Create Provider":"Tạo nhà cung cấp","Create Redemption Code":"Tạo mã đổi thưởng","Create request parameter override rules with a visual editor or raw JSON.":"Tạo quy tắc ghi đè tham số yêu cầu bằng trình soạn trực quan hoặc JSON thô.","Create request parameter override rules without editing raw JSON.":"Tạo quy tắc ghi đè tham số yêu cầu mà không cần sửa JSON thô.","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"Tạo các gói có thể tái sử dụng gồm các mô hình, thẻ, điểm cuối và nhóm người dùng để tăng tốc cấu hình ở những nơi khác trong bảng điều khiển.","Create succeeded":"Tạo thành công","Create Vendor":"Tạo Nhà cung cấp","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"Tạo nhóm đầu tiên của bạn để dùng lại các lựa chọn mô hình, thẻ hoặc điểm cuối ở bất cứ đâu trên bảng điều khiển.","Create, edit, and delete API keys.":"Tạo, chỉnh sửa và xóa khóa API.","Create, edit, and delete deployments, and test connections.":"Tạo, chỉnh sửa, xóa triển khai và kiểm tra kết nối.","Create, edit, and delete prefill groups.":"Tạo, chỉnh sửa và xóa nhóm điền sẵn.","Create, edit, and delete redemption codes.":"Tạo, chỉnh sửa và xóa mã đổi thưởng.","Create, edit, disable, and delete users, and reset their security settings.":"Tạo, chỉnh sửa, vô hiệu hóa, xóa người dùng và đặt lại cài đặt bảo mật của họ.","Create, revoke, and audit API tokens.":"Tạo, thu hồi và kiểm toán token API.","Created":"Đã tạo","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"Đã tạo {{count}} mã đổi thưởng tên {{name}} (mỗi mã {{quota}})","Created {{time}}":"Tạo lúc {{time}}","Custom reset cycle must be greater than 0 seconds":"Chu kỳ đặt lại tùy chỉnh phải lớn hơn 0 giây","Created a custom OAuth provider":"Đã tạo nhà cung cấp OAuth tùy chỉnh","Created a deployment":"Đã tạo một triển khai","Created a model":"Đã tạo một mô hình","Created a prefill group":"Đã tạo một nhóm điền sẵn","Created a subscription plan":"Đã tạo một gói đăng ký","Created a vendor":"Đã tạo một nhà cung cấp","Created an access token":"Đã tạo token truy cập","Created At":"Ngày tạo","Daily check-in, received {{quota}}":"Điểm danh hằng ngày, nhận {{quota}}","Created channel {{name}} (type {{type}}, count {{count}})":"Đã tạo kênh {{name}} (loại {{type}}, số lượng {{count}})","Created user {{username}} (role {{role}})":"Đã tạo người dùng {{username}} (vai trò {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"Tạo một sản phẩm Pancake trong cửa hàng đã lưu bằng tiêu đề và giá của gói này. Trước tiên cần cấu hình đầy đủ Waffo Pancake trong cài đặt Thanh toán.","Creating...":"Đang tạo...","Creation failed":"Tạo thất bại","Credential refreshed":"Đã làm mới thông tin xác thực","Credentials":"Thông tin xác thực","Credentials verification failed":"Xác minh thông tin xác thực thất bại","Credentials verification failed — double-check Merchant ID and API private key.":"Xác minh thông tin xác thực thất bại — hãy kiểm tra lại Merchant ID và khóa riêng API.","credit":"credit","Credit remaining":"Tín dụng còn lại","Creem API key (leave blank unless updating)":"Khóa API Creem (để trống trừ khi cập nhật)","Creem Gateway":"Cổng Creem","Creem Payment":"Thanh toán Creem","Creem product ID from your Creem dashboard.":"ID sản phẩm Creem từ bảng điều khiển Creem của bạn.","Creem products must be a JSON array":"Sản phẩm Creem phải là mảng JSON","Database connection failed":"Kết nối cơ sở dữ liệu thất bại","Database error, please contact the administrator":"Lỗi cơ sở dữ liệu, vui lòng liên hệ quản trị viên","Cross-group":"Liên nhóm","Cross-group retry":"Thử lại liên nhóm","Cumulative usage":"Mức sử dụng tích lũy","Currency":"Tiền tệ","Currency & Display":"Tiền tệ & hiển thị","Current":"Hiện tại","Current Balance":"Số Dư Hiện Tại","Current Billing":"Thanh toán hiện tại","Current Cache Size":"Kích thước bộ nhớ đệm hiện tại","Current domain":"Tên miền hiện tại","Current domain: {{domain}}":"Tên miền hiện tại: {{domain}}","Current email verification code":"Mã xác minh email hiện tại","Current email: {{email}}. Enter a new email to change.":"Email hiện tại: {{email}}. Nhập email mới để thay đổi.","Current exchange rate: 1 USD = {{rate}} {{currency}}":"Tỷ giá hiện tại: 1 USD = {{rate}} {{currency}}","Current key":"Khóa hiện tại","Current key disable requested":"Đã yêu cầu vô hiệu hóa khóa hiện tại","Current legacy JSON is invalid, cannot append":"JSON định dạng cũ hiện tại không hợp lệ, không thể thêm","Current Level Only":"Chỉ cấp hiện tại","Current load":"Tải hiện tại","Current models for the longest channel in this tag. May not include all models from all channels.":"Các mô hình hiện tại cho kênh dài nhất trong thẻ này. Có thể không bao gồm tất cả các mô hình từ tất cả các kênh.","Current models: {{count}}":"Mô hình hiện tại: {{count}}","Current month":"Tháng này","Current Password":"Mật khẩu hiện tại","Current password is incorrect.":"Mật khẩu hiện tại không đúng.","Current period price":"Giá khung giờ hiện tại","Current Price":"Giá hiện tại","Default group":"Nhóm mặc định","Current pricing conditions":"Điều kiện tính giá hiện tại","Current quota":"Hạn mức hiện tại","Current site: {{origin}}":"Trang hiện tại: {{origin}}","Current time":"Thời gian hiện tại","Current token":"Token hiện tại","Current total = used + remaining. Changing the remaining quota updates the total and percentage.":"Tổng hiện tại = đã dùng + còn lại. Thay đổi hạn mức còn lại sẽ cập nhật tổng và tỷ lệ đã dùng.","Current total quota":"Tổng hạn mức hiện tại","Current v{{from}} → install v{{to}}":"Hiện tại v{{from}} → cài đặt v{{to}}","Current value":"Giá trị hiện tại","Current Value":"Present value","Current vendor":"Nhà cung cấp hiện tại","Current version":"Phiên bản hiện tại","Current:":"Hiện tại:","Custom":"Tùy chỉnh","Custom (overrides factory {{version}})":"Tùy chỉnh (ghi đè bản tích hợp {{version}})","Custom (seconds)":"Tùy chỉnh (giây)","Custom Amount":"Số tiền tùy chỉnh","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"URL cơ sở API tùy chỉnh. Đối với các kênh chính thức, New API có địa chỉ tích hợp sẵn. Chỉ điền thông tin này cho các trang proxy của bên thứ ba hoặc các điểm cuối đặc biệt. Không thêm /v1 hoặc dấu gạch chéo cuối cùng.","Custom API base URL. Leave empty to use provider default.":"URL cơ sở API tùy chỉnh. Để trống để sử dụng mặc định của nhà cung cấp.","Custom Currency":"Tiền tệ tùy chỉnh","Custom Currency Symbol":"Ký hiệu tiền tệ tùy chỉnh","Custom currency symbol is required":"Ký hiệu tiền tệ tùy chỉnh là bắt buộc","Custom database driver detected.":"Đã phát hiện trình điều khiển cơ sở dữ liệu tùy chỉnh.","Custom endpoints":"Điểm cuối tùy chỉnh","Custom Epay method":"Phương thức Epay tùy chỉnh","Custom Error Response":"Phản hồi lỗi tùy chỉnh","Custom Home Page":"Trang chủ tùy chỉnh","Custom message shown when access is denied":"Thông báo tùy chỉnh hiển thị khi truy cập bị từ chối","Custom model (comma-separated)":"Mô hình tùy chỉnh (phân tách bằng dấu phẩy)","Custom model icon":"Biểu tượng mô hình tùy chỉnh","Custom module":"Module tùy chỉnh","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"Các hệ số nhân tùy chỉnh khi các nhóm người dùng cụ thể sử dụng các nhóm token cụ thể. Ví dụ: Người dùng VIP được hưởng tỷ lệ 0.9x khi sử dụng các token thuộc nhóm \\"edit_this\\".","Custom OAuth":"OAuth tùy chỉnh","Custom OAuth Providers":"Nhà cung cấp OAuth tùy chỉnh","Custom Seconds":"Giây tùy chỉnh","Custom sidebar section":"Phần thanh bên tùy chỉnh","Custom task plugin setting updated":"Đã cập nhật cài đặt plugin tác vụ tùy chỉnh","Custom Time Range":"Khoảng thời gian tùy chỉnh","Custom Zoom":"Thu phóng tùy chỉnh","Customize sidebar display content":"Tùy chỉnh nội dung hiển thị thanh bên","Daily":"Hàng ngày","Daily Check-in":"Điểm danh hàng ngày","Daily token usage by model across the past few weeks":"Sử dụng token theo mô hình hàng ngày trong vài tuần qua","Daily token usage by model across the past month":"Sử dụng token hàng ngày của từng mô hình trong tháng qua","Daily token usage by model over the past month":"Sử dụng token theo mô hình hàng ngày trong tháng qua","Daily uptime over the last 30 days":"Thời gian hoạt động hàng ngày trong 30 ngày qua","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"Thời gian hoạt động hàng ngày; {{incidents}} sự cố tổng cộng {{minutes}} phút","Dark":"Tối","Dashboard":"Bảng điều khiển","Dashboard Preferences":"Tùy chọn bảng điều khiển","Dashboards, tokens, and usage analytics.":"Bảng điều khiển, token và phân tích sử dụng.","Data Dashboard":"Bảng dữ liệu","Data directory:":"Thư mục dữ liệu:","Data is stored locally on this device. Use system backups to keep a safe copy.":"Dữ liệu được lưu trữ cục bộ trên thiết bị này. Sử dụng tính năng sao lưu hệ thống để giữ một bản","Data management and log viewing":"Quản lý dữ liệu và xem nhật ký","Data retention":"Lưu giữ dữ liệu","Database":"Cơ sở dữ liệu","Database check":"Kiểm tra cơ sở dữ liệu","Date and time when this announcement should be displayed":"The date and time this notification should be displayed","Date Range":"Khoảng thời gian","Day":"Ngày","Day of month":"Ngày trong tháng","days":"ngày","Days to Retain":"Số ngày giữ lại","decides the top-up ratio, which groups the user can pick for tokens, and whether an override ratio applies.":"quyết định hệ số nạp tiền, các nhóm người dùng có thể chọn cho token, và có áp dụng hệ số ghi đè hay không.","decides which channels are used and which base ratio applies.":"quyết định dùng kênh nào và áp dụng hệ số cơ bản nào.","Declared capabilities":"Quyền được khai báo","Decrease quota for user “{{name}}”":"Giảm hạn mức cho người dùng “{{name}}”","Decrease user quota":"Giảm hạn mức người dùng","Decreased user quota by {{quota}}":"Đã giảm hạn mức người dùng {{quota}}","Deducted by subscription":"Khấu trừ bởi gói đăng ký","DeepSeek":"DeepSeek","default":"mặc định","Default":"Mặc định","Default / range":"Mặc định / khoảng","Default administrator permissions can be overridden for this user.":"Có thể ghi đè quyền quản trị viên mặc định cho người dùng này.","Default API address":"Địa chỉ API mặc định","Default API Version":"Phiên bản API mặc định","Default API Version *":"Phiên bản API mặc định *","Default API version for this channel":"Phiên bản API mặc định cho kênh này","Default base URL":"Base URL mặc định","Default Bearer":"Bearer mặc định","Default Collapse Sidebar":"Mặc định Thu gọn Thanh bên","Default consumption chart":"Biểu đồ tiêu thụ mặc định","Default Max Tokens":"Tokens Tối đa Mặc định","Default model call chart":"Biểu đồ lượt gọi mô hình mặc định","Default placeholder":"Biểu tượng mặc định","Default range":"Khoảng mặc định","Default reminder threshold":"Ngưỡng nhắc nhở mặc định","Default Responses API version, if empty, will use the API version above":"Phiên bản API phản hồi mặc định, nếu để trống, sẽ sử dụng phiên bản API ở trên","Deleted {{count}} auto-disabled keys":"Đã xóa {{count}} khóa bị tự động tắt","Default session lifetime (seconds)":"Thời hạn phiên mặc định (giây)","Default system prompt for this channel":"Lời nhắc hệ thống mặc định cho kênh này","Default time granularity":"Độ chi tiết thời gian mặc định","Default to auto groups":"Mặc định là nhóm tự động","Default TTL (seconds)":"TTL mặc định (giây)","Defaults to \\"OIDC\\" if left blank":"Mặc định là \\"OIDC\\" nếu để trống","Defaults to the wallet page when empty":"Để trống sẽ dùng trang ví mặc định","Define API endpoints for this model (JSON format)":"Định nghĩa các điểm cuối API cho mô hình này (định dạng JSON)","Define endpoint mappings for each provider.":"Định nghĩa ánh xạ điểm cuối cho mỗi nhà cung cấp.","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"Định nghĩa quy tắc theo nhóm để thêm, xóa hoặc nối các nhóm có thể chọn cho các nhóm người dùng cụ thể.","Degraded performance recently":"Hiệu năng gần đây bị giảm","Delete":"Xóa","Delete (":"Xóa (","Delete {{count}} API key(s)?":"Xóa {{count}} khóa API?","Delete {{count}} models?":"Xóa {{count}} mô hình?","Delete {{count}} redemption codes?":"Xóa {{count}} mã quy đổi?","Delete {{count}} selected vendor records? Vendors with linked models cannot be deleted.":"Xóa {{count}} bản ghi nhà cung cấp đã chọn? Không thể xóa nhà cung cấp còn mô hình liên kết.","Delete {{count}} stale instance records? Online instances will not be deleted.":"Xóa {{count}} bản ghi phiên bản mất kết nối? Các phiên bản đang trực tuyến sẽ không bị xóa.","Delete a runtime request header":"Xóa header yêu cầu runtime","Delete Account":"Xóa tài khoản","Deployment region cannot be empty":"Khu vực triển khai không được để trống","Deployment region must be valid JSON, for example {{example}}":"Khu vực triển khai phải là JSON hợp lệ, ví dụ {{example}}","Deployment region must include a default field":"Khu vực triển khai phải có trường default","Delete active custom version":"Xóa phiên bản tùy chỉnh đang hoạt động","Delete All Disabled":"Xóa Tất Cả Đã Tắt","Delete All Disabled Channels?":"Xóa tất cả kênh đã vô hiệu hóa?","Delete all stale":"Xóa tất cả mất kết nối","Delete API token":"Xóa mã thông báo API","Delete API token “{{name}}”":"Xóa mã thông báo API “{{name}}”","Delete Auto-Disabled":"Xóa Tự động vô hiệu hóa","Delete Channel":"Xóa Kênh","Delete Channels?":"Xóa các kênh?","Delete completed tasks matching the current filters across all pages? Active tasks and the latest run of each task type are retained for scheduling. This cannot be undone.":"Xóa các tác vụ đã kết thúc khớp với bộ lọc hiện tại trên tất cả các trang? Các tác vụ đang chờ hoặc đang chạy và bản ghi mới nhất của mỗi loại được giữ lại để lập lịch. Không thể hoàn tác thao tác này.","Delete condition":"Xóa điều kiện","Delete Condition":"Xóa điều kiện","Delete failed":"Xóa thất bại","Delete failed models":"Xóa các mô hình thất bại","Delete failed models ({{count}})":"Xóa các mô hình thất bại ({{count}})","Delete Field":"Xóa trường","Delete group":"Xóa nhóm","Delete Header":"Xóa tiêu đề","Delete Invalid":"Xóa không hợp lệ","Delete invalid codes":"Xóa mã không hợp lệ","Delete invalid codes (used/disabled/expired)":"Xóa mã không hợp lệ (đã sử dụng/đã vô hiệu hóa/đ","Delete invalid redemption codes":"Xóa mã đổi thưởng không hợp lệ","Delete Invalid Redemption Codes?":"Xóa Mã đổi thưởng không hợp lệ?","Delete logs":"Xóa nhật ký","Delete mapping":"Xóa ánh xạ","Delete metadata and custom pricing for {{count}} models?":"Xóa thông tin và giá tùy chỉnh của {{count}} mô hình?","Delete metadata for \\"{{name}}\\"? Pricing and channel configurations will be retained.":"Xóa siêu dữ liệu của “{{name}}”? Giá và cấu hình kênh sẽ được giữ lại.","Delete metadata for \\"{{name}}\\"? Pricing will be retained.":"Xóa thông tin mô hình \\"{{name}}\\"? Giá sẽ được giữ nguyên.","Delete metadata for {{count}} models? Pricing will be retained.":"Xóa thông tin của {{count}} mô hình? Giá sẽ được giữ nguyên.","Delete Model":"Xóa Mô hình","Delete model \\"{{name}}\\"?":"Xóa mô hình \\"{{name}}\\"?","Delete Models?":"Xóa mô hình?","Delete plugin version?":"Xóa phiên bản plugin?","Delete Provider":"Xóa nhà cung cấp","Delete Request Header":"Xóa header yêu cầu","Delete rule":"Xóa quy tắc","Delete Rule":"Xóa quy tắc","Delete selected API keys":"Xóa các khóa API đã chọn","Delete selected channels":"Xóa các kênh đã chọn","Delete selected models":"Xóa các mô hình đã chọn","Delete selected redemption codes":"Xóa mã quy đổi đã chọn","Delete session rule “{{name}}”? Save your changes to apply the removal.":"Xóa quy tắc phiên “{{name}}”? Lưu thay đổi để áp dụng việc xóa.","Delete stale instance":"Xóa phiên bản mất kết nối","Delete stale instance \\"{{name}}\\"? If it has reported again, it will not be deleted.":"Xóa phiên bản mất kết nối \\"{{name}}\\"? Nếu phiên bản này đã báo cáo lại, nó sẽ không bị xóa.","Delete stale instances":"Xóa các phiên bản mất kết nối","Delete vendor record":"Xóa bản ghi nhà cung cấp","Delete vendors":"Xóa nhà cung cấp","Deleted":"Đã xóa","Deleted \\"{{name}}\\"":"Đã xóa \\"{{name}}\\"","Deleted ({{id}})":"Đã xóa ({{id}})","Deleted {{count}} failed models":"Đã xóa {{count}} mô hình thất bại","Deleted {{count}} historical system tasks":"Đã xóa {{count}} tác vụ hệ thống trong lịch sử","Deleted {{count}} stale instances":"Đã xóa {{count}} phiên bản mất kết nối","Deleted a custom OAuth provider":"Đã xóa nhà cung cấp OAuth tùy chỉnh","Deleted a deployment":"Đã xóa một triển khai","Deleted a model":"Đã xóa một mô hình","Deleted a passkey":"Đã xóa một passkey","Descending":"Giảm dần","Disable tag grouping to drag channels":"Tắt nhóm theo thẻ để kéo kênh","Disabled {{count}} keys":"Đã tắt {{count}} khóa","Deleted a prefill group":"Đã xóa một nhóm điền sẵn","Deleted a redemption code":"Đã xóa một mã đổi thưởng","Deleted a vendor":"Đã xóa một nhà cung cấp","Deleted all disabled channels ({{count}})":"Đã xóa tất cả kênh bị vô hiệu hóa ({{count}})","Deleted channel {{name}} (ID: {{id}})":"Đã xóa kênh {{name}} (ID: {{id}})","Deleted invalid redemption codes":"Đã xóa các mã đổi thưởng không hợp lệ","Deleted stale instance":"Đã xóa phiên bản mất kết nối","Discord ID is empty!":"ID Discord trống!","Deleted successfully":"Xóa thành công","Deleted tokens":"Số mã thông báo đã xóa","Deleted user {{username}} (ID: {{id}})":"Đã xóa người dùng {{username}} (ID: {{id}})","Deleted: {{processed}}":"Đã xóa: {{processed}}","Deleting this custom version does not disable the platform. The same-name factory plugin will be restored automatically.":"Xóa phiên bản tùy chỉnh này không làm vô hiệu nền tảng. Plugin tích hợp cùng tên sẽ tự động được khôi phục.","Deleting will permanently remove this subscription record (including benefit details). Continue?":"Xóa sẽ xóa vĩnh viễn bản ghi đăng ký này (bao gồm chi tiết quyền lợi). Tiếp tục?","Deleting...":"Đang xóa...","Demo site":"Trang demo","Demo site mode":"Chế độ trang demo","Demo Site Mode":"Chế độ trang Demo","Demote":"Giáng chức","Density":"Mật độ","Deploy your own gateway and start routing requests through your configured upstream services.":"Triển khai cổng riêng của bạn và bắt đầu định tuyến yêu cầu qua các dịch vụ thượng nguồn đã cấu hình.","Deployment created successfully":"Tạo triển khai thành công","Deployment details":"Chi tiết triển khai","Deployment ID":"ID triển khai","Deployment location":"Vị trí triển khai","Deployment logs":"Nhật ký triển khai","Deployment Region":"Khu vực triển khai","Deployment Region *":"Khu vực triển khai *","Deployment requested":"Yêu cầu triển khai","Deployments":"Triển khai","Deprecated":"Đã ngừng dùng","Derives the request names your users call":"Tạo tên yêu cầu mà người dùng gọi","Derives the upstream names sent to the provider":"Tạo tên gửi tới thượng nguồn","Desc":"Giảm dần","Describe":"Mô tả","Describe this model...":"Mô tả mô hình này...","Describe this vendor...":"Mô tả nhà cung cấp này...","Description":"Mô tả","Description is required":"Mô tả là bắt buộc","Designed and Developed by":"Thiết kế và Phát triển bởi","designed for scale":"thiết kế cho quy mô lớn","Destroyed":"Đã hủy","Detail":"Chi tiết","Detailed request logs for investigations.":"Nhật ký yêu cầu chi tiết cho các cuộc điều tra.","Details":"Chi tiết","Detect All Upstream Updates":"Phát hiện Tất cả Cập nhật Upstream","Detect model updates":"Phát hiện cập nhật mô hình","Detected database":"Đã phát hiện cơ sở dữ liệu","Detected high-risk status code redirect rules":"Phát hiện các quy tắc chuyển hướng mã trạng thái rủi ro cao sau:","Detection complete: {{add}} to add, {{remove}} to remove":"Phát hiện hoàn tất: {{add}} để thêm, {{remove}} để xóa","Detection failed":"Phát hiện thất bại","Determines how this group is applied elsewhere.":"Xác định cách nhóm này được áp dụng ở nơi khác.","Deterministic sampling seed (best-effort)":"Hạt giống lấy mẫu xác định (cố gắng tốt nhất)","Developer Friendly":"Thân thiện với nhà phát triển","Device Type Preference":"Ưu tiên loại thiết bị","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Kênh Dify chỉ hỗ trợ chatflow và agent, và agent không hỗ trợ hình ảnh","Digest:":"Tóm tắt:","Direction":"Hướng","Directory File Count":"Số tệp trong thư mục","Directory Total Size":"Tổng dung lượng thư mục","Disable":"Vô hiệu hóa","Disable 2FA":"Tắt 2FA","Downgrade group does not exist":"Nhóm hạ cấp không tồn tại","Disable All":"Vô hiệu hóa tất cả","Disable channels on repeated failures":"Tắt kênh khi lỗi nhiều lần","Disable custom task plugins?":"Tắt plugin tác vụ tùy chỉnh?","Disable on failure":"Vô hiệu hóa khi lỗi","Disable plugin {{name}} ({{key}})? Requests using this plugin may be affected.":"Tắt plugin {{name}} ({{key}})? Các yêu cầu sử dụng plugin này có thể bị ảnh hưởng.","Disable plugin?":"Tắt plugin?","Disable selected channels":"Vô hiệu hóa các kênh đã chọn","Disable selected models":"Vô hiệu hóa các mô hình đã chọn","Disable store passthrough":"Vô hiệu hóa chuyển tiếp store","Disable task plugins?":"Tắt plugin tác vụ?","Disable this key?":"Vô hiệu hóa khóa này?","Disable threshold (seconds)":"Vô hiệu hóa ngưỡng (giây)","Disable Two-Factor Authentication":"Vô hiệu hóa Xác thực hai yếu tố","disabled":"vô hiệu hóa","Disabled":"Đã tắt","Disabled all channels with tag: {{tag}}":"Đã tắt tất cả kênh với nhãn: {{tag}}","Disabled channels with tag {{tag}}":"Đã vô hiệu hóa các kênh có thẻ {{tag}}","Disabled globally":"Đã tắt toàn cục","Disabled lanes are omitted on save.":"Các kênh bị tắt sẽ được bỏ qua khi lưu.","Disabled Reason":"Lý do vô hiệu hóa","Disabled Time":"Thời gian vô hiệu hóa","Disabled two-factor authentication":"Đã tắt xác thực hai yếu tố","Disabled; fell back to factory":"Đã tắt; dùng lại bản tích hợp","Disabled; platform unavailable":"Đã tắt; nền tảng không khả dụng","Disabling...":"Đang vô hiệu hóa...","Discard changes":"Hủy thay đổi","Discard unsaved changes?":"Hủy các thay đổi chưa lưu?","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"Tuyên bố miễn trừ: Chỉ dùng cho mục đích cá nhân. Không phân phối hoặc chia sẻ bất kỳ thông tin xác thực nào. Kênh này có điều kiện tiên quyết và yêu cầu thiết lập trước; chỉ sử dụng khi bạn hiểu rõ quy trình và rủi ro, và tuân thủ điều khoản và chính sách của OpenAI. Thông tin xác thực và cấu hình chỉ dành cho tích hợp Codex CLI, không áp dụng cho các client, nền tảng hoặc kênh khác.","Discord":"Discord","Discount":"Giảm giá","Discount map by recharge amount (JSON object)":"Ánh xạ giảm giá theo số tiền nạp (đối tượng JSON)","Discount Rate":"Tỷ lệ chiết khấu","Discount rate must be ≤ 1":"Tỷ lệ giảm giá phải ≤ 1","Discount rate must be greater than 0":"Tỷ lệ giảm giá phải lớn hơn 0","Discount Rate:":"Tỷ lệ chiết khấu:","Discount ratio for cache hits.":"Tỷ lệ chiết khấu cho lượt truy cập bộ nhớ đệm thành công.","Discouraged":"Tuyệt vọng","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"Khám phá các mô hình AI được tuyển chọn, so sánh giá và khả năng, rồi chọn mô hình phù hợp cho từng kịch bản.","Discover the leading models in each domain":"Khám phá các mô hình hàng đầu trong từng lĩnh vực","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"Khám phá các mô hình được dùng nhiều nhất và nhà cung cấp đang tăng trưởng trên nền tảng, được cập nhật từ dữ liệu sử dụng trực tiếp.","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"Khám phá các mô hình, ứng dụng và nhà cung cấp nổi bật trên hệ thống — cập nhật liên tục cho từng danh mục.","Discovering...":"Đang khám phá...","Disk cache cleared":"Đã xóa bộ nhớ đệm đĩa","Disk Cache Settings":"Cài đặt bộ nhớ đệm đĩa","Disk Cache Threshold (MB)":"Ngưỡng bộ nhớ đệm đĩa (MB)","Disk cache, system performance monitoring, and operation statistics":"Bộ nhớ đệm đĩa, giám sát hiệu suất hệ thống và thống kê vận hành","Disk Hits":"Lượt truy cập đĩa","Disk Threshold (%)":"Ngưỡng đĩa (%)","Display in Currency":"Hiển thị tiền tệ","Display limit":"Giới hạn hiển thị","Display Mode":"Chế độ hiển thị","Display name":"Tên hiển thị","Display Name":"Tên hiển thị","Display name and email used in outgoing messages":"Tên hiển thị và email được sử dụng trong tin nhắn gửi đi","Display Name Field":"Trường Tên Hiển Thị","Display name for this chat client.":"Tên hiển thị cho ứng dụng chat này.","Display name for this monitoring group (max 50 characters)":"Tên hiển thị cho nhóm giám sát này (tối đa 50 ký tự)","Display name for this payment method.":"Tên hiển thị cho phương thức thanh toán này.","Display name shown to users.":"Tên hiển thị cho người dùng.","Display Options":"Tùy chọn hiển thị","Display policy":"Quy tắc hiển thị","Display Token Statistics":"Hiển thị Thống kê Token","Displayed":"Đang hiển thị","Displayed in":"Hiển thị theo","Displays the mobile sidebar.":"Hiển thị thanh bên di động.","Do not keep sessions":"Không giữ phiên","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"Đừng tin tưởng quá mức vào tính năng này. IP có thể bị giả mạo. Hãy sử dụng cùng với nginx, CDN và các gateway khác.","Do not repeat check-in; only once per day":"Không lặp lại check-in; chỉ một lần mỗi ngày","Do not wait one second between polling async tasks for this channel":"Không chờ một giây giữa các lần thăm dò tác vụ bất đồng bộ cho kênh này","Do regex replacement in the target field":"Thực hiện thay thế regex trong trường đích","Do string replacement in the target field":"Thực hiện thay thế chuỗi trong trường đích","Docs":"Tài liệu","Documentation Link":"Liên kết tài liệu","Documentation or external knowledge base.":"Tài liệu hoặc cơ sở kiến thức bên ngoài.","Does not check healthy channels. It only rechecks auto-disabled channels and restores them after they recover.":"Không kiểm tra kênh đang hoạt động bình thường. Chỉ kiểm tra lại kênh bị hệ thống tự động vô hiệu hóa và bật lại sau khi khôi phục.","does not exist or might have been removed.":"không tồn tại hoặc có thể đã bị xóa.","Domain":"Miền","Domain Filter Mode":"Chế độ lọc miền","Don\'t have an account?":"Chưa có tài khoản?","Done":"Xong","Doubao":"Doubao","Doubao custom API address editing unlocked":"Đã mở khóa chỉnh sửa địa chỉ API tùy chỉnh Doubao","Double check the configuration below. Your system will be locked until initialization is complete.":"Kiểm tra kỹ lại cấu hình bên dưới. Hệ thống của bạn sẽ bị khóa cho đến khi quá trình khởi tạo hoàn tất.","Downgrade Group":"Nhóm hạ cấp","Downgrade to pre-purchase group":"Hạ xuống nhóm trước khi mua","Downgrade to this group after the subscription expires":"Hạ xuống nhóm này sau khi đăng ký hết hạn","Download":"Tải xuống","Drag {{group}} to reorder":"Kéo {{group}} để sắp xếp lại","Drag mode":"Chế độ kéo thả","Drag mode help":"Hướng dẫn chế độ kéo thả","Drag the handle to move a channel.":"Giữ và kéo tay nắm để di chuyển kênh.","Drag to change priority. Use arrow keys to move, Escape to cancel.":"Kéo để đổi độ ưu tiên. Dùng phím mũi tên để di chuyển, Esc để hủy.","Drag to move":"Kéo để di chuyển","Drag to resize":"Kéo để thay đổi kích cỡ","Drag to set channel priority":"Kéo thả để đổi độ ưu tiên kênh","Draw":"Vẽ","Drawing":"Vẽ","Drawing logs":"Nhật ký vẽ","Drawing Logs":"Nhật ký bản vẽ","Drawing task polling":"Thăm dò tác vụ vẽ","Drawing task records":"Lịch sử tác vụ vẽ","Drop a JavaScript plugin file here":"Kéo tệp plugin JavaScript vào đây","Drop at an edge to create a different priority.":"Thả vào cạnh để tạo mức ưu tiên khác.","Drop between tiers to change priority, or in the center to join a tier":"Thả giữa các mức để đổi độ ưu tiên, hoặc vào giữa để tham gia cùng mức","Drop in the center to use the same priority.":"Thả vào giữa để dùng cùng mức ưu tiên.","Dry run result":"Kết quả chạy thử","Duplicate":"Nhân bản","Duplicate group names: {{names}}":"Tên nhóm bị trùng: {{names}}","Duplicate model in route models":"Mô hình bị lặp trong danh sách mô hình tuyến","Duplicate source model mappings are not allowed":"Không cho phép ánh xạ mô hình nguồn trùng lặp","Duplicate source model(s): {{models}}":"Mô hình nguồn trùng lặp: {{models}}","Duration":"Thời lượng","Duration (hours)":"Thời lượng (giờ)","Duration Settings":"Cài đặt thời lượng","Duration Unit":"Đơn vị thời lượng","Duration Value":"Giá trị thời lượng","Dynamic declarations cannot be previewed. Retry or review the source below.":"Không thể xem trước khai báo được tạo động. Hãy thử lại hoặc xem mã nguồn bên dưới.","Dynamic multiplier":"Hệ số động","Dynamic operation":"Thao tác động","Dynamic Pricing":"Giá linh hoạt","e.g. ¥ or HK$":"ví dụ ¥ hoặc HK$","e.g. 401, 403, 429, 500-599":"vd. 401, 403, 429, 500-599","e.g. 8 means 1 USD = 8 units":"Ví dụ: 8 có nghĩa là 1 USD = 8 đơn vị","e.g. Basic Plan":"ví dụ: Gói cơ bản","e.g. Clean tool parameters to avoid upstream validation errors":"ví dụ: Dọn dẹp tham số công cụ để tránh lỗi xác thực upstream","e.g. Company SSO":"ví dụ: SSO công ty","e.g. example.com":"ví dụ example.com","e.g. gpt-4o, gemini-2.5-flash":"ví dụ gpt-4o, gemini-2.5-flash","e.g. llama3.1:8b":"ví dụ: llama3.1:8b","e.g. My GitLab":"ví dụ: GitLab của tôi","e.g. my-gitlab":"ví dụ: my-gitlab","e.g. New API Console":"Ví dụ: Bảng điều khiển API mới","e.g. openid profile email":"ví dụ: openid profile email","e.g. Requires level {{required}}; your current level is {{current}}":"ví dụ: Yêu cầu cấp độ {{required}}; cấp độ hiện tại của bạn là {{current}}","e.g. Suitable for light usage":"ví dụ: Phù hợp cho sử dụng nhẹ","e.g. This request does not meet access policy":"ví dụ: Yêu cầu này không đáp ứng chính sách truy cập","e.g., 0.95":"e.g., 0.95","Email & Notifications":"Email và thông báo","Email address is already in use":"Địa chỉ email đã được sử dụng","e.g., 100":"e.g., 100","e.g., 123456":"e.g., 123456","e.g., 2025-04-01-preview":"ví dụ: 2025-04-01-preview","e.g., 50":"e.g., 50","e.g., 500000":"ví dụ, 500000","e.g., 7342866812345":"e.g., 7342866812345","Email is empty!":"Email trống!","Email or password is empty!":"Email hoặc mật khẩu trống!","e.g., 8 means 8 local currency per USD":"Ví dụ, 8 có nghĩa là 8 đơn vị tiền tệ địa phương trên mỗi USD","e.g., Alipay, WeChat":"ví dụ: Alipay, WeChat","e.g., Basic Package":"ví dụ, Gói cơ bản","Email verification is enabled, please enter email address and verification code":"Xác minh email đã được bật, vui lòng nhập địa chỉ email và mã xác minh","e.g., CN2 GIA":"ví dụ, CN2 GIA","e.g., Core APIs, OpenAI, Claude":"ví dụ: Core APIs, OpenAI, Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"ví dụ: d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"ví dụ: mặc định, VIP, cao cấp","e.g., gpt-4, claude-3":"vd: gpt-4, claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"ví dụ: gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"ví dụ: https://api.example.com (đường dẫn trước /suno)","e.g., https://api.openai.com/v1/chat/completions":"ví dụ: https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"ví dụ, https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"ví dụ: https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"ví dụ: https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"ví dụ: OpenAI GPT-4 Sản xuất","e.g., preview":"ví dụ: xem trước","e.g., prod_xxx":"ví dụ, prod_xxx","e.g., Recommended for China Mainland Users":"ví dụ: Khuyến nghị dành cho người dùng Trung Quốc đại lục","e.g., SiAlipay":"ví dụ: SiAlipay","e.g., us-central1 or JSON format for model-specific regions":"chẳng hạn như us-central1 hoặc định dạng JSON cho các khu vực dành riêng cho mô hình","e.g., v2.1":"e.g., v2.1","Each backup code can only be used once.":"Mỗi mã dự phòng chỉ có thể được sử dụng một lần.","Each item must be an object with a single key-value pair.":"Mỗi mục phải là đối tượng với một cặp khóa-giá trị duy nhất.","Each item must have exactly one key-value pair.":"Mỗi mục phải có chính xác một cặp khóa-giá trị.","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"Mỗi dòng đại diện cho một từ khóa. Để trống để tắt danh sách nhưng vẫn giữ trạng thái công tắc.","Each matrix cell is one rule: users of this row group pay this ratio when billed as this column group. In JSON the row is the outer key and the column is the inner key.":"Mỗi ô ma trận là một quy tắc: người dùng của nhóm hàng trả hệ số này khi được tính phí theo nhóm cột. Trong JSON, hàng là khóa ngoài và cột là khóa trong.","Each row prices one combination of {{fields}}.":"Mỗi hàng định giá cho một tổ hợp {{fields}}.","Each rule reads as a sentence: users of one group pay a special ratio when billed as another group. Without a rule, the billing group base ratio applies.":"Mỗi quy tắc đọc như một câu: người dùng của một nhóm trả hệ số đặc biệt khi được tính phí theo nhóm khác. Không có quy tắc thì áp dụng hệ số cơ bản của nhóm tính phí.","Each source serves an index.json listing installable plugins. Indexes are fetched by your browser; the gateway makes no outbound requests.":"Mỗi nguồn cung cấp một tệp index.json liệt kê các plugin có thể cài đặt. Chỉ mục do trình duyệt của bạn tải; cổng không gửi bất kỳ yêu cầu ra ngoài nào.","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"Mỗi bậc hỗ trợ 0~2 điều kiện (đối với len, p, c); bậc cuối là bậc dự phòng không cần điều kiện. Hãy dùng len (độ dài đầu vào đầy đủ, bao gồm cả cache hits) cho điều kiện bậc để tránh định tuyến sai khi cache hits làm giảm p.","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"Mỗi tầng hỗ trợ tối đa 2 điều kiện; tầng cuối cùng là tầng dự phòng không có điều kiện. Hãy dùng độ dài đầu vào đầy đủ cho điều kiện tầng để tránh chọn sai tầng khi cache hit làm giảm token đầu vào tính phí.","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"Mỗi tầng hỗ trợ tối đa 2 điều kiện. Tầng cuối cùng không có điều kiện là tầng dự phòng.","Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.":"Nhận phần thưởng khi người dùng đăng ký qua liên kết giới thiệu của bạn. Chuyển phần thưởng tích lũy vào số dư bất cứ lúc nào.","Earnings":"Thu nhập","Edit":"Chỉnh sửa","Edit {{title}}":"Chỉnh sửa {{title}}","Edit access token":"Chỉnh sửa token truy cập","Edit all channels with tag:":"Chỉnh sửa tất cả các kênh với thẻ:","Edit Announcement":"Chỉnh sửa thông báo","Edit API Shortcut":"Chỉnh sửa lối tắt API","Edit billing ratios and user-selectable groups in one table.":"Chỉnh sửa tỷ lệ tính phí và nhóm người dùng có thể chọn trong một bảng.","Edit Channel":"Chỉnh sửa Kênh","Edit channel routing":"Chỉnh sửa định tuyến kênh","Edit chat preset":"Chỉnh sửa cài đặt trước trò chuyện","Edit discount tier":"Chỉnh sửa bậc giảm giá","Edit FAQ":"Chỉnh sửa câu hỏi thường gặp","Edit group":"Sửa nhóm","Edit group rate limit":"Chỉnh sửa giới hạn tốc độ nhóm","Edit group settings as JSON. Changes are shared with the visual editor.":"Chỉnh sửa cài đặt nhóm bằng JSON. Thay đổi được đồng bộ với trình chỉnh sửa trực quan.","Edit JSON object directly. Suitable for simple parameter overrides.":"Chỉnh sửa đối tượng JSON trực tiếp. Phù hợp cho ghi đè tham số đơn giản.","Edit JSON text directly. Format will be validated on save.":"Chỉnh sửa văn bản JSON trực tiếp. Định dạng sẽ được kiểm tra khi lưu.","Edit mapping":"Chỉnh sửa ánh xạ","Edit model":"Chỉnh sửa mô hình","Edit Model":"Chỉnh sửa Mô hình","Edit model pricing":"Chỉnh sửa giá mô hình","Edit models and vendors, and sync them from upstream.":"Chỉnh sửa mô hình và nhà cung cấp, đồng bộ từ thượng nguồn.","Edit non-sensitive settings such as models, groups, and routing rules.":"Chỉnh sửa các thiết lập không nhạy cảm như mô hình, nhóm và quy tắc định tuyến.","Edit OAuth Provider":"Chỉnh Sửa Nhà Cung Cấp OAuth","Edit payment method":"Sửa phương thức thanh toán","Edit Prefill Group":"Chỉnh sửa Nhóm Điền sẵn","Edit pricing rule {{name}}":"Sửa quy tắc định giá {{name}}","Edit product":"Chỉnh sửa sản phẩm","Edit ratio override":"Chỉnh sửa ghi đè tỷ lệ","Edit Rule":"Sửa quy tắc","Edit selectable group":"Chỉnh sửa nhóm có thể chọn","Edit sensitive channel settings":"Chỉnh sửa cài đặt kênh nhạy cảm","Edit Tag":"Chỉnh sửa Thẻ","Edit Tag:":"Chỉnh sửa thẻ:","Edit Uptime Kuma Group":"Chỉnh sửa Nhóm Uptime Kuma","Edit Vendor":"Chỉnh sửa Nhà cung cấp","Enabled {{count}} keys":"Đã bật {{count}} khóa","edit_this":"edit_this","Edited channels with tag {{tag}}":"Đã chỉnh sửa các kênh có thẻ {{tag}}","Editor mode":"Chế độ trình sửa","Education":"Giáo dục","Effective icon":"Biểu tượng đang dùng","Email":"Email","Email (required for verification)":"Email (bắt buộc để xác minh)","Email Address":"Địa chỉ email","Email Alias Restriction":"Hạn chế Bí danh Email","Email bound successfully!":"Email đã được liên kết thành công!","Email confirmation code resend":"Gửi lại mã xác nhận email","Email Domain Restriction":"Hạn chế Tên miền Email","Email Domain Whitelist":"Danh sách trắng tên miền email","Email Field":"Trường Email","Email Verification":"Xác minh Email","Email verification code is incorrect.":"Mã xác minh email không đúng.","Email verification has ended. Start again to continue.":"Xác minh email đã kết thúc. Vui lòng bắt đầu lại để tiếp tục.","Email, summarisation, knowledge work":"Email, tóm tắt, làm việc tri thức","Embeddings":"Embeddings","Empty":"Trống","Empty value will be saved as {}.":"Giá trị trống sẽ được lưu thành {}.","Enable":"Bật","Enable {{parameter}}":"Bật {{parameter}}","Enable 2FA":"Bật 2FA","Enable All":"Bật tất cả","Enable check-in feature":"Bật tính năng điểm danh","Enable custom task plugins":"Bật plugin tác vụ tùy chỉnh","Enable Data Dashboard":"Kích hoạt Trang tổng quan Dữ liệu","Enable demo mode with limited functionality":"Bật chế độ demo với chức năng hạn chế","Enable Discord OAuth":"Bật Discord OAuth","Enable Disk Cache":"Bật bộ nhớ đệm đĩa","Enable drawing features":"Bật tính năng vẽ","Enable filtering":"Bật lọc","Enable FunctionCall thoughtSignature Fill":"Bật tính năng điền FunctionCall thoughtSignature","Enable GitHub OAuth":"Kích hoạt GitHub OAuth","Enable Groups":"Bật Nhóm","Enable if this is an OpenRouter enterprise account with special response format":"Bật nếu đây là tài khoản doanh nghiệp OpenRouter với định dạng phản hồi đặc biệt","Enable io.net deployments":"Bật triển khai io.net","Enable io.net model deployment service in console":"Bật dịch vụ triển khai mô hình io.net trong bảng điều khiển","Enable LinuxDO OAuth":"Bật LinuxDO OAuth","Enable model performance metrics":"Bật chỉ số hiệu năng mô hình","Enable OIDC":"Bật OIDC","Enable only if the upstream supports Responses WebSocket. HTTP requests are unaffected when disabled.":"Chỉ bật khi nhà cung cấp hỗ trợ Responses WebSocket. Yêu cầu HTTP thông thường vẫn hoạt động khi tắt.","Enable or disable this channel":"Bật hoặc tắt kênh này","Enable or disable this model":"Bật hoặc tắt mô hình này","Enable Passkey":"Bật khóa truy cập","Enable passthrough":"Bật chuyển tiếp","Enable Performance Monitoring":"Bật giám sát hiệu suất","Enable plugin {{key}}":"Bật plugin {{key}}","Enable plugin?":"Bật plugin?","Enable rate limiting":"Bật giới hạn tốc độ","Enable request body passthrough?":"Bật chuyển tiếp phần thân yêu cầu?","Enable request header passthrough?":"Bật chuyển tiếp header yêu cầu?","Enable Request Passthrough":"Bật Truyền qua Yêu cầu","Enable Responses WebSocket":"Bật Responses WebSocket","Enable selected channels":"Kích hoạt các kênh đã chọn","Enable selected models":"Kích hoạt các mô hình đã chọn","Enable session affinity":"Bật duy trì phiên","Enable SSL/TLS":"Bật SSL/TLS","Enable SSRF Protection":"Kích hoạt Bảo vệ SSRF","Enable STARTTLS":"Bật STARTTLS","Enable streaming mode for the test request.":"Bật chế độ streaming cho yêu cầu thử nghiệm.","Enable task plugins":"Bật plugin tác vụ","Enable Telegram OAuth":"Bật Telegram OAuth","Enable test mode for Creem payments":"Bật chế độ thử nghiệm cho thanh toán Creem","Enable this key?":"Kích hoạt khóa này?","Enable Turnstile":"Bật Turnstile","Enable Two-factor Authentication or Passkey in Security & Access to continue.":"Bật xác thực hai yếu tố hoặc Passkey trong « Bảo mật và truy cập » để tiếp tục.","Enable Two-factor Authentication or Passkey in Security & Access to unlock sensitive operations.":"Bật xác thực hai yếu tố hoặc Passkey trong « Bảo mật và truy cập » để thực hiện các thao tác nhạy cảm.","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"Bật Xác thực hai yếu tố hoặc Passkey trong hồ sơ của bạn để mở khóa các thao tác nhạy cảm.","Enable unlimited quota for this API key":"Kích hoạt hạn mức không giới hạn cho khóa API này","Enable violation deduction":"Bật trừ tiền vi phạm","Enable Waffo":"Bật Waffo","Enable Waffo Pancake":"Bật Waffo Pancake","Enable WeChat Auth":"Bật xác thực WeChat","Enable when proxying workers that fetch images over HTTP.":"Kích hoạt khi làm proxy cho các worker tìm nạp hình ảnh qua HTTP.","Enable when the client and upstream use the same API format and you need to preserve upstream-specific or new fields the gateway does not yet support. Usually leave this off.":"Bật khi ứng dụng khách và dịch vụ thượng nguồn dùng cùng định dạng API và cần giữ các trường riêng hoặc trường mới của thượng nguồn mà cổng chưa hỗ trợ. Thông thường không cần bật.","Enable when the upstream needs client information from Codex or Claude Code headers; may expose client information":"Bật khi thượng nguồn cần thông tin từ tiêu đề của Codex hoặc Claude Code; có thể làm lộ thông tin ứng dụng khách","Enable when the upstream needs information from clients such as Codex or Claude Code, including User-Agent, client version or session headers. Usually leave this off.":"Bật khi dịch vụ thượng nguồn cần thông tin từ các ứng dụng khách như Codex hoặc Claude Code, gồm User-Agent, phiên bản ứng dụng hoặc tiêu đề phiên. Thông thường không cần bật.","Enabled":"Đã bật","Enabled all channels with tag: {{tag}}":"Đã bật tất cả kênh với nhãn: {{tag}}","Enabled channels with tag {{tag}}":"Đã kích hoạt các kênh có thẻ {{tag}}","Enabled Status":"Trạng thái kích hoạt","Enabled two-factor authentication":"Đã bật xác thực hai yếu tố","Enabling...":"Đang bật...","Encourages introducing new topics":"Khuyến khích chủ đề mới","Encourages new topics":"Khuyến khích chủ đề mới","End":"End","End Error":"Lỗi kết thúc","End Reason":"Lý do kết thúc","End Time":"Thời gian kết thúc","End time must be after start time":"Thời gian kết thúc phải sau thời gian bắt đầu","Enter the Discovery URL or Issuer URL first":"Vui lòng nhập Discovery URL hoặc Issuer URL trước","End weekday":"Ngày kết thúc","End-user identifier for abuse monitoring":"Định danh người dùng cuối để giám sát lạm dụng","Endpoint":"Endpoint","Endpoint config":"Cấu hình điểm cuối","Endpoint Configuration":"Cấu hình điểm cuối","Endpoint Type":"Loại điểm cuối","Endpoint, provider-specific settings, and credentials.":"Endpoint, cài đặt riêng của nhà cung cấp và thông tin xác thực.","Endpoint:":"Điểm cuối:","Endpoints":"Điểm cuối","English":"Tiếng Anh","Ensure Prefix":"Đảm bảo tiền tố","Ensure Suffix":"Đảm bảo hậu tố","Ensure the string has a specified prefix":"Đảm bảo chuỗi có tiền tố chỉ định","Ensure the string has a specified suffix":"Đảm bảo chuỗi có hậu tố chỉ định","Enter 6-digit code":"Nhập mã 6 chữ số","Enter a domain such as example.com or localhost, without a protocol, port or path. Put addresses with ports in Allowed Passkey websites.":"Chỉ nhập tên miền như example.com hoặc localhost, không kèm giao thức, cổng hay đường dẫn. Điền địa chỉ có cổng vào «Các trang được phép dùng Passkey».","Enter a finite, non-negative price":"Nhập giá hữu hạn, không âm","Enter a finite, non-negative price.":"Nhập mức giá hữu hạn, không âm.","Enter a name":"Nhập tên","Enter a new name":"Nhập tên mới","Enter a positive integer":"Nhập một số nguyên dương","Enter a positive or negative amount to adjust the quota":"Nhập một giá trị dương hoặc âm để điều chỉnh hạn ngạch","Enter a react-icons component name. Invalid names show no icon.":"Nhập tên component react-icons. Tên không hợp lệ sẽ không hiển thị biểu tượng.","Enter a rule to preview mappings.":"Nhập quy tắc để xem trước ánh xạ.","Enter a valid condition value.":"Nhập giá trị điều kiện hợp lệ.","Enter a valid email or leave blank":"Nhập email hợp lệ hoặc để trống","Enter a value and press Enter":"Nhập giá trị và nhấn Enter","Enter amount in {{currency}}":"Nhập số tiền bằng {{currency}}","Enter amount in tokens":"Nhập số lượng token","Enter an absolute HTTP(S) URL without credentials, query parameters, or fragments":"Nhập URL HTTP(S) tuyệt đối không chứa thông tin xác thực, tham số truy vấn hoặc phân mảnh","Enter an absolute http(s) URL.":"Hãy nhập URL http(s) đầy đủ.","Enter an ISO date and time with a timezone offset.":"Nhập ngày giờ ISO có độ lệch múi giờ.","Enter announcement content (supports Markdown & HTML)":"Nhập nội dung thông báo (hỗ trợ Markdown & HTML)","Enter announcement content (supports Markdown/HTML)":"Nhập nội dung thông báo (hỗ trợ Markdown/HTML)","Enter API Key":"Nhập khóa API","Enter API key for this channel":"Nhập khóa API cho kênh này","Enter API Key, format: APIKey|Region":"Nhập khóa API, định dạng: APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"Nhập khóa API, mỗi dòng một khóa, định dạng: APIKey|Region","Enter application token":"Nhập token ứng dụng","Enter authenticator code":"Nhập mã xác thực","Enter backup code (e.g., CAWD-OQDV)":"Nhập mã dự phòng (ví dụ: CAWD-OQDV)","Enter code":"Nhập mã","Enter code or backup code":"Nhập mã hoặc mã dự phòng","Enter Completion price to calculate ratio":"Nhập giá hoàn thành để tính tỷ lệ","Enter Creem API key":"Nhập khóa API Creem","Enter custom API endpoint URL":"Nhập URL điểm cuối API tùy chỉnh","Enter deployment region or JSON mapping:":"Nhập khu vực triển khai hoặc ánh xạ JSON:","Enter display name":"Nhập tên hiển thị","Enter HTML code (e.g.,

About us...

) or a URL (e.g., https://example.com) to embed as iframe":"Nhập mã HTML (ví dụ,

Về chúng tôi...

) hoặc một URL (ví dụ, https://example.com) để nhúng dưới dạng iframe","Enter Input price to calculate ratio":"Nhập giá đầu vào để tính tỷ lệ","Enter JSON to override request headers":"Nhập JSON để ghi đè header yêu cầu","Enter key, format: AccessKey|SecretAccessKey|Region":"Nhập khóa, định dạng: AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"Nhập khóa, mỗi dòng một khóa, định dạng: AccessKey|SecretAccessKey|Region","Enter model name":"Nhập tên mô hình","Enter new key to update":"Nhập khóa mới để cập nhật","Enter new key to update, or leave empty to keep current key":"Nhập khóa mới để cập nhật, hoặc để trống để giữ khóa hiện tại","Enter new tag name (leave empty to disband tag)":"Nhập tên thẻ mới (để trống để hủy thẻ)","Enter new tag name or leave empty":"Enter new tag name or leave blank","Enter new token to update":"Nhập mã thông báo mới để cập nhật","Enter one API key per line for batch creation":"Nhập một khóa API mỗi dòng để tạo hàng loạt","Enter one key per line for batch creation":"Nhập một khóa mỗi dòng để tạo hàng loạt","Enter one keyword per line":"Nhập một từ khóa mỗi dòng","Enter one website address per line, such as https://example.com. Do not include a page path.":"Nhập mỗi địa chỉ trang trên một dòng, ví dụ https://example.com. Không kèm đường dẫn trang.","Enter only a top-level callback domain, for example https://api.example.com, without any path.":"Chỉ nhập tên miền callback cấp cao nhất, ví dụ https://api.example.com, không kèm đường dẫn.","Enter only the domain, such as example.com, without https://, a port or a page path. If you use both example.com and api.example.com, you can enter example.com.":"Chỉ nhập tên miền, ví dụ example.com, không kèm https://, cổng hoặc đường dẫn trang. Nếu dùng cả example.com và api.example.com, bạn có thể nhập example.com.","Enter only the domain, without https://, a port or a page path. example.com and www.example.com are different Passkey domains; changing between them does not migrate existing Passkeys.":"Chỉ nhập tên miền, không có https://, cổng hay đường dẫn trang. example.com và www.example.com là hai tên miền khóa truy cập khác nhau; đổi qua lại không di chuyển các khóa hiện có.","Enter password":"Nhập mật khẩu","Enter password (8-20 characters)":"Nhập mật khẩu (8-20 ký tự)","Enter password (8–128 characters)":"Nhập mật khẩu (8–128 ký tự)","Enter previous domains, one per line, without a protocol, port or path. Different ports on the same domain do not need compatible domains.":"Nhập các tên miền cũ, mỗi dòng một tên miền, không kèm giao thức, cổng hay đường dẫn. Các cổng khác nhau trên cùng tên miền không cần thêm vào danh sách tên miền tương thích.","Enter previous Passkey domains, one per line. Existing Passkeys can still verify with these domains; new Passkeys use the primary domain.":"Nhập các tên miền khóa truy cập cũ, mỗi dòng một tên miền. Các khóa hiện có vẫn xác minh được với những tên miền này; khóa mới dùng tên miền chính.","Enter quota in {{currency}}":"Nhập hạn mức bằng {{currency}}","Enter quota in tokens":"Nhập hạn mức bằng token","Enter sample usage to estimate the cost. Group and request multipliers are not included.":"Nhập mức sử dụng của một yêu cầu để ước tính chi phí, chưa áp dụng hệ số nhóm và quy tắc yêu cầu.","Enter secret key":"Nhập khóa bí mật","Enter system prompt (user prompt takes priority)":"Nhập lời nhắc hệ thống (lời nhắc người dùng được ưu tiên)","Enter tag name (optional)":"Nhập tên thẻ (tùy chọn)","Enter the 6-digit authenticator code or an unused backup code.":"Nhập mã xác thực 6 chữ số hoặc mã dự phòng chưa sử dụng.","Enter the 6-digit authenticator code.":"Nhập mã 6 chữ số từ ứng dụng xác thực.","Enter the 6-digit code from your authenticator app":"Nhập mã 6 chữ số từ ứng dụng xác thực của bạn","Enter the 6-digit email verification code.":"Nhập mã xác minh email gồm 6 chữ số.","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"Nhập Mật khẩu dùng một lần dựa trên thời gian gồm 6 chữ số hoặc mã dự phòng gồm 8 ký tự từ ứng dụng xác thực của bạn.","Enter the complete URL, supports":"Nhập địa chỉ URL hoàn chỉnh, hỗ trợ","Expiration time cannot be earlier than current time":"Thời gian hết hạn không được sớm hơn thời điểm hiện tại","Enter the Coze agent ID":"Nhập ID tác nhân Coze","Enter the full URL of your Gotify server":"Nhập URL đầy đủ của máy chủ Gotify của bạn","Enter the knowledge base ID":"Nhập ID cơ sở tri thức","Enter the path before /suno, usually just the domain":"Nhập đường dẫn trước /suno, thường chỉ là tên miền","Enter the quota amount in {{currency}}":"Nhập số lượng hạn mức bằng {{currency}}","Enter the quota amount in tokens":"Nhập số lượng hạn ngạch bằng token","Enter the verification code":"Nhập mã xác minh","Enter the website domain, such as example.com.":"Nhập tên miền trang, ví dụ example.com.","Export":"Xuất","Export logs":"Xuất nhật ký","Exported {{count}} logs":"Đã xuất {{count}} bản ghi nhật ký","Enter token counts to preview the estimated cost (excluding group multipliers).":"Nhập số lượng token để xem ước tính chi phí (không gồm bội số nhóm).","Enter URL...":"Nhập URL...","Enter username":"Nhập tên người dùng","Enter verification code":"Nhập mã xác minh","Enter webhook secret":"Nhập bí mật webhook","Enter your authenticator code or a backup code":"Nhập mã xác thực hoặc mã dự phòng của bạn","Enter your email":"Nhập email của bạn","Enter your redemption code":"Nhập mã đổi thưởng của bạn","Enter your registered email and we will send you a link to reset your password.":"Nhập email đã đăng ký của bạn và chúng tôi sẽ gửi cho bạn một liên kết để đặt lại mật khẩu.","Enter your username":"Nhập tên đăng nhập của bạn","Enter your username or email":"Nhập tên đăng nhập hoặc email của bạn","Enterprise Account":"Business account","Enterprise-grade security with comprehensive permission management":"Bảo mật cấp doanh nghiệp với quản lý quyền toàn diện","Entries configured in Request Header Override still take priority":"Các mục đã cấu hình trong Ghi đè header yêu cầu vẫn được ưu tiên","Entrypoint (space separated)":"Entrypoint (cách nhau bằng dấu cách)","Enum":"Liệt kê","Enum values":"Các giá trị liệt kê","Env (JSON object)":"Env (đối tượng JSON)","Environment variables":"Biến môi trường","Environment variables (JSON)":"Biến môi trường (JSON)","Epay Alipay":"Alipay qua Epay","Epay endpoint":"Epay điểm cuối","Epay Gateway":"Cổng thanh toán Epay","Epay is a payment protocol, not a specific official website. Verify the provider yourself and do not trust random third-party Epay deployments.":"Epay là một giao thức thanh toán, không phải một trang web chính thức cụ thể. Hãy tự xác minh nhà cung cấp và không tin tùy tiện các bản triển khai Epay của bên thứ ba.","Epay merchant ID":"ID người bán Epay","Epay safety reminder":"Nhắc nhở an toàn Epay","Epay secret key":"Khóa bí mật Epay","Epay WeChat Pay":"WeChat Pay qua Epay","Equals":"Bằng","Error":"Lỗi","Error Code (optional)":"Mã lỗi (tùy chọn)","Error establishing connection":"Lỗi khi thiết lập kết nối","Error Message":"Thông báo lỗi","Error Message (required)":"Thông báo lỗi (bắt buộc)","Error parsing response data":"Lỗi khi phân tích dữ liệu phản hồi","Error Type (optional)":"Loại lỗi (tùy chọn)","Estimated cost":"Chi phí ước tính","Estimated quota cost":"Ước tính chi phí hạn mức","Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.":"Đánh giá các trường trong phản hồi thông tin người dùng của nhà cung cấp. Điều kiện và nhóm lồng nhau sử dụng logic and/or.","Event":"Sự kiện","Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.":"Mỗi tên nhóm trong bảng định giá có thể dùng ở hai nơi: trên người dùng (nhóm người dùng, do quản trị viên gán) và trên token (nhóm token, chọn khi tạo token). Cùng một bộ tên, hai vai trò khác nhau.","Failed to check user bindings, please try again later":"Không thể kiểm tra liên kết người dùng, vui lòng thử lại sau","Every other device will lose access immediately. This device will remain signed in.":"Mọi thiết bị khác sẽ mất quyền truy cập ngay lập tức. Thiết bị này vẫn duy trì đăng nhập.","Everything configured for this group, in one place.":"Toàn bộ cấu hình của nhóm này, tại một nơi.","Exact":"Chính xác","Exact Match":"Khớp chính xác","Exact match only and case-sensitive. Prefixes, regex, and * wildcards are not supported.":"Chỉ khớp chính xác và có phân biệt hoa thường. Không hỗ trợ tiền tố, regex hoặc ký tự đại diện *.","Example":"Ví dụ","Example (all channels):":"Ví dụ (tất cả kênh):","Failed to copy channel. Please try again later":"Không thể sao chép kênh. Vui lòng thử lại sau","Example (specific channels):":"Ví dụ (kênh cụ thể):","Example price":"Giá ví dụ","Example spec":"Thông số ví dụ","Failed to count channel types. Please try again later":"Không thể thống kê loại kênh. Vui lòng thử lại sau","Failed to count channels. Please try again later":"Không thể đếm số kênh. Vui lòng thử lại sau","Failed to count tags. Please try again later":"Không thể đếm số thẻ. Vui lòng thử lại sau","Example:":"Ví dụ:","Example: users call gpt-4o; upstream receives gpt-4o-all.":"Ví dụ: người dùng gọi gpt-4o, nhà cung cấp nhận gpt-4o-all.","example.com blocked-site.com":"example.com\\nblocked-site.com","Failed to create default token":"Không thể tạo token mặc định","example.com company.com":"example.com\\ncompany.com","Failed to create order":"Tạo đơn hàng thất bại","Excellent":"Tuyệt vời","Exchange rate is required":"Cần có tỷ giá","Failed to create redemption code, please try again later":"Tạo mã đổi thưởng thất bại, vui lòng thử lại sau","Failed to create the administrator account: {{error}}":"Không thể tạo tài khoản quản trị viên: {{error}}","Failed to create the Discovery request: {{error}}":"Không thể tạo yêu cầu Discovery: {{error}}","Failed to create the plan product":"Tạo sản phẩm của gói thất bại","Exchange rate must be greater than 0":"Tỷ giá phải lớn hơn 0","Excludes the first attempt. Counted per group.":"Không tính lần đầu, tính theo từng nhóm.","Execute code in a sandbox during the response":"Thực thi mã trong sandbox trong quá trình phản hồi","Executor":"Trình thực thi","Exhausted":"Đã cạn kiệt","Existing account will be reused":"Tài khoản hiện có sẽ được sử dụng lại","Existing Models ({{count}})":"Các mô hình hiện có ({{count}})","Existing models: select fields to replace their current values with the values on the right. Unselected fields stay unchanged.":"Mô hình hiện có: chọn các trường để thay giá trị hiện tại bằng giá trị bên phải. Các trường không được chọn sẽ giữ nguyên.","Existing Passkeys remain tied to the old domain and may stop working. Keep the old domain to preserve access, or confirm only if you have a recovery plan.":"Các khóa truy cập hiện có vẫn gắn với tên miền cũ và có thể ngừng hoạt động. Hãy giữ tên miền cũ để duy trì quyền truy cập, hoặc chỉ xác nhận khi đã có phương án khôi phục.","Exists":"Tồn tại","Expand":"Mở rộng","Expand All":"Mở rộng tất cả","Expand panel":"Mở rộng bảng","Expected a JSON array of group identifiers":"Cần là một mảng JSON gồm các định danh nhóm","Expected a JSON array.":"Cần là một mảng JSON.","Experiment with prompts and models in real time.":"Thử nghiệm với prompt và mô hình theo thời gian thực.","Expiration":"Thời hạn","Expiration Time":"Thời gian hết hạn","expired":"Đã hết hạn","Expired":"Hết hạn","Expired at":"Hết hạn lúc","Expired time cannot be earlier than current time":"Thời gian hết hạn không thể sớm hơn thời gian hiện tại","Expires":"Hết hạn","Expires {{time}}":"Hết hạn lúc {{time}}","Expires at":"Hết hạn lúc","Expires in":"Còn lại","Export snapshot":"Xuất bản chụp","Failed to encode Vertex AI key JSON: {{error}}":"Không thể mã hóa JSON khóa Vertex AI: {{error}}","Failed to export logs":"Không xuất được nhật ký","Expose ratio API":"Cung cấp API tỷ lệ","Failed to fetch channel. Please try again later":"Không thể lấy thông tin kênh. Vui lòng thử lại sau","Failed to fetch channels with this tag. Please try again later":"Không thể lấy các kênh có thẻ này. Vui lòng thử lại sau","Failed to fetch channels. Please try again later":"Không thể lấy danh sách kênh. Vui lòng thử lại sau","Exposes the pricing/models catalog in the top navigation.":"Hiển thị danh mục giá/mô hình trên thanh điều hướng đầu trang.","Expression":"Biểu thức","Expression - Task pricing":"Biểu thức - Giá tác vụ","Failed to fetch models: {{error}}":"Không thể lấy danh sách mô hình: {{error}}","Expression argument types do not match.":"Kiểu đối số của biểu thức không khớp.","Failed to fetch Ollama version: {{error}}":"Không thể lấy phiên bản Ollama: {{error}}","Expression based":"Dựa trên biểu thức","Failed to fetch reset credit details. Please try again later":"Không thể lấy chi tiết lượt đặt lại. Vui lòng thử lại sau","Failed to fetch tags. Please try again later":"Không thể lấy thẻ. Vui lòng thử lại sau","Failed to fetch the catalog":"Lấy danh mục thất bại","Failed to fetch the Discovery configuration: {{error}}":"Không thể lấy cấu hình Discovery: {{error}}","Failed to fetch the product list":"Lấy danh sách sản phẩm thất bại","Expression billing":"Tính phí biểu thức","Expression compatibility will be checked when saving.":"Tính tương thích của biểu thức sẽ được kiểm tra khi lưu.","Expression editor":"Trình sửa biểu thức","Failed to fetch usage. Please try again later":"Không thể lấy thông tin sử dụng. Vui lòng thử lại sau","Expression error":"Lỗi biểu thức","Expression pricing":"Định giá bằng biểu thức","Failed to generate default token":"Không thể sinh token mặc định","Extend":"Gia hạn","Failed to get the channel information. Please contact the administrator":"Không lấy được thông tin kênh. Vui lòng liên hệ quản trị viên","Failed to get the token count":"Không thể lấy số lượng token","Failed to get the user group":"Lấy nhóm người dùng thất bại","Failed to get token from {{provider}}, please check settings":"Không thể lấy token từ {{provider}}, vui lòng kiểm tra cài đặt","Failed to get user information":"Không thể lấy thông tin người dùng","Extend deployment":"Gia hạn triển khai","Extend failed":"Gia hạn thất bại","Extended successfully":"Gia hạn thành công","Failed to initialize the system: {{error}}":"Khởi tạo hệ thống thất bại: {{error}}","External Device":"Thiết bị ngoại vi","External link for users to purchase quota":"Liên kết ngoài để người dùng mua hạn mức","External operations":"Vận hành bên ngoài","External operations mode":"Chế độ vận hành bên ngoài","External Speed Test":"Kiểm tra tốc độ bên ngoài","Extra":"Thêm","Extra destinations beyond the channel API address. The channel address remains accessible.":"Các miền được truy cập ngoài địa chỉ API của kênh. Địa chỉ kênh vẫn truy cập được.","Extra Notes (Optional)":"Ghi chú bổ sung (Tùy chọn)","Extra visible":"Hiển thị thêm","Extra visible to {{group}}":"Hiển thị thêm cho {{group}}","extras":"mục bổ sung","Factory":"Tích hợp","Factory and custom plugin behavior":"Cách hoạt động của plugin tích hợp và tùy chỉnh","Factory and custom plugins all stop serving immediately. In-flight tasks will be handled by timeout cleanup.":"Plugin gốc và plugin tùy chỉnh sẽ ngay lập tức ngừng phục vụ. Các tác vụ đang chạy sẽ được xử lý bằng dọn dẹp hết hạn.","Factory plugins cannot be deleted or disabled individually. A custom version can override them; deleting or disabling that version restores the factory plugin. Third-party-only platforms become unavailable when their plugin is deleted or disabled.":"Không thể xóa hoặc tắt riêng plugin tích hợp. Phiên bản tùy chỉnh có thể ghi đè; xóa hoặc tắt phiên bản đó sẽ khôi phục plugin tích hợp. Nền tảng chỉ có plugin bên thứ ba sẽ không khả dụng khi plugin bị xóa hoặc tắt.","Fail Reason":"Lý do thất bại","Fail Reason Details":"Chi tiết lý do thất bại","failed":"thất bại","Failed":"Thất bại","Failed to {{action}} user":"Không thể {{action}} người dùng","Failed to adjust quota":"Không thể điều chỉnh hạn mức","Failed to apply overwrite.":"Không thể áp dụng ghi đè.","Failed to apply vendor changes":"Không thể áp dụng thay đổi nhà cung cấp","Failed to batch delete redemption codes":"Không thể xóa hàng loạt mã quy đổi","Failed to bind email":"Không thể liên kết email","Failed to change password":"Không thể thay đổi mật khẩu","Failed to check for updates":"Không thể kiểm tra cập nhật","Failed to clean logs":"Không thể dọn sạch nhật ký","Failed to complete order":"Không thể hoàn thành đơn hàng","Failed to complete Passkey login":"Không thể hoàn tất đăng nhập Passkey","Failed to confirm compliance":"Không thể xác nhận tuân thủ","Failed to parse appended keys: {{error}}":"Không thể phân tích các khóa được thêm: {{error}}","Failed to parse credentials. Please check the channel configuration":"Không thể phân tích thông tin xác thực. Vui lòng kiểm tra cấu hình kênh","Failed to contact GitHub releases API":"Không thể kết nối API GitHub Releases","Failed to copy":"Sao chép thất bại","Failed to parse the Discovery configuration: {{error}}":"Không thể phân tích cấu hình Discovery: {{error}}","Failed to parse tool price \\"{{name}}\\": {{error}}":"Không thể phân tích giá công cụ \\"{{name}}\\": {{error}}","Failed to parse tool prices: {{error}}":"Không thể phân tích giá công cụ: {{error}}","Failed to copy channel":"Không thể sao chép kênh","Failed to copy keys":"Không thể sao chép khóa","Failed to copy model names":"Không thể sao chép tên mô hình","Failed to copy to clipboard":"Không thể sao chép vào bộ nhớ tạm","Failed to query channels":"Không thể truy vấn kênh","Failed to query logs":"Truy vấn nhật ký thất bại","Failed to query statistics":"Truy vấn dữ liệu thống kê thất bại","Failed to query the upstream task status":"Không truy vấn được trạng thái tác vụ thượng nguồn","Failed to create account":"Tạo tài khoản thất bại","Failed to create API key":"Tạo API key thất bại","Failed to refresh credentials. Please try again later":"Không thể làm mới thông tin xác thực. Vui lòng thử lại sau","Failed to create channel":"Không thể tạo kênh","Failed to create deployment":"Tạo triển khai thất bại","Failed to create provider":"Tạo nhà cung cấp thất bại","Failed to create redemption code":"Không thể tạo mã đổi thưởng","Failed to create user":"Tạo người dùng thất bại","Failed to delete {{count}} model(s)":"Không thể xóa {{count}} mô hình","Failed to delete {{count}} redemption codes":"Không thể xóa {{count}} mã quy đổi","Failed to delete account":"Không thể xóa tài khoản","Failed to reset usage. Please try again later":"Không thể đặt lại mức sử dụng. Vui lòng thử lại sau","Failed to delete API key":"Xóa API key thất bại","Failed to delete API keys":"Không thể xóa khóa API","Failed to delete channel":"Không thể xóa kênh","Failed to delete disabled channels":"Không thể xóa các kênh đã vô hiệu hóa","Failed to save backup codes":"Không thể lưu mã dự phòng","Failed to save configuration":"Lưu cấu hình thất bại","Failed to delete failed models":"Xóa các mô hình thất bại không thành công","Failed to delete group":"Không thể xóa nhóm","Failed to save the demo site mode setting: {{error}}":"Không thể lưu cài đặt chế độ trang demo: {{error}}","Failed to save the self-use mode setting: {{error}}":"Không thể lưu cài đặt chế độ tự sử dụng: {{error}}","Failed to delete invalid redemption codes":"Không thể xóa các mã đổi thưởng không hợp lệ","Failed to delete model":"Không thể xóa mô hình","Failed to delete provider":"Xóa nhà cung cấp thất bại","Failed to search tokens":"Không thể tìm kiếm token","Failed to search top-up records":"Tìm kiếm lịch sử nạp tiền thất bại","Failed to delete redemption code":"Xóa mã đổi quà không thành công","Failed to delete user":"Không thể xóa người dùng","Failed to delete vendor":"Không thể xóa nhà cung cấp","Failed to disable {{count}} model(s)":"Không thể tắt {{count}} mô hình","Failed to disable 2FA":"Không thể vô hiệu hóa 2FA","Failed to set the audio completion ratio: {{error}}":"Không thể đặt hệ số hoàn thành âm thanh: {{error}}","Failed to set the audio ratio: {{error}}":"Không thể đặt hệ số âm thanh: {{error}}","Failed to set the cache creation ratio: {{error}}":"Không thể đặt hệ số tạo bộ nhớ đệm: {{error}}","Failed to set the image ratio: {{error}}":"Không thể đặt hệ số hình ảnh: {{error}}","Failed to disable channels":"Không thể vô hiệu hóa các kênh","Failed to disable model":"Không thể vô hiệu hóa mô hình","Failed to disable tag channels":"Không thể vô hiệu hóa các kênh thẻ","Failed to discover OIDC endpoints":"Khám phá điểm cuối OIDC thất bại","Failed to enable {{count}} model(s)":"Không thể bật {{count}} mô hình","Failed to enable 2FA":"Không thể bật 2FA","Failed to enable channels":"Không thể kích hoạt các kênh","Failed to enable model":"Không thể kích hoạt mô hình","Failed to enable tag channels":"Không thể kích hoạt kênh thẻ","Failed to fetch channel key":"Không thể lấy khóa kênh","Failed to start payment":"Không thể bắt đầu thanh toán","Failed to fetch checkin status":"Không thể tải trạng thái điểm danh","Failed to fetch deployment details":"Không thể lấy chi tiết triển khai","Failed to fetch models":"Không thể lấy các mô hình","Failed to fetch OIDC configuration. Please check the URL and network status":"Không thể lấy cấu hình OIDC. Vui lòng kiểm tra URL và trạng thái mạng","Failed to fetch reset credit details":"Không lấy được chi tiết lượt đặt lại","Failed to fetch upstream prices":"Không thể lấy giá từ upstream","Failed to fetch upstream ratios":"Không thể lấy tỷ lệ upstream","Failed to fetch usage":"Không lấy được mức sử dụng","Failed to fetch user information":"Không lấy được thông tin người dùng","Failed to fix abilities":"Không thể sửa tính nhất quán kênh","Failed to generate token":"Không thể tạo token","Failed to hide model from model square":"Không thể ẩn mô hình khỏi kho mô hình","Failed to initialize OAuth":"Không thể khởi tạo OAuth","Failed to initialize system":"Không thể khởi tạo hệ thống","Failed to load":"Tải thất bại","Failed to load access tokens":"Không thể tải token truy cập","Failed to load API keys":"Không thể tải khóa API","Failed to load artifacts":"Không thể tải sản phẩm","Failed to load audit records":"Không thể tải bản ghi kiểm toán","Failed to load billing history":"Không thể tải lịch sử thanh toán","Failed to load channel":"Không thể tải kênh","Failed to load enabled models":"Không thể tải các mô hình đã bật","Failed to load home page content":"Không thể tải nội dung trang chủ","Failed to load image":"Không thể tải ảnh","Failed to load key status":"Không thể tải trạng thái khóa","Failed to load login sessions":"Không thể tải các phiên đăng nhập","Failed to load logs":"Không tải được nhật ký","Failed to load model":"Không thể tải mô hình","Failed to load model pricing":"Không thể tải giá mô hình","Failed to load models":"Không thể tải mô hình","Failed to load Passkey status":"Không thể tải trạng thái Passkey","Failed to load playground groups":"Tải nhóm playground thất bại","Failed to load playground models":"Tải mô hình playground thất bại","FAQ #{{index}} answer cannot exceed 1000 characters":"Câu trả lời của FAQ #{{index}} không được vượt quá 1000 ký tự","FAQ #{{index}} is missing the answer field":"FAQ #{{index}} thiếu trường câu trả lời","FAQ #{{index}} is missing the question field":"FAQ #{{index}} thiếu trường câu hỏi","FAQ #{{index}} question cannot exceed 200 characters":"Câu hỏi của FAQ #{{index}} không được vượt quá 200 ký tự","Failed to load plugins":"Không thể tải plugin","FAQ cannot exceed 100 entries":"FAQ không được vượt quá 100 mục","Failed to load profile":"Không thể tải hồ sơ","Failed to load redemption codes":"Không thể tải mã đổi thưởng","Failed to load settings":"Không thể tải cài đặt","Failed to load setup data":"Không thể tải dữ liệu thiết lập","Failed to load setup status":"Không thể tải trạng thái thiết lập","Failed to load SGLang status":"Không thể tải trạng thái SGLang","Failed to load tag data":"Không thể tải dữ liệu thẻ","Failed to load users":"Không thể tải người dùng","Failed to load vendor":"Không thể tải nhà cung cấp","Failed to load vendors":"Không thể tải nhà cung cấp","Failed to load vLLM status":"Không thể tải trạng thái vLLM","Failed to parse group items":"Thất bại khi phân tích các mục nhóm","Failed to parse JSON file: {{name}}":"Không thể phân tích cú pháp tệp JSON: {{name}}","Failed to prepare pricing conversion":"Không thể chuẩn bị chuyển đổi giá","Fetched successfully":"Lấy thành công","Failed to preview metadata":"Không thể xem trước siêu dữ liệu","Failed to preview vendor changes":"Không thể xem trước thay đổi nhà cung cấp","Failed to query balance":"Không thể truy vấn số dư","Failed to refresh cache stats":"Không thể làm mới thống kê bộ nhớ đệm","Failed to refresh credential":"Không thể làm mới thông tin xác thực","Failed to regenerate backup codes":"Không thể tạo lại mã sao lưu","Failed to register Passkey":"Không thể đăng ký Passkey","Failed to remove Passkey":"Không thể xóa Passkey","Failed to repair channel consistency":"Không thể sửa tính nhất quán kênh","Failed to reset 2FA":"Không thể đặt lại 2FA","Failed to reset model ratios":"Không thể đặt lại tỷ lệ mô hình","Failed to reset Passkey":"Không thể đặt lại Passkey","Failed to reset usage":"Không thể đặt lại mức dùng","Failed to revoke token":"Không thể thu hồi token","Failed to save":"Lưu thất bại","Failed to save announcements":"Không thể lưu thông báo","Failed to save API info":"Không thể lưu thông tin API","Failed to save FAQ":"Không thể lưu FAQ","Failed to save model pricing":"Không thể lưu giá mô hình","Failed to save Uptime Kuma groups":"Không thể lưu nhóm Uptime Kuma","Failed to search API keys":"Không thể tìm kiếm khóa API","Failed to search redemption codes":"Không thể tìm kiếm mã đổi thưởng","Failed to search users":"Không thể tìm kiếm người dùng","Failed to send reset email":"Gửi email đặt lại thất bại","Failed to send verification code":"Không thể gửi mã xác minh","Failed to send verification email":"Gửi email xác minh thất bại","Failed to set tag":"Không thể đặt thẻ","Failed to setup 2FA":"Không thể thiết lập 2FA","Failed to show model in model square":"Không thể hiển thị mô hình trong kho mô hình","Failed to sign out other sessions":"Không thể đăng xuất các phiên khác","Failed to sign out session":"Không thể đăng xuất phiên","Failed to start {{provider}} login":"Không thể bắt đầu đăng nhập {{provider}}","Failed to start Discord login":"Không thể bắt đầu đăng nhập Discord","Failed to start GitHub login":"Không thể bắt đầu đăng nhập GitHub","Failed to start LinuxDO login":"Không thể bắt đầu đăng nhập LinuxDO","Failed to start OIDC login":"Không thể bắt đầu đăng nhập OIDC","Failed to start Passkey login":"Không thể bắt đầu đăng nhập Passkey","Failed to start Passkey registration":"Không thể bắt đầu đăng ký Passkey","Failed to start Telegram binding":"Không thể bắt đầu liên kết Telegram","Failed to start testing all channels":"Không thể bắt đầu kiểm tra tất cả các kênh","Failed to start verification":"Không thể bắt đầu xác minh","Failed to sync prices":"Không thể đồng bộ giá","Failed to sync ratios":"Không thể đồng bộ tỷ lệ","Failed to test all channels":"Không thể kiểm tra tất cả các kênh","Failed to test channel":"Không thể kiểm tra kênh","Failed to update all balances":"Không thể cập nhật tất cả số dư","Failed to update API key":"Không thể cập nhật khóa API","Failed to update API key status":"Không thể cập nhật trạng thái khóa API","Failed to update balance":"Không thể cập nhật số dư","Failed to update channel":"Cập nhật kênh không thành công","Failed to update models":"Không thể cập nhật mô hình","Failed to update profile":"Không thể cập nhật hồ sơ","Failed to update provider":"Cập nhật nhà cung cấp thất bại","Failed to update redemption code":"Không thể cập nhật mã đổi thưởng","Failed to update redemption code status":"Không thể cập nhật trạng thái mã đổi thưởng","Failed to update setting":"Không thể cập nhật cài đặt","Failed to update settings":"Không thể cập nhật cài đặt","Failed to update tag":"Không thể cập nhật thẻ","Failed to update user":"Không thể cập nhật người dùng","Failure keywords":"Từ khóa thất bại","Failure reason":"Lý do thất bại","Fair":"Công bằng","Fallback":"Dự phòng","Fallback base URL":"Base URL fallback","Fallback for remaining models":"Dự phòng cho mô hình còn lại","Fallback must be last":"Dự phòng phải cuối","Fallback route":"Tuyến dự phòng","Fallback tier":"Tầng dự phòng","FAQ":"FAQ","FAQ added. Click \\"Save Settings\\" to apply.":"Đã thêm FAQ. Nhấp \\"Lưu cài đặt\\" để áp dụng.","FAQ deleted. Click \\"Save Settings\\" to apply.":"Đã xóa FAQ. Nhấp \\"Lưu cài đặt\\" để áp dụng.","FAQ saved successfully":"FAQ đã lưu thành công","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ đã cập nhật. Nhấp \\"Lưu cài đặt\\" để áp dụng.","FastGPT":"FastGPT","Feature in development":"Tính năng đang phát triển","Fee":"Phí","Fee Amount":"Số tiền phí","Fetch":"Tải về","Fetch available models for:":"Tìm nạp các mô hình khả dụng cho:","Fetch available models from upstream":"Lấy các mô hình khả dụng từ nguồn trên","Fetch from Upstream":"Lấy từ nguồn","Fetch mode":"Chế độ lấy dữ liệu","Fetch Models":"Tìm nạp Mô hình","Fetched {{count}} model(s) from upstream":"Đã lấy {{count}} mô hình từ upstream","Fetched {{count}} models":"Đã lấy {{count}} mô hình","Fetched in your browser and placed in the source field below for review. GitHub and gist page URLs are rewritten to their raw URL automatically.":"Được trình duyệt tải về và đưa vào ô mã nguồn bên dưới để bạn xem lại. URL trang GitHub và gist sẽ tự động được đổi thành URL raw.","Fetching models...":"Đang lấy mô hình…","Fetching plugin source...":"Đang tải mã nguồn plugin…","Fetching prefill groups...":"Đang tải nhóm điền sẵn...","Fetching upstream prices...":"Đang lấy giá upstream...","Fetching upstream ratios...":"Đang lấy tỷ lệ thượng nguồn...","Fetching...":"Đang tải…","field":"trường","Field":"Trường","Field change details were not recorded":"Chi tiết thay đổi trường chưa được ghi lại","Field Mapping":"Ánh Xạ Trường","Field passthrough controls":"Điều khiển chuyển tiếp trường","Field Path":"Đường dẫn trường","Fields":"Các trường","File":"Tệp","File could not be verified":"Chưa thể xác minh tệp","File integrity verified":"Đã xác minh tính toàn vẹn của tệp","File Search":"Tìm kiếm tệp","File verification":"Xác minh tệp","Files to Retain":"Số tệp giữ lại","Fill a CLI template or add a blank rule.":"Điền mẫu CLI hoặc thêm quy tắc trống.","Fill All Models":"Điền Tất Cả Mô Hình","Fill Codex CLI / Claude CLI Templates":"Điền mẫu Codex CLI / Claude CLI","Fill entire column":"Điền toàn bộ cột","Fill example (all channels)":"Điền ví dụ (tất cả kênh)","Fill example (specific channels)":"Điền ví dụ (kênh cụ thể)","Fill in":"Điền","Fill in both Merchant ID and API Private Key before creating.":"Nhập cả Merchant ID và khóa riêng API trước khi tạo.","Fill in the credentials above to begin.":"Nhập thông tin xác thực ở trên để bắt đầu.","Fill in the following info to create a new subscription plan":"Điền thông tin sau để tạo gói đăng ký mới","Fill in this website":"Điền trang hiện tại","Fill Related Models":"Điền Mô hình Liên quan","Fill Template":"Điền Mẫu","Fill template: level and active":"Điền mẫu: cấp độ và trạng thái hoạt động","Fill template: level message":"Điền mẫu: thông báo cấp độ","Fill template: organization message":"Điền mẫu: thông báo tổ chức","Fill template: organization or role":"Điền mẫu: tổ chức hoặc vai trò","Fill Templates":"Điền mẫu","Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.":"Nhập đầy đủ giá trị model trong body yêu cầu của client, ví dụ gpt-4o hoặc gemini-2.5-flash. Ngăn cách nhiều model bằng dấu phẩy.","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"Điền thoughtSignature chỉ dành cho các kênh Gemini/Vertex sử dụng định dạng OpenAI","Filled {{count}} model(s)":"Đã điền {{count}} mô hình","Filled {{count}} related model(s)":"Đã điền {{count}} mô hình liên quan","Filter":"Lọc","Filter by API key...":"Lọc theo khóa API...","Filter by channel ID":"Lọc theo ID kênh","Filter by group":"Lọc theo nhóm","Filter by MjProxy task ID":"Lọc theo ID nhiệm vụ MjProxy","Filter by model name":"Lọc theo tên mô hình","Filter by model name...":"Lọc theo tên mô hình...","Filter by model...":"Lọc theo mẫu...","Filter by name or ID...":"Lọc theo tên hoặc ID...","Filter by name, ID, or key...":"Lọc theo tên, ID hoặc khóa...","Filter by name...":"Lọc theo tên...","Filter by node":"Lọc theo nút","Filter by price field":"Lọc theo trường giá","Filter by ratio type":"Lọc theo loại tỷ lệ","Filter by request ID":"Lọc theo ID yêu cầu","Filter by task ID":"Lọc theo ID nhiệm vụ","Filter by token name":"Lọc theo tên token","Filter by username":"Lọc theo tên người dùng","Filter by username, name or email...":"Lọc theo tên người dùng, tên hoặc email...","Filter Dashboard Models":"Lọc Mô hình Bảng điều khiển","Filter mappings":"Lọc ánh xạ","Filter models by provider, group, type, endpoint, and tags.":"Lọc mô hình theo nhà cung cấp, nhóm, loại, endpoint và thẻ.","Filter models by type, endpoint, vendor, group and tags":"Lọc mô hình theo loại, endpoint, nhà cung cấp, nhóm và thẻ","Filter models...":"Lọc mô hình...","Filter plugins...":"Lọc plugin...","Filter the model analytics view by time range and user.":"Lọc chế độ xem phân tích mô hình theo khoảng thời gian và người dùng.","Filter the traffic flow view by time range and user.":"Lọc chế độ xem luồng lưu lượng theo khoảng thời gian và người dùng.","Filter...":"Lọc...","Filters":"Bộ lọc","Filters active":"Bộ lọc đang bật","Final Consumed":"Tiêu thụ cuối cùng","Final cost = base × multiplier when conditions match":"Chi phí cuối = cơ sở × hệ số khi thỏa điều kiện","Final price multiplier (0.95 = 5% discount":"Hệ số nhân giá cuối cùng (0.95 = giảm giá 5%)","Finance":"Tài chính","Find":"Tìm","Find the billing group.":"Xác định nhóm tính phí.","Find the ratio.":"Xác định hệ số.","Finish reordering":"Hoàn tất sắp xếp","Finish Time":"Thời gian hoàn thành","Finished requests":"Yêu cầu đã kết thúc","First API request":"Yêu cầu API đầu tiên","First token":"Token đầu","First/Last Frame to Video":"Khung đầu/cuối sang video","Fix Abilities":"Sửa tính nhất quán kênh","Fix order":"Sửa thứ tự","Fix the Request Header Override JSON first":"Hãy sửa JSON ghi đè header yêu cầu trước","Fuzzy search keywords must be at least 2 characters long":"Từ khóa tìm kiếm mờ phải có ít nhất 2 ký tự","Fixed":"Đã sửa","Fixed abilities: {{success}} succeeded, {{fails}} failed":"Đã sửa tính nhất quán kênh: {{success}} thành công, {{fails}} thất bại","Fixed channel constraint":"Ràng buộc kênh cố định","Fixed fee per request":"Phí cố định mỗi yêu cầu","Fixed price":"Giá cố định","Fixed price (USD)":"Giá cố định (USD)","Fixed request price":"Giá cố định theo yêu cầu","Flexible integration":"Kết nối linh hoạt","Floating":"Nổi","Flow":"Luồng","Flow Filters":"Bộ lọc luồng","Flow width metric":"Chỉ số độ rộng luồng","FluentRead extension not detected. Please ensure it is installed and active.":"Không phát hiện tiện ích mở rộng FluentRead. Vui lòng đảm bảo nó đã được cài đặt và kích hoạt.","Flush interval (minutes)":"Khoảng ghi xuống DB (phút)","Follow the guided steps to prepare your workspace before the first login.":"Thực hiện theo các bước hướng dẫn để chuẩn bị không gian làm việc của bạn trước lần đăng nhập đầu tiên.","Follow user group":"Theo nhóm người dùng","Font":"Phông chữ","Footer":"Chân trang","Footer text displayed at the bottom of pages":"Văn bản chân trang hiển thị ở cuối các trang","footer.columns.about.links.aboutProject":"Về Dự án","footer.columns.about.links.contact":"Liên hệ Chúng tôi","footer.columns.about.links.features":"Tính năng","footer.columns.about.title":"Về Chúng tôi","footer.columns.docs.links.apiDocs":"Tài liệu API","footer.columns.docs.links.installation":"Hướng Dẫn Cài Đặt","footer.columns.docs.links.quickStart":"Bắt Đầu Nhanh","footer.columns.docs.title":"Tài Liệu","footer.columns.related.links.midjourney":"MjProxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"One API","footer.columns.related.title":"Các Dự Án Liên Quan","footer.defaultCopyright":"Bản quyền được bảo lưu.","footer.newapi.projectAttributionSuffix":"Bản quyền được bảo lưu. Được thiết kế và phát triển bởi các cộng tác viên dự án.","For advanced custom channels this applies only to /v1/responses routes without protocol conversion.":"Với kênh tùy chỉnh nâng cao, thiết lập này chỉ áp dụng cho các route /v1/responses không chuyển đổi giao thức.","GitHub ID is empty!":"ID GitHub trống!","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"Đối với các kênh được thêm sau ngày 10 tháng 5 năm 2025, không cần loại bỏ \\".\\" khỏi tên mô hình trong quá trình triển khai","For private deployments, format: https://fastgpt.run/api/openapi":"Đối với các triển khai riêng tư, định dạng: https://fastgpt.run/api/openapi","For this channel, map the model name in client requests to the model name sent upstream.":"Với kênh này, ánh xạ tên mô hình trong yêu cầu của máy khách sang tên mô hình gửi đến dịch vụ thượng nguồn.","For this website, you can enter: {{domain}}":"Với trang này, bạn có thể nhập: {{domain}}","Force a syntactically valid JSON response":"Buộc phản hồi JSON hợp lệ về cú pháp","Force AUTH LOGIN":"Bắt buộc AUTH LOGIN","Force Format":"Buộc định dạng","Force format response to OpenAI standard (OpenAI channel only)":"Buộc định dạng phản hồi theo tiêu chuẩn OpenAI (chỉ kênh OpenAI)","Force JSON object or schema-conforming output":"Bắt buộc xuất JSON hoặc theo schema","Force operation":"Buộc thực hiện","Force SMTP authentication using AUTH LOGIN method":"Bắt buộc xác thực SMTP sử dụng phương thức AUTH LOGIN","Force-disabled two-factor authentication for the user":"Đã buộc tắt xác thực hai yếu tố của người dùng","Forest Whisper":"Tiếng thì thầm rừng cây","Forgot password":"Quên mật khẩu","Forgot password?":"Quên mật khẩu?","Form reset to saved values":"Đã đặt lại biểu mẫu về các giá trị đã lưu","Format":"Định dạng","Format conversion is unavailable; the client must use a format the upstream supports":"Chuyển đổi định dạng không khả dụng; client phải dùng định dạng mà upstream hỗ trợ","Format JSON":"Định dạng JSON","Format:":"Định dạng:","Format: Access Key ID|Secret Access Key":"Định dạng: ID khóa truy cập|Khóa truy cập bí mật","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"Định dạng: AccessKey|SecretKey (hoặc chỉ ApiKey nếu hệ thống thượng nguồn là New API)","Format: Ak|Sk|Region":"Định dạng: Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"Định dạng: APIKey-AppId, ví dụ: fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"Định dạng: APIKey|SecretKey","Format: APPID|APISecret|APIKey":"Định dạng: APPID|APISecret|APIKey","Format: TokenHub API Key, or legacy AppId|SecretId|SecretKey":"Định dạng: TokenHub API Key, hoặc định dạng cũ AppId|SecretId|SecretKey","Got it":"Đã hiểu","Gotify server URL cannot be empty":"URL máy chủ Gotify không được để trống","Gotify token cannot be empty":"Token Gotify không được để trống","Forward requests directly to upstream providers without any post-processing.":"Chuyển tiếp các yêu cầu trực tiếp đến các nhà cung cấp ngược dòng mà không cần xử lý hậu kỳ nào.","Forwarding Routes":"Route chuyển tiếp","Frames per second":"Khung hình / giây","Free":"Trống","Free: {{free}} / Total: {{total}}":"Còn trống: {{free}} / Tổng: {{total}}","Frequency Penalty":"Phạt tần suất","Friendly name to identify this channel":"Tên thân thiện để nhận dạng kênh này","From Address":"Địa chỉ Người gửi","From IO.NET deployment":"Từ triển khai IO.NET","From marketplace index":"Từ chỉ mục kho plugin","From model redirect, not yet added to models list":"Từ chuyển hướng mô hình, chưa được thêm vào danh sách mô hình","Full API Key":"Khóa API đầy đủ","Full Base URL (supports":"URL cơ sở đầy đủ (hỗ trợ","Group #{{index}} category name cannot exceed 50 characters":"Tên danh mục của nhóm #{{index}} không được vượt quá 50 ký tự","Group #{{index}} category name duplicates another group":"Tên danh mục của nhóm #{{index}} trùng với nhóm khác","Group #{{index}} contains disallowed content":"Nhóm #{{index}} chứa nội dung không được phép","Group #{{index}} description cannot exceed 200 characters":"Mô tả của nhóm #{{index}} không được vượt quá 200 ký tự","Group #{{index}} has a URL that cannot be parsed: {{error}}":"Không thể phân tích URL của nhóm #{{index}}: {{error}}","Group #{{index}} has an invalid URL format":"Nhóm #{{index}} có định dạng URL không hợp lệ","Group #{{index}} is missing the category name field":"Nhóm #{{index}} thiếu trường tên danh mục","Group #{{index}} is missing the slug field":"Nhóm #{{index}} thiếu trường slug","Group #{{index}} is missing the URL field":"Nhóm #{{index}} thiếu trường URL","Group #{{index}} slug can only contain letters, numbers, underscores and hyphens":"Slug của nhóm #{{index}} chỉ được chứa chữ cái, chữ số, dấu gạch dưới và dấu gạch nối","Group #{{index}} slug cannot exceed 100 characters":"Slug của nhóm #{{index}} không được vượt quá 100 ký tự","Group #{{index}} URL cannot exceed 500 characters":"URL của nhóm #{{index}} không được vượt quá 500 ký tự","Full Code":"Mã đầy đủ","Full input length":"Độ dài đầu vào đầy đủ","Full input length override":"Chỉ định tổng độ dài ngữ cảnh đầu vào","Full JSON":"JSON đầy đủ","Full layout":"Bố cục đầy đủ","Full source":"Toàn bộ mã nguồn","Full upstream catalog":"Toàn bộ danh mục nguồn","Full width":"Toàn chiều rộng","Function calling":"Gọi hàm","Functions":"Hàm","Gateways":"Cổng kết nối","Group name already exists":"Tên nhóm đã tồn tại","Group name and type cannot be empty":"Tên và loại nhóm không được để trống","GC Count":"Số lần GC","GC executed":"GC đã thực thi","GC execution failed":"Thực thi GC thất bại","Gemini":"Song Tử","Gemini and OpenAI audio prices differ for this model. Use separate billing model names to convert them.":"Giá âm thanh Gemini và OpenAI của mô hình này khác nhau. Hãy dùng tên mô hình tính phí riêng để chuyển đổi.","Gemini Generate Content to OpenAI Chat":"Gemini Generate Content sang OpenAI Chat","Gemini Generate Content to OpenAI Responses":"Gemini Generate Content sang OpenAI Responses","Gemini Image 4K":"Gemini Image 4K","Gemini only":"Chỉ Gemini","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"Gemini sẽ tiếp tục tự động phát hiện chế độ suy nghĩ ngay cả khi bộ điều hợp bị tắt. Chỉ bật tính năng này khi bạn cần kiểm soát chi tiết hơn về giá cả và lập ngân sách.","General":"Chung","General Settings":"General settings","Generate":"Tạo","Generate Lyrics":"Tạo lời bài hát","Generate Midjourney images through MjProxy":"Tạo ảnh Midjourney qua MjProxy","Generate Midjourney images through MjProxyPlus":"Tạo ảnh Midjourney qua MjProxyPlus","Generate Music":"Tạo nhạc","Generate music and lyrics through SunoAPI":"Tạo nhạc và lời bài hát qua SunoAPI","Generate new backup codes for account recovery":"Tạo mã dự phòng mới để khôi phục tài khoản","Generate New Codes":"Tạo mã mới","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"Tạo token tại trang Tokens; bạn có thể giới hạn theo model, nhóm, IP và rate-limit.","Generated image":"Ảnh được tạo","Generating new codes will invalidate all existing backup codes.":"Tạo mã mới sẽ vô hiệu hóa tất cả các mã dự phòng hiện có.","Generating...":"Đang tạo...","Generation quality preset":"Mức chất lượng sinh","Generation was interrupted":"Quá trình tạo đã bị gián đoạn","Generic cache":"Bộ đệm chung","Get advice":"Nhận lời khuyên","Get one here":"Nhận tại đây","Get started":"Bắt đầu","Get Started":"Bắt đầu","GitHub":"GitHub","GitHub rate limit reached. Try again later.":"Đã đạt giới hạn yêu cầu GitHub. Vui lòng thử lại sau.","Give the group a recognizable name and optional description.":"Đặt cho nhóm một cái tên dễ nhận biết và mô tả tùy chọn.","Give this group a recognizable name.":"Hãy đặt cho nhóm này một cái tên dễ nhận biết.","Header override must be valid JSON format":"Ghi đè header phải ở định dạng JSON hợp lệ","Global and channel settings":"Cài đặt toàn cục và kênh","Global configuration and administrative tools.":"Cấu hình toàn cục và công cụ quản trị.","Global Coverage":"Phạm vi toàn cầu","Global default":"Mặc định toàn cục","Global default: {{mode}}":"Mặc định toàn cục: {{mode}}","Global Model Configuration":"Cấu hình Mô hình Toàn cầu","Global throughput":"Thông lượng toàn hệ thống","Go Back":"Quay lại","Go back and edit":"Quay lại và chỉnh sửa","Go to Dashboard":"Truy cập Dashboard","Go to first page":"Đi đến trang đầu tiên","Go to GitHub":"Xem trên GitHub","Go to home":"Về trang chủ","Go to io.net API Keys":"Đi đến Khóa API io.net","Go to last page":"Đi đến trang cuối cùng","Go to next page":"Đi đến trang tiếp theo","Go to page {{page}}":"Đi đến trang {{page}}","Go to previous page":"Quay lại trang trước","Go to settings":"Đi tới cài đặt","Go to Settings":"Đi đến Cài đặt","Good":"Tốt","Gotify Application Token":"Mã thông báo ứng dụng Gotify","Gotify Documentation":"Tài liệu Gotify","Gotify Server URL":"URL máy chủ Gotify","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus, v.v.","GPU count":"Số lượng GPU","Granted at":"Được cấp lúc","Greater than":"Lớn hơn","Greater Than":"Lớn hơn","Greater than or equal":"Lớn hơn hoặc bằng","Greater Than or Equal":"Lớn hơn hoặc bằng","Grok":"Grok","Grok Settings":"Cài đặt Grok","Group":"Nhóm","Group {{path}}":"Nhóm {{path}}","Group & Quota":"Nhóm & Hạn mức","Group added. Click \\"Save Settings\\" to apply.":"Nhóm đã được thêm. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","Group channels by tag for batch operations":"Nhóm kênh theo thẻ để thực hiện các thao tác hàng loạt","Group config overrides global limits, shares the same period":"Cấu hình nhóm ghi đè giới hạn toàn cầu, chia sẻ cùng một chu kỳ","Group deleted. Click \\"Save Settings\\" to apply.":"Nhóm đã bị xóa. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","Group description":"Mô tả nhóm","Group details":"Chi tiết nhóm","Group identifier":"Định danh nhóm","Group is required":"Yêu cầu nhóm","Group name":"Tên nhóm","Group Name":"Tên Nhóm","Group name cannot be changed when editing.":"Tên nhóm không thể thay đổi khi chỉnh sửa.","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"Không thể mở rộng giá theo nhóm vì biểu thức này không phải là biểu thức giá theo bậc tiêu chuẩn.","Group Pricing":"Định giá nhóm","Group pricing usage guide":"Hướng dẫn sử dụng định giá theo nhóm","group ratio":"tỷ lệ nhóm","Group Ratio":"Tỷ lệ nhóm","Group ratios":"Tỷ lệ nhóm","Group settings":"Cài đặt nhóm","Group updated. Click \\"Save Settings\\" to apply.":"Nhóm đã được cập nhật. Nhấp vào \\"Lưu Cài đặt\\" để áp dụng.","Group visibility":"Hiển thị nhóm","Group-based rate limits":"Giới hạn tỷ lệ dựa trên nhóm","Group:":"Nhóm:","Group: {{ratio}}x":"Nhóm: {{ratio}}x","Grouped monitor status from Uptime Kuma":"Trạng thái giám sát theo nhóm từ Uptime Kuma","Groups":"Nhóm","Groups *":"Nhóm *","Groups that users can select when creating API keys.":"Các nhóm mà người dùng có thể chọn khi tạo khóa API.","Growth":"Tăng trưởng","Guardrails":"Hàng rào bảo vệ","Guest":"Khách","h":"h","Haiku Model":"Mô hình Haiku","Hang tight while we finish connecting your account.":"Hãy chờ một chút trong khi chúng tôi hoàn tất việc kết nối tài khoản của bạn.","Hang tight while we securely link this account to your profile.":"Hãy chờ một chút trong khi chúng tôi liên kết bảo mật tài khoản này với hồ sơ của bạn.","Hardware":"Phần cứng","Hardware type":"Loại phần cứng","Has been disabled":"Đã vô hiệu hóa thành công","Has been enabled":"Đã kích hoạt thành công","Has been invalidated":"Đã vô hiệu hóa thành công","Have a Code?":"Có mã không?","Header":"Header","header instead.":".","Header Name":"Tên header","Header navigation":"Điều hướng đầu trang","Header Override":"Ghi đè tiêu đề","Header Passthrough (X-Request-Id)":"Chuyển tiếp header (X-Request-Id)","Header Value (supports string or JSON mapping)":"Giá trị header (hỗ trợ chuỗi hoặc ánh xạ JSON)","header. Anthropic-formatted endpoints accept the":". Các endpoint định dạng Anthropic chấp nhận header","Health":"Sức khỏe","Health check timeout threshold (seconds)":"Ngưỡng thời gian kiểm tra (giây)","Healthy":"Bình thường","Hidden":"Ẩn","Hidden — verify to reveal":"Ẩn — xác minh để hiển thị","Hidden {{count}} models from model square":"Đã ẩn {{count}} mô hình khỏi kho mô hình","Hidden from {{group}}":"Ẩn khỏi {{group}}","Hidden from catalog":"Ẩn trong danh mục","Hidden from the model square by metadata policy.":"Đã ẩn khỏi danh mục theo cài đặt siêu dữ liệu.","Hide":"Ẩn","Hide API key":"Ẩn khóa API","Hide from catalog":"Ẩn khỏi danh mục","Hide from model square":"Ẩn khỏi kho mô hình","Hide redirect panel":"Ẩn bảng chuyển hướng","ID is empty":"ID trống","ID is empty!":"ID trống!","Hide selected models from model square":"Ẩn mô hình đã chọn khỏi kho mô hình","Hide sensitive data":"Ẩn dữ liệu nhạy cảm","Hide setup guide":"Ẩn hướng dẫn thiết lập","High Performance":"Hiệu suất cao","High-risk operation confirmation":"Xác nhận thao tác rủi ro cao","High-risk status code retry confirmation text":"Tôi hiểu rủi ro tính phí nhiều lần và sự cố hệ thống, đồng thời xác nhận bật tính năng","High-risk status code retry input mismatch":"Nội dung nhập không khớp với văn bản bắt buộc.","High-risk status code retry input placeholder":"Nhập chính xác văn bản ở trên","High-risk status code retry risk check 1":"Tôi đã đọc và hiểu đầy đủ mọi cảnh báo ở trên, bao gồm hậu quả nghiêm trọng khi buộc thử lại với mã trạng thái 504 và 524.","High-risk status code retry risk check 2":"Tôi đã trao đổi với nhà cung cấp thượng nguồn và xác nhận lỗi hết thời gian chờ hiện tại do nút thắt của dịch vụ thượng nguồn mà phía thượng nguồn chưa thể khắc phục, vì vậy buộc thử lại chỉ là giải pháp thỏa hiệp.","High-risk status code retry risk check 3":"Tôi tự nguyện chấp nhận mọi rủi ro bị tính phí hai lần hoặc nhiều lần và sẽ không tạo issue hay khiếu nại trong kho mã nguồn của dự án về bất thường thanh toán do các lần thử lại này.","High-risk status code retry risk check 4":"Tôi tự nguyện chấp nhận rủi ro về độ ổn định hệ thống, gồm hết thời gian chờ nghiêm trọng ở phía máy khách và khả năng dịch vụ gặp sự cố, đồng thời chịu trách nhiệm về tình trạng tồn đọng yêu cầu hoặc gián đoạn dịch vụ phát sinh.","High-risk status code retry risk disclaimer":"### ⚠️ Thao tác rủi ro cao: cảnh báo và tuyên bố miễn trừ trách nhiệm khi thử lại mã 504/524\\n\\nTheo mặc định, dự án không thử lại với mã `400` (yêu cầu không hợp lệ), `504` (gateway hết thời gian chờ) hoặc `524` (đã hết thời gian chờ). Mã 504 và 524 thường có nghĩa là **yêu cầu đã đến dịch vụ AI thượng nguồn thành công và phía thượng nguồn đã bắt đầu xử lý, nhưng kết nối bị đóng vì quá trình xử lý ở thượng nguồn mất quá nhiều thời gian**. Điều này thường cho thấy nút thắt nằm ở dịch vụ thượng nguồn.\\n\\nBật chuyển hướng hoặc thử lại cho các mã hết thời gian chờ này là một **thao tác có rủi ro cực kỳ cao**. Trước khi bật, bạn phải đọc kỹ và hiểu các hậu quả sau:\\n\\n#### 1. Rủi ro chính (hãy đọc kỹ)\\n\\n1. 💸 Tính phí hai lần hoặc nhiều lần: phần lớn nhà cung cấp AI thượng nguồn **vẫn tính phí** cho yêu cầu đã bắt đầu xử lý nhưng bị ngắt do hết thời gian chờ mạng (504/524). Mỗi lần thử lại gửi một yêu cầu hoàn toàn mới đến thượng nguồn và có thể gây **tính phí hai lần hoặc nhiều lần**.\\n2. ⏳ Hết thời gian chờ nghiêm trọng ở phía máy khách: khi một yêu cầu đã hết thời gian chờ, việc thử lại có thể làm tổng độ trễ tăng nhiều lần và gây thời gian chờ nghiêm trọng hoặc không thể chấp nhận cho máy khách cuối.\\n3. 💥 Tồn đọng yêu cầu và sự cố dịch vụ: buộc thử lại giữ luồng và kết nối lâu hơn. Khi tải cao, điều này có thể gây **tồn đọng yêu cầu** nghiêm trọng, cạn kiệt tài nguyên, phát sinh lỗi dây chuyền và làm dịch vụ proxy ngừng hoạt động.\\n\\n#### 2. Xác nhận rủi ro\\n\\nNếu vẫn chọn bật tính năng này, bạn xác nhận tất cả nội dung sau:","Higher priority channels are selected first":"Các kênh ưu tiên cao hơn được chọn trước tiên","Historical capitalization":"Kiểu chữ hoa/thường cũ","Historical tokens":"Token trước đây","Historical Usage":"Lịch sử sử dụng","History of MjProxy-style image tasks.":"Lịch sử các tác vụ hình ảnh kiểu MjProxy.","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"Tiêu chí trúng: Nếu cached tokens tồn tại trong usage, được tính là trúng.","Image count {{count}}":"Số lượng ảnh {{count}}","Hit Rate":"Tỷ lệ trúng","Hit tier":"Bậc trúng","Home":"Trang chủ","Home Page Content":"Nội dung Trang chủ","Homepage URL":"URL trang chủ","Hook":"Hook","Hostname or IP of your SMTP provider":"Tên máy chủ hoặc IP của nhà cung cấp SMTP của bạn","Hour":"Giờ","Hour of day":"Giờ trong ngày","Hourly token usage by model across the last 24 hours":"Sử dụng token theo giờ của từng mô hình trong 24 giờ qua","Hourly token usage by model over the past 24 hours":"Sử dụng token theo mô hình theo giờ trong 24 giờ qua","hours":"giờ","How a call is priced":"Một cuộc gọi được tính giá như thế nào","How a session is identified and which channel it keeps.":"Cách nhận diện phiên và kênh mà phiên giữ lại.","How client credentials are sent to the token endpoint":"Cách thông tin xác thực client được gửi đến endpoint token","How frequently the system checks auto-disabled channels for recovery":"Tần suất hệ thống kiểm tra các kênh bị tự động vô hiệu hóa để khôi phục","How frequently the system tests all channels":"Tần suất hệ thống kiểm tra tất cả các kênh là bao nhiêu?","How It Works":"Cách hoạt động","How model mapping works":"Cách hoạt động của ánh xạ mô hình","How much to charge for each US dollar of balance (Epay)":"Tính phí bao nhiêu cho mỗi đô la Mỹ số dư (Epay)","How this model name should match requests":"Tên mô hình này nên khớp với các yêu cầu như thế nào","How to deliver the resulting image":"Cách trả về ảnh kết quả","Inactive disk cache cleared":"Đã xóa bộ nhớ đệm đĩa không hoạt động","How to get an io.net API Key":"Cách lấy Khóa API io.net","How to reset my quota?":"Cách đặt lại hạn mức của tôi?","How to select keys: random or sequential polling":"Cách chọn khóa: thăm dò ngẫu nhiên hay tuần tự","How to set up Passkey domains":"Cách thiết lập tên miền khóa truy cập","How will you use the platform?":"Bạn sẽ sử dụng nền tảng như thế nào?","HTTP Protocol":"Giao thức HTTP","HTTP protocol must be Auto or HTTP/1.1":"Giao thức HTTP phải là Tự động hoặc HTTP/1.1","HTTP/1.1":"HTTP/1.1","HTTP/2 Connection Shards":"Phân mảnh kết nối HTTP/2","HTTP/2 connection shards are unavailable when HTTP/1.1 is selected.":"Không thể dùng phân mảnh kết nối HTTP/2 khi chọn HTTP/1.1.","HTTP/2 connection shards must be 1 when HTTP/1.1 is selected":"Khi chọn HTTP/1.1, phân mảnh kết nối HTTP/2 phải là 1","HTTP/2 connection shards must be between 1 and 8":"Phân mảnh kết nối HTTP/2 phải từ 1 đến 8","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"Tên dễ đọc hiển thị cho người dùng trong quá trình nhắc nhở Passkey.","I confirm enabling high-risk retry":"Tôi xác nhận bật thử lại rủi ro cao","I have read and agree to the":"Tôi đã đọc và đồng ý với","I have read and understood the above compliance reminder":"Tôi đã đọc và hiểu nhắc nhở tuân thủ ở trên","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"Tôi đã đọc và hiểu nhắc nhở tuân thủ ở trên, thừa nhận các rủi ro pháp lý liên quan và xác nhận rằng tôi chịu trách nhiệm pháp lý phát sinh từ việc triển khai, vận hành và thu phí.","I understand that disabling 2FA removes its authenticator and backup codes.":"Tôi hiểu rằng tắt 2FA sẽ xóa phương thức xác thực bằng ứng dụng và các mã dự phòng.","I understand that disabling 2FA will remove all protection and backup codes":"Tôi hiểu rằng việc vô","Icon":"Biểu tượng","Icon file must be 100 KB or smaller":"Tệp biểu tượng phải có kích thước 100 KB hoặc nhỏ hơn","Icon identifier (e.g. github, gitlab)":"Mã định danh biểu tượng (ví dụ: github, gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"Nếu một lỗi thượng nguồn chứa bất kỳ từ khóa nào trong số này (không phân biệt chữ hoa chữ thường), kênh sẽ tự động bị vô hiệu hóa.","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"Nếu ủy quyền thành công, JSON tạo ra sẽ được chèn vào trường khóa. Bạn vẫn cần lưu kênh để áp dụng.","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"Nếu kết nối với dự án relay One API hoặc New API upstream, hãy sử dụng loại OpenAI thay thế trừ khi bạn biết mình đang làm gì","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"Nếu bật nhóm auto mặc định, token mới sẽ bắt đầu với auto thay vì nhóm trống.","If left blank, the system may use a different website address and Passkey sign-in can fail here.":"Nếu để trống, hệ thống có thể dùng địa chỉ trang khác khiến đăng nhập bằng Passkey tại đây thất bại.","If no preceding rule matched: {{condition}}":"Nếu không khớp quy tắc trước đó: {{condition}}","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"Nếu kênh ưu tiên thất bại và thử lại thành công trên kênh khác, cập nhật ưu tiên sang kênh thành công.","If this keeps happening, please report it on GitHub Issues.":"Nếu sự cố tiếp tục xảy ra, vui lòng báo cáo trên GitHub Issues.","If users already have Passkeys, changing this domain may require them to sign in another way and set up their Passkeys again.":"Nếu người dùng đã có Passkey, đổi tên miền này có thể yêu cầu họ đăng nhập bằng cách khác và thiết lập lại Passkey.","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"Nếu bạn cung cấp dịch vụ AI tạo sinh cho công chúng tại Trung Quốc đại lục, bạn sẽ thực hiện các nghĩa vụ pháp lý bao gồm đăng ký, đánh giá an toàn, an toàn nội dung, xử lý khiếu nại, gắn nhãn nội dung được tạo, lưu giữ nhật ký và bảo vệ thông tin cá nhân.","If your Passkey belongs to another website, start sign-in there:":"Nếu khóa truy cập thuộc trang web khác, hãy đăng nhập tại trang đó:","Ignore":"Bỏ qua","Ignore this version":"Bỏ qua phiên bản này","Ignored upstream models":"Mô hình upstream bị bỏ qua","image":"ảnh","Image":"Hình ảnh","Image Cache":"Bộ nhớ đệm ảnh","Image cache input price":"Giá đầu vào ảnh từ bộ nhớ đệm","Image count":"Số lượng ảnh","Image Generation":"Tạo hình ảnh","Image In":"Ảnh vào","Image input":"Đầu vào hình ảnh","Image input price":"Giá đầu vào hình ảnh","Image not available":"Hình ảnh không khả dụng","Image Out":"Ảnh ra","Image output price":"Giá đầu ra hình ảnh","Image Preview":"Xem trước ảnh","Image prices with count, size or quality adjustments must be converted manually.":"Cần chuyển đổi thủ công giá ảnh có điều chỉnh theo số lượng, kích thước hoặc chất lượng.","Image ratio":"Tỷ lệ hình ảnh","Image to Video":"Ảnh sang video","Image Tokens":"Token hình ảnh","Imagine the pricing table has three groups: default (ratio 1.0), premium (ratio 0.5), and vip (ratio 0.8). Users whose account is in the vip group get user-level perks, and premium is a cheaper channel pool that users can pick for their tokens.":"Giả sử bảng định giá có ba nhóm: default (hệ số 1.0), premium (hệ số 0.5) và vip (hệ số 0.8). Người dùng có tài khoản thuộc nhóm vip nhận ưu đãi cấp người dùng, còn premium là một nhóm kênh rẻ hơn mà người dùng có thể chọn cho token của mình.","Import from URL":"Nhập từ URL","Import to CC Switch":"Nhập vào CC Switch","Input Price: High to Low":"Giá đầu vào: Từ cao đến thấp","Input Price: Low to High":"Giá đầu vào: Thấp đến Cao","Insert a new priority tier":"Chèn mức ưu tiên mới","Invalid announcements format: {{error}}":"Định dạng thông báo không hợp lệ: {{error}}","Invalid API info format: {{error}}":"Định dạng thông tin API không hợp lệ: {{error}}","Invalid authorization code":"Mã ủy quyền không hợp lệ","Invalid Bark push URL":"URL đẩy Bark không hợp lệ","Invalid billing expression for model {{model}}: {{error}}":"Biểu thức tính phí của mô hình {{model}} không hợp lệ: {{error}}","Important":"Quan trọng","Invalid channel ID":"ID kênh không hợp lệ","Importing metadata does not add channels, enable model access, or configure prices.":"Nhập siêu dữ liệu không thêm kênh, mở quyền truy cập mô hình hay cấu hình giá.","Invalid channel priority move":"Thay đổi độ ưu tiên kênh không hợp lệ","Invalid channel settings format: {{error}}":"Định dạng cài đặt kênh không hợp lệ: {{error}}","In BotFather, open Login Widget, register this callback URL, and copy the Client ID and Client Secret. Existing Telegram bindings will continue to work after configuration.":"Trong BotFather, mở Login Widget, đăng ký URL gọi lại này và sao chép Client ID cùng Client Secret. Các liên kết Telegram hiện có sẽ tiếp tục hoạt động sau khi cấu hình.","In JSON, the user group is the outer key and the billing group is the inner key. The example below means: vip users pay 0.8 when billed as standard, and 0.3 when billed as premium.":"Trong JSON, khóa ngoài là nhóm người dùng, khóa trong là nhóm tính phí. Ví dụ dưới đây nghĩa là: người dùng vip trả 0.8 khi tính phí theo standard và 0.3 khi theo premium.","In Progress":"Đang xử lý","Invalid Discovery URL. Only http and https are supported":"Discovery URL không hợp lệ. Chỉ hỗ trợ http và https","Invalid email address":"Địa chỉ email không hợp lệ","In the visual editor these appear as Extra visible and Hidden. In JSON, +: (or no prefix) adds a group and -: removes one.":"Trong trình chỉnh sửa trực quan, các quy tắc này hiển thị là «Hiển thị thêm» và «Ẩn». Trong JSON, +: (hoặc không có tiền tố) thêm nhóm và -: xóa nhóm.","Invalid FAQ format: {{error}}":"Định dạng FAQ không hợp lệ: {{error}}","Invalid Gotify server URL":"URL máy chủ Gotify không hợp lệ","Invalid ID":"ID không hợp lệ","In:":"Vào:","Invalid input":"Dữ liệu nhập không hợp lệ","Invalid input {{error}}":"Dữ liệu nhập không hợp lệ {{error}}","incident":"sự cố","incidents":"sự cố","Incidents":"Sự cố","Include {{price}}":"Bật {{price}}","Include at least one price variable.":"Bật ít nhất một biến giá.","Include Group":"Bao gồm nhóm","Include Model":"Bao gồm mô hình","Invalid parameters":"Tham số không hợp lệ","Include name":"Bao gồm tên","Invalid Passkey login state":"Trạng thái đăng nhập bằng khóa truy cập không hợp lệ","Include quota":"Bao gồm hạn mức","Include Rule Name":"Bao gồm tên quy tắc","Invalid Passkey verification request":"Yêu cầu xác minh khóa truy cập không hợp lệ","Includes changes that require security verification, such as password, two-factor settings, and account deletion.":"Bao gồm các thay đổi cần xác minh bảo mật, như mật khẩu, cài đặt xác thực hai yếu tố và xóa tài khoản.","Includes request rules":"Bao gồm quy tắc yêu cầu","Invalid provider ID":"ID nhà cung cấp không hợp lệ","Invalid request":"Yêu cầu không hợp lệ","Invalid request body.":"Nội dung yêu cầu không hợp lệ.","Invalid request parameter format":"Định dạng tham số yêu cầu không hợp lệ","Invalid request parameters: {{error}}":"Tham số yêu cầu không hợp lệ: {{error}}","Includes tool-call surcharge":"Bao gồm phụ phí gọi công cụ","Including failed requests, 0 = unlimited":"Bao gồm các yêu cầu thất bại, 0 = không giới hạn","Incoming path":"Path đầu vào","Incoming path is required":"Bắt buộc path đầu vào","Incoming path must be unique":"Path đầu vào phải duy nhất","Incoming path must not include query":"Path đầu vào không được chứa query","Incoming path must start with /":"Path đầu vào phải bắt đầu bằng /","Invalid subscription ID":"ID đăng ký không hợp lệ","Invalid top-up amount":"Số lượng nạp không hợp lệ","Invalid top-up quota":"Hạn mức nạp không hợp lệ","Invalid Uptime Kuma group settings format: {{error}}":"Định dạng cài đặt nhóm Uptime Kuma không hợp lệ: {{error}}","Invalid user ID":"ID người dùng không hợp lệ","Incomplete":"Chưa hoàn tất","Invalid warning type":"Loại cảnh báo không hợp lệ","Invalid Webhook URL":"URL Webhook không hợp lệ","Increase quota for user “{{name}}”":"Tăng hạn mức cho người dùng “{{name}}”","Increase user quota":"Tăng hạn mức người dùng","Increased user quota by {{quota}}":"Đã tăng hạn mức người dùng thêm {{quota}}","Index":"Chỉ mục","Invitation code bonus {{quota}}":"Thưởng mã mời {{quota}}","Index request failed with HTTP {{status}}":"Yêu cầu chỉ mục thất bại với HTTP {{status}}","Invitation quota is insufficient!":"Hạn ngạch mời không đủ!","Index URL":"URL chỉ mục","Information unavailable":"Chưa đọc được thông tin","Inherit global Auto order":"Kế thừa thứ tự Auto toàn cục","Inherit global default":"Kế thừa mặc định toàn cục","Inherit vendor icon":"Kế thừa biểu tượng nhà cung cấp","Inherited":"Kế thừa","Inherited from {{vendor}}":"Kế thừa từ {{vendor}}","Initial quota given to new users":"Hạn mức ban đầu cấp cho người dùng mới","Initial quota given to new users ({{formattedQuota}})":"Hạn mức ban đầu cấp cho người dùng mới ({{formattedQuota}})","Initialization failed, please try again.":"Khởi tạo thất bại, vui lòng thử lại.","Initialize":"Khởi tạo","Initialize system":"Khởi tạo hệ thống","Initializing…":"Đang khởi tạo…","Inpaint":"Inpaint","Input":"Đầu vào","Input mode":"Chế độ nhập","Input pre-consume multiplier":"Hệ số khấu trừ trước cho đầu vào","Input price":"Giá đầu vào","Input price is required before saving dependent prices.":"Cần có giá đầu vào trước khi lưu các giá phụ thuộc.","Input token rate":"Tốc độ token đầu vào","Input tokens":"Token đầu vào","Input Tokens":"Token đầu vào","Inset":"Khung trong","Inspect requests, errors, and billing details":"Kiểm tra yêu cầu, lỗi và chi tiết thanh toán","Inspect user prompts":"Kiểm tra lời nhắc của người dùng","Install":"Cài đặt","Install {{name}}":"Cài đặt {{name}}","Install and enable":"Cài đặt và bật","Install, configure, test, and remove task plugins.":"Cài đặt, cấu hình, kiểm tra và gỡ bỏ plugin tác vụ.","Installed":"Đã cài đặt","Installed {{name}} v{{version}}":"Đã cài {{name}} v{{version}}","Installed v{{from}} → marketplace v{{to}}":"Đã cài v{{from}} → chợ v{{to}}","Installed v{{installed}} not listed":"Đã cài v{{installed}}, không có trong chỉ mục","Installed version is not in this index":"Phiên bản đã cài không có trong chỉ mục này","Installing...":"Đang cài đặt…","Instance":"Phiên bản","Instances":"Phiên bản","Insufficient balance":"Số dư không đủ","Insufficient permission to adjust this user":"Không đủ quyền điều chỉnh hạn mức của người dùng này","Integrations":"Tích hợp","Integrity check failed":"Kiểm tra tính toàn vẹn thất bại","Integrity hash":"Mã băm toàn vẹn","Integrity verification unavailable in this environment":"Không thể xác minh trong môi trường hiện tại","Inter-group overrides":"Ghi đè liên nhóm","Inter-group ratio overrides":"Tỷ lệ liên nhóm ghi đè","Interface Language":"Ngôn ngữ giao diện","Internal Notes":"Ghi chú nội bộ","Internal notes (not shown to users)":"Ghi chú nội bộ (không hiển thị cho người dùng)","Internal Server Error!":"Lỗi máy chủ nội bộ!","Interval must be at least 1 minute":"Khoảng thời gian phải ít nhất 1 phút","Invalid (NaN)":"Không hợp lệ (NaN)","Invalid adjustment parameters":"Tham số điều chỉnh hạn mức không hợp lệ","Invalid channel header override":"Cấu hình ghi đè tiêu đề kênh không hợp lệ","Invalid channel proxy":"Cấu hình proxy của kênh không hợp lệ","Invalid chat link. Please contact the administrator.":"Liên kết trò chuyện không hợp lệ. Vui lòng liên hệ quản trị viên.","Invalid chat link. Please contact your administrator.":"Liên kết trò chuyện không hợp lệ. Vui lòng liên hệ với quản trị viên của bạn.","Invalid code":"Mã không hợp lệ","Invalid expression syntax":"Cú pháp biểu thức không hợp lệ","Invalid inference server address":"Địa chỉ máy chủ suy luận không hợp lệ","Invalid items format":"Định dạng mục không hợp lệ","Invalid JSON":"JSON không hợp lệ","Invalid JSON format":"Định dạng JSON không hợp lệ","Invalid JSON format or values out of allowed range":"Định dạng JSON không hợp lệ hoặc giá trị ngoài phạm vi cho phép","Invalid JSON in parameter override template":"JSON không hợp lệ trong mẫu ghi đè tham số","Invalid JSON string.":"Chuỗi JSON không hợp lệ.","Invalid model mapping format":"Định dạng ánh xạ mô hình không hợp lệ","Invalid Passkey domain. Enter a domain without a scheme, port, path or wildcard.":"Tên miền khóa truy cập không hợp lệ. Chỉ nhập tên miền, không có giao thức, cổng, đường dẫn hoặc ký tự đại diện.","Join the same priority tier":"Tham gia cùng mức ưu tiên","Key deleted":"Đã xóa khóa","Key disabled":"Đã tắt khóa","Key enabled":"Đã bật khóa","Invalid Passkey registration response":"Phản hồi đăng ký Passkey không hợp lệ","Key index out of range":"Chỉ mục khóa nằm ngoài phạm vi","Invalid Passkey response":"Phản hồi Passkey không hợp lệ","Invalid payment redirect URL":"URL chuyển hướng thanh toán không hợp lệ","Invalid pricing value":"Giá trị định giá không hợp lệ","Invalid reset link, please request a new password reset":"Liên kết đặt lại không hợp lệ, vui lòng yêu cầu đặt lại mật khẩu mới","Invalid reset link, please request a new password reset.":"Liên kết đặt lại không hợp lệ, vui lòng yêu cầu đặt lại mật khẩu mới.","Invalid response":"Phản hồi không hợp lệ","Invalid rules JSON format":"Định dạng JSON quy tắc không hợp lệ","Invalid status code mapping entries: {{entries}}":"Mục ánh xạ mã trạng thái không hợp lệ: {{entries}}","Invalid status code rules":"Quy tắc mã trạng thái không hợp lệ","Invalid status code rules: {{tokens}}":"Quy tắc mã trạng thái không hợp lệ: {{tokens}}","Invalid vLLM server address":"Địa chỉ máy chủ vLLM không hợp lệ","Invalidate":"Vô hiệu hóa","Invalidated":"Đã vô hiệu","Invert match":"Đảo điều kiện khớp","Invitation Code":"Mã mời","Invitation Quota":"Hạn mức lời mời","Invite Info":"Thông tin mời","Invited":"Đã mời","Invited {{count}} users":"Đã mời {{count}} người","Invited by user ID":"Được mời bởi ID người dùng","Invited Users":"Người dùng được mời","Invitee Reward":"Referral reward","Inviter":"Người mời","Inviter ID: {{id}}":"ID người mời: {{id}}","Inviter Reward":"Phần thưởng người mời","Invites":"Mời","Invoke developer-defined functions with structured arguments":"Gọi các hàm do nhà phát triển định nghĩa với đối số có cấu trúc","InvokeModel (legacy)":"InvokeModel (API cũ)","io.net API Key":"Khóa API io.net","io.net Deployments":"Triển khai io.net","IP":"IP","IP Address":"Địa chỉ IP","IP Filter Mode":"Lọc IP","IP Restriction":"Giới hạn IP","IP Whitelist (supports CIDR)":"Danh sách trắng IP (hỗ trợ CIDR)","IP: {{ip}} · Method: {{method}}":"IP: {{ip}} · Phương thức: {{method}}","is less than the configured maximum cache size":"nhỏ hơn kích thước bộ nhớ đệm tối đa đã cấu hình","is the default price; ":"là giá mặc định; ","It seems like the page you\'re looking for":"Có vẻ như trang bạn đang tìm kiếm","Items":"Mục","Japanese":"Nhật Bản","JavaScript file":"Tệp JavaScript","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"Mảng JSON của các định danh nhóm. Khi được bật bên dưới, các token mới sẽ luân phiên qua danh sách này.","JSON Editor":"Trình chỉnh sửa JSON","JSON format error":"Lỗi định dạng JSON","JSON format supports service account JSON files":"Định dạng JSON hỗ trợ các tệp JSON tài khoản dịch vụ","JSON is invalid at line {{line}}, column {{column}}.":"JSON không hợp lệ tại dòng {{line}}, cột {{column}}.","JSON is invalid at position {{position}}.":"JSON không hợp lệ tại vị trí {{position}}.","JSON is invalid. Please check the syntax.":"JSON không hợp lệ. Vui lòng kiểm tra cú pháp.","JSON keys are request model names; values are upstream model names.":"Khóa JSON là tên mô hình trong yêu cầu; giá trị là tên mô hình thượng nguồn.","JSON map of group → description exposed when users create API keys.":"Ánh xạ JSON của nhóm → mô tả được hiển thị khi người dùng tạo khóa API.","JSON map of group → ratio applied when the user selects the group explicitly.":"Bản đồ JSON của nhóm → tỷ lệ được áp dụng khi người dùng chọn nhóm đó một cách rõ ràng.","JSON map of model → multiplier applied to quota billing.":"Bản đồ JSON của mô hình → hệ số nhân áp dụng cho thanh toán hạn mức.","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"Ánh xạ JSON của mô hình → chi phí USD mỗi yêu cầu. Ưu tiên hơn thanh toán dựa trên tỷ lệ.","JSON mode":"Chế độ JSON","JSON Mode":"Chế độ JSON","JSON must be an object":"JSON phải là object","JSON object:":"Đối tượng JSON:","JSON structure is invalid":"Cấu trúc JSON không hợp lệ","JSON Text":"Văn bản JSON","Leave empty to use the site default ({{amount}})":"Để trống để dùng giá trị mặc định của trang ({{amount}})","Legacy access tokens have been retired. Create a new access token in security settings":"Token truy cập cũ đã ngừng sử dụng. Hãy tạo token truy cập mới trong cài đặt bảo mật","JSON-based access control rules. Leave empty to allow all users.":"Quy tắc kiểm soát truy cập dựa trên JSON. Để trống để cho phép tất cả người dùng.","Just now":"Vừa nãy","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"Giữ ưu tiên khi kênh bị tắt","Keep enabled if you need to proxy requests for different upstream accounts.":"Giữ bật nếu bạn cần proxy yêu cầu cho các tài khoản upstream khác nhau.","Keep enough balance before production traffic":"Giữ đủ số dư trước khi chạy lưu lượng production","Keep existing domain":"Giữ tên miền hiện tại","Keep local":"Giữ dữ liệu cục bộ","Keep original value":"Giữ giá trị gốc","Keep original value (skip if target exists)":"Giữ giá trị gốc (bỏ qua nếu đích đã tồn tại)","Keep the domains used by existing Passkeys, one per line. If the primary domain changed from www.example.com to example.com, enter www.example.com here.":"Giữ các tên miền mà khóa truy cập hiện có sử dụng, mỗi dòng một tên miền. Nếu tên miền chính đổi từ www.example.com sang example.com, hãy giữ www.example.com tại đây.","Keep the names users call; change what is sent upstream.":"Giữ tên người dùng gọi, đổi tên gửi lên nhà cung cấp.","Keep the platform ready":"Giữ nền tảng luôn sẵn sàng","Keep the session binding when the channel is unavailable":"Giữ liên kết phiên khi kênh không khả dụng","Keep this above 1 minute to avoid heavy database load":"Giữ cái này trên 1 phút để tránh tải nặng cơ sở dữ liệu","Keep this vendor":"Giữ nhà cung cấp này","Keep upstream names; choose what users call.":"Giữ tên phía nhà cung cấp, đặt tên để người dùng gọi.","Keep-alive Ping":"Ping duy trì","Keeps compatible responses more repeatable":"Giúp phản hồi tương thích dễ lặp lại hơn","Key":"Khóa","Key Fingerprint":"Vân tay khóa","Key Sources":"Nguồn khóa","Key Summary":"Tóm tắt khóa","Key Update Mode":"Chế độ cập nhật khóa","Keys, OAuth credentials, and multi-key update behavior.":"Khóa, thông tin xác thực OAuth và hành vi cập nhật nhiều khóa.","Kind":"Loại","Linux DO trust level does not meet the minimum required by administrator":"Cấp độ tin cậy Linux DO chưa đạt mức tối thiểu do quản trị viên đặt","Kling":"Kling","Knowledge Base ID":"Mã số Cơ sở kiến thức","Knowledge Base ID *":"Mã số Cơ sở kiến thức *","Knowledge cutoff":"Mốc dữ liệu","Lake View":"Hồ nước","Landing page with system overview.":"Trang chủ với tổng quan hệ thống.","Language preference saved":"Đã lưu tùy chọn ngôn ngữ","Language Preferences":"Tùy chọn ngôn ngữ","Language preferences sync across your signed-in devices and affect API error messages.":"Tùy chọn ngôn ngữ sẽ đồng bộ trên các thiết bị đã đăng nhập và ảnh hưởng đến ngôn ngữ thông báo lỗi API.","Last 24h usage":"Sử dụng 24h qua","Last 30 days uptime":"Uptime 30 ngày qua","Last active {{time}} · Expires {{expires}}":"Hoạt động gần nhất {{time}} · Hết hạn {{expires}}","Last check time":"Thời gian kiểm tra gần nhất","Last detected addable models":"Mô hình có thể thêm được phát hiện gần nhất","Last Login":"Lần đăng nhập cuối","Last Seen":"Lần cuối thấy","Last successful check":"Lần kiểm tra thành công gần nhất","Last Tested":"Được kiểm tra lần cuối","Last updated":"Cập nhật lần cuối","Last updated:":"Cập nhật lần cuối:","Last Used":"Dùng lần cuối","Last used {{time}}":"Dùng lần cuối lúc {{time}}","Last used:":"Lần cuối sử dụng:","Latency":"Độ trễ","Latency check":"Kiểm tra độ trễ","Latency short":"Trễ","Latency trend (last 24h)":"Xu hướng độ trễ (24 giờ qua)","Later":"Để sau","Later requests follow the new channel.":"Các yêu cầu sau sẽ dùng kênh mới.","Latest platform updates and notices":"Cập nhật và thông báo nền tảng mới nhất","Latest version":"Phiên bản mới nhất","Lavender Dream":"Mộng hoa oải hương","Layout":"Bố cục","lead":"dẫn đầu","Leaderboards":"Bảng xếp hạng","Learn more":"Tìm hiểu thêm","Learn more:":"Tìm hiểu thêm:","Leave":"Rời khỏi","Leave blank to keep the existing credential":"Để trống để giữ thông tin xác thực hiện có","Leave blank to keep the existing key":"Để trống để giữ khóa hiện có","Leave blank unless rotating the secret":"Để trống trừ khi xoay vòng bí mật","Leave empty for fallback":"Để trống cho dự phòng","Leave empty for never expires":"Để trống để không bao giờ hết hạn","Leave empty only for the final fallback split.":"Chỉ để trống cho nhánh dự phòng cuối cùng.","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Để trống để tắt yêu cầu đồng ý. Hỗ trợ Markdown, HTML hoặc một URL đầy đủ để chuyển hướng người dùng.","Log export is disabled":"Tính năng xuất nhật ký đã bị tắt","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"Để trống để vô hiệu hóa yêu cầu chính sách bảo mật. Hỗ trợ Markdown, HTML hoặc một URL đầy đủ để chuyển hướng người dùng.","Leave empty to disband the tag":"Để trống để giải tán thẻ","Leave empty to keep existing key":"Để trống để giữ khóa hiện có","Leave empty to keep unchanged":"Để trống để giữ nguyên","Log recording":"Ghi nhật ký","Log search and export":"Tìm kiếm và xuất nhật ký","Leave empty to match all models":"Để trống để khớp tất cả mô hình","Leave empty to use account email":"Để trống để sử dụng email tài khoản","Leave empty to use default":"Để trống để sử dụng mặc định","Leave empty to use system temp directory":"Để trống để sử dụng thư mục tạm của hệ thống","Leave empty to use username":"Để trống để sử dụng tên người dùng","Leave the final split empty as the fallback for models not matched above.":"Để nhánh cuối trống làm dự phòng cho các model chưa khớp ở trên.","Leave this empty only for the final fallback split; it catches client models not matched above.":"Chỉ để trống cho nhánh dự phòng cuối cùng; nhánh này nhận các model client chưa khớp ở trên.","Left to Right":"Trái sang phải","Legacy Format (JSON Object)":"Định dạng cũ (đối tượng JSON)","Legacy format must be a JSON object":"Định dạng cũ phải là đối tượng JSON","Legacy Format Template":"Mẫu định dạng cũ","Legacy full-URL integration; use Advanced Custom for new channels":"Cách kết nối cũ bằng URL yêu cầu đầy đủ; nên dùng Tùy chỉnh nâng cao cho kênh mới","Legacy pricing is deprecated. Convert the current prices to an expression draft, then save to apply it.":"Chế độ giá cũ không còn được khuyến nghị. Chuyển giá hiện tại sang bản nháp biểu thức rồi lưu để áp dụng.","Legacy token":"Token cũ","Legal":"Pháp lý","Less":"Ít hơn","Longest log time range (days)":"Khoảng thời gian nhật ký tối đa (ngày)","Less than":"Nhỏ hơn","Less Than":"Nhỏ hơn","Less than 1 day left":"Còn dưới 1 ngày","Less than or equal":"Nhỏ hơn hoặc bằng","Less Than or Equal":"Nhỏ hơn hoặc bằng","License":"Giấy phép","Light":"Ánh sáng","Lightning Fast":"Nhanh như chớp","Limit period":"Thời hiệu","Limit Reached":"Đã đạt giới hạn","Limit which models can be used with this key":"Giới hạn các mô hình có thể được sử dụng với khóa này","Limited":"Giới hạn","Limits only token-specific Auto snapshots. Global Auto inheritance remains unlimited.":"Chỉ giới hạn cấu hình Auto riêng của token. Việc kế thừa Auto toàn cục không bị giới hạn.","Limits token selection to a probability mass":"Giới hạn lựa chọn token theo khối xác suất","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"Liên kết đến trang web tài liệu của bạn","Linked account":"Tài khoản đã liên kết","Linked models":"Mô hình liên kết","Linked records are counted once. Matching rules show their covered models separately.":"Mỗi bản ghi liên kết được tính một lần. Số mô hình khớp quy tắc được hiển thị riêng.","LinuxDO":"LinuxDO","LinuxDO Client ID":"LinuxDO Mã khách hàng","LinuxDO Client Secret":"LinuxDO Bí mật máy khách","List of models supported by this channel. Use comma to separate multiple models.":"Danh sách các mô hình được hỗ trợ bởi kênh này. Sử dụng dấu phẩy để phân tách nhiều mô hình.","List of origins (one per line) allowed for Passkey registration and authentication.":"Danh sách các nguồn gốc (mỗi dòng một mục) được phép đăng ký và xác thực Passkey.","List registered task plugins and bind them when creating or editing task plugin channels.":"Liệt kê plugin tác vụ đã đăng ký và gắn chúng khi tạo hoặc sửa kênh.","List view":"Xem dạng danh sách","Listing also depends on metadata visibility and the user’s group access.":"Việc hiển thị còn phụ thuộc vào cài đặt siêu dữ liệu và quyền truy cập nhóm của người dùng.","Listing hidden":"Đã ẩn","Live refresh pauses when no task is running":"Tự động làm mới tạm dừng khi không có tác vụ nào đang chạy","LLM Leaderboard":"Bảng xếp hạng LLM","LLM prompt helper":"Trợ lý prompt LLM","Load Balancing":"Tải cân bằng","Load metadata preview":"Tải bản xem trước siêu dữ liệu","Load template...":"Tải mẫu...","Loader":"Trình tải","Loading":"Đang tải","Loading channel details":"Đang tải chi tiết kênh","Loading configuration":"Đang tải cấu hình","Loading content settings...":"Đang tải cài đặt nội dung...","Loading conversation...":"Đang tải cuộc trò chuyện...","Loading current models...":"Đang tải các mô hình hiện tại...","Loading failed":"Tải thất bại","Loading installed source...":"Đang tải mã nguồn đã cài…","Loading maintenance settings...":"Đang tải cài đặt bảo trì...","Loading plugins...":"Đang tải plugin…","Loading settings...":"Đang tải cài đặt...","Loading setup status…":"Đang tải trạng thái cài đặt…","Loading verification methods...":"Đang tải phương thức xác minh…","Loading...":"Đang tải...","Local":"Địa phương","Local Billing":"Thanh toán nội địa","Local check":"Kiểm tra cục bộ","Local Estimate (billing-usage-anthropic)":"Ước tính cục bộ (billing-usage-anthropic)","Local Estimate (billing-usage-gemini)":"Ước tính cục bộ (billing-usage-gemini)","Local Estimate (billing-usage-openai)":"Ước tính cục bộ (billing-usage-openai)","Local models":"Mô hình cục bộ","Locations":"Vị trí","Locked":"Đã khóa","log":"nhật ký","Log cleanup":"Dọn dẹp nhật ký","Log cleanup progress":"Tiến trình dọn dẹp nhật ký","Log cleanup task started.":"Đã bắt đầu tác vụ dọn dẹp nhật ký.","Log Details":"Chi tiết Nhật ký","Log Directory":"Thư mục nhật ký","Log File Count":"Số tệp nhật ký","Log files older than {{value}} days will be deleted.":"Các tệp nhật ký cũ hơn {{value}} ngày sẽ bị xóa.","Log IP address for usage and error logs":"Ghi lại địa chỉ IP cho nhật ký sử dụng và lỗi","Log Maintenance":"Bảo trì Nhật ký","Log Type":"Loại nhật ký","Low balance reminder":"Nhắc nhở khi số dư thấp","Maximum 100 redemption codes can be generated at once":"Mỗi lần chỉ tạo được tối đa 100 mã đổi thưởng","Logged in successfully via {{method}}":"Đăng nhập thành công qua {{method}}","Logic":"Logic","Login":"Đăng nhập","Login & Authentication":"Đăng nhập và xác thực","Login failed":"Đăng nhập thất bại","Login flow expired. Please sign in again.":"Quy trình đăng nhập đã hết hạn. Vui lòng đăng nhập lại.","Login Info":"Thông tin đăng nhập","Login Method":"Phương thức đăng nhập","Login session":"Phiên đăng nhập","Login sessions":"Phiên đăng nhập","Maximum number of tokens reached ({{max}})":"Đã đạt số lượng token tối đa ({{max}})","Login, security and access records":"Nhật ký đăng nhập, bảo mật và truy cập","Logo":"Logo","Logo URL":"URL Logo","Logs":"Nhật ký","Long passwords are unavailable until the password storage upgrade is complete.":"Mật khẩu dài chỉ khả dụng sau khi hoàn tất nâng cấp hệ thống lưu trữ mật khẩu.","Look for a special ratio rule matching this user group and this billing group. If one exists, use its ratio. Otherwise use the billing group base ratio from the pricing table.":"Tìm quy tắc hệ số đặc biệt khớp với nhóm người dùng và nhóm tính phí này. Nếu có thì dùng hệ số của quy tắc, nếu không thì dùng hệ số cơ bản của nhóm tính phí trong bảng định giá.","Low balance":"Số dư thấp","Lowest median first-token latency":"Độ trễ trung vị token đầu tiên thấp nhất","m":"m","Maintenance":"Bảo trì","Make extra groups visible to, or hide default groups from, users of a specific group.":"Hiển thị thêm nhóm cho người dùng của một nhóm cụ thể, hoặc ẩn các nhóm mặc định khỏi họ.","Make it easier for teammates to pick the right group.":"Giúp đồng đội dễ dàng chọn đúng nhóm hơn.","Make sure you understand these effects before enabling.":"Hãy chắc chắn bạn hiểu các ảnh hưởng này trước khi bật.","Manage":"Quản lý","Manage account bindings for this user":"Quản lý liên kết tài khoản cho người dùng này","Manage Bindings":"Quản lý liên kết","Manage catalog visibility and pricing.":"Quản lý hiển thị danh mục và giá cả.","Manage custom OAuth providers for user authentication":"Quản lý nhà cung cấp OAuth tùy chỉnh để xác thực người dùng","Manage Keys":"Quản lý Khóa","Manage local models for:":"Quản lý mô hình cục bộ cho:","Manage metadata, pricing, and channel connections. Each section saves separately.":"Quản lý siêu dữ liệu, giá và liên kết kênh. Mỗi phần được lưu riêng.","Manage multi-key status and configuration for this channel":"Quản lý trạng thái và cấu hình đa khóa cho kênh này","Manage Ollama Models":"Quản lý mô hình Ollama","Manage pricing, visibility and automatic routing for your groups.":"Quản lý giá, phạm vi hiển thị và định tuyến tự động cho các nhóm.","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"Quản lý tệp nhật ký máy chủ. Tệp nhật ký tích lũy theo thời gian; nên dọn dẹp định kỳ để giải phóng dung lượng đĩa.","Manage sources":"Quản lý nguồn","Manage subscription plans and pricing.":"Quản lý gói đăng ký và giá cả.","Manage Subscriptions":"Quản lý đăng ký","Manage vendor details and linked model records.":"Quản lý thông tin nhà cung cấp và bản ghi mô hình liên kết.","Manage Vendors":"Quản lý Nhà cung cấp","Manage your LinuxDO OAuth app":"Quản lý ứng dụng OAuth LinuxDO của bạn","Manage your security settings and account access":"Quản lý cài đặt bảo mật và quyền truy cập tài khoản của bạn","Mantle (Messages API)":"Mantle (Messages API)","Manual Disabled":"Vô hiệu hóa thủ công","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"Ánh xạ các trường từ phản hồi thông tin người dùng sang thuộc tính người dùng cục bộ. Hỗ trợ đường dẫn lồng nhau (ví dụ: ocs.data.id).","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"Ánh xạ các mã định danh mô hình với các phiên bản API Gemini. Một mục `default` áp dụng khi không tìm thấy kết quả khớp cụ thể nào.","Map request model names to actual provider model names (JSON format)":"Ánh xạ tên mô hình yêu cầu đến tên mô hình thực tế của nhà cung cấp (định dạng JSON)","Map response status codes (JSON format)":"Ánh xạ mã trạng thái phản hồi (định dạng JSON)","Map upstream status codes to different codes":"Ánh xạ mã trạng thái upstream sang các mã khác","Market Share":"Thị phần","Marketing":"Tiếp thị","Marketplace":"Chợ plugin","Marketplace installs never force past a conflict. Resolve it on the task plugins page, then install again.":"Cài đặt từ chợ không bao giờ bỏ qua xung đột bằng cách cưỡng chế. Hãy xử lý xung đột ở trang plugin tác vụ rồi cài lại.","Marketplace sources":"Nguồn chợ plugin","Marketplace sources updated":"Đã cập nhật nguồn chợ plugin","Master instances run scheduled background tasks.":"Phiên bản master chạy các tác vụ nền theo lịch.","Match All (AND)":"Tất cả khớp (AND)","Match Any (OR)":"Bất kỳ khớp (OR)","Match Mode":"Chế độ khớp","Minimum transfer quota is {{min}}!":"Hạn ngạch chuyển tối thiểu là {{min}}!","Match model name exactly":"Khớp chính xác tên mô hình","Match models containing this name":"Khớp các mô hình chứa tên này","Match models ending with this name":"Khớp các mô hình kết thúc bằng tên này","Match models starting with this name":"Khớp các mô hình bắt đầu bằng tên này","Match Text":"Văn bản khớp","Match Type":"Loại đối sánh","Match Value":"Giá trị khớp","Match Value (optional)":"Giá trị khớp (tùy chọn)","Missing group ID":"Thiếu ID nhóm","Matched":"Đã khớp","Missing model ID":"Thiếu ID mô hình","Matched models":"Mô hình khớp","Missing parameter rule_name, or use all=true to clear everything":"Thiếu tham số rule_name, hoặc dùng all=true để xóa toàn bộ","Matched Tier":"Bậc khớp","Missing vendor ID":"Thiếu ID nhà cung cấp","Matches models not claimed by earlier splits.":"Khớp các mô hình chưa được nhánh trước nhận.","Matching Rules":"Quy tắc khớp","Matching rules apply to metadata. Pricing is configured for each concrete model.":"Quy tắc khớp chỉ áp dụng cho siêu dữ liệu. Giá được cấu hình cho từng mô hình cụ thể.","Max context tokens":"Số token ngữ cảnh tối đa","Max Disk Cache Size (MB)":"Dung lượng tối đa bộ nhớ đệm đĩa (MB)","Max Entries":"Số mục tối đa","Max output":"Đầu ra tối đa","Max Requests (incl. failures)":"Maximum number of requests (including errors)","Max Requests (including failures)":"Số yêu cầu tối đa (bao gồm cả các lỗi)","Max requests per period":"Yêu cầu tối đa mỗi khoảng thời gian","Max Retries":"Số lần thử lại tối đa","Max Success":"Thành công tối đa","Max successful requests":"Số yêu cầu thành công tối đa","Max Successful Requests":"Yêu cầu thành công tối đa","Max Tokens":"Token tối đa","Maximum {{max}} groups selected":"Đã chọn tối đa {{max}} nhóm","Maximum 1000 characters. Supports Markdown and HTML.":"Tối đa 1000 ký tự. Hỗ trợ Markdown và HTML.","Maximum 200 characters":"Tối đa 200 ký tự","Maximum 500 characters. Supports Markdown and HTML.":"Tối đa 500 ký tự. Hỗ trợ Markdown và HTML.","Maximum cached sessions":"Số phiên lưu đệm tối đa","Maximum check-in quota":"Hạn ngạch điểm danh tối đa","Maximum custom groups per token":"Số nhóm tùy chỉnh tối đa cho mỗi token","Maximum input window":"Cửa sổ nhập tối đa","Maximum number of channels tested at the same time (1-32)":"Số kênh tối đa được kiểm tra cùng lúc (1–32)","Maximum number of tokens each user can create. Default 1000. Setting too large may affect performance.":"Số lượng token tối đa mỗi người dùng có thể tạo. Mặc định là 1000. Đặt quá lớn có thể ảnh hưởng đến hiệu suất.","Maximum number of tokens in the response":"Số token tối đa trong phản hồi","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}":"Giá cố định của mô hình {{model_price}}, hệ số nhóm {{group_ratio}}, thao tác {{action}}","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}, ID {{id}}":"Giá cố định của mô hình {{model_price}}, hệ số nhóm {{group_ratio}}, thao tác {{action}}, ID {{id}}","Maximum quota amount awarded for check-in":"Số lượng hạn ngạch tối đa được trao cho điểm danh","Maximum retries":"Số lần thử lại tối đa","Maximum tokens including hidden reasoning tokens":"Số token tối đa bao gồm token suy luận ẩn","Maximum tokens per response":"Số token tối đa mỗi phản hồi","Maximum tokens per user":"Số token tối đa trên mỗi người dùng","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1, cả hai đều ≤ 2,147,483,647","May be used for training by upstream provider":"Có thể được nhà cung cấp dùng để huấn luyện","Mean queue time":"Thời gian chờ trung bình","Mean request latency":"Độ trễ yêu cầu trung bình","Mean time per output token":"Thời gian trung bình mỗi token đầu ra","Mean time to first token":"Độ trễ token đầu tiên trung bình","Media access expired. Please try again.":"Quyền truy cập nội dung đa phương tiện đã hết hạn. Vui lòng thử lại.","Media preview failed. Please try again.":"Không thể xem trước nội dung đa phương tiện. Vui lòng thử lại.","Media pricing":"Giá phương tiện","Median time-to-first-token (TTFT) sampled hourly per group":"Độ trễ token đầu tiên trung vị (TTFT) lấy mẫu mỗi giờ theo nhóm","Medical Q&A, mental health support":"Hỏi đáp y tế, hỗ trợ sức khỏe tinh thần","Memory":"Bộ nhớ","Memory Hits":"Lượt truy cập bộ nhớ","Memory Threshold (%)":"Ngưỡng bộ nhớ (%)","Merchant ID":"Mã thương gia","Merchant ID is required":"Bắt buộc nhập Merchant ID","Merge into Other":"Gộp vào Khác","Model name already exists":"Tên mô hình đã tồn tại","Model name cannot be empty":"Tên mô hình không được để trống","Merge vendors":"Hợp nhất nhà cung cấp","Model name is too long: {{model}}":"Tên mô hình quá dài: {{model}}","Message Priority":"Ưu tiên tin nhắn","Metadata":"Siêu dữ liệu","Metadata changes":"Thay đổi siêu dữ liệu","Metadata language":"Ngôn ngữ siêu dữ liệu","Metadata only":"Chỉ siêu dữ liệu","Metadata sync completed":"Đồng bộ siêu dữ liệu hoàn tất","Model price {{model_price}}, group ratio {{group_ratio}}":"Giá mô hình {{model_price}}, hệ số nhóm {{group_ratio}}","Metadata sync disabled":"Đã tắt đồng bộ siêu dữ liệu","Metadata sync failed":"Đồng bộ siêu dữ liệu thất bại","Method":"Phương thức","Migration notes":"Ghi chú chuyển đổi","min downtime":"phút gián đoạn","Min Top-up":"Nạp tối thiểu","Min Top-up:":"Nạp tối thiểu:","Model ratio {{model_ratio}}, completion ratio {{completion_ratio}}, audio ratio {{audio_ratio}}, audio completion ratio {{audio_completion_ratio}}, group ratio {{group_ratio}}":"Hệ số mô hình {{model_ratio}}, hệ số hoàn thành {{completion_ratio}}, hệ số âm thanh {{audio_ratio}}, hệ số hoàn thành âm thanh {{audio_completion_ratio}}, hệ số nhóm {{group_ratio}}","MiniMax":"MiniMax","Model ratios reset":"Đã đặt lại hệ số mô hình","Minimum {{amount}}":"Tối thiểu {{amount}}","Minimum check-in quota":"Hạn ngạch điểm danh tối thiểu","Minimum LinuxDO trust level required":"Yêu cầu mức độ tin cậy {{LinuxDO}} tối thiểu","Minimum quota amount awarded for check-in":"Số lượng hạn ngạch tối thiểu được trao cho điểm danh","Minimum recharge amount in USD":"Số tiền nạp tối thiểu bằng USD","Minimum recharge amount to qualify for this discount.":"Số tiền nạp tối thiểu để đủ điều kiện nhận chiết khấu này.","Minimum top-up (optional)":"Số tiền nạp tối thiểu (tùy chọn)","Minimum top-up (USD)":"Mức nạp tối thiểu (USD)","Minimum top-up amount must be at least 1":"Số tiền nạp tối thiểu phải từ 1 trở lên","Minimum top-up quantity":"Số lượng nạp tối thiểu","Minimum topup amount: {{amount}}":"Số tiền nạp tối thiểu: {{amount}}","Minimum Trust Level":"Mức độ tin cậy tối thiểu","Minimum:":"Tối thiểu:","Model test":"Kiểm tra mô hình","Minor blips in the last 30 days":"Vài gián đoạn nhỏ trong 30 ngày qua","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"Tạo một cặp mới bên dưới, hoặc chọn một cặp hiện có ở phía dưới. Nhấn Lưu khi đã sẵn sàng.","Minute":"Phút","minutes":"phút","Missing code":"Thiếu mã","Missing metadata":"Thiếu siêu dữ liệu","Missing Models":"Thiếu Mô hình","Missing user data from Passkey login response":"Thiếu dữ liệu người dùng từ phản hồi đăng nhập Passkey","Mistral":"Mistral","MjProxy":"MjProxy","MjProxyPlus":"MjProxyPlus","Modalities":"Phương thức","Modality":"Phương thức","Mode":"Chế độ","model":"mô hình","Model":"Mô hình","Model {{model}}":"Mô hình {{model}}","Model Access":"Truy cập mô hình","Model Analytics":"Phân tích mô hình","Model Analytics Defaults":"Mặc định phân tích mô hình","Model Analytics Filters":"Bộ lọc phân tích mô hình","Model assignments":"Gán mô hình","model billing support":"hỗ trợ tính phí mô hình","Model Call Analytics":"Phân tích lượt gọi mô hình","Model context usage":"Sử dụng ngữ cảnh mô hình","Model deleted":"Đã xóa mô hình","Model deleted successfully":"Model đã được xóa thành công","Model Deployment":"Triển khai mô hình","Model deployment service is disabled":"Dịch vụ triển khai mô hình đang bị tắt","Model Description":"Mô tả Mô hình","Model details":"Chi tiết mô hình","Model disabled successfully":"Model đã được vô hiệu hóa thành công","Model discovery uses the first key; other keys are not tested.":"Mô hình được lấy bằng khóa đầu tiên; các khóa khác chưa được kiểm tra.","Model discovery uses the saved channel connection settings.":"Việc lấy mô hình sử dụng cài đặt kết nối đã lưu của kênh.","Model enabled successfully":"Model đã được kích hoạt thành công","Model fixed pricing":"Fixed-price model","Model Group":"Nhóm Mô hình","Model hidden from model square":"Đã ẩn mô hình khỏi kho mô hình","Model ID is required":"Cần có ID mô hình","Model Limits":"Giới hạn Mô hình","Model limits enabled":"Đã bật giới hạn mô hình","Model List":"Danh sách mô hình","Model management":"Quản lý mô hình","Model Mapping":"Ánh xạ mô hình","Model Mapping (JSON)":"Ánh xạ mô hình (JSON)","Model Mapping must be a JSON object like":"Ánh xạ Mô hình phải là một đối tượng JSON như","Model mapping must be a JSON object with string values":"Ánh xạ mô hình phải là đối tượng JSON với giá trị chuỗi","Model mapping must be a valid JSON object":"Ánh xạ mô hình phải là một đối tượng JSON hợp lệ","Model mapping must be valid JSON":"Ánh xạ mô hình phải là JSON hợp lệ","Model mapping must be valid JSON format":"Ánh xạ mô hình phải có định dạng JSON hợp lệ","Model mapping values must be strings":"Giá trị ánh xạ mô hình phải là chuỗi","Model mappings are being edited in the floating panel.":"Ánh xạ mô hình đang được chỉnh sửa trong bảng nổi.","Model metadata":"Siêu dữ liệu mô hình","Model metadata saved":"Đã lưu siêu dữ liệu mô hình","Model name":"Tên mẫu","Model Name":"Tên mẫu","Model Name *":"Tên mẫu *","Model name is required":"Tên mô hình là bắt buộc","Model names copied to clipboard":"Tên mô hình đã được sao chép vào bộ nhớ tạm","Model not found":"Không tìm thấy mô hình","Model performance metrics":"Chỉ số hiệu năng mô hình","Model Price":"Giá mô hình","Model price is not configured. Please complete model pricing in settings.":"Giá mô hình chưa được cấu hình. Vui lòng hoàn tất định giá mô hình trong cài đặt.","Model Price Not Configured":"Giá mô hình chưa được cấu hình","Model prices":"Giá mô hình","Model prices reset successfully":"Đã đặt lại giá mô hình thành công","Model Pricing":"Định giá mô hình","Model pricing is managed by a super administrator.":"Giá mô hình do siêu quản trị viên quản lý.","Model pricing saved":"Đã lưu giá mô hình","Model pull failed: {{msg}}":"Tải mô hình thất bại: {{msg}}","Move channels into a priority tier or between tiers. Priority values update automatically.":"Kéo kênh vào cùng mức hoặc giữa các mức ưu tiên. Giá trị ưu tiên được tính tự động.","Multi-key channels do not support balance queries":"Kênh đa khóa không hỗ trợ truy vấn số dư","Model ratio":"Tỷ lệ mô hình","Model ratios":"Tỷ lệ mô hình","Model ratios reset successfully":"Tỷ lệ mô hình đã được đặt lại thành công","Model redirect is unavailable":"Chuyển hướng mô hình không khả dụng","Model redirects":"Chuyển hướng mô hình","Model Regex":"Regex mô hình","Model Regex (one per line)":"Regex mô hình (mỗi dòng một mục)","Model regex cannot be empty":"Regex model không được để trống","Model scope":"Phạm vi mô hình","Model selected":"Đã chọn mô hình","Model shown in model square":"Đã hiển thị mô hình trong kho mô hình","Model source":"Nguồn mô hình","Model Square":"Quảng trường mô hình","Model square visibility":"Hiển thị","Model Tags":"Thẻ mô hình","Model to use for testing":"Mô hình dùng để kiểm thử","Model to use when testing channel connectivity":"Mô hình để sử dụng khi kiểm tra kết nối kênh","Model Version":"Phiên bản mô hình","Model Version *":"Phiên bản mô hình *","Model-scoped only":"Chỉ theo mô hình","model(s) selected out of":"mô hình(s) được chọn trong số","model(s)? This action cannot be undone.":"mô hình(s)? Hành động này không thể hoàn tác.","models":"mô hình","Models":"Mô hình","Models *":"Các mô hình *","Models & Groups":"Mô hình & Nhóm","Models & Routing":"Mô hình & định tuyến","Models appended successfully":"Đã thêm mô hình thành công","Models are required":"Các mô hình được yêu cầu","Models climbing the leaderboard":"Các mô hình đang leo bảng xếp hạng","Models climbing the leaderboard fastest":"Mô hình tăng hạng nhanh nhất","Models directory":"Thư mục mô hình","Models Directory":"Danh mục mô hình","Models exposed by this channel":"Model được kênh này công bố","Models fetched successfully":"Các mô hình đã được tải thành công","Models filled to form":"Mô hình đã được điền vào biểu mẫu","Models listed here skip automatic -thinking / -nothinking suffix handling. Matched names are also exempt from @-modifier parsing and 400 validation. Prefix an entry with re: to match the full model name as a Go regular expression, for example re:.*@sha256:.*":"Các mô hình được liệt kê ở đây sẽ không tự động thêm hoặc xóa hậu tố -thinking / -nothinking. Tên khớp cũng được miễn phân tích và kiểm tra (400) cho bộ sửa đổi @. Mục bắt đầu bằng re: được coi là biểu thức chính quy Go khớp toàn bộ tên mô hình, ví dụ re:.*@sha256:.*","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"Các mô hình được liệt kê ở đây sẽ không tự động thêm hoặc xóa hậu tố -thinking / -nothinking.","Models losing positions":"Các mô hình đang mất vị trí","Models losing the most positions":"Mô hình tụt hạng nhiều nhất","Models not in list, may fail to invoke":"Các mô hình không có trong danh sách, có thể gọi thất bại","Models source":"Nguồn mô hình","Models that are being used but not configured in the system":"Mô hình đang được sử dụng nhưng chưa được cấu hình trong hệ thống","Models that skip thinking suffix processing":"Mô hình bỏ qua xử lý hậu tố thinking","Models updated successfully":"Mô hình đã được cập nhật thành công","Models used on this site":"Mô hình được dùng trên trang này","models.dev pricing preset":"Bộ giá models.dev","Modify existing subscription plan configuration":"Sửa đổi cấu hình gói đăng ký hiện có","Module availability":"Khả dụng của mô-đun","MokaAI":"MokaAI","Monitor":"Giám sát","Monitor balance, usage, and request volume":"Theo dõi số dư, mức dùng và số lượng yêu cầu","Monitored relay requests":"Yêu cầu relay được giám sát","Month":"Tháng","Month number":"Số tháng","Monthly":"Hàng tháng","Monthly tokens":"Token mỗi tháng","months":"tháng","Moonshot":"Dự án táo bạo","More":"Thêm","More actions":"Thao tác khác","More Apps":"Thêm","more mapping":"thêm lập bản đồ","More models ({{count}})":"Mô hình khác ({{count}})","More rules":"Thêm quy tắc","More templates...":"Thêm mẫu...","More than 999 days left":"Hơn 999 ngày","More...":"Thêm...","Most-used models in the selected period and category":"Mô hình được dùng nhiều nhất trong khoảng thời gian và danh mục đã chọn","Move":"Di chuyển","Move {{group}} down":"Di chuyển {{group}} xuống","Move {{group}} up":"Di chuyển {{group}} lên","Move a request header":"Di chuyển header yêu cầu","Move affiliate rewards to your main balance":"Chuyển phần thưởng liên kết vào số dư chính của bạn","Move fallback to end":"Đưa dự phòng xuống cuối","Move Field":"Di chuyển trường","Move Header":"Di chuyển tiêu đề","Move Request Header":"Di chuyển header yêu cầu","Move route down":"Di chuyển tuyến xuống","Move route up":"Di chuyển tuyến lên","Move source field to target field":"Di chuyển trường nguồn sang trường đích","ms":"ms","Multi-key channel: Keys will be":"Kênh đa khóa: Các khóa sẽ là","Multi-Key Management":"Quản lý đa khóa","New priority: {{priority}}":"Mức ưu tiên mới: {{priority}}","New priority: {{priority}} · {{count}} channels affected":"Độ ưu tiên mới: {{priority}} · ảnh hưởng {{count}} kênh","New user registration has been disabled by administrator":"Quản trị viên đã tắt đăng ký người dùng mới","New user sign-up bonus {{quota}}":"Thưởng đăng ký người dùng mới {{quota}}","Multi-key management {{action}} on channel (ID: {{id}})":"Quản lý đa khóa {{action}} trên kênh (ID: {{id}})","Multi-Key Mode (multiple keys, one channel)":"Chế độ đa phím (nhiều phím, một kênh)","Multi-Key Strategy":"Chiến lược đa khóa","Multi-key: Polling rotation":"Đa khóa: Xoay vòng tuần tự","Multi-key: Random rotation":"Đa khóa: Xoay vòng ngẫu nhiên","Multi-protocol Compatible":"Tương thích đa giao thức","Multi-region deployment for stable global access":"Triển khai đa khu vực để truy cập toàn cầu ổn định","Multi-step thinking before final answer":"Suy luận nhiều bước trước khi đưa ra câu trả lời cuối","Multi-user management with flexible permission allocation":"Quản lý nhiều người dùng với phân bổ quyền linh hoạt","Multilingual translation and localisation":"Dịch và bản địa hoá đa ngôn ngữ","Multimodal":"Đa phương thức","Multiplier":"Hệ số nhân","Multiplier applied when":"Hệ số nhân áp dụng khi","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"Hệ số áp dụng khi {{userGroup}} sử dụng {{targetGroup}}","Multiplier for audio inputs.":"Hệ số nhân cho đầu vào âm thanh.","Multiplier for audio outputs.":"Hệ số nhân cho đầu ra âm thanh.","Multiplier for completion tokens.":"Hệ số nhân cho token hoàn thành.","Multiplier for image processing.":"Hệ số nhân trong xử lý ảnh.","Multiplier for prompt tokens.":"Hệ số nhân cho token nhắc lệnh.","Multipliers for recharge pricing based on user groups.":"Hệ số nhân cho việc định giá nạp tiền dựa trên nhóm người dùng.","Must be a valid URL":"Phải là URL hợp lệ","Must be at least 8 characters":"Phải có ít nhất 8 ký tự","Must be greater than 0":"Phải lớn hơn 0","Must be greater than or equal to 0":"Phải lớn hơn hoặc bằng 0","My Subscriptions":"Gói đăng ký của tôi","my-status":"trạng thái của tôi","MySQL detected":"Đã phát hiện MySQL","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL là cơ sở dữ liệu quan hệ sẵn sàng cho production. Hãy giữ thông tin đăng nhập an toàn.","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL đã sẵn sàng để triển khai sản xuất. Đảm bảo sao lưu tự động và một người dùng chuyên dụng với các đặc quyền tối thiểu cần thiết được cấu hình.","No auto-disabled keys to delete":"Không có khóa bị tự động tắt nào để xóa","N/A":"N/A","Name":"Tên","Name *":"Tên *","Name for this redemption code (1-20 characters)":"Tên cho mã đổi quà này (1-20 ký tự)","Name is available":"Tên có sẵn","Name is not available":"Tên không có sẵn","Name Matching Rule":"Quy tắc khớp tên","Name must be 64 characters or fewer":"Tên không được dài quá 64 ký tự","Name must be between {{min}} and {{max}} characters":"Tên phải có giữa {{min}} và {{max}} ký tự","Name Rule":"Quy tắc đặt tên","Name Suffix":"Hậu tố tên","Name the channel and choose the upstream provider.":"Đặt tên kênh và chọn nhà cung cấp upstream.","Name the channel, choose the provider, configure API access, and set credentials.":"Đặt tên kênh, chọn nhà cung cấp, cấu hình truy cập API và thiết lập thông tin xác thực.","Name, provider type, and availability.":"Tên, loại nhà cung cấp và trạng thái khả dụng.","name@example.com":"name@example.com","Native Claude Messages plus OpenAI Chat compatibility forwarding.":"Chuyển tiếp Claude Messages nguyên bản và tương thích OpenAI Chat.","Native format":"Định dạng gốc","Native forwarding":"Chuyển tiếp nguyên bản","Native Gemini routes plus OpenAI Chat and Responses compatibility forwarding.":"Route Gemini nguyên bản cùng chuyển tiếp tương thích OpenAI Chat và Responses.","Native OpenAI routes plus optional Claude and Gemini compatibility routes.":"Route OpenAI nguyên bản cùng các route tương thích Claude và Gemini tùy chọn.","Native routes":"Tuyến nguyên bản","Need a redemption code?":"Cần mã đổi thưởng?","Needs API key":"Cần khóa API","Negate condition":"Đảo điều kiện","Negated group":"Đảo nhóm điều kiện","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"JSON lồng nhau xác định quy tắc theo nhóm để thêm (+:), xóa (-:), hoặc nối các nhóm có thể sử dụng.","Nested JSON: source group →":"JSON lồng nhau: nhóm nguồn →","Network connection failed or server not responding":"Kết nối mạng thất bại hoặc máy chủ không phản hồi","Network proxy for this channel (supports HTTP, HTTPS, SOCKS5, and SOCKS5H)":"Proxy mạng cho kênh này (hỗ trợ HTTP, HTTPS, SOCKS5 và SOCKS5H)","Never":"Không bao giờ","Never expires":"Không hết hạn","Never used":"Chưa từng dùng","Never used an API Gateway?":"Chưa bao giờ sử dụng API Gateway?","NEW":"MỚI","New API":"API mới","New API <noreply@example.com>":"API mới <noreply@example.com>","New API Project Repository:":"Kho lưu trữ Dự án API Mới:","New API\'s flexible channel lets you configure upstream addresses and authentication per endpoint, choose native forwarding or supported protocol conversions, and configure model listing and balance queries independently":"Kênh kết nối linh hoạt của New API cho phép cấu hình địa chỉ thượng nguồn và xác thực theo từng điểm cuối, chọn chuyển tiếp nguyên bản hoặc chuyển đổi giao thức được hỗ trợ, đồng thời cấu hình riêng danh sách mô hình và truy vấn số dư","New domain: {{domain}}":"Tên miền mới: {{domain}}","New email verification code":"Mã xác minh email mới","New Format Template":"Mẫu định dạng mới","New Group":"Nhóm mới","New metadata":"Siêu dữ liệu mới","New model":"Mô hình mới","New Models ({{count}})":"Mô hình mới ({{count}})","New models: all metadata shown below will be imported automatically. No selection is needed.":"Mô hình mới: toàn bộ siêu dữ liệu bên dưới sẽ được nhập tự động, không cần chọn.","New name will be:":"Tên mới sẽ là:","New Passkeys use the primary domain. Compatible domains keep existing Passkeys working.":"Khóa truy cập mới sử dụng tên miền chính. Các tên miền tương thích giúp khóa truy cập hiện có tiếp tục hoạt động.","New Passkeys use this domain. Enter a domain without https://, a port or a path. An empty field uses the system website address.":"Khóa truy cập mới sử dụng tên miền này. Chỉ nhập tên miền, không kèm https://, cổng hoặc đường dẫn. Để trống sẽ sử dụng địa chỉ trang web của hệ thống.","New Passkeys will use the new primary domain. The previous domain will be kept so existing Passkeys can still verify.":"Khóa truy cập mới sẽ dùng tên miền chính mới. Tên miền cũ được giữ lại để các khóa hiện có vẫn có thể xác minh.","New password":"Mật khẩu mới","New Password":"Mật khẩu mới","New password must be different from current password":"Mật khẩu mới phải khác với mật khẩu hiện tại","New records include the fields below. Existing fields are kept unless explicitly selected.":"Bản ghi mới bao gồm các trường bên dưới. Trường hiện có được giữ nguyên trừ khi được chọn rõ ràng.","New User Quota":"Hạn mức người dùng mới","New value":"Giá trị mới","New vendors":"Nhà cung cấp mới","New version available: {{version}}":"Có phiên bản mới: {{version}}","NewAPI":"NewAPI","Newly released":"Vừa phát hành","Next":"Tiếp","Next branch":"Nhánh tiếp theo","Next page":"Trang tiếp theo","Next reset":"Lần đặt lại tiếp theo","No":"Không","No About Content Set":"Chưa đặt nội dung Giới thiệu","No access tokens":"Chưa có token truy cập","No key index specified to delete":"Chưa chỉ định chỉ mục khóa cần xóa","No key index specified to disable":"Chưa chỉ định chỉ mục khóa cần tắt","No key index specified to enable":"Chưa chỉ định chỉ mục khóa cần bật","No Active":"Không hoạt động","No keys to disable":"Không có khóa nào để tắt","No active login sessions":"Không có phiên đăng nhập đang hoạt động","No active system tasks.":"Không có tác vụ hệ thống đang hoạt động.","No additional type-specific settings for this channel type.":"Không có cài đặt bổ sung cụ thể theo loại cho loại kênh này.","No amount options configured. Add amounts below to get started.":"Chưa có tùy chọn số tiền nào được cấu hình. Thêm các số tiền bên dưới để bắt đầu.","No announcements at this time":"Hiện tại chưa có thông báo nào.","No announcements yet. Click \\"Add Announcement\\" to create one.":"Chưa có thông báo nào. Nhấp vào \\"Thêm thông báo\\" để tạo một thông báo.","No API Domains yet. Click \\"Add API\\" to create one.":"Chưa có Tên miền API nào. Nhấp vào \\"Thêm API\\" để tạo.","No API key yet":"Chưa có khóa API","No API keys available. Create your first API key to get started.":"Không có khóa API nào khả dụng. Tạo khóa API đầu tiên của bạn để bắt đầu.","No API Keys Found":"Không tìm thấy khóa API","No API routes configured":"Chưa có tuyến API nào được cấu hình","No API tokens":"Không có khóa API","No app usage data available for this model.":"Chưa có dữ liệu sử dụng ứng dụng cho mô hình này.","No apps match the selected filters":"Không có ứng dụng phù hợp bộ lọc","No Auth":"Không xác thực","No auto groups configured":"Chưa cấu hình nhóm tự động","No available channels":"Không có kênh khả dụng","No available groups in the global Auto order.":"Không có nhóm khả dụng trong thứ tự Auto toàn cục.","No available models":"Không có mô hình khả dụng","No available Web chat links":"Không có liên kết Web chat khả dụng","No backup":"Chưa sao lưu","No base input price":"Chưa có giá đầu vào cơ bản","No billing parameters declared":"Chưa khai báo tham số tính phí","No billing records found":"Không tìm thấy hồ sơ thanh toán","No capabilities reported for this model.":"Chưa có khả năng nào được báo cáo cho mô hình này.","No Change":"Không thay đổi","No changelog for this version.":"Phiên bản này chưa có nhật ký thay đổi.","No changes":"Không có thay đổi","No changes made":"Không có thay đổi nào được thực hiện","No changes to save":"Không có thay đổi nào để lưu","No channel is configured. This model will not appear in the model square.":"Chưa cấu hình kênh. Mô hình này sẽ không xuất hiện trong danh mục.","No channel is currently available. This model will not appear in the model square.":"Hiện không có kênh khả dụng. Mô hình này sẽ không xuất hiện trong danh mục.","No channel selected":"Chưa chọn kênh nào","No channel type found.":"Không tìm thấy loại kênh.","No channels available. Create your first channel to get started.":"Không có kênh nào khả dụng. Hãy tạo kênh đầu tiên của bạn để bắt đầu.","No channels found":"Không tìm thấy kênh nào","No Channels Found":"Không tìm thấy kênh nào","No channels selected":"Không có kênh nào được chọn","No chat presets configured. Click \\"Add chat preset\\" to get started.":"Chưa cấu hình cài đặt trước trò chuyện. Nhấp vào \\"Thêm cài đặt trước trò chuyện\\" để bắt đầu.","No chat presets match your search":"Không có cài đặt trước trò chuyện nào khớp với tìm kiếm của bạn","No configured channel models match this metadata rule.":"Không có mô hình nào trong các kênh đã cấu hình khớp với quy tắc siêu dữ liệu này.","No conflict entries available.":"Không có mục xung đột nào khả dụng.","No conflicts match your search.":"Không có xung đột nào khớp với tìm kiếm của bạn.","No connection info found in clipboard":"Không tìm thấy thông tin kết nối trong bảng tạm","No console output":"Không có đầu ra console","No containers":"Không có container","No content to copy":"Không có nội dung để sao chép","No custom groups. Saving will inherit the complete global Auto order.":"Chưa có nhóm tùy chỉnh. Sau khi lưu, thứ tự Auto toàn cục đầy đủ sẽ được kế thừa.","No custom OAuth providers configured yet.":"Chưa có nhà cung cấp OAuth tùy chỉnh nào được cấu hình.","No data":"Không có dữ liệu","No Data":"Không có dữ liệu","No data available":"Không có dữ liệu","No deployments available. Create one to get started.":"Không có triển khai nào khả dụng. Tạo một cái để bắt đầu.","No Deployments Found":"Không tìm thấy triển khai nào","No description available.":"Chưa có mô tả.","No notifications are available to you right now":"Hiện không có thông báo nào dành cho bạn","No permission to access users of same or higher level":"Không có quyền xem người dùng cùng cấp hoặc cấp cao hơn","No permission to change the 2FA settings of users at the same or higher level":"Không có quyền thay đổi cài đặt 2FA của người dùng cùng cấp hoặc cấp cao hơn","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"Chưa cấu hình cấp chiết khấu nào. Nhấp vào \\"Thêm cấp chiết khấu\\" để bắt đầu.","No permission to update users of same or higher permission level":"Không có quyền cập nhật người dùng có cấp quyền bằng hoặc cao hơn","No duplicate keys found":"Không tìm thấy khóa trùng lặp","No enabled channel key":"Không có khóa kênh đang bật","No enabled groups":"Không có nhóm đang bật","No enabled tokens available":"Không có token nào được kích hoạt","No encryption":"Không mã hóa","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"Chưa cấu hình endpoint nào. Chuyển sang chế độ JSON hoặc thêm hàng để định nghĩa endpoint.","No endpoints inferred from channels":"Không xác định được điểm cuối từ kênh","No extra domains declared":"Không khai báo miền bổ sung","No FAQ entries available":"Không có mục FAQ nào.","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"Chưa có mục FAQ nào. Nhấp vào \\"Thêm FAQ\\" để tạo một mục.","No files match the accepted types.":"Không có tệp nào khớp với các loại được chấp nhận.","No flow data available":"Không có dữ liệu luồng","No group":"Không có nhóm","No group found.":"Không tìm thấy nhóm.","No group-based rate limits configured. Click \\"Add group\\" to get started.":"Chưa cấu hình giới hạn tốc độ dựa trên nhóm. Nhấp \\"Add group\\" để bắt đầu.","No groups match your search":"Không có nhóm nào khớp với tìm kiếm của bạn","No groups yet. Add a group to get started.":"Chưa có nhóm nào. Thêm một nhóm để bắt đầu.","No header overrides configured.":"Không có ghi đè tiêu đề nào được cấu hình.","No historical system tasks.":"Không có tác vụ hệ thống trong lịch sử.","No history data available":"Không có dữ liệu lịch sử","No incidents in the last 24 hours":"Không có sự cố trong 24 giờ qua","No incidents in the last 30 days":"Không có sự cố trong 30 ngày qua","No instances have reported yet.":"Chưa có phiên bản nào báo cáo.","No integrity hash":"Không có mã băm toàn vẹn","No integrity verification":"Không kiểm tra toàn vẹn","No Inviter":"Không có người mời","No IP restriction":"Không giới hạn","No keys found":"Không tìm thấy khóa","No latency data available":"Không có dữ liệu độ trễ","No linked models":"Chưa có mô hình liên kết","No linked OAuth provider is available.":"Không có nhà cung cấp OAuth đã liên kết nào khả dụng.","No log entries matched the selected time.":"Không có mục nhật ký nào khớp với thời gian đã chọn.","No logs":"Không có nhật ký","No Logs Found":"Không tìm thấy nhật ký","No mappings configured. Click \\"Add Row\\" to get started.":"Chưa có ánh xạ nào được cấu hình. Nhấp vào \\"Thêm hàng\\" để bắt đầu.","No marketplace sources configured.":"Chưa cấu hình nguồn chợ plugin nào.","No matches found":"Không tìm thấy kết quả nào","No matching channels":"Không có kênh khớp","No matching icons":"Không có biểu tượng phù hợp","No matching items":"Không có mục phù hợp","No matching provider":"Không có nhà cung cấp phù hợp","No matching results":"Không có kết quả phù hợp","No matching rules":"Không có quy tắc phù hợp","No matching token and channel usage was found.":"Không tìm thấy mức sử dụng token và kênh phù hợp.","No messages yet":"Chưa có tin nhắn","No missing models found.":"Không tìm thấy mô hình nào bị thiếu.","No model found.":"Không tìm thấy mô hình.","No model mappings configured. Click \\"Add Mapping\\" to get started.":"Chưa có ánh xạ mô hình nào được cấu hình. Nhấp vào \\"Thêm ánh xạ\\" để bắt đầu.","No model price changes to save":"Không có thay đổi giá mô hình nào cần lưu","No models available":"Không có mô hình nào khả dụng","No models available in this category":"Không có mô hình nào trong danh mục này","No models available. Create your first model to get started.":"Không có mô hình nào khả dụng. Hãy tạo mô hình đầu tiên của bạn để bắt đầu.","No models can be synced with the current filters. Adjust the search or sync scope.":"Không có mô hình nào có thể đồng bộ với bộ lọc hiện tại. Hãy đổi tìm kiếm hoặc phạm vi đồng bộ.","No models configured. Use Add model to get started.":"Chưa cấu hình mô hình. Dùng Thêm mô hình để bắt đầu.","No models fetched from upstream":"Không lấy được mô hình nào từ upstream","No models fetched yet.":"Chưa có mô hình nào được tìm nạp.","No models found":"Không tìm thấy mô hình nào","No Models Found":"Không tìm thấy mô hình nào","No models found.":"Không tìm thấy mô hình.","No models match the selected filters":"Không có mô hình phù hợp bộ lọc","No models match these filters":"Không có mô hình khớp bộ lọc","No valid upstream channel":"Không có kênh thượng nguồn hợp lệ","No models match your current filters.":"Không có mô hình nào khớp với bộ lọc hiện tại của bạn.","No models match your search":"Không có mô hình phù hợp với tìm kiếm","No models matched your search.":"Không có mô hình nào khớp với tìm kiếm của bạn.","No models returned by the upstream":"Thượng nguồn không trả về mô hình","No models selected":"Chưa chọn mô hình nào","No models to add":"Không có mô hình để thêm","No models to copy":"Không có mô hình nào để sao chép","No models to remove":"Không có mô hình để xóa","No models with unset prices":"Không có mô hình chưa thiết lập giá","No new models to add":"Không có mô hình mới để thêm","No new models yet":"Chưa có mô hình mới","No newer version available.":"Không có phiên bản mới hơn.","No nodes":"Không có nút","No notable climbers right now":"Hiện chưa có mô hình nào tăng đáng kể","No notable drops right now":"Hiện chưa có mô hình nào giảm đáng kể","No parameter overrides configured.":"Không có ghi đè tham số nào được cấu hình.","No Passkey is registered.":"Chưa đăng ký Passkey.","No payment methods available. Please contact administrator.":"Không có phương thức thanh toán nào khả dụng. Vui lòng liên hệ quản trị viên.","No payment methods configured":"Chưa cấu hình phương thức thanh toán","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"Chưa cấu hình phương thức thanh toán. Nhấp vào \\"Thêm phương thức\\" hoặc sử dụng mẫu để bắt đầu.","No payment methods match your search":"Không có phương thức thanh toán nào khớp với tìm kiếm của bạn","No performance data available":"Không có dữ liệu hiệu năng","No permission to perform this action":"Không có quyền thực hiện thao tác này","No plans available":"Không có gói nào khả dụng","No plugins available for binding":"Không có plugin để liên kết","No preceding rule matched":"Không khớp quy tắc nào trước đó","No preference":"Không có ưu tiên","No prefill groups yet":"Chưa có nhóm điền sẵn nào","Not implemented yet":"Chưa được triển khai","No price differences found":"Không tìm thấy sự khác biệt về giá","No processable upstream model updates for this channel":"Không có cập nhật mô hình upstream có thể xử lý cho kênh này","No products configured. Click \\"Add product\\" to get started.":"Chưa cấu hình sản phẩm nào. Nhấp \\"Thêm sản phẩm\\" để bắt đầu.","No products match your search":"Không có sản phẩm nào khớp với tìm kiếm của bạn","Not logged in":"Chưa đăng nhập","No providers available":"Không có nhà cung cấp khả dụng","No Quota":"Không hạn ngạch","No quota limit":"Không giới hạn","No ratio differences found":"Không tìm thấy sự khác biệt tỷ lệ","No recent usage":"Chưa có sử dụng gần đây","No records":"Chưa có bản ghi","No records found. Try adjusting your filters.":"Không tìm thấy bản ghi nào. Hãy thử điều chỉnh bộ lọc của bạn.","No redemption codes available. Create your first redemption code to get started.":"Hiện không có mã đổi thưởng nào. Hãy tạo mã đổi thưởng đầu tiên của bạn để bắt đầu.","No Redemption Codes Found":"Không tìm thấy mã đổi thưởng","No related models available for this channel type":"Không có mô hình liên quan nào cho loại kênh này","No release notes provided.":"Không có ghi chú phát hành nào được cung cấp.","No releases found.":"Không tìm thấy bản phát hành khả dụng.","No Reset":"Không đặt lại","No reset credits":"Không có lượt đặt lại","No reset credits available":"Không có lượt đặt lại khả dụng","No restriction":"Không giới hạn","No results for \\"{{query}}\\". Try adjusting your search or filters.":"Không tìm thấy kết quả cho \\"{{query}}\\". Hãy thử điều chỉnh tìm kiếm hoặc bộ lọc.","No results found":"Không tìm thấy kết quả nào","No results found.":"Không tìm thấy kết quả.","No Retry":"Không thử lại","No rule for vip billed as default → use the base ratio of default, 1.0 (the 0.8 of vip is not used)":"Không có quy tắc «vip theo default» → dùng hệ số cơ bản của default, 1.0 (0.8 của vip không được dùng)","No rule for vip billed as vip → use the base ratio of vip, 0.8":"Không có quy tắc «vip theo vip» → dùng hệ số cơ bản của vip, 0.8","No rules yet":"Chưa có quy tắc","No rules yet. Add a group below to get started.":"Chưa có quy tắc nào. Thêm một nhóm bên dưới để bắt đầu.","No separate media pricing configured.":"Chưa cấu hình giá phương tiện riêng.","No source available":"Chưa có mã nguồn","No source changes":"Mã nguồn không thay đổi","No special ratios configured":"Chưa cấu hình hệ số đặc biệt","No status code mappings configured.":"Chưa cấu hình ánh xạ mã trạng thái.","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"Merchant này chưa có cửa hàng. Đặt URL trả về và nhấn Tạo để tạo cặp đầu tiên.","No subscription plans yet":"Chưa có gói đăng ký nào","No subscription records":"Không có bản ghi đăng ký","No Sync":"Không đồng bộ","No syncable models":"Không có mô hình có thể đồng bộ","No system announcements":"Không có thông báo hệ thống","No system tasks yet.":"Chưa có tác vụ hệ thống nào.","No task plugins found":"Không tìm thấy plugin tác vụ","No token found.":"Không tìm thấy mã thông báo.","No tools configured":"Chưa cấu hình công cụ nào","No Upgrade":"Không nâng cấp","No upstream price differences found":"Không tìm thấy sự khác biệt về giá upstream","No upstream ratio differences found":"Không tìm thấy chênh lệch tỷ lệ thượng nguồn","Notifications to receive":"Thông báo muốn nhận","OAuth provider not found":"Không tìm thấy nhà cung cấp OAuth","No uptime data available":"Không có dữ liệu thời gian hoạt động","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"Chưa có nhóm Uptime Kuma nào. Nhấp vào \\"Thêm nhóm\\" để tạo một nhóm.","No uptime monitoring configured":"Chưa cấu hình giám sát thời gian hoạt động","No usage logs available. Logs will appear here once API calls are made.":"Chưa có nhật ký sử dụng. Nhật ký sẽ hiển thị sau khi có gọi API.","No user information available":"Không có thông tin người dùng","No user selected":"Chưa chọn người dùng","No users":"Không có người dùng","No users available. Try adjusting your search or filters.":"Không có người dùng nào. Hãy thử điều chỉnh tìm kiếm hoặc bộ lọc của bạn.","No Users Found":"Không tìm thấy người dùng nào","No valid custom Auto groups remain. Add a group or restore global Auto.":"Không còn nhóm Auto tùy chỉnh hợp lệ. Hãy thêm nhóm hoặc khôi phục Auto toàn cục.","No vendor":"Chưa có nhà cung cấp","No vendor data available":"Không có dữ liệu nhà cung cấp","No vendors found":"Không tìm thấy nhà cung cấp","No verification method is available for this action.":"Không có phương thức xác minh khả dụng cho thao tác này.","No version history":"Chưa có lịch sử phiên bản","No X Found":"Không tìm thấy X","Node":"Nút","Node filters":"Bộ lọc nút","Node Name":"Tên nút","Node role":"Vai trò node","Nodes reporting from this deployment and their latest heartbeat.":"Các node đang báo cáo từ bản triển khai này và nhịp tim mới nhất của chúng.","Non-stream":"Không phát trực tuyến","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"Phần thưởng mời khác 0 yêu cầu xác nhận tuân thủ trong cài đặt Cổng thanh toán.","None":"Không có","None (plugin declaration)":"Không có (theo khai báo plugin)","noreply@example.com":"noreply@example.com","Normalized:":"Chuẩn hóa:","Not available":"Không khả dụng","Not backed up":"Chưa sao lưu","Not bound":"Không bị ràng buộc","OIDC ID is empty!":"ID OIDC trống!","Not configured":"Chưa cấu hình","Not configured for some providers":"Một số nhà cung cấp chưa được thiết lập giá","Not configured for this provider":"Chưa thiết lập giá cho nhà cung cấp này","Not declared":"Không khai báo","Not declared by this plugin":"Plugin chưa khai báo","Not declared; an API key may still be required.":"Chưa khai báo cách xác thực; vẫn có thể cần khóa API.","Not Equals":"Không bằng","Not found upstream":"Không tìm thấy ở nguồn","Not in pricing table":"Không có trong bảng định giá","Not included":"Không bao gồm","Not installed":"Chưa cài đặt","Not listed":"Ẩn","Not matched":"Không khớp","Online top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"Nạp tiền trực tuyến thành công, số tiền đã nạp: {{quota}}, số tiền thanh toán: {{amount}}","Not provided by this source":"Nguồn này không cung cấp","Not recorded":"Chưa ghi nhận","Not registered":"Chưa đăng ký","Not set":"Chưa đặt","Not Set":"Chưa đặt","Not set yet":"Chưa thiết lập","Not shown":"Ẩn","Not Started":"Chưa bắt đầu","Not Submitted":"Chưa gửi","Not tested":"Chưa kiểm tra","Not used for upstream training by default":"Mặc định không dùng để huấn luyện ở phía nhà cung cấp","Not used yet":"Chưa sử dụng","Note":"Ghi chú","Notice":"Thông báo","Notification Email":"Email thông báo","Notification Method":"Phương thức thông báo","Notifications":"Thông báo","Now a user whose user group is vip creates tokens with different groups and makes one call with each:":"Bây giờ, một người dùng có nhóm người dùng là vip tạo các token với nhóm khác nhau và gọi mỗi token một lần:","Nucleus sampling probability mass":"Tổng xác suất cho nucleus sampling","Number":"Số","Number of codes to create":"Số mã cần tạo","Number of completions to generate":"Số lượng phản hồi cần sinh","Number of images to generate":"Số ảnh cần sinh","Number of keys to create":"Số lượng khóa cần tạo","Number of times to retry failed requests (0-10)":"Số lần thử lại các yêu cầu không thành công (0-10)","Number of tokens per unit quota":"Số token trên đơn vị hạn mức","Number of top log probabilities returned per token":"Số log probabilities hàng đầu trên mỗi token","Number of users invited":"Số người dùng được mời","OAuth":"OAuth","OAuth 2.0 service account":"Tài khoản dịch vụ OAuth 2.0","OAuth authorization timed out. Please try again.":"Ủy quyền OAuth đã hết thời gian chờ. Vui lòng thử lại.","OAuth authorization was cancelled.":"Đã hủy ủy quyền OAuth.","OAuth binding timed out. Please try again.":"Liên kết OAuth đã hết thời gian chờ. Vui lòng thử lại.","OAuth binding window is no longer available":"Cửa sổ liên kết OAuth không còn khả dụng","OAuth callback URL":"URL callback OAuth","OAuth Client ID":"ID Client OAuth","OAuth Client Secret":"Bí mật OAuth Client","OAuth failed":"OAuth thất bại","OAuth Integrations":"Tích hợp OAuth","OAuth pop-up was blocked":"Cửa sổ bật lên OAuth đã bị chặn","OAuth popup storage is unavailable.":"Không thể sử dụng bộ nhớ của cửa sổ OAuth.","OAuth window is no longer available.":"Cửa sổ OAuth không còn khả dụng.","Object Prune Rules":"Quy tắc dọn dẹp đối tượng","Observability":"Khả năng quan sát","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"Lấy API key, mã thương gia và cặp khóa RSA từ bảng điều khiển Waffo, đồng thời cấu hình URL callback.","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: /api/waffo-pancake/webhook":"Lấy merchant, store, product và khóa ký từ bảng điều khiển Waffo. Webhook: /api/waffo-pancake/webhook","Ocean Breeze":"Gió biển","of":"of","of 3:":"of 3:","off":"off","Official":"Chính thức","Official Claude Messages":"Claude Messages chính thức","Official documentation":"Tài liệu chính thức","Official Gemini from OpenAI Chat":"Gemini chính thức từ OpenAI Chat","Official Gemini Native":"Gemini native chính thức","Official OpenAI Chat":"OpenAI Chat chính thức","Official OpenAI Embeddings":"OpenAI Embeddings chính thức","Official OpenAI Images":"OpenAI Images chính thức","Official OpenAI Responses":"OpenAI Responses chính thức","Official pricing preset":"Bộ giá chính thức","Official Repository":"Kho lưu trữ chính thức","Official Sync":"Official sync","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"Mã máy khách OIDC","OIDC Client Secret":"Mã bí mật ứng dụng khách OIDC","OIDC configuration fetched successfully":"Cấu hình OIDC đã được lấy thành công","OIDC discovery can fill the endpoint fields automatically when the provider supports it.":"OIDC Discovery có thể tự động điền các trường endpoint khi nhà cung cấp hỗ trợ.","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"URL khám phá OIDC. Nhấp \\"Tự động khám phá\\" để tự động lấy các endpoint.","OIDC Display Name":"Tên hiển thị OIDC","OIDC endpoints discovered successfully":"Đã khám phá thành công các endpoint OIDC","Old Format Template":"Mẫu Định dạng Cũ","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"Định dạng cũ: Ghi đè trực tiếp. Định dạng mới: Hỗ trợ phán đoán có điều kiện và các thao tác JSON tùy chỉnh.","Ollama":"Ollama","Ollama Models":"Mô hình Ollama","One API":"Một API","One domain per line":"Một tên miền mỗi dòng","One domain per line (only used when domain restriction is enabled)":"Mỗi dòng một tên miền (chỉ được sử dụng khi hạn chế tên miền được bật)","One IP or CIDR range per line":"Một IP hoặc dải CIDR mỗi dòng","One IP per line (empty for no restriction)":"Mỗi IP một dòng (để trống nếu không giới hạn)","one keyword per line":"Mỗi dòng một từ khóa","online":"trực tuyến","Online":"Trực tuyến","Online payment is not enabled. Please contact the administrator.":"Thanh toán trực tuyến chưa được kích hoạt. Vui lòng liên hệ quản trị viên.","Online topup is not enabled. Please use redemption code or contact administrator.":"Tính năng nạp tiền trực tuyến chưa được bật. Vui lòng sử dụng mã quy đổi hoặc liên hệ quản trị viên.","Only allow specific email domains":"Chỉ cho phép các tên miền email cụ thể","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"Chỉ khả dụng cho quản trị viên. Khi bật, bạn sẽ nhận được thông báo tổng hợp qua phương thức đã chọn khi kiểm tra mô hình định kỳ phát hiện thay đổi mô hình nguồn hoặc lỗi kiểm tra.","Only available for exact matching":"Chỉ dùng cho khớp chính xác","Only configured combinations are overridden. All other calls keep the billing group base ratio.":"Chỉ các tổ hợp đã cấu hình mới bị ghi đè. Các cuộc gọi khác vẫn dùng hệ số cơ bản của nhóm tính phí.","Only configured combinations are overridden. All other calls keep the token group base ratio.":"Chỉ các tổ hợp đã cấu hình mới bị ghi đè. Các lệnh gọi khác giữ tỷ lệ cơ bản của nhóm token.","Only enabled parameters are sent with the request.":"Chỉ các tham số đã bật mới được gửi trong yêu cầu.","Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.":"Chỉ nhập origin của trang, ví dụ https://api.example.com. Không nhập đường dẫn như /api/user/epay/notify. Để trống để dùng địa chỉ máy chủ.","Only exact model names are removed from enabled and disabled channels. Matching rules are not expanded, and channel records are retained.":"Chỉ xóa tên mô hình khớp chính xác khỏi các kênh đang bật và đã tắt. Không mở rộng quy tắc so khớp và vẫn giữ lại các kênh.","Only Mine":"Chỉ của tôi","Only one catch-all route is allowed for the same incoming path":"Mỗi đường dẫn đầu vào chỉ được có một tuyến dự phòng","Order is not pending payment and cannot be completed":"Đơn hàng không ở trạng thái chờ thanh toán nên không thể hoàn tất","Order number not provided":"Chưa cung cấp mã đơn hàng","Only one OpenAI Models route is allowed":"Chỉ được phép có một tuyến Mô hình OpenAI","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.":"Chỉ các trường được chọn sẽ bị ghi đè. Bạn có thể chạy lại trình hướng dẫn đồng bộ hóa nếu có xung đột mới xuất hiện.","Only show syncable models":"Chỉ hiện mô hình có thể đồng bộ","Only successful requests":"Chỉ các yêu cầu thành công","Only successful requests count toward this limit.":"Chỉ những yêu cầu thành công mới được tính vào giới hạn này.","Only the changes listed here will be committed. If any write fails, none of these changes are applied.":"Chỉ lưu các thay đổi được liệt kê. Nếu bất kỳ thao tác ghi nào thất bại, không thay đổi nào được áp dụng.","Only the first {{shown}} IDs were recorded":"Chỉ ghi nhận {{shown}} ID đầu tiên","Only the first {{shown}} IDs were recorded ({{total}} requested)":"Chỉ ghi nhận {{shown}} ID đầu tiên (đã yêu cầu {{total}})","Only the last {{value}} log files will be retained; the rest will be deleted.":"Chỉ giữ lại {{value}} tệp nhật ký gần nhất; phần còn lại sẽ bị xóa.","Only used to find historical logs. New records are available in Audit Logs.":"Chỉ dùng để tìm nhật ký cũ. Bản ghi mới có trong Nhật ký kiểm toán.","Oops! Page Not Found!":"Ối! Không tìm thấy trang!","Oops! Something went wrong":"Oops! An error occurred.","Open":"Mở","Open a source model first":"Mở một mô hình nguồn trước","Open CC Switch":"Mở công tắc CC","Open filtered model list":"Mở danh sách mô hình đã lọc","Open in chat":"Mở trong trò chuyện","Open in new tab":"Mở trong tab mới","Open in New Tab":"Mở trong tab mới","Open menu":"Mở menu","Open Query Balance to view the upstream JSON response":"Mở “Truy vấn số dư” để xem phản hồi JSON thượng nguồn","Open release":"Phát hành mở","Open source":"Mã nguồn mở","Open Source":"Mã nguồn mở","Open the io.net console API Keys page":"Mở trang Khóa API của console io.net","Open theme settings":"Mở cài đặt giao diện","Open weights":"Trọng số mở","OpenAI":"OpenAI","OpenAI Chat Completions":"OpenAI Chat Completions","OpenAI Chat to Anthropic Messages":"OpenAI Chat sang Anthropic Messages","OpenAI Chat to Gemini Generate Content":"OpenAI Chat sang Gemini Generate Content","OpenAI Chat to OpenAI Responses":"OpenAI Chat sang OpenAI Responses","OpenAI Compatible":"Tương thích OpenAI","OpenAI Compatible Upstream":"Thượng nguồn tương thích OpenAI","OpenAI Models route does not support client model rules":"Tuyến Mô hình OpenAI không hỗ trợ quy tắc mô hình phía máy khách","OpenAI Models route does not support pass-through":"Tuyến Mô hình OpenAI không hỗ trợ truyền thẳng","OpenAI Models route is required to enable upstream model checks":"Cần có tuyến Mô hình OpenAI để bật kiểm tra mô hình thượng nguồn","OpenAI Models route must use native forwarding":"Tuyến Mô hình OpenAI phải dùng chuyển tiếp nguyên bản","OpenAI Models upstream path must not contain {model}":"Đường dẫn thượng nguồn của Mô hình OpenAI không được chứa {model}","OpenAI only":"Chỉ OpenAI","OpenAI Organization":"Tổ chức OpenAI","OpenAI Organization ID (optional)":"ID Tổ chức OpenAI (tùy chọn)","OpenAI Responses to Gemini Generate Content":"OpenAI Responses sang Gemini Generate Content","OpenAI Responses to OpenAI Chat":"OpenAI Responses sang OpenAI Chat","OpenAI, Anthropic, etc.":"OpenAI, Anthropic, v.v.","OpenAI, Anthropic, Google, etc.":"OpenAI, Anthropic, Google, v.v.","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"mở trong một ứng dụng bên ngoài. Kích hoạt nó từ thanh bên hoặc các hành động khóa API để khởi chạy ứng dụng đã cấu hình.","Operate channels":"Vận hành kênh","Operation":"Thao tác","operation and charging behavior":"vận hành và thu phí","Operation audit":"Kiểm toán thao tác","Operation Audit Info":"Thông tin kiểm toán thao tác","Operation cancelled":"Đã hủy thao tác","Operation failed":"Thao tác thất bại","Operation successful":"Thao tác thành công","Operation Type":"Loại thao tác","Operations":"Vận hành","Operator":"Người thực hiện","Operator Admin":"Quản trị viên vận hành","Optimize system for self-hosted single-user usage":"Tối ưu hóa hệ thống cho việc sử dụng đơn người dùng tự lưu trữ","Optimized network architecture ensures millisecond response times":"Kiến trúc mạng tối ưu đảm bảo thời gian phản hồi mili giây","Optional callback override. Leave blank to use server address":"Tùy chọn ghi đè callback. Để trống để sử dụng địa chỉ máy chủ","Optional icon identifier for the login button":"Định danh biểu tượng tùy chọn cho nút đăng nhập","Optional icon.svg or icon.png shipped next to plugin.js, up to 512 KiB. Stored separately from the source.":"Tùy chọn: icon.svg hoặc icon.png đặt cạnh plugin.js, tối đa 512 KiB. Lưu tách biệt với mã nguồn.","Optional JSON policy to restrict access based on user info fields":"Chính sách JSON tùy chọn để hạn chế truy cập dựa trên các trường thông tin người dùng","Optional minimum recharge amount for this method.":"Số tiền nạp tối thiểu tùy chọn cho phương thức này.","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"Hệ số nhân tùy chọn cho mỗi nhóm người dùng, được sử dụng khi tính toán giá nạp tiền. Cung cấp một đối tượng JSON như","Optional note describing this version":"Ghi chú tùy chọn mô tả phiên bản này","Optional notes about this channel":"Ghi chú tùy chọn về kênh này","Optional notes about when to use this group":"Các ghi chú tùy chọn về thời điểm sử dụng nhóm này","Optional ratio used when upstream cache hits occur.":"Tỷ lệ tùy chọn được sử dụng khi xảy ra các lượt truy cập bộ nhớ đệm ngược dòng.","Optional request-rule multiplier expression. Leave empty when no request rule applies.":"Biểu thức hệ số tùy chọn cho quy tắc yêu cầu. Để trống khi không áp dụng quy tắc.","Optional rule description":"Mô tả quy tắc tùy chọn","Optional settings for advanced container configuration.":"Cài đặt tùy chọn cho cấu hình container nâng cao.","Optional supplementary information (max 100 characters)":"Thông tin bổ sung tùy chọn (tối đa 100 ký tự)","Optional tag for grouping channels":"Thẻ tùy chọn để nhóm kênh","Optional. Without it, Google picks the region; with it, requests go to the deployment region below.":"Không bắt buộc. Nếu để trống, Google sẽ tự chọn khu vực; nếu điền, yêu cầu sẽ được gửi đến khu vực triển khai bên dưới.","Opus Model":"Mô hình Opus","Or continue with":"Hoặc tiếp tục với","Or enter this key manually:":"Hoặc nhập khóa này thủ công:","or pick existing":"hoặc chọn cặp hiện có","Order completed successfully":"Đơn hàng đã hoàn thành thành công","Order History":"Lịch sử đơn hàng","Order Payment Method":"Phương thức thanh toán đơn hàng","org-...":"org-...","Original Model":"Nguyên mẫu","Original value":"Giá trị gốc","Other":"Khác","Other cases":"Các trường hợp khác","Other channels":"Kênh khác","Other groups":"Nhóm khác","Other models":"Mô hình khác","Other nodes":"Nút khác","Other sessions signed out":"Đã đăng xuất các phiên khác","Other Settings":"Cài đặt khác","Other tokens":"Token khác","Other users":"Người dùng khác","Otherwise (the preceding conditions do not match)":"Nếu không (các điều kiện trên không thỏa mãn)","Otherwise → {{name}}":"Nếu không → {{name}}","Otherwise the binding is removed.":"Nếu tắt, liên kết sẽ bị xóa.","Outage":"Gián đoạn","Output":"Đầu ra","Output aspect ratio":"Tỉ lệ khung hình","Output image size":"Kích thước ảnh đầu ra","Output price":"Giá đầu ra","Output Price: High to Low":"Giá đầu ra: Từ cao đến thấp","Output Price: Low to High":"Giá đầu ra: Thấp đến Cao","Output token price for generated tokens.":"Giá token đầu ra cho nội dung được tạo.","Output token rate":"Tốc độ token đầu ra","Output tokens":"Token đầu ra","Output Tokens":"Token đầu ra","Outside these times: {{condition}}":"Ngoài các khung giờ: {{condition}}","Overage limited":"Đã giới hạn vượt mức","overall":"tổng","Overflow":"Tràn trên","Overflow items":"Mục vượt giới hạn","override":"ghi đè","Override":"Ghi đè","Override auto-discovered endpoint":"Ghi đè điểm cuối tự động phát hiện","Override matrix":"Ma trận ghi đè","Override quota for user “{{name}}”":"Ghi đè hạn mức cho người dùng “{{name}}”","Override request headers":"Ghi đè tiêu đề yêu cầu","Override request headers (JSON format)":"Ghi đè tiêu đề yêu cầu (định dạng JSON)","Override request parameters":"Ghi đè tham số yêu cầu","Override request parameters (JSON format)":"Ghi đè tham số yêu cầu (định dạng JSON)","Override request parameters. Cannot override":"Ghi đè tham số yêu cầu. Không thể ghi đè","Override request parameters. Cannot override stream parameter.":"Ghi đè tham số yêu cầu. Không thể ghi đè tham số stream.","Override rule: when a vip user is billed as premium, the ratio is 0.3 instead of 0.5":"Quy tắc ghi đè: khi người dùng vip được tính phí theo premium, hệ số là 0.3 thay vì 0.5","Override Rules":"Quy tắc ghi đè","Password login has been disabled by administrator":"Quản trị viên đã tắt đăng nhập bằng mật khẩu","Override the endpoint used for testing. Leave empty to auto detect.":"Ghi đè điểm cuối dùng để kiểm thử. Để trống để tự động phát hiện.","Override user quota":"Ghi đè hạn mức người dùng","overrides for matching model prefix.":"ghi đè theo tiền tố model tương ứng.","Overrode user quota from {{from}} to {{to}}":"Đã ghi đè hạn mức người dùng từ {{from}} thành {{to}}","Overview":"Tổng quan","Password registration has been disabled by administrator, please use third-party account verification":"Quản trị viên đã tắt đăng ký bằng mật khẩu, vui lòng dùng xác minh tài khoản bên thứ ba","Overwritten":"Đã ghi đè","Password reset link is invalid or has expired":"Liên kết đặt lại mật khẩu không hợp lệ hoặc đã hết hạn","Page":"Trang","Page {{current}} of {{total}}":"Trang {{current}} / {{total}}","PaLM":"PaLM","Pan":"Pan","Pancake":"Pancake","Param Override":"Ghi đè tham số","Parameter":"Tham số","Parameter configuration error":"Lỗi cấu hình tham số","Parameter Override":"Ghi đè Tham số","Parameter override and system prompt are unavailable":"Ghi đè tham số và system prompt không khả dụng","Parameter override must be a valid JSON object":"Ghi đè tham số phải là đối tượng JSON hợp lệ","Parameter override must be valid JSON format":"Ghi đè tham số phải ở định dạng JSON hợp lệ","Parameter Override Template (JSON)":"Mẫu ghi đè tham số (JSON)","Parameter override template must be a JSON object":"Mẫu ghi đè tham số phải là đối tượng JSON","Parameter settings":"Cài đặt tham số","parameter.":"tham số","Parameters":"Tham số","Parsed {{count}} service account file(s)":"Đã phân tích {{count}} tệp tài khoản dịch vụ","Pause drag demo":"Tạm dừng minh họa kéo thả","Payment amount is too low":"Số tiền thanh toán quá thấp","Payment cancel redirect URL is not in the trusted domain list":"URL chuyển hướng khi hủy thanh toán không nằm trong danh sách tên miền tin cậy","Parsed plugin metadata":"Siêu dữ liệu plugin đã phân tích","Payment configuration error":"Lỗi cấu hình thanh toán","Partial Submission":"Gửi một phần","Payment information has not been configured by administrator":"Quản trị viên chưa cấu hình thông tin thanh toán","Partly shown":"Hiển thị một phần","Pass Headers":"Chuyển tiếp tiêu đề","Payment method does not exist":"Phương thức thanh toán không tồn tại","Pass specified request headers to upstream":"Chuyển tiếp header yêu cầu chỉ định lên upstream","Pass Through Body":"Xuyên qua cơ thể","Pass Through Headers":"Truyền header qua","Pass Through Request Headers":"Chuyển tiếp header yêu cầu","Pass through the anthropic-beta header for beta features":"Chuyển tiếp header anthropic-beta cho tính năng beta","Pass through the include field for usage obfuscation":"Chuyển tiếp trường include cho che giấu sử dụng","Pass through the inference_geo field for Claude data residency region control":"Chuyển tiếp trường inference_geo để kiểm soát vùng lưu trữ dữ liệu Claude","Pass through the inference_geo field for geographic routing":"Chuyển tiếp trường inference_geo cho định tuyến địa lý","Pass through the safety_identifier field":"Chuyển tiếp trường safety_identifier","Pass through the service_tier field":"Chuyển tiếp trường service_tier","Pass through the speed field for Claude inference speed mode control":"Chuyển tiếp trường speed để kiểm soát chế độ tốc độ suy luận Claude","Pass when key is missing":"Cho qua khi thiếu khóa","Payment success redirect URL is not in the trusted domain list":"URL chuyển hướng khi thanh toán thành công không nằm trong danh sách tên miền tin cậy","Pass-through":"Truyền thẳng","Pass-Through":"Chuyển tiếp","Pass-through Headers (comma-separated or JSON array)":"Header chuyển tiếp (phân cách bằng dấu phẩy hoặc mảng JSON)","Payment, redemption, subscription, and invitation reward features are disabled. The administrator must confirm compliance terms before enabling them.":"Các tính năng thanh toán, đổi mã, gói đăng ký và thưởng giới thiệu đã bị tắt. Quản trị viên phải xác nhận điều khoản tuân thủ trước khi bật chúng.","Pass-through help":"Trợ giúp truyền thẳng","Pass-through requires native forwarding":"Truyền thẳng yêu cầu chuyển tiếp nguyên bản","Passive recovery only":"Chỉ khôi phục thụ động","Passkey":"Khóa truy cập","Passkey Authentication":"Xác thực khóa truy cập","Passkey authentication is disabled.":"Xác thực Passkey đã bị tắt.","Passkey display name":"Tên hiển thị Passkey","Passkey domain change blocked: {{domains}}; affected {{known}}; unknown {{unknown}}":"Đã chặn thay đổi miền khóa truy cập: {{domains}}; bị ảnh hưởng {{known}}; chưa rõ miền {{unknown}}","Passkey domain update failed":"Không thể cập nhật miền khóa truy cập","Passkey domains":"Tên miền khóa truy cập","Passkey is not available in this browser":"Passkey không khả dụng trong trình duyệt này","Passkey is not supported in this environment":"Passkey không được hỗ trợ trong môi trường này","Passkey is not supported on this device":"Passkey không được hỗ trợ trên thiết bị này","Passkey is not supported on this device.":"Khóa truy cập không được hỗ trợ trên thiết bị này.","Passkey Login":"Đăng nhập bằng khóa truy cập","Passkey login failed":"Đăng nhập Passkey thất bại","Passkey login was cancelled":"Đăng nhập Passkey đã bị hủy","Passkey login was cancelled or timed out":"Đăng nhập Passkey đã bị hủy hoặc hết thời gian","Passkey not supported on this device":"Khóa truy cập không được hỗ trợ trên thiết bị này","Passkey registered successfully":"Passkey đã được đăng ký thành công","Passkey registration was cancelled":"Đăng ký Passkey đã bị hủy","Passkey removed successfully":"Đã xóa Passkey thành công","Passkey reset successfully":"Đặt lại Passkey thành công","Passkey verification failed":"Xác minh Passkey thất bại","Passkey verification is not available in the current state":"Xác minh Passkey không khả dụng trong trạng thái hiện tại","Passkey verification is not supported in this environment":"Môi trường này không hỗ trợ xác minh Passkey","Passkey verification was cancelled":"Đã hủy xác minh Passkey","Passkey verification was cancelled or timed out":"Xác minh Passkey đã bị hủy hoặc hết thời gian chờ","Passkey website domain":"Tên miền trang dùng Passkey","Passkeys for removed domains will stop working. Confirm only if affected users can sign in another way.":"Khóa truy cập của các tên miền bị xóa sẽ ngừng hoạt động. Chỉ xác nhận khi người dùng bị ảnh hưởng có thể đăng nhập bằng cách khác.","Passkeys known to use removed domains: {{amount}}":"Khóa truy cập đang dùng miền bị xóa: {{amount}}","Passkeys only work on the website they were created for. This helps prevent other websites from misusing them.":"Passkey chỉ hoạt động trên trang đã tạo chúng. Điều này giúp ngăn trang khác sử dụng trái phép.","Passkeys with an unknown domain that may be affected: {{amount}}":"Khóa truy cập chưa rõ miền và có thể bị ảnh hưởng: {{amount}}","Passthrough Template":"Mẫu truyền qua","Password":"Mật khẩu","Password / Access Token":"Mật khẩu / Access Token","Password authentication is disabled.":"Xác thực bằng mật khẩu đã bị tắt.","Password changed successfully":"Đổi mật khẩu thành công","Password copied to clipboard: {{password}}":"Mật khẩu đã sao chép vào clipboard: {{password}}","Password has been copied to clipboard":"Mật khẩu đã được sao chép vào bộ nhớ tạm","Password Login":"Đăng nhập bằng mật khẩu","Password must be at least 8 characters":"Mật khẩu phải có ít nhất 8 ký tự","Password must be at most 20 characters long":"Mật khẩu tối đa 20 ký tự","Password must be between 8 and 20 characters":"Mật khẩu phải từ 8 đến 20 ký tự","Password must contain between 8 and 128 characters.":"Mật khẩu phải có từ 8 đến 128 ký tự.","Password Registration":"Đăng ký mật khẩu","Password reset and copied to clipboard: {{password}}":"Mật khẩu đã đặt lại và sao chép vào clipboard: {{password}}","Password reset: {{password}}":"Mật khẩu đã đặt lại: {{password}}","Password set successfully":"Đã đặt mật khẩu thành công","Password settings have changed. Reload the page and try again.":"Cài đặt mật khẩu đã thay đổi. Tải lại trang và thử lại.","Passwords do not match":"Mật khẩu không khớp","Passwords don\'t match.":"Mật khẩu không khớp.","Paste Connection Info":"Dán thông tin kết nối","Paste JavaScript source here...":"Dán mã nguồn JavaScript tại đây...","Path":"Đường dẫn","Path not set":"Chưa đặt đường dẫn","Path Regex (one per line)":"Regex đường dẫn (mỗi dòng một mục)","Path:":"Đường dẫn:","Pay":"Pay","Pay {{amount}}":"Thanh toán {{amount}}","Per-request Price: High to Low":"Giá mỗi yêu cầu: Từ cao đến thấp","Per-request Price: Low to High":"Giá mỗi yêu cầu: Thấp đến Cao","Plan amount is too low":"Số tiền của gói quá thấp","Pay {{amount}} • Save {{saved}}":"Thanh toán {{amount}} • Tiết kiệm {{saved}}","Pay with Balance":"Thanh toán bằng số dư","Plan name cannot be empty":"Tên gói không được để trống","Pay-as-you-go with real-time usage monitoring":"Thanh toán theo mức sử dụng với theo dõi mức sử dụng theo thời gian thực","Plan price cannot be empty":"Giá gói không được để trống","Payment":"Thanh toán","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"Chế độ tổng hợp thanh toán — đăng ký bằng công ty đã đăng ký của bạn (pháp nhân offshore). Dành cho doanh nghiệp.","Payment Channel":"Kênh thanh toán","Payment Gateway":"Cổng thanh toán","Payment initiated":"Đã khởi tạo thanh toán","Payment Method":"Phương thức thanh toán","Payment method identifier":"Mã định danh phương thức thanh toán","Payment method identifier is required":"Mã định danh phương thức thanh toán là bắt buộc","Payment method name":"Tên phương thức thanh toán","Payment method name is required":"Tên phương thức thanh toán là bắt buộc","Payment method type":"Loại phương thức thanh toán","Payment method type is required":"Loại phương thức thanh toán là bắt buộc","Payment methods":"Phương thức thanh toán","Payment Methods":"Phương thức thanh toán","Please confirm the compliance statement":"Vui lòng xác nhận tuyên bố tuân thủ","Payment page opened":"Đã mở trang thanh toán","Payment request failed":"Yêu cầu thanh toán thất bại","Payment return URL":"URL trả về thanh toán","Payment return URL is empty. Create the product without a SuccessURL redirect?":"URL trả về thanh toán đang trống. Tạo sản phẩm mà không có chuyển hướng SuccessURL?","Payment type key":"Khóa loại thanh toán","Payment type key is required":"Khóa loại thanh toán là bắt buộc","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"Thanh toán, mã đổi thưởng, gói đăng ký và phần thưởng mời sẽ bị khóa cho đến khi quản trị viên root xác nhận điều khoản tuân thủ.","Peak":"Đỉnh","Peak KV cache usage":"Mức sử dụng bộ nhớ đệm KV cao nhất","Peak throughput":"Thông lượng đỉnh","Peak token pool usage":"Mức sử dụng nhóm token cao nhất","Penalises repetition of frequent tokens":"Phạt việc lặp các token phổ biến","pending":"đang chờ","Pending":"Đang chờ","per":"per","Per 1K tokens":"Mỗi 1K tokens","Per 1M tokens":"Mỗi 1M tokens","Per image":"Mỗi ảnh","Per matched model":"Theo từng mô hình khớp","per request":"theo yêu cầu","Per request":"Mỗi yêu cầu","Per Request":"Theo yêu cầu","Per Second":"Theo giây","Per token":"Theo token","Per Unit":"Theo đơn vị","Per-call":"Mỗi lần gọi","Per-feature metered windows split by model or capability.":"Cửa sổ tính phí theo từng tính năng, tách theo mô hình hoặc năng lực.","Per-group performance":"Hiệu năng theo nhóm","Per-request":"Theo yêu cầu","Per-request (deprecated)":"Theo yêu cầu (không còn khuyến nghị)","Per-request (fixed price)":"Theo yêu cầu (giá cố định)","Per-token":"Theo token","Per-token (deprecated)":"Theo token (không còn khuyến nghị)","Per-token (ratio based)":"Mỗi token (dựa trên tỷ lệ)","Per-token logit bias map":"Bảng logit bias theo token","Percentage:":"Phần trăm:","Performance":"Hiệu suất","Please select a product":"Vui lòng chọn sản phẩm","Performance data is not yet available for this model.":"Chưa có dữ liệu hiệu năng cho mô hình này.","Performance health":"Tình trạng hiệu suất","Performance metrics for the last 24 hours":"Chỉ số hiệu năng trong 24 giờ qua","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"Các chỉ số hiệu năng hiển thị tại đây là dữ liệu mô phỏng để xem trước và sẽ được thay thế bằng dữ liệu thực sau khi tích hợp backend.","Performance Monitor":"Giám sát hiệu suất","Performance Settings":"Cài đặt hiệu suất","Performed {{action}} on user {{username}} (ID: {{id}})":"Đã thực hiện {{action}} trên người dùng {{username}} (ID: {{id}})","Period":"Khoảng thời gian","Periodically check for upstream model changes":"Kiểm tra định kỳ các thay đổi mô hình nguồn","Periodically checks all channels except manually disabled ones to detect failures and recover channels automatically.":"Định kỳ kiểm tra tất cả kênh trừ kênh bị vô hiệu hóa thủ công để phát hiện lỗi và tự động khôi phục.","Periodically checks only channels with auto-disable enabled, excluding manually disabled channels.":"Chỉ định kỳ kiểm tra kênh đã bật tự động vô hiệu hóa, không kiểm tra kênh bị vô hiệu hóa thủ công.","Periodically send ping frames to keep streaming connections active.":"Định kỳ gửi các khung ping để duy trì các kết nối truyền phát hoạt động.","Permanently delete your account and all data":"Xóa vĩnh viễn tài khoản của bạn và tất cả dữ liệu","Permissions":"Quyền","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"Cho phép đăng ký Passkey trên các nguồn gốc không phải HTTPS (chỉ khuyến nghị cho mục đích phát triển)","Please wait {{seconds}} seconds before requesting another verification code.":"Vui lòng đợi {{seconds}} giây trước khi yêu cầu mã xác minh khác.","Perplexity":"Sự bối rối","Persist your data file":"Lưu trữ tệp dữ liệu của bạn","Personal":"Cá nhân","Personal area":"Khu vực cá nhân","Personal Center Area":"Khu vực cá nhân","Personal info settings":"Cài đặt thông tin cá nhân","Personal Settings":"Cài đặt cá nhân","Personal settings and profile management.":"Cài đặt cá nhân và quản lý hồ sơ.","Personal use":"Sử dụng cá nhân","Personal use mode":"Chế độ sử dụng cá nhân","Pick a date":"Chọn ngày","Pick models and derive the other side with a rule to create request-to-upstream mappings.":"Chọn mô hình và tạo tên phía còn lại theo quy tắc để tạo ánh xạ yêu cầu → thượng nguồn.","Pick or create both a store and a product before saving.":"Hãy chọn hoặc tạo cả cửa hàng và sản phẩm trước khi lưu.","Ping Interval (seconds)":"Thời gian Ping (giây)","Plan":"Gói","Plugin metadata contains an unknown field \\"{{field}}\\". If this plugin was downloaded from the official marketplace, it may require a newer version of new-api. Try updating new-api and installing the plugin again.":"Siêu dữ liệu plugin chứa trường không xác định \\"{{field}}\\". Nếu plugin được tải từ chợ chính thức, có thể cần phiên bản new-api mới hơn. Hãy cập nhật new-api rồi cài đặt lại plugin.","Plan ID":"ID gói","Plan Name":"Tên gói","Plan Price":"Giá gói","Plan price must be greater than zero":"Giá gói phải lớn hơn 0","Plan Quota":"Hạn ngạch gói","Plan Subtitle":"Phụ đề gói","Plan Title":"Tiêu đề gói","Plan title is required":"Tiêu đề gói là bắt buộc","Planned action":"Thao tác dự kiến","Planned maintenance on Friday at 22:00 UTC...":"Bảo trì theo kế hoạch vào thứ Sáu lúc 22:00 UTC...","Platform":"Nền tảng","Playground":"Sân chơi","Playground and chat functions":"Chức năng sân chơi và trò chuyện","Playground experiments and live conversations.":"Các thí nghiệm Playground và trò chuyện trực tiếp.","Please agree to the legal terms first":"Vui lòng đồng ý với các điều khoản pháp lý trước","Please complete the security check to continue.":"Vui lòng hoàn thành kiểm tra bảo mật để tiếp tục.","Please confirm that you understand the consequences":"Vui lòng xác nhận rằng bạn hiểu hậu quả","Please confirm your password":"Vui lòng xác nhận mật khẩu","Possibly an upstream timeout":"Có thể do thượng nguồn hết thời gian chờ","Please enable io.net model deployment service and configure an API key in System Settings.":"Vui lòng bật dịch vụ triển khai mô hình io.net và cấu hình khóa API trong Cài đặt hệ thống.","Please enable Two-factor Authentication or Passkey before proceeding":"Vui lòng bật Xác thực hai yếu tố hoặc Passkey trước khi tiếp tục","Please enter a code.":"Vui lòng nhập mã.","Please enter a name":"Vui lòng nhập tên","Please enter a new password":"Vui lòng nhập mật khẩu mới","Please enter a redemption code":"Vui lòng nhập mã đổi thưởng","Please enter a valid duration":"Vui lòng nhập thời lượng hợp lệ","Please enter a valid email address":"Vui lòng nhập địa chỉ email hợp lệ","Please enter a valid number":"Vui lòng nhập một số hợp lệ","Please enter a Well-Known URL first":"Vui lòng nhập URL Well-Known trước","Please enter amount":"Vui lòng nhập số tiền","Please enter an administrator username":"Vui lòng nhập tên người dùng quản trị viên","Please enter API key first":"Vui lòng nhập khóa API trước","Please enter chat client name":"Vui lòng nhập tên ứng dụng chat","Please enter email and verification code":"Vui lòng nhập email và mã xác thực","Please enter keys first":"Vui lòng nhập các khóa trước","Please enter model name":"Vui lòng nhập ID hoặc tên mô hình.","Please enter plan title":"Vui lòng nhập tên gói","Please enter the authentication code.":"Vui lòng nhập mã xác thực.","Please enter the URL":"Vui lòng nhập URL","Please enter the verification code":"Vui lòng nhập mã xác minh","Please enter the verification code or backup code":"Vui lòng nhập mã xác minh hoặc mã dự phòng","Please enter your current password":"Vui lòng nhập mật khẩu hiện tại của bạn","Please enter your email":"Vui lòng nhập email của bạn","Please enter your email first":"Vui lòng nhập email trước","Please enter your password":"Vui lòng nhập mật khẩu","Please enter your username":"Vui lòng nhập tên người dùng","Please enter your username or email":"Vui lòng nhập tên người dùng hoặc email","Please enter your verification code":"Vui lòng nhập mã xác thực của bạn","Please enter your verification code or backup code":"Vui lòng nhập mã xác thực hoặc mã dự phòng của bạn","Please fix JSON errors before saving":"Vui lòng sửa lỗi JSON trước khi lưu","Please fix the highlighted fields before saving":"Vui lòng sửa các trường được đánh dấu trước khi lưu","Please log in with the appropriate credentials":"Vui lòng đăng nhập bằng thông tin xác thực phù hợp","Please select a container":"Vui lòng chọn một container","Please select a payment method":"Vui lòng chọn phương thức thanh toán","Please select a primary model":"Vui lòng chọn một mô hình chính","Please select a subscription plan":"Vui lòng chọn gói đăng ký","Please select at least one channel":"Vui lòng chọn ít nhất một kênh","Please select at least one model":"Vui lòng chọn ít nhất một mô hình","Please select items to delete":"Vui lòng chọn các mục để xóa","Please Select user groups that can access this channel.":"Vui lòng chọn nhóm người dùng có thể truy cập kênh này.","Please set Ollama API Base URL first":"Vui lòng đặt URL cơ sở API Ollama trước","Please sign in to view {{module}}.":"Vui lòng đăng nhập để xem {{module}}.","Please try again later.":"Vui lòng thử lại sau.","Please type the following text to confirm:":"Vui lòng nhập văn bản sau để xác nhận:","Please upload key file(s)":"Vui lòng tải lên (các) tệp khóa","Please wait a moment before trying again.":"Vui lòng chờ một lát rồi thử lại.","Please wait a moment, human check is initializing...":"Vui lòng đợi một chút, kiểm tra con người đang khởi tạo...","Please wait before editing to avoid overwriting saved values.":"Vui lòng chờ trước khi chỉnh sửa để tránh ghi đè các giá trị đã lưu.","Please wait before requesting another verification code.":"Vui lòng đợi trước khi yêu cầu mã xác minh khác.","Please wait for the current generation to complete":"Vui lòng đợi lượt tạo hiện tại hoàn tất","Plugin":"Plugin","Plugin activation failed":"Kích hoạt plugin thất bại","Plugin author":"Tác giả plugin","Plugin default":"Mặc định của plugin","Plugin details":"Chi tiết plugin","Plugin extensions":"Phần mở rộng bằng plugin","Plugin Generation":"Thế hệ plugin","Plugin icon":"Biểu tượng plugin","Plugin icon exceeds the 512 KiB limit.":"Biểu tượng plugin vượt quá giới hạn 512 KiB.","Plugin icon must be an .svg or .png file.":"Biểu tượng plugin phải là tệp .svg hoặc .png.","Plugin indexes are fetched by your browser. Installing runs the same review and admission pipeline as a manual upload.":"Chỉ mục plugin do trình duyệt của bạn tải. Việc cài đặt đi qua đúng quy trình xem xét và kiểm duyệt như khi tải lên thủ công.","Plugin installation failed":"Cài đặt plugin thất bại","Plugin is still in use":"Plugin vẫn đang được sử dụng","Plugin key":"Khóa plugin","Plugin metadata":"Siêu dữ liệu plugin","Plugin sandbox":"Môi trường thử nghiệm plugin","Plugin saved, activation required":"Đã lưu plugin, cần kích hoạt","Plugin source":"Mã nguồn plugin","Plugin source exceeds the 8 MiB limit.":"Mã nguồn plugin vượt giới hạn 8 MiB.","Plugin uploaded successfully":"Đã tải plugin lên","Plugin version activated":"Đã kích hoạt phiên bản plugin","Price cannot be negative":"Giá không được là số âm","Price cannot exceed 9999":"Giá không được vượt quá 9999","Plugin version deleted":"Đã xóa phiên bản plugin","Plugin website":"Trang web plugin","Plugin-defined interfaces":"Giao diện do plugin định nghĩa","Plugins":"Plugin","Plugins can access channel credentials. Review the source and differences before installing.":"Plugin có thể truy cập thông tin xác thực kênh. Hãy kiểm tra mã nguồn và các khác biệt trước khi cài đặt.","Policy JSON":"JSON chính sách","Polling":"Thăm dò","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"Chế độ thăm dò yêu cầu Redis và bộ nhớ đệm, nếu không hiệu suất sẽ bị suy giảm đáng kể.","Poor":"Nghèo","Port":"Cảng","Port must be a positive integer":"Cổng phải là số nguyên dương","Position {{position}}":"Vị trí {{position}}","Post Delta":"Chênh lệch sau","PostgreSQL detected":"Phát hiện PostgreSQL","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL cung cấp độ tin cậy cao và tính toàn vẹn dữ liệu cho khối lượng công việc production.","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL cung cấp các đảm bảo độ tin cậy cao. Hãy kiểm tra kỹ lưỡng cửa sổ bảo trì và các chính sách lưu giữ của bạn trước khi vận hành chính thức.","Power AI applications, manage digital assets, connect the Future":"Vận hành ứng dụng AI, quản lý tài sản số, kết nối Tương lai","Powerful API Management Platform":"Nền tảng Quản lý API mạnh mẽ","Pre-Consume for Free Models":"Dùng trước các mô hình miễn phí","Pre-consumed":"Khấu trừ trước","Pre-Consumed Quota":"Hạn mức đã tiêu thụ trước","Pre-release":"Bản phát hành thử","Prefer the original channel, allow switching":"Ưu tiên kênh cũ, cho phép chuyển kênh","Preference saved as {{pref}}, but no active subscription. Requests will be rejected.":"Tùy chọn đã lưu là {{pref}}, nhưng không có gói đăng ký đang hoạt động. Các yêu cầu sẽ bị từ chối.","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"Tùy chọn đã lưu là {{pref}}, nhưng không có gói đăng ký đang hoạt động. Ví sẽ được sử dụng tự động.","Preferences":"Tùy chọn","Prefill Group Management":"Quản lý Nhóm Điền sẵn","Prefill Groups":"Điền sẵn các nhóm","Prefill groups help you keep complex configurations in sync.":"Nhóm điền trước giúp bạn giữ các cấu hình phức tạp đồng bộ.","Prefix":"Tiền tố","Prefix cache hit rate":"Tỷ lệ trúng bộ nhớ đệm tiền tố","Prefix Match":"Khớp tiền tố","Prefix used when displaying prices":"Tiền tố được sử dụng khi hiển thị giá","Prefix/Suffix Text":"Văn bản tiền tố/hậu tố","Premium chat models":"Mô hình chat cao cấp","Premium plan, half price":"Gói premium, nửa giá","Preparing chat keys…":"Đang chuẩn bị khóa trò chuyện…","Preparing conversion...":"Đang chuẩn bị chuyển đổi…","Preparing your chat link, please try again in a moment.":"Đang chuẩn bị liên kết trò chuyện của bạn, vui lòng thử lại trong giây lát.","Preparing your chat link…":"Đang chuẩn bị liên kết trò chuyện của bạn…","Prepend":"Thêm vào đầu","Prepend to Start":"Thêm vào đầu","Prepend value to array / string / object start":"Thêm giá trị vào đầu mảng / chuỗi / đối tượng","Presence Penalty":"Phạt hiện diện","Preserve the original field when applying this rule":"Giữ trường gốc khi áp dụng quy tắc này","Preserve upstream-specific fields when API formats match; bypasses model redirect, parameter override and format conversion":"Giữ các trường riêng của thượng nguồn khi định dạng API khớp nhau; bỏ qua chuyển hướng mô hình, ghi đè tham số và chuyển đổi định dạng","Preset groups":"Nhóm đặt sẵn","Preset recharge amounts (JSON array)":"Số tiền nạp đặt trước (mảng JSON)","Preset recharge amounts displayed to users":"Các mức nạp tiền đặt trước hiển thị cho người dùng","Preset Template":"Mẫu cài sẵn","Preset templates":"Mẫu sẵn","preset.anthropic":"Anthropic","preset.default":"Mặc định","preset.forest-whisper":"Thì thầm rừng","Product configuration error":"Lỗi cấu hình sản phẩm","Product does not exist":"Sản phẩm không tồn tại","preset.lake-view":"Hồ nước","preset.lavender-dream":"Giấc mơ oải hương","preset.ocean-breeze":"Gió biển","preset.rose-garden":"Vườn hồng","preset.simple-large":"Chữ lớn & Đơn giản","preset.sunset-glow":"Hoàng hôn","preset.underground":"Bóng đêm","Press Enter or comma to add tags":"Nhấn Enter hoặc dấu phẩy để thêm thẻ","Press Enter to use \\"{{value}}\\"":"Nhấn Enter để dùng \\"{{value}}\\"","Prevent server-side request forgery attacks":"Ngăn chặn các cuộc tấn công giả mạo yêu cầu phía máy chủ","Preview":"Xem trước","Preview again":"Xem trước lại","Preview changes":"Xem trước thay đổi","Preview excludes group ratios and request rule multipliers.":"Bản xem trước không bao gồm hệ số nhóm và hệ số nhân của quy tắc yêu cầu.","Preview fields":"Xem trước các trường","Preview is unavailable for custom expressions.":"Không thể xem trước biểu thức tùy chỉnh.","Preview metadata first":"Hãy xem trước siêu dữ liệu","Preview price changes":"Xem trước thay đổi giá","Preview pricing conversion":"Xem trước chuyển đổi giá","Preview selected changes":"Xem trước thay đổi đã chọn","Preview unavailable":"Không thể xem trước","Preview upstream model changes":"Xem trước thay đổi mô hình thượng nguồn","Previous":"Trước","Previous branch":"Nhánh trước","Previous page":"Trang trước","Previous permissions":"Quyền trước đó","Previous value":"Giá trị trước đó","Price":"Giá","Price ($/1K calls)":"Giá ($/1K lượt gọi)","Price (local currency / USD)":"Giá (tiền tệ địa phương / USD)","Price display":"Hiển thị giá","Price display mode":"Chế độ hiển thị giá","Price estimation":"Ước tính chi phí","Price estimation description":"Sau khi hoàn thành loại phần cứng, vị trí triển khai, số lượng bản sao, v.v., giá sẽ được tính toán tự động.","Price examples":"Ví dụ giá","Price ID":"Mã giá","Price mode (USD per 1M tokens)":"Chế độ giá (USD mỗi 1 triệu token)","Price per image":"Giá mỗi ảnh","Price per request":"Giá mỗi yêu cầu","Price source":"Nguồn giá","Price summary":"Tóm tắt giá","price_xxx":"price_xxx","Price:":"Giá:","Prices are in {{currency}}, with units shown below. Use USD when editing expressions directly.":"Giá tính bằng {{currency}}, theo đơn vị ghi bên dưới. Khi sửa trực tiếp biểu thức, hãy dùng USD.","Prices changed while preparing the conversion. Try again.":"Giá đã thay đổi trong khi chuẩn bị chuyển đổi. Vui lòng thử lại.","Prices for each set of conditions":"Giá tương ứng với từng điều kiện","Prices shown per":"Giá hiển thị theo","Prices shown per {{unit}} tokens":"Giá hiển thị cho mỗi {{unit}} token","Prices shown per usage unit":"Giá hiển thị theo từng đơn vị sử dụng","Prices synced successfully":"Đồng bộ giá thành công","Prices vary by usage tier and request conditions":"Giá thay đổi theo bậc dùng và điều kiện yêu cầu","Pricing":"Giá cả","Pricing & Display":"Giá cả & Hiển thị","Pricing by condition":"Định giá theo điều kiện","Pricing by Group":"Giá theo Nhóm","Pricing conditions":"Điều kiện tính giá","Pricing Configuration":"Price configuration","Purchase limit cannot be negative":"Giới hạn mua không được là số âm","Purchase limit for this plan has been reached":"Đã đạt giới hạn mua của gói này","Pricing currency":"Tiền tệ định giá","Pricing group example":"Ví dụ nhóm định giá","Pricing groups":"Nhóm định giá","Pricing mode":"Chế độ định giá","Quality {{quality}}":"Chất lượng {{quality}}","Pricing must be a JSON object":"Cấu hình giá phải là đối tượng JSON","Pricing Ratios":"Tỷ lệ định giá","Pricing rule {{number}}":"Quy tắc định giá {{number}}","Pricing rules":"Quy tắc định giá","Pricing tier {{name}}":"Bậc giá {{name}}","Pricing Type":"Price type","Primary Model":"Mô hình chính","Primary Passkey domain":"Tên miền chính","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"Ưu tiên sử dụng lại kênh thành công gần nhất dựa trên các khóa trích xuất từ ngữ cảnh yêu cầu (định tuyến dính)","Priority":"Ưu tiên","Priority (Default)":"Ưu tiên (Mặc định)","Priority level from 0 (lowest) to 10 (highest), default is 5":"Mức độ ưu tiên từ 0 (thấp nhất) đến 10 (cao nhất), mặc định là 5","Priority order for automatic group assignment. New tokens rotate through this list.":"Thứ tự ưu tiên cho việc gán nhóm tự động. Các token mới sẽ luân phiên qua danh sách này.","Priority order for tokens in the auto group. The system tries groups from top to bottom.":"Thứ tự ưu tiên cho token trong nhóm auto. Hệ thống thử các nhóm từ trên xuống dưới.","Privacy":"Quyền riêng tư","Privacy Policy":"Chính sách quyền riêng tư","Private Deployment URL":"URL Triển khai Riêng","Processed requests":"Yêu cầu đã xử lý","Processing OAuth response...":"Đang xử lý phản hồi OAuth...","Processing...":"Đang xử lý...","Quota change amount cannot be zero":"Lượng thay đổi hạn ngạch không được bằng 0","Product":"Sản phẩm","Product ID":"ID sản phẩm","Product ID is required":"Bắt buộc nhập Product ID","Product Name":"Tên sản phẩm","Productivity":"Năng suất","Products":"Sản phẩm","Professional team providing 24/7 technical support":"Đội ngũ chuyên nghiệp cung cấp hỗ trợ kỹ thuật 24/7","Profile":"Hồ sơ","Profile updated successfully":"Hồ sơ đã được cập nhật thành công","Programming":"Lập trình","Progress":"Tiến độ","Project":"Dự án","Promote":"Thúc đẩy","Promotion codes":"Mã khuyến mãi","Prompt":"Lời nhắc","Prompt (EN)":"Lời nhắc (EN)","Quota unit is misconfigured":"Đơn vị hạn mức bị cấu hình sai","Prompt cache ratio":"Tỷ lệ bộ nhớ đệm lời nhắc","Quota value cannot be negative":"Giá trị hạn ngạch không được âm","Quota value exceeds valid range, maximum is {{max}}":"Giá trị hạn ngạch vượt quá phạm vi hợp lệ, tối đa là {{max}}","Prompt caching":"Bộ nhớ đệm lời nhắc","Prompt Caching":"Bộ đệm lời nhắc","Prompt Details":"Chi tiết lời nhắc","Prompt price ($/1M tokens)":"Giá prompt ($/1 triệu token)","Prompt text filtering is active with the current form values.":"Với giá trị biểu mẫu hiện tại, lọc văn bản lời nhắc đang hoạt động.","Prompt text filtering needs both switches enabled and a non-empty keyword list.":"Lọc văn bản lời nhắc cần bật cả hai công tắc và có danh sách từ khóa không trống.","Proprietary":"Độc quyền","Protect login and registration with Cloudflare Turnstile":"Bảo vệ đăng nhập và đăng ký bằng Cloudflare Turnstile","Provide a JSON object where each key maps to an endpoint definition.":"Cung cấp một đối tượng JSON nơi mỗi khóa ánh xạ đến một định nghĩa điểm cuối.","Provide a valid URL starting with http:// or https://":"Cung cấp URL hợp lệ bắt đầu bằng http:// hoặc https://","Provide Markdown, HTML, or an external URL for the privacy policy":"Cung cấp Markdown, HTML, hoặc một URL bên ngoài cho chính sách quyền riêng tư","Provide Markdown, HTML, or an external URL for the user agreement":"Cung cấp Markdown, HTML, hoặc một URL bên ngoài cho thỏa thuận người dùng","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"Cung cấp các ghi đè an toàn theo từng danh mục dưới dạng JSON. Sử dụng `default` cho các giá trị dự phòng.","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"Cung cấp các ghi đè tiêu đề theo từng mô hình dưới dạng JSON. Hữu ích để bật các tính năng beta như cửa sổ ngữ cảnh mở rộng.","Provider":"Nhà cung cấp","Provider & data privacy":"Nhà cung cấp & quyền riêng tư","Provider created successfully":"Đã tạo nhà cung cấp thành công","Provider deleted successfully":"Đã xóa nhà cung cấp thành công","Provider ID":"ID nhà cung cấp","Provider Name":"Tên Nhà cung cấp","Provider source":"Nguồn nhà cung cấp","Provider type (OpenAI, Anthropic, etc.)":"Loại nhà cung cấp (OpenAI, Anthropic, v.v.)","Provider updated successfully":"Nhà cung cấp đã được cập nhật thành công","Provider-specific endpoint, account, and compatibility settings.":"Thiết lập endpoint, tài khoản và tương thích riêng cho nhà cung cấp.","Proxy Address":"Địa chỉ Proxy","Proxy address must use HTTP, HTTPS, SOCKS5, or SOCKS5H and include a valid host":"Địa chỉ proxy phải dùng HTTP, HTTPS, SOCKS5 hoặc SOCKS5H và chứa máy chủ hợp lệ","Prune Object Items":"Dọn mục đối tượng","Prune object items by conditions":"Dọn dẹp các mục đối tượng theo điều kiện","Prune Rule (string or JSON object)":"Quy tắc dọn dẹp (chuỗi hoặc đối tượng JSON)","Public base URL for async task media. Supports a dedicated media domain, port, or Nginx path prefix; falls back to Server Address when empty.":"URL cơ sở công khai cho nội dung đa phương tiện của tác vụ bất đồng bộ. Hỗ trợ miền đa phương tiện, cổng hoặc tiền tố đường dẫn Nginx riêng; nếu để trống sẽ dùng địa chỉ máy chủ.","Public model catalog and pricing page.":"Trang công khai cho danh mục mô hình và giá.","Public rankings page based on live usage data.":"Trang bảng xếp hạng công khai dựa trên dữ liệu sử dụng thực.","Publish Date":"Ngày xuất bản","Publish the request names and remove the raw upstream names from the model list":"Thêm tên yêu cầu vào danh sách mô hình và xóa tên gốc của thượng nguồn","Published":"Đã xuất bản","Published as {{model}}":"Công khai với tên {{model}}","Published at":"Thời gian phát hành","Published models, groups, and model remapping rules.":"Các mô hình đã xuất bản, nhóm và quy tắc ánh xạ lại mô hình.","Recalculated from tokens: tokens {{tokens}}, model ratio {{model_ratio}}, group ratio {{group_ratio}}, other multiplier {{other_multiplier}}":"Tính lại theo token: token {{tokens}}, hệ số mô hình {{model_ratio}}, hệ số nhóm {{group_ratio}}, hệ số khác {{other_multiplier}}","Published:":"Đã xuất bản:","Pull":"Tải","Pull model":"Tải mô hình","Pulling...":"Đang tải...","Purchase Limit":"Giới hạn mua","Purchase limit reached":"Đã đạt giới hạn mua","Purchase Subscription":"Mua gói đăng ký","QR Code Image URL":"Đường dẫn URL hình ảnh mã QR","QR code is not configured. Please contact support.":"Mã QR chưa được cấu hình. Vui lòng liên hệ bộ phận hỗ trợ.","Quantity":"Số lượng","QuantumNous":"QuantumNous","Query":"Query","Query Balance":"Truy vấn số dư","Query Param":"Query param","Querying...":"Đang truy vấn...","Question":"Câu hỏi","Queued":"Trong hàng đợi","Quick actions":"Thao tác nhanh","Quick insert common payment methods":"Chèn nhanh các phương thức thanh toán phổ biến","Quick insert payment entries":"Chèn nhanh mục thanh toán","Quick options":"Tùy chọn nhanh","Quick Range":"Phạm vi nhanh","Quick Setup from Preset":"Thiết lập nhanh từ cấu hình sẵn","Quota":"Hạn ngạch","Quota ({{currency}})":"Hạn mức ({{currency}})","Quota adjusted successfully":"Điều chỉnh hạn mức thành công","Quota adjustment details":"Chi tiết điều chỉnh hạn mức","Redemption code count must be greater than 0":"Số lượng mã đổi thưởng phải lớn hơn 0","Quota after adjustment":"Hạn mức sau điều chỉnh","Quota before adjustment":"Hạn mức trước điều chỉnh","Quota clamped":"Hạn ngạch bị giới hạn","Redemption code name length must be between 1-20":"Tên mã đổi thưởng phải dài từ 1 đến 20 ký tự","Quota consumed before charging users":"Hạn mức tiêu thụ trước khi tính phí người dùng","Quota Distribution":"Phân bổ hạn ngạch","Quota given to invited users":"Hạn mức được cấp cho người dùng được mời","Quota given to invited users ({{formattedQuota}})":"Hạn mức cấp cho người dùng được mời ({{formattedQuota}})","Quota given to users who invite others":"Limit for users inviting others","Quota given to users who invite others ({{formattedQuota}})":"Hạn mức cấp cho người dùng mời người khác ({{formattedQuota}})","Quota must be a positive number":"Hạn mức phải là một số dương","Quota must be zero or greater":"Hạn mức không được âm","Redemption failed, please try again later":"Đổi mã thất bại, vui lòng thử lại sau","Redemption quota must be positive":"Hạn mức của mã đổi thưởng phải là số dương","Quota Per Unit":"Định mức mỗi đơn vị","Quota Reset":"Đặt lại hạn mức","Quota saturation protection triggered":"Đã kích hoạt bảo vệ chống tràn hạn ngạch","Quota Settings":"Cài đặt Hạn mức","Quota Types":"Các loại hạn ngạch","Quota unchanged":"Hạn mức không thay đổi","Quota update failed":"Cập nhật hạn mức thất bại","Quota:":"Hạn ngạch:","Radius":"Bo góc","Random":"Ngẫu nhiên","Randomly select a key from the pool for each request":"Chọn ngẫu nhiên một khóa từ kho cho mỗi yêu cầu","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"Dữ liệu xếp hạng hiện đang được mô phỏng để xem trước và sẽ được thay bằng dữ liệu thực sau khi tích hợp backend.","Rankings":"Bảng xếp hạng","Rate Limit Windows":"Cửa sổ giới hạn tốc độ","Rate Limited":"Giới hạn tốc độ","Rate Limiting":"Rate limit","Rate limits":"Giới hạn tốc độ","Ratio":"Tỷ lệ","Ratio applied to audio completions for streaming models.":"Tỷ lệ áp dụng cho các phần hoàn tất âm thanh của các mô hình phát trực tuyến.","Ratio applied to audio inputs where supported by the upstream model.":"Tỷ lệ áp dụng cho đầu vào âm thanh nếu được mô hình thượng nguồn hỗ trợ.","Ratio applied when creating cache entries for supported models.":"Hệ số nhân được áp dụng khi tạo mục cache cho các mô hình được hỗ trợ.","Ratio mode":"Chế độ tỷ lệ","Ratio overrides for users of this group":"Ghi đè hệ số cho người dùng của nhóm này","Ratio overrides when billed as this group":"Ghi đè hệ số khi tính phí theo nhóm này","Ratio Type":"Rate type","Ratio: {{value}}":"Tỷ lệ: {{value}}","Ratios synced successfully":"Tỷ lệ đã đồng bộ thành công","Raw expression":"Biểu thức gốc","Raw expressions and presets use USD. Currency selection only converts visual price inputs and monetary previews.":"Biểu thức gốc và mẫu có sẵn dùng USD. Lựa chọn tiền tệ chỉ quy đổi giá nhập trong trình chỉnh sửa trực quan và số tiền xem trước.","Raw JSON":"JSON thô","Raw Quota":"Hạn mức gốc","Raw response":"Phản hồi thô","Re-enable on success":"Kích hoạt lại khi thành công","Re-login":"Đăng nhập lại","Read channels":"Đọc kênh","Ready":"Sẵn sàng","Ready to initialize":"Sẵn sàng khởi tạo","Ready to simplify":"Sẵn sàng đơn giản hóa","Real exchange rate between USD and your payment gateway currency":"Tỷ giá hối đoái thực giữa USD và tiền tệ của cổng thanh toán của bạn","Realtime pricing must be converted manually.":"Cần chuyển đổi thủ công giá Realtime.","Reason":"Lý do","Reason:":"Lý do:","Reasoning":"Lý luận","Reasoning Effort":"Cường độ suy luận","Received":"Đã nhận","Regular administrators cannot promote other users to administrator":"Quản trị viên thông thường không thể nâng người dùng khác lên quản trị viên","Received amount":"Số tiền đã nhận","Recent maintenance tasks running across instances and their execution status.":"Các tác vụ bảo trì gần đây chạy trên các phiên bản và trạng thái thực thi của chúng.","Recent success-rate samples; gray bars indicate missing data.":"Các mẫu tỷ lệ thành công gần đây; vạch xám biểu thị dữ liệu chưa có.","Recently completed or failed system task runs.":"Các lần chạy tác vụ hệ thống gần đây đã hoàn tất hoặc thất bại.","Recently launched models":"Các mô hình ra mắt gần đây","Recently launched models gaining traction":"Mô hình mới phát hành đang được ưa chuộng","Recharge":"Nạp lại","Recharge Amount":"Số tiền nạp","Recharge Amount (USD)":"Số tiền nạp (USD)","Recommended":"Đề xuất","Recommended actions":"Hành động đề xuất","Recommended to keep this high to avoid upstream throttling.":"Khuyến nghị giữ mức này cao để tránh điều tiết từ phía thượng nguồn.","Record IP Address":"Ghi lại địa chỉ IP","Record quota usage":"Ghi lại mức sử dụng hạn mức","Recover auto-disabled channels only":"Chỉ khôi phục kênh bị tự động vô hiệu hóa","Recursion Strategy":"Chiến lược đệ quy","Recursive":"Đệ quy","Redeem":"Đổi","Redeem codes":"Đổi mã","Redeemed":"Đã dùng","Redeemed at":"Đã dùng lúc","Redeemed By":"Được chuộc bởi","Redeemed:":"Đã đổi:","redemption code":"mã đổi thưởng","Redemption Code":"Mã đổi thưởng","Redemption code deleted successfully":"Mã đổi thưởng đã xóa thành công","Redemption code disabled successfully":"Mã đổi thưởng đã vô hiệu hóa thành công","Redemption code enabled successfully":"Mã đổi thưởng đã kích hoạt thành công.","Redemption code updated successfully":"Mã đổi thưởng đã cập nhật thành công","Redemption code(s) created successfully":"Mã đổi thưởng đã tạo thành công","Redemption codes":"Mã đổi thưởng","Redemption Codes":"Mã đổi thưởng","Redemption codes are disabled until the administrator confirms compliance terms.":"Mã đổi thưởng bị tắt cho đến khi quản trị viên xác nhận điều khoản tuân thủ.","Redemption codes created":"Đã tạo mã quy đổi","redemption codes.":"Mã đổi thưởng","Redemption failed":"Đổi thưởng thất bại","Redemption successful! Added: {{quota}}":"Đổi mã thành công! Đã thêm: {{quota}}","Redirect {{model}}":"Chuyển hướng {{model}}","Redirect fetched upstream names to the names your users call.":"Chuyển hướng các tên thượng nguồn đã lấy sang tên mà người dùng gọi.","Redirect panel":"Bảng chuyển hướng","Redirect URL":"URL chuyển hướng","Redirecting to chat page...":"Đang chuyển hướng đến trang trò chuyện...","Redirecting to Creem checkout...":"Đang chuyển hướng đến thanh toán Creem...","Redirecting to GitHub...":"Đang chuyển hướng đến GitHub...","Redirecting to payment page...":"Đang chuyển hướng đến trang thanh toán...","Redirecting to sign in in {{seconds}} seconds.":"Đang chuyển đến trang đăng nhập sau {{seconds}} giây.","Redirects to {{model}}":"Chuyển hướng đến {{model}}","Reduces cache hit rate":"Làm giảm tỷ lệ trúng bộ nhớ đệm","Reduces repeated wording":"Giảm cách diễn đạt lặp lại","Reference Video":"Video tham chiếu","Referral link:":"Liên kết giới thiệu:","Referral Program":"Chương trình Giới thiệu","Referral reward transfer is disabled until the administrator confirms compliance terms.":"Chuyển phần thưởng giới thiệu bị tắt cho đến khi quản trị viên xác nhận điều khoản tuân thủ.","Refine models by provider, group, type, and tags.":"Tinh chỉnh mô hình theo nhà cung cấp, nhóm, loại và thẻ.","Refresh":"Làm mới","Refresh Cache":"Làm mới bộ nhớ đệm","Refresh credential":"Làm mới thông tin xác thực","Refresh details":"Làm mới chi tiết","Refresh failed":"Làm mới thất bại","Refresh failed. Showing the last successful snapshot.":"Làm mới thất bại. Đang hiển thị bản chụp thành công gần nhất.","Refresh interval (minutes)":"Khoảng thời gian làm mới (phút)","Refresh preview":"Làm mới bản xem trước","Refresh Stats":"Làm mới thống kê","Refresh the list and try again.":"Hãy làm mới danh sách và thử lại.","Refresh the preview before trying again; some changes may already have been saved.":"Hãy làm mới bản xem trước trước khi thử lại; một số thay đổi có thể đã được lưu.","Refreshing...":"Đang làm mới...","Refund":"Hoàn tiền","Refund Details":"Chi tiết hoàn tiền","Regenerate":"Tạo lại","Regenerate Backup Codes":"Tạo lại Mã dự phòng","Regenerated two-factor backup codes":"Đã tạo lại mã dự phòng xác thực hai yếu tố","Regenerating immediately invalidates any existing token.":"Việc tạo lại sẽ vô hiệu hóa ngay mọi token hiện có.","Regex":"Biểu thức chính quy","Regex Pattern":"Mẫu biểu thức chính quy","Regex Replace":"Thay thế regex","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"Đăng ký từng URL vào ô webhook Test Mode / Production Mode tương ứng trong bảng điều khiển Pancake. Endpoint riêng biệt giúp tránh việc lưu lượng thử nghiệm vô tình cộng tiền vào tài khoản sản xuất.","Register Passkey":"Đăng ký Passkey","Registered":"Đã đăng ký","Registered a passkey":"Đã đăng ký một passkey","Registration Enabled":"Đăng ký đã bật","Registration flow expired. Please try again.":"Quy trình đăng ký đã hết hạn. Vui lòng thử lại.","Registry (optional)":"Registry (tùy chọn)","Registry secret":"Bí mật Registry","Registry username":"Tên người dùng Registry","Reinstall latest":"Cài lại bản mới nhất","Reject Reason":"Lý do từ chối","Release details":"Chi tiết phiên bản","Release to insert a new priority tier":"Thả để chèn mức ưu tiên mới","Release to join priority {{priority}}":"Thả để ghép vào mức ưu tiên {{priority}}","Released":"Phát hành","Reload pricing":"Tải lại giá","Reload vendor details":"Tải lại thông tin nhà cung cấp","Relying Party Display Name":"Tên Hiển Thị của Bên Tin Cậy","Relying Party ID":"Định danh Bên phụ thuộc","Remaining":"Còn lại","Remaining percentage":"Tỷ lệ còn lại","Remaining quota":"Hạn ngạch còn lại","Remaining Quota ({{currency}})":"Hạn mức còn lại ({{currency}})","Remaining quota units":"Đơn vị hạn ngạch còn lại","Remaining:":"Còn lại:","Remark":"Nhận xét","Remind me once when my balance drops below the threshold":"Nhắc tôi một lần khi số dư giảm xuống dưới ngưỡng","Remind users through their chosen notification method when their balance drops below the threshold":"Nhắc người dùng qua phương thức thông báo họ đã chọn khi số dư giảm xuống dưới ngưỡng","Reminder threshold":"Ngưỡng nhắc nhở","Reminder threshold cannot be negative":"Ngưỡng nhắc nhở không được là số âm","Remove":"Xóa","Remove {{group}}":"Xóa {{group}}","Remove {{value}}":"Xóa {{value}}","Remove ${{amount}}":"Xóa ${{amount}}","Remove all custom prices, ratios and billing expressions for these exact model names. Built-in pricing may become effective again.":"Xóa toàn bộ giá, hệ số và biểu thức tính phí tùy chỉnh cho các tên mô hình khớp chính xác. Giá tích hợp có thể có hiệu lực trở lại.","Remove all log entries created before the selected timestamp.":"Xóa tất cả các mục nhật ký được tạo trước mốc thời gian đã chọn.","Remove attachment":"Xóa tệp đính kèm","Remove branch":"Xóa nhánh","Remove compatible Passkey domains?":"Xóa tên miền khóa truy cập tương thích?","Remove condition":"Gỡ điều kiện","Remove domains":"Xóa tên miền","Remove Duplicates":"Xóa trùng lặp","Remove end condition":"Xóa điều kiện kết thúc","Remove filter":"Xóa bộ lọc","Remove functionResponse.id field":"Loại bỏ trường functionResponse.id","Remove mapped targets":"Xóa đích đã ánh xạ","Remove Models":"Xóa mô hình","Remove negation":"Bỏ đảo điều kiện","Remove node filter":"Xóa bộ lọc nút này","Remove Passkey":"Xóa Khóa truy cập","Remove Passkey?":"Xóa khóa truy cập?","Remove rule group":"Gỡ nhóm quy tắc","Remove saved price":"Xóa giá đã lưu","Remove source {{name}}":"Xóa nguồn {{name}}","Remove start condition":"Xóa điều kiện bắt đầu","Remove string prefix":"Xóa tiền tố chuỗi","Remove string suffix":"Xóa hậu tố chuỗi","Remove the target field":"Xóa trường đích","Remove this model’s custom pricing and use the built-in defaults. A model without a default may become unpriced.":"Xóa giá tùy chỉnh và khôi phục giá mặc định. Mô hình không có giá mặc định có thể trở thành chưa định giá.","Remove tier":"Gỡ bậc","Removed":"Đã xóa","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"Đã xóa {{removed}} khóa trùng lặp. Trước: {{before}}, Sau: {{after}}","Removed an OAuth binding for the user":"Đã gỡ một liên kết OAuth của người dùng","Removed models":"Mô hình đã xóa","Removed Models ({{count}})":"Các mô hình đã xóa ({{count}})","Removed models will no longer be available through this channel. Select removals explicitly.":"Mô hình bị xóa sẽ không còn khả dụng qua kênh này. Hãy chọn rõ các mô hình cần xóa.","Removed settings":"Cấu hình bị xóa","Removes MjProxy flags such as --fast, --relax, and --turbo from user prompts.":"Loại bỏ các cờ MjProxy như --fast, --relax và --turbo khỏi lời nhắc của người dùng.","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"Xóa Khóa truy cập sẽ yêu cầu bạn đăng nhập bằng mật khẩu của mình vào lần tới. Bạn có thể đăng ký lại bất cứ lúc nào.","Rename":"Đổi tên","Rename deployment":"Đổi tên deployment","Rename failed":"Đổi tên thất bại","Renamed an access token":"Đã đổi tên token truy cập","Renamed successfully":"Đổi tên thành công","Renaming metadata does not rename channel models or move pricing. Existing prices stay with the original model name.":"Đổi tên siêu dữ liệu không đổi tên mô hình trong kênh hay chuyển giá. Giá hiện có vẫn gắn với tên mô hình ban đầu.","Reorder channel {{id}}":"Đổi thứ tự kênh {{id}}","Repair":"Sửa","Repair Channel Consistency":"Sửa tính nhất quán kênh","Repair channel consistency?":"Sửa tính nhất quán kênh?","Repeat the administrator password":"Nhập lại mật khẩu quản trị viên","Replace":"Thay thế","Replace {{find}} with {{replaceWith}}":"Thay {{find}} bằng {{replaceWith}}","Replace all existing keys":"Thay thế tất cả các khóa hiện có","Replace channel models":"Thay thế mô hình kênh","Replace forwarding routes?":"Thay thế các route chuyển tiếp?","Replace mode: Will completely replace all existing keys":"Chế độ Thay thế: Sẽ thay thế hoàn toàn tất cả các khóa hiện có","Replace text":"Thay thế văn bản","Replace with":"Thay bằng","Replace With":"Thay bằng","replaced":"thay thế","Replacement Model":"Replacement model","Replay drag demo":"Phát lại minh họa","Replica count":"Số bản sao","Replicate":"Sao chép","Report an issue":"Báo cáo sự cố","request":"yêu cầu","Request":"Yêu cầu","Request & Response":"Yêu cầu và phản hồi","Request Body Disk Cache":"Bộ nhớ đệm đĩa nội dung yêu cầu","Request Body Field":"Trường thân yêu cầu","Request Body Memory Cache":"Bộ nhớ đệm RAM nội dung yêu cầu","Request body must be a JSON object.":"Nội dung yêu cầu phải là một đối tượng JSON.","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"Chuyển tiếp body yêu cầu đã được bật. Body yêu cầu sẽ được gửi trực tiếp mà không chuyển đổi.","Request checks":"Kiểm tra yêu cầu","Request completed":"Yêu cầu hoàn tất","Request conversion":"Chuyển đổi yêu cầu","Request Conversion":"Chuyển đổi yêu cầu","Request Count":"Number of requests","Request decision flow":"Luồng quyết định yêu cầu","Request error occurred":"Đã xảy ra lỗi yêu cầu","Request failed":"Yêu cầu thất bại","Request flow":"Luồng yêu cầu","Request Header Field":"Trường header yêu cầu","Request Header Override":"Ghi đè header yêu cầu","Request Header Overrides":"Ghi đè Tiêu đề Yêu cầu","Request headers must be a JSON object with string values.":"Tiêu đề yêu cầu phải là đối tượng JSON có giá trị chuỗi.","Request ID":"ID yêu cầu","Request Limits":"Hạn mức yêu cầu","Request Model":"Mô hình yêu cầu","Request Model Name":"Tên mô hình trong yêu cầu","Request Model:":"Mô hình yêu cầu:","Request names your users call":"Tên yêu cầu mà người dùng gọi","Request overrides, routing behavior, and upstream model automation":"Ghi đè yêu cầu, hành vi định tuyến và tự động hóa mô hình upstream","Request Path":"Đường dẫn yêu cầu","Request policies":"Chính sách yêu cầu","Request policy decisions":"Quyết định chính sách yêu cầu","Request processing":"Xử lý yêu cầu","Request rejected locally":"Yêu cầu bị từ chối cục bộ","Request retry":"Thử lại yêu cầu","Request rule pricing":"Quy tắc tính giá theo request","Request rules apply on top of this amount.":"Các quy tắc yêu cầu được áp dụng thêm trên số tiền này.","Request simulation":"Mô phỏng yêu cầu","Request success rate sampled over the last 24 hours":"Tỷ lệ yêu cầu thành công được lấy mẫu trong 24 giờ qua","Request success rate; {{incidents}} incident buckets in the last 24 hours":"Tỷ lệ yêu cầu thành công; {{incidents}} khoảng có sự cố trong 24 giờ qua","Request text filtering":"Lọc văn bản yêu cầu","Request timed out, please refresh and restart GitHub login":"Yêu cầu đã hết thời gian chờ, vui lòng làm mới và đăng nhập lại GitHub","Request-based":"Theo yêu cầu","Requested items":"Số mục yêu cầu","Requested quota":"Số tiền yêu cầu","Requested quota: {{quota}}":"Số tiền yêu cầu: {{quota}}","Requested redemption code IDs":"ID mã quy đổi được yêu cầu xóa","Requested token IDs":"ID mã thông báo được yêu cầu","Requested token IDs truncated":"Danh sách ID mã thông báo yêu cầu đã được cắt ngắn","Requested: {{total}}":"Yêu cầu: {{total}}","Requested: {{total}} · Deleted: {{processed}}":"Yêu cầu: {{total}} · Đã xóa: {{processed}}","Requested: {{total}} · Returned: {{processed}}":"Yêu cầu: {{total}} · Trả về: {{processed}}","Requests":"Yêu cầu","Requests (24h)":"Yêu cầu (24h)","Requests / 24h":"Yêu cầu / 24h","Requests per minute":"Yêu cầu mỗi phút","requests served":"yêu cầu đã phục vụ","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"Các yêu cầu sẽ được chuyển tiếp đến worker này. Dấu gạch chéo ở cuối được tự động loại bỏ.","Requests:":"Yêu cầu:","Require email verification for new accounts":"Yêu cầu xác minh email cho tài khoản mới","Require job success before follow-up actions":"Yêu cầu công việc thành công trước các hành động tiếp theo","Require login to view models":"Yêu cầu đăng nhập để xem các mô hình","Require login to view rankings":"Yêu cầu đăng nhập để xem bảng xếp hạng","Require the original channel":"Bắt buộc dùng kênh cũ","required":"bắt buộc","Required":"Bắt buộc","Required events:":"Sự kiện bắt buộc:","Required permission":"Quyền cần có","Required provider, authentication, model, and group settings":"Thiết lập bắt buộc về nhà cung cấp, xác thực, mô hình và nhóm","Required to expose MjProxy-style image generation to end users.":"Cần thiết để cung cấp tính năng tạo hình ảnh kiểu MjProxy cho người dùng cuối.","Requires an available channel and access to its group.":"Cần có kênh khả dụng và quyền truy cập nhóm tương ứng.","Requires global auto-disable and this channel option.":"Cần bật tự động vô hiệu hóa cả toàn cục lẫn kênh này.","Requires upstream WebSocket support":"Thượng nguồn phải hỗ trợ WebSocket","Rerank":"Re-rank","Reroll":"Quay lại","Research, analysis, scientific reasoning":"Nghiên cứu, phân tích, suy luận khoa học","Resend ({{seconds}}s)":"Gửi lại ({{seconds}}s)","Resend codes":"Gửi lại mã","Resend in {{seconds}}s":"Gửi lại sau {{seconds}} giây","Reserve requested images; settle returned images.":"Tạm trừ theo số ảnh yêu cầu, quyết toán theo số ảnh nhận được.","Reserve the estimated input cost multiplied by this value, without estimating output tokens. Defaults to 1; positive decimals such as 0.5 and 1.5 are supported. Final charges use actual usage. Per-request and task prices are unaffected.":"Giữ trước chi phí đầu vào ước tính nhân với hệ số này, không ước tính token đầu ra. Mặc định là 1; hỗ trợ số thập phân dương như 0,5 và 1,5. Phí cuối cùng dựa trên mức sử dụng thực tế. Giá theo yêu cầu và tác vụ không bị ảnh hưởng.","Reserved for viewing complete channel keys after secure verification.":"Dành riêng để xem khóa kênh đầy đủ sau khi xác minh bảo mật.","Reset":"Đặt lại","Reset {{count}} active subscriptions":"Đã đặt lại {{count}} gói đăng ký đang hoạt động","Reset 2FA":"Đặt lại 2FA","Reset 2FA for {{username}}? The user must set up 2FA again to continue using it.":"Đặt lại 2FA cho {{username}}? Người dùng phải thiết lập lại 2FA để tiếp tục sử dụng.","Reset active {{plan}} subscriptions for this user?":"Đặt lại các gói đăng ký {{plan}} đang hoạt động của người dùng này?","Reset all active subscriptions under {{plan}}?":"Đặt lại tất cả gói đăng ký đang hoạt động trong {{plan}}?","Reset all model prices?":"Đặt lại tất cả giá mô hình?","Reset all model ratios?":"Đặt lại tất cả tỷ lệ mô hình?","Resume drag demo":"Tiếp tục minh họa kéo thả","Review the affected Passkeys and confirm the domain removal. If the settings or impact have changed, confirmation is required again.":"Hãy xem lại các Passkey bị ảnh hưởng và xác nhận xóa tên miền. Nếu cài đặt hoặc phạm vi ảnh hưởng thay đổi, cần xác nhận lại.","Reset all settings to default values":"Đặt lại tất cả cài đặt về giá trị mặc định","Reset at:":"Đặt lại lúc:","Reset balance and used quota":"Đặt lại số dư và hạn mức đã sử dụng","Reset completed":"Đặt lại hoàn tất","Reset completed. Latest usage has been refreshed.":"Đặt lại hoàn tất. Dữ liệu sử dụng mới nhất đã được làm mới.","Reset Count":"Số lượng đặt lại","Reset count:":"Số lần đặt lại:","Reset Credit":"Lượt đặt lại","Reset Credits":"Lượt đặt lại","Reset Cycle":"Chu kỳ đặt lại","Reset email sent, please check your inbox":"Email đặt lại đã được gửi, vui lòng kiểm tra hộp thư đến","Reset failed":"Đặt lại thất bại","Reset model ratios":"Đã đặt lại tỷ lệ mô hình","Reset Passkey":"Đặt lại Khóa truy cập","Reset Passkey for {{username}}? The user will need to register a new Passkey before using passwordless login.":"Đặt lại Passkey cho {{username}}? Người dùng cần đăng ký Passkey mới trước khi dùng đăng nhập không mật khẩu.","Reset password":"Đặt lại mật khẩu","Reset Period":"Chu kỳ đặt lại","Reset prices":"Đặt lại giá","Reset quota":"Đặt lại hạn mức","Reset ratios":"Đặt lại tỷ lệ","Reset Stats":"Đặt lại thống kê","Reset subscription quota":"Đặt lại hạn mức gói đăng ký","Reset the user passkey":"Đã đặt lại passkey của người dùng","Reset to default":"Đặt lại mặc định","Reset to Default":"Đặt lại mặc định","Reset to default configuration":"Đã đặt lại cấu hình mặc định","Reset Two-Factor Authentication":"Đặt lại Xác thực hai yếu tố","Reset usage window":"Đặt lại cửa sổ mức dùng","Resets in:":"Đặt lại sau:","Resetting...":"Đang đặt lại...","Resize column":"Thay đổi kích thước cột","Resolve Conflicts":"Giải quyết Xung đột","Resource Configuration":"Cấu hình tài nguyên","Resources":"Tài nguyên","Responding...":"Đang phản hồi...","Response":"Phản hồi","Response Model":"Mô hình trong phản hồi","Response model mismatch":"Mô hình phản hồi không khớp","Response model: {{model}}":"Mô hình phản hồi: {{model}}","Response Time":"Thời gian phản hồi","Response time: {{duration}}":"Thời gian phản hồi: {{duration}}","Response too large":"Phản hồi quá lớn","Responses API Version":"Phiên bản API Phản hồi","Responses WebSocket":"Responses WebSocket","Restore default pricing":"Khôi phục giá mặc định","Restore defaults":"Khôi phục mặc định","Restore global Auto":"Khôi phục Auto toàn cục","Restore notifications":"Nhận thông báo trở lại","Restrict user model request frequency (may impact high concurrency performance)":"Hạn chế tần suất yêu cầu mô hình người dùng (có thể ảnh hưởng đến hiệu suất khi có độ đồng thời cao)","Result":"Kết quả","Result not retained":"Kết quả không được lưu","Retain last N days":"Giữ lại N ngày gần nhất","Retain last N files":"Giữ lại N tệp gần nhất","Retention days":"Số ngày lưu giữ","Retrieve result":"Truy vấn kết quả","Retry":"Thử lại","rule_name cannot be empty":"rule_name không được để trống","Retry budget":"Ngân sách thử lại","Retry Chain":"Chuỗi thử lại","Retry Settings":"Cài đặt thử lại","Retry Suggestion":"Gợi ý thử lại","Retry Times":"Số lần thử lại","Return a custom error immediately":"Trả về lỗi tùy chỉnh ngay lập tức","Return Custom Error":"Trả lỗi tùy chỉnh","Return data conforming to a JSON schema":"Trả về dữ liệu tuân theo JSON Schema","Return Error":"Trả về lỗi","Return per-token log probabilities":"Trả về log probabilities cho từng token","Return to dashboard":"Quay lại bảng điều khiển","Return to the original window to continue.":"Quay lại cửa sổ ban đầu để tiếp tục.","Return vector embeddings for inputs":"Trả về vector embedding cho đầu vào","Returned keys":"Số khóa trả về","Returned token IDs":"ID mã thông báo được trả về","Returned: {{processed}}":"Trả về: {{processed}}","Reveal API key":"Hiển thị khóa API","Reveal full keys":"Xem khóa đầy đủ","Reveal key":"Display key","Revenue":"Doanh thu","Review & initialize":"Xem lại và khởi tạo","Review and confirm the selected prices.":"Kiểm tra và xác nhận các giá đã chọn.","Review and sign out devices currently using your account.":"Xem lại và đăng xuất các thiết bị hiện đang sử dụng tài khoản của bạn.","Review and upgrade":"Xem lại và nâng cấp","Review confirmation":"Kiểm tra và xác nhận","Review every addition and overwrite before applying. Pricing, channels, and group access are not changed.":"Kiểm tra từng mục thêm và ghi đè trước khi áp dụng. Giá, kênh và quyền nhóm không thay đổi.","Review model rates before scaling traffic":"Xem giá mô hình trước khi mở rộng lưu lượng","Review selected changes":"Kiểm tra thay đổi đã chọn","Review the affected records before applying. Pricing, channels, and model names are preserved.":"Kiểm tra các bản ghi bị ảnh hưởng trước khi áp dụng. Giá, kênh và tên mô hình được giữ nguyên.","Review the compatible domains and allowed websites, then save changes on the settings page.":"Kiểm tra các tên miền tương thích và trang web được phép, rồi lưu thay đổi trên trang cài đặt.","Review the model changes before applying. Unselected models stay unchanged and will not be ignored.":"Kiểm tra thay đổi trước khi áp dụng. Mô hình không được chọn sẽ giữ nguyên và không bị đưa vào danh sách bỏ qua.","Review the prices and billing expression. Confirming updates the draft; save model pricing to apply it.":"Kiểm tra giá và biểu thức tính phí. Xác nhận chỉ cập nhật bản nháp; hãy lưu giá mô hình để áp dụng.","Review your payment details":"Xem lại chi tiết thanh toán của bạn","Review your purchase details before proceeding.":"Xem lại chi tiết mua hàng trước khi tiếp tục.","Revoke":"Thu hồi","Revoke session?":"Thu hồi phiên này?","Revoke this access token? Scripts using it stop working immediately.":"Thu hồi token truy cập này? Các script đang dùng nó sẽ ngừng hoạt động ngay lập tức.","Revoked access tokens":"Token truy cập đã thu hồi","Revoked an access token":"Đã thu hồi token truy cập","Rewards will be added directly to your balance":"Phần thưởng sẽ được thêm trực tiếp vào số dư của bạn","Rewrite callback URLs to the local server":"Viết lại URL callback đến máy chủ cục bộ","Right to Left":"Phải sang trái","Role":"Vai trò","Roleplay":"Nhập vai","Root":"Root","Root Diagnostics":"Chẩn đoán Root","Rose Garden":"Vườn hoa hồng","Route":"Tuyến đường","Route active":"Tuyến đang hoạt động","Route Description":"Mô tả lộ trình","Route group":"Nhóm tuyến","Route is required":"Đường dẫn là bắt buộc","Route models must be unique for the same incoming path":"Các mô hình tuyến phải là duy nhất cho cùng đường dẫn đầu vào","Route, auth, and balance check in one place":"Kiểm tra tuyến, xác thực và số dư ở cùng một nơi","Routes":"Route","Routes in this plan":"Các route trong cấu hình","Routes with the same incoming path are matched by model. Leave the model scope empty only for the final fallback route.":"Các tuyến có cùng đường dẫn vào được khớp theo mô hình. Chỉ để trống phạm vi mô hình cho tuyến dự phòng cuối cùng.","Routes with the same incoming path are split by client model rules. Unmatched requests use the final fallback.":"Các route có cùng đường vào được phân nhánh theo quy tắc client model. Yêu cầu không khớp dùng nhánh dự phòng cuối.","Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.":"Các tuyến có cùng đường dẫn vào được tách theo model client chính xác. Yêu cầu chưa khớp sẽ dùng nhánh dự phòng cuối cùng.","Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.":"Các tuyến có cùng đường dẫn vào khớp theo tên model chính xác từ yêu cầu client. Ngăn cách nhiều model bằng dấu phẩy và chỉ để trống nhánh dự phòng cuối cùng.","Routing & Mapping":"Định tuyến và ánh xạ","Routing & Overrides":"Định tuyến & ghi đè","Routing Group":"Nhóm định tuyến","Routing Reliability":"Độ tin cậy định tuyến","Routing Strategy":"Chiến lược định tuyến","Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.":"Hàng là nhóm người dùng, cột là nhóm tính phí. Ô trống sẽ dùng hệ số cơ bản hiển thị màu xám.","Rows per page":"Số hàng trên trang","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = yêu cầu mỗi phút, TPM = token mỗi phút, RPD = yêu cầu mỗi ngày. Giới hạn áp dụng cho từng nhóm token.","RSA Private Key (Production)":"RSA Private Key (Sản xuất)","RSA Private Key (Sandbox)":"Khóa riêng RSA (Sandbox)","Rule":"Quy tắc","Rule {{line}} is missing source field":"Quy tắc {{line}} thiếu trường nguồn","Rule {{line}} is missing target field":"Quy tắc {{line}} thiếu trường đích","Rule {{line}} is missing target path":"Quy tắc {{line}} thiếu đường dẫn đích","Rule {{line}} is missing value":"Quy tắc {{line}} thiếu giá trị","Rule {{line}} pass_headers format is invalid":"Định dạng pass_headers của quy tắc {{line}} không hợp lệ","Rule {{line}} pass_headers is missing header names":"pass_headers của quy tắc {{line}} thiếu tên header","Rule {{line}} prune_objects is missing conditions":"prune_objects của quy tắc {{line}} thiếu điều kiện","Rule {{line}} return_error requires a message field":"return_error của quy tắc {{line}} cần trường message","Rule Description (optional)":"Mô tả quy tắc (tùy chọn)","Rule editor mode":"Chế độ sửa quy tắc","Rule group":"Nhóm quy tắc","Rule override":"Thiết lập riêng của quy tắc","rules":"quy tắc","Rules":"Quy tắc","Rules are checked in order. The first match determines the price.":"Các quy tắc được xét theo thứ tự. Quy tắc khớp đầu tiên quyết định giá.","Rules can inherit or override these defaults.":"Quy tắc có thể kế thừa hoặc ghi đè các mặc định này.","Rules for {{group}}":"Quy tắc cho {{group}}","Rules JSON":"JSON quy tắc","Rules JSON must be an array":"JSON quy tắc phải là một mảng","Rules match the original model value from the client request body.":"Quy tắc khớp với giá trị model gốc trong thân yêu cầu của client.","Run and manage maintenance tasks and performance settings.":"Chạy và quản lý tác vụ bảo trì cùng cài đặt hiệu năng.","Run background checks using the selected test mode":"Chạy kiểm tra nền theo chế độ đã chọn","Run dry run":"Chạy thử","Run GC":"Chạy GC","Run tests for the selected models":"Chạy kiểm thử cho các mô hình đã chọn","running":"đang chạy","Running":"Đang chạy","Running dry run":"Đang chạy thử","Running requests":"Yêu cầu đang chạy","Runtime":"Môi trường chạy","Runtime status":"Trạng thái chạy","Runway":"Thời gian còn lại","s":"s","Safety Settings":"Cài đặt an toàn","Same as Local":"Giống như địa phương","Sample interval: {{seconds}} seconds":"Khoảng lấy mẫu: {{seconds}} giây","Sampling temperature; lower is more deterministic":"Nhiệt độ lấy mẫu; càng thấp càng ổn định","Sandbox":"Hộp cát","Sandbox mode":"Chế độ sandbox","Save":"Lưu","Save & Submit":"Lưu và gửi","Save all settings":"Lưu tất cả cài đặt","Save as a file":"Lưu thành tệp","Save as Markdown":"Lưu dạng Markdown","Save as TXT":"Lưu dạng TXT","Save Backup Codes":"Lưu mã dự phòng","Save changes":"Lưu thay đổi","Save Changes":"Lưu Thay đổi","Save chat settings":"Lưu cài đặt trò chuyện","Save check-in settings":"Lưu cài đặt điểm danh","Save Creem settings":"Lưu cài đặt Creem","Save drawing settings":"Lưu cài đặt bản vẽ","Save Epay settings":"Lưu cài đặt Epay","Save failed":"Lưu thất bại","Save failed, please retry":"Lưu thất bại, vui lòng thử lại","Save general settings":"Lưu cài đặt chung","Save group ratios":"Lưu tỷ lệ nhóm","Save group settings":"Lưu cài đặt nhóm","Save io.net settings":"Lưu cài đặt io.net","Save log settings":"Lưu cài đặt nhật ký","Save metadata":"Lưu siêu dữ liệu","Save model prices":"Lưu giá mô hình","Save model ratios":"Lưu tỷ lệ mô hình","Save Models":"Lưu Mô hình","Save monitoring rules":"Lưu quy tắc giám sát","Save navigation":"Lưu điều hướng","Save notice":"Lưu thông báo","Save or discard pricing changes before renaming metadata.":"Lưu hoặc hủy thay đổi giá trước khi đổi tên siêu dữ liệu.","Save Preferences":"Lưu tùy chọn","Save preview":"Xem trước lưu","Save rate limits":"Lưu giới hạn tốc độ","Save redemption codes":"Lưu mã quy đổi","Save sensitive words":"Lưu từ nhạy cảm","Save Settings":"Lưu Cài đặt","Save sidebar modules":"Lưu các mô-đun thanh bên","Save SSRF settings":"Lưu cài đặt SSRF","Save Stripe settings":"Lưu cài đặt Stripe","Save these backup codes in a safe place. Each code can only be used once.":"Lưu các mã dự phòng này ở nơi an toàn. Mỗi mã chỉ được sử dụng một lần.","Save these codes in a safe place. Each code can only be used once.":"Hãy lưu các mã này ở nơi an toàn. Mỗi mã chỉ có thể được sử dụng một lần.","Save token limits":"Lưu giới hạn token","Save tool prices":"Lưu giá công cụ","Save Waffo Pancake settings":"Lưu cài đặt Waffo Pancake","Save Worker settings":"Lưu cài đặt Worker","Saved successfully":"Lưu thành công","Saving permission changes requires security verification":"Lưu thay đổi quyền cần xác minh bảo mật","Saving...":"Đang lưu...","Scan QR Code":"Quét mã QR","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"Quét mã QR để theo dõi tài khoản chính thức, trả lời « 验证码 » để nhận mã xác minh.","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"Quét mã QR này bằng ứng dụng xác thực của bạn (Google Authenticator, Microsoft Authenticator, v.v.)","Scenario Templates":"Mẫu kịch bản","Scheduled channel tests":"Kiểm tra kênh theo lịch trình","Scheduled full test":"Kiểm tra toàn bộ theo lịch","Scheduled full test probes non-manually-disabled channels; passive recovery only checks auto-disabled channels after real request failures.":"Kiểm tra toàn bộ theo lịch sẽ dò các kênh không bị vô hiệu hóa thủ công; khôi phục thụ động chỉ kiểm tra các kênh bị tự động vô hiệu hóa sau lỗi từ yêu cầu thực tế.","Scheduled or bulk health checks can disable a channel when this duration is exceeded, if both global and channel auto-disable are enabled.":"Nếu bật tự động vô hiệu hóa cả ở cấp chung và cấp kênh, kiểm tra định kỳ hoặc hàng loạt vượt thời gian này có thể vô hiệu hóa kênh.","Scheduled recovery is off. Bulk channel tests can still re-enable automatically disabled channels.":"Khôi phục định kỳ đang tắt. Kiểm tra hàng loạt vẫn có thể bật lại các kênh bị tự động vô hiệu hóa.","Scheduled test options":"Tùy chọn kiểm tra định kỳ","scheduling controls":"điều khiển điều phối","Science":"Khoa học","Scope":"Phạm vi","Scopes":"Phạm vi","Search":"Tìm kiếm","Search by name or URL...":"Tìm kiếm theo tên hoặc URL...","Select at least one valid permission.":"Chọn ít nhất một quyền hợp lệ.","Search by order number...":"Tìm kiếm theo số đơn hàng...","Search channel type...":"Tìm loại kênh...","Search chat presets...":"Tìm kiếm cài đặt sẵn trò chuyện...","Search colors...":"Tìm kiếm màu sắc...","Search conflicting models or fields":"Tìm kiếm mô hình hoặc trường xung đột","Search deployments...":"Tìm kiếm triển khai...","Search feature in development":"Tính năng tìm kiếm đang được phát triển","Search group names...":"Tìm kiếm tên nhóm...","Search groups by name or description":"Tìm theo tên hoặc mô tả nhóm","Search groups...":"Searching for group...","Search icons or enter an icon key":"Tìm biểu tượng hoặc nhập khóa biểu tượng","Search method identifiers...":"Tìm mã định danh phương thức...","Search missing models":"Tìm kiếm mô hình bị thiếu","Search model name, provider, endpoint, or tag...":"Tìm tên mô hình, nhà cung cấp, endpoint hoặc thẻ...","Search model name...":"Tìm kiếm tên mẫu...","Search models":"Tìm kiếm mô hình","Search models or fields...":"Tìm kiếm mô hình hoặc trường...","Search models...":"Mô hình tìm kiếm...","Search payment methods...":"Tìm kiếm phương thức thanh toán...","Search payment type keys...":"Tìm khóa loại thanh toán...","Search payment types...":"Tìm kiếm loại thanh toán...","Search products...":"Tìm kiếm sản phẩm...","Search providers, plugins, or type numbers":"Tìm nhà cung cấp, plugin hoặc mã loại","Search rules...":"Tìm kiếm quy tắc…","Search tags...":"Tìm thẻ...","Search the public web at inference time":"Tìm kiếm web công khai trong khi suy luận","Search vendor names or descriptions":"Tìm tên hoặc mô tả nhà cung cấp","Search vendors":"Tìm nhà cung cấp","Search vendors...":"Tìm nhà cung cấp...","Search, add, and edit model vendors.":"Tìm, thêm và chỉnh sửa nhà cung cấp mô hình.","Search...":"Tìm kiếm...","second":"giây","Second":"Giây","seconds":"giây","Secret env (JSON object)":"Biến môi trường bí mật (đối tượng JSON)","Secret environment variables (JSON)":"Biến môi trường bí mật (JSON)","Secret Key":"Khóa bí mật","Secure & Reliable":"An toàn & Đáng tin cậy","Secured":"Đã bảo vệ","Security":"Bảo mật","Security & Access":"Bảo mật và truy cập","Security & Limits":"Bảo mật & giới hạn","Security Check":"Kiểm tra bảo mật","Security verification":"Xác minh bảo mật","Security verification has expired. Please verify again.":"Xác minh bảo mật đã hết hạn. Vui lòng xác minh lại.","Security verification is no longer valid. Please verify again.":"Xác minh bảo mật không còn hợp lệ. Vui lòng xác minh lại.","Seed":"Seed","Select":"Chọn","Select {{name}}":"Chọn {{name}}","Select a color":"Chọn một màu","Select a complete plan, then keep only the routes you need.":"Chọn cấu hình đầy đủ, sau đó chỉ giữ các route cần thiết.","Select a concrete model to configure pricing. Metadata matching does not propagate prices.":"Chọn mô hình cụ thể để cấu hình giá. Việc khớp siêu dữ liệu không lan truyền giá.","Select a group":"Chọn một nhóm","Select a group type":"Chọn loại nhóm","Select a model to edit pricing":"Chọn mô hình để chỉnh sửa giá","Select a preset...":"Chọn cấu hình sẵn...","Select a price source and review pricing changes. Model metadata and channel access are not changed.":"Chọn nguồn giá và xem trước thay đổi. Siêu dữ liệu mô hình và quyền truy cập kênh không thay đổi.","Select a product":"Chọn sản phẩm","Select a role":"Chọn vai trò","Select a rule to edit.":"Chọn một quy tắc để chỉnh sửa.","Select a saved vendor.":"Chọn nhà cung cấp đã lưu.","Select a store":"Chọn cửa hàng","Select a suggested icon or keep an existing advanced icon key.":"Chọn biểu tượng gợi ý hoặc giữ chuỗi khóa biểu tượng nâng cao hiện có.","Select a timestamp before clearing logs.":"Chọn một dấu thời gian trước khi xóa nhật ký.","Select a usage mode to continue":"Chọn chế độ sử dụng để tiếp tục","Select a verification method first":"Vui lòng chọn phương thức xác thực trước","Select a version to compare":"Chọn phiên bản để so sánh","Select active subscription plan":"Chọn gói đăng ký đang hoạt động","Select all":"Chọn tất cả","Select all (filtered)":"Chọn tất cả (đã lọc)","Select all changed fields":"Chọn tất cả trường thay đổi","Select all matching models":"Chọn tất cả mô hình phù hợp","Select all models":"Chọn tất cả mô hình","Select all models in {{category}}":"Chọn tất cả mô hình trong {{category}}","Select all prices from {{source}}":"Chọn tất cả giá từ {{source}}","Select all syncable models (all pages, {{count}})":"Chọn tất cả mô hình có thể đồng bộ (mọi trang, {{count}})","Select All Visible":"Chọn tất cả hiển thị","Select an operation mode and enter the amount":"Chọn chế độ thao tác và nhập số tiền","Select announcement type":"Select notification type","Select at least one Auto group or restore global Auto.":"Chọn ít nhất một nhóm Auto hoặc khôi phục Auto toàn cục.","Select at least one field to overwrite.":"Chọn ít nhất một trường để ghi đè.","Select at least one model to preview mappings.":"Chọn ít nhất một mô hình để xem trước ánh xạ.","Select at least one permission":"Hãy chọn ít nhất một quyền","Select at least one route":"Chọn ít nhất một route","Select at least one target model":"Chọn ít nhất một mô hình đích","Select at most {{max}} Auto groups":"Chọn tối đa {{max}} nhóm Auto","Select body font":"Chọn phông chữ nội dung","Select border radius":"Chọn độ bo góc","Select channel type":"Chọn loại kênh","Select color preset":"Chọn cài đặt màu sẵn","Select content width":"Chọn chiều rộng nội dung","Select corner radius":"Chọn độ bo góc","Select currency":"Chọn tiền tệ","Select date":"Chọn ngày","Select default chart":"Chọn biểu đồ mặc định","Select default range":"Chọn khoảng mặc định","Select display mode":"Chọn chế độ hiển thị","Select end time":"Chọn thời gian kết thúc","Select from presets or type custom identifier.":"Chọn từ các cài đặt sẵn hoặc nhập mã định danh tùy chỉnh.","Select granularity":"Select detail level","Select groups (leave empty to keep current)":"Chọn nhóm (để trống để giữ nguyên hiện tại)","Select interface density":"Chọn mật độ giao diện","Select items...":"Chọn các mục...","Select key format":"Chọn định dạng khóa","Select language":"Chọn ngôn ngữ","Select Language":"Chọn Ngôn ngữ","Select layout style":"Chọn kiểu bố cục","Select locations":"Chọn vị trí","Select model":"Chọn mô hình","Select Model":"Chọn mẫu","Select model {{model}}":"Chọn mô hình {{model}}","Select models":"Chọn các mô hình","Select models (empty for allow all)":"Chọn model (để trống nếu muốn cho","Select models and apply to channel models list.":"Chọn mô hình và áp dụng cho danh sách mô hình kênh.","Select models or add custom ones":"Chọn các mô hình hoặc thêm các mô hình tùy chỉnh","Select models to process. Unselected \\"add\\" models will be ignored.":"Chọn các mô hình để xử lý. Các mô hình \\"thêm\\" không được chọn sẽ bị bỏ qua.","Select models to run batch tests.":"Chọn mô hình để chạy kiểm thử hàng loạt.","Select or enter color value":"Chọn hoặc nhập giá trị màu","Select or enter method identifier":"Chọn hoặc nhập mã định danh phương thức","Select or enter model name":"Chọn hoặc nhập tên mô hình","Select or enter payment type":"Chọn hoặc nhập loại thanh toán","Select or enter payment type key":"Chọn hoặc nhập khóa loại thanh toán","Select payment method":"Chọn phương thức thanh toán","Select preset or enter custom CSS color value.":"Chọn cài đặt sẵn hoặc nhập giá trị màu CSS tùy chỉnh.","Select price for {{model}} from {{source}}":"Chọn giá {{model}} từ {{source}}","Select price sources":"Chọn nguồn giá","Select publish date":"Chọn ngày xuất bản","Select requirement":"Chọn yêu cầu","Select row":"Chọn hàng","Select row {{number}}":"Chọn dòng {{number}}","Select sidebar style":"Chọn kiểu thanh bên","Select site direction":"Chọn hướng trang","Select start time":"Chọn thời gian bắt đầu","Select subscription plan":"Chọn gói đăng ký","Select successful models ({{count}})":"Chọn các mô hình thành công ({{count}})","Select Sync Channels":"Chọn Kênh đồng bộ","Select sync channels to compare prices":"Chọn kênh đồng bộ để so sánh giá","Select sync channels to compare ratios":"Chọn kênh đồng bộ để so sánh tỷ lệ","Select Sync Source":"Chọn Nguồn Đồng Bộ","Select syncable models on this page":"Chọn mô hình có thể đồng bộ trên trang này","Select task plugin":"Chọn plugin tác vụ","Select the API endpoint region":"Chọn khu vực điểm cuối API","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"Chọn các trường bạn muốn ghi đè bằng dữ liệu thượng nguồn. Các trường không được chọn sẽ giữ nguyên giá trị cục bộ của chúng.","Select the models to keep in this channel.":"Chọn các mô hình cần giữ lại trong kênh này.","Select the task plugins installed on the upstream gateway":"Chọn các plugin tác vụ đã cài trên gateway thượng nguồn","Settings updated":"Đã cập nhật cài đặt","Select theme preference":"Chọn chủ đề ưu tiên","Settled by the task usage expression":"Quyết toán theo biểu thức mức dùng của tác vụ","Select theme preset":"Chọn tùy chỉnh chủ đề","Select time granularity":"Chọn độ chi tiết thời gian","Select vendor":"Chọn nhà cung cấp","Select version":"Chọn phiên bản","Selectable groups":"Nhóm có thể chọn","selected":"đã chọn","Selected {{count}}":"Đã chọn {{count}}","Selected {{selected}} / {{total}}":"Đã chọn {{selected}} / {{total}}","selected channel(s). Leave empty to remove tag.":"Kênh đã chọn. Để trống để xóa thẻ.","Selected conflicts were overwritten successfully.":"Các xung đột được chọn đã được ghi đè thành công.","Selected names are":"Tên đã chọn là","Selected nodes":"Nút đã chọn","Selected when creating a token and used as the default billing group for API calls.":"Được chọn khi tạo token và dùng làm nhóm tính phí mặc định cho các lệnh gọi API.","Selecting a plugin fills its declared models and default base URL.":"Chọn plugin sẽ điền các model đã khai báo và Base URL mặc định.","Self-Use Mode":"Chế độ tự sử dụng","Send":"Gửi","Send a request":"Gửi yêu cầu","Send chat completions to the OpenAI-compatible /v1/chat/completions instead of the native Ollama /api/chat":"Gửi yêu cầu chat completions tới /v1/chat/completions tương thích OpenAI thay vì /api/chat gốc của Ollama","Send code":"Gửi mã","Send reset email":"Gửi email đặt lại","Send the original request body to upstream without conversion. Only available for native forwarding routes.":"Gửi phần thân yêu cầu gốc lên upstream mà không chuyển đổi. Chỉ dùng được cho các tuyến chuyển tiếp nguyên bản.","Sending...":"Đang gửi...","Sensitive channel settings are read-only for your account.":"Các cài đặt kênh nhạy cảm chỉ đọc đối với tài khoản của bạn.","Sensitive Words":"Từ ngữ nhạy cảm","Sent the API key to FluentRead.":"Đã gửi khóa API đến FluentRead.","Separate image/audio prices are enabled.":"Giá riêng cho hình ảnh/âm thanh đã được bật.","Separate multiple rules with English commas. For regex patterns that need commas, switch to JSON Text.":"Tách nhiều quy tắc bằng dấu phẩy tiếng Anh. Với regex cần dấu phẩy, hãy chuyển sang JSON Text.","Separate several values with commas":"Phân tách nhiều giá trị bằng dấu phẩy","Serve multiple users or teams with billing and quota control.":"Phục vụ nhiều người dùng hoặc nhóm với quản lý thanh toán và hạn mức.","Server Address":"Địa chỉ máy chủ","Server IP":"IP máy chủ","Server Log Management":"Quản lý nhật ký máy chủ","Server logging is not enabled (log directory not configured)":"Nhật ký máy chủ chưa được bật (chưa cấu hình thư mục nhật ký)","Server Token":"Mã thông báo máy chủ","Service account JSON file(s)":"Tệp JSON tài khoản dịch vụ","Session":"Phiên","Session behavior":"Giữ phiên","Session behavior prevents switching channels":"Cài đặt duy trì phiên ngăn việc chuyển kênh","Session defaults":"Mặc định phiên","Session expired!":"Phiên hết hạn!","Session expired?":"Phiên đã hết hạn?","Session rule":"Quy tắc phiên","Session rule matched":"Khớp quy tắc phiên","Session rules":"Quy tắc phiên","Session rules table":"Bảng quy tắc phiên","Session signed out":"Đã đăng xuất phiên","Sessions & Access":"Phiên và truy cập","Sign in to bind an account":"Đăng nhập để liên kết tài khoản","Sessions and retries":"Phiên và thử lại","Set":"Đặt","Set a discount rate for a specific recharge amount threshold.":"Đặt tỷ lệ chiết khấu cho một ngưỡng số tiền nạp cụ thể.","Set a secure password (min. 8 characters)":"Đặt mật khẩu an toàn (tối thiểu 8 ký tự)","Set a tag for":"Gắn thẻ cho","Set API key access restrictions":"Thiết lập hạn chế truy cập cho khóa API","Set API key basic information":"Thiết lập thông tin cơ bản cho khóa API","Set default ranges and charts for model analytics.":"Đặt khoảng thời gian và biểu đồ mặc định cho phân tích mô hình.","Set Field":"Đặt trường","Set filters to customize your dashboard statistics and charts.":"Đặt bộ lọc để tùy chỉnh số liệu thống kê và biểu đồ trên bảng điều khiển của bạn.","Set filters to narrow down your log search results.":"Đặt bộ lọc để thu hẹp kết quả tìm kiếm nhật ký của bạn.","Set Header":"Đặt tiêu đề","Set Password":"Đặt mật khẩu","Set prices for each set of conditions below. Cost = usage × unit price + additional charge. Token prices are per million tokens.":"Đặt giá cho từng điều kiện bên dưới. Chi phí = mức sử dụng × đơn giá + phí bổ sung. Đơn giá token tính trên mỗi triệu token.","Set prices for each set of conditions below. Cost = usage × unit price + fixed fee. Token prices are per million tokens.":"Đặt giá cho từng điều kiện bên dưới. Chi phí = mức sử dụng × đơn giá + phí cố định. Đơn giá token tính trên mỗi triệu token.","Set Project to io.cloud when creating/selecting key":"Đặt Dự án thành io.cloud khi tạo/chọn khóa","Set quota amount and limits":"Thiết lập hạn mức và giới hạn","Set Request Header":"Đặt header yêu cầu","Set runtime request header: override entire value, or manipulate comma-separated tokens":"Đặt header yêu cầu runtime: ghi đè toàn bộ giá trị hoặc thao tác token phân cách bằng dấu phẩy","Set separate prices for cache reads and writes.":"Đặt giá riêng cho đọc và ghi bộ nhớ đệm.","Set separately for this provider":"Thiết lập riêng cho nhà cung cấp này","Set Tag":"Gán Thẻ","Set tag for selected channels":"Đặt thẻ cho các kênh đã chọn","Set the language used across the interface":"Đặt ngôn ngữ sử dụng trong giao diện","Set the user\'s role (cannot be Root)":"Đặt vai trò của người dùng (không được là Root)","Set the website where users will use their Passkeys.":"Nhập tên miền trang mà người dùng sẽ dùng Passkey.","Set these values in the provider application before enabling login.":"Thiết lập các giá trị này trong ứng dụng của nhà cung cấp trước khi bật đăng nhập.","Set up model redirects":"Thiết lập chuyển hướng mô hình","Set up redirect":"Thiết lập chuyển hướng","Setting Key":"Khóa cài đặt","Setting saved":"Cài đặt đã được lưu","Size {{size}}":"Kích thước {{size}}","Setting up 2FA...":"Đang thiết lập 2FA...","Setting updated successfully":"Cài đặt đã được cập nhật thành công","Settings":"Cài đặt","Settings & Preferences":"Cài đặt & Tùy chọn","Settings updated successfully":"Cài đặt đã được cập nhật thành công","Setup expired. Scan the new QR code and save the new backup codes.":"Thiết lập đã hết hạn. Quét mã QR mới và lưu các mã dự phòng mới.","Setup guide":"Hướng dẫn thiết lập","Setup guide complete":"Đã hoàn tất hướng dẫn thiết lập","Setup guide is collapsed. Expand it anytime.":"Hướng dẫn thiết lập đã được thu gọn. Bạn có thể mở lại bất cứ lúc nào.","Setup Instructions":"Hướng dẫn Thiết lập","Setup progress: {{completed}}/{{total}}":"Tiến độ thiết lập: {{completed}}/{{total}}","Setup Two-Factor Authentication":"Thiết lập Xác thực hai yếu tố","Setup: three groups and one override matrix cell.":"Thiết lập: ba nhóm và một ô ma trận ghi đè.","Setup: three groups and one override rule.":"Thiết lập: ba nhóm và một quy tắc ghi đè.","SGLang":"SGLang","SMTP server is not configured":"Máy chủ SMTP chưa được cấu hình","SGLang API key, or EMPTY if authentication is disabled":"Khóa API SGLang, hoặc EMPTY nếu đã tắt xác thực","SGLang channel base URL cannot be empty":"URL cơ sở của kênh SGLang không được để trống","SGLang server address, without /v1":"Địa chỉ máy chủ SGLang, không có /v1","SGLang status":"Trạng thái SGLang","Some files could not be deleted ({{failed}}/{{total}})":"Không thể xóa một số tệp ({{failed}}/{{total}})","Share":"Tỉ lệ","Share your link and earn rewards":"Chia sẻ liên kết của bạn và kiếm phần thưởng","Shared configuration for all payment gateways":"Cấu hình chung cho tất cả các cổng thanh toán","Shorten":"Rút gọn","Show":"Hiển thị","Show All":"Hiển thị tất cả","Show all providers including unbound":"Hiển thị tất cả nhà cung cấp (bao gồm chưa liên kết)","Show all tags":"Xem tất cả nhãn","Show in model catalog":"Hiển thị trong danh mục mô hình","Show in model square":"Hiển thị trong kho mô hình","Show only bound providers":"Chỉ hiển thị nhà cung cấp đã liên kết","Show or hide flow columns":"Hiện hoặc ẩn các cột luồng","Show preview":"Hiển thị bản xem trước","Show prices in currency instead of quota.":"Hiển thị giá bằng tiền tệ thay vì hạn ngạch.","Show selected models in model square":"Hiển thị mô hình đã chọn trong kho mô hình","Show sensitive data":"Hiển thị dữ liệu nhạy cảm","Show setup guide":"Hiển thị hướng dẫn thiết lập","Show source":"Hiển thị nguồn","Show token usage statistics in the UI":"Hiển thị thống kê sử dụng token trong giao diện người dùng","Showcase core capabilities with demo credentials and limited access.":"Trình diễn các tính năng cốt lõi với thông tin đăng nhập demo và quyền truy cập hạn chế.","Showing":"Đang hiển thị","Showing {{shown}} of {{total}} mappings":"Hiển thị {{shown}} / {{total}} ánh xạ","showing •":"hiển thị •","Showing the last successfully checked release.":"Đang hiển thị thông tin bản phát hành từ lần kiểm tra thành công gần nhất.","Shown":"Hiển thị","Shown {{count}} models in model square":"Đã hiển thị {{count}} mô hình trong kho mô hình","Sidebar":"Thanh bên","Sidebar collapsed by default for new users":"Thanh bên được thu gọn theo mặc định đối với người dùng mới","Sidebar modules":"Mô-đun thanh bên","Sidebar Personal Settings":"Cài đặt cá nhân thanh bên","Sign in":"Đăng nhập","Sign In":"Đăng nhập","Sign in now":"Đăng nhập ngay","Sign in required":"Cần đăng nhập","Sign in with Passkey":"Đăng nhập bằng Passkey","Sign out":"Đăng xuất","Sign out other sessions":"Đăng xuất các phiên khác","Sign out other sessions?":"Đăng xuất các phiên khác?","Sign out others":"Đăng xuất các phiên khác","Sign out this device?":"Đăng xuất thiết bị này?","Sign up":"Đăng ký","Signed in":"Đã đăng nhập","Signed in successfully!":"Đã đăng nhập thành công!","Signed in via WeChat":"Đã đăng nhập qua WeChat","Signed in with Passkey":"Đã đăng nhập bằng Passkey","Signed out":"Đã đăng xuất","Significant outages detected":"Phát hiện gián đoạn nghiêm trọng","Signing you in with {{provider}}":"Đang đăng nhập bằng {{provider}}","SiliconFlow":"SiliconFlow","Simple":"Đơn giản","Simple mode only returns message; status code and error type use system defaults.":"Chế độ đơn giản chỉ trả về message; mã trạng thái và loại lỗi sử dụng giá trị mặc định.","Simple mode: prune objects by type, e.g. redacted_thinking.":"Chế độ đơn giản: dọn dẹp đối tượng theo type, ví dụ redacted_thinking.","Simulate a request including request rules and excluding group multipliers. Empty objects represent an empty request.":"Mô phỏng chi phí có áp dụng quy tắc yêu cầu, không áp dụng hệ số nhóm. Đối tượng rỗng biểu thị yêu cầu không có trường tương ứng.","Simulated request body":"Nội dung yêu cầu mô phỏng","Simulated request cost":"Chi phí yêu cầu mô phỏng","Simulated request headers":"Tiêu đề yêu cầu mô phỏng","Sort by priority to drag channels":"Sắp xếp theo độ ưu tiên để kéo kênh","Sort channels by":"Sắp xếp kênh theo","State parameter is empty or mismatched":"Tham số state trống hoặc không khớp","Simulation context is missing.":"Thiếu ngữ cảnh cần thiết để mô phỏng.","Simulation time":"Thời gian mô phỏng","Since previous sample":"Kể từ mẫu trước","Single .js file, up to 8 MiB. Its source is shown below before upload.":"Một tệp .js duy nhất, tối đa 8 MiB. Mã nguồn được hiển thị bên dưới trước khi tải lên.","Single Key":"Khóa đơn","Site & Branding":"Trang web & thương hiệu","Site currency ({{currency}})":"Tiền tệ trang web ({{currency}})","Site Key":"Khóa trang web","Site URL":"URL trang web","Size:":"Kích thước:","sk_xxx or rk_xxx":"sk_xxx hoặc rk_xxx","Skip async task polling delay":"Bỏ qua độ trễ thăm dò tác vụ bất đồng bộ","Skip pre-consumption when the wallet balance and limited API key balance both exceed this amount. Set to 0 to always pre-consume. Subscriptions and asynchronous tasks always reserve quota.":"Bỏ qua khấu trừ trước khi số dư ví và số dư hạn mức khóa API đều vượt mức này. Đặt 0 để luôn khấu trừ trước. Gói đăng ký và tác vụ bất đồng bộ luôn giữ trước hạn mức.","Skip retry on failure":"Không thử lại khi thất bại","Skip SMTP TLS certificate verification":"Bỏ qua xác minh chứng chỉ TLS SMTP","Skip to Main":"Bỏ qua đến nội dung chính","Skip Upstream TLS Verification":"Bỏ qua xác minh chứng chỉ TLS của upstream","Slug":"Slug","Slug can only contain letters, numbers, hyphens, and underscores":"Slug chỉ có thể chứa chữ cái, số, dấu gạch ngang và dấu gạch dưới","Slug is required":"Slug là bắt buộc","Slug must be less than 100 characters":"Slug phải ít hơn 100 ký tự","Smallest USD amount users can recharge (Epay)":"Số tiền USD tối thiểu người dùng có thể nạp (Epay)","SMTP encryption":"Mã hóa SMTP","SMTP Host":"Máy chủ SMTP","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"Lỗi mềm","Some channels failed: {{errorMsg}}":"Một số kênh thất bại: {{errorMsg}}","Some matching models are hidden or have no available channel.":"Một số mô hình khớp đã bị ẩn hoặc không có kênh khả dụng.","Some plugin information could not be read":"Không đọc được một số thông tin plugin","Something went wrong!":"Có gì đó không ổn!","Sonnet Model":"Mô hình Sonnet","Sora":"Sora","Sort":"Sắp xếp","Sort by ID":"Sắp xếp theo ID","Sort Order":"Thứ tự sắp xếp","Sort priority":"Ưu tiên sắp xếp","Source":"Nguồn","Source diff":"So sánh mã nguồn","Source Endpoint":"Điểm nguồn","Source Field":"Trường nguồn","Source Header":"Header nguồn","Source ID":"ID nguồn","Source name":"Tên nguồn","Source vendors":"Nhà cung cấp nguồn","Source vendors will be deleted after their model assignments are moved. The target vendor’s details are preserved.":"Nhà cung cấp nguồn sẽ bị xóa sau khi chuyển mô hình. Thông tin nhà cung cấp đích được giữ nguyên.","Source: global settings. Changes take effect after saving.":"Nguồn: cài đặt chung. Thay đổi có hiệu lực sau khi lưu.","sources":"nguồn","Space-separated OAuth scopes":"Phạm vi OAuth phân cách bằng dấu cách","Spark model version, e.g., v2.1 (version number in API URL)":"Phiên bản mô hình Spark, ví dụ: v2.1 (số phiên bản trong URL API)","Spec":"Thông số","Special billing expression":"Biểu thức tính phí đặc biệt","Stripe is not configured or key is invalid":"Stripe chưa được cấu hình hoặc khóa không hợp lệ","Special group":"Nhóm đặc biệt","Stripe webhook is not configured":"Chưa cấu hình webhook Stripe","Special ratio rules":"Quy tắc tỷ lệ đặc biệt","StripePriceId is not configured for this plan":"Gói này chưa cấu hình StripePriceId","Special ratios override the token group ratio for specific user group and token group combinations.":"Tỷ lệ đặc biệt ghi đè tỷ lệ nhóm token cho các tổ hợp nhóm người dùng và nhóm token cụ thể.","Special usable group rules":"Quy tắc nhóm sử dụng đặc biệt","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"Quy tắc nhóm khả dụng đặc biệt có thể thêm, xóa hoặc nối nhóm token có thể chọn cho một nhóm người dùng cụ thể.","Special usable group rules make extra token groups visible to, or hide default ones from, users of a specific user group.":"Quy tắc nhóm khả dụng đặc biệt hiển thị thêm nhóm token cho người dùng của một nhóm cụ thể, hoặc ẩn các nhóm mặc định khỏi họ.","Special visibility rules":"Quy tắc hiển thị đặc biệt","Specified time":"Thời gian chỉ định","Speculative decoding acceptance rate":"Tỷ lệ chấp nhận giải mã suy đoán","Spend limited":"Đã giới hạn chi tiêu","Spread HTTP/2 traffic across multiple reusable connections to the same upstream origin (1-8).":"Phân tán lưu lượng HTTP/2 trên nhiều kết nối tái sử dụng tới cùng một nguồn upstream (1-8).","SQLite stores all data in a single file. Make sure that file is persisted when running in containers.":"SQLite lưu trữ tất cả dữ liệu trong một tệp duy nhất. Đảm bảo tệp được lưu trữ lâu dài khi chạy trong container.","SSL/TLS":"SSL/TLS","SSRF Protection":"Bảo vệ SSRF","stale":"mất kết nối","Standard":"Tiêu chuẩn","Standard price":"Giá tiêu chuẩn","Standard protocol interfaces":"Giao diện giao thức chuẩn","Start":"Bắt đầu","Start ≤ end: within the day; start > end: across midnight":"Bắt đầu ≤ kết thúc: trong ngày; bắt đầu > kết thúc: qua nửa đêm","Subscription plan is not enabled":"Gói đăng ký chưa được bật","Subscription plan title cannot be empty":"Tiêu đề gói đăng ký không được để trống","Start a conversation to see messages here":"Bắt đầu một cuộc trò chuyện để xem tin nhắn tại đây","Start a playground chat":"Bắt đầu cuộc trò chuyện trong playground","Start again":"Bắt đầu lại","Subscription purchased with balance, plan: {{plan}}, payment amount: {{amount}}, quota deducted: {{quota}}":"Đã mua gói đăng ký bằng số dư, gói: {{plan}}, số tiền thanh toán: {{amount}}, hạn mức đã trừ: {{quota}}","Subscription purchased, plan: {{plan}}, payment amount: {{amount}}, payment method: {{method}}":"Đã mua gói đăng ký, gói: {{plan}}, số tiền thanh toán: {{amount}}, phương thức thanh toán: {{method}}","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"Bắt đầu thu thanh toán toàn cầu mà không cần đăng ký công ty. Dành cho lập trình viên độc lập, chủ sở hữu OPC và startup. Waffo Pancake đóng vai trò Merchant of Record, chịu trách nhiệm tuân thủ cho việc thu thanh toán toàn cầu — thuế tiêu dùng, hóa đơn, quản lý đăng ký, hoàn tiền và tranh chấp thanh toán. Lập trình viên cá nhân có thể ra mắt nhanh và tập trung vào sản phẩm thay vì tuân thủ. Onboard trong vài phút — từ một prompt đến tích hợp hoàn chỉnh.","Start for free with generous limits. No credit card required.":"Bắt đầu miễn phí với giới hạn hào phóng. Không cần thẻ tín dụng.","Start SGLang with --enable-metrics to expose Prometheus metrics.":"Khởi chạy SGLang với --enable-metrics để bật số liệu Prometheus.","Start Time":"Thời gian bắt đầu","Start weekday":"Ngày bắt đầu","Started":"Đã khởi động","Started two-factor authentication setup":"Đã bắt đầu thiết lập xác thực hai yếu tố","STARTTLS":"STARTTLS","State changed":"Trạng thái đã thay đổi","State unchanged: {{status}}":"Trạng thái không đổi: {{status}}","Static page describing the platform.":"Trang tĩnh mô tả nền tảng.","Statistical count":"Số đếm thống kê","Statistical quota":"Chỉ tiêu thống kê","Statistical tokens":"Mã thông báo thống kê","Statistics reset":"Đã đặt lại thống kê","Status":"Trạng thái","Status & Sync":"Trạng thái & Đồng bộ","Status change":"Thay đổi trạng thái","Status Code":"Mã trạng thái","Status Code Mapping":"Ánh xạ mã trạng thái","Status code mapping must use valid HTTP status codes":"Ánh xạ mã trạng thái phải dùng mã trạng thái HTTP hợp lệ","Status is outside the retry rules":"Mã trạng thái ngoài quy tắc thử lại","Status matches the retry rules":"Mã trạng thái khớp quy tắc thử lại","Status Page Slug":"Đường dẫn phụ trang trạng thái","Status short":"TT","Status:":"Trạng thái:","Stay":"Ở lại","Stay tuned though!":"Nhưng","Steer behaviour with a system instruction":"Điều hướng hành vi bằng lệnh hệ thống","Step":"Bước","Step {{current}} of {{total}}: {{label}}":"Bước {{current}} trên {{total}}: {{label}}","Still pending addition":"Vẫn chờ thêm","Still pending removal":"Vẫn chờ xóa","Stop":"Dừng lại","Stop Retry":"Dừng thử lại","Stop testing":"Dừng kiểm thử","Stopping batch test...":"Đang dừng kiểm thử hàng loạt...","Stopping...":"Đang dừng...","Storage":"Lưu trữ","Store":"Store","Store + product created":"Đã tạo cửa hàng + sản phẩm","Store ID":"Mã cửa hàng","Store ID is required":"Bắt buộc nhập Store ID","Stored configuration with effective defaults":"Cấu hình đã lưu và giá trị mặc định có hiệu lực","Stored value is not echoed back for security":"Vì bảo mật, giá trị đã lưu không được hiển thị lại","stream":"dòng","Stream":"Luồng","Stream did not complete successfully":"Luồng không hoàn tất thành công","Stream Mode":"Chế độ streaming","Stream Status":"Trạng thái luồng","Stream tokens incrementally as they are generated":"Truyền dần token khi được tạo","Stream tokens via Server-Sent Events":"Truyền token qua Server-Sent Events","Streaming":"Truyền liên tục","String Replace":"Thay thế chuỗi","Strip {{affix}}":"Bỏ {{affix}}","Strip prefix":"Bỏ tiền tố","Strip suffix":"Bỏ hậu tố","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Khóa API Stripe (để trống trừ khi cập nhật)","Stripe Dashboard":"Bảng điều khiển Stripe","Stripe Gateway":"Cổng thanh toán Stripe","Stripe product price ID":"ID giá sản phẩm Stripe","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem yêu cầu tạo sản phẩm trên nền tảng bên thứ ba và nhập ID","Structured output":"Đầu ra có cấu trúc","Submit":"Gửi","Submit directly":"Gửi trực tiếp","Submit request":"Gửi yêu cầu","Submit Result":"Gửi Kết quả","Submit Time":"Thời gian gửi","Submitted":"Đã gửi","Submitting":"Đang gửi","Submitting...":"Đang gửi...","Submodel":"Submodel","Subscribe Now":"Đăng ký ngay","Subscribe to a plan for model access":"Đăng ký gói để truy cập mô hình","Subscription":"Đăng ký","Subscription Billing":"Thanh toán gói đăng ký","Subscription First":"Ưu tiên đăng ký","Subscription Management":"Quản lý đăng ký","Subscription Only":"Chỉ đăng ký","System error: {{error}}":"Lỗi hệ thống: {{error}}","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"Việc tạo và thay đổi gói đăng ký bị khóa cho đến khi quản trị viên xác nhận điều khoản tuân thủ trong cài đặt Cổng thanh toán.","Subscription Plans":"Gói đăng ký","System initialized successfully":"Khởi tạo hệ thống thành công","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"Gói đăng ký KHÔNG dùng Sản phẩm đã liên kết — mỗi gói có một sản phẩm Pancake riêng, được đặt trong quản trị Đăng ký (hoặc tự động tạo bằng nút \\"+ Create\\" tại đó).","Subscription purchased successfully":"Đã mua gói đăng ký thành công","Subscriptions":"Đăng ký","Subtract":"Trừ","succeeded":"thành công","Success":"Thành công","Success rate":"Tỷ lệ thành công","Success rate excludes business rejections and includes the current partial hour.":"Tỷ lệ thành công loại trừ các yêu cầu bị từ chối do quy tắc nghiệp vụ và bao gồm giờ hiện tại chưa kết thúc.","Successful scheduled or bulk checks can restore automatically disabled channels. Manually disabled channels stay disabled.":"Kiểm tra định kỳ hoặc hàng loạt thành công có thể khôi phục kênh bị tự động vô hiệu hóa. Kênh tắt thủ công vẫn bị tắt.","Successfully created {{count}} API Key(s)":"Đã tạo thành công {{count}} khóa API","Successfully created {{count}} redemption codes":"Đã tạo thành công {{count}} mã đổi thưởng","Successfully deleted {{count}} API key(s)":"Đã xóa thành công {{count}} khóa API","Successfully deleted {{count}} invalid redemption codes":"Đã xóa thành công {{count}} mã đổi thưởng không hợp lệ","Successfully deleted {{count}} model(s)":"Đã xóa thành công {{count}} mô hình","Successfully deleted {{count}} redemption codes":"Đã xóa {{count}} mã quy đổi","Successfully disabled {{count}} model(s)":"Đã tắt thành công {{count}} mô hình","Successfully enabled {{count}} model(s)":"Đã bật thành công {{count}} mô hình","Suffix":"Hậu tố","Suffix Match":"Khớp hậu tố","Suggested rules":"Quy tắc đề xuất","Summarize text":"Tóm tắt văn bản","SunoAPI":"SunoAPI","Sunset Glow":"Hoàng hôn","Super admin":"Siêu quản trị viên","Super Admin":"Siêu Quản trị viên","Tag cannot be empty":"Thẻ không được để trống","Super Large":"Rất lớn","Support for high concurrency with automatic load balancing":"Hỗ trợ đồng thời cao với cân bằng tải tự động","Supported Applications":"Ứng dụng được hỗ trợ","Supported endpoints":"Điểm cuối được hỗ trợ","Supported Imagine Models":"Mô hình Imagine được hỗ trợ","Supported interfaces":"Giao diện được hỗ trợ","Supported modalities":"Phương thức hỗ trợ","Supported models":"Mô hình được hỗ trợ","Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.":"Toán tử được hỗ trợ: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Để trống để cho phép tất cả người dùng.","Supported parameters":"Tham số hỗ trợ","Supported variables":"Biến được hỗ trợ","Supports `-thinking`, `-thinking-":"Hỗ trợ `-thinking`, `-thinking-","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"Hỗ trợ đánh dấu HTML hoặc nhúng iframe. Nhập mã HTML trực tiếp, hoặc cung cấp một URL đầy đủ để tự động nhúng nó dưới dạng một iframe.","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"Hỗ trợ cấu hình bằng một cú nhấp chuột và thích ứng hoàn hảo với cấu hình đa giao thức NewAPI.","Supports plugin extensions":"Hỗ trợ mở rộng bằng plugin","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"Hỗ trợ PNG, JPG, SVG hoặc WebP. Kích thước khuyến nghị: 128×128 hoặc nhỏ hơn.","Surprise me":"Gợi ý bất ngờ","Sustained tokens per second":"Token mỗi giây duy trì","Swap Face":"Đổi mặt","Switch affinity on success":"Chuyển ưu tiên khi thành công","Switch to JSON":"Chuyển sang JSON","Switch to Visual":"Chuyển sang Trực quan","Switch to visual editor":"Chuyển sang trình sửa trực quan","Switch to visual mode to add rules or apply templates.":"Chuyển sang chế độ trực quan để thêm quy tắc hoặc áp dụng mẫu.","Switch to visual pricing?":"Chuyển sang định giá trực quan?","Switching regenerates the expression from the price table and replaces its original formatting and tier names. Changes apply only after saving.":"Khi chuyển, biểu thức sẽ được tạo lại từ bảng giá, thay thế định dạng và tên bậc ban đầu. Thay đổi chỉ có hiệu lực sau khi lưu.","Sync":"Đồng bộ","Sync Endpoint":"Điểm cuối đồng bộ","Sync Endpoints":"Điểm đồng bộ","Sync Fields":"Đồng bộ trường","Sync from the public upstream metadata repository.":"Đồng bộ từ kho lưu trữ siêu dữ liệu upstream công khai.","Sync metadata":"Đồng bộ siêu dữ liệu","Sync missing metadata":"Đồng bộ siêu dữ liệu còn thiếu","Sync model metadata":"Đồng bộ siêu dữ liệu mô hình","Sync model pricing":"Đồng bộ giá mô hình","Sync models":"Đồng bộ mô hình","Sync Now":"Đồng bộ ngay","Task timed out":"Tác vụ hết thời gian","Task timed out (a task left by the old system is not refunded; contact the administrator)":"Tác vụ hết thời gian (tác vụ còn sót từ hệ thống cũ không được hoàn tiền; hãy liên hệ quản trị viên)","Sync policy":"Chính sách đồng bộ","Sync pricing":"Đồng bộ giá","Sync results":"Kết quả đồng bộ","Sync scope":"Phạm vi đồng bộ","Sync steps":"Các bước đồng bộ","Sync this model with official upstream":"Synchronize this model with the official source.","Sync Upstream":"Đồng bộ nguồn","Sync Upstream Models":"Đồng bộ các mô hình nguồn","Synced upstream models":"Đã đồng bộ mô hình thượng nguồn","Synchronize models and vendors from an upstream source":"Đồng bộ hóa các mô hình và nhà cung cấp từ một nguồn thượng nguồn","Synchronous":"Đồng bộ","Telegram ID is empty!":"ID Telegram trống!","Syncing prices, please wait...":"Đang đồng bộ giá, vui lòng đợi...","Syncing...":"Đang đồng bộ...","System":"Hệ thống","System Administration":"Quản trị hệ thống","System Announcements":"Thông báo hệ thống","System Behavior":"Hành vi hệ thống","System constraint":"Ràng buộc hệ thống","System data statistics":"Thống kê dữ liệu hệ thống","System default":"Mặc định hệ thống","System Info":"Thông tin hệ thống","System Information":"Thông tin hệ thống","System initialized successfully! Redirecting…":"Hệ thống đã được khởi tạo thành công! Đang chuyển hướng…","System logo":"Logo hệ thống","System maintenance":"Bảo trì hệ thống","System Memory":"Bộ nhớ hệ thống","System Memory Stats":"Thống kê bộ nhớ hệ thống","System Name":"Tên hệ thống","System name is required":"Tên hệ thống là bắt buộc","System Notice":"Thông báo hệ thống","System Performance Monitoring":"Giám sát hiệu suất hệ thống","System prompt":"Lời nhắc hệ thống","System Prompt":"Lời nhắc hệ thống","System Prompt Concatenation":"Ghép nối Lời nhắc Hệ thống","System Prompt Override":"Ghi đè prompt hệ thống","System retry exclusion":"Trường hợp hệ thống không cho thử lại","System settings":"Cài đặt hệ thống","System Settings":"Cài đặt hệ thống","System setup wizard":"Trình hướng dẫn thiết lập hệ thống","System task records":"Lịch sử tác vụ hệ thống","System Tasks":"Tác vụ hệ thống","System updates":"Cập nhật hệ thống","System updates, current version: {{version}}":"Cập nhật hệ thống, phiên bản hiện tại: {{version}}","System Version":"Phiên bản hệ thống","Table view":"Xem dạng bảng","Tag":"Tag","Tag Aggregate":"Tổng hợp thẻ","Tag Mode":"Chế độ thẻ","Tag Name":"Tên thẻ","Tag set successfully":"Thiết lập bộ thẻ thành công","Tag updated successfully":"Đã cập nhật thẻ thành công","The access token lacks the required permission: {{scope}}":"Token truy cập thiếu quyền cần thiết: {{scope}}","Tag:":"Thẻ:","Tags":"Thẻ","Take photo":"Chụp ảnh","Take screenshot":"Chụp màn hình","Target":"Đối tượng thao tác","Target Endpoint":"Điểm đích","Target Field":"Trường đích","Target Field Path":"Đường dẫn trường đích","Target group":"Target audience","Target Header":"Header đích","Target not recorded":"Chưa ghi nhận đối tượng","Target Path (optional)":"Đường dẫn đích (tùy chọn)","Target User":"Người dùng mục tiêu","Target user not found":"Không tìm thấy người dùng đích","Target username":"Tên người dùng đích","Target vendor":"Nhà cung cấp đích","The Classic frontend has been removed. The theme can only be set to default":"Giao diện Classic đã bị gỡ bỏ. Chủ đề chỉ có thể đặt là default","Task":"Nhiệm vụ","Task billing":"Tính phí tác vụ","The current sign-in method does not support security verification":"Phương thức đăng nhập hiện tại không hỗ trợ xác minh bảo mật","Task Details":"Chi tiết tác vụ","Task failed":"Tác vụ thất bại","Task History":"Lịch sử tác vụ","Task ID":"Mã nhiệm vụ","Task ID:":"ID nhiệm vụ:","Task logs":"Nhật ký tác vụ","Task Logs":"Nhật ký tác vụ","Task Plugin":"Plugin tác vụ","Task plugin *":"Plugin tác vụ *","Task plugin setting updated":"Đã cập nhật cài đặt plugin tác vụ","Task plugins":"Plugin tác vụ","Task Plugins":"Plugin tác vụ","The longest log time range must be at least 1 day":"Khoảng thời gian nhật ký tối đa phải ít nhất 1 ngày","The longest time range a user can view at once in the logs and on the dashboard, and the longest range any export can cover.":"Khoảng thời gian dài nhất người dùng có thể xem trong một lần ở nhật ký và bảng điều khiển, cũng là giới hạn cho mọi lượt xuất.","Task pricing":"Giá tác vụ","Task pricing must be converted manually using the task usage schema.":"Cần chuyển đổi giá tác vụ thủ công theo lược đồ mức sử dụng tác vụ.","Task pricing not configured":"Chưa cấu hình giá tác vụ","Task usage data is required to estimate this expression. Check the model\'s task plugin configuration.":"Cần dữ liệu sử dụng tác vụ để ước tính chi phí theo biểu thức này. Hãy kiểm tra cấu hình plugin tác vụ của mô hình.","Task usage metadata is unavailable. Pricing details cannot be displayed.":"Thiếu định nghĩa trường mức sử dụng tác vụ nên không thể hiển thị chi tiết giá.","Task usage prices are USD per declared unit. They are not token prices and are not divided by one million.":"Giá theo mức sử dụng được tính bằng USD cho mỗi đơn vị đã khai báo. Đây không phải giá token và không được chia cho một triệu.","Task usage prices are USD per declared unit. Token fields use dollars per 1M tokens; the editor writes / 1000000 into the expression. Other units are not divided by one million.":"Giá sử dụng tác vụ tính bằng USD trên đơn vị đã khai báo. Trường token dùng USD trên 1 triệu token; trình soạn thảo ghi / 1000000 vào biểu thức. Các đơn vị khác không chia cho một triệu.","Tasks currently pending or running.":"Các tác vụ hiện đang chờ hoặc đang chạy.","Team Collaboration":"Teamwork","The ratio config API is not enabled":"API cấu hình hệ số chưa được bật","Technical Support":"Hỗ trợ kỹ thuật","Telegram":"Telegram","Telegram authorization failed. Please try again.":"Ủy quyền Telegram thất bại. Vui lòng thử lại.","The search pattern can contain at most 2 % wildcards":"Mẫu tìm kiếm chỉ được chứa tối đa 2 ký tự đại diện %","The search pattern cannot contain consecutive % wildcards":"Mẫu tìm kiếm không được chứa các ký tự đại diện % liên tiếp","Telegram binding failed. Please try again.":"Liên kết Telegram không thành công. Vui lòng thử lại.","Telegram binding is disabled.":"Tính năng liên kết Telegram đã bị tắt.","Telegram login has changed. Reload the page and start Telegram OAuth again.":"Cách đăng nhập Telegram đã thay đổi. Hãy tải lại trang và bắt đầu lại Telegram OAuth.","Telegram Login Widget":"Tiện ích đăng nhập Telegram","Telegram OAuth Client ID from BotFather":"Client ID Telegram OAuth từ BotFather","Telegram OAuth Client Secret from BotFather":"Client Secret Telegram OAuth từ BotFather","Telegram OAuth is not configured or enabled. Please contact your administrator.":"Telegram OAuth chưa được cấu hình hoặc bật. Vui lòng liên hệ quản trị viên.","Temperature":"Nhiệt độ","Template":"Mẫu","The system is already initialized":"Hệ thống đã được khởi tạo","Template variables:":"Biến mẫu:","Templates":"Mẫu","Templates appended":"Đã thêm mẫu","The time range cannot exceed {{days}} days":"Khoảng thời gian không được vượt quá {{days}} ngày","Tencent":"Tencent","Termination requested":"Yêu cầu chấm dứt","Test":"Kiểm tra","Test {{count}} matching models":"Kiểm thử {{count}} mô hình phù hợp","Test {{count}} selected":"Kiểm tra {{count}} mục đã chọn","Test a model with a starter prompt, or write your own request below.":"Kiểm thử mô hình bằng prompt gợi ý, hoặc viết yêu cầu của riêng bạn bên dưới.","Test all {{count}} models":"Kiểm thử tất cả {{count}} mô hình","Test All Channels":"Kiểm tra tất cả các kênh","Test Channel Connection":"Kiểm tra kết nối kênh","Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.":"Kiểm thử kênh, làm mới số dư và bật/tắt từng kênh, hàng loạt hoặc theo thẻ.","Test Connection":"Kiểm tra kết nối","Test connectivity for:":"Kiểm tra kết nối cho:","Test failed":"Kiểm tra thất bại","Test interval (minutes)":"Khoảng thời gian kiểm tra (phút)","Test Latency":"Kiểm tra độ trễ","Test Mode":"Chế độ thử nghiệm","Test Model":"Kiểm tra Mô hình","Test models and prompts from the browser":"Kiểm thử mô hình và prompt trong trình duyệt","Test selected models":"Kiểm tra các mô hình đã chọn","Testing all enabled channels started. Please refresh to see results.":"Bắt đầu kiểm tra tất cả các kênh đã kích hoạt. Vui lòng làm mới để xem kết quả.","Testing...":"Đang kiểm tra...","Text":"Văn bản","Text description of the desired image":"Mô tả văn bản cho ảnh mong muốn","Text description of the desired video":"Mô tả văn bản cho video mong muốn","Text Input":"Đầu vào văn bản","Text or array of texts to embed":"Văn bản hoặc mảng văn bản cần vector hoá","Text Output":"Đầu ra văn bản","Text to Video":"Văn bản sang video","Text-only requests":"Yêu cầu chỉ có văn bản","The access token lacks the required permission":"Token truy cập thiếu quyền cần thiết","The action details are invalid.":"Thông tin thao tác không hợp lệ.","The admin configured three groups and one special ratio rule:":"Quản trị viên đã cấu hình ba nhóm và một quy tắc hệ số đặc biệt:","The admin wants vip users to pay even less when they use premium. That needs an override rule: in the override matrix, set the cell at row vip, column premium to 0.3.":"Quản trị viên muốn người dùng vip trả ít hơn nữa khi dùng premium. Điều đó cần một quy tắc ghi đè: trong ma trận ghi đè, đặt ô tại hàng vip, cột premium thành 0.3.","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"Tài khoản quản trị viên đã được khởi tạo. Bạn có thể giữ nguyên thông tin đăng nhập hiện có của mình và tiếp tục sang bước tiếp theo.","The administrator configured an external link for this document.":"Người quản trị đã cấu hình một liên kết ngoài cho tài liệu này.","The administrator has not configured a privacy policy yet.":"Quản trị viên chưa cấu hình chính sách bảo mật.","The administrator has not configured a user agreement yet.":"Quản trị viên chưa cấu hình thỏa thuận người dùng.","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"Quản trị viên chưa cấu hình bất kỳ nội dung giới thiệu nào. Bạn có thể thiết lập nó trong trang cài đặt, hỗ trợ HTML hoặc URL.","The API key used for the requests":"Khóa API được dùng cho các yêu cầu","The authenticator code is incorrect.":"Mã xác thực không chính xác.","The binding will complete automatically after authorization":"Việc liên kết sẽ hoàn tất tự động sau khi ủy quyền","This API is deprecated":"API này đã ngừng sử dụng","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"Sản phẩm đã liên kết dùng cho nạp ví: khi người dùng nhập bất kỳ số tiền nào, new-api chạy thanh toán trên một sản phẩm Pancake duy nhất này và ghi đè giá theo từng phiên — không cần tạo trước SKU $1 / $5 / $10.","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"Cửa hàng đã liên kết là vùng chứa cha cho mọi sản phẩm Pancake mà new-api tạo từ trang quản trị này — bao gồm sản phẩm nạp ví và mọi sản phẩm gói đăng ký. Một cửa hàng là đủ; chỉ ghim cửa hàng khác nếu bạn thực sự vận hành các catalog Pancake riêng.","The button fills in this website and keeps any existing website addresses. Save changes on the settings page to apply.":"Nút này điền trang hiện tại và giữ các địa chỉ đã có. Lưu thay đổi trên trang cài đặt để áp dụng.","The change succeeded, but the notification email could not be sent.":"Thay đổi đã hoàn tất nhưng không thể gửi email thông báo.","The changelog could not be fetched or parsed. Please try again.":"Không thể tải hoặc phân tích nhật ký thay đổi. Vui lòng thử lại.","The converted price must be a finite, non-negative number.":"Giá sau quy đổi phải là số hữu hạn không âm.","The current setting could not be loaded. You can still enter the website domain yourself.":"Không tải được cài đặt hiện tại. Bạn vẫn có thể tự nhập tên miền trang.","The deployment node that handled the requests":"Nút triển khai đã xử lý các yêu cầu","This channel is not in multi-key mode":"Kênh này không ở chế độ đa khóa","The downloaded source does not match the sha256 declared in the index. Do not install it.":"Mã nguồn đã tải không khớp với sha256 khai báo trong chỉ mục. Đừng cài đặt nó.","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"Mi","The entered text does not match the required text.":"Văn bản đã nhập không khớp với văn bản yêu cầu.","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"Môi trường (test hay production) được quyết định bởi khóa bạn dán tại đây — dùng khóa Test khi tích hợp, sau đó đổi sang khóa Production khi chạy chính thức.","The exact model identifier as used in API requests.":"Mã định danh mô hình chính xác như được sử dụng trong các yêu cầu API.","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"Các mô hình sau có xung đột loại thanh toán (giá cố định so với thanh toán theo tỷ lệ). Xác nhận để tiếp tục với các thay đổi.","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"Các mô hình sau trong chuyển hướng mô hình chưa được thêm vào danh sách \\"Mô hình\\" và có thể gọi thất bại do thiếu các mô hình có sẵn:","The gateway rejected this plugin":"Cổng đã từ chối plugin này","The index could not be fetched or parsed: {{message}}. The host may block cross-origin requests.":"Không thể tải hoặc phân tích chỉ mục: {{message}}. Máy chủ có thể chặn yêu cầu cross-origin.","The legacy token stops working on {{date}}. Create a new token to replace it.":"Token cũ sẽ ngừng hoạt động vào {{date}}. Hãy tạo token mới để thay thế.","The login session that started this Telegram binding is no longer valid.":"Phiên đăng nhập đã bắt đầu liên kết Telegram này không còn hợp lệ.","The mapped upstream model(s)":"Mô hình(s) thượng nguồn được ánh xạ","The model routing configuration could not be verified.":"Không thể xác minh cấu hình định tuyến mô hình.","The model that was requested":"Mô hình đã được yêu cầu","The model you\'re looking for doesn\'t exist.":"Mô hình bạn đang tìm kiếm không tồn tại.","The model-level expression cannot be evaluated by: {{plugins}}":"Các nhà cung cấp sau không thể tính biểu thức của mô hình: {{plugins}}","The name displayed across the application":"Tên hiển thị trên ứng dụng","The new token will only be shown once. Copy it and store it securely.":"Token mới chỉ được hiển thị một lần. Hãy sao chép và lưu trữ an toàn.","The OAuth account does not match the account linked to your profile.":"Tài khoản OAuth không khớp với tài khoản đã liên kết với hồ sơ của bạn.","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"URL công khai của máy chủ, dùng cho callback OAuth, webhook và các tích hợp bên ngoài khác","The requested chat preset does not exist or has been removed.":"Cài đặt sẵn cuộc trò chuyện được yêu cầu không tồn tại hoặc đã bị xóa.","The reset request stays disabled until a credit is available.":"Yêu cầu đặt lại sẽ bị tắt cho đến khi có lượt khả dụng.","The result was returned in the API response and was not saved as an artifact":"Kết quả đã được trả về trong phản hồi API và không được lưu làm sản phẩm","The server returned the following result. Unselected models remain pending.":"Dưới đây là kết quả do máy chủ trả về. Mô hình không được chọn vẫn chờ xử lý.","The setup wizard will use this database during initialization.":"Trình hướng dẫn thiết lập sẽ sử dụng cơ sở dữ liệu này trong quá trình khởi tạo.","The site exchange rate is invalid. Prices are shown in USD.":"Tỷ giá trang web không hợp lệ. Giá được hiển thị bằng USD.","The site is not available at the moment.":"Trang web hiện không khả dụng.","The slug is appended to the URL:":"Slug được gắn vào URL:","The source is unavailable or this browser cannot calculate SHA-256. The gateway checks the published hash during installation.":"Mã nguồn chưa có hoặc trình duyệt không tính được SHA-256. Cổng sẽ kiểm tra mã băm đã công bố khi cài đặt.","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"Đồng bộ hóa sẽ tìm nạp các mẫu và nhà cung cấp còn thiếu từ nguồn đã chọn. Các bản ghi hiện có chỉ được cập nhật khi bạn chấp thuận các xung đột.","The system always bills in USD. Site currency makes entering and converting prices easier; amounts are converted to USD using the site exchange rate. Switching currencies does not change the actual price. Raw billing expressions always use USD.":"Hệ thống luôn tính phí bằng USD. Tiền tệ trang web giúp nhập và quy đổi giá thuận tiện hơn; số tiền được quy đổi sang USD theo tỷ giá của trang web. Đổi tiền tệ không làm thay đổi giá thực tế. Biểu thức tính phí gốc luôn dùng USD.","The system currently uses: {{domain}}":"Hệ thống hiện đang dùng: {{domain}}","The task was accepted; submission cannot be replayed":"Tác vụ đã nhận; không thể gửi lại","The Telegram authorization request is invalid or expired.":"Yêu cầu ủy quyền Telegram không hợp lệ hoặc đã hết hạn.","The telegram OAuth provider name is reserved. Ask your administrator to rename the conflicting custom provider.":"Tên nhà cung cấp OAuth telegram đã được dành riêng. Hãy nhờ quản trị viên đổi tên nhà cung cấp tùy chỉnh bị trùng.","The token group that will have a custom ratio":"The token group will have a custom ratio.","The token has no group, so it is billed as the user group vip, using the base ratio of vip.":"Token không có nhóm, nên được tính phí theo nhóm người dùng vip, dùng hệ số cơ bản của vip.","The two roles of a group":"Hai vai trò của một nhóm","The two-factor setup has expired or changed. Start setup again.":"Thiết lập xác thực hai yếu tố đã hết hạn hoặc thay đổi. Vui lòng thiết lập lại.","The unique identifier for this model":"Mã định danh duy nhất cho mô hình này","This OAuth provider still has linked users and cannot be deleted. Unbind all users first.":"Nhà cung cấp OAuth này vẫn còn người dùng liên kết nên không thể xóa. Hãy hủy liên kết tất cả người dùng trước.","The unique name for this vendor":"Tên duy nhất cho nhà cung cấp này","The upstream address this plugin sends requests to. The plugin declares no default, so it must be filled in.":"Địa chỉ upstream mà plugin gửi yêu cầu tới. Plugin không khai báo giá trị mặc định nên bắt buộc phải điền.","The upstream channel that served the requests":"Kênh thượng nguồn đã phục vụ các yêu cầu","The upstream key has unlimited quota. Turn on \\"Allow querying user quota\\" for this key on the upstream to see the real balance.":"Khóa thượng nguồn có hạn mức không giới hạn. Hãy bật “Cho phép tra cứu hạn mức người dùng” cho khóa này ở thượng nguồn để xem số dư thực tế.","The upstream natively supports all three protocols; every selected route is forwarded without conversion.":"Thượng nguồn hỗ trợ nguyên bản cả ba giao thức; mọi route đã chọn được chuyển tiếp mà không chuyển đổi.","The upstream response is valid JSON, but it does not match the OpenAI credit_summary format. The channel balance was not updated.":"Phản hồi thượng nguồn là JSON hợp lệ nhưng không khớp định dạng OpenAI credit_summary. Số dư kênh chưa được cập nhật.","The upstream returned a model name different from both the requested and upstream models. Aliases or dated versions may also cause this; this warning alone does not prove model substitution.":"Tên mô hình trả về khác cả mô hình được yêu cầu lẫn mô hình gửi đến nhà cung cấp. Bí danh hoặc phiên bản theo ngày cũng có thể gây ra khác biệt này; chỉ cảnh báo này chưa đủ để kết luận mô hình đã bị thay thế.","The URL for this chat client.":"URL của ứng dụng chat này.","The URL returned HTTP {{status}}. Check the address, or download the file and paste its source below.":"URL trả về HTTP {{status}}. Hãy kiểm tra địa chỉ, hoặc tải tệp về và dán mã nguồn vào bên dưới.","The user group applied to the requests":"Nhóm người dùng được áp dụng cho các yêu cầu","The user who made the requests":"Người dùng đã thực hiện các yêu cầu","The vendor no longer exists. Reload the vendor list.":"Nhà cung cấp không còn tồn tại. Hãy tải lại danh sách.","Theme":"Chủ đề","Theme preset":"Tùy chỉnh chủ đề","Theme Settings":"Cài đặt chủ đề","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"Có cả mô hình cần thêm và xóa đang chờ, nhưng bạn chỉ chọn một loại. Xác nhận chỉ gửi các mục đã chọn?","This rule does not have include_rule_name enabled, so its cache cannot be cleared by rule":"Quy tắc này chưa bật include_rule_name nên không thể xóa bộ nhớ đệm theo quy tắc","There is a rule for vip billed as premium → use its ratio 0.3":"Có quy tắc «vip theo premium» → dùng hệ số 0.3 của quy tắc","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"Các model này vẫn được chọn nhưng không còn xuất hiện trong danh sách upstream; tên chỉ là khóa nguồn trong model_mapping đã được loại. Điều chỉnh trước khi lưu.","This slug conflicts with a built-in OAuth provider":"Slug này trùng với một nhà cung cấp OAuth tích hợp sẵn","This slug is already in use":"Slug này đã được sử dụng","These models were not returned by the upstream. Uncheck to remove them, or select them again before saving. Model mapping source aliases are excluded.":"Các mô hình này không được dịch vụ thượng nguồn trả về. Bỏ chọn để xóa hoặc chọn lại trước khi lưu. Bí danh nguồn trong ánh xạ mô hình không được hiển thị.","These plugins use this channel\'s connection settings.":"Các plugin này sử dụng cấu hình kết nối của kênh này.","These toggles affect whether certain request fields are passed through to the upstream provider.":"Các chuyển đổi này ảnh hưởng đến việc các trường yêu cầu nhất định có được chuyển đến nhà cung cấp dịch vụ đầu vào hay không.","These values come from the source index and are shown for review only. The gateway admits the plugin based on the metadata compiled from its source.":"Các giá trị này lấy từ chỉ mục của nguồn và chỉ để bạn xem xét. Cổng quyết định chấp nhận plugin dựa trên metadata biên dịch từ mã nguồn của nó.","Thinking Suffix Adapter":"Adapter hậu tố thinking","Thinking to Content":"Suy nghĩ thành Nội dung","Thinking...":"Đang suy nghĩ...","Third-party":"Bên thứ ba","Third-party — use at your own risk":"Bên thứ ba — tự chịu rủi ro","Third-party account bindings (read-only, managed by user in profile settings)":"Liên kết tài khoản bên thứ ba (chỉ đọc, do người dùng quản lý trong cài đặt hồ sơ)","Third-party account bindings (read-only, managed by user in Security & Access)":"Tài khoản bên thứ ba liên kết (chỉ đọc, người dùng quản lý trong « Bảo mật và truy cập »)","This user has no active subscription to this plan":"Người dùng này không có gói đăng ký còn hiệu lực cho gói này","Third-party Payment Config":"Cấu hình thanh toán bên thứ ba","This user is already a common user":"Người dùng này đã là người dùng thường","This user is already an administrator":"Người dùng này đã là quản trị viên","Third-party plugin risk":"Rủi ro plugin bên thứ ba","Third-party source risk":"Rủi ro nguồn bên thứ ba","Third-party-only plugins become unavailable immediately. In-flight tasks will be handled by timeout cleanup.":"Plugin chỉ có từ bên thứ ba sẽ ngừng hoạt động ngay. Tác vụ đang chạy sẽ được xử lý khi dọn dẹp quá hạn.","This action cannot be undone.":"Hành động này không thể hoàn tác.","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"Hành động này không thể hoàn tác. Việc này sẽ xóa vĩnh viễn tài khoản của bạn và loại bỏ tất cả dữ liệu của bạn khỏi máy chủ của chúng tôi.","This action will permanently remove 2FA protection from your account.":"Hành động này sẽ vĩnh viễn gỡ bỏ tính năng bảo vệ","This announcement will be removed from the list.":"Thông báo này sẽ bị xóa khỏi danh sách.","This API key has no quota limit. Requests still require available wallet or subscription quota.":"Khóa API này không có hạn mức. Yêu cầu vẫn cần số dư ví hoặc hạn mức gói đăng ký khả dụng.","This API shortcut will be removed from the list.":"Lối tắt API này sẽ bị xóa khỏi danh sách.","This base URL points at a private or local network host. Make sure it is an upstream you control.":"Base URL này trỏ tới máy chủ mạng nội bộ hoặc cục bộ. Hãy chắc chắn đây là upstream do bạn kiểm soát.","This base URL uses plain HTTP, so the channel key is sent unencrypted.":"Base URL này dùng HTTP không mã hóa, khóa kênh sẽ được gửi ở dạng chưa mã hóa.","This callback URL updates from the slug field and is the value to register with your provider.":"URL callback này cập nhật theo trường slug và là giá trị cần đăng ký với nhà cung cấp.","This changelog is not available in your language. Showing English.":"Nhật ký này chưa có bản dịch cho ngôn ngữ của bạn. Đang hiển thị bản tiếng Anh.","This channel has no configured models.":"Kênh này không có mô hình nào được cấu hình.","This channel is not an Ollama channel.":"Kênh này không phải là kênh Ollama.","This channel serves the models of every selected plugin. The upstream New API gateway must have the same plugins installed.":"Kênh này phục vụ các mô hình của mọi plugin đã chọn. Gateway New API thượng nguồn phải cài đặt cùng các plugin đó.","This channel type does not support fetching models":"Loại kênh này không hỗ trợ lấy mô hình","This channel type requires additional configuration":"Loại kênh này yêu cầu cấu hình bổ sung","This combination will be billed as free.":"Tổ hợp này sẽ không phát sinh phí.","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"Xác nhận này mở khóa các tính năng thanh toán, mã đổi thưởng, gói đăng ký và phần thưởng mời. Vui lòng đọc kỹ các tuyên bố.","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"Thiết lập này kiểm soát giới hạn tốc độ yêu cầu mô hình. Giới hạn tuyến Web/API được cấu hình bằng biến môi trường và vẫn có thể trả về 429.","This data may be unreliable, use with caution":"Dữ liệu này có thể không đáng tin cậy, sử dụng thận trọng","This device does not support Passkey":"Thiết bị này không hỗ trợ Passkey","This device does not support Passkey verification.":"Thiết bị này không hỗ trợ xác minh Passkey.","This domain does not match the current website. Passkeys may not work here.":"Tên miền này không khớp trang hiện tại. Passkey có thể không hoạt động ở đây.","This email address is already in use.":"Địa chỉ email này đã được sử dụng.","This {{provider}} account cannot be linked to an existing account automatically, please sign in or register another way and then link {{provider}} in account settings":"Không thể tự động liên kết tài khoản {{provider}} này với tài khoản hiện có. Vui lòng đăng nhập hoặc đăng ký bằng cách khác, sau đó liên kết {{provider}} trong cài đặt tài khoản","This {{provider}} account has already been bound":"Tài khoản {{provider}} này đã được liên kết","This email address is not allowed by the administrator\'s email policy.":"Địa chỉ email này không được chính sách email của quản trị viên cho phép.","This expression cannot be edited visually without losing information.":"Không thể chuyển biểu thức này sang chỉnh sửa trực quan mà không mất thông tin.","This expression cannot be expanded into a price table. View the original expression below.":"Không thể trình bày biểu thức này dưới dạng bảng giá. Xem biểu thức gốc bên dưới.","This expression cannot be represented by the price table. Switching discards the entire expression, including request rules, and resets all prices to zero. Configure prices before saving.":"Bảng giá không thể biểu diễn biểu thức này. Khi chuyển, toàn bộ biểu thức, kể cả quy tắc yêu cầu, sẽ bị bỏ và mọi giá sẽ được đặt lại về 0. Hãy cấu hình lại giá trước khi lưu.","This expression cannot be represented by the price table. You can switch to visual editing by confirming that the expression will be discarded.":"Bảng giá không thể biểu diễn biểu thức này. Bạn có thể chuyển sang trình sửa trực quan bằng cách xác nhận bỏ biểu thức.","This expression cannot be simulated in the browser.":"Không thể mô phỏng biểu thức này trong trình duyệt.","This expression does not price each combination exactly once, so it opens as a raw expression. Sparse or custom pricing stays in this editor.":"Biểu thức này không định giá chính xác một lần cho từng tổ hợp, vì vậy nó được mở dưới dạng biểu thức thô. Cách định giá không đầy đủ hoặc tùy chỉnh vẫn được giữ trong trình chỉnh sửa này.","This expression exceeds the browser simulation limits.":"Biểu thức này vượt quá giới hạn mô phỏng của trình duyệt.","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"Biểu thức này quá phức tạp cho trình sửa trực quan. Hãy chuyển sang chế độ biểu thức để chỉnh sửa.","This external account is already bound.":"Tài khoản bên ngoài này đã được liên kết.","This FAQ entry will be removed from the list.":"Mục FAQ này sẽ bị xóa khỏi danh sách.","This feature is experimental. Configuration format and behavior may change.":"Tính năng này đang ở giai đoạn thử nghiệm. Định dạng cấu hình và hành vi có thể thay đổi.","This feature requires signing in to the dashboard":"Tính năng này yêu cầu đăng nhập bảng điều khiển","This field does not support wildcards or regular expressions.":"Trường này không hỗ trợ ký tự đại diện hoặc biểu thức chính quy.","This historical record predates audit-info tracking and cannot be backfilled. The current instance already records server IP, callback IP, payment method, and system version for new top-ups going forward.":"Bản ghi lịch sử này được tạo trước khi tính năng thông tin kiểm toán ra đời nên thiếu dữ liệu kiểm toán. Phiên bản hiện tại đã hỗ trợ ghi lại IP máy chủ, IP gọi lại, phương thức thanh toán và phiên bản hệ thống, nhưng các trường này chỉ được ghi cho các bản ghi mới về sau — không thể bổ sung hồi tố cho bản ghi cũ.","This identifier is sent to the payment backend when creating an order. Use alipay for Alipay, wxpay for WeChat Pay, stripe for Stripe. Custom values must be supported by your payment provider.":"Mã định danh này được gửi tới backend thanh toán khi tạo đơn hàng. Dùng alipay cho Alipay, wxpay cho WeChat Pay, stripe cho Stripe. Giá trị tùy chỉnh phải được nhà cung cấp thanh toán hỗ trợ.","This instance is using an automatic hostname. Set NODE_NAME to a stable unique value for multi-instance management.":"Phiên bản này đang dùng hostname tự động. Hãy đặt NODE_NAME thành một giá trị ổn định và duy nhất để quản lý nhiều phiên bản.","This is a task model billed by usage (e.g. seconds, resolution). Prices entered here act as a per-call base rate, not per-token prices.":"Đây là mô hình tác vụ được tính phí theo mức sử dụng (ví dụ: số giây, độ phân giải). Giá nhập tại đây đóng vai trò là mức giá cơ sở cho mỗi lượt gọi, không phải giá theo token.","This list does not include the current website. Add {{origin}} if users sign in here.":"Danh sách chưa có trang hiện tại. Thêm {{origin}} nếu người dùng đăng nhập tại đây.","This may cause cache failures.":"Điều này có thể gây ra lỗi bộ nhớ đệm.","This may take a few moments while we validate the request and update your session.":"Việc này có thể mất vài phút trong khi chúng tôi xác thực yêu cầu và cập nhật phiên của bạn.","This model already uses an expression.":"Mô hình này đã sử dụng biểu thức.","This model has both fixed price and ratio billing conflicts":"Mô hình này có cả mâu thuẫn về thanh toán theo giá cố định và theo tỷ lệ.","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"Mô hình này có cả giá cố định và cài đặt tỷ lệ. Lưu chế độ hiện tại sẽ ghi lại các trường xung đột.","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"Mô hình này có cả giá cố định và cài đặt giá theo token. Lưu chế độ hiện tại sẽ ghi lại các trường xung đột.","This model has provider-specific billing and must be converted manually.":"Mô hình này có cách tính phí riêng của nhà cung cấp và cần được chuyển đổi thủ công.","This model is billed by usage, but the administrator has not configured its pricing yet.":"Mô hình này được tính phí theo mức sử dụng, nhưng quản trị viên chưa cấu hình giá.","This model is not available in any group, or no group pricing information is configured.":"Mô hình này không khả dụng trong bất kỳ nhóm nào, hoặc thông tin giá nhóm chưa được cấu hình.","This month":"Tháng này","This OpenRouter Claude price derives cache-write usage from upstream cost and must be converted manually.":"Giá OpenRouter Claude này suy ra lượng ghi bộ nhớ đệm từ chi phí nhà cung cấp và cần chuyển đổi thủ công.","This operation is only supported for vLLM channels":"Thao tác này chỉ hỗ trợ kênh vLLM","This operation is only supported for vLLM or SGLang channels":"Thao tác này chỉ hỗ trợ kênh vLLM hoặc SGLang","This page has not been created yet.":"Trang này chưa được tạo.","This Passkey domain is not available on this website. Use its original website or another verification method.":"Tên miền khóa truy cập này không dùng được trên trang web hiện tại. Hãy dùng trang web ban đầu hoặc phương thức xác minh khác.","This plan does not allow balance redemption":"Gói này không cho phép thanh toán bằng số dư","This plugin has no factory fallback. Deleting or disabling it makes this platform unavailable.":"Plugin này không có bản tích hợp dự phòng. Xóa hoặc tắt plugin sẽ khiến nền tảng không khả dụng.","This plugin path does not resolve within the source repository.":"Đường dẫn plugin này không nằm trong kho của nguồn.","This preview reads static plugin declarations. The gateway validates the plugin during installation.":"Bản xem trước đọc khai báo tĩnh của plugin. Cổng sẽ kiểm tra plugin khi cài đặt.","This project must be used in compliance with the":"Dự án này phải được sử dụng tuân thủ theo","This provider is unavailable for this model.":"Nhà cung cấp này hiện không hỗ trợ mô hình này.","This removes {{count}} failed models from this channel. This action cannot be undone.":"Thao tác này sẽ xóa {{count}} mô hình thất bại khỏi kênh này. Không thể hoàn tác.","This route discovers upstream OpenAI models and cannot be split or matched by client model rules.":"Tuyến này khám phá các mô hình OpenAI thượng nguồn và không thể tách hoặc đối sánh bằng quy tắc mô hình phía máy khách.","This route is used only by channel management to discover upstream models.":"Route này chỉ được quản lý kênh dùng để lấy mô hình thượng nguồn.","This route is used only by channel management to query the upstream balance.":"Route này chỉ được quản lý kênh dùng để truy vấn số dư thượng nguồn.","This session will lose access immediately and must sign in again.":"Phiên này sẽ mất quyền truy cập ngay lập tức và phải đăng nhập lại.","This site currently has {{count}} models enabled":"Trang này hiện đã bật {{count}} mô hình","This source does not publish a sha256 for this version, so the downloaded source cannot be pinned to what the source intended.":"Nguồn này không công bố sha256 cho phiên bản đó, nên không thể xác nhận mã nguồn đã tải đúng với nội dung nguồn phát hành.","This source lists no installable task plugins.":"Nguồn này không liệt kê plugin tác vụ nào có thể cài đặt.","This Telegram account is already bound.":"Tài khoản Telegram này đã được liên kết.","This Telegram account is not linked. Sign in using another method and link it first.":"Tài khoản Telegram này chưa được liên kết. Hãy đăng nhập bằng cách khác rồi liên kết tài khoản.","This Telegram binding request has expired or has already been used.":"Yêu cầu liên kết Telegram này đã hết hạn hoặc đã được sử dụng.","This tier catches any request that did not match earlier tiers.":"Tầng này bắt mọi yêu cầu không khớp với các tầng trước.","this token group":"nhóm token này","This Uptime Kuma group will be removed from the list.":"Nhóm Uptime Kuma này sẽ bị xóa khỏi danh sách.","This user account is disabled.":"Tài khoản người dùng này đã bị vô hiệu hóa.","This user account no longer exists.":"Tài khoản người dùng này không còn tồn tại.","this user group":"nhóm người dùng này","Token count exceeds the limit. Only exact search is allowed, do not use the % wildcard":"Số lượng token vượt quá giới hạn. Chỉ cho phép tìm kiếm chính xác, không dùng ký tự đại diện %","This user has no bindings":"Người dùng này không có liên kết nào","This verification has already been used. Please verify again.":"Xác minh này đã được sử dụng. Vui lòng xác minh lại.","This verification method is currently unavailable.":"Phương thức xác minh này hiện không khả dụng.","This verification method is not allowed for this action.":"Thao tác này không cho phép sử dụng phương thức xác minh này.","Token has expired and cannot be enabled. Please modify the expiration time or set it to never expire":"Token đã hết hạn và không thể bật. Hãy sửa thời gian hết hạn hoặc đặt thành không bao giờ hết hạn","This verification method requires its dedicated verification flow.":"Phương thức này cần được thực hiện qua quy trình xác minh riêng.","This version is ignored":"Đã bỏ qua phiên bản này","Token ID or user ID is empty":"ID token hoặc ID người dùng bị trống","This version is saved but not active. Activate it to replace the current version, or activate it later from the Versions tab.":"Phiên bản này đã được lưu nhưng chưa kích hoạt. Kích hoạt để thay thế phiên bản hiện tại, hoặc kích hoạt sau trong thẻ Phiên bản.","Token IDs cannot be empty":"ID token không được để trống","This week":"Tuần này","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"Thao tác này sẽ thêm 2 quy tắc mẫu (Codex CLI và Claude CLI) vào danh sách quy tắc hiện có.","This will clear custom pricing ratios and revert to upstream defaults.":"Điều này sẽ xóa các tỷ lệ giá tùy chỉnh và trở về mặc định ban đầu.","This will delete all":"Thao tác này sẽ xóa tất cả","This will delete all used, disabled, and expired redemption codes.":"Thao tác này sẽ xóa tất cả mã đổi thưởng đã sử dụng, đã vô hiệu hóa và đã hết hạn.","This will delete all channel affinity cache entries still in memory.":"Thao tác này sẽ xóa tất cả mục bộ nhớ đệm ưu tiên kênh còn trong bộ nhớ.","Token name is too long":"Tên token quá dài","This will delete temporary cache files that have not been used for more than 10 minutes":"Thao tác này sẽ xóa các tệp bộ nhớ đệm tạm không được sử dụng hơn 10 phút","This will extend the deployment by the specified hours.":"Thao tác này sẽ kéo dài triển khai thêm số giờ được chỉ định.","This will permanently delete all manually and automatically disabled channels. This action cannot be undone.":"Thao tác này sẽ xóa vĩnh viễn tất cả các kênh bị tắt thủ công và tự động. Hành động này không thể hoàn tác.","This will permanently delete API key":"Thao tác này sẽ xóa vĩnh viễn khóa API","This will permanently delete redemption code":"Thao tác này sẽ xóa vĩnh viễn mã đổi thưởng.","This will permanently delete user":"Thao tác này sẽ xóa vĩnh viễn người dùng","This will permanently remove all log entries created before {{date}}.":"Thao tác này sẽ xóa vĩnh viễn tất cả các mục nhật ký được tạo trước {{date}}.","This will permanently remove log entries before the selected timestamp.":"Thao tác này sẽ xóa vĩnh viễn các mục nhật ký trước mốc thời gian đã chọn.","This will rebuild the channel routing index from every channel configuration, including supported models, groups, priorities, and weights. Routing may be briefly incomplete while the rebuild is running. Continue?":"Thao tác này sẽ xây dựng lại chỉ mục định tuyến kênh từ toàn bộ cấu hình kênh, bao gồm mô hình được hỗ trợ, nhóm, độ ưu tiên và trọng số. Định tuyến có thể tạm thời chưa đầy đủ trong khi xây dựng lại. Tiếp tục?","Token quota is exhausted and cannot be enabled. Please modify the remaining quota or set it to unlimited":"Hạn ngạch token đã hết và không thể bật. Hãy sửa hạn ngạch còn lại hoặc đặt thành không giới hạn","This will remove {{removed}} forwarding routes and create {{created}} selected routes. Model list and balance routes will be preserved.":"Thao tác này sẽ xóa {{removed}} route chuyển tiếp và tạo {{created}} route đã chọn. Route danh sách mô hình và số dư sẽ được giữ lại.","This will remove {{removed}} forwarding routes and replace them with the {{template}} template ({{created}} routes). Model list and balance routes will be preserved.":"Thao tác này sẽ xóa {{removed}} tuyến chuyển tiếp và thay thế bằng mẫu {{template}} ({{created}} tuyến). Các tuyến danh sách mô hình và số dư sẽ được giữ lại.","This will update the priority to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"Thao tác này sẽ cập nhật mức ưu tiên thành {{value}} cho tất cả {{count}} kênh có thẻ \\"{{tag}}\\". Tiếp tục?","This will update the weight to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"Thao tác này sẽ cập nhật trọng số thành {{value}} cho tất cả {{count}} kênh có thẻ \\"{{tag}}\\". Tiếp tục?","This year":"Năm nay","Thought for {{duration}} seconds":"Đã suy nghĩ trong {{duration}} giây","Three calls made by the same user, whose user group is vip:":"Ba cuộc gọi của cùng một người dùng, có nhóm người dùng là vip:","Three calls made by the same vip user. Assume the base price of one call is 10.":"Ba cuộc gọi của cùng một người dùng vip. Giả sử giá cơ bản một cuộc gọi là 10.","Three groups; the override matrix has exactly one cell filled in (highlighted).":"Ba nhóm; ma trận ghi đè chỉ có đúng một ô được điền (được tô sáng).","Three steps to get started":"Ba bước để bắt đầu","Throughput":"Thông lượng","Throughput by group":"Thông lượng theo nhóm","Throughput short":"TPS","Throughput trend":"Xu hướng thông lượng","Tier":"Bậc","Tier billing mode":"Cách tính phí bậc","Tier conditions":"Điều kiện tầng","Tier name":"Tên bậc","Tiered":"Nhiều bậc","Tiered (billing expression)":"Nhiều bậc (công thức tính phí)","Tiered price table":"Bảng giá theo bậc","Tiered pricing":"Định giá theo tầng","tiers":"tầng","Too many items in batch request, maximum is {{max}}":"Yêu cầu hàng loạt có quá nhiều mục, tối đa là {{max}}","Time":"Thời gian","Time between scheduled channel checks":"Khoảng thời gian giữa các lần kiểm tra kênh định kỳ","Time functions use the timezone written in the expression.":"Các hàm thời gian sử dụng múi giờ được chỉ định trong biểu thức.","Time Granularity":"Độ chi tiết thời gian","Tool price \\"{{name}}\\" must be a finite non-negative number":"Giá công cụ \\"{{name}}\\" phải là số hữu hạn không âm","Tool price \\"{{name}}\\" must be a non-negative number":"Giá công cụ \\"{{name}}\\" phải là số không âm","Time range":"Khoảng thời gian","Time remaining":"Thời gian còn lại","Tool prices must be a JSON object":"Giá công cụ phải là đối tượng JSON","Time window for rate limiting":"Cửa sổ thời gian cho giới hạn tốc độ","Time-based":"Theo thời gian","Time-sliced cache (Claude)":"Bộ đệm phân thời gian (Claude)","Time:":"Thời gian:","Timeline":"Dòng thời gian","times":"lần","Timezone":"Múi giờ","Timing":"Thời gian","Tip":"Mẹo","Tip: after configuring one model, select others in the table and use bulk copy.":"Mẹo: sau khi cấu hình một mô hình, hãy chọn các mô hình khác trong bảng và dùng tính năng sao chép hàng loạt.","to":"đến","to access this resource.":"để truy cập tài nguyên này.","To Anthropic Messages":"Sang Anthropic Messages","to confirm":"Chờ xác nhận","To Gemini Generate Content":"Sang Gemini Generate Content","To Lower":"Chữ thường","To Lowercase":"Chuyển chữ thường","Top-up amount cannot be less than {{min}}":"Số lượng nạp không được nhỏ hơn {{min}}","Top-up amount cannot exceed {{max}}":"Số lượng nạp không được vượt quá {{max}}","To OpenAI Chat":"Sang OpenAI Chat","To OpenAI Responses":"Sang OpenAI Responses","to override billing when a user in one group uses a token of another group.":"để ghi đè việc thanh toán khi một người dùng trong một nhóm sử dụng token của một nhóm khác.","Top-up is processing, please try again later":"Đang xử lý nạp tiền, vui lòng thử lại sau","to the Models list so users can use them before the mapping sends traffic upstream.":"vào danh sách Mô hình để người dùng có thể sử dụng chúng trước khi ánh xạ gửi lưu lượng truy cập lên phía trên.","Top-up order does not exist":"Đơn nạp tiền không tồn tại","Top-up quota exceeds the range the system can represent":"Hạn mức nạp vượt quá phạm vi hệ thống có thể biểu diễn","Top-up quota limit exceeded":"Vượt giới hạn hạn mức nạp","Top-up quota must be greater than 0":"Hạn mức nạp phải lớn hơn 0","To Upper":"Chữ hoa","To Uppercase":"Chuyển chữ hoa","Topped up {{quota}} with a redemption code, code ID {{id}}":"Nạp {{quota}} bằng mã đổi thưởng, ID mã {{id}}","to view this resource.":"để xem tài nguyên này.","Today":"Hôm nay","Toggle columns":"Chuyển đổi cột","Toggle navigation menu":"Chuyển đổi menu điều hướng","Toggle plan":"Chuyển đổi kế hoạch","Toggle theme":"Chuyển đổi giao diện","token":"token","Token":"Mã thông báo","token (unit)":"token","Token Breakdown":"Chi tiết token","Token Endpoint":"Điểm cuối Token","Token Endpoint (Optional)":"Điểm cuối Token (Tùy chọn)","Token estimator":"Ước tính token","Token group":"Nhóm token","Token has no group":"Token không có nhóm","Token ID":"ID mã thông báo","Token identifier":"Mã định danh token","Total quota cannot be negative":"Tổng hạn mức không được là số âm","Token Limits":"Giới hạn token","Token management":"Quản lý token","Token Management":"Quản lý token","Token Mgmt":"Quản lý Token","Token name":"Tên token","Token Name":"Tên mã thông báo","Token obtained from your Gotify application":"Mã thông báo thu được từ ứng dụng Gotify của bạn","Token operation details":"Chi tiết thao tác mã thông báo","Token or per-call pricing":"Tính phí theo token hoặc theo yêu cầu","Token price for audio input.":"Giá token cho đầu vào âm thanh.","Token price for audio output.":"Giá token cho đầu ra âm thanh.","Token price for cache reads.":"Giá token cho lượt đọc cache.","Token price for creating cache entries.":"Giá token cho việc tạo mục cache.","Token price for image input.":"Giá token cho đầu vào hình ảnh.","Token prices":"Giá token","Token regenerated and copied to clipboard":"Token đã được tạo lại và sao chép vào bộ nhớ tạm","Token scope":"Phạm vi token","Token share by model author across the last 24 hours":"Tỷ lệ token theo nhà phát triển trong 24 giờ qua","Token share by model author across the past few weeks":"Tỷ lệ token theo nhà phát triển trong vài tuần qua","Token share by model author across the past month":"Tỷ lệ token theo nhà phát triển trong tháng qua","Token share by model author across the past year":"Tỷ lệ token theo nhà phát triển trong năm qua","Transfer failed {{error}}":"Chuyển thất bại {{error}}","Token share by model author since launch":"Tỷ lệ token theo nhà phát triển kể từ khi ra mắt","Token unit":"Đơn vị token","Token usage by model since launch":"Sử dụng token của từng mô hình kể từ khi ra mắt","Token-based":"Dựa trên token","Tokenizer":"Bộ token","tokens":"mã thông báo","Tokens":"Mã thông báo","tokens / mo":"token / tháng","Tokens by category":"Token theo danh mục","Tokens Only":"Chỉ mã thông báo","Tokens per minute":"Số token mỗi phút","Tokens since launch":"Token kể từ khi ra mắt","Tokens_usage":"Token","Tokens-only mode will show raw quota values regardless of this toggle.":"Chế độ Tokens-only sẽ hiển thị giá trị quota thô bất kể tùy chọn này.","Too many active login sessions. On a device where you are already signed in, open Login sessions and use “Sign out other sessions” to revoke them. If you cannot access a signed-in device, reset your password to sign out all sessions.":"Đã đạt giới hạn phiên đăng nhập đang hoạt động. Trên một thiết bị đã đăng nhập, hãy mở “Phiên đăng nhập” và dùng “Đăng xuất các phiên khác” để thu hồi chúng. Nếu bạn không thể truy cập thiết bị nào đã đăng nhập, hãy đặt lại mật khẩu để đăng xuất khỏi tất cả phiên.","Too many files. Some were not added.":"Quá nhiều tệp. Một số không được thêm.","Too many incorrect codes. Start email verification again.":"Nhập sai mã quá nhiều lần. Vui lòng bắt đầu xác minh email lại.","Too many login sessions were created recently. Please wait for the rolling window to pass, then try again.":"Gần đây đã tạo quá nhiều phiên đăng nhập. Vui lòng chờ cửa sổ thời gian trượt kết thúc rồi thử lại.","Too many requests":"Quá nhiều yêu cầu","Tool / function declarations the model may call":"Khai báo công cụ / hàm mà model có thể gọi","Tool identifier":"Định danh công cụ","Tool price settings":"Cài đặt giá công cụ","Tool prices":"Giá công cụ","Tool-choice policy or specific tool name":"Chính sách chọn công cụ hoặc tên cụ thể","Tools":"Công cụ","Top {{count}}":"Top {{count}}","Turnstile token is empty":"Token Turnstile trống","Turnstile verification failed, please refresh and try again!":"Xác minh Turnstile thất bại, vui lòng tải lại trang và thử lại!","Top app":"Ứng dụng dẫn đầu","Top apps":"Ứng dụng hàng đầu","Top Apps":"Ứng dụng hàng đầu","Top integrations using this model":"Tích hợp hàng đầu sử dụng mô hình này","Top model":"Mô hình dẫn đầu","Top models":"Mô hình hàng đầu","Top Models":"Người mẫu hàng đầu","Top models by traffic":"Mô hình có lượng truy cập cao nhất","Top P":"Top P","Top up balance and view billing history.":"Nạp tiền vào tài khoản và xem lịch sử thanh toán.","Top up, pay for subscriptions, check in, and transfer referral rewards.":"Nạp tiền, thanh toán gói đăng ký, điểm danh và chuyển thưởng giới thiệu.","Top Users":"Người dùng hàng đầu","Top vendors":"Nhà cung cấp hàng đầu","Top-up":"Nạp tiền","Top-up amount options":"Tùy chọn số tiền nạp","Top-up Audit Info":"Thông tin audit nạp tiền","Top-up group ratios":"Tỷ lệ nhóm bổ sung","Top-Up Link":"Liên kết nạp tiền","top-up ratio":"tỷ lệ nạp tiền","Top-up ratio":"Hệ số nạp tiền","Topup Amount":"Số tiền nạp","Total":"Tổng cộng","Unable to connect to {{provider}} server, please try again later":"Không thể kết nối tới máy chủ {{provider}}, vui lòng thử lại sau","Unable to create the Passkey credential":"Không thể tạo thông tin xác thực khóa truy cập","Total {{count}} records":"Tổng cộng {{count}} bản ghi","Total = used + remaining. It is not an initial allocation or a periodic budget; changing the remaining quota changes the total and percentage.":"Tổng = đã dùng + còn lại, không phải hạn mức ban đầu hay ngân sách định kỳ. Thay đổi phần còn lại sẽ thay đổi tổng và tỷ lệ đã dùng.","Total Allocated":"Tổng phân bổ","Total attempt budget exhausted":"Đã hết tổng số lần thử","Total check-ins":"Tổng số lần điểm danh","Total consumed":"Tổng tiêu thụ","Total consumed quota":"Tổng hạn ngạch đã tiêu thụ","Total cost":"Tổng chi phí","Total Cost":"Tổng chi phí","Total Count":"Tổng số","Total earned":"Tổng thu nhập","Total Earned":"Total income","Total GPUs":"Tổng GPU","Unauthorized, insufficient privileges":"Không được phép, không đủ quyền","Unauthorized, invalid access token":"Không có quyền, token truy cập không hợp lệ","Unauthorized, invalid user info":"Không có quyền, thông tin người dùng không hợp lệ","Unauthorized, not logged in and no access token provided":"Không có quyền: chưa đăng nhập và không cung cấp token truy cập","Unauthorized, the access token has expired":"Không có quyền, token truy cập đã hết hạn","Total invitation revenue":"Tổng doanh thu mời","Total Log Size":"Tổng dung lượng nhật ký","Total Quota":"Tổng hạn mức","Unbound successfully":"Hủy liên kết thành công","Total quota included in the plan, usable per billing period. 0 means unlimited.":"Tổng hạn ngạch bao gồm trong gói, dùng được mỗi kỳ thanh toán. 0 nghĩa là không giới hạn.","Total requests allowed per period. 0 = unlimited.":"Tổng số yêu cầu được phép mỗi kỳ. 0 = không giới hạn.","Total requests made":"Tổng lượt yêu cầu","Total Revenue":"Tổng thu nhập","Total time":"Tổng thời gian","Total tokens":"Tổng số token","Total Tokens":"Tổng số token","Total Usage":"Tổng Mức Sử dụng","Total Used":"Tổng đã dùng","Total:":"Tổng cộng:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"Theo dõi mức tiêu thụ theo từng yêu cầu để phục vụ phân tích mức độ sử dụng. Việc bật tính năng này làm tăng số lượt ghi vào cơ sở dữ liệu.","Track usage, costs and performance with real-time analytics":"Theo dõi sử dụng, chi phí và hiệu suất với phân tích thời gian thực","Tracked apps":"Ứng dụng được theo dõi","Tracks current account base limits and additional metered usage on Codex upstream.":"Theo dõi hạn cơ bản và mức dùng tính phí bổ sung của tài khoản ở phía upstream Codex.","Trading insights, accounting, advisory":"Phân tích giao dịch, kế toán, tư vấn","Traditional Chinese":"Tiếng Trung phồn thể","Transfer":"Chuyển","Undo":"Hoàn tác","Unknown OAuth provider":"Nhà cung cấp OAuth không xác định","Unknown rule name":"Tên quy tắc không xác định","Unknown setting type: {{type}}":"Loại cài đặt không xác định: {{type}}","Transfer Amount":"Số tiền chuyển khoản","Transfer failed":"Chuyển thất bại","Transfer Rewards":"Chuyển thưởng","Transfer successful":"Chuyển thành công","Transfer to Balance":"Chuyển vào số dư","Translation":"Dịch thuật","Transparent Billing":"Thanh toán minh bạch","Trend":"Xu hướng","Trending down":"Đang giảm","Unsupported add mode":"Chế độ thêm không được hỗ trợ","Unsupported operation":"Thao tác không được hỗ trợ","Unsupported payment channel":"Kênh thanh toán không được hỗ trợ","Unsupported payment method":"Phương thức thanh toán không được hỗ trợ","Trending up":"Đang tăng","Triggered garbage collection":"Đã kích hoạt thu gom rác","Trim leading/trailing whitespace":"Xóa khoảng trắng đầu/cuối","Trim Prefix":"Cắt tiền tố","Trim Space":"Cắt khoảng trắng","Trim Suffix":"Cắt hậu tố","Truncate embeddings to this many dimensions":"Cắt embedding xuống số chiều này","Trusted":"Đáng tin cậy","Try adjusting your search":"Hãy thử điều chỉnh tìm kiếm","Try adjusting your search to locate a missing model.":"Hãy thử điều chỉnh tìm kiếm của bạn để định vị một mô hình bị thiếu.","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"Phân vị TTFT, thông lượng và thời gian hoạt động 30 ngày theo nhóm","TTL":"TTL","TTL (seconds, 0 = default)":"TTL (giây, 0 = mặc định)","TTL (seconds)":"TTL (giây)","Tune selection priority, testing, status handling, and request overrides.":"Tinh chỉnh ưu tiên chọn, kiểm thử, xử lý trạng thái và ghi đè yêu cầu.","Turnstile is enabled but site key is empty.":"Turnstile đã được bật nhưng khóa trang web trống.","Tutoring, learning aids, assessment":"Gia sư, hỗ trợ học tập, đánh giá","Two-factor Authentication":"Xác thực hai yếu tố","Two-Factor Authentication":"Xác thực hai yếu tố","Two-factor authentication disabled":"Xác thực hai yếu tố đã bị vô hiệu hóa","Two-factor authentication enabled successfully!":"Xác thực hai yếu tố đã được bật thành công!","Two-factor authentication is already enabled.":"Xác thực hai yếu tố đã được bật.","Two-factor authentication is not enabled.":"Xác thực hai yếu tố chưa được bật.","Two-factor authentication is temporarily locked.":"Xác thực hai yếu tố tạm thời bị khóa.","Two-factor authentication reset":"Xác thực hai yếu tố đã được đặt lại","Two-Step Verification":"Xác minh hai bước","Update successful":"Cập nhật thành công","Type":"Loại","Type (common)":"Loại (phổ biến)","Type *":"Nhập *","Type to confirm":"Nhập để xác nhận","Type a command or search...":"Nhập lệnh hoặc tìm kiếm...","Type the confirmation text here":"Nhập văn bản xác nhận tại đây","Type-Specific Settings":"Cài đặt theo loại","Type:":"Loại:","UI granularity only — data is still aggregated hourly":"Chỉ là độ chi tiết UI — dữ liệu vẫn được tổng hợp theo giờ","Unable to build Passkey assertion":"Không thể tạo xác nhận Passkey","Unable to compare versions":"Không thể so sánh phiên bản","Unable to confirm the update result":"Không thể xác nhận kết quả cập nhật","Unable to estimate price for this deployment.":"Không thể ước tính giá cho triển khai này.","Unable to generate chat link. Please contact your administrator.":"Không thể tạo liên kết trò chuyện. Vui lòng liên hệ quản trị viên của bạn.","Unable to load groups":"Không thể tải nhóm","Unable to load login sessions":"Không thể tải các phiên đăng nhập","Unable to load rankings":"Không thể tải bảng xếp hạng","Unable to load rankings data":"Không thể tải dữ liệu bảng xếp hạng","Unable to open chat":"Không thể mở trò chuyện","Unable to parse Passkey login options from response":"Không thể đọc tùy chọn đăng nhập Passkey từ phản hồi","Unable to parse structured pricing":"Không thể phân tích giá có cấu trúc","Unable to prepare chat link. Please ensure you have an enabled API key.":"Không thể chuẩn bị liên kết chat. Vui lòng đảm bảo bạn có khóa API được kích hoạt.","Unable to read clipboard":"Không thể đọc bảng tạm","Unauthorized":"Chưa xác thực","Unauthorized Access":"Truy cập trái phép","Unavailable":"Không thể hiển thị","Unbind":"Hủy liên kết","Unbind failed":"Hủy liên kết thất bại","Unbound {{provider}}":"Đã hủy liên kết {{provider}}","Unchanged":"Không đổi","Underflow":"Tràn dưới","Underground":"Underground","Understand how user groups, token groups, ratios, and special rules work together.":"Hiểu cách nhóm người dùng, nhóm token, tỷ lệ và quy tắc đặc biệt hoạt động cùng nhau.","Upgrade group does not exist":"Nhóm nâng cấp không tồn tại","Understand image inputs alongside text":"Hiểu hình ảnh cùng với văn bản","Unexpected release payload":"Dữ liệu phiên bản không mong đợi","Unified API Gateway for":"Cổng API thống nhất cho","Unique identifier for this group.":"Mã định danh duy nhất cho nhóm này.","unit":"đơn vị","Unit":"Đơn vị","Unit price (local currency / USD)":"Đơn giá (tiền tệ địa phương / USD)","Unit price (USD)":"Đơn giá (USD)","Unit price must be greater than 0":"Đơn giá phải lớn hơn 0","Unit price: {{field}}":"Đơn giá: {{field}}","Units per USD":"Đơn vị trên USD","Unknown":"Không rõ","Unknown device":"Thiết bị không xác định","Unknown version":"Phiên bản không xác định","Unlimited":"Không giới hạn","Unlimited Quota":"Hạn mức không giới hạn","Unrecognized status code":"Mã trạng thái không xác định","Unsaved changes":"Thay đổi chưa được lưu","Unset legacy prices use the billing engine defaults.":"Giá theo chế độ cũ chưa được thiết lập sẽ dùng giá trị mặc định của hệ thống tính phí.","Unset price":"Chưa đặt giá","Unset price models":"Mô hình chưa thiết lập giá","Unsupported account password hashing configuration.":"Cấu hình băm mật khẩu tài khoản không được hỗ trợ.","Unsupported verification method: {{method}}":"Phương thức xác minh không được hỗ trợ: {{method}}","Until":"Cho đến","Untitled":"Không có tiêu đề","Untrusted upstream data:":"Dữ liệu nguồn không đáng tin cậy:","Unused":"Chưa sử dụng","Up to 4 strings that stop generation":"Tối đa 4 chuỗi để dừng sinh","Up to date":"Đã mới nhất","Update":"Cập nhật","Update All Balances":"Cập nhật tất cả số dư","Update API Key":"Cập nhật Khóa API","Update API token":"Cập nhật mã thông báo API","Update API token “{{name}}”":"Cập nhật mã thông báo API “{{name}}”","Update available":"Có bản cập nhật","Update Balance":"Cập nhật số dư","Update balance for:":"Cập nhật số dư cho:","Update Channel":"Cập nhật kênh","Update channel configuration and click save when you\'re done.":"Cập nhật cấu hình kênh và nhấp lưu khi bạn hoàn tất.","Update check timed out. Try again.":"Kiểm tra cập nhật đã hết thời gian chờ. Vui lòng thử lại.","Update completed":"Cập nhật hoàn tất","Update configuration":"Cập nhật cấu hình","Update failed":"Cập nhật thất bại","Update Model":"Cập nhật mô hình","Update model configuration and click save when you\'re done.":"Cập nhật cấu hình mô hình và nhấp lưu khi bạn hoàn tất.","Update plan info":"Cập nhật thông tin gói","Update Provider":"Cập nhật Nhà cung cấp","Update Redemption Code":"Cập nhật mã đổi thưởng","Update results":"Kết quả cập nhật","Update selected fields":"Cập nhật các trường đã chọn","Upstream returned no usage":"Thượng nguồn không trả về mức sử dụng","Upstream returned no usage, so nothing was charged (possibly an upstream timeout)":"Thượng nguồn không trả về mức sử dụng nên không tính phí (có thể do thượng nguồn hết thời gian chờ)","Update succeeded":"Cập nhật thành công","Update the API key by providing necessary info.":"Cập nhật khóa API bằng cách cung cấp thông tin cần thiết.","Upstream task not found":"Không tìm thấy tác vụ ở thượng nguồn","Update the configuration for this custom OAuth provider.":"Cập nhật cấu hình cho nhà cung cấp OAuth tùy chỉnh này.","Upstream task timed out (over 1 hour)":"Tác vụ thượng nguồn hết thời gian (quá 1 giờ)","Update the redemption code by providing necessary info.":"Cập nhật mã đổi thưởng bằng cách cung cấp thông tin cần thiết.","Update the reusable bundle below.":"Cập nhật gói có thể tái sử dụng bên dưới.","Update the session binding after a successful switch":"Cập nhật liên kết phiên sau khi chuyển thành công","Update the user by providing necessary info.":"Cập nhật cho người dùng bằng cách cung cấp thông tin cần thiết.","Update vendor information for {{name}}":"Cập nhật thông tin nhà cung cấp cho {{name}}","Update your password for account:":"Cập nhật mật khẩu của bạn cho tài khoản:","Update your password to keep your account secure":"Cập nhật mật khẩu của bạn để bảo mật tài khoản.","Updated":"Đã cập nhật","Updated {{models}} model assignments and deleted {{vendors}} vendor records.":"Đã cập nhật {{models}} gán mô hình và xóa {{vendors}} bản ghi nhà cung cấp.","Uptime Kuma groups cannot exceed 20 entries":"Nhóm Uptime Kuma không được vượt quá 20 mục","Updated a custom OAuth provider":"Đã cập nhật nhà cung cấp OAuth tùy chỉnh","Updated a deployment":"Đã cập nhật một triển khai","Updated a model":"Đã cập nhật một mô hình","Updated a prefill group":"Đã cập nhật một nhóm điền sẵn","Updated a redemption code":"Đã cập nhật một mã đổi thưởng","URL must start with http:// or https://":"URL phải bắt đầu bằng http:// hoặc https://","Updated a subscription plan":"Đã cập nhật một gói đăng ký","Updated a vendor":"Đã cập nhật một nhà cung cấp","Updated At":"Thời gian cập nhật","Updated channel {{name}} (ID: {{id}})":"Đã cập nhật kênh {{name}} (ID: {{id}})","Updated channel status (ID: {{id}})":"Đã cập nhật trạng thái kênh (ID: {{id}})","Updated daily":"Cập nhật hàng ngày","Updated Passkey domains: removed {{domains}}; affected {{known}}; unknown {{unknown}}":"Đã cập nhật miền khóa truy cập: đã xóa {{domains}}; bị ảnh hưởng {{known}}; chưa rõ miền {{unknown}}","Updated successfully":"Cập nhật thành công","Updated system setting {{key}}":"Đã cập nhật cài đặt hệ thống {{key}}","Updated user {{username}} (ID: {{id}})":"Đã cập nhật người dùng {{username}} (ID: {{id}})","Updates have not been checked yet.":"Chưa kiểm tra cập nhật.","Updates with the system":"Cập nhật cùng hệ thống","Updating all channel balances. This may take a while. Please refresh to see results.":"Đang cập nhật tất cả số dư kênh. Quá trình này có thể mất một chút thời gian. Vui lòng làm mới để xem kết quả.","Updating...":"Đang cập nhật...","Upgrade {{name}}":"Nâng cấp {{name}}","Upgrade and enable":"Nâng cấp và bật","Upgrade available: v{{installed}} to v{{latest}}":"Có bản nâng cấp: v{{installed}} lên v{{latest}}","Upgrade Group":"Nhóm nâng cấp","Upgrade plaintext SMTP connection with STARTTLS before authentication":"Nâng cấp kết nối SMTP dạng rõ bằng STARTTLS trước khi xác thực","Upload":"Tải lên","Upload a JavaScript task platform plugin.":"Tải lên plugin JavaScript cho nền tảng tác vụ.","Upload a single service account JSON file":"Tải lên một tệp JSON tài khoản dịch vụ","Upload a task plugin to add a platform.":"Tải plugin tác vụ lên để thêm nền tảng.","Upload file":"Tải tệp lên","Upload files":"Tải tệp lên","Upload multiple JSON files in batch modes":"Tải lên nhiều tệp JSON trong chế độ hàng loạt","Upload new plugin version":"Tải phiên bản plugin mới","Upload new version":"Tải phiên bản mới","Upload or reference a local configuration file.":"Tải lên hoặc tham chiếu tệp cấu hình cục bộ.","Upload photo":"Tải ảnh lên","Upload plugin":"Tải plugin lên","Upload task plugin":"Tải plugin tác vụ lên","Uploading a plugin is an administrator-level trust decision. A plugin can access channel credentials and shape upstream requests. Review its source and diff before activation.":"Tải plugin lên là quyết định tin cậy ở cấp quản trị viên. Plugin có thể truy cập thông tin xác thực của kênh và tạo yêu cầu tới thượng nguồn. Hãy xem mã nguồn và phần khác biệt trước khi kích hoạt.","Uploading...":"Đang tải lên...","Upscale":"Phóng to","Upstream":"Thượng nguồn","Upstream authentication":"Xác thực với nhà cung cấp","Upstream connection":"Kết nối thượng nguồn","Upstream did not return reset credit details.":"Upstream không trả về chi tiết lượt đặt lại.","Upstream JSON response":"Phản hồi JSON thượng nguồn","Upstream Model":"Mô hình gửi đến nhà cung cấp","Upstream Model Detection Settings":"Cài đặt phát hiện mô hình nguồn","Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.":"Đã bắt đầu tác vụ phát hiện mô hình thượng nguồn. Theo dõi tiến trình trong Thông tin hệ thống, sau đó làm mới để xem các cập nhật đang chờ.","Upstream model list":"Danh sách mô hình thượng nguồn","Upstream Model Name":"Tên mô hình thượng nguồn","Upstream Model Update Check":"Kiểm tra cập nhật mô hình nguồn","Upstream Model Updates":"Cập nhật mô hình upstream","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"Đã áp dụng cập nhật mô hình upstream: {{added}} đã thêm, {{removed}} đã xóa, {{ignored}} bỏ qua lần này, {{totalIgnored}} tổng mô hình đã bỏ qua","Upstream names returned by the provider":"Tên do thượng nguồn trả về","Upstream path":"Đường dẫn upstream","Upstream path is required":"Cần nhập đường dẫn upstream","Upstream path must be a full URL or a path starting with /":"Đường dẫn upstream phải là URL đầy đủ hoặc đường dẫn bắt đầu bằng /","Upstream price sync":"Đồng bộ giá thượng nguồn","Upstream prices fetched successfully":"Lấy giá upstream thành công","Upstream protocol plan":"Cấu hình giao thức thượng nguồn","Upstream ratios fetched successfully":"Đã lấy tỷ lệ upstream thành công","Upstream receives":"Nhà cung cấp nhận","Upstream request failed":"Yêu cầu lên nguồn thất bại","Upstream Request ID":"ID yêu cầu thượng nguồn","Upstream response":"Phản hồi nguồn","Upstream Response":"Upstream feedback","Upstream Response (billing-usage-anthropic-estimated)":"Phản hồi upstream (billing-usage-anthropic-estimated)","Upstream Response (billing-usage-anthropic)":"Phản hồi upstream (billing-usage-anthropic)","Upstream Response (billing-usage-gemini-estimated)":"Phản hồi upstream (billing-usage-gemini-estimated)","Upstream Response (billing-usage-gemini)":"Phản hồi upstream (billing-usage-gemini)","Upstream Response (billing-usage-openai-estimated)":"Phản hồi upstream (billing-usage-openai-estimated)","Upstream Response (billing-usage-openai)":"Phản hồi upstream (billing-usage-openai)","upstream services integrated":"dịch vụ thượng nguồn tích hợp","Upstream Task ID":"ID tác vụ thượng nguồn","Upstream task plugins":"Plugin tác vụ thượng nguồn","Upstream Updates":"Cập nhật nguồn","Upstream URL":"URL upstream","Upstream URL must be a full URL":"URL upstream phải là URL đầy đủ","Upstream vendor missing":"Nguồn thiếu thông tin nhà cung cấp","uptime":"thời gian hoạt động","Uptime":"Thời gian hoạt động","Uptime (30d)":"Thời gian hoạt động (30 ngày)","Uptime (last 30 days)":"Thời gian hoạt động (30 ngày qua)","Uptime Kuma":"Uptime Kuma","Uptime Kuma groups saved successfully":"Đã lưu nhóm Uptime Kuma thành công","Uptime Kuma URL":"URL Uptime Kuma","Uptime since":"Thời gian hoạt động kể từ","URL":"URL","URL is required":"URL là bắt buộc","URL to your logo image (optional)":"URL hình ảnh logo của bạn (tùy chọn)","Use the same priority as the highlighted channels":"Dùng cùng mức ưu tiên với các kênh được tô sáng","User does not exist":"Người dùng không tồn tại","US dollar (USD)":"Đô la Mỹ (USD)","Usage":"Sử dụng","Usage · {{price}}":"Mức sử dụng · {{price}}","Usage at a glance":"Tổng quan mức dùng","Usage guide":"Hướng dẫn sử dụng","User group will be reverted to {{group}}":"Nhóm người dùng sẽ được trả về {{group}}","User group will be upgraded to {{group}}":"Nhóm người dùng sẽ được nâng cấp lên {{group}}","Usage logs":"Nhật ký sử dụng","Usage Logs":"Nhật ký sử dụng","Usage mode":"Chế độ sử dụng","User has been banned":"Người dùng đã bị cấm","User has been deleted":"Người dùng đã bị xóa","Usage parameters":"Tham số sử dụng","Usage percentage":"Tỷ lệ đã dùng","Usage prices":"Giá sử dụng","Usage-based":"Dựa trên sử dụng","Usage-based billing":"Tính phí theo mức sử dụng","Usage-based billing · price not configured":"Tính phí theo mức sử dụng · chưa cấu hình giá","USD":"USD","USD Exchange Rate":"Tỷ giá USD","USD price per 1M input tokens.":"Giá USD cho mỗi 1 triệu token đầu vào.","User registration failed or user ID retrieval failed":"Đăng ký người dùng thất bại hoặc không lấy được ID người dùng","USD price per 1M tokens.":"Giá USD cho mỗi 1 triệu token.","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"Dùng +: để thêm nhóm, -: để xóa nhóm có thể chọn mặc định, hoặc không có tiền tố để nối nhóm.","Use 8–128 characters.":"Sử dụng 8–128 ký tự.","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"Sử dụng trình duyệt hoặc thiết bị tương thích có xác thực sinh trắc học hoặc khóa bảo mật để đăng ký Khóa truy cập.","Use a different stable value for each instance, then restart the service.":"Dùng một giá trị ổn định khác nhau cho mỗi phiên bản, sau đó khởi động lại dịch vụ.","Use a Passkey from another website":"Dùng khóa truy cập của trang web khác","Use a path to append it to the channel Base URL, or enter a full URL to override the Base URL for this route.":"Dùng đường dẫn để nối vào Base URL của kênh, hoặc nhập URL đầy đủ để ghi đè Base URL cho tuyến này.","Username already exists or has been deleted":"Tên người dùng đã tồn tại hoặc đã bị xóa","Use access tokens to call the dashboard API from scripts. Each token only has the permissions you select.":"Dùng token truy cập để gọi API bảng điều khiển từ script. Mỗi token chỉ có các quyền bạn chọn.","Use an HTTPS domain (or localhost for development) to configure Passkey.":"Dùng tên miền HTTPS để cấu hình Passkey, hoặc localhost khi phát triển.","Username must be {{max}} characters or fewer":"Tên người dùng tối đa {{max}} ký tự","Use authenticator code":"Sử dụng mã xác thực","Username or password is incorrect, or user has been banned":"Tên người dùng hoặc mật khẩu không đúng, hoặc người dùng đã bị cấm","Use backup code":"Sử dụng mã dự phòng","Use Bearer for all protocols":"Dùng Bearer cho mọi giao thức","Use channel type {{type}}":"Sử dụng loại kênh {{type}}","Users can download their own logs from the usage log page. Administrators can always export.":"Người dùng có thể tải nhật ký của mình từ trang nhật ký sử dụng. Quản trị viên luôn có thể xuất.","Use default":"Dùng mặc định","Use disk cache when request body exceeds this size":"Sử dụng bộ nhớ đệm đĩa khi nội dung yêu cầu vượt quá kích thước này","Use exact client model names, separated by commas. Prefixes and wildcards are not supported.":"Nhập tên model chính xác từ yêu cầu client, ngăn cách bằng dấu phẩy. Không hỗ trợ tiền tố hoặc ký tự đại diện.","Use exact model names such as gpt-4o, or regex rules prefixed with re: such as re:^gemini-.":"Dùng tên model chính xác như gpt-4o, hoặc quy tắc regex có tiền tố re: như re:^gemini-.","Use expression pricing when a dependent price is non-zero and its base price is zero.":"Dùng biểu thức khi giá phụ thuộc khác không nhưng giá cơ sở bằng không.","Use external tools to extend capabilities":"Sử dụng công cụ ngoài để mở rộng khả năng","Use Mantle for supported Claude models and automatic prompt caching. Keep InvokeModel for older models and Amazon Nova.":"Dùng Mantle cho các mô hình Claude được hỗ trợ và tự động lưu bộ nhớ đệm prompt. Tiếp tục dùng InvokeModel cho các mô hình cũ và Amazon Nova.","Use model-level expression":"Dùng biểu thức của mô hình","Use model-level pricing":"Dùng giá của mô hình","Use one available reset credit for this channel. The reset request is sent only after confirmation.":"Sử dụng một lượt đặt lại khả dụng cho kênh này. Yêu cầu chỉ được gửi sau khi xác nhận.","Use one available reset credit to refresh the current Codex usage windows.":"Sử dụng một lượt đặt lại khả dụng để làm mới các cửa sổ mức dùng Codex hiện tại.","Use OpenAI-compatible Ollama chat API":"Dùng API chat Ollama tương thích OpenAI","Use our unified OpenAI-compatible endpoint in your applications":"Sử dụng endpoint thống nhất tương thích OpenAI trong ứng dụng của bạn","Use Passkey or 2FA to confirm your identity before revealing this channel key.":"Hãy dùng Passkey hoặc 2FA để xác nhận danh tính trước khi xem khóa kênh này.","Use Passkey to sign in without entering your password.":"Sử dụng Khóa truy cập để đăng nhập mà không cần nhập mật khẩu của bạn.","Use presets or upstream discovery to populate the model list faster.":"Dùng mẫu đặt sẵn hoặc phát hiện từ upstream để điền danh sách mô hình nhanh hơn.","Use secure connection when sending emails":"Sử dụng kết nối an toàn khi gửi email","Use sidebar shortcut":"Sử dụng phím tắt thanh bên","Use the existing token total":"Sử dụng tổng token hiện có","Use the full-width table to scan prices, then select a row to edit it here.":"Duyệt giá trong bảng, rồi chọn một hàng để chỉnh sửa tại đây.","Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.":"Dùng nhóm đặt trên token. Nếu token không có nhóm, dùng nhóm người dùng. Nhóm auto thử theo thứ tự gán tự động từ trên xuống dưới.","Use the group set on the token. If the token has no group, use the user group. The auto group tries the configured groups from top to bottom.":"Sử dụng nhóm được đặt cho token. Nếu token chưa có nhóm, sử dụng nhóm của người dùng. Nhóm auto thử các nhóm đã cấu hình theo thứ tự từ trên xuống dưới.","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"Dùng bảng nhóm định giá để quản lý tỷ lệ và việc nhóm có xuất hiện trong danh sách tạo token hay không.","Use this callback URL pattern when registering a custom OAuth provider.":"Dùng mẫu URL callback này khi đăng ký nhà cung cấp OAuth tùy chỉnh.","Use this token for API authentication":"Sử dụng token này để xác thực API","Use tier(name, fixed(amount)) for a USD price per request. Group and request multipliers still apply.":"Dùng tier(name, fixed(amount)) để đặt giá USD cho mỗi yêu cầu. Hệ số nhóm và yêu cầu vẫn được áp dụng.","Use your Passkey":"Sử dụng Passkey của bạn","used":"đã sử dụng, cũ","Used":"Đã sử dụng","Used {{used}} of {{total}} ({{percent}}%)":"Đã dùng {{used}} trên {{total}} ({{percent}}%)","Used / Remaining":"Đã dùng / Còn lại","Used amount":"Đã dùng","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"Được dùng làm SuccessURL trên sản phẩm mới. Bạn sẽ được yêu cầu xác nhận nếu để trống.","Used by route auth templates":"Dùng trong mẫu xác thực route","Used for load balancing. Higher weight = more requests":"Được sử dụng để cân bằng tải. Trọng số càng cao = càng nhiều yêu cầu","Used in URLs and API routes":"Sử dụng trong URL và các tuyến API","Used Quota":"Hạn mức đã sử dụng","Used reset credits cannot be restored.":"Các lượt đặt lại đã dùng không thể khôi phục.","Used to authenticate with io.net deployment API":"Dùng để xác thực với API triển khai io.net","Used to authenticate with the worker. Leave blank to keep the existing secret.":"Dùng để xác thực với worker. Để trống để giữ nguyên secret hiện có.","Used to decide the payment flow. Built-in keys include stripe for Stripe and waffo_pancake for Waffo Pancake; other values are sent to Epay as the type parameter.":"Dùng để quyết định luồng thanh toán khi người dùng nhấp. Các khóa có sẵn gồm stripe cho Stripe và waffo_pancake cho Waffo Pancake; các giá trị khác được gửi tới Epay dưới dạng tham số type.","Used when a Task Plugin channel has no API address configured.":"Dùng khi kênh plugin tác vụ chưa được cấu hình địa chỉ API.","Used:":"Đã dùng:","Verification code is incorrect or has expired":"Mã xác minh không đúng hoặc đã hết hạn","User":"Người dùng","User {{id}}":"Người dùng {{id}}","User Agent":"Tác nhân người dùng","User Agreement":"Thỏa thuận người dùng","User Analytics":"Thống kê người dùng","User Consumption Ranking":"Xếp hạng tiêu thụ","User Consumption Trend":"Xu hướng tiêu thụ","User Count":"Số người dùng","User created successfully":"Tạo người dùng thành công","User dashboard and quota controls.":"Bảng điều khiển người dùng và kiểm soát hạn ngạch.","User deleted successfully":"Xóa người dùng thành công","User demoted to regular user successfully":"Đã hạ cấp người dùng xuống người dùng thường thành công","User disabled successfully":"Tắt người dùng thành công","User enabled successfully":"Bật người dùng thành công","User Exclusive Ratio":"Tỷ lệ riêng","User group":"Nhóm người dùng","User Group":"Nhóm người dùng","User group name":"Tên nhóm người dùng","User Group: {{ratio}}x":"Nhóm người dùng: {{ratio}}x","User groups that can access channels with this tag":"Nhóm người dùng có thể truy cập các kênh với thẻ này","User groups that can access this channel. ":"Các nhóm người dùng có thể truy cập kênh này.","User ID":"ID người dùng","User ID Field":"Trường ID Người dùng","User ID:":"ID người dùng:","User Info Endpoint":"Điểm cuối Thông tin Người dùng","User Info Endpoint (Optional)":"Điểm cuối Thông tin Người dùng (Tùy chọn)","User Information":"Thông tin người dùng","User Menu":"Menu người dùng","User personal functions":"Chức năng cá nhân người dùng","User promoted to admin successfully":"Đã nâng cấp người dùng lên quản trị viên thành công","User selectable":"Người dùng có thể chọn","User Subscription Management":"Quản lý đăng ký người dùng","User updated successfully":"Cập nhật người dùng thành công","User Verification":"Xác minh người dùng","User-Agent include (one per line)":"User-Agent include (mỗi dòng một mục)","Username":"Tên người dùng","Username confirmation does not match":"Xác nhận tên người dùng không khớp","Username Field":"Trường Tên người dùng","Username or Email":"Tên đăng nhập hoặc Email","Users":"Người dùng","Users call":"Người dùng gọi","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"Người dùng gọi mô hình bên trái. Nền tảng chuyển tiếp yêu cầu đến mô hình thượng nguồn bên phải.","Users in {{group}}":"Người dùng trong {{group}}","Users must wait for a successful drawing before upscales or variations.":"Người dùng phải chờ vẽ thành công trước khi upscale hoặc biến thể.","Users of vip, when billed as premium, pay ratio":"Người dùng của vip, khi tính phí theo premium, trả hệ số","Vertex AI keys for batch adding cannot be empty":"Khóa Vertex AI để thêm hàng loạt không được để trống","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"Người dùng chỉ thấy các nhóm được đánh dấu là có thể chọn. Nhóm không thể chọn vẫn có thể do quản trị viên gán.","uses":"sử dụng","Using built-in or default pricing":"Đang dùng giá tích hợp hoặc mặc định","Using the complete global Auto order ({{count}} groups)":"Đang dùng thứ tự Auto toàn cục đầy đủ ({{count}} nhóm)","v{{installed}} is installed but this source does not list it. Installing replaces it with v{{target}}.":"Đang cài v{{installed}} nhưng nguồn này không liệt kê phiên bản đó. Việc cài đặt sẽ thay thế nó bằng v{{target}}.","Validity":"Hiệu lực","Validity Period":"Thời hạn hiệu lực","Value":"Giá trị","Value (supports JSON or plain text)":"Giá trị (hỗ trợ JSON hoặc văn bản thuần)","Value is required":"Giá trị là bắt buộc","Value metric":"Chỉ số giá trị","Value must be at least 0":"Giá trị phải ít nhất là 0","Value Regex":"Regex giá trị","variable":"biến","variable)":"biến)","variable) *":"biến) *","Variables":"Biến","Vary":"Biến thể","Vary (Strong)":"Biến thể (mạnh)","Vary (Subtle)":"Biến thể (nhẹ)","Vast Range of AI Models":"Số lượng lớn mô hình AI","vendor":"nhà cung cấp","Vendor":"Supplier","Vendor created successfully":"Đã tạo nhà cung cấp","Vendor data changed. Preview again before applying.":"Dữ liệu nhà cung cấp đã thay đổi. Hãy xem trước lại trước khi áp dụng.","Vendor deleted successfully":"Đã xóa nhà cung cấp thành công","Vendor details":"Thông tin nhà cung cấp","Vendor management":"Quản lý nhà cung cấp","Vendor Name":"Tên nhà cung cấp","Vendor Name *":"Tên nhà cung cấp *","Vendor name and icon must not exceed 128 characters.":"Tên nhà cung cấp và khóa biểu tượng không được quá 128 ký tự.","Vendor name is required":"Tên nhà cung cấp là bắt buộc","Vendor updated successfully":"Đã cập nhật nhà cung cấp","Vendor:":"Nhà cung cấp:","Vendors":"Nhà cung cấp","Vendors ranked by aggregated token volume":"Nhà cung cấp xếp hạng theo tổng lượng token","Vendors source":"Nguồn nhà cung cấp","Vendors still have {{count}} linked model records. Transfer or clear their assignments first.":"Nhà cung cấp vẫn còn {{count}} bản ghi mô hình liên kết. Hãy chuyển hoặc xóa gán trước.","Verification code":"Mã xác minh","Verification Code":"Mã xác minh","Verification code must be 6 digits":"Mã xác thực phải có 6 chữ số","Verification code sent! Please check your email.":"Mã xác thực đã được gửi! Vui lòng kiểm tra email của bạn.","Verification code updates every 30 seconds.":"Mã xác minh cập nhật mỗi 30 giây.","Verification does not match this action.":"Xác minh không khớp với thao tác này.","Verification does not match this action\'s details. Please verify again.":"Thông tin xác minh không khớp với thao tác này. Vui lòng xác minh lại.","Verification email could not be sent. Start email verification again.":"Không thể gửi email xác minh. Vui lòng bắt đầu xác minh email lại.","Verification email sent":"Email xác thực đã được gửi","Verification failed":"Xác thực thất bại","Verification failed. Please try again.":"Xác minh thất bại. Vui lòng thử lại.","Verification flow expired":"Quy trình xác minh đã hết hạn","Verification is not configured properly":"Xác thực chưa được cấu hình đúng cách","Verification method":"Phương thức xác thực","Verification proof was not returned":"Không nhận được bằng chứng xác minh","Verification required to reveal the saved key.":"Yêu cầu xác minh để tiết lộ khóa đã lưu.","Verification scope is missing":"Thiếu phạm vi xác minh","Violation fee charged":"Đã thu phí vi phạm","Verify":"Kiểm tra","Verify again before retrying this action.":"Vui lòng xác minh lại trước khi thử lại thao tác này.","VIP group":"Nhóm VIP","Verify and Sign In":"Xác minh và Đăng nhập","Verify routing with Playground or your client":"Xác minh định tuyến bằng Playground hoặc client của bạn","Verify Setup":"Xác minh thiết lập","Verify to create administrator":"Xác minh để tạo quản trị viên","Verify to delete user":"Xác minh để xóa người dùng","Verify to demote user":"Xác minh để giáng cấp người dùng","Verify to disable user":"Xác minh để vô hiệu hóa người dùng","Verify to enable user":"Xác minh để kích hoạt người dùng","Verify to promote user":"Xác minh để thăng cấp người dùng","Verify to reset 2FA":"Xác minh để đặt lại 2FA","Verify to reset Passkey":"Xác minh để đặt lại Passkey","Verify to unbind account":"Xác minh để hủy liên kết tài khoản","Verify to update user credentials":"Xác minh để cập nhật thông tin đăng nhập của người dùng","Verify to view channel key":"Xác minh để xem khóa kênh","Verify upstream pricing":"Kiểm tra giá từ nguồn","Verify your database connection":"Xác minh kết nối cơ sở dữ liệu của bạn","Verify your identity to finish signing in.":"Xác minh danh tính để hoàn tất đăng nhập.","Verifying credentials and pulling stores from your Pancake account...":"Đang xác minh thông tin xác thực và lấy cửa hàng từ tài khoản Pancake của bạn...","Verifying your {{provider}} account":"Đang xác minh tài khoản {{provider}} của bạn","Version":"Phiên bản","Version differences":"Khác biệt phiên bản","Version history":"Lịch sử phiên bản","Version Overrides":"Ghi đè phiên bản","Versions":"Phiên bản","Vertex AI":"Vertex AI","Waffo Pancake configuration is incomplete":"Cấu hình Waffo Pancake chưa đầy đủ","Waffo Pancake credentials are not configured":"Chưa cấu hình thông tin xác thực Waffo Pancake","Vertex AI API Key mode does not support batch creation":"Chế độ API Key của Vertex AI không hỗ trợ tạo hàng loạt","Waffo Pancake is not configured or key is invalid":"Waffo Pancake chưa được cấu hình hoặc khóa không hợp lệ","Waffo Pancake is not fully configured. Complete the gateway binding in payment settings first.":"Waffo Pancake chưa được cấu hình đầy đủ. Hãy hoàn tất liên kết cổng thanh toán trong cài đặt thanh toán trước.","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI không hỗ trợ functionResponse.id. Bật để tự động loại bỏ trường này.","Vertex AI Key Format":"Định dạng khóa Vertex AI","Vertex AI Project ID":"ID dự án Vertex AI","e.g., my-project-123":"vd. du-an-cua-toi-123","Vertex AI service account key must be valid JSON":"Khóa tài khoản dịch vụ Vertex AI phải là JSON hợp lệ","Video":"Video","Video length in seconds":"Độ dài video (giây)","Video pricing must be converted manually.":"Cần chuyển đổi giá video thủ công.","Video Remix":"Remix video","Vidu":"Vidu","Waffo payment is not enabled":"Thanh toán Waffo chưa được bật","View":"Xem","View all currently available models":"Xem tất cả mô hình hiện có","WaffoPancakeProductId is not configured for this plan":"Gói này chưa cấu hình WaffoPancakeProductId","View all top-up records, subscription plans, and user subscriptions.":"Xem toàn bộ lịch sử nạp tiền, gói đăng ký và đăng ký của người dùng.","View all users\' usage logs, statistics, and tasks.":"Xem nhật ký sử dụng, thống kê và tác vụ của mọi người dùng.","View API keys and their settings without the full key.":"Xem khóa API và cài đặt của chúng, không gồm khóa đầy đủ.","View API token key":"Xem khóa mã thông báo API","View API token keys in batch":"Xem hàng loạt khóa mã thông báo API","View audit records from user and admin roles. Root records are always excluded.":"Xem bản ghi kiểm toán của vai trò user và admin. Luôn loại trừ bản ghi của vai trò root.","View balance, top-up records, subscriptions, and referral information.":"Xem số dư, lịch sử nạp tiền, gói đăng ký và thông tin giới thiệu.","View changelog source":"Xem tệp nguồn","View channel lists and details without secrets.":"Xem danh sách và chi tiết kênh không chứa bí mật.","View channel secrets":"Xem bí mật kênh","View complete API keys.":"Xem đầy đủ khóa API.","View deployments and price estimates.":"Xem triển khai và ước tính giá.","View detailed information about this user including balance, usage statistics, and invitation details.":"Xem thông tin chi tiết về người dùng này bao gồm số dư, thống kê sử dụng và chi tiết lời mời.","View details":"Xem chi tiết","View document":"Xem tài liệu","View groups and prefill groups.":"Xem nhóm và nhóm điền sẵn.","View installed task plugins and their settings.":"Xem các plugin tác vụ đã cài đặt và cài đặt của chúng.","View issued reset credits, grant dates, and expiration.":"Xem các lượt đặt lại đã cấp, ngày cấp và thời điểm hết hạn.","View key for API token “{{name}}”":"Xem khóa mã thông báo API “{{name}}”","View logs":"Xem nhật ký","View mapping":"Xem ánh xạ","View mode":"Chế độ xem","View model statistics and charts":"Xem thống kê và biểu đồ mô hình","View models":"Xem mô hình","View models and vendors, and preview upstream sync.":"Xem mô hình và nhà cung cấp, xem trước đồng bộ từ thượng nguồn.","View other accounts\' audit logs":"Xem nhật ký kiểm toán của tài khoản khác","View Passkey, two-factor, and sign-in binding status.":"Xem trạng thái khóa truy cập, xác thực hai yếu tố và liên kết đăng nhập.","View performance, system tasks, and system information.":"Xem hiệu năng, tác vụ hệ thống và thông tin hệ thống.","View Pricing":"View price","View pricing for {{model}}":"Xem giá {{model}}","View redemption codes.":"Xem mã đổi thưởng.","View scope":"Phạm vi xem","View system settings, custom OAuth providers, and price sync sources.":"Xem cài đặt hệ thống, nhà cung cấp OAuth tùy chỉnh và nguồn đồng bộ giá.","View the complete details for this":"Xem chi tiết đầy đủ của","Webhook URL cannot be empty":"URL Webhook không được để trống","View the complete details for this log entry":"Xem chi tiết đầy đủ cho mục nhật ký này","View the complete details for this task":"Xem đầy đủ chi tiết của tác vụ này","View the complete error message and details":"Xem toàn bộ thông báo lỗi và chi tiết","WeChat ID is empty!":"ID WeChat trống!","View the complete prompt and its English translation":"Xem toàn bộ lời nhắc và bản dịch tiếng Anh","View the generated image":"Xem ảnh đã tạo","View users, their sign-in bindings, and permission settings.":"Xem người dùng, liên kết đăng nhập và cài đặt quyền của họ.","View your profile, groups, and available models.":"Xem hồ sơ, nhóm và các mô hình khả dụng.","View your topup transaction records and payment history":"Xem lịch sử giao dịch nạp tiền và lịch sử thanh toán của bạn","View your usage logs, statistics, tasks, and audit logs.":"Xem nhật ký sử dụng, thống kê, tác vụ và nhật ký kiểm toán của bạn.","Viewed channel key {{name}} (ID: {{id}})":"Đã xem khóa kênh {{name}} (ID: {{id}})","Violation Code":"Mã vi phạm","Violation deduction amount":"Số tiền trừ vi phạm","Violation Fee":"Phí vi phạm","Violation Marker":"Đánh dấu vi phạm","vip":"vip","VIP users with premium access":"Người dùng VIP với quyền truy cập cao cấp","Visible":"Hiển thị","Visible only to users with access to the model’s groups.":"Chỉ hiển thị cho người dùng có quyền truy cập các nhóm của mô hình.","Vision":"Thị giác","Vision, image / video, document chat":"Thị giác, ảnh / video, hỏi đáp tài liệu","Visit Settings → General and adjust quota options...":"Truy cập Cài đặt → Chung và điều chỉnh tùy chọn hạn mức...","Visitors must authenticate before accessing the pricing directory.":"Khách truy cập phải xác thực trước khi truy cập thư mục giá.","Visitors must authenticate before accessing the rankings page.":"Khách truy cập phải xác thực trước khi truy cập trang bảng xếp hạng.","Visual":"Trực quan","Visual edit":"Chỉnh sửa trực quan","Visual editor":"Trình sửa trực quan","Visual Editor":"Trình soạn thảo trực quan","Visual indicator color for the API card":"Màu sắc chỉ báo trực quan cho thẻ API","Visual Mode":"Chế độ Trực quan","Visual Parameter Override":"Ghi đè tham số trực quan","Visual prices use {{currency}} per declared unit; token prices are per 1M tokens. Raw expressions always use USD, with token terms divided by 1000000.":"Giá trực quan dùng {{currency}} cho mỗi đơn vị đã khai báo; giá token tính theo 1 triệu token. Biểu thức gốc luôn dùng USD, với các hạng tử token chia cho 1000000.","vLLM":"vLLM","vLLM API key, or EMPTY if authentication is disabled":"Khóa API vLLM, hoặc EMPTY nếu đã tắt xác thực","vLLM server address, without /v1":"Địa chỉ máy chủ vLLM, không gồm /v1","vLLM status":"Trạng thái vLLM","VolcEngine":"VolcEngine","vs. previous":"so với kỳ trước","Waffo":"Waffo","Waffo Aggregator Gateway":"Cổng tổng hợp Waffo","Waffo Pancake Dashboard":"Waffo Pancake Dashboard","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Cổng thanh toán Waffo Pancake","Waffo Pancake product created":"Đã tạo sản phẩm Waffo Pancake","Waffo Pancake product creation failed":"Tạo sản phẩm Waffo Pancake thất bại","Waffo Pancake save failed":"Lưu Waffo Pancake thất bại","Waffo Pancake settings saved":"Đã lưu cài đặt Waffo Pancake","Waffo Payment":"Thanh toán Waffo","Waffo Payment Gateway":"Cổng thanh toán Waffo","Waffo Public Key (Production)":"Waffo Public Key (Sản xuất)","Waffo Public Key (Sandbox)":"Khóa công khai Waffo (Sandbox)","Waiting":"Đang chờ","Waiting for email...":"Đang chờ email...","Waiting for two comparable samples. Counter resets restart the sampling window.":"Đang chờ hai mẫu có thể so sánh. Đặt lại bộ đếm sẽ bắt đầu lại khoảng lấy mẫu.","Waiting requests":"Yêu cầu đang chờ","Wallet":"Ví","Wallet First":"Ưu tiên ví","Wallet Management":"Quản lý ví","Wallet management and personal preferences.":"Quản lý ví và sở thích cá nhân.","Wallet Only":"Chỉ dùng ví","Wallet pre-consume bypass threshold (USD)":"Ngưỡng ví được miễn khấu trừ trước (USD)","Wallet quota limit exceeded":"Vượt phạm vi hạn mức ví","Warning":"Cảnh báo","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"Cảnh báo: URL cơ sở không nên kết thúc bằng /v1. API mới sẽ xử lý tự động. Điều này có thể gây ra lỗi yêu cầu.","Warning: Disabling 2FA will make your account less secure.":"Cảnh báo: Vô hiệu hóa 2FA sẽ khiến tài khoản của bạn kém an toàn hơn.","Warning: This action is permanent and irreversible!":"Cảnh báo: Hành động này là vĩnh viễn và không thể đảo ngược!","We apologize for the inconvenience.":"Chúng tôi xin lỗi vì sự bất tiện này.","We could not load instances.":"Không thể tải danh sách phiên bản.","We could not load system tasks.":"Không thể tải tác vụ hệ thống.","We could not load the setup status.":"Chúng tôi không thể tải trạng thái thiết lập.","We will prompt your device to confirm using biometrics or your hardware key.":"Chúng tôi sẽ yêu cầu thiết bị của bạn xác nhận bằng cách sử dụng sinh trắc học hoặc khóa bảo mật phần cứng của bạn.","We\'ll be back online shortly.":"Chúng tôi sẽ sớm trực tuyến trở lại.","Web search":"Tìm kiếm web","Web Search":"Tìm kiếm web","Webhook Configuration:":"Cấu hình Webhook:","Webhook public key (production)":"Khóa công khai Webhook (production)","Webhook public key (production) is required":"Bắt buộc nhập khóa công khai Webhook (production)","Webhook public key (sandbox)":"Khóa công khai Webhook (sandbox)","When a channel is disabled or re-enabled automatically, or a test of all channels finishes":"Khi một kênh bị tự động tắt hoặc bật lại, hoặc khi kiểm tra tất cả kênh hoàn tất","You can create at most {{count}} access tokens":"Bạn có thể tạo tối đa {{count}} token truy cập","Webhook public key (sandbox) is required":"Bắt buộc nhập khóa công khai Webhook (sandbox)","Webhook secret":"Bí mật webhook","Webhook Secret":"Bí mật Webhook","Webhook signing secret (leave blank unless updating)":"Mã bí mật ký webhook (để trống trừ khi cập nhật)","You cannot grant one or more of these permissions.":"Bạn không thể cấp một hoặc nhiều quyền trong số này.","Webhook URL":"URL Webhook","Webhook URL (Production):":"Webhook URL (Production):","Webhook URL (Test):":"Webhook URL (Test):","Webhook URL:":"URL Webhook:","Website is under maintenance!":"Website đang bảo trì!","WeChat":"WeChat","WeChat login QR code":"Mã QR đăng nhập WeChat","WeChat Pay":"WeChat Pay","WeChat sign in":"Đăng nhập WeChat","Week":"Tuần","Weekday":"Thứ trong tuần","Weekly":"Hàng tuần","Weekly token usage by model across the past few weeks":"Sử dụng token hàng tuần của từng mô hình trong vài tuần qua","Weekly token usage by model across the past year":"Sử dụng token theo mô hình hàng tuần trong năm qua","Weekly token usage by model since launch":"Sử dụng token theo mô hình hàng tuần kể từ khi ra mắt","Weekly Window":"Cửa sổ hàng tuần","Weight":"Trọng lượng","Weighted by request count":"Có trọng số theo số yêu cầu","Welcome back!":"Chào mừng trở lại!","Welcome to our New API...":"Chào mừng bạn đến với API mới của chúng tôi...","Well-Known URL":"URL Well-Known","Well-Known URL must start with http:// or https://":"URL Well-Known phải bắt đầu bằng http:// hoặc https://","What do you want to change?":"Bạn muốn thay đổi gì?","What would you like to know?":"Bạn muốn biết gì?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"Khi token dùng nhóm auto, hệ thống thử các nhóm từ trên xuống dưới cho đến khi tìm được nhóm khả dụng.","When billed as {{group}}":"Khi tính phí theo {{group}}","When conditions match":"Khi điều kiện thỏa mãn","When conditions match → {{name}}":"Điều kiện thỏa mãn → {{name}}","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"Khi thỏa điều kiện, giá cuối nhân với X. Nhiều điều kiện khớp nhân lại với nhau; giá trị < 1 hoạt động như giảm giá.","When disabled, all uploaded custom plugins are ignored and every platform falls back to its built-in factory plugin.":"Khi tắt, mọi plugin tùy chỉnh đã tải lên sẽ bị bỏ qua và mỗi nền tảng sẽ dùng plugin gốc tích hợp sẵn.","When disabled, the entire task plugin system stops serving, including factory and custom plugins.":"Khi tắt, toàn bộ hệ thống plugin tác vụ ngừng phục vụ, gồm cả plugin gốc và plugin tùy chỉnh.","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"Khi được bật, nếu các kênh trong nhóm hiện tại thất bại, hệ thống sẽ thử các kênh của nhóm tiếp theo theo thứ tự.","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.":"Khi bật, giữ mục ưu tiên ngay cả khi kênh ưu tiên bị tắt hoặc không còn dùng được cho nhóm/mô hình hiện tại. Để tắt để xóa mục đó và chọn kênh khác.","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"Khi bật, nội dung yêu cầu lớn sẽ được lưu tạm trên đĩa thay vì bộ nhớ, giảm đáng kể việc sử dụng bộ nhớ. Khuyến nghị dùng SSD.","When enabled, MjProxy callbacks are accepted (reveals server IP).":"Khi được bật, các callback của MjProxy được chấp nhận (lộ IP máy chủ).","When enabled, newly created tokens start in the first auto group.":"Khi được bật, các token mới được tạo sẽ bắt đầu trong nhóm tự động đầu tiên.","When enabled, prompts are scanned before reaching upstream models.":"Khi được bật,","When enabled, the store field will be blocked":"Khi được bật, trường store sẽ bị chặn","When enabled, this API key can be used to check your account\'s remaining and used quota.":"Khi được bật, bạn có thể dùng khóa API này để xem hạn mức còn lại và hạn mức đã dùng của tài khoản.","When enabled, users can pick this group when creating tokens.":"Khi bật, người dùng có thể chọn nhóm này khi tạo token.","When enabled, violation requests will incur additional charges.":"Khi bật, các yêu cầu vi phạm sẽ phải chịu phí bổ sung.","When enabled, zero-cost models also pre-consume quota before final settlement.":"Khi được bật, các mô hình không tốn phí cũng trừ trước hạn mức trước khi quyết toán cuối cùng.","When no conditions are set, the operation always executes.":"Khi không có điều kiện, thao tác luôn được thực thi.","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"Khi giám sát hiệu suất được bật và mức sử dụng tài nguyên vượt quá ngưỡng, các yêu cầu Relay mới sẽ bị từ chối.","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"Khi chạy trong container hoặc môi trường tạm thời, hãy đảm bảo tệp SQLite được ánh xạ vào bộ nhớ lưu trữ bền vững để tránh mất dữ liệu khi khởi động lại.","When the primary domain changes, the previous domain is automatically kept in the compatible domains list.":"Khi đổi tên miền chính, tên miền cũ sẽ tự động được giữ trong danh sách tên miền tương thích.","Whitelist":"Danh sách trắng","Whitelist (Only allow listed domains)":"Danh sách trắng (Chỉ cho phép các tên miền được liệt kê)","Whitelist (Only allow listed IPs)":"Danh sách trắng (Chỉ cho phép các IP đã liệt kê)","whsec_xxx":"whsec_xxx","Why only one store + product?":"Tại sao chỉ một cửa hàng + sản phẩm?","Why set a website domain?":"Tại sao cần nhập tên miền trang?","Why set this?":"Tại sao cần cài đặt?","Window:":"Cửa sổ:","Wire encoding for the embedding vectors":"Định dạng truyền cho vector embedding","with conflicts":"với các xung đột","With linked models":"Có mô hình liên kết","with the API key from your token settings.":"bằng API key từ trang Tokens của bạn.","With these settings, automatic disabling is off for all channels.":"Với cài đặt này, tự động vô hiệu hóa không có hiệu lực với bất kỳ kênh nào.","Without additional conditions, only the type above is used for pruning.":"Không có điều kiện bổ sung, chỉ type ở trên được sử dụng để dọn dẹp.","Without linked models":"Không có mô hình liên kết","Worked example":"Ví dụ minh họa","Worker Access Key":"Khóa truy cập nhân viên","Worker instances do not run master-only background tasks.":"Phiên bản worker không chạy các tác vụ nền chỉ dành cho master.","Worker metrics":"Số liệu từng worker","Worker Proxy":"Proxy Nhân viên","Worker URL":"URL của Worker","Workspaces":"Không gian làm việc","Write value to the target field":"Ghi giá trị vào trường đích","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"Xunfei","Year":"Năm","years":"năm","Yes":"Có","You are about to delete {{count}} API key(s).":"Bạn sắp xóa {{count}} khóa API.","You are offline. Updates will be checked when you reconnect.":"Bạn đang ngoại tuyến. Cập nhật sẽ được kiểm tra khi kết nối lại.","You are running the latest version ({{version}}).":"Bạn đang sử dụng phiên bản mới nhất ({{version}}).","You can add models manually or try fetching again.":"Bạn có thể thêm mô hình thủ công hoặc thử lấy lại.","You can close this tab once the binding completes or a success message appears in the original window.":"Bạn có thể đóng tab này sau khi quá trình liên kết hoàn tất hoặc thông báo thành công xuất hiện trong cửa sổ gốc.","You can create up to {{count}} access tokens":"Bạn có thể tạo tối đa {{count}} token truy cập","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"Bạn có thể thêm chúng theo cách thủ công trong \\"Tên mô hình tùy chỉnh\\", nhấp vào \\"Điền\\" rồi gửi, hoặc sử dụng các thao tác bên dưới để xử lý tự động.","You can only check in once per day":"Bạn chỉ có thể điểm danh một lần mỗi ngày","You can still edit non-sensitive operations fields such as models, groups, priority, and weight.":"Bạn vẫn có thể chỉnh sửa các trường vận hành không nhạy cảm như mô hình, nhóm, độ ưu tiên và trọng số.","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"Bạn cam kết không sử dụng hệ thống này để thực hiện, hỗ trợ hoặc gián tiếp thực hiện các hành vi vi phạm luật và quy định hiện hành, yêu cầu quản lý, quy tắc nền tảng, lợi ích công cộng hoặc quyền và lợi ích hợp pháp của bên thứ ba.","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"Bạn cam kết chỉ sử dụng API upstream, tài khoản, khóa, hạn mức và năng lực dịch vụ trong phạm vi ủy quyền hợp pháp nhận được từ nhà cung cấp dịch vụ upstream, nhà cung cấp mô hình hoặc chủ thể quyền liên quan, và sẽ không thực hiện bán lại, giao dịch, phân phối trái phép hoặc thương mại hóa không tuân thủ khác.","You do not have permission to edit channels":"Bạn không có quyền chỉnh sửa kênh","You do not have permission to edit sensitive channel settings.":"Bạn không có quyền chỉnh sửa cài đặt kênh nhạy cảm.","You do not have permission to perform this action.":"Bạn không có quyền thực hiện thao tác này.","You don\'t have necessary permission":"Bạn không có quyền cần thiết","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"Bạn đã nhận được ủy quyền hợp pháp cho API mô hình, tài khoản, khóa và hạn mức được kết nối.","You have unsaved changes":"Bạn có thay đổi chưa được lưu","You have unsaved changes. Are you sure you want to leave?":"Bạn có thay đổi chưa được lưu. Bạn có chắc chắn muốn rời đi không?","You Pay":"Bạn thanh toán","You save":"Bạn tiết kiệm","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"Bạn hiểu và tự chịu trách nhiệm pháp lý phát sinh từ việc triển khai, vận hành và thu phí.","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"Bạn hiểu rằng nhắc nhở tuân thủ này chỉ là thông báo rủi ro, không cấu thành tư vấn pháp lý, kết luận rà soát tuân thủ hoặc bảo đảm tính hợp pháp của việc sử dụng hệ thống; bạn nên tham khảo cố vấn pháp lý hoặc tuân thủ chuyên nghiệp dựa trên tình huống kinh doanh thực tế.","You will be redirected to Telegram to complete the binding process.":"Bạn sẽ được chuyển hướng đến Telegram để hoàn tất quá trình liên kết.","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"Bạn sẽ được chuyển hướng tự động. Bạn có thể quay lại trang trước nếu không có gì xảy ra sau vài giây.","Your account can edit sensitive channel settings.":"Tài khoản của bạn có thể chỉnh sửa cài đặt kênh nhạy cảm.","Your account cannot edit sensitive channel settings.":"Tài khoản của bạn không thể chỉnh sửa cài đặt kênh nhạy cảm.","{{name}} called {{count}} times, cost {{quota}}":"{{name}} được gọi {{count}} lần, chi phí {{quota}}","your AI integration?":"tích hợp AI của bạn?","Your Azure OpenAI endpoint URL":"URL điểm cuối Azure OpenAI của bạn","Your Bot Name":"Tên Bot của bạn","Your changes have not been saved.":"Các thay đổi chưa được lưu.","Your Cloudflare Account ID":"ID tài khoản Cloudflare của bạn","Your Discord OAuth Client ID":"Discord OAuth Client ID của bạn","Your Discord OAuth Client Secret":"Discord OAuth Client Secret của bạn","{{provider}} login and registration has not been enabled by administrator":"Quản trị viên chưa bật đăng nhập và đăng ký qua {{provider}}","{{provider}} returned empty user info, please check settings":"{{provider}} trả về thông tin người dùng trống, vui lòng kiểm tra cài đặt","{{provider}} top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"Nạp tiền qua {{provider}} thành công, số tiền đã nạp: {{quota}}, số tiền thanh toán: {{amount}}","Your GitHub OAuth Client ID":"Client ID OAuth GitHub của bạn","Your GitHub OAuth Client Secret":"Bí mật ứng dụng OAuth của GitHub của bạn","Your identity has been verified. Continue to the provider to finish linking your account.":"Danh tính đã được xác minh. Tiếp tục đến nhà cung cấp để hoàn tất liên kết tài khoản.","Your new backup codes are ready":"Mã dự phòng mới của bạn đã sẵn sàng","Your Referral Link":"Liên kết giới thiệu của bạn","Your setup guide is collapsed so usage stays in focus.":"Hướng dẫn thiết lập đã thu gọn để giữ phần sử dụng ở vị trí nổi bật.","Your Telegram Bot Token":"Mã thông báo bot Telegram của bạn","Your transaction history will appear here":"Lịch sử giao dịch của bạn sẽ xuất hiện ở đây","Your Turnstile secret key":"Khóa bí mật Turnstile của bạn","Your Turnstile site key":"Khóa site Turnstile của bạn","Zero retention":"Không lưu dữ liệu","Zhipu":"Zhipu","Zhipu GLM":"Zhipu GLM","Zhipu V4":"Zhipu V4","Zoom":"Zoom"}}'),E=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","{{count}} outside this view":"其中 {{count}} 個不在目前檢視","_copy":"_複製",",":",",", and":",和",",and ":",並","、":"、","? This action cannot be undone.":"?此操作無法撤銷。",". Please fix the JSON before saving.":"。請在儲存前修正 JSON。",". This action cannot be undone.":"。此操作無法撤銷。","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"(共 {{total}} 個,省略 {{omit}} 個)","(billed as vip itself, so base ratio of vip)":"(按 vip 自身收費,取 vip 的基礎倍率)","(falls back to billing as vip, so base ratio of vip)":"(回退按 vip 收費,用 vip 的基礎倍率)","(hits the override rule above)":"(命中上面的覆蓋規則)","(ID: {{id}})":"(ID: {{id}})","(instead of {{ratio}})":"(原本是 {{ratio}})","(Leave empty to dissolve tag)":"(留空以刪除標籤)","(matrix cell vip × premium is set)":"(矩陣單元 vip × premium 已設定)","(no matrix cell, so base ratio of default; the vip 0.8 is irrelevant)":"(無矩陣單元,取 default 的基礎倍率;vip 的 0.8 與此無關)","(no override rule, so base ratio of default; the 0.8 of vip plays no part)":"(沒有覆蓋規則,用 default 的基礎倍率;vip 自己的 0.8 不參與)","(Optional: redirect model names)":"(可選:重新導向模型名稱)","(Override all channels\' groups)":"覆蓋所有渠道的分組","(Override all channels\' models)":"覆蓋所有渠道的模型","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"支付寶\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]":"[{\\"name\\":\\"支付寶\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{bytes}} bytes":"{{bytes}} 位元組","{{category}} Models":"{{category}} 模型","{{channels}} channels, {{tasks}} in-flight tasks":"{{channels}} 個渠道,{{tasks}} 個進行中任務","{{completed}}/{{total}} completed":"已完成 {{completed}}/{{total}}","{{condition}} ({{timezone}})":"{{condition}}({{timezone}})","{{count}} / {{max}} groups selected":"已選擇 {{count}} / {{max}} 個分組","{{count}} announcements will be removed from the list.":"將從列表中移除 {{count}} 條公告。","{{count}} API shortcuts will be removed from the list.":"將從列表中移除 {{count}} 個 API 快捷方式。","{{count}} available channels":"{{count}} 個可用渠道","{{count}} channel(s) deleted":"已刪除 {{count}} 個渠道","{{count}} channel(s) disabled":"已停用 {{count}} 個渠道","{{count}} channel(s) enabled":"已啟用 {{count}} 個渠道","{{count}} channel(s) failed to disable":"{{count}} 個渠道停用失敗","{{count}} channel(s) failed to enable":"{{count}} 個渠道啟用失敗","{{count}} combinations":"{{count}} 種組合","{{count}} days ago":"{{count}} 日前","{{count}} days remaining":"剩餘 {{count}} 日","{{count}} disabled channel(s) deleted":"已刪除 {{count}} 個已停用的渠道","{{count}} enabled channels and {{tasks}} in-flight tasks still use this plugin.":"仍有 {{count}} 個啟用渠道和 {{tasks}} 個進行中任務使用此外掛。","{{count}} enabled groups":"{{count}} 個啟用分組","{{count}} FAQ entries will be removed from the list.":"將從列表中移除 {{count}} 個 FAQ 條目。","{{count}} hours ago":"{{count}} 小時前","{{count}} incidents":"{{count}} 宗事件","{{count}} incidents in the last 24 hours":"最近 24 小時 {{count}} 個異常桶","{{count}} incidents in the last 30 days":"最近 30 天 {{count}} 宗事件","{{count}} IP(s)":"{{count}} 個 IP","{{count}} linked model records":"{{count}} 筆關聯模型記錄","{{count}} log entries removed.":"已刪除 {{count}} 條日誌。","{{count}} minutes ago":"{{count}} 分鐘前","{{count}} model mapping(s)":"{{count}} 筆模型映射","{{count}} model(s) redirected":"已重新導向 {{count}} 個模型","{{count}} model(s) skipped because another model derives the same request name":"{{count}} 個模型與其他模型產生相同的請求名稱,已略過","{{count}} model(s) unchanged by the rule were skipped":"{{count}} 個模型不受規則影響,已略過","{{count}} models":"{{count}} 個模型","{{count}} months ago":"{{count}} 個月前","{{count}} override":"{{count}} 個覆蓋","{{count}} permissions":"{{count}} 項權限","{{count}} permissions are no longer available":"{{count}} 項權限不在目前的權限目錄中","{{count}} providers":"{{count}} 個服務方","{{count}} records selected. Bulk actions are available.":"已選取 {{count}} 筆記錄,可執行批次操作。","{{count}} selected":"已選取 {{count}} 筆","{{count}} selected models":"已選 {{count}} 個模型","{{count}} selected outside the current filters":"另有 {{count}} 個已選模型不在目前篩選範圍內","{{count}} selected targets available for bulk copy.":"已選擇 {{count}} 個目標,可用於大量複製。","{{count}} tiers":"{{count}} 檔","{{count}} Uptime Kuma groups will be removed from the list.":"將從列表中移除 {{count}} 個 Uptime Kuma 分組。","{{count}} vendors":"{{count}} 間供應商","{{count}} weeks ago":"{{count}} 週前","{{created}} models created, {{updated}} models updated, {{vendors}} vendors created.":"已建立 {{created}} 個模型、更新 {{updated}} 個模型,並新增 {{vendors}} 個供應商。","{{currency}} / {{unit}} tokens":"{{currency}} / {{unit}} Token","{{currency}} price per 1M input tokens.":"每百萬輸入 Token 的價格,單位為 {{currency}}。","{{currency}} price per 1M tokens.":"每百萬 Token 的價格,單位為 {{currency}}。","{{field}} updated to {{value}}":"{{field}} 已更新為 {{value}}","A channel test task is already running or queued. Cannot start this manual task":"已有渠道測試任務正在執行或等待中,無法啟動本次手動任務","a dashboard login session is required":"需要控制台登入工作階段","{{field}} updated to {{value}} for tag: {{tag}}":"標籤「{{tag}}」的 {{field}} 已更新為 {{value}}","{{first}} and {{second}}":"{{first}}且{{second}}","A model update task is already running or queued. Cannot start this manual task":"已有模型更新任務正在執行或等待中,無法啟動本次手動任務","{{first}} or {{second}}":"{{first}}或{{second}}","A repair task is already running. Please try again later":"已經有一個修復任務在執行中,請稍後再試","{{key}} · from {{source}}":"{{key}} · 來自 {{source}}","{{key}} · version {{version}} · from {{source}}":"{{key}} · 版本 {{version}} · 來自 {{source}}","A token can select at most {{max}} Auto groups":"每個令牌最多可選擇 {{max}} 個 Auto 分組","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"不支援 {{modality}}","{{modality}} supported":"支援 {{modality}}","{{n}} model(s) selected":"已選 {{n}} 個模型","{{operation}} (ID: {{id}})":"{{operation}}(ID: {{id}})","{{percent}}% OFF":"優惠 {{percent}}%","{{processed}} of {{total}} log entries processed.":"已處理 {{processed}} / {{total}} 條日誌。","{{protocol}} auth name":"{{protocol}} 驗證名稱","{{protocol}} auth value":"{{protocol}} 驗證值","{{protocol}} authentication":"{{protocol}} 驗證","{{selected}} of {{total}} changed fields selected":"已勾選 {{selected}} / {{total}} 個變更欄位","{{start}}–{{end}}":"{{start}}至{{end}}","{{success}} succeeded, {{failed}} failed":"{{success}} 個成功,{{failed}} 個失敗","{{target}} test failed":"{{target}} 測試失敗","{{target}} test succeeded":"{{target}} 測試成功","{{total}} models · {{syncable}} syncable · {{skipped}} skipped this time":"共 {{total}} 個模型 · 可同步 {{syncable}} · 本次不處理 {{skipped}}","{{unit}} tokens":"{{unit}} token","{{value}} tokens/s":"{{value}} Token/秒","{{value}}ms":"{{value}} 毫秒","{{value}}s":"{{value}} 秒","@lobehub/icons key":"@lobehub/icons 鍵","@lobehub/icons key name":"@lobehub/icons 鍵名","/status/":"/status/","/your/endpoint":"/your/endpoint","#1 App":"#1 套用程式","#1 by usage":"使用量第一","Access token expiry must be at least one hour from now.":"存取令牌的到期時間必須至少在一小時之後。","Access token name must be 1 to 64 characters.":"存取令牌名稱必須為 1 到 64 個字元。","access token not found":"找不到存取令牌","#1 Model":"#1 模型","% off":"折","`, `-nothinking`, and effort suffixes such as `-high` while routing to the correct Gemini variant. When off, model names are sent upstream unchanged.":"`、`-nothinking` 以及 `-high` 等推理強度後綴,同時路由到正確的 Gemini 變體。關閉後模型名原樣傳送給上游。","© 2025 Your Company. All rights reserved.":"© 2025 您的公司。保留所有權利。","+{{count}} more":"還有 {{count}} 項","| Based on":"| 基於","0 means data is kept permanently":"0 表示永久保留數據","0 means unlimited":"0 表示不限","1 Day":"1 日","1 day ago":"1 日前","1 hour":"1 小時","1 Hour":"1 小時","1 hour ago":"1 小時前","1 minute":"1 分鐘","1 minute ago":"1 分鐘前","1 Month":"1 個月","1 month ago":"1 個月前","1 week ago":"1 週前","1 year":"1 年","1 year ago":"1 年前","1. Create an application in your Gotify server":"1. 在您的 Gotify 伺服器中建立一個套用程式","1. Select models users call":"1. 選擇使用者呼叫的模型","1. Select upstream models":"1. 選擇上游模型","10 / page":"10 條/頁","100 / page":"100 條/頁","14 Days":"14 日","Action {{action}}":"操作 {{action}}","180 days":"180 天","192.168.1.1 10.0.0.0/8":"192.168.1.1 10.0.0.0/8","1M":"1 個月","1M token":"1M token","1W":"1 週","2. Copy the application token":"2. 複製套用程式令牌","2. Set names users call":"2. 設定使用者呼叫的名稱","2. Set upstream model names":"2. 設定傳給上游的名稱","20 / page":"20 條/頁","24 Hours":"24 小時","24 hours ago":"24 小時前","29 Days":"29 日","2xx, 504 and 524 are always excluded.":"2xx、504、524 一律排除。","3. Enter your Gotify server URL and token above":"3. 在上方輸入您的 Gotify 伺服器 URL 和令牌","3. Review mappings":"3. 確認對應結果","30 days":"30 天","30 Days":"30 日","30 days ago":"30 日前","30d change":"30 天變化","5 minutes":"5 分鐘","5-Hour Window":"5小時窗口","50 / page":"50 條/頁","7 Days":"7 日","7 days ago":"7 日前","80,443,8080":"80,443,8080","90 days":"90 天","A billing multiplier. Lower ratios mean lower API call costs.":"收費乘數,倍率越低,API 呼叫費用越低。","A focused home for keys, balance, routing, and service health.":"集中展示金鑰、餘額、路由和服務健康狀態。","A matching hash confirms the published file, not the safety of its code.":"校驗一致僅表示檔案與發布版本相符,不代表程式碼安全。","A Passkey created for www.example.com cannot be used on example.com. Keep the old website available so users can still verify there.":"為 www.example.com 建立的通行金鑰無法在 example.com 使用。請保留舊網站,讓使用者仍能在該網站驗證。","A security operation is already in progress.":"已有安全操作正在進行。","A selected model no longer exists. Reload the model list.":"所選模型已不存在,請重新載入模型清單。","A token that never expires stays valid until you revoke it. Set an expiration date when possible.":"永不過期的令牌在撤銷前一直有效,建議設定過期時間。","A vendor with this name already exists.":"此供應商名稱已存在。","About":"關於","About {{days}} days left":"約剩 {{days}} 日","About pricing currency":"關於定價貨幣","Accept Unpriced Models":"接受未定價模型","Accept upstream certificates that fail validation, such as self-signed ones. Only enable for trusted internal upstreams.":"接受無法通過驗證的上游證書,例如自簽章證書。僅對可信的內網上游開啟。","Accepts a JSON array of model identifiers that support the Imagine API.":"接受支援 Imagine API 的模型標識符的 JSON 陣列。","Accepts comma-separated status codes and inclusive ranges.":"接受逗號分隔的狀態碼和包含性範圍。","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"透過統一、標準的介面協定接入海量模型。承載 AI 套用,高效管理數位資產,連接未來。","Access Baidu Qianfan models through the legacy API":"透過百度千帆舊版 API 接入模型服務","Access Baidu Qianfan models through the V2 API":"透過百度千帆 V2 API 接入模型服務","Access Codex using ChatGPT subscription credentials":"使用 ChatGPT 訂閱憑證接入 Codex","Access Denied Message":"存取被拒訊息","Access Forbidden":"禁止存取","Access hosted model predictions through Replicate":"透過 Replicate 呼叫託管模型推論服務","Access model services through MokaAI":"透過 MokaAI 接入模型服務","Access model services through the OhMyGPT gateway":"透過 OhMyGPT 閘道接入模型服務","Access models from multiple providers through OpenRouter":"透過 OpenRouter 接入多個供應商的模型","Access models through Amazon Bedrock":"透過 Amazon Bedrock 接入模型服務","Access models through Cloudflare Workers AI":"透過 Cloudflare Workers AI 接入模型服務","Access models through Google Cloud Vertex AI":"透過 Google Cloud Vertex AI 接入模型服務","Access Policy (JSON)":"存取政策 (JSON)","Access previous conversations and start new ones.":"存取之前的對話並開始新的對話。","Access records":"存取記錄","Access Token":"存取令牌","Access token expired":"存取令牌已過期","Access token revoked":"存取權杖已撤銷","Access tokens":"存取令牌","Access tokens cannot use this feature":"存取令牌不能使用此功能","Access Zhipu models through the legacy API":"透過智譜舊版 API 接入模型服務","Access Zhipu models through the V4 API":"透過智譜 V4 API 接入模型服務","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Actions":"帳戶操作","Account binding":"帳戶綁定","Account Binding Management":"用戶連結管理","Account binding request":"帳戶綁定請求","Account Bindings":"用戶連結","Account bindings have changed. Start this operation again.":"帳戶綁定已變更,請重新操作。","Account created! Please sign in":"用戶已建立!請登入","Account deleted successfully":"用戶刪除成功","Account deletion":"帳號註銷","Account ID":"用戶 ID","Account ID *":"用戶 ID *","Account Info":"用戶資訊","Account password change":"帳戶密碼變更","Account security":"帳戶安全","Account unlinking":"帳戶解除綁定","Account used when authenticating with the SMTP server":"用於與 SMTP 伺服器進行身份驗證的用戶","acknowledge the related legal risks":"確認相關法律風險","Across all groups":"跨所有分組","Action":"操作","Action confirmation":"操作確認","Actions":"操作","Actions for {{name}}":"{{name}} 的操作","Activate / Roll back":"激活 / 回滚","Activate now":"立即啟用","Activating...":"啟用中...","active":"活躍","Active":"生效","Active apps":"活躍套用程式","Active Cache Count":"活躍緩存數","Active Files":"活躍檔案","Active models":"活躍模型","Active Tasks":"進行中任務","active users":"活躍用戶","Active version":"激活版本","Actively check all channels":"主動檢查全部渠道","Actively check auto-disable-enabled channels":"主動檢查已啟用自動停用的渠道","Actual Amount":"實付金額","Actual Model":"實際模型","Actual Model:":"實際模型:","Adapt `-thinking`, `-nothinking`, and effort suffixes such as `-high` to Anthropic native thinking behavior while keeping billing predictable. When off, model names are sent upstream unchanged.":"將帶 `-thinking`、`-nothinking` 以及 `-high` 等推理強度後綴的請求適配為 Anthropic 原生思考請求,並保持收費可預測。關閉後模型名原樣傳送給上游。","Add":"新增","Add \\"{{value}}\\"":"新增 \\"{{value}}\\"","Add {{added}} models and remove {{removed}} models":"新增 {{added}} 個模型,移除 {{removed}} 個模型","Add {{count}} mapping(s)":"新增 {{count}} 筆映射","Add {{title}}":"新增{{title}}","Add a group identifier to the auto assignment list.":"將分組標識符加入自動分配清單。","Add a new API key by providing necessary info.":"透過提供必要資訊新增 API 金鑰。","Add a new channel by providing the necessary information.":"透過提供必要資訊新增渠道。","Add a new model to the system by providing the necessary information.":"透過提供必要資訊向系統新增模型。","Add a new user by providing necessary info.":"透過提供必要資訊新增用戶。","Add a new vendor to the system":"向系統新增供應商","Add a vendor or adjust your search.":"新增供應商或調整搜尋條件。","Add an extra layer of security to your account":"為您的用戶添加額外的安全層","Add an index URL to browse installable plugins.":"新增一個索引 URL 即可瀏覽可安裝的外掛。","Add and submit":"新增並提交","Add Announcement":"新增公告","Add another login method before unlinking this account.":"請先新增其他登入方式,再解除此帳戶綁定。","Add API":"新增 API","Add API Shortcut":"新增 API 快捷方式","Add at least one condition to this group.":"請為此群組新增至少一個條件。","Add auto group":"新增自動分組","Add Auto group":"新增 Auto 分組","Adjusted by the channel adaptor":"管道適配器計費調整","Add chat preset":"新增聊天預設","Add condition":"新增條件","Add Condition":"新增條件","Add condition group":"新增條件群組","Add credits":"增加額度","Add custom model \\"{{value}}\\"":"新增自訂模型「{{value}}」","Add discount tier":"新增折扣等級","Add each model or tag you want to include.":"新增您想包含的每個模型或標籤。","Add FAQ":"新增問答","Add from available models...":"從可用模型中新增...","Add Funds":"增加資金","Add group":"新增分組","Administrator completed the order, amount added: {{quota}}, payment amount: {{amount}}":"管理員補單成功,儲值額度:{{quota}},支付金額:{{amount}}","Administrator reset the quota of subscription plan {{plan_title}} (ID: {{plan_id}})":"管理員重設訂閱方案 {{plan_title}}(ID: {{plan_id}})額度","Add Group":"新增分組","Add group rate limit":"新增組速率限制","Add group rules":"新增分組規則","Add groups in the order they should be tried.":"依嘗試順序新增分組。","Add management route":"新增管理路由","Add Mapping":"新增映射","Add metadata":"補充資料","Add metadata to all selected models first.":"請先為所有選取模型補充中繼資料。","Add method":"新增方式","Add missing models":"新增缺失模型","Add Mode":"新增模式","Add model":"新增模型","Add Model":"新增模型","Add model pricing":"新增模型定價","Add Models":"新增模型","Add new amount":"新增金額","Add new redemption code(s) by providing necessary info.":"透過提供必要資訊新增兌換碼。","Add OAuth Provider":"新增 OAuth 供應商","Add param/header":"新增參數/Header","Add payment method":"新增支付方式","Add photos or files":"新增相片或檔案","Add prefix":"新增前綴","Add pricing branch":"新增計費分支","Add product":"新增產品","Add Provider":"新增供應商","Add Quota":"新增配額","Add ratio override":"新增倍率覆蓋","Add route":"新增路由","Add routes individually or replace them from a template.":"逐一新增路由,或使用範本取代現有路由。","Add Row":"新增列","Add rule":"新增規則","Add Rule":"新增規則","Add rule group":"新增規則組","Add rules for a user group":"為用戶分組新增規則","Add selectable group":"新增可選分組","Add source":"新增來源","Add split":"新增分流","Add subscription":"新增訂閱","Add suffix":"新增後綴","Add tags...":"新增標籤...","Add template":"新增範本","Add tier":"新增檔位","Add time condition":"新增時間條件","Add time rule group":"新增時間規則組","Add to group {{path}}":"新增至群組 {{path}}","Add Uptime Kuma Group":"新增 Uptime Kuma 分組","Add User":"新增用戶","Add user group":"新增用戶分組","Add Vendor":"新增供應商","Add your API keys, set up channels and configure access permissions":"新增 API 金鑰,設定渠道並設定存取權限","Added":"新增","Added {{count}} model(s)":"已新增 {{count}} 個模型","Added {{count}} models from \\"{{name}}\\"":"已從「{{name}}」新增 {{count}} 個模型","Added models":"已新增模型","Added once per request. Set to 0 for usage-only billing.":"每次請求額外收取一次;不收固定費用時填 0。","Added successfully":"新增成功","Added to the usage cost. Set to 0 for no additional charge.":"在用量費用基礎上加收的金額,不加收時填 0。","Additional charge":"加收費用","Additional Conditions":"附加條件","Additional information":"附加資訊","Additional Information":"附加資訊","Additional Limit":"附加額度","Additional Limits":"附加額度","Additional metered capability":"附加收費能力","Additional request domains":"額外存取網域","Additional verification required":"需要進一步驗證","Adjust filters, then search to refresh the logs.":"調整篩選條件,然後搜尋以重新整理日誌。","Adjust Quota":"調整額度","Adjust quota for user “{{name}}”":"調整使用者「{{name}}」的額度","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"調整回應格式、提示詞行為、代理和上游自動化。","Adjust the appearance and layout to suit your preferences.":"調整外觀和佈局以配合您的偏好。","Adjust user quota":"調整使用者額度","Adjustment mode":"調整方式","Admin":"管理員","Admin access required":"需要管理員權限","Admin area":"管理員區域","Admin Channel Permissions":"管理員渠道權限","Admin notes (only visible to admins)":"管理員備註(僅管理員可見)","Admin Only":"僅限管理員","Admin Permissions":"管理員權限","Admin permissions updated":"已更新管理員權限","Administer user accounts and roles.":"管理用戶用戶和角色。","Administration":"管理","Administrator account":"管理員用戶","Administrator username":"管理員用戶名","Advance next reset time":"推進下次重置時間","Advanced":"進階","Advanced Configuration":"進階設定","Advanced Custom":"進階自訂","Advanced custom configuration is required":"必須設定進階自訂","Advanced custom configuration requires at least one route":"進階自訂至少需要一個路由","Advanced Custom Routes":"進階自訂路由","Advanced options":"進階選項","Advanced Options":"進階選項","Advanced platform configuration.":"進階平台設定。","Advanced Settings":"進階設定","Advanced text editing":"進階文字編輯","Aesthetic style":"畫風","Affected windows:":"影響窗口:","Affinity cache settings":"工作階段快取設定","After clicking the button, you\'ll be asked to authorize the bot":"點擊按鈕後,您將被要求授權機器人","After conversion":"轉換後","After conversion, expression reservation and rounding rules apply. Effective unit prices are preserved; individual rounded charges may differ.":"轉換後採用計費運算式的預扣與捨入規則。保留目前生效單價,單筆捨入後的費用可能不同。","Allow users to export logs":"允許使用者匯出日誌","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"停用後用戶端不再展示,但歷史訂單不受影響。是否繼續?","After enabling, client request headers are forwarded to the upstream, excluding standard authentication headers, cookies and transport headers:":"開啟後,用戶端請求標頭會轉送至上游,但會過濾常見驗證標頭、Cookie 和傳輸控制標頭:","After enabling, the original request body is forwarded to the upstream without gateway rewriting:":"開啟後,原始請求主體將直接傳送至上游,閘道不再改寫請求主體:","After enabling, the plan will be shown to users. Continue?":"啟用後套餐將在用戶端展示。是否繼續?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"作廢後該訂閱將立即失效,歷史記錄不受影響。是否繼續?","Agent ID":"代理 ID","Agent ID *":"代理 ID *","Aggregate tokens delivered across the platform":"平台累計輸出的 Token 量","Aggregate traffic across every category":"聚合所有分類的整體流量","Aggregated across enabled groups":"已聚合各啟用分組","Aggregated across the apps below":"已聚合下方套用","Aggregated traffic by upstream model provider":"按上游模型供應商聚合的流量","Aggregated usage metrics and trend charts.":"聚合使用指標和趨勢圖表。","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"聚合 50+ AI 供應商於統一 API 之後。輕鬆管理存取、追蹤成本、彈性擴展。","Aggregation bucket":"聚合時間桶","AGPL v3.0 License":"AGPL v3.0 協議","AI Application Infrastructure Foundation":"人工智能套用基座","Already checked in today":"今日已簽到","AI model testing environment":"AI模型測試環境","AI models":"AI 模型","AI models supported":"支援的 AI 模型","AI Proxy":"AI Proxy","AI Proxy Library":"AI 代理庫","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"AK/SK 模式:使用 AccessKey|SecretAccessKey|Region","Ali":"阿里百煉","Alipay":"支付寶","All":"全部","All API tokens":"全部 API 金鑰","All categories":"全部分類","All combinations are priced at zero. Matching requests will be billed as free.":"所有組合的價格皆為零。符合的請求將免費計費。","All conditions":"全部符合","All conditions must match before this tier is used.":"所有條件都匹配後才會使用此階梯。","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"所有編輯都是覆蓋操作。留空欄位將保持目前值不變。","All files exceed the maximum size.":"所有檔案都超過最大尺寸。","All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.":"所有分組名稱都在這裡管理。倍率在呼叫按該分組收費時生效;儲值倍率對所屬該分組的用戶生效。","All Groups":"所有分組","All groups share one pool of names managed in the pricing group table, but a name plays two different roles: as a user group it describes the user, as a token group it decides routing and billing.":"所有分組共用定價分組表中的同一批名稱,但同一個名稱有兩種角色:作為用戶分組表示用戶身份,作為令牌分組決定路由和收費。","All models":"所有模型","Announcement #{{index}} content cannot exceed 500 characters":"第 {{index}} 個公告的內容長度不能超過 500 字元","Announcement #{{index}} has an invalid publish date format":"第 {{index}} 個公告的發布日期格式錯誤","Announcement #{{index}} has an invalid type value":"第 {{index}} 個公告的類型值不合法","Announcement #{{index}} is missing the content field":"第 {{index}} 個公告缺少內容欄位","Announcement #{{index}} is missing the publish date field":"第 {{index}} 個公告缺少發布日期欄位","Announcement #{{index}} note cannot exceed 100 characters":"第 {{index}} 個公告的說明長度不能超過 100 字元","Announcement #{{index}} publish date cannot be empty":"第 {{index}} 個公告的發布日期不能為空","All Models":"所有模型","All models in use are properly configured.":"所有正在使用的模型都已正確設定。","All Must Match (AND)":"全部滿足(AND)","All nodes":"全部節點","All playground messages saved in this browser will be removed. This cannot be undone.":"儲存在此瀏覽器中的所有遊樂場訊息都將被移除。此操作無法撤銷。","All requests":"所有請求","All requests must include":"所有請求必須攜帶","Announcements cannot exceed 100 entries":"系統公告數量不能超過 100 個","All results":"所有結果","Another log export is running. Try again after it finishes.":"已有一個日誌匯出正在進行,請等它完成後再試。","All routes":"全部路由","All Status":"所有狀態","All Sync Status":"所有同步狀態","All systems operational":"所有系統正常運作","All Tags":"所有標籤","All tokens":"所有權杖","All Types":"所有類型","All upstream data is trusted":"所有上游數據均受信任","All users":"全部用戶","All Vendors":"所有供應商","All-time":"全部時間","Allocated Memory":"已分配記憶體","Allow accountFilter parameter":"允許 accountFilter 參數","Allow balance redemption":"允許餘額兌換","Allow Claude beta query passthrough":"允許 Claude beta 查詢透傳","Allow clients to query configured prices via `/api/ratio`.":"允許用戶端透過 `/api/ratio` 查詢已設定的價格。","Allow clients to query configured ratios via `/api/ratio`.":"允許用戶端透過 `/api/ratio` 查詢已設定的比例。","API info #{{index}} contains disallowed content":"第 {{index}} 個 API 資訊包含不允許的內容","API info #{{index}} description cannot exceed 200 characters":"第 {{index}} 個 API 資訊的說明長度不能超過 200 字元","API info #{{index}} has a URL that cannot be parsed: {{error}}":"第 {{index}} 個 API 資訊的 URL 無法解析:{{error}}","API info #{{index}} has an invalid color value":"第 {{index}} 個 API 資訊的顏色值不合法","API info #{{index}} has an invalid URL format":"第 {{index}} 個 API 資訊的 URL 格式不正確","API info #{{index}} is missing the color field":"第 {{index}} 個 API 資訊缺少顏色欄位","API info #{{index}} is missing the description field":"第 {{index}} 個 API 資訊缺少說明欄位","API info #{{index}} is missing the route description field":"第 {{index}} 個 API 資訊缺少線路描述欄位","API info #{{index}} is missing the URL field":"第 {{index}} 個 API 資訊缺少 URL 欄位","API info #{{index}} route description cannot exceed 100 characters":"第 {{index}} 個 API 資訊的線路描述長度不能超過 100 字元","API info #{{index}} URL cannot exceed 500 characters":"第 {{index}} 個 API 資訊的 URL 長度不能超過 500 字元","Allow HTTP image requests":"允許 HTTP 圖像請求","API info cannot exceed 50 entries":"API 資訊數量不能超過 50 個","Allow include usage obfuscation passthrough":"允許 include 用量混淆透傳","Allow inference geography passthrough":"允許推理地理位置透傳","Allow inference_geo passthrough":"允許 inference_geo 透傳","Allow Insecure Origins":"允許不安全來源","Allow listing when a channel is available and the user has group access. This does not change API access.":"允許顯示後,仍需有可用渠道,並符合使用者群組存取條件。不影響 API 存取權限。","Allow metadata sync":"允許資料同步","Allow new users to register":"允許新用戶註冊","Allow Private IPs":"允許私有 IP","Allow querying user quota":"允許查詢使用者額度","Allow registration with password":"允許使用密碼註冊","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"允許請求私有 IP 範圍 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"允許重試","Allow safety_identifier passthrough":"允許透傳 safety_identifier","Allow self-signed or hostname-mismatched SMTP certificates":"允許自簽章或主機名稱不匹配的 SMTP 證書","Allow service_tier passthrough":"允許透傳 service_tier","Allow speed passthrough":"允許 speed 透傳","Allow updates":"允許更新","Allow upstream callbacks":"允許上游Callback","Allow users to check in daily for random quota rewards":"允許用戶每日簽到獲取隨機額度獎勵","Allow users to enter promo codes":"允許用戶輸入促銷代碼","Allow users to log in with password":"允許用戶使用密碼登入","Allow users to register and sign in with Passkey (WebAuthn)":"允許用戶使用通行金鑰 (WebAuthn) 註冊和登入","Allow users to sign in with Discord":"允許用戶使用 Discord 登入","Allow users to sign in with GitHub":"允許用戶使用 GitHub 登入","Allow users to sign in with LinuxDO":"允許用戶使用 LinuxDO 登入","Allow users to sign in with OpenID Connect":"允許用戶使用 OpenID Connect 登入","Allow users to sign in with Telegram":"允許用戶使用 Telegram 登入","Allow users to sign in with this provider":"允許用戶使用此供應商登入","Allow users to sign in with WeChat":"允許用戶使用微信登入","Allow using models without price configuration":"允許使用未設定價格的模型","Allow wallet balance after quota used up":"額度用盡後允許使用錢包餘額","Allowed":"允許","Allowed hosts":"允許存取的主機","Allowed Origins":"允許的 Origins","Allowed Passkey websites":"允許使用通行密鑰的網站","Allowed Ports":"允許的端口","Allows selected fields to be overwritten after a sync preview. No automatic synchronization.":"允許在預覽確認後覆寫所選欄位,不會自動同步。","Already have an account?":"已有用戶?","Also remove custom pricing":"同時移除自訂定價","Also remove from all channels":"同時從所有渠道移除","Also remove pricing":"同時移除定價","Always matches (default tier).":"始終匹配(預設檔位)。","Amount":"金額","Amount cannot be changed when editing.":"編輯時無法更改數量。","Amount discount":"金額折扣","Amount Due":"應付金額","Amount must be a whole number":"金額必須為整數","Amount must be greater than 0":"金額必須大於 0","Amount of quota to credit to user account.":"添加到用戶用戶的配額數量。","Amount options must be a JSON array":"金額選項必須是 JSON 陣列","Amount the user pays to purchase this plan (USD).":"用戶購買該套餐需支付的金額(美元)。","Amount the user pays to purchase this plan; the actual currency depends on the payment gateway.":"用戶購買該套餐需支付的金額,具體幣種由支付渠道決定","Amount to pay:":"待支付金額:","An empty field uses the system website address. If Passkeys already work, keep the existing domain.":"留空時使用系統網站位址。若通行金鑰已能正常使用,請保留現有網域。","An expression draft already exists. Open the Expression tab to keep editing it.":"已有計費運算式草稿,請開啟「計費運算式」分頁繼續編輯。","An unexpected error occurred":"發生意外錯誤","An unknown error occurred":"發生未知錯誤","Analyze data":"分析數據","and":"和","Announcement added. Click \\"Save Settings\\" to apply.":"公告已新增。點擊「儲存設定」以套用。","Announcement content":"公告內容","Announcement deleted. Click \\"Save Settings\\" to apply.":"公告已刪除。點擊「儲存設定」以套用。","Announcement Details":"公告詳情","Announcement displayed to users (supports Markdown & HTML)":"向用戶顯示的公告(支援 Markdown 和 HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"公告已更新。點擊「儲存設定」以套用。","Announcements":"公告","Announcements saved successfully":"公告儲存成功","Answer":"答案","Answers for common access and billing questions":"存取與收費常見問題解答","Anthropic":"Anthropic","Anthropic Messages to OpenAI Chat":"Anthropic Messages 到 OpenAI Chat","Anthropic Messages to OpenAI Responses":"Anthropic Messages 到 OpenAI Responses","Any condition":"任一符合","Any Match (OR)":"任一滿足(OR)","Anyone can publish an index. A plugin installed from a third-party source has the same access as one you upload by hand: review its source before installing.":"任何人都可以發布索引。從第三方來源安裝的外掛與你手動上傳的外掛擁有完全相同的權限,請在安裝前審查其原始碼。","API":"API","API Access":"API 存取","API Addresses":"API 地址","API Base URL":"API 基礎 URL","API Base URL (Important: Not Chat API)":"API 基礎 URL (重要:非聊天 API)","API Base URL (Important: Not Chat API) *":"API 基礎 URL (重要:非聊天 API) *","API Base URL *":"API 基礎 URL *","API Endpoints":"API 端點","API Info":"API 資訊","API info added. Click \\"Save Settings\\" to apply.":"API 資訊已新增。點擊「儲存設定」以套用。","API info deleted. Click \\"Save Settings\\" to apply.":"API 資訊已刪除。點擊「儲存設定」以套用。","API info saved successfully":"API 資訊儲存成功","API info updated. Click \\"Save Settings\\" to apply.":"API 資訊已更新。點擊「儲存設定」以套用。","API key":"API 金鑰","API Key":"API 金鑰","API Key (one per line for batch mode)":"API 金鑰(大量模式下每行一個)","API Key (Production)":"API 金鑰(生產)","API Key (Sandbox)":"API 金鑰(沙盒)","API Key *":"API 金鑰 *","API Key created successfully":"API 金鑰建立成功","API Key deleted successfully":"API 金鑰刪除成功","API Key disabled successfully":"API 金鑰停用成功","API Key enabled successfully":"API 金鑰啟用成功","API key from the provider":"來自供應商的 API 金鑰","API key is loading, please try again in a moment":"API 金鑰正在載入,請稍後再試","API key is required":"需要 API 金鑰","API Key mode (does not support batch creation)":"API Key 模式(不支援大量建立)","API Key mode: use APIKey|Region":"API Key 模式:使用 APIKey|Region","API Key Quota":"權杖額度","API Key updated successfully":"API 金鑰更新成功","API keys":"API 金鑰","API Keys":"API 金鑰","API Private Key":"API 私鑰","API Requests":"API 請求","API secret":"API 密鑰","API token batch deletion":"API 權杖批次刪除","API token batch key access":"API 權杖金鑰批次檢視","API token configuration update":"API 權杖設定更新","API token creation":"API 權杖建立","API token deletion":"API 權杖刪除","API token key access":"API 權杖金鑰檢視","API token management":"API令牌管理","API token status update":"API 權杖狀態更新","API URL":"API URL","API usage records":"API使用記錄","API version":"API 版本","API Version":"API 版本","API2GPT":"API2GPT","Ascending":"升冪","Audio input cost {{quota}}":"音訊輸入花費 {{quota}}","App":"套用程式","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"此處展示的套用排行僅為預覽用模擬數據,待後端對接完成後將替換為真實數據。","Append":"追加","Append mode: New keys will be added to the end of the existing key list":"追加模式:新鍵將添加到現有鍵清單的最後","Append Template":"追加模板","Append to channel":"追加到渠道","Append to End":"追加到最後","Append to existing keys":"追加到現有金鑰","Append value to array / string / object end":"把值追加到陣列/字串/物件最後","appended":"已追加","Applicable channels":"適用管道","Applicable conditions":"適用條件","Application":"套用程式","Applied {{name}} pricing to {{count}} models":"已將 {{name}} 的定價套用到 {{count}} 個模型","Applied changes":"已套用的變更","Applied upstream model changes to {{count}} channels":"對 {{count}} 個渠道套用了上游模型變更","Applied upstream model changes to channel (ID: {{id}})":"對渠道(ID: {{id}})套用了上游模型變更","Applies to custom completion endpoints. JSON map of model → ratio.":"適用於自訂補全端點。模型 → 比例的 JSON 映射。","Apply":"套用","Apply {{count}} model changes":"套用 {{count}} 個模型的變更","Apply {{field}} for {{name}}":"為 {{name}} 套用{{field}}","Apply All Upstream Updates":"套用所有上游更新","Apply changes":"套用變更","Apply disable rules to upstream request errors and scheduled or bulk health checks":"將停用規則套用於上游請求錯誤,以及定時或批次健康檢查","Apply Filters":"套用篩選器","Apply IP Filter to Resolved Domains":"對已解析的網域套用 IP 篩選器","Apply Overwrite":"套用覆蓋","Apply plan":"套用方案","Apply reset":"執行重置","Apply selected changes":"確認套用所選變更","Apply Sync":"套用同步","Apply to all rows":"套用至所有列","Apply to draft":"套用至草稿","Applying...":"正在套用...","Approx.":"約","Approximate prices for common specs.":"常見規格的參考價。","apps":"個套用","Apps":"套用","apps tracked":"個套用追蹤中","Apps using the most tokens through new-api":"透過 new-api 消耗 Token 最多的套用","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"也在此處列出。將它們從模型中移除,以保持 `/v1/models` 回應對用戶友好並隱藏供應商特定的名稱。","Are you sure you want to delete":"您確定要刪除嗎","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"您確定要刪除 {{count}} 個模型嗎?此操作無法撤銷。","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"您確定要刪除所有自動停用的金鑰嗎?此操作無法撤銷。","Are you sure you want to delete channel \\"{{name}}\\"? This action cannot be undone.":"確定要刪除渠道「{{name}}」嗎?此操作無法撤銷。","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"確定要刪除部署「{{name}}」嗎?此操作不可撤銷。","Are you sure you want to delete group \\"{{name}}\\"? This action cannot be undone.":"確定要刪除分組「{{name}}」嗎?此操作無法撤銷。","Auto group {{group}} is duplicated":"Auto 分組 {{group}} 重複","Auto group {{group}} is unavailable or unauthorized":"Auto 分組 {{group}} 不可用或無權存取","Are you sure you want to delete model \\"{{name}}\\"? This action cannot be undone.":"確定要刪除模型「{{name}}」嗎?此操作無法撤銷。","Are you sure you want to delete this key? This action cannot be undone.":"您確定要刪除此金鑰嗎?此操作無法撤銷。","Are you sure you want to disable all enabled keys?":"您確定要停用所有已啟用的金鑰嗎?","Are you sure you want to enable all keys?":"您確定要啟用所有金鑰嗎?","Are you sure you want to enable plugin {{name}} ({{key}})?":"確定要啟用外掛程式 {{name}}({{key}})嗎?","Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.":"您確定要手動完成此訂單嗎?用戶將獲得相應的配額。","Are you sure you want to sign out? You will need to sign in again to access your account.":"您確定要登出嗎?您需要再次登入才能存取您的用戶。","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"確定要解綁該用戶的 {{provider}} 連結嗎?解綁後該用戶將無法透過此方式登入。","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"確定要解綁 {{provider}} 嗎?解綁後將無法透過此方式登入。","Are you sure?":"您確定嗎?","Area Chart":"面積圖","Args (space separated)":"參數 (空格分隔)","Arguments JSON":"參數 JSON","Arguments must be a JSON array":"參數必須是 JSON 陣列","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"聊天用戶端預設陣列。每個項目都是一個物件,包含一個鍵值對:用戶端名稱及其 URL。","Artifacts":"製品","Asc":"升序","Ask anything":"隨便問","Assign models from the model list to see them here.":"在模型清單中設定供應商歸屬後,模型將顯示於此處。","Assigned by administrator only":"僅管理員分配","Assigned by administrators and used to represent a user level, such as default or vip.":"由管理員分配,用於表示用戶等級,例如 default 或 vip。","Async":"異步","Async task polling":"異步任務輪詢","Async Task Public Address":"非同步任務對外地址","Async task refund":"異步任務退款","At least one model regex pattern is required":"至少需要一個模型正則匹配模式","At least one valid key source is required":"至少需要一個有效的金鑰來源","Attach":"附加","Attempt":"嘗試","Audio":"音頻","Audio and Realtime pricing must be converted manually.":"音訊及 Realtime 定價需手動轉換。","Audio and text-only requests keep their respective pricing.":"音訊請求和純文字請求分別沿用原計費規則。","Audio comp.":"音頻補全","Audio completion ratio":"音頻補全倍率","Audio In":"音頻輸入","Audio input":"音頻輸入","Audio Input":"語音輸入","Audio input price":"音頻輸入價格","Audio Input Price":"音頻輸入價格","Audio Out":"音頻輸出","Audio output":"音頻輸出","Audio Output":"語音輸出","Audio output price":"音頻輸出價格","Audio output price requires an audio input price.":"音頻輸出價格需要先填寫音頻輸入價格。","Audio playback failed":"音頻無法播放","Audio Preview":"音樂預覽","Audio ratio":"音頻倍率","Audio requests":"音訊請求","Audio Tokens":"語音 Token","Audit access changed. Showing only your records.":"稽核存取權限已變更,現在僅顯示本人的記錄。","Audit Logs":"稽核日誌","Audit metadata is unavailable":"稽核附加資訊無法使用","Audit records start after this feature was enabled. Earlier records remain in Common Logs.":"僅顯示此功能啟用後的稽核記錄,歷史記錄仍在一般日誌中。","Auth":"認證","Auth configured":"認證已設定","Auth name":"認證名稱","Auth name is required":"認證名稱不能為空","Auth Style":"認證方式","Auth type is invalid":"認證類型無效","Auth value":"認證值","Auth value is required":"認證值不能為空","auth.resetPasswordConfirm.backToLogin":"返回登入","auth.resetPasswordConfirm.confirm":"確認重設密碼","auth.resetPasswordConfirm.description":"確認重設請求以產生新密碼。","auth.resetPasswordConfirm.retry":"重試 ({{seconds}}s)","auth.resetPasswordConfirm.success":"您的密碼已成功重設","Authentication":"身份驗證","Authentication for upstream requests; channel credentials may still be used.":"用於呼叫上游服務的驗證方式;外掛仍可能使用管道憑證。","Authentication Method":"認證方式","Authenticator code":"身份驗證器代碼","Authenticator code or backup code":"驗證器驗證碼或備用碼","Authorization callback URL":"授權回呼 URL","Authorization Endpoint":"授權端點","Authorization Endpoint (Optional)":"授權端點(可選)","Authorize":"授權","Auto":"自動","Auto (Circuit Breaker)":"自動分組(熔斷)","Auto assignment order":"自動分配順序","Auto Ban":"自動封鎖","Auto detect (default)":"自動偵測(預設)","Auto Disabled":"自動停用","Bark push URL cannot be empty":"Bark 推送 URL 不能為空","Auto group behavior":"自動分組行為","Auto Group Chain":"自動分組鏈","Auto group order":"自動分組順序","Auto groups must not contain duplicates":"Auto 分組不得重複","Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.":"自動在可用時協商 HTTP/2。HTTP/1.1 會在並發時使用多條保持連線的連線。","Auto refresh":"自動重新整理","Auto refresh (5s)":"自動重新整理(5秒)","Auto Sync Upstream Models":"自動同步上游模型","Auto-disable channel":"異常自動停用","Auto-disable disabled":"不參與自動停用","Auto-disable enabled":"參與自動停用","Auto-disable rules":"自動停用規則","Auto-disable status codes":"自動停用狀態碼","Auto-disable-enabled channels only":"僅測試已啟用自動停用的渠道","Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.":"此模式僅探測已啟用自動停用且未被手動停用的渠道。","Auto-discover":"自動發現","Auto-discovers endpoints from the provider":"自動從供應商發現端點","Auto-fill when one field exists and another is missing":"在一個欄位有值、另一個缺失時自動補齊","Auto-refreshing every {{seconds}}s":"每 {{seconds}} 秒自動重新整理","Auto-retry status codes":"自動重試狀態碼","Automatic from system website address":"從系統網站位址自動取得","Automatic selection":"自動選擇","Automatically disable channel on repeated failures":"重複失敗時自動停用渠道","Automatically disable channels exceeding this response time":"自動停用超出此回應時間的渠道","Automatically disable channels when tests fail":"當測試失敗時自動停用渠道","Automatically probe all channels in the background":"在背景自動探測所有渠道","Automatically replaces upstream callback URLs with the server address.":"自動將上游Callback URL 替換為伺服器地址。","Automatically selects the best available group with circuit breaker mechanism":"自動選擇可用分組,失敗時觸發熔斷切換","Automatically sync model list when upstream changes are detected":"偵測到上游模型變更時自動同步模型清單","Availability (last 24h)":"可用率(最近 24 小時)","Available":"可用","Available Balance":"可用餘額","Available channels: {{count}}":"可用渠道 {{count}}","Available credits are ordered by soonest expiration.":"可用次數按最早到期排序。","Available disk space":"可用磁碟空間","Available Models":"可用模型","Available reset credits":"可用重置次數","Available Rewards":"可用獎勵","Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.":"可用變數:{{provider}}、{{field}}、{{op}}、{{required}}、{{current}},以及 {{current.roles}} 等路徑變數。","Average latency":"平均延遲","Average latency, TTFT, and success rate by group":"各分組的平均延遲、首 Token 延遲和成功率","Average latency, TTFT, TPS, and success rate":"平均延遲、TTFT、TPS 和成功率","Average RPM":"平均 RPM","Average time-to-first-token (TTFT) by group":"各分組的平均首 Token 延遲(TTFT)","Average tokens per second sustained per group":"各分組持續輸出的平均每秒 token 數","Average TPM":"平均 TPM","Average TTFT":"平均首 Token 延遲","Awake engines":"已喚醒引擎數","Batch-adding Vertex AI keys requires a JSON array, for example {{example}}. Check the input: {{error}}":"批次新增 Vertex AI 必須使用標準的 JSON 陣列格式,例如 {{example}},請檢查輸入:{{error}}","AWS":"AWS","AWS API":"AWS 介面","AWS Bedrock Claude Compat":"AWS Bedrock Claude 兼容模板","AWS Key Format":"AWS 金鑰格式","Azure":"Azure","AZURE_OPENAI_ENDPOINT":"AZURE_OPENAI_ENDPOINT","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"返回","Back to configuration":"返回設定","Back to Dashboard":"返回控制台","Billed per request":"按次計費","Back to footnote {{id}} reference":"返回腳註 {{id}} 引用處","Back to Home":"返回主頁","Back to login":"返回登入","Back to Models":"返回模型","Backed up":"已備份","Billing expressions must be a JSON object mapping models to expressions: {{error}}":"計費運算式設定必須是模型到運算式的 JSON 物件:{{error}}","Background":"背景執行","Background job tracker for queued work.":"佇列工作的背景作業追蹤器。","Backup Code":"備用代碼","Backup code must be in format XXXX-XXXX":"備用代碼必須為 XXXX-XXXX 格式","Backup codes regenerated successfully":"備用代碼重新生成成功","Backup codes remaining: {{count}}":"剩餘備用代碼:{{count}}","Bad Request":"參數錯誤","Badge Color":"徽章顏色","Billing parameters: {{params}}":"計算參數:{{params}}","Baidu":"百度","Baidu V2":"百度 V2","Balance":"餘額","Balance and top-up management":"餘額儲值管理","Balance depleted":"餘額已耗盡","Balance is shown in quota units":"餘額以額度單位顯示","Balance queried successfully":"餘額查詢成功","Balance Query":"餘額查詢","Balance Query route does not support pass-through":"餘額查詢路由不支援透傳","Balance response not recognized":"無法識別餘額回應","Balance updated successfully":"餘額更新成功","Balance updated: {{balance}}":"餘額已更新:{{balance}}","Bar Chart":"柱狀圖","Bark Push URL":"Bark 推送 URL","Binding successful":"綁定成功","Base":"基礎","Base address provided by your Epay service":"您的 Epay 服務提供的基礎地址","Base amount. Actual deduction = base amount × system group rate.":"基礎金額,實際扣費 = 基礎金額 × 系統分組倍率。","Base charge":"基礎費用","Base group ratios apply until you add an override.":"未設定覆寫規則時,使用分組基礎倍率。","Base input and output token prices for this tier.":"此階梯的基礎輸入和輸出 token 價格。","Base input price only":"僅基礎輸入價格","Base Limits":"基礎額度","Base multipliers applied when users select specific groups.":"當用戶選擇特定分組時套用的基礎乘數。","Base Price":"基礎價格","Base rate limit windows for this account.":"目前賬號的基礎額度窗口。","Base URL":"API 地址","Base URL *":"基礎 URL *","Base URL is required for this channel type":"此渠道類型需要填寫 Base URL","Bonus for inviting a user {{quota}}":"邀請使用者贈送 {{quota}}","Base URL is required when an advanced route uses an upstream path":"進階路由使用上游路徑時必須填寫 Base URL","Base URL of your Uptime Kuma instance":"您的 Uptime Kuma 實例的基礎 URL","Basic Authentication":"基本身份驗證","Basic Configuration":"基本設定","Basic Info":"基本資訊","Basic Information":"基本資訊","Basic Templates":"基礎模板","Batch Add":"批次新增","Batch Add (one key per line)":"大量新增(每行一個金鑰)","Batch add mappings":"批次新增映射","Batch channel test":"渠道大量測試","Batch delete API tokens":"批次刪除 API 權杖","Batch delete failed":"大量刪除失敗","Batch deleted {{count}} channels":"大量刪除 {{count}} 個渠道","Batch deleted {{count}} redemption codes":"批次刪除了 {{count}} 個兌換碼","Batch deleted redemption codes (count not recorded)":"批次刪除兌換碼(數量未記錄)","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"大量檢測完成:渠道 {{channels}} 個,新增 {{add}} 個,刪除 {{remove}} 個,失敗 {{fails}} 個","Batch detection failed":"大量檢測失敗","Batch disable failed":"大量停用失敗","Batch Edit":"大量編輯","Batch edit all channels with this tag. Leave fields empty to keep current values.":"大量編輯帶有此標籤的所有渠道。留空欄位以保留目前值。","Batch Edit by Tag":"按標籤大量編輯","Batch enable failed":"大量啟用失敗","Batch Operations":"大量操作","Batch processing failed":"大量處理失敗","Batch redirect":"批次重新導向","Batch set tag for {{count}} channels":"大量为 {{count}} 個渠道設定標籤","Batch test completed: {{count}} succeeded":"大量測試完成:{{count}} 個成功","Batch test completed: {{success}} succeeded, {{failed}} failed":"大量測試完成:{{success}} 個成功,{{failed}} 個失敗","Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed":"大量測試已停止:已完成 {{completed}}/{{total}},{{success}} 個成功,{{failed}} 個失敗","Batch testing models...":"正在大量測試模型...","Batch updated channel status ({{count}}/{{total}} changed)":"批次更新渠道狀態({{count}}/{{total}} 個已變更)","Batch upstream model update":"上游模型大量更新","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"已大量處理上游模型更新:渠道 {{channels}} 個,加入 {{added}} 個,刪除 {{removed}} 個,失敗 {{fails}} 個","Before conversion":"轉換前","Best for single-tenant deployments. Pricing and billing options stay hidden.":"適合單用戶部署。定價和收費選項將被隱藏。","Best TTFT":"最優 TTFT","Billable image count":"計費圖片數量","Billable input tokens":"收費輸入 token","Billable output tokens":"收費輸出 token","Billable token breakdown":"計價 Token 明細","Billed as default. No cell for this combination, so the base ratio of default applies — the 0.8 of vip plays no part.":"按 default 收費。矩陣中沒有這個組合的格子,因此用 default 的基礎倍率——vip 自己的 0.8 不參與。","Billed as premium. The highlighted cell matches, so the override 0.3 applies.":"按 premium 收費。命中高亮的格子,因此使用覆蓋倍率 0.3。","Billing":"收費","Billing & Payment":"收費與支付","Billing currency":"收費貨幣","Billing Details":"收費詳情","Billing expression":"計費運算式","Billing group":"收費分組","Billing group = default (the token has a group, so use it)":"收費分組 = default(令牌設定了分組,就用令牌的)","Billing group = premium (the token has a group, so use it)":"收費分組 = premium(令牌設定了分組,就用令牌的)","Billing group = vip (the token has no group, so use the user group)":"收費分組 = vip(令牌沒設定分組,就用用戶自己的分組)","Billing History":"收費歷史","Billing management":"儲值與訂閱管理","Billing Mode":"收費模式","Billing parameters":"計費參數","Billing Path":"收費路徑","Billing Process":"收費過程","Billing rule: each call is billed as the token group (falling back to the user group when the token has none). The base ratio always comes from that billing group, not from the user group. To give a user group a special price on another billing group, add an entry in the override matrix.":"收費規則:每次呼叫按令牌分組收費(令牌未設定分組時回退到用戶分組)。基礎倍率始終取該收費分組的倍率,而不是用戶分組的倍率。若要讓某用戶分組在使用其他收費分組時享受特殊價格,請在覆蓋矩陣中添加條目。","Billing Source":"收費來源","Billing values must be finite and non-negative.":"計費數值必須是有限的非負數。","Bind":"連結","Bind a Pancake store + product":"連結 Pancake 店鋪和產品","Bind an email address to your account.":"將電郵地址連結到您的用戶。","Bind Email":"連結電郵","Bind task plugins":"綁定任務外掛","Bind Telegram Account":"連結 Telegram 用戶","Bind WeChat":"綁定微信","Bind WeChat Account":"連結微信用戶","Binding Information":"連結資訊","Binding successful!":"連結成功!","Binding Type":"綁定類型","Binding your {{provider}} account":"正在連結您的 {{provider}} 賬號","Binding...":"連結中...","Bindings":"連結","Calculating priority...":"正在計算優先級…","Callback URL configuration error":"回調位址設定錯誤","Blacklist":"黑名單","Blacklist (Block listed domains)":"黑名單(已阻止的域)","Blacklist (Block listed IPs)":"黑名單(已阻止的 IP)","Blank Rule":"空白規則","Cannot create users with permission level equal to or higher than yourself":"無法建立權限大於或等於自己的使用者","Cannot delete super administrator account":"不能刪除超級管理員帳號","Cannot delete the last key":"無法刪除最後一個金鑰","Cannot demote super administrator user":"無法降級超級管理員使用者","Cannot disable super administrator user":"無法停用超級管理員使用者","Cannot enable the email domain restriction. Enter the allowed email domains first.":"無法啟用信箱網域限制,請先填入限制的信箱網域!","Cannot enable Turnstile verification. Enter the Turnstile settings first.":"無法啟用 Turnstile 驗證,請先填入 Turnstile 驗證相關設定資訊!","Cannot enable WeChat login. Enter the WeChat login settings first.":"無法啟用微信登入,請先填入微信登入相關設定資訊!","Cannot enable {{provider}}. Enter the {{provider}} Client ID and Client Secret first.":"無法啟用 {{provider}},請先填入 {{provider}} 的 Client ID 和 Client Secret!","Blend":"混合","Block email aliases (e.g., user+alias@domain.com)":"阻止電郵別名(例如,user+alias@domain.com)","Blocked keywords":"已阻止的關鍵詞","Blocks messages when sensitive keywords are detected.":"偵測到敏感關鍵詞時阻止訊息。","Body param":"請求體參數","Boolean":"布林","Border radius":"圓角","Bot Name":"機械人名稱","Bot Protection":"機械人保護","Bot Token":"機械人令牌","Bot:":"機械人:","Bound":"已連結","Bound a subscription":"連結了一個訂閱","Bound Channels":"連結渠道","Bound Only":"僅已連結","Bound product:":"已連結產品:","Bound store:":"已連結店鋪:","Branch actions {{path}}":"分支 {{path}} 操作","Bring channels back online after successful checks":"檢查成功後使渠道恢復在線","Browse and compare":"瀏覽和比較","Browse available models and pricing":"瀏覽可用模型和價格","Browse rankings by category":"按行業瀏覽排行","Browser":"瀏覽器","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"預算令牌 = 最大令牌數 × 比例。接受 0.002 到 1 之間的十進制數。建議與上游收費保持一致。","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"預算令牌 = 最大令牌數 × 比例。接受 0.1 到 1 之間的十進制數。","Budget Tokens Ratio":"預算令牌比例","Budgets":"預算","Build on your API gateway in minutes":"幾分鐘內開始使用你的 API 閘道","Built for developers,":"為開發者打造,","Built-in":"內置","Built-in Device":"內置設備","Built-in is v{{factory}}; delete the custom version to return to it":"內建版本為 v{{factory}};刪除自訂版本即可恢復","Built-in pricing may become effective again.":"內建定價可能恢復生效。","Built-in v{{factory}} / marketplace v{{market}}":"內建 v{{factory}} / 市集 v{{market}}","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"內置:手機指紋/面部,或 Windows Hello;外部:USB 安全金鑰","Bulk actions for {{count}} selected records":"對 {{count}} 筆所選記錄執行批次操作","by":"由","By category":"按行業","By model author":"按模型廠商","By quota":"按額度","By requests":"按請求數","By tokens":"按 Token","Changes save on drop. You can undo the last move.":"放開後自動儲存,可復原上一次調整。","Channel affinity settings are not initialized":"渠道親和性設定未初始化","Cache":"緩存","Cache create (1h) price":"1 小時緩存寫入價格","Cache create price":"緩存寫入價格","Cache Creation":"緩存建立","Cache Creation (1h)":"緩存建立 (1h)","Cache Creation (5m)":"緩存建立 (5m)","Cache Directory":"緩存目錄","Cache Directory Disk Space":"緩存目錄磁碟空間","Cache Directory Info":"緩存目錄資訊","Channel does not exist":"渠道不存在","Cache Entries":"緩存條目","Cache mode":"緩存模式","Cache pricing":"緩存定價","Cache ratio":"緩存倍率","Cache Read":"緩存讀取","Cache read price":"緩存讀取價格","Cache repeated prompt prefixes for cheaper, faster reuse":"緩存重複的提示詞前綴,複用更快、更省錢","Cache write":"緩存寫入","Cache Write":"緩存寫入","Cache Write (1h)":"緩存寫入 (1h)","Cache Write (5m)":"緩存寫入 (5m)","Cache write price":"緩存寫入價格","Cached":"緩存","Cached input":"緩存輸入","Cached tokens":"快取權杖","Calculated price: ${{price}} per 1M tokens":"計算價格:${{price}} / 1M tokens","Calculated ratio: {{ratio}}":"計算倍率:{{ratio}}","Calculating...":"計算中...","Call 1: the token group is premium":"呼叫 ①:令牌分組是 premium","Call 2: the token group is default":"呼叫 ②:令牌分組是 default","Call 3: the token has no group":"呼叫 ③:令牌沒設定分組","Call Count Distribution":"呼叫次數分佈","Call Count Ranking":"呼叫次數排行","Call Proportion":"呼叫比例","Call Trend":"呼叫趨勢","Callback address":"Callback地址","Callback Caller IP":"Callback調用者 IP","Callback notification URL":"Callback通知地址","Callback Payment Method":"Callback支付方式","Callback URL format":"回呼 URL 格式","Cancel":"取消","Cancelled":"已取消","Cancelled at":"作廢於","Capabilities":"能力","Caps the response length":"限制回覆長度","Capture a reusable bundle of models, tags, or endpoints.":"捕捉可重用的模型、標籤或端點捆綁包。","Card view":"卡片檢視","Cascade disable channels":"連動停用渠道","Catalog visibility":"目錄顯示","Catch-all route must be last for the same incoming path":"同一入口路徑的兜底路由必須放在最後","Category":"分類","Category Name":"分類名稱","Category name is required":"分類名稱不能為空","Category name must be less than 50 characters":"分類名稱不能超過 50 個字元","Caution":"注意","CC Switch":"CC Switch","Centered":"居中","Chain":"鏈路","Change":"更改","Change domain":"變更網域","Change language":"更改語言","Change model vendor":"調整模型供應商","Change Password":"更改密碼","Change provider":"更換供應商","Change system settings and custom OAuth providers, and sync prices.":"修改系統設定和自訂 OAuth 提供者,並同步價格。","Change the Passkey domain?":"變更通行金鑰網域?","Change To":"更改為","Change upstream model names":"修改傳給上游的模型名稱","Change vendor":"設定供應商","Change your display name and personal settings.":"修改顯示名稱和個人設定。","Changed":"變更","Changed / Total":"已變更 / 總數","Channel notifications":"渠道通知","Channel priorities changed. Refresh and try again.":"通道優先級已變更,請重新整理後再試。","Channel priorities saved":"通道優先級已儲存","Channel priority is outside the sortable range":"通道優先級超出可排序範圍","Check-in failed, please try again later":"簽到失敗,請稍後重試","Check-in failed: quota update error":"簽到失敗:更新額度出錯","Check-in feature is not enabled":"簽到功能未啟用","Changed access token permissions":"已修改存取令牌權限","Changed Fields":"變更欄位","Check-in successful":"簽到成功","Changed fields: {{fields}}":"修改欄位:{{fields}}","Changelog":"更新日誌","Changes are written to the settings draft on save.":"儲存後會寫入設定草稿。","Changes declared endpoint types and custom paths shown to users.":"會修改向使用者顯示的端點類型及自訂路徑。","Changes visibility in the model catalog. Channels remain configured separately.":"會修改模型在目錄中的可見性,渠道仍需獨立設定。","Changes visibility in the model square. Channel status and existing API access are unchanged.":"調整模型在模型廣場中的顯示,不影響管道啟用狀態與既有呼叫權限。","Changes which model names inherit this metadata. Prices are not inherited.":"會修改哪些模型名稱繼承此中繼資料,不會繼承價格。","Changing...":"修改中...","Channel":"渠道","Channel {{name}}":"渠道 {{name}}","Channel {{name}} model {{model}}":"渠道 {{name}} 模型 {{model}}","Channel Affinity":"渠道親和性","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"渠道親和性會基於從請求上下文或 JSON Body 提取的 Key,優先複用上一次成功的渠道。","Channel Affinity: Upstream Cache Hit":"渠道親和性:上游緩存命中","Channel availability and group access are derived from enabled channels. Importing metadata does not create a callable channel.":"渠道可用性及分組權限由已啟用的渠道決定。匯入資料不會建立可呼叫的渠道。","Choose a time range of up to {{days}} days. The other filters on this page also apply.":"選擇要匯出的時間範圍,最長 {{days}} 天。頁面上的其他篩選條件同樣生效。","Channel configuration":"通道設定","Channel consistency repaired: {{success}} succeeded, {{fails}} failed":"渠道一致性修復完成:{{success}} 個成功,{{fails}} 個失敗","Channel copied successfully":"渠道複製成功","Channel created successfully":"渠道建立成功","Channel deleted successfully":"渠道刪除成功","Channel disable requested":"已要求停用通道","Channel disabled successfully":"渠道停用成功","Channel enabled successfully":"渠道啟用成功","Channel error":"通道錯誤","Channel Extra Settings":"渠道額外設定","Channel health":"渠道健康","Channel health checks":"渠道健康檢查","Channel ID":"渠道 ID","Channel ID is required":"缺少渠道 ID","Channel is not selected":"尚未選擇管道","Channel key":"渠道金鑰","Channel key unlocked":"渠道金鑰已解鎖","Channel Management":"渠道管理","Channel models":"渠道模型","Channel name is required":"渠道名稱是必填的","Channel selected":"選擇通道","Channel selection":"通道選擇","Channel switching options":"渠道切換子選項","Channel test completed":"渠道測試完成","Channel test concurrency":"渠道測試並行數","Channel test concurrency must be between 1 and 32":"渠道測試並行數必須介於 1 到 32 之間","Channel test mode":"渠道測試模式","Channel type":"渠道類型","Channel type does not match the status endpoint":"渠道類型與狀態介面不符","Channel type is required":"渠道類型是必填的","Channel types":"渠道類型","Channel types you can use when binding this plugin.":"綁定此外掛時可選擇的管道類型。","Channel updated successfully":"渠道更新成功","Channel-specific settings (JSON format)":"渠道特定設定(JSON 格式)","Channel:":"渠道:","channel(s)? This action cannot be undone.":"渠道?此操作無法撤銷。","Channels":"渠道","Channels {{channels}} · Groups {{groups}}":"渠道 {{channels}} · 群組 {{groups}}","Channels and groups":"渠道與分組","Channels deleted successfully":"渠道刪除成功","Channels must also enable Auto Ban before automatic disabling can take effect.":"各渠道還需開啟「自動停用」,全域停用規則才會對其生效。","Character chat, storytelling, persona":"角色對話、劇情創作、人設扮演","Charge.":"扣費。","Chart Preferences":"圖表偏好設定","Chart Settings":"圖表設定","Chat":"聊天","Chat area":"聊天區域","Chat Area":"聊天區域","Chat Client Name":"聊天用戶端名稱","Chat client name is required":"聊天用戶端名稱為必填項","Chat configuration JSON":"聊天設定 JSON","Chat preset not found":"未找到聊天預設","Chat Presets":"聊天預設","Chat session management":"聊天對話管理","ChatCompletions -> Responses Compatibility":"ChatCompletions → 回應兼容","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Check again":"重新檢查","Check channels awaiting recovery only":"僅檢查被自動停用的渠道","Check for new upstream models":"定期探索上游新增模型","Check for updates":"檢查更新","Check in daily to receive random quota rewards":"每日簽到可獲得隨機額度獎勵","Check in now":"立即簽到","Check line {{line}} for a missing comma.":"請檢查第 {{line}} 行是否缺少逗號。","Check out the Quick Start":"請查看 新手入門","Check resolved IPs against IP filters even when accessing by domain":"即使透過網域名稱存取,也對照 IP 過濾器檢查解析的 IP","Check the override matrix at row = user group, column = billing group. If that cell is set, use it. Otherwise use the billing group base ratio from the pricing table.":"查覆蓋矩陣中「行 = 用戶分組、列 = 收費分組」的單元格。若已設定則使用該值,否則使用定價分組表中收費分組的基礎倍率。","Check-in failed":"簽到失敗","Check-in Rewards":"簽到獎勵","Check-in Settings":"簽到設定","Check-in successful! Received":"簽到成功!獲得","Checked in":"已簽到","Checking connection":"檢查連接","Checking file integrity...":"正在校驗檔案…","Checking name...":"正在檢查名稱...","Checking updates...":"檢查更新中...","Checking upstream models. Channel models will only change after confirmation.":"正在檢查上游模型,確認後才會修改渠道模型。","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","Checks hourly while you are online, including pre-releases.":"連線時每小時檢查一次,包含預先發行版本。","Checks text extracted from supported requests against keywords, ignoring case. A match rejects the request before upstream processing and does not affect channel health. Images, audio and generated responses are not checked.":"對支援的請求中擷取的文字進行關鍵詞比對,不區分大小寫。符合時在傳送上游前拒絕請求,不影響渠道健康狀態。不檢查圖片、音訊或產生的回應內容。","Chinese":"中文","Choose a complete upstream protocol plan or edit individual route groups.":"選擇完整的上游協議方案,或逐組編輯路由。","Choose a provider or plugin to configure your channel.":"選擇供應商或外掛,開始設定通道。","Choose a time at least one hour from now":"請選擇至少一小時之後的時間","Choose a username":"選擇一個用戶名","Choose a valid IANA timezone.":"請選擇有效的 IANA 時區。","Choose an amount and payment method":"選擇金額和支付方式","Choose and order the groups this API key will try.":"選擇此 API 金鑰要依序嘗試的分組並排序。","Choose another file":"重新選擇檔案","Choose between default expanded, compact icon-only, or full layout mode":"選擇預設展開、緊湊圖標模式或完整佈局模式","Choose between inset, floating, or standard sidebar layout":"選擇嵌入式、浮動式或標準側邊欄佈局","Choose between left-to-right or right-to-left site direction":"選擇從左到右或從右到左的站點方向","Choose between system preference, light mode, or dark mode":"選擇系統偏好、淺色模式或深色模式","Choose channels to sync upstream ratio configurations from":"選擇要同步上游比例設定的渠道","Choose file":"選擇檔案","Choose Group":"選擇分組","Choose how flow widths are calculated.":"選擇分流圖連線寬度的計算方式。","Choose how quota values are shown to users":"選擇如何向用戶展示配額值","Choose how the platform will operate":"選擇平台的運作模式","Choose how to filter domains":"選擇如何過濾域名","Choose how to filter IP addresses":"選擇如何過濾 IP 地址","Choose one SMTP transport security mode":"選擇一種 SMTP 傳輸加密方式","Choose price sources":"選擇價格來源","Choose the bundle type and define the items inside it.":"選擇捆綁包類型並定義其中的項目。","Choose the default charts, range, and time granularity for model analytics.":"選擇模型呼叫分析的預設圖表、範圍和時間粒度。","Choose the domain used when this Passkey was created, then try again.":"請選擇建立此通行金鑰時使用的網域,然後重試。","Choose where to fetch upstream metadata.":"選擇從何處獲取上游元數據。","Choose which charts are selected by default when opening model analytics.":"選擇打開模型呼叫分析時預設選中的圖表。","Clamped to":"限制為","Claude":"Claude","Claude CLI Header Passthrough":"Claude CLI 請求頭透傳","Claude only":"僅 Claude","Clean":"無衝突","Clean history logs":"清理歷史日誌","Clean logs":"清理日誌","Clean task history":"清理歷史任務","Clean up inactive cache":"清理不活躍緩存","Clean Up Log Files":"清理日誌檔案","Cleaned up {{count}} log files, freed {{size}}":"已清理 {{count}} 個日誌檔案,釋放 {{size}}","Cleaning...":"正在清理...","Cleanup failed":"清理失敗","Cleanup Mode":"清理方式","Clear":"清空","Clear all":"清除全部","Clear All":"清除全部","Clear All Cache":"清空全部緩存","Clear all filters":"清除所有篩選","Clear cache for this rule":"清空該規則緩存","Clear chat history":"清空聊天歷史","Clear chat history?":"清空聊天歷史?","Clear field selection":"取消全選","Clear filters":"清除篩選器","Clear Mapping":"清除映射","Clear mode flags in prompts":"在提示中清除模式標誌","Clear node filters":"清空節點篩選","Clear search":"清除搜尋","Clear selection":"清除選擇","Clear selection (Escape)":"清除選擇 (Escape)","Clear vendor":"清除供應商歸屬","Cleared":"已清空","Cleared {{bindingType}} binding for user {{username}}":"清除用戶 {{username}} 的 {{bindingType}} 連結","Cleared all models":"已清除所有模型","Cleared channel affinity cache":"清除渠道親和緩存","Cleared disk cache":"清除磁碟緩存","Cleared historical logs":"清理歷史日誌","Cleared log files":"清理日誌檔案","Click \\"Create Plan\\" to create your first subscription plan":"點擊「新建套餐」建立您的第一個訂閱套餐","Click \\"Generate\\" to create a token":"點擊「生成」以建立令牌","Click a stage to show or hide that column":"點擊某個階段可顯示或隱藏對應的列","Click any category to drill into its models, apps, and trends":"點擊任意分類可下鑽查看其模型、套用與趨勢","Click for details":"點擊查看詳情","Click save when you\'re done.":"完成後點擊儲存。","Click save when you're done.":"完成後點擊儲存。","Click the button below to bind your Telegram account":"點擊下方按鈕連結您的 Telegram 用戶","Click to copy":"點擊複製","Click to open deployment":"點擊打開部署","Click to preview audio":"點擊預覽音樂","Click to preview video":"點擊預覽影片","Click to update balance":"點擊更新餘額","Click to view Codex usage":"點擊查看 Codex 使用量","Compliance confirmation fields cannot be changed through the general settings API":"合規確認欄位不允許透過通用設定介面修改","Click to view full details":"點擊查看詳細資訊","Click to view full error message":"點擊查看完整錯誤訊息","Click to view full prompt":"點擊查看完整提示詞","Composition failed":"構圖失敗","Click to view image":"點擊查看圖片","Client":"用戶端","Client header value":"用戶端請求頭值","Client headers override the gateway defaults and may cause upstream errors":"客戶端請求標頭會覆蓋閘道預設標頭,可能導致上游回報錯誤","Client ID":"Client ID","Client information such as User-Agent and IP is exposed to the upstream":"客戶端資訊(如 User-Agent、IP)會暴露給上游","Client model":"客戶端 model","Client model matching":"客戶端 model 匹配","Client model matching help":"客戶端 model 匹配幫助","Client Secret":"Client Secret","Close":"關閉","Close dialog":"關閉對話框","Close menu":"關閉選單","Close panel":"關閉面板","Close the panel to edit here":"關閉面板並在此編輯","Close Today":"今日關閉","Cloudflare":"Cloudflare","CNY":"元","CNY per USD":"人民幣兌美元匯率","Code":"代碼","Code generation, refactoring, autocomplete":"代碼生成、重構、自動補全","Code interpreter":"代碼解釋器","Code samples":"呼叫示例","Codes copied!":"代碼已複製!","Codex":"Codex","Codex Account & Usage":"Codex 用戶和用量","Codex Account Status":"Codex 賬號狀態","Codex channels do not support batch creation":"Codex 渠道不支援大量建立","Codex channels use an OAuth JSON credential as the key.":"Codex 渠道使用 OAuth JSON 憑證作為金鑰。","Codex CLI Header Passthrough":"Codex CLI 請求頭透傳","Codex credential must be a JSON object with access_token and account_id":"Codex 憑證必須是包含 access_token 和 account_id 的 JSON 物件","Cohere":"Cohere","Collapse":"收起","Collapse all":"全部收合","Collapse All":"全部收起","Collapse panel":"收合面板","Collect relay latency and success-rate metrics for the model square.":"收集 Relay 延遲和成功率指標,用於模型廣場展示。","Color":"顏色","Color is required":"顏色為必填項","Color preset":"顏色預設","Color:":"顏色:","Comfortable":"寬鬆","Coming Soon!":"即將推出!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"使用英文逗號分隔精確模型名。以 regex: 開頭可使用正則表達式忽略。","Comma-separated list of allowed ports (empty = all ports)":"允許的端口的逗號分隔清單(留空 = 所有端口)","Comma-separated model names (leave empty to keep current)":"逗號分隔的模型名稱(留空以保持目前設定)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"逗號分隔的模型名稱,例如 gpt-4,gpt-3.5-turbo","Command":"命令","Common":"通用","Common Keys":"常用 Key","Common Logs":"通用日誌","Common pitfall: the user group base ratio is NOT a personal discount. It only applies when the user group itself is the billing group.":"常見誤區:用戶分組的基礎倍率不是個人折扣,只有當用戶分組本身就是收費分組時才會生效。","Common ports include 25, 465, and 587":"常用端口包括 25、465 和 587","Common User":"普通用戶","Community driven, self-hosted, and extensible":"社群驅動、可自託管、易於擴展","Compact":"緊湊","Compare each vendor\'s token share across the past few weeks":"對比過去幾週各廠商的 Token 份額","Compare each vendor\'s token share across the past year":"對比過去一年各廠商的 Token 份額","Compare each vendor\'s token share over the past 24 hours":"對比過去 24 小時各廠商的 Token 份額","Compare each vendor\'s token share over the past month":"對比過去一個月各廠商的 Token 份額","Compare each vendor\'s token share since launch":"對比自上線以來各廠商的 Token 份額","Compare prices and choose a source for each model.":"比較價格,按模型選擇來源。","Compare the most popular models on the platform":"對比平台上最受歡迎的模型","Comparison operator":"比較運算子","compatible API routes":"兼容 API 路由","Compatible API routes for common AI application workflows":"兼容常見 AI 套用工作流的 API 路由","Compatible Passkey domains":"相容的通行金鑰網域","Compilation failed":"编译失败","Complete API documentation with multi-language SDK support":"完整的 API 文件,支援多語言 SDK","Complete Order":"補單","Complete sign-in":"完成登入","Complete the invalid fields before saving or switching modes. The last valid expression is preserved.":"請先修正無效欄位,再儲存或切換模式。上次有效的運算式已保留。","Complete these steps to finish the initial installation.":"完成這些步驟以完成初始安裝。","Complete top-up orders and manage subscription plans and user subscriptions.":"完成儲值訂單,並管理訂閱套餐和用戶訂閱。","Completed":"已完成","Completed security verification":"已完成安全驗證","Completed top-up order for the user":"為用戶完成補單","Completion":"補全","Completion price":"補全價格","Completion price ($/1M tokens)":"完成價格(美元/百萬令牌)","Completion ratio":"補全倍率","Compliance confirmation required":"需要確認合規條款","Compliance confirmed":"合規已確認","Compliance confirmed successfully":"合規確認成功","Concatenate channel system prompt with user's prompt":"將渠道系統提示與用戶的提示連接起來","Condition {{path}}":"條件 {{path}}","Condition actions {{path}}":"條件 {{path}} 操作","Condition group":"條件組合","Condition group {{path}}":"條件群組 {{path}}","Condition input":"條件變數","Condition Path":"條件路徑","Condition Settings":"條件項設定","Condition value":"條件值","Condition Value":"條件值","Conditional multipliers":"條件乘數","Conditions":"條件","Conditions (AND)":"條件(AND)","Confidence":"置信度","Configuration":"設定","Configuration File":"設定文件","Configuration for Creem payment integration":"Creem 支付整合的設定","Configuration for Epay payment integration":"Epay 支付整合的設定","Configuration for Stripe payment integration":"Stripe 支付整合的設定","Configuration required":"需要設定","Configure":"設定","Configure a Creem product for user recharge options.":"為用戶儲值選項設定 Creem 產品。","Configure a custom ratio for \\"{{userGroup}}\\" users when using a specific token group.":"為「{{userGroup}}」使用者使用指定權杖分組時設定自訂倍率。","Configure a custom ratio for when users use a specific token group.":"設定用戶使用特定令牌分組時的自訂倍率。","Configure a group that users can select when creating API keys.":"設定用戶在建立 API 金鑰時可以選擇的分組。","Configure a new custom OAuth provider for user authentication.":"設定新的自訂 OAuth 供應商用於用戶認證。","Configure a payment method for user recharge options.":"設定用於用戶儲值選項的支付方式。","Configure a predefined chat link for end users.":"為終端用戶設定預先定義的聊天連結。","Configure an input price before converting this model.":"請先設定輸入價格,再轉換此模型。","Configure and deploy a new container instance.":"設定並部署一個新的容器實例。","Configure API documentation links for the dashboard":"設定儀表板的 API 文件連結","Configure at:":"設定位置:","Configure available payment methods. Provide a JSON array.":"設定可用的支付方式。提供一個 JSON 陣列。","Configure Creem products. Provide a JSON array.":"設定 Creem 產品。提供 JSON 陣列。","Configure discount rates based on recharge amounts":"設定基於儲值金額的折扣率","Configure endpoint routing, authentication and protocol conversion for different upstream services":"自由設定介面路由、驗證與協定轉換,適配不同上游服務","Configure experimental data export for the dashboard":"設定儀表板的實驗性數據匯出","Configure in your Creem dashboard":"在您的 Creem 儀表板中設定","Configure keyword filtering for prompts and responses.":"設定用於提示和回應的關鍵詞過濾。","Configure model, caching, and group ratios used for billing":"設定用於收費的模型、緩存和分組比例","Configure Models":"設定模型","Configure monitoring status page groups for the dashboard":"設定用於儀表板的監控狀態頁面分組","Configure NODE_NAME":"設定 NODE_NAME","Configure per-model ratio for image inputs or outputs.":"設定圖像輸入或輸出的每模型比例。","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"為每個工具設定單價($/1K 次呼叫)。按請求收費的模型不額外收取工具費用。","Configure pricing ratios for a specific model.":"設定特定模型的定價比例。","Configure rate limiting rules for a specific user group.":"設定特定用戶分組的速率限制規則。","Configure routes":"設定路由","Configure task pricing":"設定任務定價","Configure the connection and models, then create the channel.":"設定連線與模型後建立通道。","Configure the ratio for this group.":"設定此分組的比例。","Configure upstream providers and routing.":"設定上游提供者和路由。","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"設定 Waffo Pancake 託管結帳,用於美元計價的儲值","Configure Waffo payment aggregation platform integration":"設定 Waffo 支付聚合平台整合","Configure your account behavior preferences":"設定您的用戶行為偏好","Configure your account preferences and integrations":"設定您的用戶偏好和整合","Configured":"已設定","Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.":"儲存為 PayMethods JSON。type 值決定點擊後使用哪個支付流程:stripe 走 Stripe,waffo_pancake 走 Waffo Pancake,其他值作為 Epay 的 type 參數提交。","Configured routes and latency checks":"已設定路由和延遲檢測","Confirm":"確認","Confirm Action":"確認操作","Confirm and enable":"確認並啟用","Confirm Batch Update":"確認大量更新","Confirm Billing Conflicts":"確認賬單衝突","Confirm both your current and new email addresses to finish this change.":"請確認目前信箱和新信箱,完成此次變更。","Confirm changes":"確認變更","Confirm Changes":"確認更改","Confirm Cleanup":"確認清理","Confirm cleanup of inactive disk cache?":"確認清理不活躍的磁碟緩存?","Confirm clearing all channel affinity cache":"確認清空全部渠道親和性緩存","Confirm clearing cache for this rule":"確認清空該規則緩存","Confirm compliance":"確認合規","Confirm compliance terms":"確認合規條款","Confirm Creem Purchase":"確認 Creem 購買","Confirm delete":"確認刪除","Confirm disable":"確認停用","Confirm email":"確認信箱","Confirm enable":"確認啟用","Confirm invalidate":"確認作廢","Confirm log cleanup":"確認日誌清理","Confirm log file cleanup?":"確認清理日誌檔案?","Confirm model changes":"確認模型變更","Confirm New Password":"確認新密碼","Confirm password":"確認密碼","Confirm Payment":"確認付款","Confirm Selection":"確認選擇","Confirm settings and finish setup":"確認設定並完成安裝","confirm that I bear legal responsibility arising from deployment":"確認承擔因部署","Confirm the final prices and removed settings. Metadata and channel access are not changed.":"請確認最終價格及將移除的設定。中繼資料與渠道權限不會變更。","Confirm the verification code sent to your new email address.":"請輸入傳送至新信箱的驗證碼。","Confirm Unbind":"確認解綁","Confirm usage reset":"確認重置用量","Confirm your identity before accessing this sensitive action.":"執行此敏感操作前,請先驗證身分。","Confirm your identity before changing the account {{username}}.":"修改帳號 {{username}} 前,請先驗證身分。","Confirm your identity before creating an administrator account.":"建立管理員帳號前,請先驗證身分。","Confirm your identity before permanently deleting the account {{username}}.":"永久刪除帳號 {{username}} 前,請先驗證身分。","Confirm your identity before removing this Passkey from your account.":"在解綁目前賬號的 Passkey 前請確認你的身份。","Confirm your identity before unbinding {{provider}} from this user.":"為該用戶解綁 {{provider}} 前,請先驗證身分。","Confirm your identity with Two-factor Authentication before registering a Passkey.":"在註冊 Passkey 前請使用兩步驗證確認你的身份。","Confirmed at {{time}} by user #{{userId}}":"用戶 #{{userId}} 於 {{time}} 確認","Confirmed payment compliance":"確認支付合規","Confirmed removal of Passkey domains: {{domains}}; affected {{known}}; unknown {{unknown}}":"已確認刪除通行金鑰網域:{{domains}};已知受影響 {{known}};歸屬未知 {{unknown}}","Confirming the account linked to your profile.":"正在確認已綁定的帳號。","Conflict":"矛盾","Connect":"連接","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"透過 OpenAI、Claude、Gemini 以及其他兼容 API 路由接入","Connect to 360 model services":"接入 360 模型服務","Connect to Alibaba Cloud Bailian model services":"接入阿里雲百煉模型服務","Connect to Cohere model services":"接入 Cohere 模型服務","Connect to Coze bots":"接入 Coze 智慧體","Connect to DeepSeek model services":"接入 DeepSeek 模型服務","Connect to Dify applications and workflows":"接入 Dify 應用程式與工作流程","Connect to Doubao Seedance video and Seedream image generation through Volcengine Ark":"透過火山方舟接入豆包 Seedance 影片生成與 Seedream 圖片生成","Connect to FastGPT applications":"接入 FastGPT 應用程式","Connect to iFlytek Spark model services":"接入訊飛星火模型服務","Connect to Jimeng image and video generation services":"接入即夢圖片與影片生成服務","Connect to Jina embedding and reranking services":"接入 Jina 向量嵌入與重新排序服務","Connect to Kling video generation services":"接入可靈影片生成服務","Connect to LingYiWanWu model services":"接入零一萬物模型服務","Connect to local or self-hosted Ollama models":"接入本機或自行部署的 Ollama 模型服務","Connect to MiniMax model services":"接入 MiniMax 模型服務","Connect to Mistral AI model services":"接入 Mistral AI 模型服務","Connect to model services through a Sub2API gateway":"透過 Sub2API 閘道接入模型服務","Connect to models through the Google Gemini API":"透過 Google Gemini API 接入模型服務","Connect to Moonshot AI model services":"接入 Moonshot AI 模型服務","Connect to New API model services with support for multiple task plugins":"接入 New API 閘道的模型服務,支援多個任務外掛","Connect to OpenAI models deployed on Azure":"接入 Azure 上部署的 OpenAI 模型","Connect to OpenAI Sora video generation services":"接入 OpenAI Sora 影片生成服務","Connect to Perplexity model services":"接入 Perplexity 模型服務","Connect to self-hosted models served by SGLang":"連接透過 SGLang 部署的自架模型","Connect to self-hosted models served by vLLM":"連接透過 vLLM 部署的自架模型","Connect to self-hosted models served by Xinference":"接入透過 Xinference 自行部署的模型服務","Connect to SiliconFlow model inference services":"接入矽基流動模型推論服務","Connect to Submodel model services":"接入 Submodel 模型服務","Connect to Tencent Hunyuan model services":"接入騰訊混元模型服務","Connect to the Anthropic API or compatible services":"接入 Anthropic API 或相容其介面的服務","Connect to the OpenAI API or compatible services":"接入 OpenAI API 或相容其介面的服務","Connect to Vidu video generation services":"接入 Vidu 影片生成服務","Connect to Volcengine Ark model services":"接入火山方舟模型服務","Connect to xAI Grok model services":"接入 xAI Grok 模型服務","Connected to io.net service normally.":"已正常連接 io.net 服務。","Connection & Models":"連線與模型","Connection closed":"連接已關閉","Connection error":"連接錯誤","Connection failed":"連接失敗","Connection info detected in clipboard":"偵測到剪貼簿中的連線資訊","Connection info filled in":"連線資訊已填入","Connection settings":"連線設定","Connection settings changed. Fetch models again to refresh the list.":"連線設定已變更,請重新取得模型清單。","Connection successful":"連接成功","Console":"控制台","Console area":"控制台區域","Console Area":"控制台區域","Console Content":"控制台內容","Consume":"消耗","Consumed in the last 24 hours":"近 24 小時消耗量","Container":"容器","Container name":"容器名稱","Containers":"容器","Contains":"包含","Contains Match":"包含匹配","Content":"內容","Content displayed on the home page (supports Markdown)":"主頁上顯示的內容(支援 Markdown)","Content not found.":"內容未找到。","Content not modified!":"內容未修改!","Content width":"內容寬度","Context":"上下文","Continue":"繼續","Continue account binding":"繼續綁定帳戶","Continue with {{name}}":"使用 {{name}} 繼續","Continue with an account already linked to your profile.":"使用已綁定的帳號繼續驗證。","Continue with Discord":"使用 Discord 繼續","Continue with GitHub":"使用 GitHub 繼續","Continue with LinuxDO":"使用 LinuxDO 繼續","Continue with OIDC":"使用 OIDC 繼續","Continue with Telegram":"使用 Telegram 繼續","Continue with WeChat":"使用 微信 繼續","Contract review, compliance, summarisation":"合同審閱、合規與摘要","Control which models are exposed and which groups may use them.":"控制對外暴露的模型,以及哪些分組可以使用它們。","Controls catalog visibility. Channel availability is configured separately.":"控制目錄中的顯示,渠道可用性需獨立設定。","Controls how much the model thinks before answering":"控制模型回答前的推理深度","Controls randomness and creativity":"控制輸出的隨機性和創造性","Controls visibility in the model square. Channel status and existing API access are unchanged.":"控制模型在模型廣場中的顯示,不影響管道啟用狀態與既有呼叫權限。","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"控制在通行金鑰流程中是否需要用戶驗證(生物識別/PIN)。","Conversation cleared":"對話已清空","Conversion rate from USD to your custom currency":"從美元到您的自訂貨幣的轉換率","Convert reasoning_content to tag in content":"將 reasoning_content 轉換為 content 中的 標籤","Convert string to lowercase":"把字串轉成小寫","Convert string to uppercase":"把字串轉成大寫","Convert to expression":"轉換為計費運算式","Converter":"轉換器","Converter does not match incoming path":"轉換器與入口路徑不匹配","Converter is not registered":"轉換器未註冊","Copied":"已複製","Copied {{count}} key(s)":"已複製 {{count}} 個金鑰","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"複製渠道(源 ID: {{sourceId}})為 {{name}}(新 ID: {{id}})","Copied to clipboard":"已複製到剪貼簿","Copied: {{model}}":"已複製: {{model}}","Copied!":"已複製!","Copy":"複製","Copy {{field}}":"複製{{field}}","Copy {{name}} pricing":"複製 {{name}} 定價","Copy a request header":"複製請求頭","Copy All":"全部複製","Copy all backup codes":"複製所有備用代碼","Copy All Codes":"複製所有代碼","Copy all models":"複製全部模型","Copy API key":"複製 API 金鑰","Copy API URL":"複製 API 位址","Copy base URL":"複製 Base URL","Copy billing expression":"複製計費運算式","Copy callback URL":"複製回呼 URL","Copy Channel":"複製渠道","Copy code":"複製代碼","Copy Connection Info":"複製連接資訊","Copy endpoint path":"複製端點路徑","Copy failed":"複製失敗","Copy Field":"複製欄位","Copy Header":"複製請求頭","Copy homepage URL":"複製首頁 URL","Copy Key":"複製金鑰","Copy Link":"複製連結","Copy model name":"複製模型名稱","Copy model names":"複製模型名稱清單","Copy plugin key":"複製外掛識別碼","Copy prompt":"複製提示詞","Copy ready-to-run curl":"複製可直接執行的 curl","Copy redemption code":"複製兌換碼","Copy redirect URL":"複製重新導向 URL","Copy referral link":"複製推薦連結","Copy Request Header":"複製請求頭","Copy secret key":"複製金鑰","Copy selected codes":"複製選定的代碼","Copy selected keys":"複製選定的金鑰","Copy selected models":"複製已選模型","Copy selected models separated by commas (e.g. a,b)":"複製已選模型,使用英文逗號隔開(例如 a,b)","Copy source field to target field":"把來源欄位複製到目標欄位","Copy the key and paste it here":"複製金鑰並粘貼到這裡","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"複製以下提示詞發送給 LLM(如 ChatGPT / Claude),讓它幫你設計收費表達式","Copy this token now. It will not be shown again.":"請立即複製此令牌,之後將不再顯示。","Copy to clipboard":"複製到剪貼簿","Copy token":"複製令牌","Copy URL":"複製 URL","Copying...":"正在複製...","Copywriting, ad creative, SEO":"文案、廣告創意、SEO","Core concepts":"核心概念","Core Configuration":"核心設定","Core Features":"核心功能","Core pricing":"核心定價","Correct the invalid settings before saving.":"請修正無效設定後再儲存。","Cost":"費用","Cost = 10 × 0.3 = 3":"費用 = 10 × 0.3 = 3","Cost = 10 × 0.8 = 8":"費用 = 10 × 0.8 = 8","Cost = 10 × 1.0 = 10":"費用 = 10 × 1.0 = 10","Cost = model price × that one ratio. Nothing else from the group settings enters the formula.":"費用 = 模型價格 × 這一個倍率。分組設定裡的其他項都不參與該公式。","Cost calculator":"費用試算","Creem webhook is not configured":"Creem Webhook 未設定","CreemProductId is not configured for this plan":"該訂閱方案未設定 CreemProductId","Cost in {{currency}} per request, regardless of tokens used.":"每次請求的費用({{currency}}),與 Token 用量無關。","Cost in USD per request, regardless of tokens used.":"每請求的美元費用,不考慮使用的令牌數。","Cost Tracking":"成本追蹤","Could not fetch the plugin source from this browser. The host may block cross-origin requests or be unreachable.":"無法在瀏覽器中取得外掛原始碼。該主機可能禁止跨來源請求或無法連線。","Could not fetch this URL from the browser. The host may block cross-origin requests or be unreachable. Download the file and paste its source below.":"無法在瀏覽器中取得該 URL。該主機可能禁止跨來源請求或無法連線。請下載檔案後將原始碼貼到下方。","Could not load the changelog":"無法載入更新日誌","Could not load this source":"無法載入該來源","Count":"數量","Count must be between {{min}} and {{max}}":"計數必須介於{{min}}和{{max}}之間","Counters and averages cover the period since the upstream metrics were initialized or reset.":"計數與平均值統計自上游指標初始化或重設以來的資料。","Coze":"Coze","CPU":"CPU","CPU Threshold (%)":"CPU 閾值 (%)","Create":"建立","Create a copy of:":"建立副本:","Create a key for your app or service":"為你的套用或服務建立金鑰","Create a new user group to configure ratio overrides for.":"建立一個新的用戶分組來設定比例覆蓋。","Create access token":"建立存取令牌","Create account":"建立用戶","Create aliases for users":"為上游模型設定別名","Create an account":"建立一個用戶","Create an API key to unlock the real request":"建立 API 金鑰以解鎖真實請求","Create and review invite or credit codes.":"建立和審查邀請或信用代碼。","Create API Key":"建立 API 金鑰","Create API token":"建立 API 權杖","Create API token “{{name}}”":"建立 API 權杖「{{name}}」","Create cache":"建立緩存","Create cache ratio":"建立緩存倍率","Create Channel":"建立渠道","Create channels or edit keys, base URLs, and overrides.":"建立渠道或編輯金鑰、基礎 URL 和覆蓋規則。","Create Code":"建立代碼","Create credentials for the root user":"為管理員建立登入憑證","Create deployment":"建立部署","Create metadata":"建立中繼資料","Create Model":"建立模型","Create multiple API keys at once (random suffix will be added to names)":"一次性建立多個 API 金鑰(名稱將添加隨機後綴)","Create multiple channels from multiple keys":"從多個金鑰建立多個渠道","Create multiple redemption codes at once (1-100)":"一次建立多個兌換碼 (1-100)","Create new subscription plan":"建立新的訂閱套餐","Create or update frequently asked questions for users":"建立或更新用戶的常見問題","Create or update system announcements for the dashboard":"建立或更新儀表板的系統公告","Create Plan":"新建套餐","Create Prefill Group":"建立預填充分組","Create Provider":"建立供應商","Create Redemption Code":"建立兌換碼","Create request parameter override rules with a visual editor or raw JSON.":"使用可視化編輯器或原始 JSON 建立請求參數覆蓋規則。","Create request parameter override rules without editing raw JSON.":"無需編輯原始 JSON 即可建立請求參數覆蓋規則。","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"建立模型、標籤、端點和用戶分組的可重用捆綁包,以加快控制台中其他地方的設定速度。","Create succeeded":"建立成功","Create Vendor":"建立供應商","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"建立您的第一個分組,以便在儀表板的任何位置重用模型、標籤或端點選擇。","Create, edit, and delete API keys.":"建立、編輯和刪除 API 金鑰。","Create, edit, and delete deployments, and test connections.":"建立、編輯和刪除部署,並測試連線。","Create, edit, and delete prefill groups.":"建立、編輯和刪除預填充分組。","Create, edit, and delete redemption codes.":"建立、編輯和刪除兌換碼。","Create, edit, disable, and delete users, and reset their security settings.":"建立、編輯、停用和刪除用戶,並重設其安全設定。","Create, revoke, and audit API tokens.":"建立、撤銷和審計 API 令牌。","Created":"建立時間","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"建立 {{count}} 個兌換碼 {{name}}(每個 {{quota}})","Created {{time}}":"建立於 {{time}}","Custom reset cycle must be greater than 0 seconds":"自訂重置週期需大於0秒","Created a custom OAuth provider":"建立了一個自訂 OAuth 提供方","Created a deployment":"建立了一個部署","Created a model":"建立了一個模型","Created a prefill group":"建立了一個預填組","Created a subscription plan":"建立了一個訂閱計劃","Created a vendor":"建立了一個供應商","Created an access token":"已建立存取令牌","Created At":"建立時間","Daily check-in, received {{quota}}":"使用者簽到,獲得額度 {{quota}}","Created channel {{name}} (type {{type}}, count {{count}})":"建立渠道 {{name}}(類型 {{type}},數量 {{count}})","Created user {{username}} (role {{role}})":"建立用戶 {{username}}(角色 {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"使用此套餐的標題和價格,在已儲存的店鋪中建立 Pancake 產品。需要先在支付設定中完整設定 Waffo Pancake。","Creating...":"建立中...","Creation failed":"建立失敗","Credential refreshed":"憑證已重新整理","Credentials":"憑證","Credentials verification failed":"憑證驗證失敗","Credentials verification failed — double-check Merchant ID and API private key.":"憑證驗證失敗,請檢查 Merchant ID 和 API 私鑰。","credit":"credit","Credit remaining":"剩餘額度","Creem API key (leave blank unless updating)":"Creem API 金鑰(除非更新,否則留空)","Creem Gateway":"Creem 閘道","Creem Payment":"Creem 支付","Creem product ID from your Creem dashboard.":"從您的 Creem 儀表板獲取 Creem 產品 ID。","Creem products must be a JSON array":"Creem 產品必須是 JSON 陣列","Database connection failed":"資料庫連線失敗","Database error, please contact the administrator":"資料庫出錯,請聯絡管理員","Cross-group":"跨分組","Cross-group retry":"跨分組重試","Cumulative usage":"累計用量","Currency":"貨幣","Currency & Display":"貨幣與展示","Current":"目前","Current Balance":"目前餘額","Current Billing":"目前收費","Current Cache Size":"目前緩存大小","Current domain":"目前域名","Current domain: {{domain}}":"目前網域:{{domain}}","Current email verification code":"目前信箱驗證碼","Current email: {{email}}. Enter a new email to change.":"目前電郵:{{email}}。輸入新電郵以更改。","Current exchange rate: 1 USD = {{rate}} {{currency}}":"目前匯率:1 USD = {{rate}} {{currency}}","Current key":"目前金鑰","Current key disable requested":"已要求停用目前金鑰","Current legacy JSON is invalid, cannot append":"目前舊格式 JSON 不合法,無法追加模板","Current Level Only":"僅目前層","Current load":"目前負載","Current models for the longest channel in this tag. May not include all models from all channels.":"此標籤中最長渠道的目前模型。可能不包括所有渠道的所有模型。","Current models: {{count}}":"目前模型:{{count}} 個","Current month":"本月","Current Password":"目前密碼","Current password is incorrect.":"目前密碼不正確。","Current period price":"目前時段價格","Current Price":"目前價格","Default group":"預設分組","Current pricing conditions":"目前計價條件","Current quota":"目前額度","Current site: {{origin}}":"目前網站:{{origin}}","Current time":"目前時間","Current token":"目前權杖","Current total = used + remaining. Changing the remaining quota updates the total and percentage.":"目前總額度 = 已用 + 剩餘。修改剩餘額度後,總額度和已用比例會隨之更新。","Current total quota":"目前總額度","Current v{{from}} → install v{{to}}":"目前版本 v{{from}} → 安裝版本 v{{to}}","Current value":"目前值","Current Value":"目前值","Current vendor":"目前供應商","Current version":"目前版本","Current:":"目前:","Custom":"自訂","Custom (overrides factory {{version}})":"自定义(覆盖內建版 {{version}})","Custom (seconds)":"自訂(秒)","Custom Amount":"自訂金額","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"自訂 API 基礎 URL。對於官方渠道,New API 具有內置地址。僅針對第三方代理站點或特殊端點填寫此項。請勿添加 /v1 或尾部斜線。","Custom API base URL. Leave empty to use provider default.":"自訂 API 基礎 URL。留空以使用供應商預設值。","Custom Currency":"自訂貨幣","Custom Currency Symbol":"自訂貨幣符號","Custom currency symbol is required":"自訂貨幣符號為必填項","Custom database driver detected.":"偵測到自訂資料庫驅動。","Custom endpoints":"自訂端點","Custom Epay method":"自訂 Epay 方式","Custom Error Response":"自訂錯誤回應","Custom Home Page":"自訂主頁","Custom message shown when access is denied":"存取被拒時顯示的自訂訊息","Custom model (comma-separated)":"自訂模型(逗號分隔)","Custom model icon":"自訂模型圖示","Custom module":"自訂模組","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"當特定用戶分組使用特定令牌分組時的自訂乘數。示例:VIP 用戶在使用「edit_this」分組令牌時獲得 0.9 倍費率。","Custom OAuth":"自訂 OAuth","Custom OAuth Providers":"自訂 OAuth 供應商","Custom Seconds":"自訂秒數","Custom sidebar section":"自訂側邊欄部分","Custom task plugin setting updated":"自訂任務外掛設定已更新","Custom Time Range":"自訂時間範圍","Custom Zoom":"自訂縮放","Customize sidebar display content":"個人化設定左側邊欄的顯示內容","Daily":"每天","Daily Check-in":"每日簽到","Daily token usage by model across the past few weeks":"過去幾週內按模型分佈的每日 Token 使用量","Daily token usage by model across the past month":"過去一個月內各模型的每日 Token 用量","Daily token usage by model over the past month":"過去一個月內按模型分佈的每日 Token 使用量","Daily uptime over the last 30 days":"最近 30 天每日可用率","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"每日可用率;{{incidents}} 宗事件,總計 {{minutes}} 分鐘","Dark":"深色","Dashboard":"數據看板","Dashboard Preferences":"看板偏好設定","Dashboards, tokens, and usage analytics.":"儀表板、令牌和使用分析。","Data Dashboard":"數據儀表板","Data directory:":"數據目錄:","Data is stored locally on this device. Use system backups to keep a safe copy.":"數據儲存在此設備本地。請使用系統備份來保留安全副本。","Data management and log viewing":"數據管理和日誌檢視","Data retention":"數據保留","Database":"資料庫","Database check":"資料庫檢查","Date and time when this announcement should be displayed":"此公告應顯示的日期和時間","Date Range":"時間範圍","Day":"日","Day of month":"日期(日)","days":"日","Days to Retain":"保留天數","decides the top-up ratio, which groups the user can pick for tokens, and whether an override ratio applies.":"決定儲值倍率、用戶建令牌時可選哪些分組,以及是否命中覆蓋倍率。","decides which channels are used and which base ratio applies.":"決定走哪些渠道、用哪個基礎倍率。","Declared capabilities":"宣告的能力","Decrease quota for user “{{name}}”":"減少使用者「{{name}}」的額度","Decrease user quota":"減少使用者額度","Decreased user quota by {{quota}}":"減少用戶額度 {{quota}}","Deducted by subscription":"由訂閱抵扣","DeepSeek":"DeepSeek","default":"預設","Default":"預設","Default / range":"預設值 / 範圍","Default administrator permissions can be overridden for this user.":"可以為此用戶覆蓋預設管理員權限。","Default API address":"預設 API 位址","Default API Version":"預設 API 版本","Default API Version *":"預設 API 版本 *","Default API version for this channel":"此渠道的預設 API 版本","Default base URL":"預設 Base URL","Default Bearer":"預設 Bearer","Default Collapse Sidebar":"預設摺疊側邊欄","Default consumption chart":"預設消耗分佈圖","Default Max Tokens":"預設最大 Token 數","Default model call chart":"預設模型呼叫圖","Default placeholder":"預設佔位圖示","Default range":"預設範圍","Default reminder threshold":"預設提醒閾值","Default Responses API version, if empty, will use the API version above":"預設回應 API 版本,如果為空,將使用上面的 API 版本","Deleted {{count}} auto-disabled keys":"已刪除 {{count}} 個自動停用的金鑰","Default session lifetime (seconds)":"預設工作階段有效期(秒)","Default system prompt for this channel":"此渠道的預設系統提示","Default time granularity":"預設時間粒度","Default to auto groups":"預設使用自動分組","Default TTL (seconds)":"預設 TTL(秒)","Defaults to \\"OIDC\\" if left blank":"留空則預設顯示為 \\"OIDC\\"","Defaults to the wallet page when empty":"為空時預設使用錢包頁面","Define API endpoints for this model (JSON format)":"為此模型定義 API 端點(JSON 格式)","Define endpoint mappings for each provider.":"為每個供應商定義端點映射。","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"為特定用戶組定義按分組規則,以新增、移除或追加可選分組。","Degraded performance recently":"近期性能有所下降","Delete":"刪除","Delete (":"刪除 (","Delete {{count}} API key(s)?":"刪除 {{count}} 個 API 金鑰?","Delete {{count}} models?":"刪除 {{count}} 個模型?","Delete {{count}} redemption codes?":"刪除 {{count}} 個兌換碼?","Delete {{count}} selected vendor records? Vendors with linked models cannot be deleted.":"刪除選取的 {{count}} 筆供應商記錄?有關聯模型的供應商無法刪除。","Delete {{count}} stale instance records? Online instances will not be deleted.":"刪除 {{count}} 筆失聯實例記錄?線上實例不會被刪除。","Delete a runtime request header":"刪除運行期請求頭","Delete Account":"刪除用戶","Deployment region cannot be empty":"部署區域不能為空","Deployment region must be valid JSON, for example {{example}}":"部署區域必須是標準的 JSON 格式,例如 {{example}}","Deployment region must include a default field":"部署區域必須包含 default 欄位","Delete active custom version":"刪除当前自定义版本","Delete All Disabled":"刪除所有已停用","Delete All Disabled Channels?":"刪除所有已停用的渠道?","Delete all stale":"刪除所有失聯","Delete API token":"刪除 API 權杖","Delete API token “{{name}}”":"刪除 API 權杖「{{name}}」","Delete Auto-Disabled":"刪除自動停用","Delete Channel":"刪除渠道","Delete Channels?":"刪除渠道?","Delete completed tasks matching the current filters across all pages? Active tasks and the latest run of each task type are retained for scheduling. This cannot be undone.":"清理所有分頁中符合目前篩選條件的已結束任務?進行中的任務及每種類型的最新紀錄將保留,用於任務排程。此操作無法復原。","Delete condition":"刪除條件","Delete Condition":"刪除條件","Delete failed":"刪除失敗","Delete failed models":"刪除失敗模型","Delete failed models ({{count}})":"刪除失敗模型({{count}})","Delete Field":"刪除欄位","Delete group":"刪除分組","Delete Header":"刪請求頭","Delete Invalid":"刪除無效","Delete invalid codes":"刪除無效代碼","Delete invalid codes (used/disabled/expired)":"刪除無效代碼(已使用/已停用/已過期)","Delete invalid redemption codes":"刪除無效兌換碼","Delete Invalid Redemption Codes?":"刪除無效的兌換碼?","Delete logs":"刪除日誌","Delete mapping":"刪除映射","Delete metadata and custom pricing for {{count}} models?":"刪除 {{count}} 個模型的資料及自訂定價?","Delete metadata for \\"{{name}}\\"? Pricing and channel configurations will be retained.":"刪除「{{name}}」的中繼資料?價格及渠道設定將保留。","Delete metadata for \\"{{name}}\\"? Pricing will be retained.":"刪除「{{name}}」的模型資料?現有定價將保留。","Delete metadata for {{count}} models? Pricing will be retained.":"刪除 {{count}} 個模型的資料?現有定價將保留。","Delete Model":"刪除模型","Delete model \\"{{name}}\\"?":"刪除模型「{{name}}」?","Delete Models?":"刪除模型?","Delete plugin version?":"刪除外掛版本?","Delete Provider":"刪除供應商","Delete Request Header":"刪除請求頭","Delete rule":"刪除規則","Delete Rule":"刪除規則","Delete selected API keys":"刪除選定的 API 金鑰","Delete selected channels":"刪除所選渠道","Delete selected models":"刪除選定的模型","Delete selected redemption codes":"刪除選取的兌換碼","Delete session rule “{{name}}”? Save your changes to apply the removal.":"刪除工作階段規則「{{name}}」?儲存變更後生效。","Delete stale instance":"刪除失聯實例","Delete stale instance \\"{{name}}\\"? If it has reported again, it will not be deleted.":"刪除失聯實例「{{name}}」?如果它已重新上報,將不會被刪除。","Delete stale instances":"刪除失聯實例","Delete vendor record":"刪除供應商記錄","Delete vendors":"刪除供應商","Deleted":"已註銷","Deleted \\"{{name}}\\"":"已刪除「{{name}}」","Deleted ({{id}})":"已刪除({{id}})","Deleted {{count}} failed models":"已刪除 {{count}} 個失敗模型","Deleted {{count}} historical system tasks":"已清理 {{count}} 筆歷史系統任務","Deleted {{count}} stale instances":"已刪除 {{count}} 個失聯實例","Deleted a custom OAuth provider":"刪除了一個自訂 OAuth 提供方","Deleted a deployment":"刪除了一個部署","Deleted a model":"刪除了一個模型","Deleted a passkey":"解綁了一個 Passkey","Descending":"降冪","Disable tag grouping to drag channels":"關閉標籤彙整後可拖曳通道","Disabled {{count}} keys":"已停用 {{count}} 個金鑰","Deleted a prefill group":"刪除了一個預填組","Deleted a redemption code":"刪除了一個兌換碼","Deleted a vendor":"刪除了一個供應商","Deleted all disabled channels ({{count}})":"刪除全部停用渠道({{count}})","Deleted channel {{name}} (ID: {{id}})":"刪除渠道 {{name}}(ID: {{id}})","Deleted invalid redemption codes":"刪除無效兌換碼","Deleted stale instance":"已刪除失聯實例","Discord ID is empty!":"Discord ID 為空!","Deleted successfully":"刪除成功","Deleted tokens":"實際刪除數","Deleted user {{username}} (ID: {{id}})":"刪除用戶 {{username}}(ID: {{id}})","Deleted: {{processed}}":"實際刪除 {{processed}} 個","Deleting this custom version does not disable the platform. The same-name factory plugin will be restored automatically.":"刪除此自定义版本不会停用平台,同名內建外掛将自动恢复。","Deleting will permanently remove this subscription record (including benefit details). Continue?":"刪除會徹底移除該訂閱記錄(含權益明細)。是否繼續?","Deleting...":"刪除中...","Demo site":"演示站點","Demo site mode":"演示站點模式","Demo Site Mode":"演示站點模式","Demote":"降級","Density":"密度","Deploy your own gateway and start routing requests through your configured upstream services.":"部署你自己的閘道,並透過已設定的上游服務開始轉發請求。","Deployment created successfully":"建立部署成功","Deployment details":"部署詳情","Deployment ID":"部署 ID","Deployment location":"部署位置","Deployment logs":"部署日誌","Deployment Region":"部署區域","Deployment Region *":"部署區域 *","Deployment requested":"部署已請求","Deployments":"部署","Deprecated":"已棄用","Derives the request names your users call":"產生使用者呼叫的請求模型名稱","Derives the upstream names sent to the provider":"產生傳送給上游的模型名稱","Desc":"降序","Describe":"圖生文","Describe this model...":"描述此模型...","Describe this vendor...":"描述此供應商...","Description":"說明資訊","Description is required":"描述為必填項","Designed and Developed by":"設計與開發","designed for scale":"為規模而設計","Destroyed":"已毀銷","Detail":"詳情","Detailed request logs for investigations.":"用於調查的詳細請求日誌。","Details":"詳情","Detect All Upstream Updates":"偵測所有上游更新","Detect model updates":"偵測模型更新","Detected database":"偵測到的資料庫","Detected high-risk status code redirect rules":"偵測到以下高危狀態碼重新導向規則:","Detection complete: {{add}} to add, {{remove}} to remove":"偵測完成:新增 {{add}} 個,刪除 {{remove}} 個","Detection failed":"偵測失敗","Determines how this group is applied elsewhere.":"確定此分組在其他地方的套用方式。","Deterministic sampling seed (best-effort)":"盡量保證可復現的採樣種子","Developer Friendly":"開發者友好","Device Type Preference":"設備類型偏好","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Dify 渠道僅支援 chatflow 和 agent,agent 不支援圖像","Digest:":"摘要:","Direction":"方向","Directory File Count":"目錄檔案數","Directory Total Size":"目錄總大小","Disable":"停用","Disable 2FA":"停用 2FA","Downgrade group does not exist":"降級分組不存在","Disable All":"停用全部","Disable channels on repeated failures":"多次失敗時自動停用","Disable custom task plugins?":"停用自訂任務外掛?","Disable on failure":"失敗時停用","Disable plugin {{name}} ({{key}})? Requests using this plugin may be affected.":"停用外掛程式 {{name}}({{key}})?使用此外掛程式的請求可能受到影響。","Disable plugin?":"停用外掛程式?","Disable selected channels":"停用選定的渠道","Disable selected models":"停用選定的模型","Disable store passthrough":"禁止透傳 store","Disable task plugins?":"停用任務外掛?","Disable this key?":"停用此金鑰?","Disable threshold (seconds)":"停用閾值(秒)","Disable Two-Factor Authentication":"停用雙重身份驗證","disabled":"已停用","Disabled":"已停用","Disabled all channels with tag: {{tag}}":"已停用標籤「{{tag}}」下的所有渠道","Disabled channels with tag {{tag}}":"停用標籤為 {{tag}} 的渠道","Disabled globally":"全域已停用","Disabled lanes are omitted on save.":"關閉的價格通道儲存時會被省略。","Disabled Reason":"停用原因","Disabled Time":"停用時間","Disabled two-factor authentication":"已停用兩步驟驗證","Disabled; fell back to factory":"已禁用;已回落內建版","Disabled; platform unavailable":"已禁用;平台不可用","Disabling...":"停用中...","Discard changes":"捨棄變更","Discard unsaved changes?":"捨棄未儲存的變更?","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"免責聲明:僅限個人使用,請勿分發或共享任何憑證。該渠道存在前置條件與使用門檻,請在充分了解流程與風險後使用,並遵守 OpenAI 的相關條款與政策。相關憑證與設定僅限接入 Codex CLI 使用,不適用於其他用戶端、平台或渠道。","Discord":"Discord","Discount":"優惠","Discount map by recharge amount (JSON object)":"按儲值金額的折扣映射 (JSON 物件)","Discount Rate":"折扣率","Discount rate must be ≤ 1":"折扣率必須 ≤ 1","Discount rate must be greater than 0":"折扣率必須大於 0","Discount Rate:":"折扣率:","Discount ratio for cache hits.":"緩存命中時的折扣比例。","Discouraged":"不推薦","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"探索精選 AI 模型,清晰比較價格與能力,為不同場景選擇合適的模型。","Discover the leading models in each domain":"發掘各個領域的領先模型","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"探索平台上使用最多的模型和增長中的供應商,數據基於實時用量更新。","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"發掘平台上最受歡迎的模型、熱門套用與崛起的廠商——每個分類的數據持續更新。","Discovering...":"發現中...","Disk cache cleared":"磁碟緩存已清理","Disk Cache Settings":"磁碟緩存設定","Disk Cache Threshold (MB)":"磁碟緩存閾值 (MB)","Disk cache, system performance monitoring, and operation statistics":"磁碟緩存、系統效能監控與運維統計","Disk Hits":"磁碟命中","Disk Threshold (%)":"磁碟閾值 (%)","Display in Currency":"以貨幣顯示","Display limit":"顯示數量","Display Mode":"顯示模式","Display name":"顯示名稱","Display Name":"顯示名稱","Display name and email used in outgoing messages":"用於發送訊息的顯示名稱和電子郵件","Display Name Field":"顯示名稱欄位","Display name for this chat client.":"此聊天用戶端的顯示名稱。","Display name for this monitoring group (max 50 characters)":"此監控分組的顯示名稱(最多 50 個字元)","Display name for this payment method.":"此支付方式的顯示名稱。","Display name shown to users.":"顯示給用戶的名稱。","Display Options":"顯示選項","Display policy":"顯示策略","Display Token Statistics":"顯示 Token 統計資訊","Displayed":"正常顯示","Displayed in":"顯示單位","Displays the mobile sidebar.":"顯示流動側邊欄。","Do not keep sessions":"不保持","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"請勿過度信任此功能,IP 可能被偽造,請配合 nginx 和 cdn 等閘道使用","Do not repeat check-in; only once per day":"請勿重複簽到;每天僅一次","Do not wait one second between polling async tasks for this channel":"該渠道輪詢異步任務時不等待一秒","Do regex replacement in the target field":"在目標欄位裡做正則替換","Do string replacement in the target field":"在目標欄位裡做字串替換","Docs":"文件","Documentation Link":"文件連結","Documentation or external knowledge base.":"文件或外部知識庫。","Does not check healthy channels. It only rechecks auto-disabled channels and restores them after they recover.":"不檢查正常渠道,只複查被系統自動停用的渠道,並在恢復後重新啟用。","does not exist or might have been removed.":"不存在或可能已被移除。","Domain":"域名","Domain Filter Mode":"域名過濾模式","Don\'t have an account?":"沒有賬號?","Done":"完成","Doubao":"Doubao","Doubao custom API address editing unlocked":"已解鎖豆包自訂 API 地址編輯","Double check the configuration below. Your system will be locked until initialization is complete.":"仔細檢查以下設定。您的系統將在初始化完成前保持鎖定狀態。","Downgrade Group":"降級分組","Downgrade to pre-purchase group":"降級到購買前分組","Downgrade to this group after the subscription expires":"訂閱過期後降級到該分組","Download":"下載","Drag {{group}} to reorder":"拖曳 {{group}} 以重新排序","Drag mode":"拖曳模式","Drag mode help":"拖曳模式說明","Drag the handle to move a channel.":"按住左側拖曳把手移動渠道。","Drag to change priority. Use arrow keys to move, Escape to cancel.":"拖曳調整優先級,也可使用方向鍵移動,Esc 取消。","Drag to move":"拖曳以移動","Drag to resize":"拖曳以調整大小","Drag to set channel priority":"拖曳調整渠道優先級","Draw":"繪圖","Drawing":"繪圖","Drawing logs":"繪製日誌","Drawing Logs":"繪圖日誌","Drawing task polling":"繪圖任務輪詢","Drawing task records":"繪圖任務記錄","Drop a JavaScript plugin file here":"將 JavaScript 外掛檔案拖放到此處","Drop at an edge to create a different priority.":"拖到渠道邊緣,插入新的優先級。","Drop between tiers to change priority, or in the center to join a tier":"拖到級別之間調整優先級,拖到中間加入同級","Drop in the center to use the same priority.":"拖到渠道中央,加入相同優先級。","Dry run result":"試跑結果","Duplicate":"重複","Duplicate group names: {{names}}":"存在重複的分組名稱:{{names}}","Duplicate model in route models":"路由模型中存在重複模型","Duplicate source model mappings are not allowed":"不允許重複的源模型映射","Duplicate source model(s): {{models}}":"重複的源模型:{{models}}","Duration":"耗時","Duration (hours)":"時長 (小時)","Duration Settings":"有效期設定","Duration Unit":"有效期單位","Duration Value":"有效期數值","Dynamic declarations cannot be previewed. Retry or review the source below.":"動態產生的宣告無法預覽。可重試,或查看下方原始碼。","Dynamic multiplier":"動態倍率","Dynamic operation":"動態操作","Dynamic Pricing":"動態收費","e.g. ¥ or HK$":"例如,¥ 或 HK$","e.g. 401, 403, 429, 500-599":"例如 401、403、429、500-599","e.g. 8 means 1 USD = 8 units":"例如,8 表示 1 美元 = 8 單位","e.g. Basic Plan":"例如:基礎套餐","e.g. Clean tool parameters to avoid upstream validation errors":"例如:清理工具參數,避免上游校驗錯誤","e.g. Company SSO":"例如:公司 SSO","e.g. example.com":"例如,example.com","e.g. gpt-4o, gemini-2.5-flash":"例如 gpt-4o, gemini-2.5-flash","e.g. llama3.1:8b":"例如 llama3.1:8b","e.g. My GitLab":"例如:My GitLab","e.g. my-gitlab":"例如:my-gitlab","e.g. New API Console":"例如,New API 控制台","e.g. openid profile email":"例如:openid profile email","e.g. Requires level {{required}}; your current level is {{current}}":"例如:需要等級 {{required}};你目前的等級是 {{current}}","e.g. Suitable for light usage":"例如:適合輕度使用","e.g. This request does not meet access policy":"例如:該請求不滿足准入策略","e.g., 0.95":"例如,0.95","Email & Notifications":"電郵與通知","Email address is already in use":"電子郵件地址已被使用","e.g., 100":"例如,100","e.g., 123456":"例如,123456","e.g., 2025-04-01-preview":"例如,2025-04-01-preview","e.g., 50":"例如,50","e.g., 500000":"例如,500000","e.g., 7342866812345":"例如,7342866812345","Email is empty!":"電子郵件為空!","Email or password is empty!":"電子郵件地址或密碼為空!","e.g., 8 means 8 local currency per USD":"例如,8 表示每美元兌換 8 單位本地貨幣","e.g., Alipay, WeChat":"例如,支付寶,微信","e.g., Basic Package":"例如,基本套餐","Email verification is enabled, please enter email address and verification code":"管理員開啟了電子郵件驗證,請輸入電子郵件地址和驗證碼","e.g., CN2 GIA":"例如,CN2 GIA","e.g., Core APIs, OpenAI, Claude":"例如,核心 API,OpenAI,Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"例如,d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"例如,default, vip, premium","e.g., gpt-4, claude-3":"例如:gpt-4、claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"例如:gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"例如,https://api.example.com (在 /suno 之前的路徑)","e.g., https://api.openai.com/v1/chat/completions":"例如,https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"例如,https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"例如,https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"例如,https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"例如,OpenAI GPT-4 生產環境","e.g., preview":"例如,preview","e.g., prod_xxx":"例如,prod_xxx","e.g., Recommended for China Mainland Users":"例如,推薦給中國大陸用戶","e.g., SiAlipay":"例如,SiAlipay","e.g., us-central1 or JSON format for model-specific regions":"例如,us-central1 或模型特定區域的 JSON 格式","e.g., v2.1":"例如,v2.1","Each backup code can only be used once.":"每個備用代碼只能使用一次。","Each item must be an object with a single key-value pair.":"每個條目必須是包含單個鍵值對的物件。","Each item must have exactly one key-value pair.":"每個條目必須恰好包含一個鍵值對。","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"每行代表一個關鍵詞。留空以停用清單,但保留開關狀態。","Each matrix cell is one rule: users of this row group pay this ratio when billed as this column group. In JSON the row is the outer key and the column is the inner key.":"矩陣的每個單元格是一條規則:該行用戶分組的用戶按該列分組收費時使用此倍率。在 JSON 中行是外層鍵,列是內層鍵。","Each row prices one combination of {{fields}}.":"每列分別為一種 {{fields}} 組合定價。","Each rule reads as a sentence: users of one group pay a special ratio when billed as another group. Without a rule, the billing group base ratio applies.":"每條規則就是一句話:某分組的用戶按另一分組收費時享受特殊倍率。沒有規則時,使用收費分組的基礎倍率。","Each source serves an index.json listing installable plugins. Indexes are fetched by your browser; the gateway makes no outbound requests.":"每個來源都提供一份 index.json,列出可安裝的外掛。索引由你的瀏覽器取得,閘道不會發出任何對外請求。","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"每個檔位支援 0~2 個條件(針對 len、p、c),最後一檔為兜底檔無需條件。建議條件使用 len(完整輸入長度,含緩存命中),避免緩存命中降低 p 導致檔位誤判。","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"每個檔位最多支援 2 個條件;最後一個檔位是不帶條件的兜底檔。建議使用完整輸入長度作為檔位條件,避免緩存命中減少收費輸入 token 後誤判檔位。","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"每個階梯最多支援 2 個條件。最後一個無條件階梯作為兜底。","Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.":"Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.","Earnings":"收益","Edit":"編輯","Edit {{title}}":"編輯{{title}}","Edit access token":"編輯存取令牌","Edit all channels with tag:":"編輯所有帶有標籤的渠道:","Edit Announcement":"編輯公告","Edit API Shortcut":"編輯 API 快捷方式","Edit billing ratios and user-selectable groups in one table.":"在一個表格中編輯收費倍率和用戶可選分組。","Edit Channel":"編輯渠道","Edit channel routing":"編輯渠道路由","Edit chat preset":"編輯聊天預設","Edit discount tier":"編輯折扣檔位","Edit FAQ":"編輯常見問題","Edit group":"編輯分組","Edit group rate limit":"編輯組速率限制","Edit group settings as JSON. Changes are shared with the visual editor.":"透過 JSON 編輯分組設定,變更會同步至視覺化編輯器。","Edit JSON object directly. Suitable for simple parameter overrides.":"直接編輯 JSON 物件。適合簡單覆蓋參數的場景。","Edit JSON text directly. Format will be validated on save.":"直接編輯 JSON 文字,儲存時會校驗格式。","Edit mapping":"編輯映射","Edit model":"編輯模型","Edit Model":"編輯模型","Edit model pricing":"編輯模型定價","Edit models and vendors, and sync them from upstream.":"編輯模型和供應商,並從上游同步。","Edit non-sensitive settings such as models, groups, and routing rules.":"編輯模型、分組和路由規則等非敏感設定。","Edit OAuth Provider":"編輯 OAuth 供應商","Edit payment method":"編輯支付方式","Edit Prefill Group":"編輯預填充分組","Edit pricing rule {{name}}":"編輯定價規則 {{name}}","Edit product":"編輯產品","Edit ratio override":"編輯倍率覆蓋","Edit Rule":"編輯規則","Edit selectable group":"編輯可選分組","Edit sensitive channel settings":"編輯敏感渠道設定","Edit Tag":"編輯標籤","Edit Tag:":"編輯標籤:","Edit Uptime Kuma Group":"編輯 Uptime Kuma 分組","Edit Vendor":"編輯供應商","Enabled {{count}} keys":"已啟用 {{count}} 個金鑰","edit_this":"edit_this","Edited channels with tag {{tag}}":"編輯標籤為 {{tag}} 的渠道","Editor mode":"編輯器模式","Education":"教育","Effective icon":"生效圖示","Email":"電郵","Email (required for verification)":"電子郵件(驗證必需)","Email Address":"電郵地址","Email Alias Restriction":"電郵別名限制","Email bound successfully!":"電郵連結成功!","Email confirmation code resend":"重送信箱確認碼","Email Domain Restriction":"電郵域限制","Email Domain Whitelist":"電郵域白名單","Email Field":"電郵欄位","Email Verification":"電郵驗證","Email verification code is incorrect.":"信箱驗證碼不正確。","Email verification has ended. Start again to continue.":"信箱驗證已結束,請重新開始。","Email, summarisation, knowledge work":"郵件、摘要與知識工作","Embeddings":"嵌入","Empty":"空","Empty value will be saved as {}.":"空值將儲存為 {}。","Enable":"啟用","Enable {{parameter}}":"啟用 {{parameter}}","Enable 2FA":"啟用 2FA","Enable All":"啟用全部","Enable check-in feature":"啟用簽到功能","Enable custom task plugins":"啟用自訂任務外掛","Enable Data Dashboard":"啟用數據儀表板","Enable demo mode with limited functionality":"啟用功能受限的演示模式","Enable Discord OAuth":"啟用 Discord OAuth","Enable Disk Cache":"啟用磁碟緩存","Enable drawing features":"啟用繪圖功能","Enable filtering":"啟用過濾","Enable FunctionCall thoughtSignature Fill":"啟用 FunctionCall 思維簽名填充","Enable GitHub OAuth":"啟用 GitHub OAuth","Enable Groups":"啟用分組","Enable if this is an OpenRouter enterprise account with special response format":"如果這是具有特殊回應格式的 OpenRouter 企業用戶,則啟用","Enable io.net deployments":"啟用 io.net 部署","Enable io.net model deployment service in console":"在控制台啟用 io.net 模型部署服務","Enable LinuxDO OAuth":"啟用 LinuxDO OAuth","Enable model performance metrics":"啟用模型效能指標","Enable OIDC":"啟用 OIDC","Enable only if the upstream supports Responses WebSocket. HTTP requests are unaffected when disabled.":"僅在上游支援 Responses WebSocket 時開啟。關閉後仍可使用一般 HTTP 請求。","Enable or disable this channel":"啟用或停用此渠道","Enable or disable this model":"啟用或停用此模型","Enable Passkey":"啟用 Passkey","Enable passthrough":"確認開啟透傳","Enable Performance Monitoring":"啟用效能監控","Enable plugin {{key}}":"啟用外掛 {{key}}","Enable plugin?":"啟用外掛程式?","Enable rate limiting":"啟用速率限制","Enable request body passthrough?":"確認開啟透傳請求主體?","Enable request header passthrough?":"確認開啟透傳請求標頭?","Enable Request Passthrough":"啟用請求透傳","Enable Responses WebSocket":"啟用 Responses WebSocket","Enable selected channels":"啟用選定的渠道","Enable selected models":"啟用選定的模型","Enable session affinity":"啟用工作階段保持","Enable SSL/TLS":"啟用 SSL/TLS","Enable SSRF Protection":"啟用 SSRF 保護","Enable STARTTLS":"啟用 STARTTLS","Enable streaming mode for the test request.":"為測試請求啟用串流模式。","Enable task plugins":"啟用任務外掛","Enable Telegram OAuth":"啟用 Telegram OAuth","Enable test mode for Creem payments":"啟用 Creem 支付測試模式","Enable this key?":"啟用此金鑰?","Enable Turnstile":"啟用 Turnstile","Enable Two-factor Authentication or Passkey in Security & Access to continue.":"請在「安全與存取」中啟用兩步驟驗證或 Passkey 後繼續。","Enable Two-factor Authentication or Passkey in Security & Access to unlock sensitive operations.":"請在「安全與存取」中啟用兩步驟驗證或 Passkey,以進行敏感操作。","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"在您的個人資料中啟用雙重身份驗證或 Passkey 以解鎖敏感操作。","Enable unlimited quota for this API key":"為此 API 金鑰啟用無限配額","Enable violation deduction":"啟用違規扣費","Enable Waffo":"啟用 Waffo","Enable Waffo Pancake":"啟用 Waffo Pancake","Enable WeChat Auth":"啟用微信授權","Enable when proxying workers that fetch images over HTTP.":"當代理透過 HTTP 獲取圖像的 worker 時啟用。","Enable when the client and upstream use the same API format and you need to preserve upstream-specific or new fields the gateway does not yet support. Usually leave this off.":"適用於用戶端與上游使用相同 API 格式,需要保留上游支援、但閘道尚未支援的新參數或擴充欄位的情境。通常無需開啟。","Enable when the upstream needs client information from Codex or Claude Code headers; may expose client information":"上游需要取得 Codex、Claude Code 等用戶端請求標頭資訊時開啟;可能暴露用戶端資訊","Enable when the upstream needs information from clients such as Codex or Claude Code, including User-Agent, client version or session headers. Usually leave this off.":"適用於上游需要取得 Codex、Claude Code 等用戶端資訊的情境,例如請求標頭中的 User-Agent、用戶端版本或工作階段識別碼。通常無需開啟。","Enabled":"已啟用","Enabled all channels with tag: {{tag}}":"已啟用標籤「{{tag}}」下的所有渠道","Enabled channels with tag {{tag}}":"啟用標籤為 {{tag}} 的渠道","Enabled Status":"啟用狀態","Enabled two-factor authentication":"已啟用兩步驟驗證","Enabling...":"正在啟用...","Encourages introducing new topics":"鼓勵引入新話題","Encourages new topics":"鼓勵討論新話題","End":"結束","End Error":"結束錯誤","End Reason":"結束原因","End Time":"結束時間","End time must be after start time":"結束時間必須晚於開始時間","Enter the Discovery URL or Issuer URL first":"請先填寫 Discovery URL 或 Issuer URL","End weekday":"結束星期","End-user identifier for abuse monitoring":"用於風險審計的終端用戶標識","Endpoint":"端點","Endpoint config":"端點設定","Endpoint Configuration":"端點設定","Endpoint Type":"端點類型","Endpoint, provider-specific settings, and credentials.":"接口地址、供應商專屬設定和憑證。","Endpoint:":"端點:","Endpoints":"端點","English":"英文","Ensure Prefix":"確保前綴","Ensure Suffix":"確保後綴","Ensure the string has a specified prefix":"確保字串有指定前綴","Ensure the string has a specified suffix":"確保字串有指定後綴","Enter 6-digit code":"輸入 6 位數字代碼","Enter a domain such as example.com or localhost, without a protocol, port or path. Put addresses with ports in Allowed Passkey websites.":"只填寫網域,例如 example.com 或 localhost,不包含通訊協定、連接埠或路徑。含連接埠的完整位址請填入「允許使用通行密鑰的網站」。","Enter a finite, non-negative price":"請輸入有限的非負價格","Enter a finite, non-negative price.":"請輸入有限的非負價格。","Enter a name":"輸入名稱","Enter a new name":"輸入新名稱","Enter a positive integer":"請輸入正整數","Enter a positive or negative amount to adjust the quota":"輸入正數或負數以調整配額","Enter a react-icons component name. Invalid names show no icon.":"輸入 react-icons 組件名。無法解析的名稱不會顯示圖標。","Enter a rule to preview mappings.":"填寫規則後,這裡會顯示具體對應。","Enter a valid condition value.":"請輸入有效的條件值。","Enter a valid email or leave blank":"請輸入有效的電郵地址或留空","Enter a value and press Enter":"輸入值並按 Enter 鍵","Enter amount in {{currency}}":"輸入金額({{currency}})","Enter amount in tokens":"輸入額度(Token)","Enter an absolute HTTP(S) URL without credentials, query parameters, or fragments":"請輸入不含驗證資訊、查詢參數或片段的 HTTP(S) 絕對 URL","Enter an absolute http(s) URL.":"請輸入完整的 http(s) URL。","Enter an ISO date and time with a timezone offset.":"請輸入含時區偏移的 ISO 日期與時間。","Enter announcement content (supports Markdown & HTML)":"輸入公告內容(支援 Markdown 和 HTML)","Enter announcement content (supports Markdown/HTML)":"輸入公告內容(支援 Markdown/HTML)","Enter API Key":"請輸入 API Key","Enter API key for this channel":"輸入此渠道的 API 金鑰","Enter API Key, format: APIKey|Region":"請輸入 API Key,格式:APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"請輸入 API Key(每行一個),格式:APIKey|Region","Enter application token":"輸入套用程式令牌","Enter authenticator code":"輸入身份驗證器代碼","Enter backup code (e.g., CAWD-OQDV)":"輸入備用代碼(例如,CAWD-OQDV)","Enter code":"輸入代碼","Enter code or backup code":"輸入代碼或備用代碼","Enter Completion price to calculate ratio":"輸入 Completion 價格來計算比率","Enter Creem API key":"輸入 Creem API 金鑰","Enter custom API endpoint URL":"輸入自訂 API 端點 URL","Enter deployment region or JSON mapping:":"輸入部署區域或 JSON 映射:","Enter display name":"輸入顯示名稱","Enter HTML code (e.g.,

About us...

) or a URL (e.g., https://example.com) to embed as iframe":"輸入 HTML 代碼(例如,

關於我們...

)或 URL(例如,https://example.com)以作為 iframe 嵌入","Enter Input price to calculate ratio":"輸入 Input 價格來計算比率","Enter JSON to override request headers":"輸入 JSON 以覆蓋請求頭","Enter key, format: AccessKey|SecretAccessKey|Region":"請輸入金鑰,格式:AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"請輸入金鑰(每行一個),格式:AccessKey|SecretAccessKey|Region","Enter model name":"請輸入模型名稱","Enter new key to update":"輸入新金鑰以更新","Enter new key to update, or leave empty to keep current key":"輸入新金鑰以更新,或留空以保留目前金鑰","Enter new tag name (leave empty to disband tag)":"輸入新標籤名稱(留空以解散標籤)","Enter new tag name or leave empty":"輸入新標籤名稱或留空","Enter new token to update":"輸入新令牌以更新","Enter one API key per line for batch creation":"每行輸入一個 API 金鑰進行大量建立","Enter one key per line for batch creation":"每行輸入一個金鑰進行大量建立","Enter one keyword per line":"每行輸入一個關鍵詞","Enter one website address per line, such as https://example.com. Do not include a page path.":"每行填寫一個網站位址,例如 https://example.com,不要帶後面的頁面路徑。","Enter only a top-level callback domain, for example https://api.example.com, without any path.":"只填寫Callback頂級域名,例如 https://api.example.com,不要帶任何路徑。","Enter only the domain, such as example.com, without https://, a port or a page path. If you use both example.com and api.example.com, you can enter example.com.":"只填網域,例如 example.com,不要帶 https://、連接埠或後面的頁面路徑。如果同時使用 example.com 和 api.example.com,可以填寫 example.com。","Enter only the domain, without https://, a port or a page path. example.com and www.example.com are different Passkey domains; changing between them does not migrate existing Passkeys.":"只填寫網域,不包含 https://、連接埠或頁面路徑。example.com 與 www.example.com 對應不同的通行金鑰網域,切換網域不會遷移現有通行金鑰。","Enter password":"輸入密碼","Enter password (8-20 characters)":"輸入密碼(8-20 個字元)","Enter password (8–128 characters)":"輸入密碼(8–128 個字元)","Enter previous domains, one per line, without a protocol, port or path. Different ports on the same domain do not need compatible domains.":"每行填寫一個舊網域,不包含通訊協定、連接埠或路徑。同一網域的不同連接埠無須加入相容清單。","Enter previous Passkey domains, one per line. Existing Passkeys can still verify with these domains; new Passkeys use the primary domain.":"每行填寫一個舊通行金鑰網域。現有通行金鑰仍可透過這些網域驗證,新通行金鑰使用主要網域。","Enter quota in {{currency}}":"輸入 {{currency}} 額度","Enter quota in tokens":"輸入令牌配額","Enter sample usage to estimate the cost. Group and request multipliers are not included.":"填寫一次請求的用量,查看預估費用。結果未乘以群組倍率和請求規則倍率。","Enter secret key":"輸入金鑰","Enter system prompt (user prompt takes priority)":"輸入系統提示詞(用戶提示詞優先)","Enter tag name (optional)":"輸入標籤名稱(可選)","Enter the 6-digit authenticator code or an unused backup code.":"輸入驗證器的 6 位驗證碼或未使用的備用碼。","Enter the 6-digit authenticator code.":"請輸入驗證器中的 6 位驗證碼。","Enter the 6-digit code from your authenticator app":"輸入來自身份驗證器套用的 6 位代碼","Enter the 6-digit email verification code.":"請輸入六位信箱驗證碼。","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"輸入來自身份驗證器套用的 6 位基於時間的單次密碼或 8 位備份代碼。","Enter the complete URL, supports":"輸入完整的 URL,支援","Expiration time cannot be earlier than current time":"過期時間不能早於當前時間","Enter the Coze agent ID":"輸入 Coze 代理 ID","Enter the full URL of your Gotify server":"輸入您的 Gotify 伺服器的完整 URL","Enter the knowledge base ID":"輸入知識庫 ID","Enter the path before /suno, usually just the domain":"輸入 /suno 之前的路徑,通常只是域名","Enter the quota amount in {{currency}}":"輸入 {{currency}} 的配額數量","Enter the quota amount in tokens":"輸入令牌配額數量","Enter the verification code":"輸入驗證碼","Enter the website domain, such as example.com.":"填寫網站網域,例如 example.com。","Export":"匯出","Export logs":"匯出日誌","Exported {{count}} logs":"已匯出 {{count}} 筆日誌","Enter token counts to preview the estimated cost (excluding group multipliers).":"輸入 token 數量以預覽預估費用(不含用戶組倍率)。","Enter URL...":"輸入 URL...","Enter username":"輸入用戶名","Enter verification code":"輸入驗證碼","Enter webhook secret":"輸入 webhook 金鑰","Enter your authenticator code or a backup code":"輸入您的身份驗證器代碼或備份代碼","Enter your email":"輸入您的電郵","Enter your redemption code":"輸入您的兌換碼","Enter your registered email and we will send you a link to reset your password.":"輸入您註冊的電郵,我們將向您發送一個重設密碼的連結。","Enter your username":"輸入您的用戶名","Enter your username or email":"輸入您的用戶名或電郵","Enterprise Account":"企業用戶","Enterprise-grade security with comprehensive permission management":"企業級安全性,提供全面的權限管理","Entries configured in Request Header Override still take priority":"請求標頭覆蓋中手動設定的項目仍然優先","Entrypoint (space separated)":"入口點 (空格分隔)","Enum":"列舉","Enum values":"列舉值","Env (JSON object)":"環境變數 (JSON 物件)","Environment variables":"環境變數","Environment variables (JSON)":"環境變數 (JSON)","Epay Alipay":"Epay 支付寶","Epay endpoint":"Epay 端點","Epay Gateway":"Epay 閘道","Epay is a payment protocol, not a specific official website. Verify the provider yourself and do not trust random third-party Epay deployments.":"Epay 是一種支付協定,不是某個固定官網。請自行核驗服務提供方,不要輕信他人搭建的第三方 Epay 站點。","Epay merchant ID":"易支付商戶 ID","Epay safety reminder":"Epay 安全提醒","Epay secret key":"Epay 金鑰","Epay WeChat Pay":"Epay 微信支付","Equals":"等於","Error":"錯誤","Error Code (optional)":"錯誤代碼(可選)","Error establishing connection":"建立連接失敗","Error Message":"錯誤訊息","Error Message (required)":"錯誤訊息(必填)","Error parsing response data":"解析回應數據失敗","Error Type (optional)":"錯誤類型(可選)","Estimated cost":"預計成本","Estimated quota cost":"估算配額費用","Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.":"根據提供商回傳的用戶資訊欄位執行政策判斷。條件和巢狀分組支援 and/or 邏輯。","Event":"事件","Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.":"定價表中的每個分組名可用在兩個地方:用戶身上(用戶分組,由管理員分配)和令牌身上(令牌分組,建立令牌時選擇)。同一批名字,兩種不同職責。","Failed to check user bindings, please try again later":"檢查使用者綁定時發生錯誤,請稍後再試","Every other device will lose access immediately. This device will remain signed in.":"其他所有裝置將立即失去存取權限,目前裝置將保持登入。","Everything configured for this group, in one place.":"該分組的全部設定,一處看全。","Exact":"精確","Exact Match":"完全匹配","Exact match only and case-sensitive. Prefixes, regex, and * wildcards are not supported.":"只做完整精確匹配,區分大小寫;不支援前綴、正則或 * 萬用字元。","Example":"示例","Example (all channels):":"示例(全部渠道):","Failed to copy channel. Please try again later":"複製渠道失敗,請稍後重試","Example (specific channels):":"示例(指定渠道):","Example price":"示例價格","Example spec":"示例規格","Failed to count channel types. Please try again later":"取得渠道類型統計失敗,請稍後重試","Failed to count channels. Please try again later":"取得渠道數量失敗,請稍後重試","Failed to count tags. Please try again later":"取得標籤數量失敗,請稍後重試","Example:":"示例:","Example: users call gpt-4o; upstream receives gpt-4o-all.":"例如:使用者呼叫 gpt-4o,上游收到 gpt-4o-all。","example.com blocked-site.com":"example.com blocked-site.com","Failed to create default token":"建立預設令牌失敗","example.com company.com":"example.com company.com","Failed to create order":"建立訂單失敗","Excellent":"優秀","Exchange rate is required":"匯率為必填項","Failed to create redemption code, please try again later":"建立兌換碼失敗,請稍後重試","Failed to create the administrator account: {{error}}":"建立管理員帳號失敗: {{error}}","Failed to create the Discovery request: {{error}}":"建立 Discovery 請求失敗: {{error}}","Failed to create the plan product":"建立套餐產品失敗","Exchange rate must be greater than 0":"匯率必須大於 0","Excludes the first attempt. Counted per group.":"不含首次,依分組計算。","Execute code in a sandbox during the response":"在回應過程中沙箱執行程式碼","Executor":"執行實例","Exhausted":"已耗盡","Existing account will be reused":"將使用現有用戶","Existing Models ({{count}})":"現有模型 ({{count}})","Existing models: select fields to replace their current values with the values on the right. Unselected fields stay unchanged.":"已有模型:勾選要更新的欄位,目前內容會被右側內容取代;未勾選的保持不變。","Existing Passkeys remain tied to the old domain and may stop working. Keep the old domain to preserve access, or confirm only if you have a recovery plan.":"現有通行金鑰仍綁定舊網域,變更後可能無法使用。保留舊網域可維持存取;請僅在已有復原方案時確認變更。","Exists":"存在","Expand":"展開","Expand All":"全部展開","Expand panel":"展開面板","Expected a JSON array of group identifiers":"應為分組標識符的 JSON 陣列","Expected a JSON array.":"應為 JSON 陣列。","Experiment with prompts and models in real time.":"實時實驗提示詞和模型。","Expiration":"過期時間","Expiration Time":"過期時間","expired":"已過期","Expired":"已過期","Expired at":"過期於","Expired time cannot be earlier than current time":"過期時間不能早於目前時間","Expires":"過期","Expires {{time}}":"{{time}} 過期","Expires at":"到期時間","Expires in":"剩餘到期時間","Export snapshot":"匯出快照","Failed to encode Vertex AI key JSON: {{error}}":"Vertex AI 金鑰 JSON 編碼失敗:{{error}}","Failed to export logs":"匯出日誌失敗","Expose ratio API":"暴露倍率接口","Failed to fetch channel. Please try again later":"取得渠道資訊失敗,請稍後重試","Failed to fetch channels with this tag. Please try again later":"取得標籤渠道失敗,請稍後重試","Failed to fetch channels. Please try again later":"取得渠道列表失敗,請稍後重試","Exposes the pricing/models catalog in the top navigation.":"在頂部導航中顯示定價/模型目錄。","Expression":"計費運算式","Expression - Task pricing":"計費運算式 - 任務定價","Failed to fetch models: {{error}}":"取得模型列表失敗:{{error}}","Expression argument types do not match.":"運算式參數類型不符。","Failed to fetch Ollama version: {{error}}":"取得 Ollama 版本失敗:{{error}}","Expression based":"基於表達式","Failed to fetch reset credit details. Please try again later":"取得重設次數詳情失敗,請稍後重試","Failed to fetch tags. Please try again later":"取得標籤失敗,請稍後重試","Failed to fetch the catalog":"拉取目錄失敗","Failed to fetch the Discovery configuration: {{error}}":"取得 Discovery 設定失敗: {{error}}","Failed to fetch the product list":"拉取產品列表失敗","Expression billing":"表達式收費","Expression compatibility will be checked when saving.":"儲存時會檢查運算式相容性。","Expression editor":"表達式編輯器","Failed to fetch usage. Please try again later":"取得用量資訊失敗,請稍後重試","Expression error":"表達式錯誤","Expression pricing":"表達式收費","Failed to generate default token":"產生預設令牌失敗","Extend":"延長","Failed to get the channel information. Please contact the administrator":"獲取管道資訊失敗,請聯絡管理員","Failed to get the token count":"取得令牌數量失敗","Failed to get the user group":"取得使用者分組失敗","Failed to get token from {{provider}}, please check settings":"從 {{provider}} 取得 Token 失敗,請檢查設定","Failed to get user information":"取得使用者資訊失敗","Extend deployment":"延長部署","Extend failed":"延長失敗","Extended successfully":"延長成功","Failed to initialize the system: {{error}}":"系統初始化失敗: {{error}}","External Device":"外部設備","External link for users to purchase quota":"供用戶購買配額的外部連結","External operations":"對外運營","External operations mode":"對外運營模式","External Speed Test":"外部速度測試","Extra":"額外","Extra destinations beyond the channel API address. The channel address remains accessible.":"管道 API 位址之外可存取的額外網域;管道位址本身仍可存取。","Extra Notes (Optional)":"額外備註(可選)","Extra visible":"額外可見","Extra visible to {{group}}":"對 {{group}} 額外可見","extras":"額外項","Factory":"內建","Factory and custom plugin behavior":"內建与自定义外掛行为","Factory and custom plugins all stop serving immediately. In-flight tasks will be handled by timeout cleanup.":"出廠外掛與自訂外掛將立即停止服務。進行中的任務將由逾時清理處理。","Factory plugins cannot be deleted or disabled individually. A custom version can override them; deleting or disabling that version restores the factory plugin. Third-party-only platforms become unavailable when their plugin is deleted or disabled.":"內建外掛不可刪除或单独禁用。自定义版本可覆盖內建版;刪除或禁用自定义版会恢复內建版。纯第三方平台的外掛被刪除或禁用后将不可用。","Fail Reason":"失敗原因","Fail Reason Details":"失敗原因詳情","failed":"已失敗","Failed":"失敗","Failed to {{action}} user":"{{action}}用戶失敗","Failed to adjust quota":"調整額度失敗","Failed to apply overwrite.":"套用覆蓋失敗。","Failed to apply vendor changes":"套用供應商變更失敗","Failed to batch delete redemption codes":"批次刪除兌換碼失敗","Failed to bind email":"連結電郵失敗","Failed to change password":"修改密碼失敗","Failed to check for updates":"檢查更新失敗","Failed to clean logs":"清理日誌失敗","Failed to complete order":"完成訂單失敗","Failed to complete Passkey login":"無法完成 Passkey 登入","Failed to confirm compliance":"確認合規失敗","Failed to parse appended keys: {{error}}":"追加金鑰解析失敗:{{error}}","Failed to parse credentials. Please check the channel configuration":"解析憑證失敗,請檢查渠道設定","Failed to contact GitHub releases API":"無法連接 GitHub Releases API","Failed to copy":"複製失敗","Failed to parse the Discovery configuration: {{error}}":"解析 Discovery 設定失敗: {{error}}","Failed to parse tool price \\"{{name}}\\": {{error}}":"解析工具價格「{{name}}」失敗:{{error}}","Failed to parse tool prices: {{error}}":"解析工具價格失敗:{{error}}","Failed to copy channel":"複製渠道失敗","Failed to copy keys":"複製金鑰失敗","Failed to copy model names":"複製模型名稱失敗","Failed to copy to clipboard":"複製到剪貼簿失敗","Failed to query channels":"查詢渠道失敗","Failed to query logs":"查詢日誌失敗","Failed to query statistics":"查詢統計資料失敗","Failed to query the upstream task status":"查詢上游任務狀態失敗","Failed to create account":"建立用戶失敗","Failed to create API key":"建立API金鑰失敗","Failed to refresh credentials. Please try again later":"重新整理憑證失敗,請稍後重試","Failed to create channel":"建立渠道失敗","Failed to create deployment":"建立部署失敗","Failed to create provider":"建立供應商失敗","Failed to create redemption code":"建立兌換碼失敗","Failed to create user":"建立用戶失敗","Failed to delete {{count}} model(s)":"刪除 {{count}} 個模型失敗","Failed to delete {{count}} redemption codes":"{{count}} 個兌換碼刪除失敗","Failed to delete account":"刪除賬號失敗","Failed to reset usage. Please try again later":"重設用量失敗,請稍後重試","Failed to delete API key":"刪除API金鑰失敗","Failed to delete API keys":"刪除API金鑰失敗","Failed to delete channel":"刪除渠道失敗","Failed to delete disabled channels":"刪除已停用渠道失敗","Failed to save backup codes":"儲存備用碼失敗","Failed to save configuration":"儲存設定失敗","Failed to delete failed models":"刪除失敗模型失敗","Failed to delete group":"刪除分組失敗","Failed to save the demo site mode setting: {{error}}":"儲存演示站點模式設定失敗: {{error}}","Failed to save the self-use mode setting: {{error}}":"儲存自用模式設定失敗: {{error}}","Failed to delete invalid redemption codes":"刪除無效兌換碼失敗","Failed to delete model":"刪除模型失敗","Failed to delete provider":"刪除供應商失敗","Failed to search tokens":"搜尋令牌失敗","Failed to search top-up records":"搜尋儲值紀錄失敗","Failed to delete redemption code":"刪除兌換碼失敗","Failed to delete user":"刪除用戶失敗","Failed to delete vendor":"刪除供應商失敗","Failed to disable {{count}} model(s)":"停用 {{count}} 個模型失敗","Failed to disable 2FA":"停用 2FA 失敗","Failed to set the audio completion ratio: {{error}}":"音訊補全倍率設定失敗:{{error}}","Failed to set the audio ratio: {{error}}":"音訊倍率設定失敗:{{error}}","Failed to set the cache creation ratio: {{error}}":"快取建立倍率設定失敗:{{error}}","Failed to set the image ratio: {{error}}":"圖片倍率設定失敗:{{error}}","Failed to disable channels":"停用渠道失敗","Failed to disable model":"停用模型失敗","Failed to disable tag channels":"停用標籤渠道失敗","Failed to discover OIDC endpoints":"發現 OIDC 端點失敗","Failed to enable {{count}} model(s)":"啟用 {{count}} 個模型失敗","Failed to enable 2FA":"啟用 2FA 失敗","Failed to enable channels":"啟用渠道失敗","Failed to enable model":"啟用模型失敗","Failed to enable tag channels":"啟用標籤渠道失敗","Failed to fetch channel key":"獲取渠道金鑰失敗","Failed to start payment":"啟用支付失敗","Failed to fetch checkin status":"獲取簽到狀態失敗","Failed to fetch deployment details":"獲取部署詳情失敗","Failed to fetch models":"獲取模型失敗","Failed to fetch OIDC configuration. Please check the URL and network status":"獲取 OIDC 設定失敗。請檢查 URL 和網絡狀態","Failed to fetch reset credit details":"獲取重置次數詳情失敗","Failed to fetch upstream prices":"獲取上游價格失敗","Failed to fetch upstream ratios":"獲取上游比率失敗","Failed to fetch usage":"獲取用量失敗","Failed to fetch user information":"獲取用戶資訊失敗","Failed to fix abilities":"修復渠道一致性失敗","Failed to generate token":"生成令牌失敗","Failed to hide model from model square":"從模型廣場隱藏失敗","Failed to initialize OAuth":"初始化 OAuth 失敗","Failed to initialize system":"系統初始化失敗","Failed to load":"載入失敗","Failed to load access tokens":"載入存取令牌失敗","Failed to load API keys":"載入 API 金鑰失敗","Failed to load artifacts":"製品載入失敗","Failed to load audit records":"載入稽核記錄失敗","Failed to load billing history":"載入收費歷史失敗","Failed to load channel":"通道載入失敗","Failed to load enabled models":"獲取啟用模型失敗","Failed to load home page content":"載入首頁內容失敗","Failed to load image":"無法載入圖像","Failed to load key status":"載入金鑰狀態失敗","Failed to load login sessions":"載入登入工作階段失敗","Failed to load logs":"載入日誌失敗","Failed to load model":"載入模型失敗","Failed to load model pricing":"載入模型定價失敗","Failed to load models":"載入模型失敗","Failed to load Passkey status":"載入 Passkey 狀態失敗","Failed to load playground groups":"載入 playground 分組失敗","Failed to load playground models":"載入 playground 模型失敗","FAQ #{{index}} answer cannot exceed 1000 characters":"第 {{index}} 個 FAQ 的答案長度不能超過 1000 字元","FAQ #{{index}} is missing the answer field":"第 {{index}} 個 FAQ 缺少答案欄位","FAQ #{{index}} is missing the question field":"第 {{index}} 個 FAQ 缺少問題欄位","FAQ #{{index}} question cannot exceed 200 characters":"第 {{index}} 個 FAQ 的問題長度不能超過 200 字元","Failed to load plugins":"載入外掛失敗","FAQ cannot exceed 100 entries":"FAQ 數量不能超過 100 個","Failed to load profile":"載入個人資料失敗","Failed to load redemption codes":"載入兌換碼失敗","Failed to load settings":"載入設定失敗","Failed to load setup data":"無法載入設定數據","Failed to load setup status":"無法載入設定狀態","Failed to load SGLang status":"載入 SGLang 狀態失敗","Failed to load tag data":"載入標籤數據失敗","Failed to load users":"載入用戶失敗","Failed to load vendor":"載入供應商失敗","Failed to load vendors":"載入供應商失敗","Failed to load vLLM status":"vLLM 狀態載入失敗","Failed to parse group items":"解析組項目失敗","Failed to parse JSON file: {{name}}":"解析 JSON 檔案失敗:{{name}}","Failed to prepare pricing conversion":"定價轉換準備失敗","Fetched successfully":"取得成功","Failed to preview metadata":"預覽中繼資料失敗","Failed to preview vendor changes":"預覽供應商變更失敗","Failed to query balance":"查詢餘額失敗","Failed to refresh cache stats":"重新整理緩存統計失敗","Failed to refresh credential":"重新整理憑證失敗","Failed to regenerate backup codes":"重新生成備份代碼失敗","Failed to register Passkey":"註冊 Passkey 失敗","Failed to remove Passkey":"移除 Passkey 失敗","Failed to repair channel consistency":"修復渠道一致性失敗","Failed to reset 2FA":"重置 2FA 失敗","Failed to reset model ratios":"重置模型比率失敗","Failed to reset Passkey":"重置 Passkey 失敗","Failed to reset usage":"重置用量失敗","Failed to revoke token":"撤銷權杖失敗","Failed to save":"儲存失敗","Failed to save announcements":"儲存公告失敗","Failed to save API info":"儲存 API 資訊失敗","Failed to save FAQ":"儲存 FAQ 失敗","Failed to save model pricing":"儲存模型定價失敗","Failed to save Uptime Kuma groups":"儲存 Uptime Kuma 組失敗","Failed to search API keys":"搜尋 API 金鑰失敗","Failed to search redemption codes":"搜尋兌換碼失敗","Failed to search users":"搜尋用戶失敗","Failed to send reset email":"發送重置郵件失敗","Failed to send verification code":"發送驗證碼失敗","Failed to send verification email":"發送驗證郵件失敗","Failed to set tag":"設定標籤失敗","Failed to setup 2FA":"設定 2FA 失敗","Failed to show model in model square":"在模型廣場顯示失敗","Failed to sign out other sessions":"登出其他工作階段失敗","Failed to sign out session":"登出工作階段失敗","Failed to start {{provider}} login":"啟動 {{provider}} 登入失敗","Failed to start Discord login":"啟動 Discord 登入失敗","Failed to start GitHub login":"啟動 GitHub 登入失敗","Failed to start LinuxDO login":"啟動 LinuxDO 登入失敗","Failed to start OIDC login":"啟動 OIDC 登入失敗","Failed to start Passkey login":"無法啟動 Passkey 登入","Failed to start Passkey registration":"啟動 Passkey 註冊失敗","Failed to start Telegram binding":"啟動 Telegram 綁定失敗","Failed to start testing all channels":"無法開始測試所有渠道","Failed to start verification":"啟動驗證失敗","Failed to sync prices":"同步價格失敗","Failed to sync ratios":"同步比率失敗","Failed to test all channels":"無法測試所有渠道","Failed to test channel":"測試渠道失敗","Failed to update all balances":"無法更新所有餘額","Failed to update API key":"更新 API 金鑰失敗","Failed to update API key status":"更新 API 金鑰狀態失敗","Failed to update balance":"無法更新餘額","Failed to update channel":"更新渠道失敗","Failed to update models":"更新模型失敗","Failed to update profile":"無法更新個人資料","Failed to update provider":"更新供應商失敗","Failed to update redemption code":"更新兌換碼失敗","Failed to update redemption code status":"更新兌換碼狀態失敗","Failed to update setting":"更新設定失敗","Failed to update settings":"無法更新設定","Failed to update tag":"更新標籤失敗","Failed to update user":"更新用戶失敗","Failure keywords":"失敗關鍵詞","Failure reason":"失敗原因","Fair":"公平","Fallback":"兜底","Fallback base URL":"兜底 Base URL","Fallback for remaining models":"留空匹配剩餘模型","Fallback must be last":"兜底必須在最後","Fallback route":"兜底路由","Fallback tier":"兜底階梯","FAQ":"常見問答","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ 已新增。點擊「儲存設定」以套用。","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ 已刪除。點擊「儲存設定」以套用。","FAQ saved successfully":"FAQ 儲存成功","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ 已更新。點擊「儲存設定」以套用。","FastGPT":"FastGPT","Feature in development":"功能開發中","Fee":"扣費","Fee Amount":"扣費金額","Fetch":"取得","Fetch available models for:":"獲取可用模型:","Fetch available models from upstream":"從上游獲取可用模型","Fetch from Upstream":"從上游獲取","Fetch mode":"拉取模式","Fetch Models":"獲取模型","Fetched {{count}} model(s) from upstream":"從上游獲取了 {{count}} 個模型","Fetched {{count}} models":"已獲取 {{count}} 個模型","Fetched in your browser and placed in the source field below for review. GitHub and gist page URLs are rewritten to their raw URL automatically.":"由瀏覽器取得並填入下方原始碼欄位供你審查。GitHub 與 gist 頁面 URL 會自動改寫為 raw URL。","Fetching models...":"正在取得模型…","Fetching plugin source...":"正在取得外掛原始碼…","Fetching prefill groups...":"正在獲取預填充分組...","Fetching upstream prices...":"正在獲取上游價格...","Fetching upstream ratios...":"正在獲取上游比例...","Fetching...":"正在取得…","field":"欄位","Field":"欄位","Field change details were not recorded":"未記錄欄位變更明細","Field Mapping":"欄位映射","Field passthrough controls":"欄位透傳控制","Field Path":"欄位路徑","Fields":"欄位","File":"檔案","File could not be verified":"檔案尚未校驗","File integrity verified":"檔案校驗通過","File Search":"檔案搜尋","File verification":"檔案校驗","Files to Retain":"保留檔案數","Fill a CLI template or add a blank rule.":"填充 CLI 範本,或新增空白規則。","Fill All Models":"填充所有模型","Fill Codex CLI / Claude CLI Templates":"填充 Codex CLI / Claude CLI 模板","Fill entire column":"填滿整欄","Fill example (all channels)":"填充示例(全部渠道)","Fill example (specific channels)":"填充示例(指定渠道)","Fill in":"填入","Fill in both Merchant ID and API Private Key before creating.":"建立前請填寫 Merchant ID 和 API 私鑰。","Fill in the credentials above to begin.":"請先填寫上方憑證。","Fill in the following info to create a new subscription plan":"填寫以下資訊建立新的訂閱套餐","Fill in this website":"填入目前網站","Fill Related Models":"填入相關模型","Fill Template":"填入模板","Fill template: level and active":"填入模板:等級和啟用狀態","Fill template: level message":"填入模板:等級提示","Fill template: organization message":"填入模板:組織提示","Fill template: organization or role":"填入模板:組織或角色","Fill Templates":"填充模板","Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.":"填寫客戶端請求體裡的完整 model 值,例如 gpt-4o 或 gemini-2.5-flash。多個模型用英文逗號分隔。","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"僅為使用 OpenAI 格式的 Gemini/Vertex 渠道填充 thoughtSignature","Filled {{count}} model(s)":"已填充 {{count}} 個模型","Filled {{count}} related model(s)":"已填充 {{count}} 個關聯模型","Filter":"篩選","Filter by API key...":"按 API 金鑰篩選...","Filter by channel ID":"按渠道 ID 篩選","Filter by group":"按分組篩選","Filter by MjProxy task ID":"按 MjProxy 任務 ID 篩選","Filter by model name":"依模型名稱篩選","Filter by model name...":"按模型名稱篩選...","Filter by model...":"按模型篩選...","Filter by name or ID...":"按名稱或 ID 篩選...","Filter by name, ID, or key...":"按名稱、ID 或金鑰篩選...","Filter by name...":"按名稱篩選...","Filter by node":"按節點篩選","Filter by price field":"按價格欄位篩選","Filter by ratio type":"按倍率類型篩選","Filter by request ID":"按請求 ID 篩選","Filter by task ID":"按任務 ID 篩選","Filter by token name":"按 Token 名稱篩選","Filter by username":"按用戶名篩選","Filter by username, name or email...":"按用戶名、姓名或電郵篩選...","Filter Dashboard Models":"篩選儀表板模型","Filter mappings":"篩選映射","Filter models by provider, group, type, endpoint, and tags.":"按供應商、分組、類型、端點和標籤篩選模型。","Filter models by type, endpoint, vendor, group and tags":"按類型、端點、供應商、分組和標籤篩選模型","Filter models...":"篩選模型...","Filter plugins...":"筛选外掛...","Filter the model analytics view by time range and user.":"按時間範圍和用戶篩選模型分析視圖。","Filter the traffic flow view by time range and user.":"按時間範圍和用戶篩選分流圖視圖。","Filter...":"篩選...","Filters":"篩選器","Filters active":"篩選已啟用","Final Consumed":"最終消耗","Final cost = base × multiplier when conditions match":"匹配條件時,最終費用 = 基礎費用 × 倍率","Final price multiplier (0.95 = 5% discount":"最終價格乘數 (0.95 = 5% 折扣","Finance":"金融","Find":"尋找","Find the billing group.":"確定收費分組。","Find the ratio.":"確定倍率。","Finish reordering":"完成排序","Finish Time":"完成時間","Finished requests":"已結束請求","First API request":"首個 API 請求","First token":"首字","First/Last Frame to Video":"首尾生影片","Fix Abilities":"修復渠道一致性","Fix order":"修復順序","Fix the Request Header Override JSON first":"請先修正請求標頭覆蓋的 JSON","Fuzzy search keywords must be at least 2 characters long":"使用模糊搜尋時,關鍵字長度至少為 2 個字元","Fixed":"修復","Fixed abilities: {{success}} succeeded, {{fails}} failed":"渠道一致性修復完成:{{success}} 個成功,{{fails}} 個失敗","Fixed channel constraint":"固定通道限制","Fixed fee per request":"每次請求固定費用","Fixed price":"固定價格","Fixed price (USD)":"固定價格 (USD)","Fixed request price":"固定按次價格","Flexible integration":"靈活接入","Floating":"浮動","Flow":"分流","Flow Filters":"分流篩選","Flow width metric":"連線粗細","FluentRead extension not detected. Please ensure it is installed and active.":"未偵測到 FluentRead 擴展。請確保已安裝並啟用。","Flush interval (minutes)":"刷庫間隔(分鐘)","Follow the guided steps to prepare your workspace before the first login.":"請按照引導步驟在首次登入前準備您的工作區。","Follow user group":"跟隨使用者","Font":"字體","Footer":"頁腳","Footer text displayed at the bottom of pages":"顯示在頁面底部的頁腳文字","footer.columns.about.links.aboutProject":"關於項目","footer.columns.about.links.contact":"聯繫我們","footer.columns.about.links.features":"功能","footer.columns.about.title":"關於我們","footer.columns.docs.links.apiDocs":"API 文件","footer.columns.docs.links.installation":"安裝指南","footer.columns.docs.links.quickStart":"快速入門","footer.columns.docs.title":"文件","footer.columns.related.links.midjourney":"MjProxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"One API","footer.columns.related.title":"相關項目","footer.defaultCopyright":"版權所有。","footer.newapi.projectAttributionSuffix":"版權所有,由項目貢獻者設計與開發。","For advanced custom channels this applies only to /v1/responses routes without protocol conversion.":"進階自訂渠道僅對 /v1/responses 且不做協定轉換的路由生效。","GitHub ID is empty!":"GitHub ID 為空!","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"對於 2025 年 5 月 10 日之後新增的渠道,在部署時無需從模型名稱中移除 \\".\\"","For private deployments, format: https://fastgpt.run/api/openapi":"對於私有部署,格式為:https://fastgpt.run/api/openapi","For this channel, map the model name in client requests to the model name sent upstream.":"將用戶端請求中的模型名稱替換為此渠道對應的上游模型名稱。","For this website, you can enter: {{domain}}":"目前網站通常填寫:{{domain}}","Force a syntactically valid JSON response":"強制返回語法合法的 JSON","Force AUTH LOGIN":"強制 AUTH LOGIN","Force Format":"強制格式化","Force format response to OpenAI standard (OpenAI channel only)":"強制將回應格式化為 OpenAI 標準(僅限 OpenAI 渠道)","Force JSON object or schema-conforming output":"強制輸出 JSON 物件或符合 Schema 的結果","Force operation":"強制操作","Force SMTP authentication using AUTH LOGIN method":"強制使用 AUTH LOGIN 方法進行 SMTP 認證","Force-disabled two-factor authentication for the user":"強制關閉了用戶的兩步驗證","Forest Whisper":"森林低語","Forgot password":"忘記密碼","Forgot password?":"忘記密碼?","Form reset to saved values":"表單已重設為儲存的值","Format":"格式","Format conversion is unavailable; the client must use a format the upstream supports":"格式轉換不可用,客戶端必須直接使用上游支援的格式","Format JSON":"格式化 JSON","Format:":"格式:","Format: Access Key ID|Secret Access Key":"格式:Access Key ID|Secret Access Key","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"格式:AccessKey|SecretKey(如果上游是 New API,則只需 ApiKey)","Format: Ak|Sk|Region":"格式:Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"格式:APIKey-AppId,例如:fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"格式:APIKey|SecretKey","Format: APPID|APISecret|APIKey":"格式:APPID|APISecret|APIKey","Format: TokenHub API Key, or legacy AppId|SecretId|SecretKey":"格式:TokenHub API Key,或舊版 AppId|SecretId|SecretKey","Got it":"知道了","Gotify server URL cannot be empty":"Gotify 伺服器位址不能為空","Gotify token cannot be empty":"Gotify 令牌不能為空","Forward requests directly to upstream providers without any post-processing.":"將請求直接轉發給上游供應商,不進行任何後處理。","Forwarding Routes":"路由轉發","Frames per second":"幀率","Free":"可用","Free: {{free}} / Total: {{total}}":"可用空間: {{free}} / 總空間: {{total}}","Frequency Penalty":"頻率懲罰","Friendly name to identify this channel":"用於識別此渠道的友好名稱","From Address":"發件地址","From IO.NET deployment":"來自 IO.NET 部署","From marketplace index":"來自外掛來源索引","From model redirect, not yet added to models list":"來自模型重新導向,尚未加入模型列表","Full API Key":"完整 API 金鑰","Full Base URL (supports":"完整基礎 URL (支援","Group #{{index}} category name cannot exceed 50 characters":"第 {{index}} 個分組的分類名稱長度不能超過 50 字元","Group #{{index}} category name duplicates another group":"第 {{index}} 個分組的分類名稱與其他分組重複","Group #{{index}} contains disallowed content":"第 {{index}} 個分組包含不允許的內容","Group #{{index}} description cannot exceed 200 characters":"第 {{index}} 個分組的描述長度不能超過 200 字元","Group #{{index}} has a URL that cannot be parsed: {{error}}":"第 {{index}} 個分組的 URL 無法解析:{{error}}","Group #{{index}} has an invalid URL format":"第 {{index}} 個分組的 URL 格式不正確","Group #{{index}} is missing the category name field":"第 {{index}} 個分組缺少分類名稱欄位","Group #{{index}} is missing the slug field":"第 {{index}} 個分組缺少 Slug 欄位","Group #{{index}} is missing the URL field":"第 {{index}} 個分組缺少 URL 欄位","Group #{{index}} slug can only contain letters, numbers, underscores and hyphens":"第 {{index}} 個分組的 Slug 只能包含字母、數字、底線和連字號","Group #{{index}} slug cannot exceed 100 characters":"第 {{index}} 個分組的 Slug 長度不能超過 100 字元","Group #{{index}} URL cannot exceed 500 characters":"第 {{index}} 個分組的 URL 長度不能超過 500 字元","Full Code":"完整代碼","Full input length":"完整輸入長度","Full input length override":"指定輸入上下文總長度","Full JSON":"完整 JSON","Full layout":"全屏佈局","Full source":"完整原始碼","Full upstream catalog":"完整上游目錄","Full width":"全寬","Function calling":"函數呼叫","Functions":"函數","Gateways":"閘道","Group name already exists":"組名稱已存在","Group name and type cannot be empty":"組名稱和類型不能為空","GC Count":"GC 次數","GC executed":"GC 已執行","GC execution failed":"GC 執行失敗","Gemini":"Gemini","Gemini and OpenAI audio prices differ for this model. Use separate billing model names to convert them.":"此模型在 Gemini 和 OpenAI 介面上的音訊價格不同,請使用獨立的計費模型名稱分別轉換。","Gemini Generate Content to OpenAI Chat":"Gemini Generate Content 到 OpenAI Chat","Gemini Generate Content to OpenAI Responses":"Gemini Generate Content 到 OpenAI Responses","Gemini Image 4K":"Gemini 圖片 4K","Gemini only":"僅 Gemini","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"即使停用配接器,Gemini 也會繼續自動偵測思考模式。僅當您需要對定價和預算進行更精細的控制時才啟用此選項。","General":"常規","General Settings":"通用設定","Generate":"產生","Generate Lyrics":"生成歌詞","Generate Midjourney images through MjProxy":"透過 MjProxy 接入 Midjourney 圖片生成","Generate Midjourney images through MjProxyPlus":"透過 MjProxyPlus 接入 Midjourney 圖片生成","Generate Music":"生成音樂","Generate music and lyrics through SunoAPI":"透過 SunoAPI 接入音樂與歌詞生成","Generate new backup codes for account recovery":"生成新的備份代碼用於用戶恢復","Generate New Codes":"生成新代碼","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"在「令牌」頁面生成 API Key,可以按模型、分組、IP、速率等維度精細化授權。","Generated image":"生成的圖像","Generating new codes will invalidate all existing backup codes.":"生成新代碼將使所有現有備份代碼失效。","Generating...":"生成中...","Generation quality preset":"生成品質預設","Generation was interrupted":"生成已中斷","Generic cache":"通用緩存","Get advice":"獲取建議","Get one here":"點此獲取","Get started":"開始使用","Get Started":"開始使用","GitHub":"GitHub","GitHub rate limit reached. Try again later.":"已達到 GitHub 請求限制,請稍後重試。","Give the group a recognizable name and optional description.":"為該分組提供一個可識別的名稱和可選的描述。","Give this group a recognizable name.":"為此分組提供一個可識別的名稱。","Header override must be valid JSON format":"請求標頭覆蓋必須是合法的 JSON 格式","Global and channel settings":"全域與通道設定","Global configuration and administrative tools.":"全局設定和管理工具。","Global Coverage":"全球覆蓋","Global default":"全域預設","Global default: {{mode}}":"全域預設:{{mode}}","Global Model Configuration":"全局模型設定","Global throughput":"全局吞吐量","Go Back":"返回","Go back and edit":"返回修改","Go to Dashboard":"前往儀表板","Go to first page":"前往首頁","Go to GitHub":"前往 GitHub","Go to home":"返回主頁","Go to io.net API Keys":"前往 io.net API 金鑰","Go to last page":"前往末頁","Go to next page":"前往下一頁","Go to page {{page}}":"前往第 {{page}} 頁","Go to previous page":"前往上一頁","Go to settings":"前往設定","Go to Settings":"前往設定","Good":"良好","Gotify Application Token":"Gotify 套用令牌","Gotify Documentation":"Gotify 文件","Gotify Server URL":"Gotify 伺服器 URL","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus, 等","GPU count":"GPU 數量","Granted at":"發放時間","Greater than":"大於","Greater Than":"大於","Greater than or equal":"大於等於","Greater Than or Equal":"大於等於","Grok":"Grok","Grok Settings":"Grok 設定","Group":"分組","Group {{path}}":"群組 {{path}}","Group & Quota":"分組與配額","Group added. Click \\"Save Settings\\" to apply.":"組已新增。點擊「儲存設定」以套用。","Group channels by tag for batch operations":"按標籤對渠道進行分組以進行大量操作","Group config overrides global limits, shares the same period":"分組設定覆蓋全局限制,共享同一周期","Group deleted. Click \\"Save Settings\\" to apply.":"組已刪除。點擊「儲存設定」以套用。","Group description":"分組描述","Group details":"分組詳情","Group identifier":"分組標識符","Group is required":"組是必需的","Group name":"分組名稱","Group Name":"分組名稱","Group name cannot be changed when editing.":"編輯時無法更改組名稱。","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"該表達式不是標準分檔收費表達式,無法展開分組價格。","Group Pricing":"分組定價","Group pricing usage guide":"分組定價使用教學","group ratio":"分組倍率","Group Ratio":"分組倍率","Group ratios":"分組比例","Group settings":"分組設定","Group updated. Click \\"Save Settings\\" to apply.":"組已更新。點擊「儲存設定」以套用。","Group visibility":"分組可見性","Group-based rate limits":"基於分組的速率限制","Group:":"分組:","Group: {{ratio}}x":"分組:{{ratio}}x","Grouped monitor status from Uptime Kuma":"來自 Uptime Kuma 的分組監控狀態","Groups":"分組","Groups *":"分組 *","Groups that users can select when creating API keys.":"用戶在建立 API 金鑰時可以選擇的分組。","Growth":"增長","Guardrails":"安全護欄","Guest":"訪客","h":"小時","Haiku Model":"Haiku 模型","Hang tight while we finish connecting your account.":"請稍等,我們正在完成連接您的用戶。","Hang tight while we securely link this account to your profile.":"請稍等,我們正在安全地將此用戶連結到您的個人資料。","Hardware":"硬件","Hardware type":"硬件類型","Has been disabled":"已停用","Has been enabled":"已啟用","Has been invalidated":"已作廢","Have a Code?":"有兌換碼嗎?","Header":"請求頭","header instead.":" 請求頭。","Header Name":"請求頭名稱","Header navigation":"頂部導航","Header Override":"標頭覆蓋","Header Passthrough (X-Request-Id)":"請求頭透傳(X-Request-Id)","Header Value (supports string or JSON mapping)":"請求頭值(支援字串或 JSON 映射)","header. Anthropic-formatted endpoints accept the":" 請求頭。Anthropic 格式的端點也接受","Health":"健康","Health check timeout threshold (seconds)":"健康檢查耗時門檻(秒)","Healthy":"正常","Hidden":"屏蔽","Hidden — verify to reveal":"隱藏 — 驗證以顯示","Hidden {{count}} models from model square":"已從模型廣場隱藏 {{count}} 個模型","Hidden from {{group}}":"對 {{group}} 屏蔽","Hidden from catalog":"在目錄隱藏","Hidden from the model square by metadata policy.":"已透過中繼資料策略在模型廣場隱藏。","Hide":"隱藏","Hide API key":"隱藏 API 金鑰","Hide from catalog":"從目錄隱藏","Hide from model square":"從模型廣場隱藏","Hide redirect panel":"收合重新導向面板","ID is empty":"ID 為空","ID is empty!":"ID 為空!","Hide selected models from model square":"從模型廣場隱藏所選模型","Hide sensitive data":"隱藏敏感數據","Hide setup guide":"隱藏設定引導","High Performance":"高效能","High-risk operation confirmation":"高危操作確認","High-risk status code retry confirmation text":"我已了解多重計費與崩潰風險,確認開啟","High-risk status code retry input mismatch":"輸入內容與要求不一致","High-risk status code retry input placeholder":"請完整輸入上方文字","High-risk status code retry risk check 1":"我已充分閱讀並理解:本人已完整閱讀上述全部風險提示,完全理解強制重試 504 與 524 狀態碼可能帶來的破壞性後果。","High-risk status code retry risk check 2":"我已與上游溝通並確認:本人確認,當前逾時問題屬於上游服務瓶頸。本人已與上游供應商溝通,確認上游無法解決該逾時問題,因此才採取強制重試方案作為妥協手段。","High-risk status code retry risk check 3":"我自願承擔計費損失:本人知悉並接受由此產生的全部雙重/多重計費風險,承諾不會因重試導致的帳單異常在本專案倉庫提交 Issue 或抱怨。","High-risk status code retry risk check 4":"我自願承擔系統穩定性風險:本人知悉該操作可能導致用戶端嚴重逾時及服務崩潰。若因本人開啟此功能導致請求積壓或服務不可用,後果由本人自行承擔。","High-risk status code retry risk disclaimer":"### ⚠️ 高風險操作:504/524 狀態碼重試風險告知與免責聲明\\n\\n本專案預設對 `400`(請求錯誤)、`504`(閘道逾時)與 `524`(CDN 逾時)狀態碼不進行重試。504 與 524 錯誤通常代表**請求已成功送達上游 AI 服務,且上游正在處理,但因上游處理時間過長導致連線中斷**。這通常表示逾時源於上游服務瓶頸。\\n\\n開啟此類逾時狀態碼的重新導向/重試屬於**極高風險操作**。在開啟該功能前,您必須仔細閱讀並知悉以下嚴重後果:\\n\\n#### 一、核心風險告知(請仔細閱讀)\\n\\n1. 💸 雙重/多重計費風險:多數 AI 上游廠商對於已開始處理但因網路原因中斷(504/524)的請求**仍然會扣費**。此時若觸發重試,將會向上游發起全新請求,導致您被**雙重甚至多重計費**。\\n2. ⏳ 用戶端嚴重逾時:單次請求已觸發逾時,疊加重試機制會使總請求耗時成倍增加,導致最終用戶端(或呼叫方)出現嚴重甚至無法接受的逾時現象。\\n3. 💥 請求積壓與系統崩潰風險:強制重試逾時請求會長時間占用系統執行緒與連線數。在高併發場景下,這將導致嚴重的**請求積壓**,進而耗盡系統資源,引發雪崩效應,造成整個代理服務崩潰。\\n\\n#### 二、風險確認聲明\\n\\n若您堅持開啟該功能,即代表您作出以下確認:","Higher priority channels are selected first":"優先級更高的渠道優先被選中","Historical capitalization":"歷史大小寫","Historical tokens":"歷史權杖","Historical Usage":"歷史使用情況","History of MjProxy-style image tasks.":"MjProxy 風格圖像任務歷史。","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"命中判定:usage 中存在 cached tokens 即視為命中。","Image count {{count}}":"生成數量 {{count}}","Hit Rate":"命中率","Hit tier":"命中檔位","Home":"主頁","Home Page Content":"首頁內容","Homepage URL":"首頁 URL","Hook":"鉤子","Hostname or IP of your SMTP provider":"您的 SMTP 供應商的主機名稱或 IP","Hour":"小時","Hour of day":"小時","Hourly token usage by model across the last 24 hours":"過去 24 小時內各模型的逐小時 Token 用量","Hourly token usage by model over the past 24 hours":"過去 24 小時內按模型分佈的小時級 Token 使用量","hours":"小時","How a call is priced":"一次呼叫如何計價","How a session is identified and which channel it keeps.":"定義如何識別工作階段及其使用的通道。","How client credentials are sent to the token endpoint":"用戶端憑證如何發送至令牌端點","How frequently the system checks auto-disabled channels for recovery":"系統檢查自動停用渠道是否可恢復的頻率","How frequently the system tests all channels":"系統測試所有渠道的頻率","How It Works":"工作流程","How model mapping works":"模型映射如何運作","How much to charge for each US dollar of balance (Epay)":"每美元餘額(Epay)的收費金額","How this model name should match requests":"此模型名稱應如何匹配請求","How to deliver the resulting image":"圖像結果的返回方式","Inactive disk cache cleared":"不活躍的磁碟快取已清理","How to get an io.net API Key":"如何獲取 io.net API 金鑰","How to reset my quota?":"如何重置我的配額?","How to select keys: random or sequential polling":"金鑰選擇方式:隨機或順序輪詢","How to set up Passkey domains":"如何設定通行金鑰網域","How will you use the platform?":"您將如何使用本平台?","HTTP Protocol":"HTTP 協定","HTTP protocol must be Auto or HTTP/1.1":"HTTP 協定必須是自動或 HTTP/1.1","HTTP/1.1":"HTTP/1.1","HTTP/2 Connection Shards":"HTTP/2 連線分片","HTTP/2 connection shards are unavailable when HTTP/1.1 is selected.":"選擇 HTTP/1.1 時無法使用 HTTP/2 連線分片。","HTTP/2 connection shards must be 1 when HTTP/1.1 is selected":"選擇 HTTP/1.1 時,HTTP/2 連線分片必須為 1","HTTP/2 connection shards must be between 1 and 8":"HTTP/2 連線分片必須在 1 到 8 之間","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"在 Passkey 提示期間向用戶顯示的人類可讀名稱。","I confirm enabling high-risk retry":"我確認開啟高危重試","I have read and agree to the":"我已閱讀並同意","I have read and understood the above compliance reminder":"我已閱讀並理解上述合規提醒","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"我已閱讀並理解上述合規提醒,確認相關法律風險,並確認承擔因部署、運營和收費行為產生的法律責任。","I understand that disabling 2FA removes its authenticator and backup codes.":"我了解,停用 2FA 會移除驗證器驗證方式及其備用碼。","I understand that disabling 2FA will remove all protection and backup codes":"我理解停用 2FA 將移除所有保護和備份代碼","Icon":"圖標","Icon file must be 100 KB or smaller":"圖標檔案必須小於等於 100 KB","Icon identifier (e.g. github, gitlab)":"圖標標識符(例如 github、gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"如果上游錯誤包含以下任何關鍵詞(不區分大小寫),渠道將自動停用。","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"授權成功後,生成的 JSON 將插入金鑰欄位。您仍需儲存渠道以持久化。","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"如果連接上游 One API 或 New API 中繼項目,除非您知道自己在做什麼,否則請使用 OpenAI 類型","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"如果啟用預設 auto 分組,新建令牌會預設使用 auto,而不是空分組。","If left blank, the system may use a different website address and Passkey sign-in can fail here.":"留空時,系統可能使用另一個網站位址,導致在目前網站無法用通行密鑰登入。","If no preceding rule matched: {{condition}}":"前面未命中,且 {{condition}}","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"如果親和到的渠道失敗,重試到其他渠道成功後,將親和更新到成功的渠道。","If this keeps happening, please report it on GitHub Issues.":"如果問題持續出現,請到 GitHub Issues 反饋。","If users already have Passkeys, changing this domain may require them to sign in another way and set up their Passkeys again.":"如果使用者已經綁定過通行密鑰,變更這裡後,可能需要透過其他方式登入並重新綁定。","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"如果你在中國大陸向公眾提供生成式人工智能服務,你將履行備案、安全評估、內容安全、投訴處理、生成內容標識、日誌留存和個人資訊保護等法律義務。","If your Passkey belongs to another website, start sign-in there:":"如果通行金鑰屬於其他網站,請前往該網站登入:","Ignore":"忽略","Ignore this version":"忽略此版本提醒","Ignored upstream models":"已忽略上游模型","image":"張","Image":"圖片","Image Cache":"圖片快取","Image cache input price":"圖片快取輸入價格","Image count":"圖片數量","Image Generation":"圖片生成","Image In":"圖像輸入","Image input":"圖片輸入","Image input price":"圖像輸入價格","Image not available":"圖片不可用","Image Out":"圖像輸出","Image output price":"圖像輸出價格","Image Preview":"圖片預覽","Image prices with count, size or quality adjustments must be converted manually.":"包含數量、尺寸或品質調整的圖片定價需手動轉換。","Image ratio":"圖片倍率","Image to Video":"圖生影片","Image Tokens":"圖像 Token","Imagine the pricing table has three groups: default (ratio 1.0), premium (ratio 0.5), and vip (ratio 0.8). Users whose account is in the vip group get user-level perks, and premium is a cheaper channel pool that users can pick for their tokens.":"假設定價分組表裡有三個分組:default(倍率 1.0)、premium(倍率 0.5)、vip(倍率 0.8)。賬號在 vip 分組的用戶享受用戶級待遇,premium 則是一個更便宜的渠道池,用戶建令牌時可以選它。","Import from URL":"從 URL 匯入","Import to CC Switch":"填入 CC Switch","Input Price: High to Low":"輸入價格:從高到低","Input Price: Low to High":"輸入價格:從低到高","Insert a new priority tier":"插入新優先級","Invalid announcements format: {{error}}":"系統公告格式錯誤:{{error}}","Invalid API info format: {{error}}":"API 資訊格式錯誤:{{error}}","Invalid authorization code":"無效的授權碼","Invalid Bark push URL":"無效的 Bark 推送 URL","Invalid billing expression for model {{model}}: {{error}}":"模型 {{model}} 的計費運算式無效:{{error}}","Important":"重要","Invalid channel ID":"渠道 ID 格式錯誤","Importing metadata does not add channels, enable model access, or configure prices.":"匯入中繼資料不會新增渠道、開放模型存取或設定價格。","Invalid channel priority move":"無效的通道優先級調整","Invalid channel settings format: {{error}}":"渠道額外設定格式錯誤:{{error}}","In BotFather, open Login Widget, register this callback URL, and copy the Client ID and Client Secret. Existing Telegram bindings will continue to work after configuration.":"在 BotFather 中開啟 Login Widget,登記此回呼網址並複製 Client ID 和 Client Secret。完成設定後,現有 Telegram 綁定可繼續使用。","In JSON, the user group is the outer key and the billing group is the inner key. The example below means: vip users pay 0.8 when billed as standard, and 0.3 when billed as premium.":"在 JSON 中,外層鍵是用戶分組,內層鍵是收費分組。下面的示例表示:vip 用戶按 standard 收費時用 0.8,按 premium 收費時用 0.3。","In Progress":"進行中","Invalid Discovery URL. Only http and https are supported":"Discovery URL 無效,僅支援 http/https","Invalid email address":"無效的電子郵件地址","In the visual editor these appear as Extra visible and Hidden. In JSON, +: (or no prefix) adds a group and -: removes one.":"在可視化編輯器中顯示為「額外可見」和「屏蔽」。在 JSON 中,+:(或無前綴)表示新增分組,-: 表示移除分組。","Invalid FAQ format: {{error}}":"FAQ 資訊格式錯誤:{{error}}","Invalid Gotify server URL":"無效的 Gotify 伺服器位址","Invalid ID":"無效的 ID","In:":"入:","Invalid input":"輸入不合法","Invalid input {{error}}":"輸入不合法 {{error}}","incident":"次故障","incidents":"次故障","Incidents":"事件","Include {{price}}":"啟用{{price}}","Include at least one price variable.":"請啟用至少一個價格變數。","Include Group":"包含分組","Include Model":"包含模型","Invalid parameters":"無效的參數","Include name":"包含名稱","Invalid Passkey login state":"Passkey 登入狀態異常","Include quota":"包含額度","Include Rule Name":"包含規則名","Invalid Passkey verification request":"無效的 Passkey 驗證請求","Includes changes that require security verification, such as password, two-factor settings, and account deletion.":"包含需要安全驗證的變更,例如密碼、兩步驗證設定和刪除帳戶。","Includes request rules":"包含請求規則","Invalid provider ID":"無效的供應商 ID","Invalid request":"無效的請求","Invalid request body.":"無效的請求內容。","Invalid request parameter format":"請求參數格式錯誤","Invalid request parameters: {{error}}":"無效的請求參數: {{error}}","Includes tool-call surcharge":"包含工具呼叫附加費","Including failed requests, 0 = unlimited":"包括失敗的請求,0 = 無限制","Incoming path":"入口路徑","Incoming path is required":"入口路徑不能為空","Incoming path must be unique":"入口路徑必須唯一","Incoming path must not include query":"入口路徑不能包含 query","Incoming path must start with /":"入口路徑必須以 / 開頭","Invalid subscription ID":"無效的訂閱ID","Invalid top-up amount":"儲值數量無效","Invalid top-up quota":"無效的充值額度","Invalid Uptime Kuma group settings format: {{error}}":"Uptime Kuma 分組設定格式錯誤:{{error}}","Invalid user ID":"無效的使用者 ID","Incomplete":"未完成","Invalid warning type":"無效的預警類型","Invalid Webhook URL":"無效的 Webhook 位址","Increase quota for user “{{name}}”":"增加使用者「{{name}}」的額度","Increase user quota":"增加使用者額度","Increased user quota by {{quota}}":"增加用戶額度 {{quota}}","Index":"索引","Invitation code bonus {{quota}}":"使用邀請碼贈送 {{quota}}","Index request failed with HTTP {{status}}":"索引請求失敗,HTTP {{status}}","Invitation quota is insufficient!":"邀請額度不足!","Index URL":"索引 URL","Information unavailable":"暫時無法讀取","Inherit global Auto order":"繼承全域 Auto 順序","Inherit global default":"沿用全域預設","Inherit vendor icon":"繼承供應商圖示","Inherited":"繼承","Inherited from {{vendor}}":"繼承自 {{vendor}}","Initial quota given to new users":"授予新用戶的初始配額","Initial quota given to new users ({{formattedQuota}})":"授予新用戶的初始配額({{formattedQuota}})","Initialization failed, please try again.":"初始化失敗,請重試。","Initialize":"初始化","Initialize system":"初始化系統","Initializing…":"正在初始化…","Inpaint":"局部重繪","Input":"輸入","Input mode":"輸入模式","Input pre-consume multiplier":"輸入預扣倍率","Input price":"輸入價格","Input price is required before saving dependent prices.":"儲存依賴價格前必須先填寫輸入價格。","Input token rate":"輸入 Token 速率","Input tokens":"輸入 token","Input Tokens":"輸入 Token","Inset":"內嵌","Inspect requests, errors, and billing details":"查看請求、錯誤和收費詳情","Inspect user prompts":"檢查用戶提示","Install":"安裝","Install {{name}}":"安裝 {{name}}","Install and enable":"安裝並啟用","Install, configure, test, and remove task plugins.":"安裝、設定、測試和移除任務外掛。","Installed":"已安裝","Installed {{name}} v{{version}}":"已安裝 {{name}} v{{version}}","Installed v{{from}} → marketplace v{{to}}":"已安裝 v{{from}} → 市集 v{{to}}","Installed v{{installed}} not listed":"已裝 v{{installed}} 不在索引中","Installed version is not in this index":"已安裝的版本不在該索引中","Installing...":"正在安裝…","Instance":"實例","Instances":"實例","Insufficient balance":"餘額不足","Insufficient permission to adjust this user":"無權調整此使用者的額度","Integrations":"整合","Integrity check failed":"完整性驗證失敗","Integrity hash":"完整性雜湊","Integrity verification unavailable in this environment":"目前環境無法校驗","Inter-group overrides":"分組間覆蓋","Inter-group ratio overrides":"分組間比例覆蓋","Interface Language":"介面語言","Internal Notes":"內部備註","Internal notes (not shown to users)":"內部備註(不顯示給用戶)","Internal Server Error!":"內部伺服器錯誤!","Interval must be at least 1 minute":"間隔必須至少為 1 分鐘","Invalid (NaN)":"無效 (NaN)","Invalid adjustment parameters":"額度調整參數無效","Invalid channel header override":"管道請求標頭覆寫設定無效","Invalid channel proxy":"管道代理設定無效","Invalid chat link. Please contact the administrator.":"無效的聊天連結。請聯絡管理員。","Invalid chat link. Please contact your administrator.":"無效的聊天連結。請聯絡您的管理員。","Invalid code":"無效代碼","Invalid expression syntax":"運算式語法無效","Invalid inference server address":"推論服務位址無效","Invalid items format":"項目格式無效","Invalid JSON":"JSON 無效","Invalid JSON format":"無效的 JSON 格式","Invalid JSON format or values out of allowed range":"無效的 JSON 格式或值超出允許範圍","Invalid JSON in parameter override template":"參數覆蓋模板中的 JSON 格式無效","Invalid JSON string.":"無效的 JSON 字串。","Invalid model mapping format":"無效的模型映射格式","Invalid Passkey domain. Enter a domain without a scheme, port, path or wildcard.":"通行金鑰網域無效。請填寫網域,不包含通訊協定、連接埠、路徑或萬用字元。","Join the same priority tier":"加入同一優先級","Key deleted":"金鑰已刪除","Key disabled":"金鑰已停用","Key enabled":"金鑰已啟用","Invalid Passkey registration response":"無效的 Passkey 註冊回應","Key index out of range":"金鑰索引超出範圍","Invalid Passkey response":"無效的 Passkey 回應","Invalid payment redirect URL":"無效的支付跳轉連結","Invalid pricing value":"定價值無效","Invalid reset link, please request a new password reset":"無效的重置連結,請請求新的密碼重置","Invalid reset link, please request a new password reset.":"無效的重置連結,請請求新的密碼重置。","Invalid response":"回應無效","Invalid rules JSON format":"規則 JSON 格式不正確","Invalid status code mapping entries: {{entries}}":"無效的狀態碼映射條目:{{entries}}","Invalid status code rules":"狀態碼規則無效","Invalid status code rules: {{tokens}}":"無效的狀態碼規則:{{tokens}}","Invalid vLLM server address":"vLLM 服務位址無效","Invalidate":"作廢","Invalidated":"已作廢","Invert match":"反向匹配","Invitation Code":"邀請碼","Invitation Quota":"邀請額度","Invite Info":"邀請資訊","Invited":"已邀請","Invited {{count}} users":"邀請 {{count}} 人","Invited by user ID":"由用戶 ID 邀請","Invited Users":"受邀用戶","Invitee Reward":"受邀者獎勵","Inviter":"邀請人","Inviter ID: {{id}}":"邀請人 ID:{{id}}","Inviter Reward":"邀請者獎勵","Invites":"邀請","Invoke developer-defined functions with structured arguments":"使用結構化參數呼叫開發者定義的函數","InvokeModel (legacy)":"InvokeModel(舊介面)","io.net API Key":"io.net API 金鑰","io.net Deployments":"io.net 部署","IP":"IP","IP Address":"IP 地址","IP Filter Mode":"IP 過濾模式","IP Restriction":"IP 限制","IP Whitelist (supports CIDR)":"IP 白名單(支援 CIDR 表達式)","IP: {{ip}} · Method: {{method}}":"IP:{{ip}} · 登入方式:{{method}}","is less than the configured maximum cache size":"小於設定的最大緩存大小","is the default price; ":"為預設價格;","It seems like the page you\'re looking for":"您要查找的頁面似乎","Items":"條目","Japanese":"日語","JavaScript file":"JavaScript 文件","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"分組標識符的 JSON 陣列。在下方啟用時,新令牌將在此清單中輪換。","JSON Editor":"JSON 編輯","JSON format error":"JSON 格式錯誤","JSON format supports service account JSON files":"JSON 格式支援服務用戶 JSON 檔案","JSON is invalid at line {{line}}, column {{column}}.":"JSON 在第 {{line}} 行、第 {{column}} 列無效。","JSON is invalid at position {{position}}.":"JSON 在位置 {{position}} 無效。","JSON is invalid. Please check the syntax.":"JSON 無效,請檢查語法。","JSON keys are request model names; values are upstream model names.":"JSON 的鍵是請求模型名稱,值是上游模型名稱。","JSON map of group → description exposed when users create API keys.":"分組 → 描述的 JSON 映射,在用戶建立 API 金鑰時公開。","JSON map of group → ratio applied when the user selects the group explicitly.":"分組 → 比率的 JSON 映射,當用戶明確選擇該分組時套用此比率。","JSON map of model → multiplier applied to quota billing.":"模型 → 套用於配額收費的乘數的 JSON 映射。","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"模型 → 每請求美元成本的 JSON 映射。優先於基於比率的收費。","JSON mode":"JSON 模式","JSON Mode":"JSON 模式","JSON must be an object":"JSON 必須是物件","JSON object:":"JSON 物件:","JSON structure is invalid":"JSON 結構無效","JSON Text":"JSON 文字","Leave empty to use the site default ({{amount}})":"留空則使用系統預設值({{amount}})","Legacy access tokens have been retired. Create a new access token in security settings":"舊版存取權杖已停用,請在安全設定中建立新的存取權杖","JSON-based access control rules. Leave empty to allow all users.":"基於 JSON 的存取控制規則。留空以允許所有用戶。","Just now":"剛剛","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"渠道停用後保留親和","Keep enabled if you need to proxy requests for different upstream accounts.":"如果需要為不同上游用戶代理請求,請保持啟用。","Keep enough balance before production traffic":"生產流量前保持充足餘額","Keep existing domain":"保留現有網域","Keep local":"保留本機","Keep original value":"保留原值","Keep original value (skip if target exists)":"保留原值(目標已有值時不覆蓋)","Keep the domains used by existing Passkeys, one per line. If the primary domain changed from www.example.com to example.com, enter www.example.com here.":"每行填寫一個既有通行金鑰使用的網域。例如,主要網域從 www.example.com 改為 example.com 後,應在此保留 www.example.com。","Keep the names users call; change what is sent upstream.":"保留使用者呼叫的名稱,只修改傳給上游的名稱。","Keep the platform ready":"保持平台就緒","Keep the session binding when the channel is unavailable":"渠道無法使用時保留工作階段綁定","Keep this above 1 minute to avoid heavy database load":"保持此值大於 1 分鐘以避免資料庫負載過重","Keep this vendor":"保留此供應商","Keep upstream names; choose what users call.":"保留上游名稱,設定使用者呼叫的名稱。","Keep-alive Ping":"保持連線心跳","Keeps compatible responses more repeatable":"讓相容模型的回覆更可重現","Key":"金鑰","Key Fingerprint":"Key 指紋","Key Sources":"Key 來源","Key Summary":"Key 摘要","Key Update Mode":"金鑰更新模式","Keys, OAuth credentials, and multi-key update behavior.":"管理金鑰、OAuth 憑證和多金鑰更新行為。","Kind":"類型","Linux DO trust level does not meet the minimum required by administrator":"Linux DO 信任等級未達到管理員設定的最低信任等級","Kling":"Kling","Knowledge Base ID":"知識庫 ID","Knowledge Base ID *":"知識庫 ID *","Knowledge cutoff":"知識截止","Lake View":"湖光","Landing page with system overview.":"帶有系統概覽的登陸頁面。","Language preference saved":"語言偏好已儲存","Language Preferences":"語言偏好","Language preferences sync across your signed-in devices and affect API error messages.":"語言偏好會同步到您登入的所有設備,並影響 API 錯誤訊息語言。","Last 24h usage":"近 24 小時消耗","Last 30 days uptime":"近 30 天可用率","Last active {{time}} · Expires {{expires}}":"最後活動於 {{time}} · 到期時間 {{expires}}","Last check time":"上次檢測時間","Last detected addable models":"上次檢測到可加入模型","Last Login":"最後登入","Last Seen":"最後上報","Last successful check":"上次成功檢查","Last Tested":"上次測試","Last updated":"最後更新","Last updated:":"上次更新時間:","Last Used":"最後使用","Last used {{time}}":"最後使用於 {{time}}","Last used:":"上次使用時間:","Latency":"延遲","Latency check":"延遲檢測","Latency short":"延遲","Latency trend (last 24h)":"延遲趨勢(最近 24 小時)","Later":"稍後","Later requests follow the new channel.":"後續請求改用新渠道。","Latest platform updates and notices":"最新平台更新和通知","Latest version":"最新版本","Lavender Dream":"薰衣草夢","Layout":"佈局","lead":"領頭","Leaderboards":"排行榜","Learn more":"了解更多","Learn more:":"了解更多:","Leave":"離開","Leave blank to keep the existing credential":"留空以保留現有憑證","Leave blank to keep the existing key":"留空以保留現有金鑰","Leave blank unless rotating the secret":"除非正在輪換金鑰,否則留空","Leave empty for fallback":"留空作為兜底","Leave empty for never expires":"留空表示永不失效","Leave empty only for the final fallback split.":"只有最後一個兜底分流可以留空。","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"留空以停用協議要求。支援 Markdown、HTML 或用於重新導向用戶的完整 URL。","Log export is disabled":"日誌匯出已關閉","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"留空以停用隱私政策要求。支援 Markdown、HTML 或用於重新導向用戶的完整 URL。","Leave empty to disband the tag":"留空以解散標籤","Leave empty to keep existing key":"留空以保留現有金鑰","Leave empty to keep unchanged":"留空以保持不變","Log recording":"日誌記錄","Log search and export":"日誌查詢與匯出","Leave empty to match all models":"留空匹配所有模型","Leave empty to use account email":"留空以使用用戶電郵","Leave empty to use default":"留空使用預設","Leave empty to use system temp directory":"留空使用系統臨時目錄","Leave empty to use username":"留空以使用用戶名","Leave the final split empty as the fallback for models not matched above.":"將最後一個分流留空作為兜底,用於匹配前面未命中的模型。","Leave this empty only for the final fallback split; it catches client models not matched above.":"只有最後一個兜底分流可以留空;它會匹配前面未命中的客戶端模型。","Left to Right":"從左到右","Legacy Format (JSON Object)":"舊格式(JSON 物件)","Legacy format must be a JSON object":"舊格式必須是 JSON 物件","Legacy Format Template":"舊格式模板","Legacy full-URL integration; use Advanced Custom for new channels":"舊版完整請求網址接入方式,新渠道建議使用進階自訂","Legacy pricing is deprecated. Convert the current prices to an expression draft, then save to apply it.":"舊定價模式已棄用。可將目前價格轉換為計費運算式草稿,儲存後生效。","Legacy token":"舊版令牌","Legal":"法律","Less":"更少","Longest log time range (days)":"日誌最長時間範圍(天)","Less than":"小於","Less Than":"小於","Less than 1 day left":"剩餘不足 1 日","Less than or equal":"小於等於","Less Than or Equal":"小於等於","License":"許可證","Light":"淺色","Lightning Fast":"極速","Limit period":"限制周期","Limit Reached":"已達上限","Limit which models can be used with this key":"限制此金鑰可使用的模型","Limited":"受限","Limits only token-specific Auto snapshots. Global Auto inheritance remains unlimited.":"僅限制令牌專屬的 Auto 快照;繼承全域 Auto 時不受限制。","Limits token selection to a probability mass":"依機率質量限制詞元選擇範圍","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"您的文件站點連結","Linked account":"已綁定帳號","Linked models":"關聯模型","Linked records are counted once. Matching rules show their covered models separately.":"關聯數量依資料記錄統計,匹配規則涵蓋的模型數量另行顯示。","LinuxDO":"LinuxDO","LinuxDO Client ID":"LinuxDO 用戶端 ID","LinuxDO Client Secret":"LinuxDO 用戶端密鑰","List of models supported by this channel. Use comma to separate multiple models.":"此渠道支援的模型清單。使用逗號分隔多個模型。","List of origins (one per line) allowed for Passkey registration and authentication.":"允許用於 Passkey 註冊和身份驗證的來源清單(每行一個)。","List registered task plugins and bind them when creating or editing task plugin channels.":"列出已註冊的任務外掛,並在建立或編輯任務外掛渠道時綁定它們。","List view":"列表檢視","Listing also depends on metadata visibility and the user’s group access.":"是否顯示亦取決於中繼資料顯示策略及使用者可用群組。","Listing hidden":"已隱藏","Live refresh pauses when no task is running":"無任務執行時暫停自動重新整理","LLM Leaderboard":"LLM 排行榜","LLM prompt helper":"LLM 輔助設計提示詞","Load Balancing":"負載平衡","Load metadata preview":"載入資料預覽","Load template...":"載入模板...","Loader":"載入器","Loading":"載入中","Loading channel details":"正在載入渠道詳情","Loading configuration":"正在載入設定","Loading content settings...":"正在載入內容設定...","Loading conversation...":"正在載入對話...","Loading current models...":"正在載入目前模型...","Loading failed":"載入失敗","Loading installed source...":"正在載入已安裝的原始碼…","Loading maintenance settings...":"正在載入維護設定...","Loading plugins...":"正在載入外掛…","Loading settings...":"正在載入設定...","Loading setup status…":"正在載入設定狀態…","Loading verification methods...":"正在載入驗證方式…","Loading...":"載入中...","Local":"本地","Local Billing":"本地收費","Local check":"本地檢查","Local Estimate (billing-usage-anthropic)":"本地估算(billing-usage-anthropic)","Local Estimate (billing-usage-gemini)":"本地估算(billing-usage-gemini)","Local Estimate (billing-usage-openai)":"本地估算(billing-usage-openai)","Local models":"本地模型","Locations":"位置","Locked":"鎖定","log":"日誌的完整詳情","Log cleanup":"日誌清理","Log cleanup progress":"日誌清理進度","Log cleanup task started.":"日誌清理任務已啟動。","Log Details":"日誌詳情","Log Directory":"日誌目錄","Log File Count":"日誌檔案數","Log files older than {{value}} days will be deleted.":"將刪除 {{value}} 天前的日誌檔案。","Log IP address for usage and error logs":"記錄用於使用和錯誤日誌的 IP 地址","Log Maintenance":"日誌維護","Log Type":"日誌類型","Low balance reminder":"餘額不足提醒","Maximum 100 redemption codes can be generated at once":"一次兌換碼批量生成的個數不能大於 100","Logged in successfully via {{method}}":"登入成功(透過 {{method}})","Logic":"邏輯","Login":"登入","Login & Authentication":"登入與驗證","Login failed":"登入失敗","Login flow expired. Please sign in again.":"登入流程已過期,請重新登入。","Login Info":"登入資訊","Login Method":"登入方式","Login session":"登入工作階段","Login sessions":"登入工作階段","Maximum number of tokens reached ({{max}})":"已達到最大令牌數量限制({{max}})","Login, security and access records":"登入、安全與存取記錄","Logo":"徽標","Logo URL":"徽標 URL","Logs":"日誌","Long passwords are unavailable until the password storage upgrade is complete.":"密碼儲存升級完成前暫不支援長密碼。","Look for a special ratio rule matching this user group and this billing group. If one exists, use its ratio. Otherwise use the billing group base ratio from the pricing table.":"查找匹配「該用戶分組 + 該收費分組」的特殊倍率規則。有就用規則裡的倍率,沒有就用定價分組表中收費分組的基礎倍率。","Low balance":"餘額偏低","Lowest median first-token latency":"最低首 token 延遲中位數","m":"分鐘","Maintenance":"維護","Make extra groups visible to, or hide default groups from, users of a specific group.":"讓特定分組的用戶額外看到某些分組,或對其屏蔽預設可選的分組。","Make it easier for teammates to pick the right group.":"讓隊友更容易選擇正確的分組。","Make sure you understand these effects before enabling.":"請確認瞭解以上影響後再開啟。","Manage":"管理","Manage account bindings for this user":"管理此用戶的用戶連結","Manage Bindings":"管理連結","Manage catalog visibility and pricing.":"管理目錄可見性和定價。","Manage custom OAuth providers for user authentication":"管理用於用戶認證的自訂 OAuth 供應商","Manage Keys":"管理金鑰","Manage local models for:":"管理本地模型:","Manage metadata, pricing, and channel connections. Each section saves separately.":"管理資料、定價及渠道關聯,各分區分別儲存。","Manage multi-key status and configuration for this channel":"管理此渠道的多金鑰狀態和設定","Manage Ollama Models":"管理 Ollama 模型","Manage pricing, visibility and automatic routing for your groups.":"管理分組定價、可見範圍和自動路由順序。","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"管理伺服器執行日誌檔案。日誌檔案會隨執行時間不斷累積,建議定期清理以釋放磁碟空間。","Manage sources":"管理來源","Manage subscription plans and pricing.":"管理訂閱計劃和定價。","Manage Subscriptions":"管理訂閱","Manage vendor details and linked model records.":"管理供應商資料與關聯模型記錄。","Manage Vendors":"管理供應商","Manage your LinuxDO OAuth app":"管理你的 LinuxDO OAuth 應用程式","Manage your security settings and account access":"管理您的安全設定和用戶存取","Mantle (Messages API)":"Mantle(Messages API)","Manual Disabled":"手動停用","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"將用戶資訊回應中的欄位映射到本地用戶屬性。支援嵌套路徑(例如 ocs.data.id)。","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"將模型標識符映射到 Gemini API 版本。當未找到特定匹配項時,將套用 `default` 條目。","Map request model names to actual provider model names (JSON format)":"將請求模型名稱映射到實際供應商模型名稱 (JSON 格式)","Map response status codes (JSON format)":"映射回應狀態碼(JSON 格式)","Map upstream status codes to different codes":"將上游狀態碼映射到不同的代碼","Market Share":"市場份額","Marketing":"市場營銷","Marketplace":"外掛市集","Marketplace installs never force past a conflict. Resolve it on the task plugins page, then install again.":"市集安裝絕不會強制略過衝突。請先在任務外掛頁面處理衝突,再重新安裝。","Marketplace sources":"市集來源","Marketplace sources updated":"市集來源已更新","Master instances run scheduled background tasks.":"master 實例執行排程背景任務。","Match All (AND)":"必須全部滿足(AND)","Match Any (OR)":"滿足任一條件(OR)","Match Mode":"匹配方式","Minimum transfer quota is {{min}}!":"轉移額度最小為{{min}}!","Match model name exactly":"完全匹配模型名稱","Match models containing this name":"匹配包含此名稱的模型","Match models ending with this name":"匹配以此名稱結尾的模型","Match models starting with this name":"匹配以此名稱開頭的模型","Match Text":"匹配文字","Match Type":"匹配類型","Match Value":"匹配值","Match Value (optional)":"匹配值(可選)","Missing group ID":"缺少組 ID","Matched":"已命中","Missing model ID":"缺少模型 ID","Matched models":"匹配模型","Missing parameter rule_name, or use all=true to clear everything":"缺少參數:rule_name,或使用 all=true 清空全部","Matched Tier":"命中階梯","Missing vendor ID":"缺少供應商 ID","Matches models not claimed by earlier splits.":"匹配前面分流未佔用的模型。","Matching Rules":"匹配規則","Matching rules apply to metadata. Pricing is configured for each concrete model.":"比對規則僅用於中繼資料,價格依具體模型設定。","Max context tokens":"最大上下文 Token 數","Max Disk Cache Size (MB)":"磁碟緩存最大總量 (MB)","Max Entries":"最大條目數","Max output":"最大輸出","Max Requests (incl. failures)":"最大請求數(包括失敗)","Max Requests (including failures)":"最大請求數(包括失敗)","Max requests per period":"每周期最大請求數","Max Retries":"最大重試","Max Success":"最大成功數","Max successful requests":"最大成功請求數","Max Successful Requests":"最大成功請求數","Max Tokens":"最大 Tokens","Maximum {{max}} groups selected":"已達到 {{max}} 個分組上限","Maximum 1000 characters. Supports Markdown and HTML.":"最多 1000 個字元。支援 Markdown 和 HTML。","Maximum 200 characters":"最多 200 個字元","Maximum 500 characters. Supports Markdown and HTML.":"最多 500 個字元。支援 Markdown 和 HTML。","Maximum cached sessions":"最多快取工作階段數","Maximum check-in quota":"簽到最大額度","Maximum custom groups per token":"每個令牌的最大自訂分組數","Maximum input window":"最大輸入窗口","Maximum number of channels tested at the same time (1-32)":"同時測試的最大渠道數(1-32)","Maximum number of tokens each user can create. Default 1000. Setting too large may affect performance.":"每個用戶可建立的最大令牌數量。預設 1000。設定過大可能會影響效能。","Maximum number of tokens in the response":"回應中最大 token 數","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}":"模型固定價格 {{model_price}},分組倍率 {{group_ratio}},操作 {{action}}","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}, ID {{id}}":"模型固定價格 {{model_price}},分組倍率 {{group_ratio}},操作 {{action}},ID {{id}}","Maximum quota amount awarded for check-in":"簽到獎勵的最大額度","Maximum retries":"最多重試次數","Maximum tokens including hidden reasoning tokens":"最大 token 數(含隱藏的推理 token)","Maximum tokens per response":"單次回應最大 token 數","Maximum tokens per user":"每個用戶的最大令牌數","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1,兩者均 ≤ 2,147,483,647","May be used for training by upstream provider":"可能被上游供應商用於訓練","Mean queue time":"平均排隊耗時","Mean request latency":"平均請求耗時","Mean time per output token":"每輸出 Token 平均耗時","Mean time to first token":"平均首 Token 延遲","Media access expired. Please try again.":"媒體存取已過期,請再試一次。","Media preview failed. Please try again.":"媒體預覽失敗,請再試一次。","Media pricing":"媒體定價","Median time-to-first-token (TTFT) sampled hourly per group":"按小時採樣的各分組首 token 延遲(TTFT)中位數","Medical Q&A, mental health support":"醫療問答與心理健康支援","Memory":"記憶體","Memory Hits":"記憶體命中","Memory Threshold (%)":"記憶體閾值 (%)","Merchant ID":"商戶 ID","Merchant ID is required":"商戶 ID 為必填項","Merge into Other":"合併為其他","Model name already exists":"模型名稱已存在","Model name cannot be empty":"模型名稱不能為空","Merge vendors":"合併供應商","Model name is too long: {{model}}":"模型名稱過長:{{model}}","Message Priority":"訊息優先級","Metadata":"元資訊","Metadata changes":"資料變更","Metadata language":"資料語言","Metadata only":"僅中繼資料","Metadata sync completed":"資料同步完成","Model price {{model_price}}, group ratio {{group_ratio}}":"模型價格 {{model_price}},分組倍率 {{group_ratio}}","Metadata sync disabled":"已禁止資料同步","Metadata sync failed":"資料同步失敗","Method":"請求方法","Migration notes":"遷移說明","min downtime":"分鐘停機","Min Top-up":"最低儲值","Min Top-up:":"最低儲值:","Model ratio {{model_ratio}}, completion ratio {{completion_ratio}}, audio ratio {{audio_ratio}}, audio completion ratio {{audio_completion_ratio}}, group ratio {{group_ratio}}":"模型倍率 {{model_ratio}},補全倍率 {{completion_ratio}},音訊倍率 {{audio_ratio}},音訊補全倍率 {{audio_completion_ratio}},分組倍率 {{group_ratio}}","MiniMax":"MiniMax","Model ratios reset":"重設模型倍率成功","Minimum {{amount}}":"最低 {{amount}}","Minimum check-in quota":"簽到最小額度","Minimum LinuxDO trust level required":"所需的最低 LinuxDO 信任級別","Minimum quota amount awarded for check-in":"簽到獎勵的最小額度","Minimum recharge amount in USD":"最低儲值金額(美元)","Minimum recharge amount to qualify for this discount.":"符合此折扣的最低儲值金額。","Minimum top-up (optional)":"最低儲值(可選)","Minimum top-up (USD)":"最低儲值(美元)","Minimum top-up amount must be at least 1":"最低儲值金額至少為 1","Minimum top-up quantity":"最低儲值數量","Minimum topup amount: {{amount}}":"最低儲值金額:{{amount}}","Minimum Trust Level":"最低信任級別","Minimum:":"最低:","Model test":"模型測試","Minor blips in the last 30 days":"近 30 天內有輕微抖動","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"在下方建立新的配對,或繼續向下選擇已有配對。準備好後點擊儲存。","Minute":"分鐘","minutes":"分鐘","Missing code":"缺少代碼","Missing metadata":"缺中繼資料","Missing Models":"缺失的模型","Missing user data from Passkey login response":"Passkey 登入回應中缺少用戶數據","Mistral":"Mistral","MjProxy":"MjProxy","MjProxyPlus":"MjProxyPlus","Modalities":"模態","Modality":"模態","Mode":"模式","model":"模型","Model":"模型","Model {{model}}":"模型 {{model}}","Model Access":"模型存取","Model Analytics":"模型數據分析","Model Analytics Defaults":"模型分析預設設定","Model Analytics Filters":"模型分析篩選","Model assignments":"模型歸屬","model billing support":"模型收費支援","Model Call Analytics":"模型呼叫分析","Model context usage":"模型上下文用量","Model deleted":"模型已刪除","Model deleted successfully":"模型刪除成功","Model Deployment":"模型部署","Model deployment service is disabled":"模型部署服務未啟用","Model Description":"模型描述","Model details":"模型詳情","Model disabled successfully":"模型停用成功","Model discovery uses the first key; other keys are not tested.":"使用第一個金鑰取得模型,其他金鑰尚未測試。","Model discovery uses the saved channel connection settings.":"取得模型時使用通道已儲存的連線設定。","Model enabled successfully":"模型啟用成功","Model fixed pricing":"模型固定定價","Model Group":"模型分組","Model hidden from model square":"已從模型廣場隱藏","Model ID is required":"模型 ID 不可為空","Model Limits":"模型限制","Model limits enabled":"已啟用模型限制","Model List":"模型列表","Model management":"模型管理","Model Mapping":"模型映射","Model Mapping (JSON)":"模型映射 (JSON)","Model Mapping must be a JSON object like":"模型映射必須是如下所示的 JSON 物件","Model mapping must be a JSON object with string values":"模型映射必須是值為字串的 JSON 物件","Model mapping must be a valid JSON object":"模型映射必須是有效的 JSON 物件","Model mapping must be valid JSON":"模型映射必須是有效的 JSON","Model mapping must be valid JSON format":"模型映射必須是有效的 JSON 格式","Model mapping values must be strings":"模型映射的值必須是字串","Model mappings are being edited in the floating panel.":"模型映射正在浮動面板中編輯。","Model metadata":"模型資料","Model metadata saved":"模型資料已儲存","Model name":"模型名稱","Model Name":"模型名稱","Model Name *":"模型名稱 *","Model name is required":"模型名稱為必填項","Model names copied to clipboard":"模型名稱已複製到剪貼簿","Model not found":"模型未找到","Model performance metrics":"模型效能指標","Model Price":"模型價格","Model price is not configured. Please complete model pricing in settings.":"模型價格未設定,請前往設定補充模型價格。","Model Price Not Configured":"模型價格未設定","Model prices":"模型價格","Model prices reset successfully":"模型價格重置成功","Model Pricing":"模型定價","Model pricing is managed by a super administrator.":"模型定價由超級管理員管理。","Model pricing saved":"模型定價已儲存","Model pull failed: {{msg}}":"模型拉取失敗:{{msg}}","Move channels into a priority tier or between tiers. Priority values update automatically.":"將渠道拖入同級或插入新的優先級,數值會自動計算。","Multi-key channels do not support balance queries":"多金鑰渠道不支援餘額查詢","Model ratio":"模型倍率","Model ratios":"模型比例","Model ratios reset successfully":"模型比例重置成功","Model redirect is unavailable":"模型重新導向不可用","Model redirects":"模型重新導向","Model Regex":"模型正則","Model Regex (one per line)":"模型正則(每行一個)","Model regex cannot be empty":"模型正則不能為空","Model scope":"模型範圍","Model selected":"已選擇模型","Model shown in model square":"已在模型廣場顯示","Model source":"模型來源","Model Square":"模型廣場","Model square visibility":"廣場顯示","Model Tags":"模型標籤","Model to use for testing":"用於測試的模型","Model to use when testing channel connectivity":"測試渠道連接時使用的模型","Model Version":"模型版本","Model Version *":"模型版本 *","Model-scoped only":"僅模型分流","model(s) selected out of":"已選模型(共)","model(s)? This action cannot be undone.":"模型?此操作無法撤銷。","models":"個模型","Models":"模型","Models *":"模型 *","Models & Groups":"模型與分組","Models & Routing":"模型與路由","Models appended successfully":"模型已追加成功","Models are required":"需要模型","Models climbing the leaderboard":"正在攀升的模型","Models climbing the leaderboard fastest":"排行榜上升最快的模型","Models directory":"模型目錄","Models Directory":"模型目錄","Models exposed by this channel":"此渠道暴露的模型","Models fetched successfully":"模型獲取成功","Models filled to form":"模型已填充到表單","Models listed here skip automatic -thinking / -nothinking suffix handling. Matched names are also exempt from @-modifier parsing and 400 validation. Prefix an entry with re: to match the full model name as a Go regular expression, for example re:.*@sha256:.*":"此處列出的模型不會自動新增或移除 -thinking / -nothinking 後綴。命中的模型同時豁免 @ 修飾符解析與 400 校驗。以 re: 開頭的條目會以 Go 正規表示式匹配完整模型名稱,例如 re:.*@sha256:.*。","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"此處列出的模型不會自動新增或移除 -thinking / -nothinking 後綴。","Models losing positions":"排名下滑的模型","Models losing the most positions":"名次下滑最多的模型","Models not in list, may fail to invoke":"模型未加入列表,可能無法呼叫","Models source":"模型來源","Models that are being used but not configured in the system":"正在使用但未在系統中設定的模型","Models that skip thinking suffix processing":"不自動處理思考後綴的模型","Models updated successfully":"模型更新成功","Models used on this site":"本站使用的模型","models.dev pricing preset":"models.dev 定價預設","Modify existing subscription plan configuration":"修改現有訂閱套餐的設定","Module availability":"模組可用性","MokaAI":"MokaAI","Monitor":"監控","Monitor balance, usage, and request volume":"監控餘額、用量和請求量","Monitored relay requests":"已監控的中繼請求","Month":"本月","Month number":"月份","Monthly":"每月","Monthly tokens":"每月 token","months":"個月","Moonshot":"Moonshot","More":"更多","More actions":"更多操作","More Apps":"更多","more mapping":"更多映射","More models ({{count}})":"更多模型({{count}})","More rules":"更多規則","More templates...":"更多模板...","More than 999 days left":"剩餘超過 999 日","More...":"更多...","Most-used models in the selected period and category":"所選時間範圍與分類下使用率最高的模型","Move":"移動","Move {{group}} down":"將 {{group}} 下移","Move {{group}} up":"將 {{group}} 上移","Move a request header":"移動請求頭","Move affiliate rewards to your main balance":"將推廣獎勵轉移到您的主餘額","Move fallback to end":"兜底移到最後","Move Field":"移動欄位","Move Header":"移動請求頭","Move Request Header":"移動請求頭","Move route down":"下移路由","Move route up":"上移路由","Move source field to target field":"把來源欄位移動到目標欄位","ms":"毫秒","Multi-key channel: Keys will be":"多金鑰渠道:金鑰將","Multi-Key Management":"多金鑰管理","New priority: {{priority}}":"新優先級:{{priority}}","New priority: {{priority}} · {{count}} channels affected":"新優先級:{{priority}} · 影響 {{count}} 個通道","New user registration has been disabled by administrator":"管理員關閉了新使用者註冊","New user sign-up bonus {{quota}}":"新使用者註冊贈送 {{quota}}","Multi-key management {{action}} on channel (ID: {{id}})":"對渠道(ID: {{id}})執行多金鑰管理操作 {{action}}","Multi-Key Mode (multiple keys, one channel)":"多金鑰模式(多個金鑰,一個渠道)","Multi-Key Strategy":"多金鑰策略","Multi-key: Polling rotation":"多金鑰:輪詢","Multi-key: Random rotation":"多金鑰:隨機","Multi-protocol Compatible":"兼容多協定","Multi-region deployment for stable global access":"多區域部署,實現穩定的全球存取","Multi-step thinking before final answer":"在給出最終答案前進行多步推理","Multi-user management with flexible permission allocation":"多用戶管理,靈活分配權限","Multilingual translation and localisation":"多語種翻譯與本地化","Multimodal":"多模態","Multiplier":"倍率","Multiplier applied when":"倍率套用於當","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"當{{userGroup}}使用{{targetGroup}}時套用的倍率","Multiplier for audio inputs.":"音頻輸入的倍率。","Multiplier for audio outputs.":"音頻輸出的倍率。","Multiplier for completion tokens.":"補全令牌的倍數。","Multiplier for image processing.":"圖像處理的倍率。","Multiplier for prompt tokens.":"提示令牌的倍數。","Multipliers for recharge pricing based on user groups.":"基於用戶分組的儲值定價倍率。","Must be a valid URL":"必須是有效的 URL","Must be at least 8 characters":"必須至少 8 個字元","Must be greater than 0":"必須大於 0","Must be greater than or equal to 0":"必須大於或等於 0","My Subscriptions":"我的訂閱","my-status":"我的狀態","MySQL detected":"偵測到 MySQL","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL 是生產就緒的關聯式資料庫。請確保憑證安全。","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL 已準備好投入生產環境。請確保設定了自動備份以及具有最低所需權限的專用用戶。","No auto-disabled keys to delete":"沒有需要刪除的自動停用金鑰","N/A":"不適用","Name":"名稱","Name *":"名稱 *","Name for this redemption code (1-20 characters)":"此兌換碼的名稱(1-20 個字元)","Name is available":"名稱可用","Name is not available":"名稱不可用","Name Matching Rule":"名稱匹配規則","Name must be 64 characters or fewer":"名稱不能超過 64 個字元","Name must be between {{min}} and {{max}} characters":"名稱必須介於 {{min}} 到 {{max}} 個字元之間","Name Rule":"名稱規則","Name Suffix":"名稱後綴","Name the channel and choose the upstream provider.":"命名渠道並選擇上游供應商。","Name the channel, choose the provider, configure API access, and set credentials.":"命名渠道、選擇供應商、設定 API 存取並設定憑證。","Name, provider type, and availability.":"名稱、供應商類型和可用狀態。","name@example.com":"name@example.com","Native Claude Messages plus OpenAI Chat compatibility forwarding.":"Claude Messages 原生轉發,並相容 OpenAI Chat 轉換。","Native format":"原生格式","Native forwarding":"原生轉發","Native Gemini routes plus OpenAI Chat and Responses compatibility forwarding.":"Gemini 原生轉發,並相容 OpenAI Chat 和 Responses 轉換。","Native OpenAI routes plus optional Claude and Gemini compatibility routes.":"OpenAI 原生轉發,並提供可選的 Claude 和 Gemini 相容轉換。","Native routes":"原生路由","Need a redemption code?":"需要兌換碼?","Needs API key":"需要 API 金鑰","Negate condition":"取反","Negated group":"條件取反","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"嵌套 JSON,定義按分組新增(+:)、移除(-:)或追加可用分組的規則。","Nested JSON: source group →":"嵌套 JSON:源分組 →","Network connection failed or server not responding":"網絡連接失敗或伺服器未回應","Network proxy for this channel (supports HTTP, HTTPS, SOCKS5, and SOCKS5H)":"此渠道的網路代理(支援 HTTP、HTTPS、SOCKS5 和 SOCKS5H)","Never":"永不","Never expires":"永不過期","Never used":"從未使用","Never used an API Gateway?":"從未使用過 API 閘道/中轉 API?","NEW":"新","New API":"New API","New API <noreply@example.com>":"New API <noreply@example.com>","New API Project Repository:":"New API 項目倉庫:","New API\'s flexible channel lets you configure upstream addresses and authentication per endpoint, choose native forwarding or supported protocol conversions, and configure model listing and balance queries independently":"New API 的靈活接入渠道,可依介面設定上游位址與驗證方式,選擇原生轉發或專案支援的協定轉換,並獨立設定模型清單和餘額查詢","New domain: {{domain}}":"新網域:{{domain}}","New email verification code":"新信箱驗證碼","New Format Template":"新格式模板","New Group":"新建分組","New metadata":"新增資料","New model":"新模型","New Models ({{count}})":"新模型 ({{count}})","New models: all metadata shown below will be imported automatically. No selection is needed.":"新模型:將自動匯入下方顯示的全部資料,無需勾選。","New name will be:":"新名稱將是:","New Passkeys use the primary domain. Compatible domains keep existing Passkeys working.":"新通行金鑰使用主要網域,既有通行金鑰可透過相容網域繼續使用。","New Passkeys use this domain. Enter a domain without https://, a port or a path. An empty field uses the system website address.":"新通行金鑰使用此網域。只填寫網域,不包含 https://、連接埠或路徑;留空時使用系統網站位址。","New Passkeys will use the new primary domain. The previous domain will be kept so existing Passkeys can still verify.":"新通行金鑰將使用新的主要網域。原網域會被保留,現有通行金鑰仍可驗證。","New password":"新密碼","New Password":"新密碼","New password must be different from current password":"新密碼必須與目前密碼不同","New records include the fields below. Existing fields are kept unless explicitly selected.":"新增記錄將包含下列欄位;既有記錄僅覆寫明確勾選的欄位。","New User Quota":"新用戶配額","New value":"新值","New vendors":"新增供應商","New version available: {{version}}":"有新版本可用:{{version}}","NewAPI":"NewAPI","Newly released":"最新發佈","Next":"下一步","Next branch":"下一個分支","Next page":"下一頁","Next reset":"下一次重置","No":"否","No About Content Set":"未設定關於內容","No access tokens":"尚無存取令牌","No key index specified to delete":"未指定要刪除的金鑰索引","No key index specified to disable":"未指定要停用的金鑰索引","No key index specified to enable":"未指定要啟用的金鑰索引","No Active":"無生效","No keys to disable":"沒有可停用的金鑰","No active login sessions":"沒有使用中的登入工作階段","No active system tasks.":"暫無進行中的系統任務。","No additional type-specific settings for this channel type.":"此渠道類型沒有額外的特定類型設定。","No amount options configured. Add amounts below to get started.":"未設定金額選項。在下方新增金額即可開始使用。","No announcements at this time":"目前暫無公告","No announcements yet. Click \\"Add Announcement\\" to create one.":"暫無公告。點擊「新增公告」來建立一個。","No API Domains yet. Click \\"Add API\\" to create one.":"暫無 API 域。點擊「新增 API」建立一個。","No API key yet":"暫無 API 金鑰","No API keys available. Create your first API key to get started.":"沒有可用的 API 金鑰。建立您的第一個 API 金鑰即可開始使用。","No API Keys Found":"未找到 API 金鑰","No API routes configured":"未設定 API 路由","No API tokens":"無 API 金鑰","No app usage data available for this model.":"該模型暫無套用使用數據。","No apps match the selected filters":"沒有匹配篩選條件的套用","No Auth":"無認證","No auto groups configured":"尚未設定自動分組","No available channels":"無可用渠道","No available groups in the global Auto order.":"全域 Auto 順序中目前沒有可用分組。","No available models":"沒有可用模型","No available Web chat links":"沒有可用的 Web 聊天連結","No backup":"無備份","No base input price":"未設定基礎輸入價格","No billing parameters declared":"未宣告計費參數","No billing records found":"未找到賬單記錄","No capabilities reported for this model.":"該模型暫未報告任何能力。","No Change":"無變化","No changelog for this version.":"此版本暫無更新日誌。","No changes":"沒有變更","No changes made":"未進行任何更改","No changes to save":"沒有需要儲存的更改","No channel is configured. This model will not appear in the model square.":"尚未設定渠道,不會在模型廣場顯示。","No channel is currently available. This model will not appear in the model square.":"暫無可用渠道,目前不會在模型廣場顯示。","No channel selected":"未選擇渠道","No channel type found.":"未找到渠道類型。","No channels available. Create your first channel to get started.":"沒有可用的渠道。建立您的第一個渠道即可開始使用。","No channels found":"未找到渠道","No Channels Found":"未找到渠道","No channels selected":"未選擇渠道","No chat presets configured. Click \\"Add chat preset\\" to get started.":"未設定聊天預設。點擊「新增聊天預設」開始。","No chat presets match your search":"沒有匹配的聊天預設","No configured channel models match this metadata rule.":"沒有渠道模型符合此中繼資料規則。","No conflict entries available.":"沒有可用的衝突條目。","No conflicts match your search.":"沒有衝突匹配您的搜尋。","No connection info found in clipboard":"剪貼簿中未找到連線資訊","No console output":"無控制台輸出","No containers":"無容器","No content to copy":"沒有可複製的內容","No custom groups. Saving will inherit the complete global Auto order.":"未自訂分組。儲存後將繼承完整的全域 Auto 順序。","No custom OAuth providers configured yet.":"尚未設定自訂 OAuth 供應商。","No data":"暫無數據","No Data":"無數據","No data available":"暫無數據","No deployments available. Create one to get started.":"沒有可用的部署。建立一個開始吧。","No Deployments Found":"未找到部署","No description available.":"暫無描述。","No notifications are available to you right now":"目前沒有可接收的通知","No permission to access users of same or higher level":"無權取得同級或更高等級使用者的資訊","No permission to change the 2FA settings of users at the same or higher level":"無權操作同級或更高級使用者的 2FA 設定","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"未設定折扣等級。點擊「新增折扣等級」即可開始使用。","No permission to update users of same or higher permission level":"無權更新同權限等級或更高權限等級的使用者資訊","No duplicate keys found":"未發現重複金鑰","No enabled channel key":"沒有可用的管道金鑰","No enabled groups":"無啟用分組","No enabled tokens available":"目前沒有可用的啟用令牌","No encryption":"無加密","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"未設定端點。切換到 JSON 模式或新增列來定義端點。","No endpoints inferred from channels":"未從渠道推導出端點","No extra domains declared":"未宣告額外網域","No FAQ entries available":"暫無 FAQ 條目","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"暫無常見問題條目。點擊「新增常見問題」來建立一個。","No files match the accepted types.":"沒有檔案匹配接受的類型。","No flow data available":"暫無分流數據","No group":"未設定","No group found.":"未找到分組。","No group-based rate limits configured. Click \\"Add group\\" to get started.":"未設定基於組的速率限制。點擊「新增組」開始使用。","No groups match your search":"沒有組匹配您的搜尋","No groups yet. Add a group to get started.":"暫無分組,新增一個分組開始設定。","No header overrides configured.":"未設定標頭覆蓋。","No historical system tasks.":"暫無歷史系統任務。","No history data available":"暫無歷史數據","No incidents in the last 24 hours":"最近 24 小時無異常","No incidents in the last 30 days":"最近 30 天無事件","No instances have reported yet.":"暫無實例上報。","No integrity hash":"無完整性雜湊","No integrity verification":"無完整性驗證","No Inviter":"無邀請人","No IP restriction":"未限制","No keys found":"未找到金鑰","No latency data available":"暫無延遲數據","No linked models":"尚無關聯模型","No linked OAuth provider is available.":"沒有可用的已綁定 OAuth 提供方。","No log entries matched the selected time.":"沒有日誌條目匹配所選時間。","No logs":"暫無日誌","No Logs Found":"未找到日誌","No mappings configured. Click \\"Add Row\\" to get started.":"未設定映射。點擊「新增列」開始。","No marketplace sources configured.":"尚未設定任何市集來源。","No matches found":"未找到匹配項","No matching channels":"無相符渠道","No matching icons":"找不到相符圖示","No matching items":"沒有匹配項","No matching provider":"找不到符合的供應商","No matching results":"無匹配結果","No matching rules":"沒有匹配的規則","No matching token and channel usage was found.":"未找到匹配的令牌與渠道用量。","No messages yet":"暫無訊息","No missing models found.":"未找到缺失的模型。","No model found.":"未找到模型。","No model mappings configured. Click \\"Add Mapping\\" to get started.":"未設定模型映射。點擊「新增映射」即可開始使用。","No model price changes to save":"沒有模型價格變更需要儲存","No models available":"沒有可用的模型","No models available in this category":"該分類下沒有可用模型","No models available. Create your first model to get started.":"沒有可用的模型。建立您的第一個模型即可開始使用。","No models can be synced with the current filters. Adjust the search or sync scope.":"目前條件下沒有可同步的模型,請調整搜尋條件或同步範圍。","No models configured. Use Add model to get started.":"暫無模型設定。使用新增模型開始設定。","No models fetched from upstream":"未從上游獲取模型","No models fetched yet.":"尚未獲取模型。","No models found":"未找到模型","No Models Found":"未找到模型","No models found.":"未找到模型。","No models match the selected filters":"沒有匹配篩選條件的模型","No models match these filters":"沒有符合篩選條件的模型","No valid upstream channel":"無有效上游渠道","No models match your current filters.":"沒有模型匹配您目前的篩選條件。","No models match your search":"沒有匹配的模型","No models matched your search.":"沒有匹配搜尋的模型","No models returned by the upstream":"上游未回傳模型","No models selected":"未選擇模型","No models to add":"無待新增模型","No models to copy":"沒有模型可複製","No models to remove":"無待刪除模型","No models with unset prices":"沒有未設定定價的模型","No new models to add":"沒有新模型可新增","No new models yet":"暫無新模型","No newer version available.":"暫無更新版本。","No nodes":"無節點","No notable climbers right now":"目前沒有顯著上升的模型","No notable drops right now":"目前沒有顯著下降的模型","No parameter overrides configured.":"未設定參數覆蓋。","No Passkey is registered.":"尚未註冊 Passkey。","No payment methods available. Please contact administrator.":"沒有可用的支付方式。請聯絡管理員。","No payment methods configured":"暫無支付方式","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"未設定支付方式。點擊「新增方式」或使用模板開始。","No payment methods match your search":"沒有匹配的支付方式","No performance data available":"暫無效能數據","No permission to perform this action":"無權進行此操作","No plans available":"暫無可購買套餐","No plugins available for binding":"目前沒有可綁定的外掛","No preceding rule matched":"前面的規則均未命中","No preference":"無偏好","No prefill groups yet":"暫無預填充分組","Not implemented yet":"尚未實作","No price differences found":"未發現價格差異","No processable upstream model updates for this channel":"該渠道暫無可處理的上游模型更新","No products configured. Click \\"Add product\\" to get started.":"未設定產品。點擊「新增產品」開始。","No products match your search":"沒有產品匹配您的搜尋","Not logged in":"未登入","No providers available":"暫無可用供應商","No Quota":"無餘額","No quota limit":"不限額","No ratio differences found":"未發現比率差異","No recent usage":"暫無使用記錄","No records":"尚無記錄","No records found. Try adjusting your filters.":"未找到記錄。嘗試調整您的篩選條件。","No redemption codes available. Create your first redemption code to get started.":"沒有可用的兌換碼。建立您的第一個兌換碼即可開始使用。","No Redemption Codes Found":"未找到兌換碼","No related models available for this channel type":"此渠道類型沒有相關模型可用","No release notes provided.":"未提供發佈說明。","No releases found.":"找不到可用的發行版本。","No Reset":"不重置","No reset credits":"暫無重置次數","No reset credits available":"沒有可用重置次數","No restriction":"無限制","No results for \\"{{query}}\\". Try adjusting your search or filters.":"未找到「{{query}}」的結果。請嘗試調整搜尋或篩選條件。","No results found":"搜尋無結果","No results found.":"未找到結果。","No Retry":"不重試","No rule for vip billed as default → use the base ratio of default, 1.0 (the 0.8 of vip is not used)":"沒有「vip 按 default 收費」的規則 → 用 default 的基礎倍率 1.0(vip 自己的 0.8 用不上)","No rule for vip billed as vip → use the base ratio of vip, 0.8":"沒有「vip 按 vip 收費」的規則 → 用 vip 的基礎倍率 0.8","No rules yet":"暫無規則","No rules yet. Add a group below to get started.":"暫無規則。請在下方新增分組以開始。","No separate media pricing configured.":"未設定單獨的媒體定價。","No source available":"暫無原始碼","No source changes":"原始碼無變更","No special ratios configured":"尚未設定特殊倍率","No status code mappings configured.":"未設定狀態碼映射。","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"此商戶暫無店鋪。設定返回 URL 後點擊建立來生成第一組配對。","No subscription plans yet":"暫無訂閱套餐","No subscription records":"暫無訂閱記錄","No Sync":"不同步","No syncable models":"暫無可同步模型","No system announcements":"暫無系統公告","No system tasks yet.":"暫無系統任務。","No task plugins found":"未找到任务外掛","No token found.":"未找到令牌。","No tools configured":"未設定工具","No Upgrade":"不升級","No upstream price differences found":"未發現上游價格差異","No upstream ratio differences found":"未找到上游比例差異","Notifications to receive":"接收哪些通知","OAuth provider not found":"找不到該 OAuth 供應商","No uptime data available":"暫無可用率數據","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"暫無 Uptime Kuma 分組。點擊「新增分組」來建立一個。","No uptime monitoring configured":"未設定正常執行時間監控","No usage logs available. Logs will appear here once API calls are made.":"暫無使用日誌。發起 API 呼叫後日誌將顯示在此處。","No user information available":"暫無用戶資訊","No user selected":"未選擇用戶","No users":"無用戶","No users available. Try adjusting your search or filters.":"沒有可用的用戶。請嘗試調整您的搜尋或篩選條件。","No Users Found":"未找到用戶","No valid custom Auto groups remain. Add a group or restore global Auto.":"沒有可用的自訂 Auto 分組。請新增分組或恢復全域 Auto。","No vendor":"未指定供應商","No vendor data available":"暫無廠商數據","No vendors found":"找不到供應商","No verification method is available for this action.":"此操作沒有可用的驗證方式。","No version history":"暫無版本歷史","No X Found":"未找到 X","Node":"節點","Node filters":"節點篩選","Node Name":"節點名稱","Node role":"節點職責","Nodes reporting from this deployment and their latest heartbeat.":"目前部署中上報的節點及其最新心跳。","Non-stream":"非流","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"非零邀請獎勵需要先在支付閘道設定中確認合規條款。","None":"無","None (plugin declaration)":"無(外掛宣告)","noreply@example.com":"noreply@example.com","Normalized:":"已歸一化:","Not available":"不可用","Not backed up":"未備份","Not bound":"未連結","OIDC ID is empty!":"OIDC ID 為空!","Not configured":"未設定","Not configured for some providers":"部分服務方尚未設定定價","Not configured for this provider":"此服務方尚未設定定價","Not declared":"未宣告","Not declared by this plugin":"外掛未宣告","Not declared; an API key may still be required.":"外掛未宣告驗證方式,仍可能需要 API Key。","Not Equals":"不等於","Not found upstream":"上游找不到","Not in pricing table":"不在定價分組表中","Not included":"未加入","Not installed":"未安裝","Not listed":"隱藏","Not matched":"未符合","Online top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"線上儲值成功,儲值額度:{{quota}},支付金額:{{amount}}","Not provided by this source":"該來源未提供","Not recorded":"未記錄","Not registered":"未注册","Not set":"未設定","Not Set":"未設定","Not set yet":"尚未設定","Not shown":"隱藏","Not Started":"未開始","Not Submitted":"未提交","Not tested":"未測試","Not used for upstream training by default":"預設不會用於上游訓練","Not used yet":"尚未使用","Note":"備註","Notice":"通知","Notification Email":"通知電郵","Notification Method":"通知方式","Notifications":"通知","Now a user whose user group is vip creates tokens with different groups and makes one call with each:":"現在,一個用戶分組為 vip 的用戶建立了不同分組的令牌,各呼叫一次:","Nucleus sampling probability mass":"核採樣累積概率","Number":"數值","Number of codes to create":"要建立的代碼數量","Number of completions to generate":"生成的候選條數","Number of images to generate":"生成的圖像數量","Number of keys to create":"要建立的金鑰數量","Number of times to retry failed requests (0-10)":"失敗請求的重試次數 (0-10)","Number of tokens per unit quota":"每單位配額的令牌數","Number of top log probabilities returned per token":"每個 token 返回的 top 概率數量","Number of users invited":"已邀請的用戶數量","OAuth":"OAuth","OAuth 2.0 service account":"OAuth 2.0 服務帳號","OAuth authorization timed out. Please try again.":"OAuth 授權已逾時,請重試。","OAuth authorization was cancelled.":"OAuth 授權已取消。","OAuth binding timed out. Please try again.":"OAuth 綁定逾時,請重試。","OAuth binding window is no longer available":"OAuth 綁定視窗已無法使用","OAuth callback URL":"OAuth 回呼 URL","OAuth Client ID":"OAuth 用戶端 ID","OAuth Client Secret":"OAuth 用戶端密鑰","OAuth failed":"OAuth 失敗","OAuth Integrations":"OAuth 整合","OAuth pop-up was blocked":"OAuth 彈出式視窗遭瀏覽器封鎖","OAuth popup storage is unavailable.":"OAuth 彈出視窗儲存空間無法使用。","OAuth window is no longer available.":"OAuth 視窗已關閉或無法使用。","Object Prune Rules":"物件清理規則","Observability":"可觀測性","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"請在 Waffo 後台獲取 API 金鑰、商戶 ID 以及 RSA 金鑰對,並設定Callback地址。","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: /api/waffo-pancake/webhook":"請在 Waffo 後台獲取商戶、店鋪、商品與簽名金鑰。Webhook 地址:/api/waffo-pancake/webhook","Ocean Breeze":"海風","of":"條,共","of 3:":"共 3 個:","off":"關閉","Official":"官方","Official Claude Messages":"官方 Claude Messages","Official documentation":"官方說明","Official Gemini from OpenAI Chat":"官方 Gemini(OpenAI Chat 入口)","Official Gemini Native":"官方 Gemini 原生","Official OpenAI Chat":"官方 OpenAI Chat","Official OpenAI Embeddings":"官方 OpenAI Embeddings","Official OpenAI Images":"官方 OpenAI Images","Official OpenAI Responses":"官方 OpenAI Responses","Official pricing preset":"官方定價預設","Official Repository":"官方倉庫","Official Sync":"官方同步","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"OIDC 用戶端 ID","OIDC Client Secret":"OIDC 用戶端密鑰","OIDC configuration fetched successfully":"OIDC 設定獲取成功","OIDC discovery can fill the endpoint fields automatically when the provider supports it.":"提供商支援時,OIDC Discovery 可以自動填入端點欄位。","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"OIDC 發現 URL。點擊「自動發現」以自動獲取端點。","OIDC Display Name":"OIDC 顯示名稱","OIDC endpoints discovered successfully":"OIDC 端點發現成功","Old Format Template":"舊格式模板","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"舊格式:直接覆蓋。新格式:支援條件判斷和自訂 JSON 操作。","Ollama":"Ollama","Ollama Models":"Ollama 模型","One API":"One API","One domain per line":"每行一個域名","One domain per line (only used when domain restriction is enabled)":"每行一個域名 (僅在啟用域名限制時使用)","One IP or CIDR range per line":"每行一個 IP 或 CIDR 範圍","One IP per line (empty for no restriction)":"每行一個 IP (留空表示無限制)","one keyword per line":"每行一個關鍵詞","online":"在線","Online":"在線","Online payment is not enabled. Please contact the administrator.":"管理員未開啟線上支付功能,請聯絡管理員設定。","Online topup is not enabled. Please use redemption code or contact administrator.":"尚未啟用線上儲值。請使用兌換碼或聯絡管理員。","Only allow specific email domains":"僅允許特定的電郵域名","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"僅管理員可用。啟用後,當定時模型檢查偵測到上游模型變更或檢查失敗時,您將透過所選方式收到摘要通知。","Only available for exact matching":"僅精確比對可用","Only configured combinations are overridden. All other calls keep the billing group base ratio.":"只有設定過的組合才會被覆蓋,其餘呼叫仍使用收費分組的基礎倍率。","Only configured combinations are overridden. All other calls keep the token group base ratio.":"只有已設定的組合會被覆蓋,其他呼叫仍使用令牌分組的基礎倍率。","Only enabled parameters are sent with the request.":"只有啟用的參數會隨請求傳送。","Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.":"只填寫站點根域名,例如 https://api.example.com。不要填寫 /api/user/epay/notify 這類路徑。留空則使用伺服器地址。","Only exact model names are removed from enabled and disabled channels. Matching rules are not expanded, and channel records are retained.":"僅從所有啟用及停用的渠道中移除名稱完全相同的模型,不擴展比對規則,渠道本身會保留。","Only Mine":"僅自己","Only one catch-all route is allowed for the same incoming path":"同一入口路徑只允許一個兜底路由","Order is not pending payment and cannot be completed":"訂單狀態不是待支付,無法補單","Order number not provided":"未提供訂單號","Only one OpenAI Models route is allowed":"僅允許設定一條 OpenAI 模型路由","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.":"僅選定的欄位將會被覆蓋。如果出現新的衝突,您可以重新執行同步精靈。","Only show syncable models":"僅看可同步","Only successful requests":"僅成功的請求","Only successful requests count toward this limit.":"僅成功的請求計入此限制。","Only the changes listed here will be committed. If any write fails, none of these changes are applied.":"僅提交此處列出的變更。任何寫入失敗,本次變更均不套用。","Only the first {{shown}} IDs were recorded":"僅記錄前 {{shown}} 項 ID","Only the first {{shown}} IDs were recorded ({{total}} requested)":"僅記錄前 {{shown}} 項,共請求 {{total}} 項","Only the last {{value}} log files will be retained; the rest will be deleted.":"將只保留最近 {{value}} 個日誌檔案,其餘將被刪除。","Only used to find historical logs. New records are available in Audit Logs.":"僅用於查詢歷史日誌,新記錄請前往稽核日誌查看。","Oops! Page Not Found!":"糟糕!頁面未找到!","Oops! Something went wrong":"糟糕!出錯了","Open":"打開","Open a source model first":"請先打開一個源模型","Open CC Switch":"打開 CC Switch","Open filtered model list":"查看已篩選模型清單","Open in chat":"在聊天中打開","Open in new tab":"在新標籤頁中打開","Open in New Tab":"在新標籤頁中打開","Open menu":"打開選單","Open Query Balance to view the upstream JSON response":"請開啟「查詢餘額」檢視上游 JSON 回應","Open release":"打開版本","Open source":"開源","Open Source":"開源項目","Open the io.net console API Keys page":"打開 io.net 控制台 API 金鑰頁面","Open theme settings":"打開主題設定","Open weights":"開放權重","OpenAI":"OpenAI","OpenAI Chat Completions":"OpenAI 聊天補全","OpenAI Chat to Anthropic Messages":"OpenAI Chat 到 Anthropic Messages","OpenAI Chat to Gemini Generate Content":"OpenAI Chat 到 Gemini Generate Content","OpenAI Chat to OpenAI Responses":"OpenAI Chat 到 OpenAI Responses","OpenAI Compatible":"兼容 OpenAI","OpenAI Compatible Upstream":"OpenAI 相容上游","OpenAI Models route does not support client model rules":"OpenAI 模型路由不支援用戶端模型規則","OpenAI Models route does not support pass-through":"OpenAI 模型路由不支援透傳","OpenAI Models route is required to enable upstream model checks":"啟用上游模型檢查必須設定 OpenAI 模型路由","OpenAI Models route must use native forwarding":"OpenAI 模型路由必須使用原生轉發","OpenAI Models upstream path must not contain {model}":"OpenAI 模型上游路徑不得包含 {model}","OpenAI only":"僅 OpenAI","OpenAI Organization":"OpenAI 組織","OpenAI Organization ID (optional)":"OpenAI 組織 ID(可選)","OpenAI Responses to Gemini Generate Content":"OpenAI Responses 轉 Gemini Generate Content","OpenAI Responses to OpenAI Chat":"OpenAI Responses 到 OpenAI Chat","OpenAI, Anthropic, etc.":"OpenAI、Anthropic 等","OpenAI, Anthropic, Google, etc.":"OpenAI、Anthropic、Google 等","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"在外部用戶端中打開。從側邊欄或 API 金鑰操作中觸發,以啟動設定的套用。","Operate channels":"運維渠道","Operation":"操作","operation and charging behavior":"運營和收費行為產生的法律責任","Operation audit":"操作稽核","Operation Audit Info":"操作審計資訊","Operation cancelled":"操作已取消","Operation failed":"操作失敗","Operation successful":"操作成功","Operation Type":"操作類型","Operations":"運維","Operator":"操作者","Operator Admin":"操作管理員","Optimize system for self-hosted single-user usage":"優化系統以適應自託管單用戶使用","Optimized network architecture ensures millisecond response times":"優化的網絡架構,確保毫秒級回應時間","Optional callback override. Leave blank to use server address":"可選的Callback覆蓋。留空以使用伺服器地址","Optional icon identifier for the login button":"登入按鈕的可選圖標標識符","Optional icon.svg or icon.png shipped next to plugin.js, up to 512 KiB. Stored separately from the source.":"可選,與 plugin.js 同層的 icon.svg 或 icon.png,最大 512 KiB,與原始碼分開儲存。","Optional JSON policy to restrict access based on user info fields":"可選的 JSON 政策,用於基於用戶資訊欄位限制存取","Optional minimum recharge amount for this method.":"此方法的可選最低儲值金額。","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"計算儲值定價時使用的每個用戶分組可選乘數。請提供一個 JSON 物件,例如","Optional note describing this version":"選填,用於描述該版本的備註","Optional notes about this channel":"關於此渠道的可選備註","Optional notes about when to use this group":"關於何時使用此分組的可選說明","Optional ratio used when upstream cache hits occur.":"上游緩存命中時使用的可選比率。","Optional request-rule multiplier expression. Leave empty when no request rule applies.":"可選的請求規則倍率運算式。沒有請求規則時留空。","Optional rule description":"可選規則說明","Optional settings for advanced container configuration.":"進階容器設定的可選設定。","Optional supplementary information (max 100 characters)":"可選補充資訊 (最多 100 個字元)","Optional tag for grouping channels":"用於分組渠道的可選標籤","Optional. Without it, Google picks the region; with it, requests go to the deployment region below.":"可選。不填時由 Google 決定區域;填寫後,請求會送往下方的部署區域。","Opus Model":"Opus 模型","Or continue with":"或繼續使用","Or enter this key manually:":"或手動輸入此金鑰:","or pick existing":"或選擇已有項","Order completed successfully":"訂單已成功完成","Order History":"訂單歷史","Order Payment Method":"訂單支付方式","org-...":"org-...","Original Model":"原始模型","Original value":"原始值","Other":"其他","Other cases":"其他情況","Other channels":"其他渠道","Other groups":"其他分組","Other models":"其他模型","Other nodes":"其他節點","Other sessions signed out":"已登出其他工作階段","Other Settings":"其他設定","Other tokens":"其他令牌","Other users":"其他用戶","Otherwise (the preceding conditions do not match)":"否則(上述條件不成立)","Otherwise → {{name}}":"否則 → {{name}}","Otherwise the binding is removed.":"關閉時清除該綁定。","Outage":"中斷","Output":"輸出","Output aspect ratio":"輸出寬高比","Output image size":"輸出圖像尺寸","Output price":"輸出價格","Output Price: High to Low":"輸出價格:從高到低","Output Price: Low to High":"輸出價格:從低到高","Output token price for generated tokens.":"生成內容的輸出 token 價格。","Output token rate":"輸出 Token 速率","Output tokens":"輸出 token","Output Tokens":"輸出 Token","Outside these times: {{condition}}":"{{condition}}以外的時段","Overage limited":"超額受限","overall":"總體","Overflow":"上溢","Overflow items":"超出項","override":"覆蓋","Override":"覆蓋","Override auto-discovered endpoint":"覆蓋自動發現的端點","Override matrix":"覆蓋矩陣","Override quota for user “{{name}}”":"覆寫使用者「{{name}}」的額度","Override request headers":"覆蓋請求標頭","Override request headers (JSON format)":"覆蓋請求頭(JSON 格式)","Override request parameters":"覆蓋請求參數","Override request parameters (JSON format)":"覆蓋請求參數 (JSON 格式)","Override request parameters. Cannot override":"覆蓋請求參數。無法覆蓋","Override request parameters. Cannot override stream parameter.":"覆蓋請求參數。無法覆蓋 stream 參數。","Override rule: when a vip user is billed as premium, the ratio is 0.3 instead of 0.5":"覆蓋規則:vip 用戶按 premium 收費時,倍率用 0.3 而不是 0.5","Override Rules":"覆蓋規則","Password login has been disabled by administrator":"管理員關閉了密碼登入","Override the endpoint used for testing. Leave empty to auto detect.":"覆蓋用於測試的端點。留空以自動偵測。","Override user quota":"覆寫使用者額度","overrides for matching model prefix.":"為匹配模型前綴的覆蓋價。","Overrode user quota from {{from}} to {{to}}":"覆蓋用戶額度,從 {{from}} 改為 {{to}}","Overview":"概覽","Password registration has been disabled by administrator, please use third-party account verification":"管理員關閉了透過密碼進行註冊,請使用第三方帳號驗證的方式進行註冊","Overwritten":"已覆蓋","Password reset link is invalid or has expired":"重設連結無效或已過期","Page":"頁面","Page {{current}} of {{total}}":"第 {{current}} 頁,共 {{total}} 頁","PaLM":"PaLM","Pan":"平移","Pancake":"煎餅","Param Override":"參數覆蓋","Parameter":"參數","Parameter configuration error":"參數設定有誤","Parameter Override":"參數覆蓋","Parameter override and system prompt are unavailable":"參數覆蓋、系統提示詞不可用","Parameter override must be a valid JSON object":"參數覆蓋必須是合法的 JSON 物件","Parameter override must be valid JSON format":"參數覆蓋必須是合法的 JSON 格式","Parameter Override Template (JSON)":"參數覆蓋模板 (JSON)","Parameter override template must be a JSON object":"參數覆蓋模板必須是 JSON 物件","Parameter settings":"參數設定","parameter.":"參數。","Parameters":"參數","Parsed {{count}} service account file(s)":"已解析 {{count}} 個服務賬號檔案","Pause drag demo":"暫停拖曳示範","Payment amount is too low":"儲值金額過低","Payment cancel redirect URL is not in the trusted domain list":"支付取消重新導向URL不在可信任網域列表中","Parsed plugin metadata":"解析出的外掛元数据","Payment configuration error":"支付設定錯誤","Partial Submission":"部分提交確認","Payment information has not been configured by administrator":"當前管理員未設定支付資訊","Partly shown":"部分顯示","Pass Headers":"透傳請求頭","Payment method does not exist":"不存在此支付方式","Pass specified request headers to upstream":"把指定請求頭透傳到上游請求","Pass Through Body":"透傳請求體","Pass Through Headers":"請求頭透傳","Pass Through Request Headers":"透傳請求標頭","Pass through the anthropic-beta header for beta features":"透傳 anthropic-beta 標頭以使用 beta 功能","Pass through the include field for usage obfuscation":"透傳 include 欄位以用於用量混淆","Pass through the inference_geo field for Claude data residency region control":"透傳 inference_geo 欄位用於控制 Claude 數據駐留推理區域","Pass through the inference_geo field for geographic routing":"透傳 inference_geo 欄位以用於地理路由","Pass through the safety_identifier field":"將 safety_identifier 欄位透傳到上游","Pass through the service_tier field":"將 service_tier 欄位透傳到上游","Pass through the speed field for Claude inference speed mode control":"透傳 speed 欄位用於控制 Claude 推理速度模式","Pass when key is missing":"欄位缺失時通過","Payment success redirect URL is not in the trusted domain list":"支付成功重新導向URL不在可信任網域列表中","Pass-through":"透傳","Pass-Through":"透傳","Pass-through Headers (comma-separated or JSON array)":"透傳請求頭(逗號分隔或 JSON 陣列)","Payment, redemption, subscription, and invitation reward features are disabled. The administrator must confirm compliance terms before enabling them.":"支付、兌換碼、訂閱方案和邀請返利功能已停用。管理員需先確認合規聲明後方可啟用。","Pass-through help":"透傳說明","Pass-through requires native forwarding":"透傳僅支援原生轉發","Passive recovery only":"僅被動恢復","Passkey":"Passkey","Passkey Authentication":"通行金鑰認證","Passkey authentication is disabled.":"Passkey 驗證已停用。","Passkey display name":"通行密鑰顯示名稱","Passkey domain change blocked: {{domains}}; affected {{known}}; unknown {{unknown}}":"已阻止通行金鑰網域變更:{{domains}};已知受影響 {{known}};歸屬未知 {{unknown}}","Passkey domain update failed":"通行金鑰網域更新失敗","Passkey domains":"通行金鑰網域","Passkey is not available in this browser":"此瀏覽器中不支援 Passkey","Passkey is not supported in this environment":"此環境中不支援 Passkey","Passkey is not supported on this device":"此設備不支援 Passkey","Passkey is not supported on this device.":"此設備不支援通行金鑰。","Passkey Login":"Passkey 登入","Passkey login failed":"Passkey 登入失敗","Passkey login was cancelled":"Passkey 登入已取消","Passkey login was cancelled or timed out":"Passkey 登入已取消或逾時","Passkey not supported on this device":"此設備不支援通行金鑰","Passkey registered successfully":"Passkey 註冊成功","Passkey registration was cancelled":"通行金鑰註冊已取消","Passkey removed successfully":"通行金鑰已成功移除","Passkey reset successfully":"通行金鑰已成功重置","Passkey verification failed":"Passkey 驗證失敗","Passkey verification is not available in the current state":"目前狀態下無法使用 Passkey 驗證","Passkey verification is not supported in this environment":"目前環境不支援 Passkey 驗證","Passkey verification was cancelled":"Passkey 驗證已取消","Passkey verification was cancelled or timed out":"Passkey 驗證已取消或逾時","Passkey website domain":"通行密鑰使用的網站網域","Passkeys for removed domains will stop working. Confirm only if affected users can sign in another way.":"被移除網域的通行金鑰將無法使用。請確認受影響使用者可透過其他方式登入後再繼續。","Passkeys known to use removed domains: {{amount}}":"使用被刪除網域的通行金鑰:{{amount}}","Passkeys only work on the website they were created for. This helps prevent other websites from misusing them.":"通行密鑰只認建立它的網站,防止被其他網站冒用。","Passkeys with an unknown domain that may be affected: {{amount}}":"網域歸屬未知、可能受影響的通行金鑰:{{amount}}","Passthrough Template":"透傳模板","Password":"密碼","Password / Access Token":"密碼 / 存取令牌","Password authentication is disabled.":"密碼驗證已停用。","Password changed successfully":"密碼更改成功","Password copied to clipboard: {{password}}":"密碼已複製到剪貼簿:{{password}}","Password has been copied to clipboard":"密碼已複製到剪貼簿","Password Login":"密碼登入","Password must be at least 8 characters":"密碼必須至少 8 個字元","Password must be at most 20 characters long":"密碼最多 20 個字元","Password must be between 8 and 20 characters":"密碼長度必須在 8 到 20 個字元之間","Password must contain between 8 and 128 characters.":"密碼長度必須為 8–128 個字元。","Password Registration":"密碼註冊","Password reset and copied to clipboard: {{password}}":"密碼已重置並複製到剪貼簿:{{password}}","Password reset: {{password}}":"密碼已重置:{{password}}","Password set successfully":"密碼設定成功","Password settings have changed. Reload the page and try again.":"密碼設定已變更,請重新載入頁面後再試。","Passwords do not match":"密碼不匹配","Passwords don\'t match.":"兩次輸入的密碼不一致。","Paste Connection Info":"貼上連線資訊","Paste JavaScript source here...":"在此粘贴 JavaScript 原始碼...","Path":"路徑","Path not set":"未設定路徑","Path Regex (one per line)":"路徑正則(每行一個)","Path:":"路徑:","Pay":"支付","Pay {{amount}}":"支付 {{amount}}","Per-request Price: High to Low":"按次價格:從高到低","Per-request Price: Low to High":"按次價格:從低到高","Plan amount is too low":"訂閱方案金額過低","Pay {{amount}} • Save {{saved}}":"支付 {{amount}} • 節省 {{saved}}","Pay with Balance":"使用餘額支付","Plan name cannot be empty":"套餐名稱不能為空","Pay-as-you-go with real-time usage monitoring":"按量付費,實時監控使用情況","Plan price cannot be empty":"套餐價格不能為空","Payment":"支付","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"支付聚合模式:使用你自己的註冊公司(離岸實體)入駐。面向企業場景構建。","Payment Channel":"支付渠道","Payment Gateway":"支付閘道","Payment initiated":"已發起支付","Payment Method":"付款方式","Payment method identifier":"支付方式標識","Payment method identifier is required":"支付方式標識不能為空","Payment method name":"支付方式名稱","Payment method name is required":"支付方式名稱不能為空","Payment method type":"支付方式類型","Payment method type is required":"支付方式類型為必填項","Payment methods":"付款方式","Payment Methods":"支付方式","Please confirm the compliance statement":"請確認合規聲明","Payment page opened":"已打開支付頁面","Payment request failed":"支付請求失敗","Payment return URL":"支付返回地址","Payment return URL is empty. Create the product without a SuccessURL redirect?":"支付返回 URL 為空。是否在沒有 SuccessURL 跳轉的情況下建立產品?","Payment type key":"支付處理標識","Payment type key is required":"支付處理標識不能為空","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"在根管理員確認合規條款之前,支付、兌換碼、訂閱套餐和邀請獎勵功能將保持鎖定。","Peak":"峰值","Peak KV cache usage":"最高 KV 快取使用率","Peak throughput":"峰值吞吐","Peak token pool usage":"最高權杖池使用率","Penalises repetition of frequent tokens":"懲罰高頻 token 的重複出現","pending":"等待中","Pending":"待確認","per":"每","Per 1K tokens":"每 1K tokens","Per 1M tokens":"每 1M tokens","Per image":"每張圖片","Per matched model":"依比對模型設定","per request":"每次請求","Per request":"每次請求","Per Request":"按次計費","Per Second":"按秒","Per token":"按 token","Per Unit":"按次","Per-call":"每次呼叫","Per-feature metered windows split by model or capability.":"按模型或能力拆分的附加收費能力窗口。","Per-group performance":"各分組效能","Per-request":"按次","Per-request (deprecated)":"按次(已棄用)","Per-request (fixed price)":"按請求收費(固定價格)","Per-token":"按 Token","Per-token (deprecated)":"按 Token(已棄用)","Per-token (ratio based)":"按令牌收費(基於比例)","Per-token logit bias map":"按 token 的 logit 偏置映射","Percentage:":"百分比:","Performance":"效能","Please select a product":"請選擇產品","Performance data is not yet available for this model.":"該模型暫無效能數據。","Performance health":"效能健康","Performance metrics for the last 24 hours":"最近 24 小時的效能指標","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"此處展示的效能指標為預覽模擬數據,待後端對接完成後將替換為真實可觀測數據。","Performance Monitor":"效能監控","Performance Settings":"效能設定","Performed {{action}} on user {{username}} (ID: {{id}})":"對用戶 {{username}}(ID: {{id}})執行 {{action}}","Period":"時間範圍","Periodically check for upstream model changes":"定期檢查上游模型是否有變更","Periodically checks all channels except manually disabled ones to detect failures and recover channels automatically.":"定時檢查除手動停用外的全部渠道,用於主動發現故障並自動恢復渠道。","Periodically checks only channels with auto-disable enabled, excluding manually disabled channels.":"只定時檢查已啟用「自動停用」的渠道;未啟用該選項和手動停用的渠道不會被檢查。","Periodically send ping frames to keep streaming connections active.":"定期發送 ping 幀以保持串流連接處於活動狀態。","Permanently delete your account and all data":"永久刪除您的用戶和所有數據","Permissions":"權限","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"允許在非 HTTPS 源上註冊通行金鑰(僅建議用於開發)","Please wait {{seconds}} seconds before requesting another verification code.":"發送過於頻繁,請等待 {{seconds}} 秒後再試","Perplexity":"Perplexity","Persist your data file":"持久化您的數據檔案","Personal":"個人","Personal area":"個人中心","Personal Center Area":"個人中心區域","Personal info settings":"個人資訊設定","Personal Settings":"個人設定","Personal settings and profile management.":"個人設定和個人資料管理。","Personal use":"個人使用","Personal use mode":"個人使用模式","Pick a date":"選擇日期","Pick models and derive the other side with a rule to create request-to-upstream mappings.":"選擇模型並用規則衍生另一側名稱,產生「請求模型 → 上游模型」映射。","Pick or create both a store and a product before saving.":"儲存前請同時選擇或建立店鋪和產品。","Ping Interval (seconds)":"Ping 間隔(秒)","Plan":"套餐","Plugin metadata contains an unknown field \\"{{field}}\\". If this plugin was downloaded from the official marketplace, it may require a newer version of new-api. Try updating new-api and installing the plugin again.":"外掛中繼資料包含未知欄位「{{field}}」。如果外掛來自官方市集,可能需要較新版本的 new-api。請嘗試更新 new-api 後重新安裝外掛。","Plan ID":"方案 ID","Plan Name":"套餐名稱","Plan Price":"套餐價格","Plan price must be greater than zero":"套餐價格必須大於 0","Plan Quota":"套餐額度","Plan Subtitle":"套餐副標題","Plan Title":"套餐標題","Plan title is required":"套餐標題為必填項","Planned action":"預計操作","Planned maintenance on Friday at 22:00 UTC...":"計劃於週五 22:00 UTC 進行維護...","Platform":"平台","Playground":"遊樂場","Playground and chat functions":"操練場和聊天功能","Playground experiments and live conversations.":"Playground 實驗和實時對話。","Please agree to the legal terms first":"請先同意法律條款","Please complete the security check to continue.":"請完成安全驗證以繼續。","Please confirm that you understand the consequences":"請確認您了解後果","Please confirm your password":"請確認密碼","Possibly an upstream timeout":"可能是上游逾時","Please enable io.net model deployment service and configure an API key in System Settings.":"請先在系統設定中啟用 io.net 模型部署服務,並設定 API Key。","Please enable Two-factor Authentication or Passkey before proceeding":"請先啟用雙因素認證或通行金鑰","Please enter a code.":"請輸入驗證碼。","Please enter a name":"請輸入名稱","Please enter a new password":"請輸入新密碼","Please enter a redemption code":"請輸入兌換碼","Please enter a valid duration":"請輸入有效持續時間","Please enter a valid email address":"請輸入有效的電郵地址","Please enter a valid number":"請輸入有效的數值","Please enter a Well-Known URL first":"請先輸入 Well-Known URL","Please enter amount":"請輸入金額","Please enter an administrator username":"請輸入管理員用戶名","Please enter API key first":"請先輸入 API 金鑰","Please enter chat client name":"請輸入聊天用戶端名稱","Please enter email and verification code":"請輸入電郵和驗證碼","Please enter keys first":"請先輸入金鑰","Please enter model name":"請輸入模型名稱","Please enter plan title":"請輸入套餐標題","Please enter the authentication code.":"請輸入驗證碼。","Please enter the URL":"請輸入 URL","Please enter the verification code":"請輸入驗證碼","Please enter the verification code or backup code":"請輸入驗證碼或備用碼","Please enter your current password":"請輸入目前密碼","Please enter your email":"請輸入您的電郵","Please enter your email first":"請先輸入您的電郵","Please enter your password":"請輸入密碼","Please enter your username":"請輸入用戶名","Please enter your username or email":"請輸入用戶名或電郵","Please enter your verification code":"請輸入您的驗證碼","Please enter your verification code or backup code":"請輸入您的驗證碼或備用碼","Please fix JSON errors before saving":"請先修復 JSON 錯誤再儲存","Please fix the highlighted fields before saving":"請先修復高亮欄位後再儲存","Please log in with the appropriate credentials":"請使用適當的憑證登入","Please select a container":"請選擇一個容器","Please select a payment method":"請選擇支付方式","Please select a primary model":"請選擇主模型","Please select a subscription plan":"請選擇訂閱套餐","Please select at least one channel":"請選擇至少一個渠道","Please select at least one model":"請選擇至少一個模型","Please select items to delete":"請選擇要刪除的項目","Please Select user groups that can access this channel.":"請選擇可以存取此渠道的用戶組。","Please set Ollama API Base URL first":"請先設定 Ollama API Base URL","Please sign in to view {{module}}.":"請登入後查看 {{module}}。","Please try again later.":"請稍後再試。","Please type the following text to confirm:":"請輸入以下文字進行確認:","Please upload key file(s)":"請上傳金鑰檔案","Please wait a moment before trying again.":"請稍候再試。","Please wait a moment, human check is initializing...":"請稍等,人機驗證正在初始化...","Please wait before editing to avoid overwriting saved values.":"請等待載入完成後再編輯,以免覆蓋已儲存的值。","Please wait before requesting another verification code.":"請稍後再要求驗證碼。","Please wait for the current generation to complete":"請等待目前生成完成","Plugin":"外掛","Plugin activation failed":"外掛啟用失敗","Plugin author":"外掛作者","Plugin default":"外掛預設值","Plugin details":"外掛詳情","Plugin extensions":"外掛擴充","Plugin Generation":"外掛執行代次","Plugin icon":"外掛圖示","Plugin icon exceeds the 512 KiB limit.":"外掛圖示超過 512 KiB 限制。","Plugin icon must be an .svg or .png file.":"外掛圖示必須是 .svg 或 .png 檔案。","Plugin indexes are fetched by your browser. Installing runs the same review and admission pipeline as a manual upload.":"外掛索引由你的瀏覽器取得。安裝時走的審查與准入流程與手動上傳完全一致。","Plugin installation failed":"外掛安裝失敗","Plugin is still in use":"外掛仍在使用中","Plugin key":"外掛键","Plugin metadata":"外掛元数据","Plugin sandbox":"外掛沙盒","Plugin saved, activation required":"外掛已儲存,待啟用","Plugin source":"外掛原始碼","Plugin source exceeds the 8 MiB limit.":"外掛原始碼超過 8 MiB 上限。","Plugin uploaded successfully":"外掛上傳成功","Plugin version activated":"外掛版本已激活","Price cannot be negative":"價格不能為負數","Price cannot exceed 9999":"價格不能超過9999","Plugin version deleted":"外掛版本已刪除","Plugin website":"外掛官網","Plugin-defined interfaces":"外掛自訂介面","Plugins":"外掛","Plugins can access channel credentials. Review the source and differences before installing.":"外掛可存取渠道憑證。安裝前請檢查原始碼與差異。","Policy JSON":"政策 JSON","Polling":"輪詢","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"輪詢模式需要 Redis 和記憶體緩存,否則效能將顯著下降","Poor":"差","Port":"端口","Port must be a positive integer":"端口必須為正整數","Position {{position}}":"第 {{position}} 位","Post Delta":"結算差額","PostgreSQL detected":"偵測到 PostgreSQL","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL 為生產工作負載提供進階可靠性和數據完整性。","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL 提供強大的可靠性保證。在上線之前,請仔細檢查您的維護窗口和保留策略。","Power AI applications, manage digital assets, connect the Future":"承載 AI 套用,管理數位資產,連接未來","Powerful API Management Platform":"強大的 API 管理平台","Pre-Consume for Free Models":"免費模型預消耗","Pre-consumed":"預扣費","Pre-Consumed Quota":"預消耗配額","Pre-release":"預先發行版","Prefer the original channel, allow switching":"優先原通道,失敗允許切換","Preference saved as {{pref}}, but no active subscription. Requests will be rejected.":"已儲存偏好為{{pref}},目前無生效訂閱,請求將被拒絕","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"已儲存偏好為{{pref}},目前無生效訂閱,將自動使用錢包","Preferences":"偏好設定","Prefill Group Management":"預填充分組管理","Prefill Groups":"預填充分組","Prefill groups help you keep complex configurations in sync.":"預填充分組可幫助您保持複雜設定的同步。","Prefix":"前綴","Prefix cache hit rate":"前綴快取命中率","Prefix Match":"前綴匹配","Prefix used when displaying prices":"顯示價格時使用的前綴","Prefix/Suffix Text":"前後綴文字","Premium chat models":"進階聊天模型","Premium plan, half price":"進階套餐,半價優惠","Preparing chat keys…":"正在準備聊天金鑰…","Preparing conversion...":"正在準備轉換…","Preparing your chat link, please try again in a moment.":"正在準備您的聊天連結,請稍後再試。","Preparing your chat link…":"正在準備您的聊天連結...","Prepend":"前置追加","Prepend to Start":"追加到開頭","Prepend value to array / string / object start":"把值追加到陣列/字串/物件開頭","Presence Penalty":"存在懲罰","Preserve the original field when applying this rule":"套用此規則時保留原始欄位","Preserve upstream-specific fields when API formats match; bypasses model redirect, parameter override and format conversion":"用戶端與上游 API 格式一致、需要保留上游擴充欄位時開啟;模型重新導向、參數覆寫和格式轉換將失效","Preset groups":"預設分組","Preset recharge amounts (JSON array)":"預設儲值金額(JSON 陣列)","Preset recharge amounts displayed to users":"向用戶顯示的預設儲值金額","Preset Template":"預設模板","Preset templates":"預設模板","preset.anthropic":"Anthropic","preset.default":"預設","preset.forest-whisper":"森林低語","Product configuration error":"產品設定錯誤","Product does not exist":"產品不存在","preset.lake-view":"湖光","preset.lavender-dream":"薰衣草夢","preset.ocean-breeze":"海風","preset.rose-garden":"玫瑰花園","preset.simple-large":"超大字體簡易","preset.sunset-glow":"日落霞光","preset.underground":"暗夜","Press Enter or comma to add tags":"按 Enter 或逗號新增標籤","Press Enter to use \\"{{value}}\\"":"按 Enter 使用「{{value}}」","Prevent server-side request forgery attacks":"防止伺服器端請求偽造攻擊","Preview":"預覽","Preview again":"重新預覽","Preview changes":"預覽變更","Preview excludes group ratios and request rule multipliers.":"預覽不包含群組倍率與請求規則倍率。","Preview fields":"預覽欄位","Preview is unavailable for custom expressions.":"自訂表達式無法預覽。","Preview metadata first":"請先預覽資料","Preview price changes":"預覽價格變更","Preview pricing conversion":"定價轉換預覽","Preview selected changes":"預覽所選變更","Preview unavailable":"無法預覽","Preview upstream model changes":"預覽上游模型變更","Previous":"上一步","Previous branch":"上一分支","Previous page":"上一頁","Previous permissions":"原權限","Previous value":"原值","Price":"價格","Price ($/1K calls)":"價格($/1K 次)","Price (local currency / USD)":"價格(本地貨幣/美元)","Price display":"價格顯示","Price display mode":"價格顯示模式","Price estimation":"價格估算","Price estimation description":"完成硬件類型、部署位置、副本數量等設定後,價格將自動計算。","Price examples":"價格示例","Price ID":"價格 ID","Price mode (USD per 1M tokens)":"價格模式(每 100 萬個 token 的美元價格)","Price per image":"每張圖片價格","Price per request":"每次請求價格","Price source":"價格來源","Price summary":"價格摘要","price_xxx":"price_xxx","Price:":"價格:","Prices are in {{currency}}, with units shown below. Use USD when editing expressions directly.":"價格以 {{currency}} 計,單位見下方標示。手動編輯運算式時請使用美元。","Prices changed while preparing the conversion. Try again.":"準備轉換時價格已變更,請重試。","Prices for each set of conditions":"不同條件對應的價格","Prices shown per":"價格顯示單位","Prices shown per {{unit}} tokens":"價格按每 {{unit}} Token 顯示","Prices shown per usage unit":"價格按每個用量單位顯示","Prices synced successfully":"價格同步成功","Prices vary by usage tier and request conditions":"價格根據用量檔位和請求條件動態調整","Pricing":"定價","Pricing & Display":"定價與顯示","Pricing by condition":"按條件計價","Pricing by Group":"按分組定價","Pricing conditions":"計價條件","Pricing Configuration":"定價設定","Purchase limit cannot be negative":"購買上限不能為負數","Purchase limit for this plan has been reached":"已達到該訂閱方案購買上限","Pricing currency":"定價貨幣","Pricing group example":"定價分組示例","Pricing groups":"定價分組","Pricing mode":"定價模式","Quality {{quality}}":"品質 {{quality}}","Pricing must be a JSON object":"定價設定必須為 JSON 物件","Pricing Ratios":"定價比例","Pricing rule {{number}}":"定價規則 {{number}}","Pricing rules":"定價規則","Pricing tier {{name}}":"計費級距 {{name}}","Pricing Type":"定價類型","Primary Model":"主模型","Primary Passkey domain":"主要網域","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"基於請求上下文提取的 Key,優先複用上一次成功的渠道(粘滯選路)","Priority":"優先級","Priority (Default)":"優先級(預設)","Priority level from 0 (lowest) to 10 (highest), default is 5":"優先級,從 0(最低)到 10(最高),預設為 5","Priority order for automatic group assignment. New tokens rotate through this list.":"自動分組分配的優先級順序。新 token 將按此清單輪換。","Priority order for tokens in the auto group. The system tries groups from top to bottom.":"auto 分組令牌的優先順序。系統會從上到下依次嘗試各分組。","Privacy":"隱私","Privacy Policy":"私隱政策","Private Deployment URL":"私有部署 URL","Processed requests":"已處理請求","Processing OAuth response...":"正在處理 OAuth 回應...","Processing...":"處理中...","Quota change amount cannot be zero":"額度變更量不能為 0","Product":"產品","Product ID":"產品 ID","Product ID is required":"產品 ID 為必填項","Product Name":"產品名稱","Productivity":"效率工具","Products":"產品","Professional team providing 24/7 technical support":"專業團隊提供 24/7 技術支援","Profile":"個人資料","Profile updated successfully":"個人資料更新成功","Programming":"編程","Progress":"進度","Project":"項目","Promote":"提升","Promotion codes":"促銷代碼","Prompt":"提示","Prompt (EN)":"提示詞 (英文)","Quota unit is misconfigured":"額度單位設定錯誤","Prompt cache ratio":"提示緩存倍率","Quota value cannot be negative":"額度值不能為負數","Quota value exceeds valid range, maximum is {{max}}":"額度值超出有效範圍,最大值為 {{max}}","Prompt caching":"提示詞緩存","Prompt Caching":"提示詞緩存","Prompt Details":"提示詞詳情","Prompt price ($/1M tokens)":"提示詞價格(美元/100 萬 token)","Prompt text filtering is active with the current form values.":"依目前表單設定,提示詞文字過濾已生效。","Prompt text filtering needs both switches enabled and a non-empty keyword list.":"提示詞文字過濾需要同時開啟兩個開關,並設定非空的敏感詞清單。","Proprietary":"商業閉源","Protect login and registration with Cloudflare Turnstile":"使用 Cloudflare Turnstile 保護登入和註冊","Provide a JSON object where each key maps to an endpoint definition.":"提供一個 JSON 物件,其中每個鍵映射到一個端點定義。","Provide a valid URL starting with http:// or https://":"請提供以 http:// 或 https:// 開頭的有效 URL","Provide Markdown, HTML, or an external URL for the privacy policy":"提供 Markdown、HTML 或外部 URL 作為私隱政策","Provide Markdown, HTML, or an external URL for the user agreement":"提供 Markdown、HTML 或外部 URL 作為用戶協議","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"以 JSON 格式提供按類別劃分的安全覆蓋。使用 `default` 作為回退值。","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"以 JSON 格式提供按模型劃分的標頭覆蓋。可用於啟用測試功能,例如擴展上下文窗口。","Provider":"供應商","Provider & data privacy":"廠商與數據私隱","Provider created successfully":"供應商建立成功","Provider deleted successfully":"供應商刪除成功","Provider ID":"供應商 ID","Provider Name":"供應商名稱","Provider source":"供應商來源","Provider type (OpenAI, Anthropic, etc.)":"供應商類型 (OpenAI、Anthropic 等)","Provider updated successfully":"供應商更新成功","Provider-specific endpoint, account, and compatibility settings.":"設定供應商專屬的端點、用戶和兼容性選項。","Proxy Address":"代理地址","Proxy address must use HTTP, HTTPS, SOCKS5, or SOCKS5H and include a valid host":"代理位址必須使用 HTTP、HTTPS、SOCKS5 或 SOCKS5H,並包含有效的主機","Prune Object Items":"清理物件項","Prune object items by conditions":"按條件清理物件中的子項","Prune Rule (string or JSON object)":"清理規則(字串或 JSON 物件)","Public base URL for async task media. Supports a dedicated media domain, port, or Nginx path prefix; falls back to Server Address when empty.":"非同步任務媒體的公開基礎地址。支援獨立媒體網域、連接埠或 Nginx 路徑前綴;留空時回退至伺服器地址。","Public model catalog and pricing page.":"公開模型目錄和價格頁面。","Public rankings page based on live usage data.":"基於真實用量數據的公開排行榜頁面。","Publish Date":"發佈日期","Publish the request names and remove the raw upstream names from the model list":"將請求模型名稱加入模型清單,並移除上游原始名稱","Published":"已發佈","Published as {{model}}":"對外名稱 {{model}}","Published at":"發布時間","Published models, groups, and model remapping rules.":"已發佈的模型、分組和模型重映射規則。","Recalculated from tokens: tokens {{tokens}}, model ratio {{model_ratio}}, group ratio {{group_ratio}}, other multiplier {{other_multiplier}}":"按 token 重算:tokens {{tokens}},模型倍率 {{model_ratio}},分組倍率 {{group_ratio}},其他倍數 {{other_multiplier}}","Published:":"已發佈:","Pull":"拉取","Pull model":"拉取模型","Pulling...":"拉取中...","Purchase Limit":"限購","Purchase limit reached":"已達到購買上限","Purchase Subscription":"購買訂閱套餐","QR Code Image URL":"二維碼圖片 URL","QR code is not configured. Please contact support.":"二維碼未設定。請聯絡支援人員。","Quantity":"數量","QuantumNous":"QuantumNous","Query":"Query","Query Balance":"查詢餘額","Query Param":"請求參數","Querying...":"正在查詢...","Question":"問題","Queued":"排隊中","Quick actions":"快捷操作","Quick insert common payment methods":"快速插入常用支付方式","Quick insert payment entries":"快速插入支付項","Quick options":"快捷選項","Quick Range":"快速範圍","Quick Setup from Preset":"從預設快速設定","Quota":"額度","Quota ({{currency}})":"額度 ({{currency}})","Quota adjusted successfully":"調整額度成功","Quota adjustment details":"額度調整詳情","Redemption code count must be greater than 0":"兌換碼個數必須大於0","Quota after adjustment":"調整後額度","Quota before adjustment":"調整前額度","Quota clamped":"額度已限制","Redemption code name length must be between 1-20":"兌換碼名稱長度必須在1-20之間","Quota consumed before charging users":"向用戶收費前消耗的配額","Quota Distribution":"消耗分佈","Quota given to invited users":"授予被邀請用戶的配額","Quota given to invited users ({{formattedQuota}})":"授予被邀請用戶的配額({{formattedQuota}})","Quota given to users who invite others":"授予邀請其他用戶的配額","Quota given to users who invite others ({{formattedQuota}})":"授予邀請其他用戶的配額({{formattedQuota}})","Quota must be a positive number":"配額必須是正數","Quota must be zero or greater":"額度不能為負數","Redemption failed, please try again later":"兌換失敗,請稍後再試","Redemption quota must be positive":"兌換碼額度必須大於 0","Quota Per Unit":"每單位配額","Quota Reset":"額度重置","Quota saturation protection triggered":"已觸發額度飽和保護","Quota Settings":"額度設定","Quota Types":"配額類型","Quota unchanged":"額度未變更","Quota update failed":"額度更新失敗","Quota:":"Quota:","Radius":"圓角","Random":"隨機","Randomly select a key from the pool for each request":"每次請求從池中隨機選擇一個金鑰","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"目前排行榜數據為預覽用模擬數據,後端整合完成後將替換為真實分析數據。","Rankings":"排行榜","Rate Limit Windows":"速率限制窗口","Rate Limited":"限流","Rate Limiting":"速率限制","Rate limits":"速率限制","Ratio":"倍率","Ratio applied to audio completions for streaming models.":"套用於串流模型音頻完成的比例。","Ratio applied to audio inputs where supported by the upstream model.":"套用於上游模型支援的音頻輸入的比例。","Ratio applied when creating cache entries for supported models.":"為支援的模型建立緩存條目時套用的倍率。","Ratio mode":"比例模式","Ratio overrides for users of this group":"該分組用戶使用其他分組時的倍率覆蓋","Ratio overrides when billed as this group":"按該分組收費時的倍率覆蓋","Ratio Type":"比率類型","Ratio: {{value}}":"倍率:{{value}}","Ratios synced successfully":"比率同步成功","Raw expression":"原始表達式","Raw expressions and presets use USD. Currency selection only converts visual price inputs and monetary previews.":"原始表達式和預設使用美元。貨幣選擇僅換算視覺化價格輸入和金額預覽。","Raw JSON":"原始 JSON","Raw Quota":"原生額度","Raw response":"原始回覆","Re-enable on success":"成功後重新啟用","Re-login":"重新登入","Read channels":"讀取渠道","Ready":"就緒","Ready to initialize":"準備初始化","Ready to simplify":"準備好簡化","Real exchange rate between USD and your payment gateway currency":"美元與您的支付閘道貨幣之間的實際匯率","Realtime pricing must be converted manually.":"Realtime 定價需要手動轉換。","Reason":"原因","Reason:":"原因:","Reasoning":"推理","Reasoning Effort":"推理強度","Received":"獲得","Regular administrators cannot promote other users to administrator":"一般管理員無法將其他使用者提升為管理員","Received amount":"已收額度","Recent maintenance tasks running across instances and their execution status.":"跨實例執行的近期維護任務及其執行狀態。","Recent success-rate samples; gray bars indicate missing data.":"近期成功率取樣;灰色條表示暫無資料。","Recently completed or failed system task runs.":"最近已完成或失敗的系統任務執行記錄。","Recently launched models":"近期發佈的模型","Recently launched models gaining traction":"近期發佈並快速增長的模型","Recharge":"儲值","Recharge Amount":"儲值金額","Recharge Amount (USD)":"儲值金額 (USD)","Recommended":"推薦","Recommended actions":"推薦操作","Recommended to keep this high to avoid upstream throttling.":"建議保持此值較高,以避免上游限流。","Record IP Address":"記錄 IP 地址","Record quota usage":"記錄配額使用量","Recover auto-disabled channels only":"僅恢復自動停用的渠道","Recursion Strategy":"遞迴策略","Recursive":"遞迴","Redeem":"兌換額度","Redeem codes":"兌換碼","Redeemed":"已使用","Redeemed at":"使用時間","Redeemed By":"兌換人","Redeemed:":"已兌換:","redemption code":"兌換碼","Redemption Code":"兌換碼","Redemption code deleted successfully":"兌換碼刪除成功","Redemption code disabled successfully":"兌換碼已停用","Redemption code enabled successfully":"兌換碼已啟用","Redemption code updated successfully":"兌換碼更新成功","Redemption code(s) created successfully":"兌換碼建立成功","Redemption codes":"兌換碼","Redemption Codes":"兌換碼","Redemption codes are disabled until the administrator confirms compliance terms.":"管理員確認合規條款之前,兌換碼功能不可用。","Redemption codes created":"兌換碼建立完成","redemption codes.":"兌換碼。","Redemption failed":"兌換失敗","Redemption successful! Added: {{quota}}":"兌換成功!已新增:{{quota}}","Redirect {{model}}":"重新導向 {{model}}","Redirect fetched upstream names to the names your users call.":"將拉取到的上游名稱重新導向為使用者呼叫的名稱。","Redirect panel":"重新導向面板","Redirect URL":"重新導向 URL","Redirecting to chat page...":"正在跳轉到聊天頁面...","Redirecting to Creem checkout...":"正在重新導向到 Creem 結帳...","Redirecting to GitHub...":"正在跳轉 GitHub...","Redirecting to payment page...":"正在重新導向到支付頁面...","Redirecting to sign in in {{seconds}} seconds.":"將在 {{seconds}} 秒後跳轉到登入頁。","Redirects to {{model}}":"重新導向至 {{model}}","Reduces cache hit rate":"會降低快取命中率","Reduces repeated wording":"減少重複措辭","Reference Video":"參照生影片","Referral link:":"推薦連結:","Referral Program":"推薦計劃","Referral reward transfer is disabled until the administrator confirms compliance terms.":"管理員確認合規條款之前,邀請獎勵轉移功能不可用。","Refine models by provider, group, type, and tags.":"按供應商、分組、類型和標籤細化模型。","Refresh":"重新整理","Refresh Cache":"重新整理緩存","Refresh credential":"重新整理憑證","Refresh details":"重新整理詳情","Refresh failed":"重新整理失敗","Refresh failed. Showing the last successful snapshot.":"重新整理失敗,目前顯示上次成功取得的快照。","Refresh interval (minutes)":"重新整理間隔 (分鐘)","Refresh preview":"重新偵測","Refresh Stats":"重新整理統計","Refresh the list and try again.":"請重新整理清單後再試一次。","Refresh the preview before trying again; some changes may already have been saved.":"部分變更可能已儲存,請重新偵測後再操作。","Refreshing...":"重新整理中...","Refund":"退款","Refund Details":"退款詳情","Regenerate":"重新生成","Regenerate Backup Codes":"重新生成備用代碼","Regenerated two-factor backup codes":"已重新產生兩步驟驗證備用碼","Regenerating immediately invalidates any existing token.":"重新生成會立即使所有現有令牌失效。","Regex":"正則","Regex Pattern":"正則表達式","Regex Replace":"正則替換","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"請在 Pancake 控制台中將每個 URL 註冊到對應的測試模式/生產模式 webhook 槽位。分離端點可以避免測試流量誤入生產用戶。","Register Passkey":"註冊 Passkey","Registered":"已注册","Registered a passkey":"註冊了一個 Passkey","Registration Enabled":"註冊已啟用","Registration flow expired. Please try again.":"註冊流程已過期,請再試一次。","Registry (optional)":"註冊表 (可選)","Registry secret":"註冊表金鑰","Registry username":"註冊表用戶名","Reinstall latest":"重新安裝最新版","Reject Reason":"拒絕原因","Release details":"版本詳情","Release to insert a new priority tier":"放開以插入新優先級","Release to join priority {{priority}}":"放開以加入同級 · 優先級 {{priority}}","Released":"發佈於","Reload pricing":"重新載入定價","Reload vendor details":"重新載入供應商資料","Relying Party Display Name":"依賴方顯示名稱","Relying Party ID":"依賴方 ID","Remaining":"剩餘","Remaining percentage":"剩餘比例","Remaining quota":"剩餘配額","Remaining Quota ({{currency}})":"剩餘額度 ({{currency}})","Remaining quota units":"剩餘配額單位","Remaining:":"剩餘:","Remark":"備註","Remind me once when my balance drops below the threshold":"餘額低於閾值時提醒我一次","Remind users through their chosen notification method when their balance drops below the threshold":"使用者餘額低於閾值時,透過其選擇的通知方式提醒","Reminder threshold":"提醒閾值","Reminder threshold cannot be negative":"提醒閾值不能為負數","Remove":"移除","Remove {{group}}":"移除 {{group}}","Remove {{value}}":"移除 {{value}}","Remove ${{amount}}":"移除 ${{amount}}","Remove all custom prices, ratios and billing expressions for these exact model names. Built-in pricing may become effective again.":"清除這些模型名稱對應的全部自訂價格、倍率及計費運算式,內建定價可能會重新生效。","Remove all log entries created before the selected timestamp.":"移除所選時間戳之前建立的所有日誌條目。","Remove attachment":"移除附件","Remove branch":"刪除分支","Remove compatible Passkey domains?":"移除相容的通行金鑰網域?","Remove condition":"移除條件","Remove domains":"移除網域","Remove Duplicates":"移除重複項","Remove end condition":"刪除結束條件","Remove filter":"移除篩選","Remove functionResponse.id field":"移除 functionResponse.id 欄位","Remove mapped targets":"移除映射目標","Remove Models":"刪除模型","Remove negation":"取消取反","Remove node filter":"移除節點篩選","Remove Passkey":"解綁 Passkey","Remove Passkey?":"移除通行金鑰?","Remove rule group":"移除規則組","Remove saved price":"刪除已儲存價格","Remove source {{name}}":"移除來源 {{name}}","Remove start condition":"刪除起始條件","Remove string prefix":"去掉字串前綴","Remove string suffix":"去掉字串後綴","Remove the target field":"刪除目標欄位","Remove this model’s custom pricing and use the built-in defaults. A model without a default may become unpriced.":"移除此模型的自訂價格並還原內建預設值。沒有預設價格的模型可能變成未定價狀態。","Remove tier":"移除檔位","Removed":"已移除","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"已移除 {{removed}} 個重複金鑰。移除前:{{before}},移除後:{{after}}","Removed an OAuth binding for the user":"解除了用戶的一個 OAuth 連結","Removed models":"已移除模型","Removed Models ({{count}})":"已移除模型 ({{count}})","Removed models will no longer be available through this channel. Select removals explicitly.":"移除後將無法透過此渠道呼叫這些模型,請手動勾選需要移除的項目。","Removed settings":"移除的設定","Removes MjProxy flags such as --fast, --relax, and --turbo from user prompts.":"從用戶提示中移除 MjProxy 參數,如 --fast、--relax 和 --turbo。","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"移除通行金鑰後,您下次將需要使用密碼登入。您可以隨時重新註冊。","Rename":"重新命名","Rename deployment":"重新命名部署","Rename failed":"重新命名失敗","Renamed an access token":"已重新命名存取令牌","Renamed successfully":"重新命名成功","Renaming metadata does not rename channel models or move pricing. Existing prices stay with the original model name.":"修改中繼資料名稱不會重新命名渠道模型或移轉定價,既有價格仍屬於原模型名稱。","Reorder channel {{id}}":"調整通道 {{id}} 的優先級","Repair":"修復","Repair Channel Consistency":"修復渠道一致性","Repair channel consistency?":"修復渠道一致性?","Repeat the administrator password":"重複輸入管理員密碼","Replace":"替換","Replace {{find}} with {{replaceWith}}":"將 {{find}} 取代為 {{replaceWith}}","Replace all existing keys":"替換所有現有金鑰","Replace channel models":"覆蓋渠道模型","Replace forwarding routes?":"取代轉發路由?","Replace mode: Will completely replace all existing keys":"替換模式:將完全替換所有現有鍵","Replace text":"取代文字","Replace with":"取代為","Replace With":"替換為","replaced":"已替換","Replacement Model":"替換模型","Replay drag demo":"重播拖曳示範","Replica count":"副本數","Replicate":"Replicate","Report an issue":"回報問題","request":"請求","Request":"請求","Request & Response":"請求與回應","Request Body Disk Cache":"請求體磁碟緩存","Request Body Field":"請求體欄位","Request Body Memory Cache":"請求體記憶體緩存","Request body must be a JSON object.":"請求主體必須是 JSON 物件。","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"請求體透傳已啟用。請求體將直接傳送到上游,不進行任何轉換。","Request checks":"請求檢查","Request completed":"請求已完成","Request conversion":"請求轉換","Request Conversion":"請求轉換","Request Count":"請求計數","Request decision flow":"請求決策流程","Request error occurred":"請求發生錯誤","Request failed":"請求失敗","Request flow":"請求流","Request Header Field":"請求頭欄位","Request Header Override":"請求頭覆蓋","Request Header Overrides":"請求頭覆蓋","Request headers must be a JSON object with string values.":"請求標頭必須是值為字串的 JSON 物件。","Request ID":"請求 ID","Request Limits":"請求限制","Request Model":"請求模型","Request Model Name":"請求模型名稱","Request Model:":"請求模型:","Request names your users call":"使用者呼叫的請求模型名稱","Request overrides, routing behavior, and upstream model automation":"請求覆蓋、路由行為和上游模型自動化","Request Path":"請求路徑","Request policies":"請求策略","Request policy decisions":"請求策略決策","Request processing":"請求處理","Request rejected locally":"請求在本機被拒絕","Request retry":"請求重試","Request rule pricing":"請求規則收費","Request rules apply on top of this amount.":"請求規則會在此金額之上繼續套用。","Request simulation":"請求模擬","Request success rate sampled over the last 24 hours":"最近 24 小時按時間桶採樣的請求成功率","Request success rate; {{incidents}} incident buckets in the last 24 hours":"請求成功率;最近 24 小時 {{incidents}} 個異常桶","Request text filtering":"請求文字過濾","Request timed out, please refresh and restart GitHub login":"請求逾時,請重新整理頁面後重新發起 GitHub 登入","Request-based":"含請求條件","Requested items":"請求項數","Requested quota":"請求金額","Requested quota: {{quota}}":"請求金額:{{quota}}","Requested redemption code IDs":"請求刪除的兌換碼 ID","Requested token IDs":"請求的權杖 ID","Requested token IDs truncated":"請求的權杖 ID 已截斷","Requested: {{total}}":"請求 {{total}} 項","Requested: {{total}} · Deleted: {{processed}}":"請求 {{total}} 項,實際刪除 {{processed}} 個","Requested: {{total}} · Returned: {{processed}}":"請求 {{total}} 項,傳回 {{processed}} 個","Requests":"請求數","Requests (24h)":"請求數(24 小時)","Requests / 24h":"請求 / 24 小時","Requests per minute":"每分鐘請求數","requests served":"服務請求數","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"請求將被轉發到此 Worker。最後的斜線會自動移除。","Requests:":"請求:","Require email verification for new accounts":"要求新用戶驗證電郵","Require job success before follow-up actions":"在後續操作前要求任務成功","Require login to view models":"要求登入才能查看模型","Require login to view rankings":"要求登入才能查看排行榜","Require the original channel":"必須使用原通道","required":"必填","Required":"必需","Required events:":"必需事件:","Required permission":"所需權限","Required provider, authentication, model, and group settings":"必填的供應商、鑒權、模型和分組設定","Required to expose MjProxy-style image generation to end users.":"需要向終端用戶開放 MjProxy 風格的圖像生成。","Requires an available channel and access to its group.":"仍需有可用渠道,並符合使用者群組存取條件。","Requires global auto-disable and this channel option.":"需同時開啟全域自動停用和本通道開關。","Requires upstream WebSocket support":"需上游支援 WebSocket","Rerank":"重新排序","Reroll":"重繪","Research, analysis, scientific reasoning":"研究、分析與科學推理","Resend ({{seconds}}s)":"重新發送 ({{seconds}}s)","Resend codes":"重新傳送驗證碼","Resend in {{seconds}}s":"{{seconds}} 秒後重送","Reserve requested images; settle returned images.":"按請求數量預扣,按實際傳回數量結算。","Reserve the estimated input cost multiplied by this value, without estimating output tokens. Defaults to 1; positive decimals such as 0.5 and 1.5 are supported. Final charges use actual usage. Per-request and task prices are unaffected.":"按預估輸入費用乘以此倍率預扣,不預估輸出 token。預設為 1,支援 0.5、1.5 等正小數。最終按實際用量結算,按次和任務計費不受影響。","Reserved for viewing complete channel keys after secure verification.":"預留用於在安全驗證後查看完整渠道金鑰。","Reset":"重置","Reset {{count}} active subscriptions":"已重置 {{count}} 個有效訂閱","Reset 2FA":"重置 2FA","Reset 2FA for {{username}}? The user must set up 2FA again to continue using it.":"要重置 {{username}} 的 2FA 嗎?該用戶必須重新設定 2FA 後才能繼續使用。","Reset active {{plan}} subscriptions for this user?":"要重置此用戶的有效 {{plan}} 訂閱嗎?","Reset all active subscriptions under {{plan}}?":"要重置 {{plan}} 下的所有有效訂閱嗎?","Reset all model prices?":"重置所有模型價格嗎?","Reset all model ratios?":"重置所有模型比例嗎?","Resume drag demo":"繼續拖曳示範","Review the affected Passkeys and confirm the domain removal. If the settings or impact have changed, confirmation is required again.":"請核對受影響的通行金鑰並確認刪除網域。設定或影響範圍變更後,需要重新確認。","Reset all settings to default values":"將所有設定重置為預設值","Reset at:":"重設於:","Reset balance and used quota":"重置餘額和已用配額","Reset completed":"重置完成","Reset completed. Latest usage has been refreshed.":"重置完成,已重新整理最新用量。","Reset Count":"重設數量","Reset count:":"重置次數:","Reset Credit":"重置次數","Reset Credits":"重置次數","Reset Cycle":"重置週期","Reset email sent, please check your inbox":"重置郵件已發送,請檢查您的收件箱","Reset failed":"重置失敗","Reset model ratios":"重置模型倍率","Reset Passkey":"重置 Passkey","Reset Passkey for {{username}}? The user will need to register a new Passkey before using passwordless login.":"要重置 {{username}} 的 Passkey 嗎?該用戶需要重新註冊 Passkey 後才能使用無密碼登入。","Reset password":"重設密碼","Reset Period":"重置週期","Reset prices":"重置價格","Reset quota":"重置額度","Reset ratios":"重置比例","Reset Stats":"重置統計","Reset subscription quota":"重置訂閱額度","Reset the user passkey":"重設了用戶的通行金鑰","Reset to default":"重置為預設","Reset to Default":"重置為預設","Reset to default configuration":"已重置為預設設定","Reset Two-Factor Authentication":"重置 2FA","Reset usage window":"重置用量窗口","Resets in:":"將於以下時間重置:","Resetting...":"重置中...","Resize column":"調整欄寬","Resolve Conflicts":"解決衝突","Resource Configuration":"資源設定","Resources":"資源","Responding...":"正在回覆...","Response":"回應","Response Model":"回應模型","Response model mismatch":"回應模型不一致","Response model: {{model}}":"回應模型:{{model}}","Response Time":"回應時間","Response time: {{duration}}":"回應時間:{{duration}}","Response too large":"回應過大","Responses API Version":"回應 API 版本","Responses WebSocket":"Responses WebSocket","Restore default pricing":"還原預設定價","Restore defaults":"恢復預設","Restore global Auto":"恢復全域 Auto","Restore notifications":"恢復提醒","Restrict user model request frequency (may impact high concurrency performance)":"限制用戶模型請求頻率(可能會影響高並發效能)","Result":"結果","Result not retained":"結果未保留","Retain last N days":"保留最近N天","Retain last N files":"保留最近 N 個檔案","Retention days":"保留天數","Retrieve result":"查詢結果","Retry":"重試","rule_name cannot be empty":"rule_name 不能為空","Retry budget":"重試預算","Retry Chain":"重試鏈路","Retry Settings":"重試設定","Retry Suggestion":"重試建議","Retry Times":"重試次數","Return a custom error immediately":"立即返回自訂錯誤","Return Custom Error":"返回自訂錯誤","Return data conforming to a JSON schema":"返回符合 JSON Schema 的數據","Return Error":"返回錯誤","Return per-token log probabilities":"返回每個 token 的對數概率","Return to dashboard":"返回儀表板","Return to the original window to continue.":"返回原視窗繼續操作。","Return vector embeddings for inputs":"為輸入返回向量嵌入","Returned keys":"傳回金鑰數","Returned token IDs":"傳回的權杖 ID","Returned: {{processed}}":"傳回 {{processed}} 個","Reveal API key":"顯示 API 金鑰","Reveal full keys":"檢視完整金鑰","Reveal key":"顯示金鑰","Revenue":"收入","Review & initialize":"審核並初始化","Review and confirm the selected prices.":"確認所選模型的價格變更。","Review and sign out devices currently using your account.":"查看並登出目前正在使用您帳號的裝置。","Review and upgrade":"審查並升級","Review confirmation":"檢查並確認","Review every addition and overwrite before applying. Pricing, channels, and group access are not changed.":"套用前逐項檢查新增及覆寫內容,定價、渠道及分組權限不會變更。","Review model rates before scaling traffic":"擴展流量前查看模型費率","Review selected changes":"核對所選變更","Review the affected records before applying. Pricing, channels, and model names are preserved.":"套用前請檢查受影響的記錄。定價、管道與模型名稱維持原值。","Review the compatible domains and allowed websites, then save changes on the settings page.":"檢查相容網域和允許使用的網站,然後在設定頁儲存變更。","Review the model changes before applying. Unselected models stay unchanged and will not be ignored.":"請先核對模型變更。未勾選的模型保持不變,也不會加入忽略清單。","Review the prices and billing expression. Confirming updates the draft; save model pricing to apply it.":"請核對價格與計費運算式。確認後僅更新草稿,儲存模型定價後生效。","Review your payment details":"查看您的付款詳情","Review your purchase details before proceeding.":"在繼續之前,請審閱您的購買詳情。","Revoke":"撤銷","Revoke session?":"撤銷此工作階段?","Revoke this access token? Scripts using it stop working immediately.":"撤銷此存取令牌?使用它的腳本會立即失效。","Revoked access tokens":"已撤銷的存取令牌","Revoked an access token":"已撤銷存取令牌","Rewards will be added directly to your balance":"獎勵將直接新增到您的餘額","Rewrite callback URLs to the local server":"將Callback URL 重寫到本地伺服器","Right to Left":"從右到左","Role":"角色","Roleplay":"角色扮演","Root":"Root","Root Diagnostics":"Root 診斷","Rose Garden":"玫瑰花園","Route":"路由","Route active":"路由已啟用","Route Description":"路由描述","Route group":"路由組","Route is required":"路由為必填項","Route models must be unique for the same incoming path":"同一入口路徑下的路由模型必須唯一","Route, auth, and balance check in one place":"路由、認證和餘額檢查集中展示","Routes":"路由","Routes in this plan":"方案中的路由","Routes with the same incoming path are matched by model. Leave the model scope empty only for the final fallback route.":"同一入口路徑的路由按模型匹配。僅最後一個兜底路由可留空模型範圍。","Routes with the same incoming path are split by client model rules. Unmatched requests use the final fallback.":"同一入口路徑按客戶端 model 規則分流;未命中的請求走最後的兜底。","Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.":"同一入口路徑按客戶端 model 精確分流;未命中的請求走最後的兜底。","Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.":"同一入口路徑按客戶端請求中的精確模型名匹配。多個模型用英文逗號分隔,只有最後的兜底可留空。","Routing & Mapping":"路由與對應","Routing & Overrides":"路由與覆蓋","Routing Group":"路由分組","Routing Reliability":"路由可靠性","Routing Strategy":"路由策略","Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.":"行為用戶分組,列為收費分組。空白單元格回退到灰色顯示的基礎倍率。","Rows per page":"每頁行數","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = 每分鐘請求數,TPM = 每分鐘 token 數,RPD = 每日請求數。限制按令牌分組生效。","RSA Private Key (Production)":"RSA 私鑰(生產)","RSA Private Key (Sandbox)":"RSA 私鑰(沙盒)","Rule":"規則","Rule {{line}} is missing source field":"第 {{line}} 條操作缺少來源欄位","Rule {{line}} is missing target field":"第 {{line}} 條操作缺少目標欄位","Rule {{line}} is missing target path":"第 {{line}} 條操作缺少目標路徑","Rule {{line}} is missing value":"第 {{line}} 條操作缺少值","Rule {{line}} pass_headers format is invalid":"第 {{line}} 條請求頭透傳格式無效","Rule {{line}} pass_headers is missing header names":"第 {{line}} 條請求頭透傳缺少請求頭名稱","Rule {{line}} prune_objects is missing conditions":"第 {{line}} 條 prune_objects 缺少條件","Rule {{line}} return_error requires a message field":"第 {{line}} 條 return_error 需要 message 欄位","Rule Description (optional)":"規則描述(可選)","Rule editor mode":"規則編輯模式","Rule group":"規則組","Rule override":"規則獨立設定","rules":"規則","Rules":"規則","Rules are checked in order. The first match determines the price.":"按順序比對規則,首條符合的規則決定價格。","Rules can inherit or override these defaults.":"規則可沿用或單獨覆寫。","Rules for {{group}}":"{{group}} 的規則","Rules JSON":"規則 JSON","Rules JSON must be an array":"規則 JSON 必須是陣列","Rules match the original model value from the client request body.":"規則匹配客戶端請求體裡的原始 model 值。","Run and manage maintenance tasks and performance settings.":"執行和管理維護任務及效能設定。","Run background checks using the selected test mode":"依所選檢查模式在背景執行檢查","Run dry run":"執行試跑","Run GC":"執行 GC","Run tests for the selected models":"執行所選模型的測試","running":"執行中","Running":"執行中","Running dry run":"正在執行試跑","Running requests":"執行中請求","Runtime":"執行環境","Runtime status":"运行状态","Runway":"可用時長","s":"秒","Safety Settings":"安全設定","Same as Local":"與本地相同","Sample interval: {{seconds}} seconds":"取樣間隔:{{seconds}} 秒","Sampling temperature; lower is more deterministic":"採樣溫度;越低越穩定","Sandbox":"沙盤","Sandbox mode":"沙盒模式","Save":"儲存","Save & Submit":"儲存並提交","Save all settings":"儲存所有設定","Save as a file":"儲存為檔案","Save as Markdown":"儲存為 Markdown","Save as TXT":"儲存為 TXT","Save Backup Codes":"儲存備份代碼","Save changes":"儲存變更","Save Changes":"儲存變更","Save chat settings":"儲存聊天設定","Save check-in settings":"儲存簽到設定","Save Creem settings":"儲存 Creem 設定","Save drawing settings":"儲存繪圖設定","Save Epay settings":"儲存 Epay 設定","Save failed":"儲存失敗","Save failed, please retry":"儲存失敗,請重試","Save general settings":"儲存通用設定","Save group ratios":"儲存分組比率","Save group settings":"儲存分組設定","Save io.net settings":"儲存 io.net 設定","Save log settings":"儲存日誌設定","Save metadata":"儲存資料","Save model prices":"儲存模型價格","Save model ratios":"儲存模型比率","Save Models":"儲存模型","Save monitoring rules":"儲存監控規則","Save navigation":"儲存導航","Save notice":"儲存通知","Save or discard pricing changes before renaming metadata.":"重新命名前,請先儲存或放棄定價修改。","Save Preferences":"儲存偏好設定","Save preview":"儲存預覽","Save rate limits":"儲存速率限制","Save redemption codes":"儲存兌換碼","Save sensitive words":"儲存敏感詞","Save Settings":"儲存設定","Save sidebar modules":"儲存側邊欄模組","Save SSRF settings":"儲存 SSRF 設定","Save Stripe settings":"儲存 Stripe 設定","Save these backup codes in a safe place. Each code can only be used once.":"將這些備份代碼儲存在安全的地方。每個代碼只能使用一次。","Save these codes in a safe place. Each code can only be used once.":"將這些代碼儲存在安全的地方。每個代碼只能使用一次。","Save token limits":"儲存令牌限制","Save tool prices":"儲存工具價格","Save Waffo Pancake settings":"儲存 Waffo Pancake 設定","Save Worker settings":"儲存 Worker 設定","Saved successfully":"儲存成功","Saving permission changes requires security verification":"修改權限後儲存需要安全驗證","Saving...":"正在儲存...","Scan QR Code":"掃描二維碼","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"掃描二維碼關注官方賬號,回覆「驗證碼」以接收您的驗證碼。","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"使用您的身份驗證器套用(Google Authenticator、Microsoft Authenticator 等)掃描此二維碼","Scenario Templates":"場景模板","Scheduled channel tests":"定期渠道測試","Scheduled full test":"定時全量測試","Scheduled full test probes non-manually-disabled channels; passive recovery only checks auto-disabled channels after real request failures.":"定時全量測試會探測非手動停用的渠道;僅被動恢復只會在真實請求失敗導致渠道自動停用後檢查這些渠道是否可恢復。","Scheduled or bulk health checks can disable a channel when this duration is exceeded, if both global and channel auto-disable are enabled.":"全域與渠道自動停用均開啟時,定時或批次健康檢查耗時超過此門檻可觸發停用。","Scheduled recovery is off. Bulk channel tests can still re-enable automatically disabled channels.":"定時恢復未執行,批次測試仍可恢復被自動停用的渠道。","Scheduled test options":"定期測試子選項","scheduling controls":"調度控制能力","Science":"科研","Scope":"作用域","Scopes":"作用域","Search":"搜尋","Search by name or URL...":"按名稱或 URL 搜尋...","Select at least one valid permission.":"請至少選擇一個有效權限。","Search by order number...":"按訂單號搜尋...","Search channel type...":"搜尋渠道類型...","Search chat presets...":"搜尋聊天預設...","Search colors...":"搜尋顏色...","Search conflicting models or fields":"搜尋衝突的模型或欄位","Search deployments...":"搜尋部署...","Search feature in development":"搜尋功能開發中","Search group names...":"搜尋分組名稱...","Search groups by name or description":"搜尋分組名稱或描述","Search groups...":"搜尋分組...","Search icons or enter an icon key":"搜尋圖示或輸入圖示識別碼","Search method identifiers...":"搜尋支付方式標識...","Search missing models":"搜尋缺失的模型","Search model name, provider, endpoint, or tag...":"搜尋模型名稱、供應商、端點或標籤...","Search model name...":"搜尋模型名稱...","Search models":"搜尋模型","Search models or fields...":"搜尋模型或欄位...","Search models...":"搜尋模型...","Search payment methods...":"搜尋付款方式...","Search payment type keys...":"搜尋支付處理標識...","Search payment types...":"搜尋支付類型...","Search products...":"搜尋產品...","Search providers, plugins, or type numbers":"搜尋供應商、外掛或類型編號","Search rules...":"搜尋規則…","Search tags...":"搜尋標籤...","Search the public web at inference time":"推理時檢索公開互聯網","Search vendor names or descriptions":"搜尋供應商名稱或簡介","Search vendors":"搜尋供應商","Search vendors...":"搜尋供應商...","Search, add, and edit model vendors.":"搜尋、新增及編輯模型供應商。","Search...":"搜尋...","second":"秒","Second":"秒","seconds":"秒","Secret env (JSON object)":"金鑰環境 (JSON 物件)","Secret environment variables (JSON)":"金鑰環境變數 (JSON)","Secret Key":"金鑰","Secure & Reliable":"安全可靠","Secured":"已保護","Security":"安全","Security & Access":"安全與存取","Security & Limits":"安全與限制","Security Check":"安全驗證","Security verification":"安全驗證","Security verification has expired. Please verify again.":"安全驗證已過期,請重新驗證。","Security verification is no longer valid. Please verify again.":"安全驗證已失效,請重新驗證。","Seed":"隨機種子","Select":"選擇","Select {{name}}":"選擇 {{name}}","Select a color":"選擇顏色","Select a complete plan, then keep only the routes you need.":"選擇完整方案,再保留需要的路由。","Select a concrete model to configure pricing. Metadata matching does not propagate prices.":"請選擇具體模型設定價格,中繼資料比對不會傳播定價。","Select a group":"選擇一個分組","Select a group type":"選擇分組類型","Select a model to edit pricing":"選擇一個模型編輯定價","Select a preset...":"選擇一個預設...","Select a price source and review pricing changes. Model metadata and channel access are not changed.":"選擇價格來源並預覽價格變更,模型資料與渠道權限不會變更。","Select a product":"選擇產品","Select a role":"選擇角色","Select a rule to edit.":"請選擇一條規則進行編輯。","Select a saved vendor.":"請選擇已儲存的供應商。","Select a store":"選擇店鋪","Select a suggested icon or keep an existing advanced icon key.":"選擇建議圖示,也可保留既有的進階圖示字串。","Select a timestamp before clearing logs.":"清除日誌前請選擇一個時間戳。","Select a usage mode to continue":"選擇使用模式以繼續","Select a verification method first":"請先選擇驗證方式","Select a version to compare":"选择要比较的版本","Select active subscription plan":"選擇有效訂閱套餐","Select all":"全選","Select all (filtered)":"全選(篩選結果)","Select all changed fields":"全選變更欄位","Select all matching models":"全選符合的模型","Select all models":"選擇所有模型","Select all models in {{category}}":"全選 {{category}} 中的模型","Select all prices from {{source}}":"全選 {{source}} 的價格","Select all syncable models (all pages, {{count}})":"全選可同步項目(跨頁,共 {{count}} 項)","Select All Visible":"全選目前","Select an operation mode and enter the amount":"選擇操作模式並輸入金額","Select announcement type":"選擇公告類型","Select at least one Auto group or restore global Auto.":"請至少選擇一個 Auto 分組,或恢復全域 Auto。","Select at least one field to overwrite.":"請選擇至少一個要覆蓋的欄位。","Select at least one model to preview mappings.":"至少選擇一個模型以預覽映射。","Select at least one permission":"至少選擇一項權限","Select at least one route":"請至少選擇一條路由","Select at least one target model":"請至少選擇一個目標模型","Select at most {{max}} Auto groups":"最多選擇 {{max}} 個 Auto 分組","Select body font":"選擇正文字體","Select border radius":"選擇圓角大小","Select channel type":"選擇渠道類型","Select color preset":"選擇顏色預設","Select content width":"選擇內容寬度","Select corner radius":"選擇圓角大小","Select currency":"選擇貨幣","Select date":"選擇日期","Select default chart":"選擇預設圖表","Select default range":"選擇預設範圍","Select display mode":"選擇顯示模式","Select end time":"選擇結束時間","Select from presets or type custom identifier.":"從預設中選擇或輸入自訂標識符。","Select granularity":"選擇粒度","Select groups (leave empty to keep current)":"選擇分組(留空以保持目前設定)","Select interface density":"選擇介面密度","Select items...":"選擇項目...","Select key format":"請選擇金鑰格式","Select language":"選擇語言","Select Language":"選擇語言","Select layout style":"選擇佈局樣式","Select locations":"選擇位置","Select model":"選擇模型","Select Model":"選擇模型","Select model {{model}}":"選擇模型 {{model}}","Select models":"選擇模型","Select models (empty for allow all)":"選擇模型(留空表示允許所有)","Select models and apply to channel models list.":"選擇模型並套用到渠道模型清單。","Select models or add custom ones":"選擇模型或新增自訂模型","Select models to process. Unselected \\"add\\" models will be ignored.":"勾選要處理的模型,未勾選的「新增」模型將作為忽略處理。","Select models to run batch tests.":"選擇要執行大量測試的模型。","Select or enter color value":"選擇或輸入顏色值","Select or enter method identifier":"選擇或輸入支付方式標識","Select or enter model name":"選擇或輸入模型名稱","Select or enter payment type":"選擇或輸入支付類型","Select or enter payment type key":"選擇或輸入支付處理標識","Select payment method":"選擇支付方式","Select preset or enter custom CSS color value.":"選擇預設或輸入自訂 CSS 顏色值。","Select price for {{model}} from {{source}}":"選擇 {{source}} 的 {{model}} 定價","Select price sources":"選擇價格來源","Select publish date":"選擇發佈日期","Select requirement":"選擇要求","Select row":"選擇行","Select row {{number}}":"選取第 {{number}} 列","Select sidebar style":"選擇側邊欄樣式","Select site direction":"選擇站點方向","Select start time":"選擇開始時間","Select subscription plan":"選擇訂閱套餐","Select successful models ({{count}})":"勾選成功模型({{count}})","Select Sync Channels":"選擇同步渠道","Select sync channels to compare prices":"選擇同步渠道以對比價格","Select sync channels to compare ratios":"選擇同步渠道以比較比率","Select Sync Source":"選擇同步源","Select syncable models on this page":"全選本頁可同步項目","Select task plugin":"選擇任務外掛","Select the API endpoint region":"選擇 API 終端節點區域","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"選擇要使用上游數據覆蓋的欄位。未選擇的欄位將保留其本地值。","Select the models to keep in this channel.":"選擇要在此渠道中保留的模型。","Select the task plugins installed on the upstream gateway":"選擇上游閘道已安裝的任務插件","Settings updated":"設定已更新","Select theme preference":"選擇主題偏好","Settled by the task usage expression":"按任務用量表達式結算","Select theme preset":"選擇主題預設","Select time granularity":"選擇時間粒度","Select vendor":"選擇供應商","Select version":"選擇版本","Selectable groups":"可選分組","selected":"已選擇","Selected {{count}}":"已選 {{count}} 個","Selected {{selected}} / {{total}}":"已選 {{selected}} / {{total}}","selected channel(s). Leave empty to remove tag.":"選定的渠道。留空以移除標籤。","Selected conflicts were overwritten successfully.":"選中的衝突已成功覆蓋。","Selected names are":"選取的名稱是","Selected nodes":"已選節點","Selected when creating a token and used as the default billing group for API calls.":"建立令牌時選擇,用作 API 呼叫的預設收費分組。","Selecting a plugin fills its declared models and default base URL.":"選擇外掛後將自動填入其宣告的模型和預設 Base URL。","Self-Use Mode":"自用模式","Send":"發送","Send a request":"發送請求","Send chat completions to the OpenAI-compatible /v1/chat/completions instead of the native Ollama /api/chat":"將對話補全請求傳送至 OpenAI 相容的 /v1/chat/completions,而不是 Ollama 原生的 /api/chat","Send code":"發送驗證碼","Send reset email":"發送重設郵件","Send the original request body to upstream without conversion. Only available for native forwarding routes.":"將原始請求體不經轉換直接傳送到上游。僅原生轉發路由可用。","Sending...":"發送中...","Sensitive channel settings are read-only for your account.":"你的賬號只能查看敏感渠道設定。","Sensitive Words":"敏感詞","Sent the API key to FluentRead.":"API 金鑰已發送至 FluentRead。","Separate image/audio prices are enabled.":"已啟用圖像/音頻單獨定價。","Separate multiple rules with English commas. For regex patterns that need commas, switch to JSON Text.":"多個規則用英文逗號分隔。正則裡需要逗號時,請切換到 JSON 文字。","Separate several values with commas":"多個值以逗號分隔","Serve multiple users or teams with billing and quota control.":"為多個用戶或團隊提供收費和配額管理服務。","Server Address":"伺服器地址","Server IP":"伺服器 IP","Server Log Management":"伺服器日誌管理","Server logging is not enabled (log directory not configured)":"伺服器日誌功能未啟用(未設定日誌目錄)","Server Token":"伺服器令牌","Service account JSON file(s)":"服務賬號 JSON 檔案","Session":"對話","Session behavior":"工作階段保持","Session behavior prevents switching channels":"工作階段保持設定禁止切換渠道","Session defaults":"工作階段預設","Session expired!":"對話已過期!","Session expired?":"對話已過期?","Session rule":"工作階段規則","Session rule matched":"命中工作階段規則","Session rules":"工作階段規則","Session rules table":"工作階段規則表格","Session signed out":"已登出此工作階段","Sessions & Access":"工作階段與存取","Sign in to bind an account":"綁定操作需要登入","Sessions and retries":"工作階段與重試","Set":"設定","Set a discount rate for a specific recharge amount threshold.":"為特定的儲值金額閾值設定折扣率。","Set a secure password (min. 8 characters)":"設定安全密碼(最少 8 個字元)","Set a tag for":"設定標籤為","Set API key access restrictions":"設定令牌的存取限制","Set API key basic information":"設定令牌的基本資訊","Set default ranges and charts for model analytics.":"設定模型分析的預設時間範圍和圖表。","Set Field":"設定欄位","Set filters to customize your dashboard statistics and charts.":"設定篩選器以自訂您的儀表板統計數據和圖表。","Set filters to narrow down your log search results.":"設定篩選器以縮小日誌搜尋結果範圍。","Set Header":"設請求頭","Set Password":"設定密碼","Set prices for each set of conditions below. Cost = usage × unit price + additional charge. Token prices are per million tokens.":"為下方不同條件分別填寫價格。費用 = 用量 × 單價 + 加收費用;Token 單價按每百萬 Token 填寫。","Set prices for each set of conditions below. Cost = usage × unit price + fixed fee. Token prices are per million tokens.":"為下方不同條件分別填寫價格。費用 = 用量 × 單價 + 固定費用;Token 單價按每百萬 Token 填寫。","Set Project to io.cloud when creating/selecting key":"建立/選擇金鑰時將項目設定為 io.cloud","Set quota amount and limits":"設定令牌可用額度和數量","Set Request Header":"設定請求頭","Set runtime request header: override entire value, or manipulate comma-separated tokens":"設定運行期請求頭:可直接覆蓋整條值,也可對逗號分隔的 token 做處理","Set separate prices for cache reads and writes.":"為緩存讀取和寫入設定單獨價格。","Set separately for this provider":"為此服務方單獨設定","Set Tag":"設定標籤","Set tag for selected channels":"為選定的渠道設定標籤","Set the language used across the interface":"設定介面顯示語言","Set the user\'s role (cannot be Root)":"設定用戶角色(不能是 Root)","Set the website where users will use their Passkeys.":"請填寫使用者使用通行密鑰的網站網域。","Set these values in the provider application before enabling login.":"啟用登入前,請先在提供商應用程式中設定這些值。","Set up model redirects":"設定模型重新導向","Set up redirect":"設定重新導向","Setting Key":"設定項","Setting saved":"設定已儲存","Size {{size}}":"大小 {{size}}","Setting up 2FA...":"正在設定 2FA...","Setting updated successfully":"設定更新成功","Settings":"設定","Settings & Preferences":"設定與偏好","Settings updated successfully":"設定更新成功","Setup expired. Scan the new QR code and save the new backup codes.":"設定已過期,請掃描新的 QR 碼並儲存新的備用碼。","Setup guide":"設定引導","Setup guide complete":"設定引導已完成","Setup guide is collapsed. Expand it anytime.":"設定引導已收起,可隨時展開。","Setup Instructions":"設定說明","Setup progress: {{completed}}/{{total}}":"設定進度:{{completed}}/{{total}}","Setup Two-Factor Authentication":"設定雙重身份驗證","Setup: three groups and one override matrix cell.":"設定:三個分組和一個覆蓋矩陣單元格。","Setup: three groups and one override rule.":"設定:三個分組和一條覆蓋規則。","SGLang":"SGLang","SMTP server is not configured":"SMTP 伺服器未設定","SGLang API key, or EMPTY if authentication is disabled":"SGLang API 金鑰,未啟用驗證時填 EMPTY","SGLang channel base URL cannot be empty":"SGLang 渠道的服務位址不可為空","SGLang server address, without /v1":"SGLang 服務位址,不含 /v1","SGLang status":"SGLang 狀態","Some files could not be deleted ({{failed}}/{{total}})":"部分檔案刪除失敗({{failed}}/{{total}})","Share":"佔比","Share your link and earn rewards":"分享您的連結並賺取獎勵","Shared configuration for all payment gateways":"所有支付閘道的共享設定","Shorten":"縮詞","Show":"顯示","Show All":"顯示全部","Show all providers including unbound":"顯示所有供應商(包括未連結)","Show all tags":"檢視所有標籤","Show in model catalog":"在模型目錄顯示","Show in model square":"在模型廣場顯示","Show only bound providers":"僅顯示已連結的供應商","Show or hide flow columns":"顯示或隱藏分流列","Show preview":"顯示預覽","Show prices in currency instead of quota.":"以貨幣而非配額顯示價格。","Show selected models in model square":"在模型廣場顯示所選模型","Show sensitive data":"顯示敏感數據","Show setup guide":"顯示設定引導","Show source":"顯示源碼","Show token usage statistics in the UI":"在用戶介面中顯示令牌使用統計資訊","Showcase core capabilities with demo credentials and limited access.":"使用演示憑證和有限存取權限展示核心功能。","Showing":"顯示第","Showing {{shown}} of {{total}} mappings":"顯示 {{shown}} / {{total}} 筆映射","showing •":"顯示 •","Showing the last successfully checked release.":"目前顯示上次成功檢查的發行資訊。","Shown":"顯示","Shown {{count}} models in model square":"已在模型廣場顯示 {{count}} 個模型","Sidebar":"側邊欄","Sidebar collapsed by default for new users":"預設情況下為新用戶摺疊側邊欄","Sidebar modules":"側邊欄模組","Sidebar Personal Settings":"左側邊欄個人設定","Sign in":"登入","Sign In":"登入","Sign in now":"立即登入","Sign in required":"需要登入","Sign in with Passkey":"使用 Passkey 登入","Sign out":"登出","Sign out other sessions":"登出其他工作階段","Sign out other sessions?":"登出其他工作階段?","Sign out others":"登出其他工作階段","Sign out this device?":"登出目前裝置?","Sign up":"註冊","Signed in":"已登入","Signed in successfully!":"登入成功!","Signed in via WeChat":"透過微信登入","Signed in with Passkey":"使用 Passkey 登入","Signed out":"已登出","Significant outages detected":"偵測到較為嚴重的故障","Signing you in with {{provider}}":"正在使用 {{provider}} 登入","SiliconFlow":"SiliconFlow","Simple":"簡潔","Simple mode only returns message; status code and error type use system defaults.":"簡潔模式僅回傳 message;狀態碼和錯誤類型將使用系統預設值。","Simple mode: prune objects by type, e.g. redacted_thinking.":"簡潔模式:按 type 全量清理物件,例如 redacted_thinking。","Simulate a request including request rules and excluding group multipliers. Empty objects represent an empty request.":"模擬費用包含請求規則,不含群組倍率。空物件表示沒有對應欄位的請求。","Simulated request body":"模擬請求主體","Simulated request cost":"模擬請求費用","Simulated request headers":"模擬請求標頭","Sort by priority to drag channels":"依優先級排序後可拖曳通道","Sort channels by":"通道排序依據","State parameter is empty or mismatched":"state 參數為空或不相符","Simulation context is missing.":"缺少模擬所需的內容。","Simulation time":"模擬時間","Since previous sample":"自上次取樣以來","Single .js file, up to 8 MiB. Its source is shown below before upload.":"單一 .js 檔案,最大 8 MiB。上傳前會在下方顯示其原始碼。","Single Key":"單金鑰","Site & Branding":"站點與品牌","Site currency ({{currency}})":"站點貨幣({{currency}})","Site Key":"站點金鑰","Site URL":"網站地址","Size:":"大小:","sk_xxx or rk_xxx":"sk_xxx 或 rk_xxx","Skip async task polling delay":"跳過異步任務輪詢延遲","Skip pre-consumption when the wallet balance and limited API key balance both exceed this amount. Set to 0 to always pre-consume. Subscriptions and asynchronous tasks always reserve quota.":"錢包餘額和有限額的 API 權杖餘額都超過此金額時,略過預扣。設為 0 則一律預扣。訂閱和非同步任務一律預留額度。","Skip retry on failure":"失敗後不重試","Skip SMTP TLS certificate verification":"跳過 SMTP TLS 證書驗證","Skip to Main":"跳到主內容","Skip Upstream TLS Verification":"忽略上游證書驗證","Slug":"標識符","Slug can only contain letters, numbers, hyphens, and underscores":"Slug 只能包含字母、數字、連字符和底線","Slug is required":"Slug 不能為空","Slug must be less than 100 characters":"Slug 不能超過 100 個字元","Smallest USD amount users can recharge (Epay)":"用戶可以儲值的最小美元金額 (Epay)","SMTP encryption":"SMTP 加密方式","SMTP Host":"SMTP 主機","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"軟錯誤","Some channels failed: {{errorMsg}}":"部分渠道失敗:{{errorMsg}}","Some matching models are hidden or have no available channel.":"部分符合規則的模型已隱藏或暫無可用渠道。","Some plugin information could not be read":"部分外掛資訊無法讀取","Something went wrong!":"出現錯誤!","Sonnet Model":"Sonnet 模型","Sora":"Sora","Sort":"排序","Sort by ID":"使用 ID 排序","Sort Order":"排序","Sort priority":"排序優先級","Source":"來源","Source diff":"原始碼差异","Source Endpoint":"來源端點","Source Field":"來源欄位","Source Header":"來源請求頭","Source ID":"來源 ID","Source name":"來源名稱","Source vendors":"來源供應商","Source vendors will be deleted after their model assignments are moved. The target vendor’s details are preserved.":"模型歸屬轉移後將刪除來源供應商。目標供應商的資料維持原值。","Source: global settings. Changes take effect after saving.":"來源:全域設定。修改後儲存生效。","sources":"來源","Space-separated OAuth scopes":"以空格分隔的OAuth作用域","Spark model version, e.g., v2.1 (version number in API URL)":"Spark 模型版本,例如 v2.1(API URL 中的版本號)","Spec":"規格","Special billing expression":"特殊收費表達式","Stripe is not configured or key is invalid":"Stripe 未設定或密鑰無效","Special group":"特殊分組","Stripe webhook is not configured":"Stripe Webhook 未設定","Special ratio rules":"特殊倍率規則","StripePriceId is not configured for this plan":"該訂閱方案未設定 StripePriceId","Special ratios override the token group ratio for specific user group and token group combinations.":"特殊倍率會針對特定用戶分組和令牌分組組合覆蓋令牌分組倍率。","Special usable group rules":"特殊可用分組規則","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"特殊可用分組規則可以為特定用戶分組新增、移除或追加可選令牌分組。","Special usable group rules make extra token groups visible to, or hide default ones from, users of a specific user group.":"特殊可用分組規則可以讓特定用戶分組的用戶額外看到某些令牌分組,或對其屏蔽預設可選的令牌分組。","Special visibility rules":"特殊可見性規則","Specified time":"指定時間","Speculative decoding acceptance rate":"推測解碼接受率","Spend limited":"消費受限","Spread HTTP/2 traffic across multiple reusable connections to the same upstream origin (1-8).":"將 HTTP/2 流量分散到同一上游來源的多條可重用連線(1-8)。","SQLite stores all data in a single file. Make sure that file is persisted when running in containers.":"SQLite 將所有數據儲存在單個檔案中。在容器中執行時請確保該檔案已持久化。","SSL/TLS":"SSL/TLS","SSRF Protection":"SSRF 保護","stale":"失聯","Standard":"標準","Standard price":"標準價格","Standard protocol interfaces":"標準協定介面","Start":"開始","Start ≤ end: within the day; start > end: across midnight":"開始 ≤ 結束為當日區間,開始 > 結束為跨午夜區間","Subscription plan is not enabled":"訂閱方案未啟用","Subscription plan title cannot be empty":"訂閱方案標題不能為空","Start a conversation to see messages here":"開始對話以在此處查看訊息","Start a playground chat":"開始一場遊樂場對話","Start again":"重新開始","Subscription purchased with balance, plan: {{plan}}, payment amount: {{amount}}, quota deducted: {{quota}}":"使用餘額購買訂閱成功,方案:{{plan}},支付金額:{{amount}},扣除額度:{{quota}}","Subscription purchased, plan: {{plan}}, payment amount: {{amount}}, payment method: {{method}}":"訂閱購買成功,方案:{{plan}},支付金額:{{amount}},支付方式:{{method}}","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"無需註冊公司即可開始全球收款。面向獨立開發者、OPC 個體經營者和初創團隊構建。Waffo Pancake 作為你的登記商戶(Merchant of Record),承擔全球收款相關的合規負擔,包括消費稅、開票、訂閱管理、退款和拒付。個人開發者可以快速上線,專注產品而不是合規事務。幾分鐘即可完成入駐,從一個提示詞到完整整合。","Start for free with generous limits. No credit card required.":"免費開始使用,額度充足,無需連結信用卡。","Start SGLang with --enable-metrics to expose Prometheus metrics.":"啟動 SGLang 時加入 --enable-metrics 以啟用 Prometheus 指標。","Start Time":"起始時間","Start weekday":"起始星期","Started":"啟動時間","Started two-factor authentication setup":"開始設定兩步驟驗證","STARTTLS":"STARTTLS","State changed":"狀態已變更","State unchanged: {{status}}":"狀態未變更:{{status}}","Static page describing the platform.":"描述平台的靜態頁面。","Statistical count":"統計計數","Statistical quota":"統計配額","Statistical tokens":"統計 Token 數","Statistics reset":"統計已重設","Status":"狀態","Status & Sync":"狀態與同步","Status change":"狀態變更","Status Code":"狀態碼","Status Code Mapping":"狀態碼映射","Status code mapping must use valid HTTP status codes":"狀態碼映射必須使用有效的 HTTP 狀態碼","Status is outside the retry rules":"狀態碼未命中重試規則","Status matches the retry rules":"狀態碼命中重試規則","Status Page Slug":"狀態頁面 Slug","Status short":"狀態","Status:":"狀態:","Stay":"留下來","Stay tuned though!":"敬請期待!","Steer behaviour with a system instruction":"透過系統指令引導模型行為","Step":"步驟","Step {{current}} of {{total}}: {{label}}":"第 {{current}} 步,共 {{total}} 步:{{label}}","Still pending addition":"仍待新增","Still pending removal":"仍待移除","Stop":"停止","Stop Retry":"停止重試","Stop testing":"停止測試","Stopping batch test...":"正在停止大量測試...","Stopping...":"正在停止...","Storage":"儲存","Store":"店鋪","Store + product created":"店鋪和產品已建立","Store ID":"商店 ID","Store ID is required":"商店 ID 為必填項","Stored configuration with effective defaults":"已儲存的設定及生效預設值","Stored value is not echoed back for security":"出於安全考慮,已儲存的值不會回顯","stream":"流","Stream":"流","Stream did not complete successfully":"串流輸出未成功完成","Stream Mode":"串流模式","Stream Status":"流狀態","Stream tokens incrementally as they are generated":"在生成過程中按 token 逐步串流返回","Stream tokens via Server-Sent Events":"透過 SSE 串流返回 token","Streaming":"串流輸出","String Replace":"字串替換","Strip {{affix}}":"移除 {{affix}}","Strip prefix":"移除前綴","Strip suffix":"移除後綴","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Stripe API 金鑰(除非更新,否則留空)","Stripe Dashboard":"Stripe 控制面板","Stripe Gateway":"Stripe 閘道","Stripe product price ID":"Stripe 產品價格 ID","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem 需在第三方平台建立商品並填入 ID","Structured output":"結構化輸出","Submit":"提交","Submit directly":"直接提交","Submit request":"提交請求","Submit Result":"提交結果","Submit Time":"提交時間","Submitted":"已提交","Submitting":"提交中","Submitting...":"提交中...","Submodel":"Submodel","Subscribe Now":"立即訂閱","Subscribe to a plan for model access":"訂閱套餐以獲取模型存取權限","Subscription":"訂閱","Subscription Billing":"訂閱收費","Subscription First":"優先訂閱","Subscription Management":"訂閱管理","Subscription Only":"僅用訂閱","System error: {{error}}":"系統錯誤: {{error}}","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"管理員在支付閘道設定中確認合規條款之前,訂閱套餐的建立和修改會被鎖定。","Subscription Plans":"訂閱套餐","System initialized successfully":"系統初始化成功","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"訂閱套餐不會使用已連結的產品。每個套餐都有獨立的 Pancake 產品,可在訂閱管理中設定,或透過其中的「+ 建立」按鈕自動生成。","Subscription purchased successfully":"訂閱購買成功","Subscriptions":"訂閱","Subtract":"減少","succeeded":"已成功","Success":"成功","Success rate":"成功率","Success rate excludes business rejections and includes the current partial hour.":"成功率排除業務拒絕,統計包含目前尚未結束的小時。","Successful scheduled or bulk checks can restore automatically disabled channels. Manually disabled channels stay disabled.":"定時或批次檢查成功後,可恢復被自動停用的渠道;人工停用的渠道保持停用。","Successfully created {{count}} API Key(s)":"成功建立了 {{count}} 個 API 金鑰","Successfully created {{count}} redemption codes":"成功建立了 {{count}} 個兌換碼","Successfully deleted {{count}} API key(s)":"成功刪除了 {{count}} 個 API 金鑰","Successfully deleted {{count}} invalid redemption codes":"已成功刪除 {{count}} 個無效兌換碼","Successfully deleted {{count}} model(s)":"成功刪除 {{count}} 個模型","Successfully deleted {{count}} redemption codes":"成功刪除 {{count}} 個兌換碼","Successfully disabled {{count}} model(s)":"成功停用 {{count}} 個模型","Successfully enabled {{count}} model(s)":"成功啟用 {{count}} 個模型","Suffix":"後綴","Suffix Match":"後綴匹配","Suggested rules":"建議規則","Summarize text":"總結文字","SunoAPI":"SunoAPI","Sunset Glow":"日落霞光","Super admin":"超級管理員","Super Admin":"超級管理員","Tag cannot be empty":"標籤不能為空","Super Large":"超大","Support for high concurrency with automatic load balancing":"支援高並發和自動負載平衡","Supported Applications":"常用套用支援","Supported endpoints":"支援的端點","Supported Imagine Models":"支援的 Imagine 模型","Supported interfaces":"支援的介面","Supported modalities":"支援的模態","Supported models":"支援的模型","Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.":"支援的操作符:eq、ne、gt、gte、lt、lte、in、not_in、contains、not_contains、exists、not_exists。留空則允許所有用戶。","Supported parameters":"支援的參數","Supported variables":"支援變數","Supports `-thinking`, `-thinking-":"支援 `-thinking`、`-thinking-`","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"支援 HTML 標記或 iframe 嵌入。直接輸入 HTML 代碼,或提供完整的 URL 以將其自動嵌入為 iframe。","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"支援一鍵設定並完美適配 NewAPI 多協定設定","Supports plugin extensions":"支援外掛擴充","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"支援 PNG、JPG、SVG 或 WebP,建議尺寸不超過 128×128。","Surprise me":"給我驚喜","Sustained tokens per second":"持續每秒 Token 數","Swap Face":"換臉","Switch affinity on success":"成功後切換親和","Switch to JSON":"切換到 JSON","Switch to Visual":"切換到可視化","Switch to visual editor":"切換至視覺化編輯","Switch to visual mode to add rules or apply templates.":"切換至視覺化模式後,可新增規則或套用範本。","Switch to visual pricing?":"切換至視覺化定價?","Switching regenerates the expression from the price table and replaces its original formatting and tier names. Changes apply only after saving.":"切換後將根據價格表重新產生運算式,取代原始寫法和級距名稱。變更將在儲存後生效。","Sync":"同步","Sync Endpoint":"同步端點","Sync Endpoints":"同步端點","Sync Fields":"欄位同步","Sync from the public upstream metadata repository.":"從公共上游元數據倉庫同步。","Sync metadata":"同步資料","Sync missing metadata":"同步缺少的資料","Sync model metadata":"同步模型資料","Sync model pricing":"同步模型定價","Sync models":"同步模型","Sync Now":"立即同步","Task timed out":"任務逾時","Task timed out (a task left by the old system is not refunded; contact the administrator)":"任務逾時(舊系統遺留任務,不進行退款,請聯絡管理員)","Sync policy":"同步策略","Sync pricing":"同步價格","Sync results":"同步結果","Sync scope":"同步範圍","Sync steps":"同步步驟","Sync this model with official upstream":"將此模型與官方上游同步","Sync Upstream":"同步上游","Sync Upstream Models":"同步上游模型","Synced upstream models":"同步上游模型","Synchronize models and vendors from an upstream source":"從上游源同步模型和供應商","Synchronous":"同步執行","Telegram ID is empty!":"Telegram ID 為空!","Syncing prices, please wait...":"正在同步價格,請稍候...","Syncing...":"同步中...","System":"系統","System Administration":"系統管理","System Announcements":"系統公告","System Behavior":"系統行為","System constraint":"系統限制","System data statistics":"系統數據統計","System default":"系統預設","System Info":"系統資訊","System Information":"系統資訊","System initialized successfully! Redirecting…":"系統初始化成功!正在重新導向…","System logo":"系統徽標","System maintenance":"系統維護","System Memory":"系統記憶體","System Memory Stats":"系統記憶體統計","System Name":"系統名稱","System name is required":"系統名稱為必填項","System Notice":"系統公告","System Performance Monitoring":"系統效能監控","System prompt":"系統提示詞","System Prompt":"系統提示詞","System Prompt Concatenation":"系統提示詞連接","System Prompt Override":"系統提示覆蓋","System retry exclusion":"系統禁止重試的情況","System settings":"系統設定","System Settings":"系統設定","System setup wizard":"系統設定精靈","System task records":"系統任務記錄","System Tasks":"系統任務","System updates":"系統更新","System updates, current version: {{version}}":"系統更新,目前版本:{{version}}","System Version":"系統版本","Table view":"表格檢視","Tag":"標籤","Tag Aggregate":"標籤聚合","Tag Mode":"標籤模式","Tag Name":"標籤名稱","Tag set successfully":"標籤設定成功","Tag updated successfully":"標籤更新成功","The access token lacks the required permission: {{scope}}":"存取權杖缺少所需權限:{{scope}}","Tag:":"標籤:","Tags":"標籤","Take photo":"拍照","Take screenshot":"截圖","Target":"操作對象","Target Endpoint":"目標端點","Target Field":"目標欄位","Target Field Path":"目標欄位路徑","Target group":"目標分組","Target Header":"目標請求頭","Target not recorded":"未記錄目標","Target Path (optional)":"目標路徑(可選)","Target User":"目標用戶","Target user not found":"目標使用者不存在","Target username":"目標使用者名稱","Target vendor":"目標供應商","The Classic frontend has been removed. The theme can only be set to default":"Classic 前端已移除,主題只能設定為 default","Task":"任務","Task billing":"任務計費","The current sign-in method does not support security verification":"目前的認證方式不支援安全驗證","Task Details":"任務詳情","Task failed":"任務失敗","Task History":"歷史任務","Task ID":"任務 ID","Task ID:":"任務 ID:","Task logs":"任務日誌","Task Logs":"任務日誌","Task Plugin":"任務外掛","Task plugin *":"任務外掛 *","Task plugin setting updated":"任務外掛設定已更新","Task plugins":"任務外掛","Task Plugins":"任务外掛","The longest log time range must be at least 1 day":"日誌最長時間範圍至少為 1 天","The longest time range a user can view at once in the logs and on the dashboard, and the longest range any export can cover.":"使用者在日誌和數據看板中一次最多能查看的時間範圍,也是每次匯出的最長時間範圍。","Task pricing":"任務定價","Task pricing must be converted manually using the task usage schema.":"任務定價需根據任務用量定義手動轉換。","Task pricing not configured":"尚未設定任務定價","Task usage data is required to estimate this expression. Check the model\'s task plugin configuration.":"此運算式需要任務用量資料才能估算費用,請檢查模型的任務外掛設定。","Task usage metadata is unavailable. Pricing details cannot be displayed.":"缺少任務用量欄位定義,暫時無法顯示價格明細。","Task usage prices are USD per declared unit. They are not token prices and are not divided by one million.":"任務用量價格以每個已宣告單位的美元金額計價,不是 token 價格,也不會除以一百萬。","Task usage prices are USD per declared unit. Token fields use dollars per 1M tokens; the editor writes / 1000000 into the expression. Other units are not divided by one million.":"任務用量價格依宣告單位以美元計。token 欄位依每 100 萬 token 的美元價輸入,編輯器會在表達式中寫入 / 1000000。其他單位不會除以一百萬。","Tasks currently pending or running.":"目前等待中或執行中的任務。","Team Collaboration":"團隊協作","The ratio config API is not enabled":"倍率設定介面未啟用","Technical Support":"技術支援","Telegram":"Telegram","Telegram authorization failed. Please try again.":"Telegram 授權失敗,請重試。","The search pattern can contain at most 2 % wildcards":"搜尋模式中最多允許包含 2 個 % 萬用字元","The search pattern cannot contain consecutive % wildcards":"搜尋模式中不允許包含連續的 % 萬用字元","Telegram binding failed. Please try again.":"Telegram 綁定失敗,請再試一次。","Telegram binding is disabled.":"Telegram 綁定已停用。","Telegram login has changed. Reload the page and start Telegram OAuth again.":"Telegram 登入方式已更新,請重新載入頁面並重新發起 Telegram OAuth 登入。","Telegram Login Widget":"Telegram 登入小部件","Telegram OAuth Client ID from BotFather":"BotFather 提供的 Telegram OAuth Client ID","Telegram OAuth Client Secret from BotFather":"BotFather 提供的 Telegram OAuth Client Secret","Telegram OAuth is not configured or enabled. Please contact your administrator.":"Telegram OAuth 尚未設定或啟用,請聯絡管理員。","Temperature":"溫度","Template":"模板","The system is already initialized":"系統已完成初始化","Template variables:":"模板變數:","Templates":"模板","Templates appended":"模板已追加","The time range cannot exceed {{days}} days":"時間跨度不能超過 {{days}} 天","Tencent":"騰訊","Termination requested":"終止請求","Test":"測試","Test {{count}} matching models":"測試 {{count}} 個匹配模型","Test {{count}} selected":"測試 {{count}} 個已選擇項","Test a model with a starter prompt, or write your own request below.":"使用入門提示詞測試模型,或在下方編寫自己的請求。","Test all {{count}} models":"測試全部 {{count}} 個模型","Test All Channels":"測試所有渠道","Test Channel Connection":"測試渠道連接","Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.":"測試渠道、重新整理餘額,並啟用/停用單個、大量或帶標籤的渠道。","Test Connection":"測試連接","Test connectivity for:":"測試連接性:","Test failed":"測試失敗","Test interval (minutes)":"測試間隔 (分鐘)","Test Latency":"測試延遲","Test Mode":"測試模式","Test Model":"測試模型","Test models and prompts from the browser":"在瀏覽器中測試模型和提示詞","Test selected models":"測試所選模型","Testing all enabled channels started. Please refresh to see results.":"測試所有已啟用的渠道已開始。請重新整理以查看結果。","Testing...":"測試中...","Text":"文字","Text description of the desired image":"想要生成圖像的文字描述","Text description of the desired video":"想要生成影片的文字描述","Text Input":"文字輸入","Text or array of texts to embed":"需要向量化的文字或文字陣列","Text Output":"文字輸出","Text to Video":"文生影片","Text-only requests":"純文字請求","The access token lacks the required permission":"存取令牌缺少所需權限","The action details are invalid.":"操作資訊無效。","The admin configured three groups and one special ratio rule:":"管理員設定了三個分組和一條特殊倍率規則:","The admin wants vip users to pay even less when they use premium. That needs an override rule: in the override matrix, set the cell at row vip, column premium to 0.3.":"管理員希望 vip 用戶使用 premium 時價格更低。這就需要一條覆蓋規則:在覆蓋矩陣中,把「行 vip、列 premium」的單元格填成 0.3。","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"管理員用戶已初始化。您可以保留現有憑證並繼續下一步。","The administrator configured an external link for this document.":"管理員為此文檔設定了外部連結。","The administrator has not configured a privacy policy yet.":"管理員尚未設定私隱政策。","The administrator has not configured a user agreement yet.":"管理員尚未設定用戶協議。","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"管理員尚未設定任何關於內容。您可以在設定頁面中進行設定,支援 HTML 或 URL。","The API key used for the requests":"請求所使用的 API 金鑰","The authenticator code is incorrect.":"驗證器驗證碼錯誤。","The binding will complete automatically after authorization":"授權後連結將自動完成","This API is deprecated":"該介面已棄用","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"已連結產品用於錢包儲值:當用戶輸入任意金額時,new-api 會基於這個單一 Pancake 產品發起結帳,並按對話覆蓋價格,無需預先建立 $1 / $5 / $10 的 SKU。","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"已連結店鋪是 new-api 從此管理端建立的所有 Pancake 產品的父容器,包括錢包儲值產品和訂閱套餐產品。一個店鋪通常足夠;只有在確實運營多個 Pancake 目錄時才需要連結不同店鋪。","The button fills in this website and keeps any existing website addresses. Save changes on the settings page to apply.":"點擊按鈕會填入目前網站,並保留既有的網站位址。回到設定頁儲存後生效。","The change succeeded, but the notification email could not be sent.":"變更已完成,但通知郵件傳送失敗。","The changelog could not be fetched or parsed. Please try again.":"無法取得或解析更新日誌,請重試。","The converted price must be a finite, non-negative number.":"換算後的價格必須是有限的非負數。","The current setting could not be loaded. You can still enter the website domain yourself.":"暫時無法讀取目前設定,你仍可以手動填寫網站網域。","The deployment node that handled the requests":"處理請求的部署節點","This channel is not in multi-key mode":"該渠道不是多金鑰模式","The downloaded source does not match the sha256 declared in the index. Do not install it.":"下載到的原始碼與索引宣告的 sha256 不一致,請勿安裝。","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"用於 Passkey 註冊的有效域。必須與目前域匹配或為其父域。","The entered text does not match the required text.":"輸入文字與要求文字不匹配。","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"環境(測試或生產)由你在此貼上的金鑰決定。整合期間使用測試金鑰,上線時再切換為生產金鑰。","The exact model identifier as used in API requests.":"API 請求中使用的確切模型標識符。","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"以下模型存在收費類型衝突(固定價格 vs 比例收費)。確認以繼續更改。","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"模型重新導向裡的下列模型尚未新增到「模型」列表,呼叫時會因為缺少可用模型而失敗:","The gateway rejected this plugin":"閘道拒絕了該外掛","The index could not be fetched or parsed: {{message}}. The host may block cross-origin requests.":"索引無法取得或解析:{{message}}。該主機可能禁止跨來源請求。","The legacy token stops working on {{date}}. Create a new token to replace it.":"舊版令牌將於 {{date}} 停用,請建立新令牌替換。","The login session that started this Telegram binding is no longer valid.":"發起此 Telegram 綁定的登入工作階段已失效。","The mapped upstream model(s)":"映射的上游模型","The model routing configuration could not be verified.":"無法驗證模型路由設定。","The model that was requested":"被請求的模型","The model you\'re looking for doesn\'t exist.":"您查找的模型不存在。","The model-level expression cannot be evaluated by: {{plugins}}":"以下服務方無法計算模型層級運算式:{{plugins}}","The name displayed across the application":"在整個套用程式中顯示的名稱","The new token will only be shown once. Copy it and store it securely.":"新令牌僅顯示一次。請複製並妥善保存。","The OAuth account does not match the account linked to your profile.":"此 OAuth 帳號與已綁定的帳號不一致。","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"伺服器的公開URL,用於OAuthCallback、Webhook和其他外部整合","The requested chat preset does not exist or has been removed.":"請求的聊天預設不存在或已被刪除。","The reset request stays disabled until a credit is available.":"沒有可用次數時,重置請求會保持停用。","The result was returned in the API response and was not saved as an artifact":"結果已在介面回應中返回,未保存為製品","The server returned the following result. Unselected models remain pending.":"以下為伺服器回傳的處理結果,未勾選的模型仍保留為待處理項目。","The setup wizard will use this database during initialization.":"設定精靈將在初始化過程中使用此資料庫。","The site exchange rate is invalid. Prices are shown in USD.":"站點匯率無效,價格以美元顯示。","The site is not available at the moment.":"該站點目前不可用。","The slug is appended to the URL:":"別名將附加到 URL:","The source is unavailable or this browser cannot calculate SHA-256. The gateway checks the published hash during installation.":"原始碼尚不可用,或瀏覽器無法計算 SHA-256。安裝時閘道會核對發布的校驗值。","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"同步將從選定的源獲取缺失的模型和供應商。僅在您批准衝突時才會更新現有記錄。","The system always bills in USD. Site currency makes entering and converting prices easier; amounts are converted to USD using the site exchange rate. Switching currencies does not change the actual price. Raw billing expressions always use USD.":"系統底層統一使用美元計價。選擇站點貨幣是為了方便輸入和換算,金額會按站點匯率轉換為美元。切換貨幣不會改變實際價格;原始計費表達式一律使用美元。","The system currently uses: {{domain}}":"系統目前使用:{{domain}}","The task was accepted; submission cannot be replayed":"任務已接受,無法重複提交","The Telegram authorization request is invalid or expired.":"Telegram 授權要求無效或已過期。","The telegram OAuth provider name is reserved. Ask your administrator to rename the conflicting custom provider.":"telegram 是保留的 OAuth 提供方名稱,請聯絡管理員重新命名衝突的自訂提供方。","The token group that will have a custom ratio":"將具有自訂比例的令牌分組","The token has no group, so it is billed as the user group vip, using the base ratio of vip.":"令牌未設定分組,因此按用戶分組 vip 收費,使用 vip 的基礎倍率。","The two roles of a group":"分組的兩種角色","The two-factor setup has expired or changed. Start setup again.":"兩步驗證設定已過期或變更,請重新設定。","The unique identifier for this model":"此模型的唯一標識符","This OAuth provider still has linked users and cannot be deleted. Unbind all users first.":"該 OAuth 供應商仍有使用者綁定,無法刪除。請先解除所有使用者綁定。","The unique name for this vendor":"此供應商的唯一名稱","The upstream address this plugin sends requests to. The plugin declares no default, so it must be filled in.":"外掛傳送請求的上游位址。該外掛未宣告預設位址,必須手動填寫。","The upstream channel that served the requests":"處理請求的上游渠道","The upstream key has unlimited quota. Turn on \\"Allow querying user quota\\" for this key on the upstream to see the real balance.":"上游令牌是無限額度,在上游為這個令牌開啟「允許查詢使用者額度」後才能查到真實餘額。","The upstream natively supports all three protocols; every selected route is forwarded without conversion.":"上游原生支援三種協議,所選路由均不經轉換直接轉發。","The upstream response is valid JSON, but it does not match the OpenAI credit_summary format. The channel balance was not updated.":"上游回應是有效 JSON,但不符合 OpenAI credit_summary 格式,渠道餘額未更新。","The upstream returned a model name different from both the requested and upstream models. Aliases or dated versions may also cause this; this warning alone does not prove model substitution.":"上游回傳的模型名稱與請求模型、上游請求模型皆不一致。模型別名或日期版本也可能造成差異,不能僅憑此警示認定模型遭到替換。","The URL for this chat client.":"此聊天用戶端的 URL。","The URL returned HTTP {{status}}. Check the address, or download the file and paste its source below.":"該 URL 回傳 HTTP {{status}}。請檢查網址,或下載檔案後將原始碼貼到下方。","The user group applied to the requests":"請求所套用的用戶分組","The user who made the requests":"發起請求的用戶","The vendor no longer exists. Reload the vendor list.":"供應商已不存在,請重新載入供應商清單。","Theme":"主題","Theme preset":"主題預設","Theme Settings":"主題設定","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"目前有新增和刪除兩類待處理模型,但您只勾選了其中一類。確認僅提交已勾選的部分嗎?","This rule does not have include_rule_name enabled, so its cache cannot be cleared by rule":"該規則未啟用 include_rule_name,無法依規則清空快取","There is a rule for vip billed as premium → use its ratio 0.3":"存在「vip 按 premium 收費」的規則 → 用規則裡的 0.3","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"這些模型仍然在您的勾選列表中,但上游已不再返回該名稱;僅作為 model_mapping 來源鍵而不會出現在 upstream 列表的別名已從本視圖排除,請在儲存前調整勾選。","This slug conflicts with a built-in OAuth provider":"該 Slug 與內建 OAuth 供應商衝突","This slug is already in use":"該 Slug 已被使用","These models were not returned by the upstream. Uncheck to remove them, or select them again before saving. Model mapping source aliases are excluded.":"上游未傳回這些模型。取消勾選可將其移除,儲存前仍可重新勾選。模型映射的來源別名不會顯示在此清單中。","These plugins use this channel\'s connection settings.":"這些外掛使用目前渠道的連線設定。","These toggles affect whether certain request fields are passed through to the upstream provider.":"這些開關控制某些請求欄位是否透傳到上游服務。","These values come from the source index and are shown for review only. The gateway admits the plugin based on the metadata compiled from its source.":"這些值來自來源索引,僅供審查參考。閘道的准入判定只依據從原始碼編譯出的真實中介資料。","Thinking Suffix Adapter":"思考後綴配接器","Thinking to Content":"思維到內容","Thinking...":"思考中...","Third-party":"第三方","Third-party — use at your own risk":"第三方 — 風險自負","Third-party account bindings (read-only, managed by user in profile settings)":"第三方用戶連結(唯讀,由用戶在個人資料設定中管理)","Third-party account bindings (read-only, managed by user in Security & Access)":"第三方帳戶綁定(唯讀,由使用者在「安全與存取」中管理)","This user has no active subscription to this plan":"該使用者沒有有效的此套餐訂閱","Third-party Payment Config":"第三方支付設定","This user is already a common user":"該使用者已經是一般使用者","This user is already an administrator":"該使用者已經是管理員","Third-party plugin risk":"第三方外掛风险","Third-party source risk":"第三方來源風險","Third-party-only plugins become unavailable immediately. In-flight tasks will be handled by timeout cleanup.":"純第三方外掛將立即不可用,進行中的任務將由逾時清理處理。","This action cannot be undone.":"此操作無法撤銷。","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"此操作無法撤銷。這將永久刪除您的用戶並從我們的伺服器中移除您的所有數據。","This action will permanently remove 2FA protection from your account.":"此操作將永久移除您用戶的 2FA 保護。","This announcement will be removed from the list.":"此公告將從列表中移除。","This API key has no quota limit. Requests still require available wallet or subscription quota.":"此權杖不限額,請求仍受錢包餘額或訂閱額度限制。","This API shortcut will be removed from the list.":"此 API 快捷方式將從列表中移除。","This base URL points at a private or local network host. Make sure it is an upstream you control.":"該 Base URL 指向內網或本機位址,請確認這是你可控的上游服務。","This base URL uses plain HTTP, so the channel key is sent unencrypted.":"該 Base URL 使用明文 HTTP,渠道金鑰將以未加密方式傳送。","This callback URL updates from the slug field and is the value to register with your provider.":"此回呼 URL 會依 slug 欄位即時更新,請將它註冊到你的提供商。","This changelog is not available in your language. Showing English.":"此更新日誌暫無目前語言版本,現顯示英文。","This channel has no configured models.":"該渠道沒有設定模型。","This channel is not an Ollama channel.":"該渠道不是 Ollama 渠道。","This channel serves the models of every selected plugin. The upstream New API gateway must have the same plugins installed.":"此渠道將提供所選每個插件的模型。上游 New API 閘道必須安裝相同的插件。","This channel type does not support fetching models":"此渠道類型不支援獲取模型","This channel type requires additional configuration":"此渠道類型需要填寫額外設定","This combination will be billed as free.":"此組合將免費計費。","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"此確認會解鎖支付、兌換碼、訂閱套餐和邀請獎勵功能。請仔細閱讀相關聲明。","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"此處僅控制模型請求速率限制。Web/API 路由限流由環境變數設定,仍可能返回 429。","This data may be unreliable, use with caution":"此數據可能不可靠,請謹慎使用","This device does not support Passkey":"此設備不支援 Passkey","This device does not support Passkey verification.":"此設備不支援 Passkey 驗證。","This domain does not match the current website. Passkeys may not work here.":"這個網域與目前網站不符,可能無法使用通行密鑰。","This email address is already in use.":"此信箱地址已被使用。","This {{provider}} account cannot be linked to an existing account automatically, please sign in or register another way and then link {{provider}} in account settings":"無法自動將該 {{provider}} 帳號關聯到現有帳號,請使用其他方式登入或註冊後,在帳號設定中綁定 {{provider}}","This {{provider}} account has already been bound":"該 {{provider}} 帳號已被綁定","This email address is not allowed by the administrator\'s email policy.":"此信箱地址不符合管理員設定的信箱規則。","This expression cannot be edited visually without losing information.":"此運算式無法在不遺失資訊的情況下轉為視覺化編輯。","This expression cannot be expanded into a price table. View the original expression below.":"此運算式暫不支援展開為價格表,可查看下方原始運算式。","This expression cannot be represented by the price table. Switching discards the entire expression, including request rules, and resets all prices to zero. Configure prices before saving.":"價格表無法表示此運算式。切換後將捨棄整個運算式(包括請求規則),並將所有價格重設為零。請重新設定價格後再儲存。","This expression cannot be represented by the price table. You can switch to visual editing by confirming that the expression will be discarded.":"價格表無法表示此運算式。確認捨棄運算式後,仍可切換至視覺化編輯。","This expression cannot be simulated in the browser.":"此運算式無法在瀏覽器中模擬。","This expression does not price each combination exactly once, so it opens as a raw expression. Sparse or custom pricing stays in this editor.":"此運算式未對每種組合恰好定價一次,因此將以原始運算式模式開啟。稀疏或自訂定價會保留在此編輯器中。","This expression exceeds the browser simulation limits.":"此運算式超出了瀏覽器模擬的限制。","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"此表達式對可視化編輯器過於複雜,請切換到表達式模式進行編輯。","This external account is already bound.":"此第三方帳戶已被綁定。","This FAQ entry will be removed from the list.":"此 FAQ 條目將從列表中移除。","This feature is experimental. Configuration format and behavior may change.":"此功能為實驗性功能。設定格式和行為可能會發生變化。","This feature requires signing in to the dashboard":"此功能需要登入面板後使用","This field does not support wildcards or regular expressions.":"這裡不支援萬用字元或正則表達式。","This historical record predates audit-info tracking and cannot be backfilled. The current instance already records server IP, callback IP, payment method, and system version for new top-ups going forward.":"該條歷史記錄缺少審計欄位。目前版本已支援記錄伺服器 IP、Callback IP、支付方式與系統版本等審計資訊;這些欄位僅會寫入後續新產生的記錄,歷史記錄無法自動補齊。","This identifier is sent to the payment backend when creating an order. Use alipay for Alipay, wxpay for WeChat Pay, stripe for Stripe. Custom values must be supported by your payment provider.":"建立訂單時會把這個標識提交給支付後端。支付寶填 alipay,微信填 wxpay,Stripe 填 stripe。自訂值必須是支付服務支援的標識。","This instance is using an automatic hostname. Set NODE_NAME to a stable unique value for multi-instance management.":"該實例正在使用自動主機名稱。請設定穩定且唯一的 NODE_NAME,以便進行多實例管理。","This is a task model billed by usage (e.g. seconds, resolution). Prices entered here act as a per-call base rate, not per-token prices.":"這是按用量(例如秒數、解析度)計費的任務模型。此處輸入的價格會作為每次呼叫的基礎費率,而不是按 token 計價。","This list does not include the current website. Add {{origin}} if users sign in here.":"清單中還沒有目前網站。如果使用者在這裡登入,請新增 {{origin}}。","This may cause cache failures.":"這可能導致緩存故障。","This may take a few moments while we validate the request and update your session.":"這可能需要一些時間,因為我們正在驗證請求並更新您的對話。","This model already uses an expression.":"此模型已使用計費運算式。","This model has both fixed price and ratio billing conflicts":"此模型同時存在固定價格和比例收費衝突","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"該模型同時存在固定價格和比例設定。儲存目前模式會重寫衝突欄位。","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"該模型同時存在固定價格和按 token 價格設定。儲存目前模式會重寫衝突欄位。","This model has provider-specific billing and must be converted manually.":"此模型使用供應商專用計費邏輯,需手動轉換。","This model is billed by usage, but the administrator has not configured its pricing yet.":"此模型按用量計費,但管理員尚未設定價格。","This model is not available in any group, or no group pricing information is configured.":"此模型在任何分組中均不可用,或未設定分組定價資訊。","This month":"本月獲得","This OpenRouter Claude price derives cache-write usage from upstream cost and must be converted manually.":"此 OpenRouter Claude 定價根據上游費用反推快取寫入用量,需要手動轉換。","This operation is only supported for vLLM channels":"此操作僅支援 vLLM 管道","This operation is only supported for vLLM or SGLang channels":"此操作僅支援 vLLM 或 SGLang 渠道","This page has not been created yet.":"此頁面尚未建立。","This Passkey domain is not available on this website. Use its original website or another verification method.":"此通行金鑰網域無法在目前網站使用。請前往原網站或選擇其他驗證方式。","This plan does not allow balance redemption":"該套餐不允許使用餘額兌換","This plugin has no factory fallback. Deleting or disabling it makes this platform unavailable.":"此外掛没有內建回落版本,刪除或禁用后该平台将不可用。","This plugin path does not resolve within the source repository.":"該外掛路徑並未指向來源儲存庫內的位置。","This preview reads static plugin declarations. The gateway validates the plugin during installation.":"此預覽讀取外掛的靜態宣告,安裝時由閘道校驗外掛。","This project must be used in compliance with the":"此項目的使用必須遵守","This provider is unavailable for this model.":"此服務方目前無法提供此模型。","This removes {{count}} failed models from this channel. This action cannot be undone.":"此操作將從該渠道移除 {{count}} 個測試失敗的模型,且無法撤銷。","This route discovers upstream OpenAI models and cannot be split or matched by client model rules.":"此路由用於探索上游 OpenAI 模型,無法拆分或使用用戶端模型規則配對。","This route is used only by channel management to discover upstream models.":"此路由僅供渠道管理取得上游模型。","This route is used only by channel management to query the upstream balance.":"此路由僅供渠道管理查詢上游餘額。","This session will lose access immediately and must sign in again.":"此工作階段將立即失去存取權限,且必須重新登入。","This site currently has {{count}} models enabled":"本站目前已啟用模型,總計 {{count}} 個","This source does not publish a sha256 for this version, so the downloaded source cannot be pinned to what the source intended.":"該來源未為此版本提供 sha256,因此無法確認下載到的原始碼與該來源所發布的內容一致。","This source lists no installable task plugins.":"該來源未列出任何可安裝的任務外掛。","This Telegram account is already bound.":"此 Telegram 帳號已綁定。","This Telegram account is not linked. Sign in using another method and link it first.":"此 Telegram 帳號尚未綁定,請先透過其他方式登入並綁定。","This Telegram binding request has expired or has already been used.":"此 Telegram 綁定要求已過期或已使用。","This tier catches any request that did not match earlier tiers.":"此階梯會兜底處理未匹配前面階梯的請求。","this token group":"此令牌分組","This Uptime Kuma group will be removed from the list.":"此 Uptime Kuma 分組將從列表中移除。","This user account is disabled.":"此使用者帳號已停用。","This user account no longer exists.":"此使用者帳號已不存在。","this user group":"此用戶分組","Token count exceeds the limit. Only exact search is allowed, do not use the % wildcard":"令牌數量超過上限,僅允許精確搜尋,請勿使用 % 萬用字元","This user has no bindings":"該用戶無任何連結","This verification has already been used. Please verify again.":"此驗證憑證已使用,請重新驗證。","This verification method is currently unavailable.":"此驗證方式目前無法使用。","This verification method is not allowed for this action.":"此操作不允許使用該驗證方式。","Token has expired and cannot be enabled. Please modify the expiration time or set it to never expire":"令牌已過期,無法啟用,請先修改令牌過期時間,或者設定為永不過期","This verification method requires its dedicated verification flow.":"此驗證方式需要透過專用驗證流程完成。","This version is ignored":"已忽略此版本","Token ID or user ID is empty":"令牌 ID 或使用者 ID 為空","This version is saved but not active. Activate it to replace the current version, or activate it later from the Versions tab.":"此版本已儲存但尚未啟用。啟用後將取代目前版本,也可以稍後在外掛詳情的「版本」頁中啟用。","Token IDs cannot be empty":"令牌 ID 不能為空","This week":"本週","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"這將在現有規則列表中追加 2 條模板規則(Codex CLI 和 Claude CLI)。","This will clear custom pricing ratios and revert to upstream defaults.":"這將清除自訂定價比例並恢復到上游預設值。","This will delete all":"這將刪除所有","This will delete all used, disabled, and expired redemption codes.":"這將刪除所有已使用、已停用和已過期的兌換碼。","This will delete all channel affinity cache entries still in memory.":"這將刪除記憶體中所有的渠道親和性緩存條目。","Token name is too long":"令牌名稱過長","This will delete temporary cache files that have not been used for more than 10 minutes":"這將刪除超過 10 分鐘未使用的臨時緩存檔案","This will extend the deployment by the specified hours.":"這將透過指定的小時數延長部署。","This will permanently delete all manually and automatically disabled channels. This action cannot be undone.":"這將永久刪除所有手動停用和自動停用的渠道。此操作無法撤銷。","This will permanently delete API key":"這將永久刪除 API 金鑰","This will permanently delete redemption code":"這將永久刪除兌換碼","This will permanently delete user":"這將永久刪除用戶","This will permanently remove all log entries created before {{date}}.":"這將永久刪除 {{date}} 之前建立的所有日誌條目。","This will permanently remove log entries before the selected timestamp.":"這將永久刪除所選時間戳之前的日誌條目。","This will rebuild the channel routing index from every channel configuration, including supported models, groups, priorities, and weights. Routing may be briefly incomplete while the rebuild is running. Continue?":"這會根據所有渠道設定重建渠道路由索引,包括支援模型、分組、優先級和權重。重建期間路由可能短暫不完整。是否繼續?","Token quota is exhausted and cannot be enabled. Please modify the remaining quota or set it to unlimited":"令牌可用額度已用盡,無法啟用,請先修改令牌剩餘額度,或者設定為無限額度","This will remove {{removed}} forwarding routes and create {{created}} selected routes. Model list and balance routes will be preserved.":"將刪除 {{removed}} 條轉發路由並建立 {{created}} 條所選路由。模型列表和餘額路由會保留。","This will remove {{removed}} forwarding routes and replace them with the {{template}} template ({{created}} routes). Model list and balance routes will be preserved.":"這將移除 {{removed}} 條轉送路由,並取代為 {{template}} 範本({{created}} 條路由)。模型清單與餘額路由將保留。","This will update the priority to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"這會將標籤「{{tag}}」下所有 {{count}} 個渠道的優先級更新為 {{value}}。繼續嗎?","This will update the weight to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"這會將標籤「{{tag}}」下所有 {{count}} 個渠道的權重更新為 {{value}}。繼續嗎?","This year":"本年","Thought for {{duration}} seconds":"思考了 {{duration}} 秒","Three calls made by the same user, whose user group is vip:":"同一個用戶(用戶分組為 vip)發起的三次呼叫:","Three calls made by the same vip user. Assume the base price of one call is 10.":"同一個 vip 用戶發起三次呼叫,假設模型單次呼叫基礎價格為 10:","Three groups; the override matrix has exactly one cell filled in (highlighted).":"三個分組;覆蓋矩陣只填了一個格子(高亮顯示)。","Three steps to get started":"三步快速上手","Throughput":"吞吐量","Throughput by group":"各分組吞吐量","Throughput short":"吞吐","Throughput trend":"吞吐量趨勢","Tier":"檔位","Tier billing mode":"分支計費方式","Tier conditions":"階梯條件","Tier name":"檔位名稱","Tiered":"階梯","Tiered (billing expression)":"階梯收費(收費表達式)","Tiered price table":"分檔價格表","Tiered pricing":"階梯收費","tiers":"檔","Too many items in batch request, maximum is {{max}}":"批次請求數量過多,最多 {{max}} 筆","Time":"時間","Time between scheduled channel checks":"定時渠道檢查的執行間隔","Time functions use the timezone written in the expression.":"時間函數使用運算式中指定的時區。","Time Granularity":"時間粒度","Tool price \\"{{name}}\\" must be a finite non-negative number":"工具價格「{{name}}」必須是有限的非負數字","Tool price \\"{{name}}\\" must be a non-negative number":"工具價格「{{name}}」必須是非負數字","Time range":"時間範圍","Time remaining":"剩餘時間","Tool prices must be a JSON object":"工具價格必須是 JSON 物件","Time window for rate limiting":"速率限制的時間窗口","Time-based":"含時間條件","Time-sliced cache (Claude)":"分時緩存(Claude)","Time:":"時間:","Timeline":"時間線","times":"次","Timezone":"時區","Timing":"耗時","Tip":"提示","Tip: after configuring one model, select others in the table and use bulk copy.":"提示:設定一個模型後,可在表格中選取其他模型並使用批次複製。","to":"至","to access this resource.":"存取此資源。","To Anthropic Messages":"轉 Anthropic Messages","to confirm":"以確認","To Gemini Generate Content":"轉 Gemini Generate Content","To Lower":"轉小寫","To Lowercase":"轉小寫","Top-up amount cannot be less than {{min}}":"儲值數量不能小於 {{min}}","Top-up amount cannot exceed {{max}}":"儲值數量不能大於 {{max}}","To OpenAI Chat":"轉 OpenAI Chat","To OpenAI Responses":"轉 OpenAI Responses","to override billing when a user in one group uses a token of another group.":"當一個分組中的用戶使用另一個分組的令牌時,用於覆蓋收費。","Top-up is processing, please try again later":"儲值處理中,請稍後再試","to the Models list so users can use them before the mapping sends traffic upstream.":"到模型列表,以便用戶在映射將流量發送到上游之前可以使用它們。","Top-up order does not exist":"充值訂單不存在","Top-up quota exceeds the range the system can represent":"儲值額度超出系統可表示範圍","Top-up quota limit exceeded":"超出儲值額度上限","Top-up quota must be greater than 0":"儲值額度必須大於 0","To Upper":"轉大寫","To Uppercase":"轉大寫","Topped up {{quota}} with a redemption code, code ID {{id}}":"透過兌換碼儲值 {{quota}},兌換碼 ID {{id}}","to view this resource.":"查看此資源。","Today":"今天","Toggle columns":"切換列","Toggle navigation menu":"切換導航選單","Toggle plan":"切換計劃","Toggle theme":"切換主題","token":"令牌","Token":"令牌","token (unit)":"token","Token Breakdown":"Token 明細","Token Endpoint":"令牌端點","Token Endpoint (Optional)":"Token 端點(可選)","Token estimator":"Token 估算器","Token group":"令牌分組","Token has no group":"令牌未設定分組","Token ID":"權杖 ID","Token identifier":"權杖識別碼","Total quota cannot be negative":"總額度不能為負數","Token Limits":"令牌限制","Token management":"令牌管理","Token Management":"令牌管理","Token Mgmt":"令牌管理","Token name":"令牌名稱","Token Name":"令牌名稱","Token obtained from your Gotify application":"從您的 Gotify 套用程式獲取的 Token","Token operation details":"權杖操作詳情","Token or per-call pricing":"按 token 或按次計費","Token price for audio input.":"音頻輸入 token 價格。","Token price for audio output.":"音頻輸出 token 價格。","Token price for cache reads.":"緩存讀取 token 價格。","Token price for creating cache entries.":"建立緩存條目的 token 價格。","Token price for image input.":"圖像輸入 token 價格。","Token prices":"Token 價格","Token regenerated and copied to clipboard":"令牌已重新生成並複製到剪貼簿","Token scope":"權杖範圍","Token share by model author across the last 24 hours":"過去 24 小時內各廠商的 Token 佔比","Token share by model author across the past few weeks":"最近幾週內各廠商的 Token 佔比","Token share by model author across the past month":"過去一個月內各廠商的 Token 佔比","Token share by model author across the past year":"過去一年內各廠商的 Token 佔比","Transfer failed {{error}}":"劃轉失敗 {{error}}","Token share by model author since launch":"自上線以來各廠商的 Token 佔比","Token unit":"Token 單位","Token usage by model since launch":"自上線以來各模型的 Token 用量","Token-based":"按量收費","Tokenizer":"分詞器","tokens":"Token","Tokens":"Token","tokens / mo":"token / 月","Tokens by category":"分類 Token 佔比","Tokens Only":"僅限 Token","Tokens per minute":"每分鐘 Token 數","Tokens since launch":"發佈以來累計 Token","Tokens_usage":"Token","Tokens-only mode will show raw quota values regardless of this toggle.":"Tokens-only 模式將無視此開關顯示原始配額值。","Too many active login sessions. On a device where you are already signed in, open Login sessions and use “Sign out other sessions” to revoke them. If you cannot access a signed-in device, reset your password to sign out all sessions.":"有效登入工作階段數量已達上限。請在一台已登入的裝置上開啟「登入工作階段」,使用「登出其他工作階段」將其撤銷。如果無法存取任何已登入裝置,請重設密碼以登出所有工作階段。","Too many files. Some were not added.":"檔案過多。部分未添加。","Too many incorrect codes. Start email verification again.":"驗證碼錯誤次數過多,請重新開始信箱驗證。","Too many login sessions were created recently. Please wait for the rolling window to pass, then try again.":"近期建立的登入工作階段過多。請等待滾動時間窗口結束後再試。","Too many requests":"請求過於頻繁","Tool / function declarations the model may call":"模型可呼叫的工具 / 函數聲明","Tool identifier":"工具標識","Tool price settings":"工具價格設定","Tool prices":"工具價格","Tool-choice policy or specific tool name":"工具選擇策略或具體工具名","Tools":"工具","Top {{count}}":"前 {{count}}","Turnstile token is empty":"Turnstile token 為空","Turnstile verification failed, please refresh and try again!":"Turnstile 驗證失敗,請重新整理後再試!","Top app":"領頭套用","Top apps":"熱門套用","Top Apps":"熱門套用","Top integrations using this model":"使用此模型的主要整合","Top model":"領頭模型","Top models":"熱門模型","Top Models":"熱門模型","Top models by traffic":"流量最高的模型","Top P":"Top P","Top up balance and view billing history.":"儲值餘額並查看賬單歷史。","Top up, pay for subscriptions, check in, and transfer referral rewards.":"儲值、支付訂閱、簽到和轉移邀請獎勵。","Top Users":"熱門用戶","Top vendors":"熱門廠商","Top-up":"儲值","Top-up amount options":"儲值金額選項","Top-up Audit Info":"儲值審計資訊","Top-up group ratios":"儲值分組比例","Top-Up Link":"儲值連結","top-up ratio":"儲值倍率","Top-up ratio":"儲值倍率","Topup Amount":"儲值金額","Total":"總計","Unable to connect to {{provider}} server, please try again later":"無法連線至 {{provider}} 伺服器,請稍後再試","Unable to create the Passkey credential":"無法建立 Passkey 憑證","Total {{count}} records":"共 {{count}} 筆記錄","Total = used + remaining. It is not an initial allocation or a periodic budget; changing the remaining quota changes the total and percentage.":"總額度 = 已用 + 剩餘,並非初始額度或週期預算。修改剩餘額度會改變總額度和已用比例。","Total Allocated":"總分配","Total attempt budget exhausted":"整次嘗試次數已耗盡","Total check-ins":"累計簽到","Total consumed":"總消耗","Total consumed quota":"總消耗額度","Total cost":"總成本","Total Cost":"總費用","Total Count":"總數","Total earned":"累計獲得","Total Earned":"總收入","Total GPUs":"總 GPU","Unauthorized, insufficient privileges":"無權進行此操作,權限不足","Unauthorized, invalid access token":"無權進行此操作,access token 無效","Unauthorized, invalid user info":"無權進行此操作,使用者資訊無效","Unauthorized, not logged in and no access token provided":"無權進行此操作,未登入且未提供 access token","Unauthorized, the access token has expired":"存取權杖已過期","Total invitation revenue":"總邀請收入","Total Log Size":"日誌總大小","Total Quota":"總額度","Unbound successfully":"解綁成功","Total quota included in the plan, usable per billing period. 0 means unlimited.":"套餐包含的總額度,每個收費周期可用;0 表示不限量","Total requests allowed per period. 0 = unlimited.":"每周期允許的總請求數。0 = 無限制。","Total requests made":"總請求數","Total Revenue":"累計收益","Total time":"總耗時","Total tokens":"總 Token","Total Tokens":"總 Token 數","Total Usage":"總用量","Total Used":"累計已用","Total:":"總計:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"追蹤每個請求的消耗,以支援使用情況分析。保持開啟會增加資料庫寫入。","Track usage, costs and performance with real-time analytics":"透過實時分析追蹤用量、成本和效能","Tracked apps":"已追蹤的套用","Tracks current account base limits and additional metered usage on Codex upstream.":"追蹤目前賬號在 Codex 上游的基礎限額與附加收費用量。","Trading insights, accounting, advisory":"交易洞察、記賬與財務建議","Traditional Chinese":"繁體中文","Transfer":"轉移","Undo":"復原","Unknown OAuth provider":"未知的 OAuth 供應商","Unknown rule name":"未知規則名稱","Unknown setting type: {{type}}":"未知的設定類型:{{type}}","Transfer Amount":"轉移金額","Transfer failed":"轉賬失敗","Transfer Rewards":"轉移獎勵","Transfer successful":"轉賬成功","Transfer to Balance":"轉移到餘額","Translation":"翻譯","Transparent Billing":"透明收費","Trend":"趨勢","Trending down":"下降趨勢","Unsupported add mode":"不支援的新增模式","Unsupported operation":"不支援的操作","Unsupported payment channel":"不支援的支付管道","Unsupported payment method":"不支援的支付方式","Trending up":"上升趨勢","Triggered garbage collection":"觸發垃圾回收","Trim leading/trailing whitespace":"去掉字串頭尾空白","Trim Prefix":"裁剪前綴","Trim Space":"去掉空白","Trim Suffix":"裁剪後綴","Truncate embeddings to this many dimensions":"將向量截斷到指定維度","Trusted":"受信任","Try adjusting your search":"請嘗試調整搜尋條件","Try adjusting your search to locate a missing model.":"嘗試調整您的搜尋以找到缺失的模型。","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"各分組的 TTFT 分位數、吞吐量與 30 天可用率","TTL":"TTL","TTL (seconds, 0 = default)":"TTL(秒,0 表示預設)","TTL (seconds)":"TTL(秒)","Tune selection priority, testing, status handling, and request overrides.":"調整選擇優先級、測試、狀態處理和請求覆蓋。","Turnstile is enabled but site key is empty.":"Turnstile 已啟用但站點金鑰為空。","Tutoring, learning aids, assessment":"輔導、學習輔助與測評","Two-factor Authentication":"雙重身份驗證","Two-Factor Authentication":"兩步驗證","Two-factor authentication disabled":"兩因素認證已停用","Two-factor authentication enabled successfully!":"兩步驗證已成功啟用!","Two-factor authentication is already enabled.":"兩步驗證已啟用。","Two-factor authentication is not enabled.":"兩步驗證尚未啟用。","Two-factor authentication is temporarily locked.":"兩步驗證已暫時鎖定。","Two-factor authentication reset":"兩因素認證已重設","Two-Step Verification":"兩步驗證","Update successful":"更新成功","Type":"類型","Type (common)":"類型(常用)","Type *":"類型 *","Type to confirm":"輸入 以確認","Type a command or search...":"輸入命令或搜尋...","Type the confirmation text here":"在此輸入確認文字","Type-Specific Settings":"特定類型設定","Type:":"類型:","UI granularity only — data is still aggregated hourly":"僅 UI 粒度 — 數據仍按小時匯總","Unable to build Passkey assertion":"無法建立 Passkey 斷言","Unable to compare versions":"無法比較版本","Unable to confirm the update result":"無法確認更新結果","Unable to estimate price for this deployment.":"無法為該部署估算價格。","Unable to generate chat link. Please contact your administrator.":"無法生成聊天連結。請聯絡您的管理員。","Unable to load groups":"無法載入分組","Unable to load login sessions":"無法載入登入工作階段","Unable to load rankings":"無法載入排行榜","Unable to load rankings data":"無法載入排行榜數據","Unable to open chat":"無法打開聊天","Unable to parse Passkey login options from response":"無法解析回應中的 Passkey 登入選項","Unable to parse structured pricing":"無法解析為結構化價格","Unable to prepare chat link. Please ensure you have an enabled API key.":"無法準備聊天連結。請確保您有一個已啟用的 API 金鑰。","Unable to read clipboard":"無法讀取剪貼簿","Unauthorized":"未經授權","Unauthorized Access":"未經授權的存取","Unavailable":"無法顯示","Unbind":"解綁","Unbind failed":"解綁失敗","Unbound {{provider}}":"已解綁 {{provider}}","Unchanged":"不變","Underflow":"下溢","Underground":"暗夜","Understand how user groups, token groups, ratios, and special rules work together.":"了解用戶分組、令牌分組、倍率和特殊規則如何共同生效。","Upgrade group does not exist":"升級分組不存在","Understand image inputs alongside text":"在文字之外理解圖像輸入","Unexpected release payload":"意外的版本數據格式","Unified API Gateway for":"統一 API 閘道,服務於","Unique identifier for this group.":"此組的唯一標識符。","unit":"次","Unit":"單位","Unit price (local currency / USD)":"單價(本地貨幣 / USD)","Unit price (USD)":"單價 (USD)","Unit price must be greater than 0":"單價必須大於 0","Unit price: {{field}}":"{{field}} 單價","Units per USD":"每 USD 單位數","Unknown":"未知","Unknown device":"未知裝置","Unknown version":"未知版本","Unlimited":"無限制","Unlimited Quota":"無限配額","Unrecognized status code":"無法識別的狀態碼","Unsaved changes":"未儲存的變更","Unset legacy prices use the billing engine defaults.":"未設定的舊模式價格使用計費引擎的預設值。","Unset price":"未設定價格","Unset price models":"未設定價格模型","Unsupported account password hashing configuration.":"帳戶密碼雜湊設定不受支援。","Unsupported verification method: {{method}}":"不支援的驗證方式:{{method}}","Until":"至","Untitled":"未命名","Untrusted upstream data:":"不受信任的上游數據:","Unused":"未使用","Up to 4 strings that stop generation":"最多 4 個停止生成的字串","Up to date":"已是最新","Update":"更新","Update All Balances":"更新所有餘額","Update API Key":"更新 API 金鑰","Update API token":"更新 API 權杖","Update API token “{{name}}”":"更新 API 權杖「{{name}}」","Update available":"可更新","Update Balance":"更新餘額","Update balance for:":"更新餘額:","Update Channel":"更新渠道","Update channel configuration and click save when you\'re done.":"更新渠道設定,完成後點擊儲存。","Update check timed out. Try again.":"檢查更新逾時,請重試。","Update completed":"更新完成","Update configuration":"更新設定","Update failed":"更新失敗","Update Model":"更新模型","Update model configuration and click save when you\'re done.":"更新模型設定,完成後點擊儲存。","Update plan info":"更新套餐資訊","Update Provider":"更新供應商","Update Redemption Code":"更新兌換碼","Update results":"更新結果","Update selected fields":"更新所選欄位","Upstream returned no usage":"上游無計費資訊","Upstream returned no usage, so nothing was charged (possibly an upstream timeout)":"上游沒有返回計費資訊,無法扣費(可能是上游逾時)","Update succeeded":"更新成功","Update the API key by providing necessary info.":"透過提供必要資訊更新 New API 金鑰。","Upstream task not found":"上游找不到這個任務","Update the configuration for this custom OAuth provider.":"更新此自訂 OAuth 供應商的設定。","Upstream task timed out (over 1 hour)":"上游任務逾時(超過 1 小時)","Update the redemption code by providing necessary info.":"透過提供必要資訊更新兌換碼。","Update the reusable bundle below.":"更新下面的可重用捆綁包。","Update the session binding after a successful switch":"切換成功後更新工作階段綁定","Update the user by providing necessary info.":"透過提供必要資訊更新用戶。","Update vendor information for {{name}}":"更新 {{name}} 的供應商資訊","Update your password for account:":"更新用戶密碼:","Update your password to keep your account secure":"更新您的密碼以確保用戶安全","Updated":"更新時間","Updated {{models}} model assignments and deleted {{vendors}} vendor records.":"已更新 {{models}} 筆模型歸屬,刪除 {{vendors}} 筆供應商記錄。","Uptime Kuma groups cannot exceed 20 entries":"Uptime Kuma 分組數量不能超過 20 個","Updated a custom OAuth provider":"更新了一個自訂 OAuth 提供方","Updated a deployment":"更新了一個部署","Updated a model":"更新了一個模型","Updated a prefill group":"更新了一個預填組","Updated a redemption code":"更新了一個兌換碼","URL must start with http:// or https://":"URL 必須以 http:// 或 https:// 開頭","Updated a subscription plan":"更新了一個訂閱計劃","Updated a vendor":"更新了一個供應商","Updated At":"更新時間","Updated channel {{name}} (ID: {{id}})":"更新渠道 {{name}}(ID: {{id}})","Updated channel status (ID: {{id}})":"更新渠道狀態(ID: {{id}})","Updated daily":"每日更新","Updated Passkey domains: removed {{domains}}; affected {{known}}; unknown {{unknown}}":"已更新通行金鑰網域:刪除 {{domains}};已知受影響 {{known}};歸屬未知 {{unknown}}","Updated successfully":"更新成功","Updated system setting {{key}}":"修改系統設定 {{key}}","Updated user {{username}} (ID: {{id}})":"更新用戶 {{username}}(ID: {{id}})","Updates have not been checked yet.":"尚未檢查更新。","Updates with the system":"隨系統更新","Updating all channel balances. This may take a while. Please refresh to see results.":"正在更新所有渠道餘額。這可能需要一段時間。請重新整理以查看結果。","Updating...":"正在更新...","Upgrade {{name}}":"升級 {{name}}","Upgrade and enable":"升級並啟用","Upgrade available: v{{installed}} to v{{latest}}":"可升級:v{{installed}} → v{{latest}}","Upgrade Group":"升級分組","Upgrade plaintext SMTP connection with STARTTLS before authentication":"在身份驗證前使用 STARTTLS 升級明文 SMTP 連接","Upload":"上傳","Upload a JavaScript task platform plugin.":"上傳 JavaScript 任务平台外掛。","Upload a single service account JSON file":"上傳單個服務賬號 JSON 檔案","Upload a task plugin to add a platform.":"上傳任务外掛以添加平台。","Upload file":"上傳檔案","Upload files":"上傳檔案","Upload multiple JSON files in batch modes":"大量模式下可上傳多個 JSON 檔案","Upload new plugin version":"上傳外掛新版本","Upload new version":"上傳新版本","Upload or reference a local configuration file.":"上傳或引用本地設定文件。","Upload photo":"上傳相片","Upload plugin":"上傳外掛","Upload task plugin":"上傳任务外掛","Uploading a plugin is an administrator-level trust decision. A plugin can access channel credentials and shape upstream requests. Review its source and diff before activation.":"上傳外掛属于管理员级信任行为。外掛可访问渠道凭据并构造上游请求,请在激活前审查原始碼及差异。","Uploading...":"上傳中...","Upscale":"放大","Upstream":"上游","Upstream authentication":"上游驗證方式","Upstream connection":"上游連線","Upstream did not return reset credit details.":"上游未返回重置次數詳情。","Upstream JSON response":"上游 JSON 回應","Upstream Model":"上游請求模型","Upstream Model Detection Settings":"偵測上游模型設定","Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.":"上游模型檢測任務已開始。可在「系統資訊」中查看進度,完成後重新整理以查看待處理的更新。","Upstream model list":"上游模型清單","Upstream Model Name":"上游模型名稱","Upstream Model Update Check":"上游模型更新檢查","Upstream Model Updates":"上游模型更新","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"已處理上游模型更新:加入 {{added}} 個,刪除 {{removed}} 個,本次忽略 {{ignored}} 個,目前已忽略模型 {{totalIgnored}} 個","Upstream names returned by the provider":"上游回傳的模型名稱","Upstream path":"上游路徑","Upstream path is required":"上游路徑不能為空","Upstream path must be a full URL or a path starting with /":"上游路徑必須是完整 URL,或以 / 開頭的路徑","Upstream price sync":"上游價格同步","Upstream prices fetched successfully":"已成功獲取上游價格","Upstream protocol plan":"上游協議方案","Upstream ratios fetched successfully":"上游比率獲取成功","Upstream receives":"上游收到","Upstream request failed":"上游請求失敗","Upstream Request ID":"上游請求 ID","Upstream response":"上游回應","Upstream Response":"上游返回","Upstream Response (billing-usage-anthropic-estimated)":"上游返回(billing-usage-anthropic-estimated)","Upstream Response (billing-usage-anthropic)":"上游返回(billing-usage-anthropic)","Upstream Response (billing-usage-gemini-estimated)":"上游返回(billing-usage-gemini-estimated)","Upstream Response (billing-usage-gemini)":"上游返回(billing-usage-gemini)","Upstream Response (billing-usage-openai-estimated)":"上游返回(billing-usage-openai-estimated)","Upstream Response (billing-usage-openai)":"上游返回(billing-usage-openai)","upstream services integrated":"上游服務適配","Upstream Task ID":"上游任務 ID","Upstream task plugins":"上游任務插件","Upstream Updates":"上游更新","Upstream URL":"上游 URL","Upstream URL must be a full URL":"上游 URL 必須是完整 URL","Upstream vendor missing":"上游缺少供應商資訊","uptime":"正常執行時間","Uptime":"執行時間","Uptime (30d)":"可用率 (30 天)","Uptime (last 30 days)":"可用率(最近 30 天)","Uptime Kuma":"Uptime Kuma","Uptime Kuma groups saved successfully":"Uptime Kuma 組儲存成功","Uptime Kuma URL":"Uptime Kuma URL","Uptime since":"執行時間始於","URL":"URL","URL is required":"URL 為必填項","URL to your logo image (optional)":"您的徽標圖片 URL(可選)","Use the same priority as the highlighted channels":"與醒目顯示的渠道使用相同優先級","User does not exist":"使用者不存在","US dollar (USD)":"美元(USD)","Usage":"用量","Usage · {{price}}":"用量 · {{price}}","Usage at a glance":"用量概覽","Usage guide":"使用教學","User group will be reverted to {{group}}":"使用者分組將回退到 {{group}}","User group will be upgraded to {{group}}":"使用者分組將升級到 {{group}}","Usage logs":"使用日誌","Usage Logs":"使用日誌","Usage mode":"使用模式","User has been banned":"使用者已被封鎖","User has been deleted":"使用者已註銷","Usage parameters":"用量參數","Usage percentage":"已用比例","Usage prices":"用量價格","Usage-based":"基於使用量","Usage-based billing":"按用量計費","Usage-based billing · price not configured":"按用量計費 · 尚未設定價格","USD":"USD","USD Exchange Rate":"美元匯率","USD price per 1M input tokens.":"每 100 萬輸入 token 的美元價格。","User registration failed or user ID retrieval failed":"使用者註冊失敗或無法取得使用者 ID","USD price per 1M tokens.":"每 100 萬 token 的美元價格。","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"使用 +: 新增分組,使用 -: 移除預設可選分組,不加前綴則追加分組。","Use 8–128 characters.":"使用 8–128 個字元。","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"請使用支援生物識別認證或安全金鑰的兼容瀏覽器或設備來註冊通行金鑰。","Use a different stable value for each instance, then restart the service.":"每個實例使用不同且穩定的值,然後重啟服務。","Use a Passkey from another website":"使用其他網站的通行金鑰","Use a path to append it to the channel Base URL, or enter a full URL to override the Base URL for this route.":"填寫以 / 開頭的路徑時會自動拼接渠道 Base URL;填寫完整 URL 時,此路由會直接使用該 URL。","Username already exists or has been deleted":"使用者名稱已存在,或已註銷","Use access tokens to call the dashboard API from scripts. Each token only has the permissions you select.":"在腳本中呼叫面板 API 時使用存取令牌。每個令牌只擁有你勾選的權限。","Use an HTTPS domain (or localhost for development) to configure Passkey.":"請透過 HTTPS 網域設定 Passkey;本機開發可使用 localhost。","Username must be {{max}} characters or fewer":"使用者名稱長度不能超過 {{max}} 個字元","Use authenticator code":"使用驗證器代碼","Username or password is incorrect, or user has been banned":"使用者名稱或密碼錯誤,或使用者已被封鎖","Use backup code":"使用備用代碼","Use Bearer for all protocols":"所有協議統一使用 Bearer","Use channel type {{type}}":"使用通道類型 {{type}}","Users can download their own logs from the usage log page. Administrators can always export.":"使用者可以在使用日誌頁面下載自己的日誌。管理員始終可以匯出。","Use default":"使用預設值","Use disk cache when request body exceeds this size":"請求體超過此大小時使用磁碟緩存","Use exact client model names, separated by commas. Prefixes and wildcards are not supported.":"填寫客戶端請求裡的精確 model 名,多個用英文逗號分隔。不支援前綴或萬用字元。","Use exact model names such as gpt-4o, or regex rules prefixed with re: such as re:^gemini-.":"可以填寫 gpt-4o 這類精確模型名,也可以填寫 re:^gemini- 這類以 re: 開頭的正則規則。","Use expression pricing when a dependent price is non-zero and its base price is zero.":"基礎價格為零而關聯價格非零時,請使用運算式定價。","Use external tools to extend capabilities":"透過外部工具擴展能力","Use Mantle for supported Claude models and automatic prompt caching. Keep InvokeModel for older models and Amazon Nova.":"支援的 Claude 模型及自動提示快取可使用 Mantle。舊模型和 Amazon Nova 請繼續使用 InvokeModel。","Use model-level expression":"沿用模型層級運算式","Use model-level pricing":"使用模型層級價格","Use one available reset credit for this channel. The reset request is sent only after confirmation.":"將為目前渠道使用 1 次可用重置次數。只有確認後才會發送重置請求。","Use one available reset credit to refresh the current Codex usage windows.":"使用 1 次可用重置次數,重新整理目前 Codex 用量窗口。","Use OpenAI-compatible Ollama chat API":"使用 Ollama 的 OpenAI 相容對話介面","Use our unified OpenAI-compatible endpoint in your applications":"在套用中使用我們兼容 OpenAI 的統一接口","Use Passkey or 2FA to confirm your identity before revealing this channel key.":"請使用 Passkey 或雙重身份驗證確認身份後再查看此渠道金鑰。","Use Passkey to sign in without entering your password.":"使用通行金鑰登入,無需輸入密碼。","Use presets or upstream discovery to populate the model list faster.":"使用預設或上游發現來更快填充模型列表。","Use secure connection when sending emails":"發送電郵時使用安全連接","Use sidebar shortcut":"使用側邊欄快捷方式","Use the existing token total":"使用現有 token 總長度","Use the full-width table to scan prices, then select a row to edit it here.":"先在表格中快速瀏覽價格,然後選擇一行在這裡編輯。","Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.":"使用令牌上設定的分組;令牌未設定分組時,使用用戶分組。auto 分組會按自動分組順序從上到下嘗試。","Use the group set on the token. If the token has no group, use the user group. The auto group tries the configured groups from top to bottom.":"使用權杖設定的分組;權杖未設定分組時,使用使用者分組。auto 分組會依設定順序由上到下嘗試各分組。","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"使用定價分組表管理倍率,以及該分組是否出現在建立令牌的下拉框中。","Use this callback URL pattern when registering a custom OAuth provider.":"註冊自訂 OAuth 提供商時使用此回呼 URL 格式。","Use this token for API authentication":"使用此令牌進行 API 身份驗證","Use tier(name, fixed(amount)) for a USD price per request. Group and request multipliers still apply.":"使用 tier(name, fixed(amount)) 設定以美元計價的每次請求價格。分組倍率和請求倍率仍然生效。","Use your Passkey":"使用您的通行金鑰","used":"已使用","Used":"已使用","Used {{used}} of {{total}} ({{percent}}%)":"已用 {{used}} / {{total}}({{percent}}%)","Used / Remaining":"已使用 / 剩餘","Used amount":"已用","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"用作新產品的 SuccessURL。若留空,系統會要求你確認。","Used by route auth templates":"用於路由認證模板","Used for load balancing. Higher weight = more requests":"用於負載平衡。權重越高 = 請求越多","Used in URLs and API routes":"用於URL和API路由","Used Quota":"消耗額度","Used reset credits cannot be restored.":"已使用的重置次數無法恢復。","Used to authenticate with io.net deployment API":"用於 io.net 部署 API 鑒權","Used to authenticate with the worker. Leave blank to keep the existing secret.":"用於與 Worker 進行身份驗證。留空以保留現有金鑰。","Used to decide the payment flow. Built-in keys include stripe for Stripe and waffo_pancake for Waffo Pancake; other values are sent to Epay as the type parameter.":"用於決定點擊後走哪個支付流程。stripe 走 Stripe,waffo_pancake 走 Waffo Pancake;其他值會作為 Epay 的 type 參數提交。","Used when a Task Plugin channel has no API address configured.":"任務外掛管道未填寫 API 位址時使用此預設值。","Used:":"已使用:","Verification code is incorrect or has expired":"驗證碼錯誤或已過期","User":"用戶","User {{id}}":"用戶 {{id}}","User Agent":"用戶代理","User Agreement":"用戶協議","User Analytics":"用戶統計","User Consumption Ranking":"用戶消耗排行","User Consumption Trend":"用戶消耗趨勢","User Count":"使用者數量","User created successfully":"用戶建立成功","User dashboard and quota controls.":"用戶儀表板和配額控制。","User deleted successfully":"用戶刪除成功","User demoted to regular user successfully":"已成功降級為普通用戶","User disabled successfully":"用戶停用成功","User enabled successfully":"用戶啟用成功","User Exclusive Ratio":"專屬倍率","User group":"用戶分組","User Group":"用戶分組","User group name":"用戶分組名稱","User Group: {{ratio}}x":"用戶分組:{{ratio}}x","User groups that can access channels with this tag":"可以存取帶有此標籤的渠道的用戶分組","User groups that can access this channel. ":"可以存取此渠道的用戶組。","User ID":"用戶 ID","User ID Field":"用戶ID欄位","User ID:":"用戶 ID:","User Info Endpoint":"用戶資訊端點","User Info Endpoint (Optional)":"用戶資訊端點(可選)","User Information":"用戶資訊","User Menu":"用戶選單","User personal functions":"用戶個人功能","User promoted to admin successfully":"已成功提升為管理員","User selectable":"用戶可選","User Subscription Management":"用戶訂閱管理","User updated successfully":"用戶更新成功","User Verification":"用戶驗證","User-Agent include (one per line)":"User-Agent include(每行一個)","Username":"用戶名","Username confirmation does not match":"用戶名確認不匹配","Username Field":"用戶名欄位","Username or Email":"用戶名或電郵","Users":"用戶","Users call":"使用者呼叫","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"用戶呼叫左側的模型。平台將請求轉發給右側的上游模型。","Users in {{group}}":"{{group}} 分組的用戶","Users must wait for a successful drawing before upscales or variations.":"用戶必須等待成功的繪圖完成,才能進行放大或變體。","Users of vip, when billed as premium, pay ratio":"vip 分組的用戶,按 premium 收費時,倍率用","Vertex AI keys for batch adding cannot be empty":"批次新增 Vertex AI 的金鑰不能為空","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"用戶只能看到標記為用戶可選的分組。不可選分組仍可由管理員分配。","uses":"使用次數","Using built-in or default pricing":"使用內建或預設定價","Using the complete global Auto order ({{count}} groups)":"正在使用完整的全域 Auto 順序({{count}} 個分組)","v{{installed}} is installed but this source does not list it. Installing replaces it with v{{target}}.":"目前已安裝 v{{installed}},但該來源未列出此版本。安裝將會以 v{{target}} 取代它。","Validity":"有效期","Validity Period":"有效期","Value":"值","Value (supports JSON or plain text)":"值(支援 JSON 或普通文字)","Value is required":"值為必填項","Value metric":"數值口徑","Value must be at least 0":"值必須至少為 0","Value Regex":"Value 正則","variable":"變數","variable)":"變數)","variable) *":"變數) *","Variables":"變數","Vary":"變換","Vary (Strong)":"強變換","Vary (Subtle)":"弱變換","Vast Range of AI Models":"海量 AI 模型","vendor":"供應商","Vendor":"供應商","Vendor created successfully":"供應商已建立","Vendor data changed. Preview again before applying.":"供應商資料已變更,請重新預覽後再套用。","Vendor deleted successfully":"供應商刪除成功","Vendor details":"供應商資料","Vendor management":"供應商管理","Vendor Name":"供應商名稱","Vendor Name *":"供應商名稱 *","Vendor name and icon must not exceed 128 characters.":"供應商名稱與圖示識別碼皆不得超過 128 個字元。","Vendor name is required":"供應商名稱不得為空","Vendor updated successfully":"供應商已更新","Vendor:":"供應商:","Vendors":"供應商","Vendors ranked by aggregated token volume":"廠商按聚合 Token 用量排序","Vendors source":"供應商來源","Vendors still have {{count}} linked model records. Transfer or clear their assignments first.":"供應商仍有 {{count}} 筆關聯模型記錄,請先轉移或清除歸屬。","Verification code":"驗證碼","Verification Code":"驗證碼","Verification code must be 6 digits":"驗證碼必須是 6 位數字","Verification code sent! Please check your email.":"驗證碼已發送!請檢查您的電郵。","Verification code updates every 30 seconds.":"驗證碼每 30 秒更新一次。","Verification does not match this action.":"驗證與此操作不相符。","Verification does not match this action\'s details. Please verify again.":"驗證與本次操作的詳細內容不符,請重新驗證。","Verification email could not be sent. Start email verification again.":"驗證郵件傳送失敗,請重新開始信箱驗證。","Verification email sent":"驗證郵件已發送","Verification failed":"驗證失敗","Verification failed. Please try again.":"驗證失敗,請重試。","Verification flow expired":"驗證流程已過期","Verification is not configured properly":"驗證未正確設定","Verification method":"驗證方式","Verification proof was not returned":"伺服器未傳回驗證憑證","Verification required to reveal the saved key.":"需要驗證才能顯示已儲存的金鑰。","Verification scope is missing":"缺少驗證範圍","Violation fee charged":"已收取違規費用","Verify":"驗證","Verify again before retrying this action.":"重試此操作前,請重新驗證。","VIP group":"VIP 分組","Verify and Sign In":"驗證並登入","Verify routing with Playground or your client":"使用 Playground 或你的用戶端驗證路由","Verify Setup":"驗證設定","Verify to create administrator":"驗證後建立管理員","Verify to delete user":"驗證後刪除用戶","Verify to demote user":"驗證後降級用戶","Verify to disable user":"驗證後停用用戶","Verify to enable user":"驗證後啟用用戶","Verify to promote user":"驗證後提升用戶","Verify to reset 2FA":"驗證後重置 2FA","Verify to reset Passkey":"驗證後重置 Passkey","Verify to unbind account":"驗證後解綁帳號","Verify to update user credentials":"驗證後更新用戶憑證","Verify to view channel key":"驗證後查看渠道金鑰","Verify upstream pricing":"請確認上游價格","Verify your database connection":"驗證資料庫連接","Verify your identity to finish signing in.":"請驗證身分以完成登入。","Verifying credentials and pulling stores from your Pancake account...":"正在驗證憑證並從你的 Pancake 用戶拉取店鋪...","Verifying your {{provider}} account":"正在驗證 {{provider}} 帳號","Version":"版本","Version differences":"版本差異","Version history":"版本历史","Version Overrides":"版本覆蓋","Versions":"版本","Vertex AI":"Vertex AI","Waffo Pancake configuration is incomplete":"Waffo Pancake 設定不完整","Waffo Pancake credentials are not configured":"Waffo Pancake 憑證未設定","Vertex AI API Key mode does not support batch creation":"Vertex AI API Key 模式不支援大量建立","Waffo Pancake is not configured or key is invalid":"Waffo Pancake 未設定或密鑰無效","Waffo Pancake is not fully configured. Complete the gateway binding in payment settings first.":"Waffo Pancake 未完成設定,請先在支付設定中完成閘道綁定","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI 不支援 functionResponse.id 欄位,開啟後將自動移除該欄位","Vertex AI Key Format":"Vertex AI 金鑰格式","Vertex AI Project ID":"Vertex AI 專案 ID","e.g., my-project-123":"例如 my-project-123","Vertex AI service account key must be valid JSON":"Vertex AI 服務賬號金鑰必須是有效 JSON","Video":"影片","Video length in seconds":"影片時長(秒)","Video pricing must be converted manually.":"影片定價需手動轉換。","Video Remix":"影片 Remix","Vidu":"Vidu","Waffo payment is not enabled":"Waffo 支付未啟用","View":"查看","View all currently available models":"查看目前可用的所有模型","WaffoPancakeProductId is not configured for this plan":"該訂閱方案未設定 WaffoPancakeProductId","View all top-up records, subscription plans, and user subscriptions.":"檢視所有儲值記錄、訂閱套餐和用戶訂閱。","View all users\' usage logs, statistics, and tasks.":"檢視所有用戶的使用日誌、統計和任務。","View API keys and their settings without the full key.":"檢視 API 金鑰及其設定,不含完整金鑰。","View API token key":"檢視 API 權杖金鑰","View API token keys in batch":"批次檢視 API 權杖金鑰","View audit records from user and admin roles. Root records are always excluded.":"查看 user 和 admin 角色的稽核記錄,一律排除 root 層級記錄。","View balance, top-up records, subscriptions, and referral information.":"檢視餘額、儲值記錄、訂閱和邀請資訊。","View changelog source":"檢視日誌原始檔","View channel lists and details without secrets.":"查看不含金鑰的渠道列表和詳情。","View channel secrets":"查看渠道金鑰","View complete API keys.":"檢視完整的 API 金鑰。","View deployments and price estimates.":"檢視部署和價格估算。","View detailed information about this user including balance, usage statistics, and invitation details.":"查看此用戶的詳細資訊,包括餘額、使用統計和邀請詳情。","View details":"查看詳情","View document":"查看文檔","View groups and prefill groups.":"檢視分組和預填充分組。","View installed task plugins and their settings.":"檢視已安裝的任務外掛及其設定。","View issued reset credits, grant dates, and expiration.":"查看已發放的重置次數、發放日期和到期時間。","View key for API token “{{name}}”":"檢視 API 權杖「{{name}}」的金鑰","View logs":"查看日誌","View mapping":"查看映射","View mode":"檢視模式","View model statistics and charts":"查看模型統計和圖表","View models":"查看模型","View models and vendors, and preview upstream sync.":"檢視模型和供應商,並預覽上游同步。","View other accounts\' audit logs":"查看其他帳戶稽核日誌","View Passkey, two-factor, and sign-in binding status.":"檢視 Passkey、兩步驗證和登入綁定狀態。","View performance, system tasks, and system information.":"檢視效能、系統任務和系統資訊。","View Pricing":"查看定價","View pricing for {{model}}":"查看 {{model}} 的定價","View redemption codes.":"檢視兌換碼。","View scope":"檢視範圍","View system settings, custom OAuth providers, and price sync sources.":"檢視系統設定、自訂 OAuth 提供者和價格同步來源。","View the complete details for this":"查看此條","Webhook URL cannot be empty":"Webhook 位址不能為空","View the complete details for this log entry":"查看此日誌條目的完整詳情","View the complete details for this task":"查看此任務的完整詳情","View the complete error message and details":"查看完整錯誤資訊與詳情","WeChat ID is empty!":"微信 ID 為空!","View the complete prompt and its English translation":"查看完整提示詞及其英文翻譯","View the generated image":"查看生成的圖片","View users, their sign-in bindings, and permission settings.":"檢視用戶及其登入綁定和權限設定。","View your profile, groups, and available models.":"檢視個人資料、分組和可用模型。","View your topup transaction records and payment history":"查看您的儲值交易記錄和付款歷史","View your usage logs, statistics, tasks, and audit logs.":"檢視你的使用日誌、統計、任務和稽核日誌。","Viewed channel key {{name}} (ID: {{id}})":"查看渠道金鑰 {{name}}(ID: {{id}})","Violation Code":"違規代碼","Violation deduction amount":"違規扣費金額","Violation Fee":"違規扣費","Violation Marker":"違規標記","vip":"vip","VIP users with premium access":"擁有高級存取權限的 VIP 用戶","Visible":"可見","Visible only to users with access to the model’s groups.":"僅向有權存取模型所屬群組的使用者顯示。","Vision":"視覺","Vision, image / video, document chat":"視覺理解、圖像 / 影片、文檔對話","Visit Settings → General and adjust quota options...":"訪問設定 → 通用並調整配額選項...","Visitors must authenticate before accessing the pricing directory.":"訪客必須先進行身份驗證才能存取定價目錄。","Visitors must authenticate before accessing the rankings page.":"訪客必須先進行身份驗證才能存取排行榜頁面。","Visual":"可視化","Visual edit":"可視化編輯","Visual editor":"可視化編輯器","Visual Editor":"可視編輯器","Visual indicator color for the API card":"API 卡的可視指示器顏色","Visual Mode":"可視模式","Visual Parameter Override":"可視化參數覆蓋","Visual prices use {{currency}} per declared unit; token prices are per 1M tokens. Raw expressions always use USD, with token terms divided by 1000000.":"視覺化價格以 {{currency}} 按宣告的單位計價;Token 價格按每百萬 Token 計價。原始表達式一律使用美元,Token 項除以 1000000。","vLLM":"vLLM","vLLM API key, or EMPTY if authentication is disabled":"vLLM API 金鑰,未啟用驗證時填入 EMPTY","vLLM server address, without /v1":"vLLM 服務位址,不包含 /v1","vLLM status":"vLLM 狀態","VolcEngine":"火山方舟","vs. previous":"相較上期","Waffo":"Waffo","Waffo Aggregator Gateway":"Waffo 聚合閘道","Waffo Pancake Dashboard":"Waffo Pancake 控制台","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Waffo Pancake 支付閘道","Waffo Pancake product created":"Waffo Pancake 產品已建立","Waffo Pancake product creation failed":"Waffo Pancake 產品建立失敗","Waffo Pancake save failed":"Waffo Pancake 儲存失敗","Waffo Pancake settings saved":"Waffo Pancake 設定已儲存","Waffo Payment":"Waffo 支付","Waffo Payment Gateway":"Waffo 支付閘道","Waffo Public Key (Production)":"Waffo 公鑰(生產)","Waffo Public Key (Sandbox)":"Waffo 公鑰(沙盒)","Waiting":"等待中","Waiting for email...":"等待電郵...","Waiting for two comparable samples. Counter resets restart the sampling window.":"等待兩次可比較的取樣,計數重設後將重新開始統計。","Waiting requests":"排隊中請求","Wallet":"錢包","Wallet First":"優先錢包","Wallet Management":"錢包管理","Wallet management and personal preferences.":"錢包管理和個人偏好設定。","Wallet Only":"僅用錢包","Wallet pre-consume bypass threshold (USD)":"錢包免預扣門檻(美元)","Wallet quota limit exceeded":"超出錢包額度範圍","Warning":"警告","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"警告:基礎 URL 不應以 /v1 結尾。New API 將自動處理它。這可能導致請求失敗。","Warning: Disabling 2FA will make your account less secure.":"警告:停用雙重身份驗證將使您的用戶安全性降低。","Warning: This action is permanent and irreversible!":"警告:此操作是永久且不可逆的!","We apologize for the inconvenience.":"對於由此造成的不便,我們深表歉意。","We could not load instances.":"無法載入實例資訊。","We could not load system tasks.":"無法載入系統任務。","We could not load the setup status.":"我們無法載入設定狀態。","We will prompt your device to confirm using biometrics or your hardware key.":"我們將提示您的設備使用生物識別或硬件金鑰進行確認。","We\'ll be back online shortly.":"我們將很快恢復在線。","Web search":"網絡搜尋","Web Search":"網頁搜尋","Webhook Configuration:":"Webhook 設定:","Webhook public key (production)":"Webhook 公鑰(生產)","Webhook public key (production) is required":"Webhook 公鑰(生產)為必填項","Webhook public key (sandbox)":"Webhook 公鑰(沙盒)","When a channel is disabled or re-enabled automatically, or a test of all channels finishes":"渠道被自動停用或重新啟用,或全部渠道測試完成時","You can create at most {{count}} access tokens":"最多可建立 {{count}} 個存取令牌","Webhook public key (sandbox) is required":"Webhook 公鑰(沙盒)為必填項","Webhook secret":"Webhook 金鑰","Webhook Secret":"Webhook 金鑰","Webhook signing secret (leave blank unless updating)":"Webhook 簽名金鑰(除非更新,否則留空)","You cannot grant one or more of these permissions.":"你無法授予其中一項或多項權限。","Webhook URL":"Webhook 地址","Webhook URL (Production):":"Webhook URL(生產):","Webhook URL (Test):":"Webhook URL(測試):","Webhook URL:":"Webhook URL:","Website is under maintenance!":"網站正在維護中!","WeChat":"微信","WeChat login QR code":"微信登入二維碼","WeChat Pay":"微信支付","WeChat sign in":"微信登入","Week":"本週","Weekday":"星期","Weekly":"每週","Weekly token usage by model across the past few weeks":"最近幾週內各模型的每週 Token 用量","Weekly token usage by model across the past year":"過去一年內按模型分佈的每週 Token 使用量","Weekly token usage by model since launch":"自上線以來按模型分佈的每週 Token 使用量","Weekly Window":"每週窗口","Weight":"權重","Weighted by request count":"按請求數加權","Welcome back!":"歡迎回來!","Welcome to our New API...":"歡迎使用我們的 New API...","Well-Known URL":"Well-Known URL","Well-Known URL must start with http:// or https://":"Well-Known URL 必須以 http:// 或 https:// 開頭","What do you want to change?":"你想修改什麼?","What would you like to know?":"您想了解什麼?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"當令牌使用 auto 分組時,系統會按從上到下的順序嘗試,直到找到可用分組。","When billed as {{group}}":"按 {{group}} 收費時","When conditions match":"條件成立時","When conditions match → {{name}}":"條件成立 → {{name}}","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"條件滿足時,最終價格乘以 X;多條命中的倍率會相乘;小於 1 的值為折扣。","When disabled, all uploaded custom plugins are ignored and every platform falls back to its built-in factory plugin.":"關閉後,所有上傳的自訂外掛都會被忽略,每個平台均回復使用內建的出廠外掛。","When disabled, the entire task plugin system stops serving, including factory and custom plugins.":"關閉後,整個任務外掛系統停止服務,包括出廠外掛與自訂外掛。","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"開啟後,目前分組渠道失敗時會按順序嘗試下一個分組的渠道。","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.":"開啟後,親和到的渠道被停用,或不再適用於目前分組/模型時,仍保留這條親和;關閉時會刪除並重新選擇渠道。","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"啟用磁碟緩存後,大請求體將臨時儲存到磁碟而非記憶體,可顯著降低記憶體佔用。建議在 SSD 環境下使用。","When enabled, MjProxy callbacks are accepted (reveals server IP).":"啟用時,接受 MjProxy Callback (會洩露伺服器 IP)。","When enabled, newly created tokens start in the first auto group.":"啟用後,新建立的令牌將從第一個自動分組開始。","When enabled, prompts are scanned before reaching upstream models.":"啟用後,提示將在到達上游模型之前被掃描。","When enabled, the store field will be blocked":"開啟後將阻止 store 欄位透傳","When enabled, this API key can be used to check your account\'s remaining and used quota.":"開啟後,可用這個令牌查詢帳戶的剩餘額度和已用額度。","When enabled, users can pick this group when creating tokens.":"啟用後,用戶建立令牌時可以選擇該分組。","When enabled, violation requests will incur additional charges.":"開啟後,違規請求將額外扣費。","When enabled, zero-cost models also pre-consume quota before final settlement.":"啟用後,零成本模型也會在最終結算前預先消耗配額。","When no conditions are set, the operation always executes.":"沒有條件時,預設總是執行該操作。","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"啟用效能監控後,當系統資源使用率超過設定閾值時,將拒絕新的 Relay 請求。","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"在容器或臨時環境中執行時,請確保 SQLite 檔案映射到持久儲存,以避免重新啟動時數據遺失。","When the primary domain changes, the previous domain is automatically kept in the compatible domains list.":"變更主要網域時,原網域會自動保留在相容網域清單中。","Whitelist":"白名單","Whitelist (Only allow listed domains)":"白名單(僅允許列出的域)","Whitelist (Only allow listed IPs)":"白名單(僅允許列出的 IP)","whsec_xxx":"whsec_xxx","Why only one store + product?":"為什麼只需要一個店鋪和產品?","Why set a website domain?":"為什麼要填寫網站網域?","Why set this?":"為什麼需要設定?","Window:":"窗口:","Wire encoding for the embedding vectors":"向量傳輸的編碼格式","with conflicts":"有衝突","With linked models":"有關聯模型","with the API key from your token settings.":"替換為令牌設定中的 API Key。","With these settings, automatic disabling is off for all channels.":"依目前設定,所有渠道的自動停用均不生效。","Without additional conditions, only the type above is used for pruning.":"未新增附加條件時,僅使用上方 type 進行清理。","Without linked models":"無關聯模型","Worked example":"完整示例","Worker Access Key":"Worker 存取金鑰","Worker instances do not run master-only background tasks.":"worker 實例不執行僅限 master 的背景任務。","Worker metrics":"工作程序指標","Worker Proxy":"Worker 代理","Worker URL":"Worker URL","Workspaces":"工作區","Write value to the target field":"把值寫入目標欄位","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"訊飛","Year":"今年","years":"年","Yes":"是","You are about to delete {{count}} API key(s).":"您即將刪除 {{count}} 個 API 金鑰。","You are offline. Updates will be checked when you reconnect.":"目前處於離線狀態,恢復連線後將檢查更新。","You are running the latest version ({{version}}).":"您正在執行最新版本 ({{version}})。","You can add models manually or try fetching again.":"可以手動新增模型,也可以重新取得。","You can close this tab once the binding completes or a success message appears in the original window.":"連結完成後或原窗口出現成功訊息後,您可以關閉此標籤頁。","You can create up to {{count}} access tokens":"最多可建立 {{count}} 個存取令牌","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"你可以在「自訂模型名稱」處手動新增它們,然後點擊「填入」後再提交,或者直接使用下方操作自動處理。","You can only check in once per day":"每日僅可簽到一次,請勿重複簽到","You can still edit non-sensitive operations fields such as models, groups, priority, and weight.":"你仍可編輯模型、分組、優先級和權重等非敏感運維欄位。","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"你承諾不會使用本系統實施、協助實施或間接實施違反適用法律法規、監管要求、平台規則、公共利益或第三方合法權益的行為。","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"你承諾僅在從上游服務供應商、模型服務供應商或相關權利人處獲得合法授權的範圍內使用上游 API、用戶、金鑰、額度和服務能力,並不會進行未經授權的轉售、倒賣、分發或其他不合規商業化行為。","You do not have permission to edit channels":"你沒有編輯通道的權限","You do not have permission to edit sensitive channel settings.":"你沒有權限編輯敏感渠道設定。","You do not have permission to perform this action.":"你沒有執行此操作的權限。","You don\'t have necessary permission":"您沒有必要的權限","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"你已合法取得所連接模型 API、用戶、金鑰和額度的授權。","You have unsaved changes":"您有未儲存的變更","You have unsaved changes. Are you sure you want to leave?":"您有未儲存的變更。確定要離開嗎?","You Pay":"您支付","You save":"您節省","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"你理解並獨立承擔因部署、運營和收費行為產生的法律責任。","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"你理解此合規提醒僅用於風險提示,不構成法律意見、合規審查結論或對你使用本系統合法性的保證;你應結合實際業務場景諮詢專業法律或合規顧問。","You will be redirected to Telegram to complete the binding process.":"您將被重新導向到 Telegram 以完成連結過程。","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"您將被自動重新導向。如果幾秒鐘後無反應,您可以返回上一頁。","Your account can edit sensitive channel settings.":"你的賬號可以編輯敏感渠道設定。","Your account cannot edit sensitive channel settings.":"你的賬號不能編輯敏感渠道設定。","{{name}} called {{count}} times, cost {{quota}}":"{{name}} 呼叫 {{count}} 次,呼叫花費 {{quota}}","your AI integration?":"你的 AI 整合了嗎?","Your Azure OpenAI endpoint URL":"您的 Azure OpenAI 端點 URL","Your Bot Name":"您的機械人名稱","Your changes have not been saved.":"變更尚未儲存。","Your Cloudflare Account ID":"您的 Cloudflare 用戶 ID","Your Discord OAuth Client ID":"您的 Discord OAuth 用戶端 ID","Your Discord OAuth Client Secret":"您的 Discord OAuth 用戶端密鑰","{{provider}} login and registration has not been enabled by administrator":"管理員未開啟透過 {{provider}} 登入及註冊","{{provider}} returned empty user info, please check settings":"{{provider}} 回傳的使用者資訊為空,請檢查設定","{{provider}} top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"{{provider}} 儲值成功,儲值額度:{{quota}},支付金額:{{amount}}","Your GitHub OAuth Client ID":"您的 GitHub OAuth 用戶端 ID","Your GitHub OAuth Client Secret":"您的 GitHub OAuth 用戶端密鑰","Your identity has been verified. Continue to the provider to finish linking your account.":"身分驗證已通過,請前往服務提供商完成帳戶綁定。","Your new backup codes are ready":"您的新備份代碼已準備就緒","Your Referral Link":"您的推薦連結","Your setup guide is collapsed so usage stays in focus.":"設定引導已收起,讓用量資訊保持在焦點位置。","Your Telegram Bot Token":"您的 Telegram 機械人令牌","Your transaction history will appear here":"您的交易歷史會顯示在這裡","Your Turnstile secret key":"您的 Turnstile 金鑰","Your Turnstile site key":"您的 Turnstile 站點金鑰","Zero retention":"零數據保留","Zhipu":"智譜","Zhipu GLM":"智譜GLM","Zhipu V4":"智譜 V4","Zoom":"縮放"}}'),F=JSON.parse('{"translation":{"360":"360","1000":"1000","10000":"10000","{{count}} outside this view":"其中 {{count}} 个不在当前视图","_copy":"_复制",",":",",", and":",和",",and ":",并","、":"、","? This action cannot be undone.":"?此操作无法撤销。",". Please fix the JSON before saving.":"。请在保存前修复 JSON。",". This action cannot be undone.":"。此操作无法撤销。","...":"...","\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"":"\\"default\\": \\"us-central1\\", \\"claude-3-5-sonnet-20240620\\": \\"europe-west1\\"","({{total}} total, {{omit}} omitted)":"(共 {{total}} 个,省略 {{omit}} 个)","(billed as vip itself, so base ratio of vip)":"(按 vip 自身计费,取 vip 的基础倍率)","(falls back to billing as vip, so base ratio of vip)":"(回退按 vip 计费,用 vip 的基础倍率)","(hits the override rule above)":"(命中上面的覆盖规则)","(ID: {{id}})":"(ID: {{id}})","(instead of {{ratio}})":"(原本是 {{ratio}})","(Leave empty to dissolve tag)":"(留空以删除标签)","(matrix cell vip × premium is set)":"(矩阵单元 vip × premium 已设置)","(no matrix cell, so base ratio of default; the vip 0.8 is irrelevant)":"(无矩阵单元,取 default 的基础倍率;vip 的 0.8 与此无关)","(no override rule, so base ratio of default; the 0.8 of vip plays no part)":"(没有覆盖规则,用 default 的基础倍率;vip 自己的 0.8 不参与)","(Optional: redirect model names)":"(可选:重定向模型名称)","(Override all channels\' groups)":"覆盖所有渠道的分组","(Override all channels\' models)":"覆盖所有渠道的模型","[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]":"[{\\"ChatGPT\\":\\"https://chat.openai.com\\"},{\\"Lobe Chat\\":\\"https://chat-preview.lobehub.com/?settings={...}\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]":"[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"color\\":\\"#1677FF\\"}]","[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]":"[{\\"name\\":\\"支付宝\\",\\"type\\":\\"alipay\\",\\"icon\\":\\"SiAlipay\\"}]","{\\"original-model\\": \\"replacement-model\\"}":"{\\"original-model\\": \\"replacement-model\\"}","{{bytes}} bytes":"{{bytes}} 字节","{{category}} Models":"{{category}} 模型","{{channels}} channels, {{tasks}} in-flight tasks":"{{channels}} 个渠道,{{tasks}} 个在途任务","{{completed}}/{{total}} completed":"已完成 {{completed}}/{{total}}","{{condition}} ({{timezone}})":"{{condition}}({{timezone}})","{{count}} / {{max}} groups selected":"已选择 {{count}} / {{max}} 个分组","{{count}} announcements will be removed from the list.":"将从列表中移除 {{count}} 条公告。","{{count}} API shortcuts will be removed from the list.":"将从列表中移除 {{count}} 个 API 快捷方式。","{{count}} available channels":"{{count}} 个可用渠道","{{count}} channel(s) deleted":"已删除 {{count}} 个渠道","{{count}} channel(s) disabled":"已禁用 {{count}} 个渠道","{{count}} channel(s) enabled":"已启用 {{count}} 个渠道","{{count}} channel(s) failed to disable":"{{count}} 个渠道禁用失败","{{count}} channel(s) failed to enable":"{{count}} 个渠道启用失败","{{count}} combinations":"{{count}} 个组合","{{count}} days ago":"{{count}} 天前","{{count}} days remaining":"剩余 {{count}} 天","{{count}} disabled channel(s) deleted":"已删除 {{count}} 个已禁用的渠道","{{count}} enabled channels and {{tasks}} in-flight tasks still use this plugin.":"仍有 {{count}} 个启用渠道和 {{tasks}} 个在途任务使用此插件。","{{count}} enabled groups":"{{count}} 个启用分组","{{count}} FAQ entries will be removed from the list.":"将从列表中移除 {{count}} 个 FAQ 条目。","{{count}} hours ago":"{{count}} 小时前","{{count}} incidents":"{{count}} 起事件","{{count}} incidents in the last 24 hours":"最近 24 小时 {{count}} 个异常桶","{{count}} incidents in the last 30 days":"最近 30 天 {{count}} 起事件","{{count}} IP(s)":"{{count}} 个 IP","{{count}} linked model records":"{{count}} 条关联模型记录","{{count}} log entries removed.":"已删除 {{count}} 条日志。","{{count}} minutes ago":"{{count}} 分钟前","{{count}} model mapping(s)":"{{count}} 条模型映射","{{count}} model(s) redirected":"已重定向 {{count}} 个模型","{{count}} model(s) skipped because another model derives the same request name":"{{count}} 个模型与其他模型生成了相同的请求名,已跳过","{{count}} model(s) unchanged by the rule were skipped":"{{count}} 个模型不受规则影响,已跳过","{{count}} models":"{{count}} 个模型","{{count}} months ago":"{{count}} 个月前","{{count}} override":"{{count}} 个覆盖","{{count}} permissions":"{{count}} 项权限","{{count}} permissions are no longer available":"{{count}} 项权限不在当前权限目录中","{{count}} providers":"{{count}} 个服务方","{{count}} records selected. Bulk actions are available.":"已选择 {{count}} 条记录,可执行批量操作。","{{count}} selected":"已选择 {{count}} 条","{{count}} selected models":"已选 {{count}} 个模型","{{count}} selected outside the current filters":"另有 {{count}} 个已选模型不在当前筛选范围内","{{count}} selected targets available for bulk copy.":"已选择 {{count}} 个目标,可用于批量复制。","{{count}} tiers":"{{count}} 档","{{count}} Uptime Kuma groups will be removed from the list.":"将从列表中移除 {{count}} 个 Uptime Kuma 分组。","{{count}} vendors":"{{count}} 家厂商","{{count}} weeks ago":"{{count}} 周前","{{created}} models created, {{updated}} models updated, {{vendors}} vendors created.":"已创建 {{created}} 个模型,更新 {{updated}} 个模型,新增 {{vendors}} 个供应商。","{{currency}} / {{unit}} tokens":"{{currency}} / {{unit}} Token","{{currency}} price per 1M input tokens.":"每百万输入 Token 的价格,单位为 {{currency}}。","{{currency}} price per 1M tokens.":"每百万 Token 的价格,单位为 {{currency}}。","{{field}} updated to {{value}}":"{{field}} 已更新为 {{value}}","A channel test task is already running or queued. Cannot start this manual task":"已有通道测试任务正在运行或等待中,不能启动本次手动任务","a dashboard login session is required":"需要控制台登录会话","{{field}} updated to {{value}} for tag: {{tag}}":"标签「{{tag}}」的 {{field}} 已更新为 {{value}}","{{first}} and {{second}}":"{{first}}且{{second}}","A model update task is already running or queued. Cannot start this manual task":"已有模型更新任务正在运行或等待中,不能启动本次手动任务","{{first}} or {{second}}":"{{first}}或{{second}}","A repair task is already running. Please try again later":"已经有一个修复任务在运行中,请稍后再试","{{key}} · from {{source}}":"{{key}} · 来自 {{source}}","{{key}} · version {{version}} · from {{source}}":"{{key}} · 版本 {{version}} · 来自 {{source}}","A token can select at most {{max}} Auto groups":"每个令牌最多可选择 {{max}} 个 Auto 分组","{{method}} {{route}}":"{{method}} {{route}}","{{modality}} not supported":"不支持 {{modality}}","{{modality}} supported":"支持 {{modality}}","{{n}} model(s) selected":"已选 {{n}} 个模型","{{operation}} (ID: {{id}})":"{{operation}}(ID: {{id}})","{{percent}}% OFF":"优惠 {{percent}}%","{{processed}} of {{total}} log entries processed.":"已处理 {{processed}} / {{total}} 条日志。","{{protocol}} auth name":"{{protocol}} 认证名称","{{protocol}} auth value":"{{protocol}} 认证值","{{protocol}} authentication":"{{protocol}} 认证","{{selected}} of {{total}} changed fields selected":"已勾选 {{selected}} / {{total}} 个变更字段","{{start}}–{{end}}":"{{start}}至{{end}}","{{success}} succeeded, {{failed}} failed":"{{success}} 个成功,{{failed}} 个失败","{{target}} test failed":"{{target}} 测试失败","{{target}} test succeeded":"{{target}} 测试成功","{{total}} models · {{syncable}} syncable · {{skipped}} skipped this time":"共 {{total}} 个模型 · 可同步 {{syncable}} · 本次不处理 {{skipped}}","{{unit}} tokens":"{{unit}} token","{{value}} tokens/s":"{{value}} Token/秒","{{value}}ms":"{{value}} 毫秒","{{value}}s":"{{value}} 秒","@lobehub/icons key":"@lobehub/icons 键","@lobehub/icons key name":"@lobehub/icons 键名","/status/":"/status/","/your/endpoint":"/your/endpoint","#1 App":"#1 应用","#1 by usage":"使用量第一","Access token expiry must be at least one hour from now.":"访问令牌的过期时间必须至少在一小时之后。","Access token name must be 1 to 64 characters.":"访问令牌名称必须为 1 到 64 个字符。","access token not found":"未找到访问令牌","#1 Model":"#1 模型","% off":"折","`, `-nothinking`, and effort suffixes such as `-high` while routing to the correct Gemini variant. When off, model names are sent upstream unchanged.":"`、`-nothinking` 以及 `-high` 等推理强度后缀,同时路由到正确的 Gemini 变体。关闭后模型名原样发送给上游。","© 2025 Your Company. All rights reserved.":"© 2025 您的公司。保留所有权利。","+{{count}} more":"还有 {{count}} 项","| Based on":"| 基于","0 means data is kept permanently":"0 表示永久保留数据","0 means unlimited":"0 表示不限","1 Day":"1 天","1 day ago":"1 天前","1 hour":"1 小时","1 Hour":"1 小时","1 hour ago":"1 小时前","1 minute":"1 分钟","1 minute ago":"1 分钟前","1 Month":"1 个月","1 month ago":"1 个月前","1 week ago":"1 周前","1 year":"1 年","1 year ago":"1 年前","1. Create an application in your Gotify server":"1. 在您的 Gotify 服务器中创建一个应用程序","1. Select models users call":"1. 选择用户调用的模型","1. Select upstream models":"1. 选择上游模型","10 / page":"10 条/页","100 / page":"100 条/页","14 Days":"14 天","Action {{action}}":"操作 {{action}}","180 days":"180 天","192.168.1.1 10.0.0.0/8":"192.168.1.1 10.0.0.0/8","1M":"1 个月","1M token":"1M token","1W":"1 周","2. Copy the application token":"2. 复制应用程序令牌","2. Set names users call":"2. 设置用户调用的名称","2. Set upstream model names":"2. 设置发给上游的名称","20 / page":"20 条/页","24 Hours":"24 小时","24 hours ago":"24 小时前","29 Days":"29 天","2xx, 504 and 524 are always excluded.":"2xx、504、524 始终排除。","3. Enter your Gotify server URL and token above":"3. 在上方输入您的 Gotify 服务器 URL 和令牌","3. Review mappings":"3. 确认映射结果","30 days":"30 天","30 Days":"30 天","30 days ago":"30 天前","30d change":"30 天变化","5 minutes":"5 分钟","5-Hour Window":"5小时窗口","50 / page":"50 条/页","7 Days":"7 天","7 days ago":"7 天前","80,443,8080":"80,443,8080","90 days":"90 天","A billing multiplier. Lower ratios mean lower API call costs.":"计费乘数,倍率越低,API 调用费用越低。","A focused home for keys, balance, routing, and service health.":"集中展示密钥、余额、路由和服务健康状态。","A matching hash confirms the published file, not the safety of its code.":"校验一致仅说明文件与发布版本相符,不代表代码安全。","A Passkey created for www.example.com cannot be used on example.com. Keep the old website available so users can still verify there.":"为 www.example.com 创建的通行密钥无法在 example.com 使用。请保留旧网站,让用户仍能在那里验证。","A security operation is already in progress.":"已有安全操作正在进行。","A selected model no longer exists. Reload the model list.":"所选模型已不存在,请重新加载模型列表。","A token that never expires stays valid until you revoke it. Set an expiration date when possible.":"永不过期的令牌在撤销前一直有效,建议设置过期时间。","A vendor with this name already exists.":"此供应商名称已存在。","About":"关于","About {{days}} days left":"约剩 {{days}} 天","About pricing currency":"关于定价货币","Accept Unpriced Models":"接受未定价模型","Accept upstream certificates that fail validation, such as self-signed ones. Only enable for trusted internal upstreams.":"接受无法通过校验的上游证书,例如自签名证书。仅对可信的内网上游开启。","Accepts a JSON array of model identifiers that support the Imagine API.":"接受支持 Imagine API 的模型标识符的 JSON 数组。","Accepts comma-separated status codes and inclusive ranges.":"接受逗号分隔的状态码和包含性范围。","Access a vast selection of models via a standard, unified API protocol. Power AI applications, manage digital assets, and connect the Future.":"通过统一、标准的接口协议接入海量模型。承载 AI 应用,高效管理数字资产,连接未来。","Access Baidu Qianfan models through the legacy API":"通过百度千帆旧版 API 接入模型服务","Access Baidu Qianfan models through the V2 API":"通过百度千帆 V2 API 接入模型服务","Access Codex using ChatGPT subscription credentials":"使用 ChatGPT 订阅凭据接入 Codex","Access Denied Message":"访问被拒绝消息","Access Forbidden":"禁止访问","Access hosted model predictions through Replicate":"通过 Replicate 调用托管模型推理服务","Access model services through MokaAI":"通过 MokaAI 接入模型服务","Access model services through the OhMyGPT gateway":"通过 OhMyGPT 网关接入模型服务","Access models from multiple providers through OpenRouter":"通过 OpenRouter 接入多个供应商的模型","Access models through Amazon Bedrock":"通过 Amazon Bedrock 接入模型服务","Access models through Cloudflare Workers AI":"通过 Cloudflare Workers AI 接入模型服务","Access models through Google Cloud Vertex AI":"通过 Google Cloud Vertex AI 接入模型服务","Access Policy (JSON)":"访问策略 (JSON)","Access previous conversations and start new ones.":"访问之前的对话并开始新的对话。","Access records":"访问记录","Access Token":"访问令牌","Access token expired":"访问令牌已过期","Access token revoked":"访问令牌已撤销","Access tokens":"访问令牌","Access tokens cannot use this feature":"访问令牌不能使用此功能","Access Zhipu models through the legacy API":"通过智谱旧版 API 接入模型服务","Access Zhipu models through the V4 API":"通过智谱 V4 API 接入模型服务","AccessKey / SecretAccessKey":"AccessKey / SecretAccessKey","Account Actions":"账户操作","Account binding":"账户绑定","Account Binding Management":"账户绑定管理","Account binding request":"账户绑定请求","Account Bindings":"账户绑定","Account bindings have changed. Start this operation again.":"账户绑定已变化,请重新操作。","Account created! Please sign in":"账户已创建!请登录","Account deleted successfully":"账户删除成功","Account deletion":"账号注销","Account ID":"账户 ID","Account ID *":"账户 ID *","Account Info":"账户信息","Account password change":"账户密码变更","Account security":"账户安全","Account unlinking":"账户解绑","Account used when authenticating with the SMTP server":"用于与 SMTP 服务器进行身份验证的账户","acknowledge the related legal risks":"确认相关法律风险","Across all groups":"跨所有分组","Action":"操作","Action confirmation":"操作确认","Actions":"操作","Actions for {{name}}":"{{name}} 的操作","Activate / Roll back":"激活 / 回滚","Activate now":"立即激活","Activating...":"激活中...","active":"活跃","Active":"生效","Active apps":"活跃应用","Active Cache Count":"活跃缓存数","Active Files":"活跃文件","Active models":"活跃模型","Active Tasks":"进行中任务","active users":"活跃用户","Active version":"激活版本","Actively check all channels":"主动检查全部渠道","Actively check auto-disable-enabled channels":"主动检查已开启自动禁用的渠道","Actual Amount":"实付金额","Actual Model":"实际模型","Actual Model:":"实际模型:","Adapt `-thinking`, `-nothinking`, and effort suffixes such as `-high` to Anthropic native thinking behavior while keeping billing predictable. When off, model names are sent upstream unchanged.":"将带 `-thinking`、`-nothinking` 以及 `-high` 等推理强度后缀的请求适配为 Anthropic 原生思考请求,并保持计费可预测。关闭后模型名原样发送给上游。","Add":"添加","Add \\"{{value}}\\"":"添加 \\"{{value}}\\"","Add {{added}} models and remove {{removed}} models":"新增 {{added}} 个模型,移除 {{removed}} 个模型","Add {{count}} mapping(s)":"添加 {{count}} 条映射","Add {{title}}":"添加{{title}}","Add a group identifier to the auto assignment list.":"将分组标识符添加到自动分配列表。","Add a new API key by providing necessary info.":"通过提供必要信息添加新的 API 密钥。","Add a new channel by providing the necessary information.":"通过提供必要信息添加新的渠道。","Add a new model to the system by providing the necessary information.":"通过提供必要信息向系统添加新模型。","Add a new user by providing necessary info.":"通过提供必要信息来添加新用户。","Add a new vendor to the system":"向系统添加新供应商","Add a vendor or adjust your search.":"新增供应商或调整搜索条件。","Add an extra layer of security to your account":"为您的账户添加额外的安全层","Add an index URL to browse installable plugins.":"添加一个索引 URL 即可浏览可安装的插件。","Add and submit":"添加后提交","Add Announcement":"添加公告","Add another login method before unlinking this account.":"请先添加其他登录方式,再解除此账户绑定。","Add API":"添加 API","Add API Shortcut":"添加 API 快捷方式","Add at least one condition to this group.":"请为此分组添加至少一个条件。","Add auto group":"添加自动分组","Add Auto group":"添加 Auto 分组","Adjusted by the channel adaptor":"渠道适配器计费调整","Add chat preset":"添加聊天预设","Add condition":"新增条件","Add Condition":"添加条件","Add condition group":"添加条件组","Add credits":"添加额度","Add custom model \\"{{value}}\\"":"添加自定义模型“{{value}}”","Add discount tier":"添加折扣等级","Add each model or tag you want to include.":"添加您想要包含的每个模型或标签。","Add FAQ":"添加问答","Add from available models...":"从可用模型中添加...","Add Funds":"添加资金","Add group":"添加分组","Administrator completed the order, amount added: {{quota}}, payment amount: {{amount}}":"管理员补单成功,充值额度: {{quota}},支付金额: {{amount}}","Administrator reset the quota of subscription plan {{plan_title}} (ID: {{plan_id}})":"管理员重置订阅套餐 {{plan_title}}(ID: {{plan_id}})额度","Add Group":"添加分组","Add group rate limit":"添加组速率限制","Add group rules":"添加分组规则","Add groups in the order they should be tried.":"按尝试顺序添加分组。","Add management route":"添加管理路由","Add Mapping":"添加映射","Add metadata":"补充资料","Add metadata to all selected models first.":"请先为所有选中模型补充元数据。","Add method":"添加方法","Add missing models":"添加缺失模型","Add Mode":"添加模式","Add model":"添加模型","Add Model":"添加模型","Add model pricing":"添加模型定价","Add Models":"新增模型","Add new amount":"添加新金额","Add new redemption code(s) by providing necessary info.":"通过提供必要信息添加新的兑换码。","Add OAuth Provider":"添加 OAuth 提供商","Add param/header":"新增参数/Header","Add payment method":"新增支付方式","Add photos or files":"添加照片或文件","Add prefix":"添加前缀","Add pricing branch":"添加计费分支","Add product":"添加产品","Add Provider":"添加提供商","Add Quota":"添加配额","Add ratio override":"添加倍率覆盖","Add route":"添加路由","Add routes individually or replace them from a template.":"单独添加路由,或使用模板替换现有路由。","Add Row":"添加行","Add rule":"添加规则","Add Rule":"添加规则","Add rule group":"新增规则组","Add rules for a user group":"为用户分组添加规则","Add selectable group":"添加可选分组","Add source":"添加源","Add split":"添加分流","Add subscription":"新增订阅","Add suffix":"添加后缀","Add tags...":"添加标签...","Add template":"添加模板","Add tier":"新增档位","Add time condition":"新增时间条件","Add time rule group":"新增时间规则组","Add to group {{path}}":"向组 {{path}} 添加","Add Uptime Kuma Group":"添加 Uptime Kuma 分组","Add User":"添加用户","Add user group":"添加用户分组","Add Vendor":"添加供应商","Add your API keys, set up channels and configure access permissions":"添加 API 密钥,设置渠道并配置访问权限","Added":"新增","Added {{count}} model(s)":"已添加 {{count}} 个模型","Added {{count}} models from \\"{{name}}\\"":"已从“{{name}}”添加 {{count}} 个模型","Added models":"已新增模型","Added once per request. Set to 0 for usage-only billing.":"每次请求额外收取一次;不收固定费用时填 0。","Added successfully":"新增成功","Added to the usage cost. Set to 0 for no additional charge.":"在用量费用基础上加收的金额,不加收时填 0。","Additional charge":"加收费用","Additional Conditions":"附加条件","Additional information":"附加信息","Additional Information":"附加信息","Additional Limit":"附加额度","Additional Limits":"附加额度","Additional metered capability":"附加计费能力","Additional request domains":"额外访问域名","Additional verification required":"需要进一步验证","Adjust filters, then search to refresh the logs.":"调整筛选条件,然后搜索以刷新日志。","Adjust Quota":"调整额度","Adjust quota for user “{{name}}”":"调整用户「{{name}}」的额度","Adjust response formatting, prompt behavior, proxy, and upstream automation.":"调整响应格式、提示词行为、代理和上游自动化。","Adjust the appearance and layout to suit your preferences.":"调整外观和布局以适应您的偏好。","Adjust user quota":"调整用户额度","Adjustment mode":"调整方式","Admin":"管理员","Admin access required":"需要管理员权限","Admin area":"管理员区域","Admin Channel Permissions":"管理员渠道权限","Admin notes (only visible to admins)":"管理员备注(仅管理员可见)","Admin Only":"仅限管理员","Admin Permissions":"管理员权限","Admin permissions updated":"已更新管理员权限","Administer user accounts and roles.":"管理用户账户和角色。","Administration":"管理","Administrator account":"管理员账户","Administrator username":"管理员用户名","Advance next reset time":"推进下次重置时间","Advanced":"高级","Advanced Configuration":"高级配置","Advanced Custom":"高级自定义","Advanced custom configuration is required":"必须配置高级自定义","Advanced custom configuration requires at least one route":"高级自定义至少需要一个路由","Advanced Custom Routes":"高级自定义路由","Advanced options":"高级选项","Advanced Options":"高级选项","Advanced platform configuration.":"高级平台配置。","Advanced Settings":"高级设置","Advanced text editing":"高级文本编辑","Aesthetic style":"画风","Affected windows:":"影响窗口:","Affinity cache settings":"会话缓存设置","After clicking the button, you\'ll be asked to authorize the bot":"点击按钮后,您将被要求授权机器人","After conversion":"迁移后","After conversion, expression reservation and rounding rules apply. Effective unit prices are preserved; individual rounded charges may differ.":"转换后采用计费表达式的预扣与舍入规则。保留当前生效单价,单笔舍入后的费用可能不同。","Allow users to export logs":"允许用户导出日志","After disabling, it will no longer be shown to users, but historical orders are not affected. Continue?":"禁用后用户端不再展示,但历史订单不受影响。是否继续?","After enabling, client request headers are forwarded to the upstream, excluding standard authentication headers, cookies and transport headers:":"开启后,客户端请求头会转发给上游,但会过滤常见认证头、Cookie 和传输控制头:","After enabling, the original request body is forwarded to the upstream without gateway rewriting:":"开启后,原始请求体将直接发送给上游,网关不再改写请求体:","After enabling, the plan will be shown to users. Continue?":"启用后套餐将在用户端展示。是否继续?","After invalidating, this subscription will be immediately deactivated. Historical records are not affected. Continue?":"作废后该订阅将立即失效,历史记录不受影响。是否继续?","Agent ID":"代理 ID","Agent ID *":"代理 ID *","Aggregate tokens delivered across the platform":"平台累计输出的 Token 量","Aggregate traffic across every category":"聚合所有分类的整体流量","Aggregated across enabled groups":"已聚合各启用分组","Aggregated across the apps below":"已聚合下方应用","Aggregated traffic by upstream model provider":"按上游模型提供商聚合的流量","Aggregated usage metrics and trend charts.":"聚合使用指标和趋势图表。","aggregates 50+ AI providers behind one unified API. Manage access, track costs, and scale effortlessly.":"聚合 50+ AI 提供商于统一 API 之后。轻松管理访问、追踪成本、弹性扩展。","Aggregation bucket":"聚合时间桶","AGPL v3.0 License":"AGPL v3.0 协议","AI Application Infrastructure Foundation":"人工智能应用基座","Already checked in today":"今日已签到","AI model testing environment":"AI模型测试环境","AI models":"AI 模型","AI models supported":"支持的 AI 模型","AI Proxy":"AI Proxy","AI Proxy Library":"AI 代理库","AIGC2D":"AIGC2D","AILS":"AILS","AK/SK mode: use AccessKey|SecretAccessKey|Region":"AK/SK 模式:使用 AccessKey|SecretAccessKey|Region","Ali":"阿里百炼","Alipay":"支付宝","All":"全部","All API tokens":"全部 API 密钥","All categories":"全部分类","All combinations are priced at zero. Matching requests will be billed as free.":"所有组合的价格均为零。匹配的请求将免费计费。","All conditions":"全部满足","All conditions must match before this tier is used.":"所有条件都匹配后才会使用此阶梯。","All edits are overwrite operations. Leave fields empty to keep current values unchanged.":"所有编辑都是覆盖操作。留空字段将保持当前值不变。","All files exceed the maximum size.":"所有文件都超过最大尺寸。","All group names live here. Ratio applies when calls are billed as this group; top-up ratio applies to users whose account is in this group.":"所有分组名称都在这里管理。倍率在调用按该分组计费时生效;充值倍率对所属该分组的用户生效。","All Groups":"所有分组","All groups share one pool of names managed in the pricing group table, but a name plays two different roles: as a user group it describes the user, as a token group it decides routing and billing.":"所有分组共用定价分组表中的同一批名称,但同一个名称有两种角色:作为用户分组表示用户身份,作为令牌分组决定路由和计费。","All models":"所有模型","Announcement #{{index}} content cannot exceed 500 characters":"第{{index}}个公告的内容长度不能超过500字符","Announcement #{{index}} has an invalid publish date format":"第{{index}}个公告的发布日期格式错误","Announcement #{{index}} has an invalid type value":"第{{index}}个公告的类型值不合法","Announcement #{{index}} is missing the content field":"第{{index}}个公告缺少内容字段","Announcement #{{index}} is missing the publish date field":"第{{index}}个公告缺少发布日期字段","Announcement #{{index}} note cannot exceed 100 characters":"第{{index}}个公告的说明长度不能超过100字符","Announcement #{{index}} publish date cannot be empty":"第{{index}}个公告的发布日期不能为空","All Models":"所有模型","All models in use are properly configured.":"所有正在使用的模型都已正确配置。","All Must Match (AND)":"全部满足(AND)","All nodes":"全部节点","All playground messages saved in this browser will be removed. This cannot be undone.":"保存在此浏览器中的所有游乐场消息都将被移除。此操作无法撤销。","All requests":"所有请求","All requests must include":"所有请求必须携带","Announcements cannot exceed 100 entries":"系统公告数量不能超过100个","All results":"全部结果","Another log export is running. Try again after it finishes.":"已有一个日志导出正在进行,请等它完成后再试。","All routes":"全部路由","All Status":"所有状态","All Sync Status":"所有同步状态","All systems operational":"所有系统正常运行","All Tags":"所有标签","All tokens":"全部令牌","All Types":"所有类型","All upstream data is trusted":"所有上游数据均受信任","All users":"全部用户","All Vendors":"所有供应商","All-time":"全部时间","Allocated Memory":"已分配内存","Allow accountFilter parameter":"允许 accountFilter 参数","Allow balance redemption":"允许余额兑换","Allow Claude beta query passthrough":"允许 Claude beta 查询透传","Allow clients to query configured prices via `/api/ratio`.":"允许客户端通过 `/api/ratio` 查询配置的价格。","Allow clients to query configured ratios via `/api/ratio`.":"允许客户端通过 `/api/ratio` 查询配置的比例。","API info #{{index}} contains disallowed content":"第{{index}}个API信息包含不允许的内容","API info #{{index}} description cannot exceed 200 characters":"第{{index}}个API信息的说明长度不能超过200字符","API info #{{index}} has a URL that cannot be parsed: {{error}}":"第{{index}}个API信息的URL无法解析:{{error}}","API info #{{index}} has an invalid color value":"第{{index}}个API信息的颜色值不合法","API info #{{index}} has an invalid URL format":"第{{index}}个API信息的URL格式不正确","API info #{{index}} is missing the color field":"第{{index}}个API信息缺少颜色字段","API info #{{index}} is missing the description field":"第{{index}}个API信息缺少说明字段","API info #{{index}} is missing the route description field":"第{{index}}个API信息缺少线路描述字段","API info #{{index}} is missing the URL field":"第{{index}}个API信息缺少URL字段","API info #{{index}} route description cannot exceed 100 characters":"第{{index}}个API信息的线路描述长度不能超过100字符","API info #{{index}} URL cannot exceed 500 characters":"第{{index}}个API信息的URL长度不能超过500字符","Allow HTTP image requests":"允许 HTTP 图像请求","API info cannot exceed 50 entries":"API信息数量不能超过50个","Allow include usage obfuscation passthrough":"允许 include 用量混淆透传","Allow inference geography passthrough":"允许推理地理位置透传","Allow inference_geo passthrough":"允许 inference_geo 透传","Allow Insecure Origins":"允许不安全来源","Allow listing when a channel is available and the user has group access. This does not change API access.":"允许展示后,仍需有可用渠道,并满足用户分组访问条件。不影响 API 访问权限。","Allow metadata sync":"允许资料同步","Allow new users to register":"允许新用户注册","Allow Private IPs":"允许私有 IP","Allow querying user quota":"允许查询用户额度","Allow registration with password":"允许使用密码注册","Allow requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)":"允许请求私有 IP 范围 (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)","Allow Retry":"允许重试","Allow safety_identifier passthrough":"允许透传 safety_identifier","Allow self-signed or hostname-mismatched SMTP certificates":"允许自签名或主机名不匹配的 SMTP 证书","Allow service_tier passthrough":"允许透传 service_tier","Allow speed passthrough":"允许 speed 透传","Allow updates":"允许更新","Allow upstream callbacks":"允许上游回调","Allow users to check in daily for random quota rewards":"允许用户每日签到获取随机额度奖励","Allow users to enter promo codes":"允许用户输入促销代码","Allow users to log in with password":"允许用户使用密码登录","Allow users to register and sign in with Passkey (WebAuthn)":"允许用户使用通行密钥 (WebAuthn) 注册和登录","Allow users to sign in with Discord":"允许用户使用 Discord 登录","Allow users to sign in with GitHub":"允许用户使用 GitHub 登录","Allow users to sign in with LinuxDO":"允许用户使用 LinuxDO 登录","Allow users to sign in with OpenID Connect":"允许用户使用 OpenID Connect 登录","Allow users to sign in with Telegram":"允许用户使用 Telegram 登录","Allow users to sign in with this provider":"允许用户使用此提供商登录","Allow users to sign in with WeChat":"允许用户使用微信登录","Allow using models without price configuration":"允许使用未配置价格的模型","Allow wallet balance after quota used up":"额度用尽后允许使用钱包余额","Allowed":"允许","Allowed hosts":"允许访问的主机","Allowed Origins":"允许的 Origins","Allowed Passkey websites":"允许使用通行密钥的网站","Allowed Ports":"允许的端口","Allows selected fields to be overwritten after a sync preview. No automatic synchronization.":"允许在预览确认后覆盖所选字段,不会自动同步。","Already have an account?":"已有账户?","Also remove custom pricing":"同时移除自定义定价","Also remove from all channels":"同时从所有渠道移除","Also remove pricing":"同时移除定价","Always matches (default tier).":"始终匹配(默认档位)。","Amount":"金额","Amount cannot be changed when editing.":"编辑时无法更改数量。","Amount discount":"金额折扣","Amount Due":"应付金额","Amount must be a whole number":"金额必须为整数","Amount must be greater than 0":"金额必须大于 0","Amount of quota to credit to user account.":"添加到用户账户的配额数量。","Amount options must be a JSON array":"金额选项必须是 JSON 数组","Amount the user pays to purchase this plan (USD).":"用户购买该套餐需支付的金额(美元)。","Amount the user pays to purchase this plan; the actual currency depends on the payment gateway.":"用户购买该套餐需支付的金额,具体币种由支付渠道决定","Amount to pay:":"待支付金额:","An empty field uses the system website address. If Passkeys already work, keep the existing domain.":"留空时使用系统网站地址。若通行密钥已能正常使用,请保留现有域名。","An expression draft already exists. Open the Expression tab to keep editing it.":"已有计费表达式草稿,请打开“计费表达式”选项卡继续编辑。","An unexpected error occurred":"发生意外错误","An unknown error occurred":"发生未知错误","Analyze data":"分析数据","and":"和","Announcement added. Click \\"Save Settings\\" to apply.":"公告已添加。点击 \\"保存设置\\" 以应用。","Announcement content":"公告内容","Announcement deleted. Click \\"Save Settings\\" to apply.":"公告已删除。点击 \\"保存设置\\" 以应用。","Announcement Details":"公告详情","Announcement displayed to users (supports Markdown & HTML)":"向用户显示的公告(支持 Markdown 和 HTML)","Announcement updated. Click \\"Save Settings\\" to apply.":"公告已更新。点击 \\"保存设置\\" 以应用。","Announcements":"公告","Announcements saved successfully":"公告保存成功","Answer":"答案","Answers for common access and billing questions":"访问与计费常见问题解答","Anthropic":"Anthropic","Anthropic Messages to OpenAI Chat":"Anthropic Messages 到 OpenAI Chat","Anthropic Messages to OpenAI Responses":"Anthropic Messages 到 OpenAI Responses","Any condition":"任一满足","Any Match (OR)":"任一满足(OR)","Anyone can publish an index. A plugin installed from a third-party source has the same access as one you upload by hand: review its source before installing.":"任何人都可以发布索引。从第三方源安装的插件与你手动上传的插件拥有完全相同的权限,请在安装前审查其源码。","API":"API","API Access":"API 访问","API Addresses":"API 地址","API Base URL":"API 基础 URL","API Base URL (Important: Not Chat API)":"API 基础 URL (重要:非聊天 API)","API Base URL (Important: Not Chat API) *":"API 基础 URL (重要:非聊天 API) *","API Base URL *":"API 基础 URL *","API Endpoints":"API 端点","API Info":"API 信息","API info added. Click \\"Save Settings\\" to apply.":"API 信息已添加。点击 \\"保存设置\\" 以应用。","API info deleted. Click \\"Save Settings\\" to apply.":"API 信息已删除。点击 \\"保存设置\\" 以应用。","API info saved successfully":"API 信息保存成功","API info updated. Click \\"Save Settings\\" to apply.":"API 信息已更新。点击 \\"保存设置\\" 以应用。","API key":"API 密钥","API Key":"API 密钥","API Key (one per line for batch mode)":"API 密钥(批量模式下每行一个)","API Key (Production)":"API 密钥(生产)","API Key (Sandbox)":"API 密钥(沙盒)","API Key *":"API 密钥 *","API Key created successfully":"API 密钥创建成功","API Key deleted successfully":"API 密钥删除成功","API Key disabled successfully":"API 密钥禁用成功","API Key enabled successfully":"API 密钥启用成功","API key from the provider":"来自提供商的 API 密钥","API key is loading, please try again in a moment":"API 密钥正在加载,请稍后再试","API key is required":"需要 API 密钥","API Key mode (does not support batch creation)":"API Key 模式(不支持批量创建)","API Key mode: use APIKey|Region":"API Key 模式:使用 APIKey|Region","API Key Quota":"令牌额度","API Key updated successfully":"API 密钥更新成功","API keys":"API 密钥","API Keys":"API 密钥","API Private Key":"API 私钥","API Requests":"API 请求","API secret":"API 秘钥","API token batch deletion":"API 令牌批量删除","API token batch key access":"API 令牌密钥批量查看","API token configuration update":"API 令牌配置更新","API token creation":"API 令牌创建","API token deletion":"API 令牌删除","API token key access":"API 令牌密钥查看","API token management":"API令牌管理","API token status update":"API 令牌状态更新","API URL":"API URL","API usage records":"API使用记录","API version":"API 版本","API Version":"API 版本","API2GPT":"API2GPT","Ascending":"升序","Audio input cost {{quota}}":"音频输入花费 {{quota}}","App":"应用","App rankings shown here are simulated for preview purposes and will be replaced with live usage data once the backend integration is complete.":"此处展示的应用排行为预览模拟数据,待后端对接完成后将替换为真实数据。","Append":"追加","Append mode: New keys will be added to the end of the existing key list":"追加模式:新键将添加到现有键列表的末尾","Append Template":"追加模板","Append to channel":"追加到渠道","Append to End":"追加到末尾","Append to existing keys":"追加到现有密钥","Append value to array / string / object end":"把值追加到数组/字符串/对象末尾","appended":"已追加","Applicable channels":"适用渠道","Applicable conditions":"适用条件","Application":"应用","Applied {{name}} pricing to {{count}} models":"已将 {{name}} 的定价应用到 {{count}} 个模型","Applied changes":"已应用的变更","Applied upstream model changes to {{count}} channels":"对 {{count}} 个渠道应用上游模型变更","Applied upstream model changes to channel (ID: {{id}})":"对渠道(ID: {{id}})应用上游模型变更","Applies to custom completion endpoints. JSON map of model → ratio.":"适用于自定义补全端点。模型 → 比例的 JSON 映射。","Apply":"应用","Apply {{count}} model changes":"应用 {{count}} 个模型的变更","Apply {{field}} for {{name}}":"为 {{name}} 应用{{field}}","Apply All Upstream Updates":"应用所有上游更新","Apply changes":"应用更改","Apply disable rules to upstream request errors and scheduled or bulk health checks":"将停用规则应用于上游请求错误,以及定时或批量健康检查","Apply Filters":"应用筛选器","Apply IP Filter to Resolved Domains":"对已解析的域应用 IP 筛选器","Apply Overwrite":"应用覆盖","Apply plan":"应用方案","Apply reset":"执行重置","Apply selected changes":"确认应用所选变更","Apply Sync":"应用同步","Apply to all rows":"应用到所有行","Apply to draft":"应用到草稿","Applying...":"正在应用...","Approx.":"约","Approximate prices for common specs.":"常见规格的参考价。","apps":"个应用","Apps":"应用","apps tracked":"个应用追踪中","Apps using the most tokens through new-api":"通过 new-api 消耗 Token 最多的应用","are also listed here. Remove them from Models to keep the `/v1/models` response user-friendly and hide vendor-specific names.":"也在此处列出。将它们从模型中移除,以保持 `/v1/models` 响应对用户友好并隐藏供应商特定的名称。","Are you sure you want to delete":"您确定要删除吗","Are you sure you want to delete {{count}} model(s)? This action cannot be undone.":"您确定要删除 {{count}} 个模型吗?此操作无法撤销。","Are you sure you want to delete all auto-disabled keys? This action cannot be undone.":"您确定要删除所有自动禁用的密钥吗?此操作无法撤销。","Are you sure you want to delete channel \\"{{name}}\\"? This action cannot be undone.":"确定要删除渠道 \\"{{name}}\\" 吗?此操作无法撤销。","Are you sure you want to delete deployment \\"{{name}}\\"? This action cannot be undone.":"确定要删除部署 \\"{{name}}\\" 吗?此操作不可撤销。","Are you sure you want to delete group \\"{{name}}\\"? This action cannot be undone.":"确定要删除分组 \\"{{name}}\\" 吗?此操作无法撤销。","Auto group {{group}} is duplicated":"Auto 分组 {{group}} 重复","Auto group {{group}} is unavailable or unauthorized":"Auto 分组 {{group}} 不可用或无权访问","Are you sure you want to delete model \\"{{name}}\\"? This action cannot be undone.":"确定要删除模型 \\"{{name}}\\" 吗?此操作无法撤销。","Are you sure you want to delete this key? This action cannot be undone.":"您确定要删除此密钥吗?此操作无法撤销。","Are you sure you want to disable all enabled keys?":"您确定要禁用所有已启用的密钥吗?","Are you sure you want to enable all keys?":"您确定要启用所有密钥吗?","Are you sure you want to enable plugin {{name}} ({{key}})?":"确定要启用插件 {{name}}({{key}})吗?","Are you sure you want to manually complete this order? The user will be credited with the corresponding quota.":"您确定要手动完成此订单吗?用户将获得相应的配额。","Are you sure you want to sign out? You will need to sign in again to access your account.":"您确定要退出登录吗?您需要再次登录才能访问您的账户。","Are you sure you want to unbind {{provider}} for this user? The user will no longer be able to log in via this method.":"确定要解绑该用户的 {{provider}} 绑定吗?解绑后该用户将无法通过此方式登录。","Are you sure you want to unbind {{provider}}? You will no longer be able to log in via this method.":"确定要解绑 {{provider}} 吗?解绑后将无法通过此方式登录。","Are you sure?":"您确定吗?","Area Chart":"面积图","Args (space separated)":"参数 (空格分隔)","Arguments JSON":"参数 JSON","Arguments must be a JSON array":"参数必须是 JSON 数组","Array of chat client presets. Each item is an object with one key-value pair: client name and its URL.":"聊天客户端预设数组。每个项目都是一个对象,包含一个键值对:客户端名称及其 URL。","Artifacts":"制品","Asc":"升序","Ask anything":"随便问","Assign models from the model list to see them here.":"在模型列表中设置供应商归属后,模型将显示在此处。","Assigned by administrator only":"仅管理员分配","Assigned by administrators and used to represent a user level, such as default or vip.":"由管理员分配,用于表示用户等级,例如 default 或 vip。","Async":"异步","Async task polling":"异步任务轮询","Async Task Public Address":"异步任务对外地址","Async task refund":"异步任务退款","At least one model regex pattern is required":"至少需要一个模型正则匹配模式","At least one valid key source is required":"至少需要一个有效的密钥来源","Attach":"附加","Attempt":"尝试","Audio":"音频","Audio and Realtime pricing must be converted manually.":"音频及 Realtime 定价需手动转换。","Audio and text-only requests keep their respective pricing.":"音频请求和纯文本请求分别沿用原计费规则。","Audio comp.":"音频补全","Audio completion ratio":"音频补全倍率","Audio In":"音频输入","Audio input":"音频输入","Audio Input":"语音输入","Audio input price":"音频输入价格","Audio Input Price":"音频输入价格","Audio Out":"音频输出","Audio output":"音频输出","Audio Output":"语音输出","Audio output price":"音频输出价格","Audio output price requires an audio input price.":"音频输出价格需要先填写音频输入价格。","Audio playback failed":"音频无法播放","Audio Preview":"音乐预览","Audio ratio":"音频倍率","Audio requests":"音频请求","Audio Tokens":"语音 Token","Audit access changed. Showing only your records.":"审计访问权限已变更,现仅显示本人的记录。","Audit Logs":"审计日志","Audit metadata is unavailable":"审计附加信息不可用","Audit records start after this feature was enabled. Earlier records remain in Common Logs.":"仅显示此功能启用后的审计记录,历史记录仍在通用日志中。","Auth":"认证","Auth configured":"认证已配置","Auth name":"认证名称","Auth name is required":"认证名称不能为空","Auth Style":"认证方式","Auth type is invalid":"认证类型无效","Auth value":"认证值","Auth value is required":"认证值不能为空","auth.resetPasswordConfirm.backToLogin":"返回登录","auth.resetPasswordConfirm.confirm":"确认重置密码","auth.resetPasswordConfirm.description":"确认重置请求以生成新密码。","auth.resetPasswordConfirm.retry":"重试 ({{seconds}}s)","auth.resetPasswordConfirm.success":"您的密码已成功重置","Authentication":"身份验证","Authentication for upstream requests; channel credentials may still be used.":"用于调用上游服务的认证方式;插件仍可能使用渠道凭据。","Authentication Method":"认证方式","Authenticator code":"身份验证器代码","Authenticator code or backup code":"认证器验证码或备用码","Authorization callback URL":"授权回调 URL","Authorization Endpoint":"授权端点","Authorization Endpoint (Optional)":"授权端点(可选)","Authorize":"授权","Auto":"自动","Auto (Circuit Breaker)":"自动分组(熔断)","Auto assignment order":"自动分配顺序","Auto Ban":"自动封禁","Auto detect (default)":"自动检测(默认)","Auto Disabled":"自动禁用","Bark push URL cannot be empty":"Bark 推送 URL 不能为空","Auto group behavior":"自动分组行为","Auto Group Chain":"自动分组链","Auto group order":"自动分组顺序","Auto groups must not contain duplicates":"Auto 分组不能重复","Auto negotiates HTTP/2 when available. HTTP/1.1 forces multiple keep-alive connections under concurrency.":"自动在可用时协商 HTTP/2。HTTP/1.1 会在并发时使用多条保持连接的连接。","Auto refresh":"自动刷新","Auto refresh (5s)":"自动刷新(5秒)","Auto Sync Upstream Models":"自动同步上游模型","Auto-disable channel":"异常自动禁用","Auto-disable disabled":"不参与自动停用","Auto-disable enabled":"参与自动停用","Auto-disable rules":"自动禁用规则","Auto-disable status codes":"自动禁用状态码","Auto-disable-enabled channels only":"仅测试已开启自动禁用的渠道","Auto-disable-enabled mode probes non-manually-disabled channels with auto-disable enabled.":"此模式仅探测已开启自动禁用且未被手动禁用的渠道。","Auto-discover":"自动发现","Auto-discovers endpoints from the provider":"自动从提供商发现端点","Auto-fill when one field exists and another is missing":"在一个字段有值、另一个缺失时自动补齐","Auto-refreshing every {{seconds}}s":"每 {{seconds}} 秒自动刷新","Auto-retry status codes":"自动重试状态码","Automatic from system website address":"从系统网站地址自动获取","Automatic selection":"自动选择","Automatically disable channel on repeated failures":"重复失败时自动禁用渠道","Automatically disable channels exceeding this response time":"自动禁用超出此响应时间的渠道","Automatically disable channels when tests fail":"当测试失败时自动禁用渠道","Automatically probe all channels in the background":"在后台自动探测所有渠道","Automatically replaces upstream callback URLs with the server address.":"自动将上游回调 URL 替换为服务器地址。","Automatically selects the best available group with circuit breaker mechanism":"自动选择可用分组,失败时触发熔断切换","Automatically sync model list when upstream changes are detected":"检测到上游模型变更时自动同步模型列表","Availability (last 24h)":"可用率(最近 24 小时)","Available":"可用","Available Balance":"可用余额","Available channels: {{count}}":"可用渠道 {{count}}","Available credits are ordered by soonest expiration.":"可用次数按最早到期排序。","Available disk space":"可用磁盘空间","Available Models":"可用模型","Available reset credits":"可用重置次数","Available Rewards":"可用奖励","Available variables: {{provider}}, {{field}}, {{op}}, {{required}}, {{current}}, and paths such as {{current.roles}}.":"可用变量:{{provider}}、{{field}}、{{op}}、{{required}}、{{current}},以及 {{current.roles}} 等路径变量。","Average latency":"平均延迟","Average latency, TTFT, and success rate by group":"各分组的平均延迟、首 Token 延迟和成功率","Average latency, TTFT, TPS, and success rate":"平均延迟、TTFT、TPS 和成功率","Average RPM":"平均 RPM","Average time-to-first-token (TTFT) by group":"各分组的平均首 Token 延迟(TTFT)","Average tokens per second sustained per group":"各分组持续输出的平均每秒 token 数","Average TPM":"平均 TPM","Average TTFT":"平均首 Token 延迟","Awake engines":"已唤醒引擎数","Batch-adding Vertex AI keys requires a JSON array, for example {{example}}. Check the input: {{error}}":"批量添加 Vertex AI 必须使用标准的 JSON 数组格式,例如 {{example}},请检查输入:{{error}}","AWS":"AWS","AWS API":"AWS 接口","AWS Bedrock Claude Compat":"AWS Bedrock Claude 兼容模板","AWS Key Format":"AWS 密钥格式","Azure":"Azure","AZURE_OPENAI_ENDPOINT":"AZURE_OPENAI_ENDPOINT","AZURE_OPENAI_ENDPOINT *":"AZURE_OPENAI_ENDPOINT *","Back":"返回","Back to configuration":"返回配置","Back to Dashboard":"返回控制台","Billed per request":"按次计费","Back to footnote {{id}} reference":"返回脚注 {{id}} 引用处","Back to Home":"返回主页","Back to login":"返回登录","Back to Models":"返回模型","Backed up":"已备份","Billing expressions must be a JSON object mapping models to expressions: {{error}}":"计费表达式配置必须是模型到表达式的 JSON 对象:{{error}}","Background":"后台执行","Background job tracker for queued work.":"队列工作的后台作业跟踪器。","Backup Code":"备用代码","Backup code must be in format XXXX-XXXX":"备份代码必须为 XXXX-XXXX 格式","Backup codes regenerated successfully":"备份代码重新生成成功","Backup codes remaining: {{count}}":"剩余备份代码:{{count}}","Bad Request":"参数错误","Badge Color":"徽章颜色","Billing parameters: {{params}}":"计算参数:{{params}}","Baidu":"百度","Baidu V2":"百度 V2","Balance":"余额","Balance and top-up management":"余额充值管理","Balance depleted":"余额已耗尽","Balance is shown in quota units":"余额以额度单位显示","Balance queried successfully":"余额查询成功","Balance Query":"余额查询","Balance Query route does not support pass-through":"余额查询路由不支持透传","Balance response not recognized":"无法识别余额响应","Balance updated successfully":"余额更新成功","Balance updated: {{balance}}":"余额已更新:{{balance}}","Bar Chart":"柱状图","Bark Push URL":"Bark 推送 URL","Binding successful":"绑定成功","Base":"基础","Base address provided by your Epay service":"您的 Epay 服务提供的基础地址","Base amount. Actual deduction = base amount × system group rate.":"基础金额,实际扣费 = 基础金额 × 系统分组倍率。","Base charge":"基础费用","Base group ratios apply until you add an override.":"未设置覆盖规则时,使用分组基础倍率。","Base input and output token prices for this tier.":"此阶梯的基础输入和输出 token 价格。","Base input price only":"仅基础输入价格","Base Limits":"基础额度","Base multipliers applied when users select specific groups.":"当用户选择特定分组时应用的基础乘数。","Base Price":"基础价格","Base rate limit windows for this account.":"当前账号的基础额度窗口。","Base URL":"API 地址","Base URL *":"基础 URL *","Base URL is required for this channel type":"此渠道类型需要填写 Base URL","Bonus for inviting a user {{quota}}":"邀请用户赠送 {{quota}}","Base URL is required when an advanced route uses an upstream path":"高级路由使用上游路径时必须填写 Base URL","Base URL of your Uptime Kuma instance":"您的 Uptime Kuma 实例的基础 URL","Basic Authentication":"基本身份验证","Basic Configuration":"基本配置","Basic Info":"基本信息","Basic Information":"基本信息","Basic Templates":"基础模板","Batch Add":"批量添加","Batch Add (one key per line)":"批量添加(每行一个密钥)","Batch add mappings":"批量添加映射","Batch channel test":"渠道批量测试","Batch delete API tokens":"批量删除 API 令牌","Batch delete failed":"批量删除失败","Batch deleted {{count}} channels":"批量删除 {{count}} 个渠道","Batch deleted {{count}} redemption codes":"批量删除了 {{count}} 个兑换码","Batch deleted redemption codes (count not recorded)":"批量删除兑换码(数量未记录)","Batch detection complete: {{channels}} channels, {{add}} to add, {{remove}} to remove, {{fails}} failed":"批量检测完成:渠道 {{channels}} 个,新增 {{add}} 个,删除 {{remove}} 个,失败 {{fails}} 个","Batch detection failed":"批量检测失败","Batch disable failed":"批量禁用失败","Batch Edit":"批量编辑","Batch edit all channels with this tag. Leave fields empty to keep current values.":"批量编辑带有此标签的所有渠道。留空字段以保留当前值。","Batch Edit by Tag":"按标签批量编辑","Batch enable failed":"批量启用失败","Batch Operations":"批量操作","Batch processing failed":"批量处理失败","Batch redirect":"批量重定向","Batch set tag for {{count}} channels":"批量为 {{count}} 个渠道设置标签","Batch test completed: {{count}} succeeded":"批量测试完成:{{count}} 个成功","Batch test completed: {{success}} succeeded, {{failed}} failed":"批量测试完成:{{success}} 个成功,{{failed}} 个失败","Batch test stopped: {{completed}}/{{total}} completed, {{success}} succeeded, {{failed}} failed":"批量测试已停止:已完成 {{completed}}/{{total}},{{success}} 个成功,{{failed}} 个失败","Batch testing models...":"正在批量测试模型...","Batch updated channel status ({{count}}/{{total}} changed)":"批量更新渠道状态({{count}}/{{total}} 个已变更)","Batch upstream model update":"上游模型批量更新","Batch upstream model updates applied: {{channels}} channels, {{added}} added, {{removed}} removed, {{fails}} failed":"已批量处理上游模型更新:渠道 {{channels}} 个,加入 {{added}} 个,删除 {{removed}} 个,失败 {{fails}} 个","Before conversion":"迁移前","Best for single-tenant deployments. Pricing and billing options stay hidden.":"适合单用户部署。定价和计费选项将被隐藏。","Best TTFT":"最优 TTFT","Billable image count":"计费图片数量","Billable input tokens":"计费输入 token","Billable output tokens":"计费输出 token","Billable token breakdown":"计价 Token 明细","Billed as default. No cell for this combination, so the base ratio of default applies — the 0.8 of vip plays no part.":"按 default 计费。矩阵中没有这个组合的格子,因此用 default 的基础倍率——vip 自己的 0.8 不参与。","Billed as premium. The highlighted cell matches, so the override 0.3 applies.":"按 premium 计费。命中高亮的格子,因此使用覆盖倍率 0.3。","Billing":"计费","Billing & Payment":"计费与支付","Billing currency":"计费货币","Billing Details":"计费详情","Billing expression":"计费表达式","Billing group":"计费分组","Billing group = default (the token has a group, so use it)":"计费分组 = default(令牌设置了分组,就用令牌的)","Billing group = premium (the token has a group, so use it)":"计费分组 = premium(令牌设置了分组,就用令牌的)","Billing group = vip (the token has no group, so use the user group)":"计费分组 = vip(令牌没设置分组,就用用户自己的分组)","Billing History":"计费历史","Billing management":"充值与订阅管理","Billing Mode":"计费模式","Billing parameters":"计费参数","Billing Path":"计费路径","Billing Process":"计费过程","Billing rule: each call is billed as the token group (falling back to the user group when the token has none). The base ratio always comes from that billing group, not from the user group. To give a user group a special price on another billing group, add an entry in the override matrix.":"计费规则:每次调用按令牌分组计费(令牌未设置分组时回退到用户分组)。基础倍率始终取该计费分组的倍率,而不是用户分组的倍率。若要让某用户分组在使用其他计费分组时享受特殊价格,请在覆盖矩阵中添加条目。","Billing Source":"计费来源","Billing values must be finite and non-negative.":"计费数值必须是有限的非负数。","Bind":"绑定","Bind a Pancake store + product":"绑定 Pancake 店铺和产品","Bind an email address to your account.":"将邮箱地址绑定到您的账户。","Bind Email":"绑定邮箱","Bind task plugins":"绑定任务插件","Bind Telegram Account":"绑定 Telegram 账户","Bind WeChat":"绑定微信","Bind WeChat Account":"绑定微信账户","Binding Information":"绑定信息","Binding successful!":"绑定成功!","Binding Type":"绑定类型","Binding your {{provider}} account":"正在绑定您的 {{provider}} 账号","Binding...":"绑定中...","Bindings":"绑定","Calculating priority...":"正在计算优先级…","Callback URL configuration error":"回调地址配置错误","Blacklist":"黑名单","Blacklist (Block listed domains)":"黑名单(已阻止的域)","Blacklist (Block listed IPs)":"黑名单(已阻止的 IP)","Blank Rule":"空白规则","Cannot create users with permission level equal to or higher than yourself":"无法创建权限大于等于自己的用户","Cannot delete super administrator account":"不能删除超级管理员账户","Cannot delete the last key":"不能删除最后一个密钥","Cannot demote super administrator user":"无法降级超级管理员用户","Cannot disable super administrator user":"无法禁用超级管理员用户","Cannot enable the email domain restriction. Enter the allowed email domains first.":"无法启用邮箱域名限制,请先填入限制的邮箱域名!","Cannot enable Turnstile verification. Enter the Turnstile settings first.":"无法启用 Turnstile 校验,请先填入 Turnstile 校验相关配置信息!","Cannot enable WeChat login. Enter the WeChat login settings first.":"无法启用微信登录,请先填入微信登录相关配置信息!","Cannot enable {{provider}}. Enter the {{provider}} Client ID and Client Secret first.":"无法启用 {{provider}},请先填入 {{provider}} 的 Client ID 和 Client Secret!","Blend":"混合","Block email aliases (e.g., user+alias@domain.com)":"阻止电子邮件别名(例如,user+alias@domain.com)","Blocked keywords":"已阻止的关键词","Blocks messages when sensitive keywords are detected.":"检测到敏感关键词时阻止消息。","Body param":"请求体参数","Boolean":"布尔","Border radius":"圆角","Bot Name":"机器人名称","Bot Protection":"机器人保护","Bot Token":"机器人令牌","Bot:":"机器人:","Bound":"已绑定","Bound a subscription":"绑定了一个订阅","Bound Channels":"绑定渠道","Bound Only":"仅已绑定","Bound product:":"已绑定产品:","Bound store:":"已绑定店铺:","Branch actions {{path}}":"分支 {{path}} 操作","Bring channels back online after successful checks":"检查成功后使渠道恢复在线","Browse and compare":"浏览和比较","Browse available models and pricing":"浏览可用模型和价格","Browse rankings by category":"按行业浏览排行","Browser":"浏览器","Budget tokens = max tokens × ratio. Accepts a decimal between 0.002 and 1. Recommended to keep aligned with upstream billing.":"预算令牌 = 最大令牌数 × 比例。接受 0.002 到 1 之间的十进制数。建议与上游计费保持一致。","Budget tokens = max tokens × ratio. Accepts a decimal between 0.1 and 1.":"预算令牌 = 最大令牌数 × 比例。接受 0.1 到 1 之间的十进制数。","Budget Tokens Ratio":"预算令牌比例","Budgets":"预算","Build on your API gateway in minutes":"几分钟内开始使用你的 API 网关","Built for developers,":"为开发者打造,","Built-in":"内置","Built-in Device":"内置设备","Built-in is v{{factory}}; delete the custom version to return to it":"内置版本为 v{{factory}};删除自定义版本即可恢复","Built-in pricing may become effective again.":"内置定价可能恢复生效。","Built-in v{{factory}} / marketplace v{{market}}":"内置 v{{factory}} / 市场 v{{market}}","Built-in: phone fingerprint/face, or Windows Hello; External: USB security key":"内置:手机指纹/面部,或 Windows Hello;外部:USB 安全密钥","Bulk actions for {{count}} selected records":"对 {{count}} 条所选记录执行批量操作","by":"由","By category":"按行业","By model author":"按模型厂商","By quota":"按额度","By requests":"按请求数","By tokens":"按 Token","Changes save on drop. You can undo the last move.":"松手后自动保存,可撤销上一次调整。","Channel affinity settings are not initialized":"渠道亲和性设置未初始化","Cache":"缓存","Cache create (1h) price":"1 小时缓存写入价格","Cache create price":"缓存写入价格","Cache Creation":"缓存创建","Cache Creation (1h)":"缓存创建 (1h)","Cache Creation (5m)":"缓存创建 (5m)","Cache Directory":"缓存目录","Cache Directory Disk Space":"缓存目录磁盘空间","Cache Directory Info":"缓存目录信息","Channel does not exist":"渠道不存在","Cache Entries":"缓存条目","Cache mode":"缓存模式","Cache pricing":"缓存定价","Cache ratio":"缓存倍率","Cache Read":"缓存读取","Cache read price":"缓存读取价格","Cache repeated prompt prefixes for cheaper, faster reuse":"缓存重复的提示词前缀,复用更快、更省钱","Cache write":"缓存写入","Cache Write":"缓存写入","Cache Write (1h)":"缓存写入 (1h)","Cache Write (5m)":"缓存写入 (5m)","Cache write price":"缓存写入价格","Cached":"缓存","Cached input":"缓存输入","Cached tokens":"缓存令牌","Calculated price: ${{price}} per 1M tokens":"计算价格:${{price}} / 1M tokens","Calculated ratio: {{ratio}}":"计算倍率:{{ratio}}","Calculating...":"计算中...","Call 1: the token group is premium":"调用 ①:令牌分组是 premium","Call 2: the token group is default":"调用 ②:令牌分组是 default","Call 3: the token has no group":"调用 ③:令牌没设置分组","Call Count Distribution":"调用次数分布","Call Count Ranking":"调用次数排行","Call Proportion":"调用比例","Call Trend":"调用趋势","Callback address":"回调地址","Callback Caller IP":"回调调用者 IP","Callback notification URL":"回调通知地址","Callback Payment Method":"回调支付方式","Callback URL format":"回调 URL 格式","Cancel":"取消","Cancelled":"已取消","Cancelled at":"作废于","Capabilities":"能力","Caps the response length":"限制回复长度","Capture a reusable bundle of models, tags, or endpoints.":"捕获可重用的模型、标签或端点捆绑包。","Card view":"卡片视图","Cascade disable channels":"级联禁用渠道","Catalog visibility":"目录展示","Catch-all route must be last for the same incoming path":"同一入口路径的兜底路由必须放在最后","Category":"分类","Category Name":"分类名称","Category name is required":"分类名称不能为空","Category name must be less than 50 characters":"分类名称不能超过 50 个字符","Caution":"注意","CC Switch":"CC Switch","Centered":"居中","Chain":"链路","Change":"更改","Change domain":"更改域名","Change language":"更改语言","Change model vendor":"调整模型供应商","Change Password":"更改密码","Change provider":"更换提供商","Change system settings and custom OAuth providers, and sync prices.":"修改系统设置和自定义 OAuth 提供商,并同步价格。","Change the Passkey domain?":"更改通行密钥域名?","Change To":"更改为","Change upstream model names":"修改发给上游的模型名","Change vendor":"设置供应商","Change your display name and personal settings.":"修改显示名称和个人设置。","Changed":"变更","Changed / Total":"已变更 / 总数","Channel notifications":"渠道通知","Channel priorities changed. Refresh and try again.":"渠道优先级已变更,请刷新后重试。","Channel priorities saved":"渠道优先级已保存","Channel priority is outside the sortable range":"渠道优先级超出可排序范围","Check-in failed, please try again later":"签到失败,请稍后重试","Check-in failed: quota update error":"签到失败:更新额度出错","Check-in feature is not enabled":"签到功能未启用","Changed access token permissions":"修改了访问令牌权限","Changed Fields":"变更字段","Check-in successful":"签到成功","Changed fields: {{fields}}":"修改字段:{{fields}}","Changelog":"更新日志","Changes are written to the settings draft on save.":"保存后会写入设置草稿。","Changes declared endpoint types and custom paths shown to users.":"会修改向用户展示的端点类型和自定义路径。","Changes visibility in the model catalog. Channels remain configured separately.":"会修改模型在目录中的可见性,渠道仍单独配置。","Changes visibility in the model square. Channel status and existing API access are unchanged.":"调整模型在模型广场中的展示,不影响渠道启用状态和已有调用权限。","Changes which model names inherit this metadata. Prices are not inherited.":"会修改哪些模型名称继承此元信息,不会继承价格。","Changing...":"修改中...","Channel":"渠道","Channel {{name}}":"渠道 {{name}}","Channel {{name}} model {{model}}":"渠道 {{name}} 模型 {{model}}","Channel Affinity":"渠道亲和性","Channel affinity reuses the last successful channel based on keys extracted from the request context or JSON body.":"渠道亲和性会基于从请求上下文或 JSON Body 提取的 Key,优先复用上一次成功的渠道。","Channel Affinity: Upstream Cache Hit":"渠道亲和性:上游缓存命中","Channel availability and group access are derived from enabled channels. Importing metadata does not create a callable channel.":"渠道可用性和分组权限由已启用渠道决定。导入资料不会创建可调用的渠道。","Choose a time range of up to {{days}} days. The other filters on this page also apply.":"选择要导出的时间范围,最长 {{days}} 天。页面上的其他筛选条件同样生效。","Channel configuration":"渠道配置","Channel consistency repaired: {{success}} succeeded, {{fails}} failed":"渠道一致性修复完成:{{success}} 个成功,{{fails}} 个失败","Channel copied successfully":"渠道复制成功","Channel created successfully":"渠道创建成功","Channel deleted successfully":"渠道删除成功","Channel disable requested":"已请求停用渠道","Channel disabled successfully":"渠道禁用成功","Channel enabled successfully":"渠道启用成功","Channel error":"渠道错误","Channel Extra Settings":"渠道额外设置","Channel health":"渠道健康","Channel health checks":"渠道健康检查","Channel ID":"渠道 ID","Channel ID is required":"缺少渠道 ID","Channel is not selected":"尚未选择渠道","Channel key":"渠道密钥","Channel key unlocked":"渠道密钥已解锁","Channel Management":"渠道管理","Channel models":"渠道模型","Channel name is required":"渠道名称是必填的","Channel selected":"选择渠道","Channel selection":"渠道选择","Channel switching options":"渠道切换子选项","Channel test completed":"渠道测试完成","Channel test concurrency":"渠道测试并发数","Channel test concurrency must be between 1 and 32":"渠道测试并发数必须在 1 到 32 之间","Channel test mode":"渠道测试模式","Channel type":"渠道类型","Channel type does not match the status endpoint":"渠道类型与状态接口不匹配","Channel type is required":"渠道类型是必填的","Channel types":"渠道类型","Channel types you can use when binding this plugin.":"绑定此插件时可选择的渠道类型。","Channel updated successfully":"渠道更新成功","Channel-specific settings (JSON format)":"渠道特定设置(JSON 格式)","Channel:":"渠道:","channel(s)? This action cannot be undone.":"渠道?此操作无法撤销。","Channels":"渠道","Channels {{channels}} · Groups {{groups}}":"渠道 {{channels}} · 分组 {{groups}}","Channels and groups":"渠道与分组","Channels deleted successfully":"渠道删除成功","Channels must also enable Auto Ban before automatic disabling can take effect.":"各渠道还需开启“自动禁用”,全局禁用规则才会对其生效。","Character chat, storytelling, persona":"角色对话、剧情创作、人设扮演","Charge.":"扣费。","Chart Preferences":"图表偏好设置","Chart Settings":"图表设置","Chat":"聊天","Chat area":"聊天区域","Chat Area":"聊天区域","Chat Client Name":"聊天客户端名称","Chat client name is required":"聊天客户端名称为必填项","Chat configuration JSON":"聊天配置 JSON","Chat preset not found":"未找到聊天预设","Chat Presets":"聊天预设","Chat session management":"聊天会话管理","ChatCompletions -> Responses Compatibility":"ChatCompletions → 响应兼容","ChatGPT Subscription (Codex)":"ChatGPT Subscription (Codex)","Check again":"重新检查","Check channels awaiting recovery only":"仅检查被自动禁用的渠道","Check for new upstream models":"定期发现上游新增模型","Check for updates":"检查更新","Check in daily to receive random quota rewards":"每日签到可获得随机额度奖励","Check in now":"立即签到","Check line {{line}} for a missing comma.":"请检查第 {{line}} 行是否缺少逗号。","Check out the Quick Start":"请查看 新手入门","Check resolved IPs against IP filters even when accessing by domain":"即使通过域名访问,也对照 IP 过滤器检查解析的 IP","Check the override matrix at row = user group, column = billing group. If that cell is set, use it. Otherwise use the billing group base ratio from the pricing table.":"查覆盖矩阵中「行 = 用户分组、列 = 计费分组」的单元格。若已设置则使用该值,否则使用定价分组表中计费分组的基础倍率。","Check-in failed":"签到失败","Check-in Rewards":"签到奖励","Check-in Settings":"签到设置","Check-in successful! Received":"签到成功!获得","Checked in":"已签到","Checking connection":"检查连接","Checking file integrity...":"正在校验文件…","Checking name...":"正在检查名称...","Checking updates...":"检查更新中...","Checking upstream models. Channel models will only change after confirmation.":"正在检查上游模型,确认后才会修改渠道模型。","checkout.session.completed":"checkout.session.completed","checkout.session.expired":"checkout.session.expired","Checks hourly while you are online, including pre-releases.":"在线时每小时检查一次,包含预发布版本。","Checks text extracted from supported requests against keywords, ignoring case. A match rejects the request before upstream processing and does not affect channel health. Images, audio and generated responses are not checked.":"对支持的请求中提取的文本进行关键词匹配,不区分大小写。命中后在发送上游前拒绝请求,不影响渠道健康状态。不检查图片、音频或生成的响应内容。","Chinese":"中文","Choose a complete upstream protocol plan or edit individual route groups.":"选择完整的上游协议方案,或逐组编辑路由。","Choose a provider or plugin to configure your channel.":"选择提供商或插件,开始配置渠道。","Choose a time at least one hour from now":"请选择至少一小时之后的时间","Choose a username":"选择一个用户名","Choose a valid IANA timezone.":"请选择有效的 IANA 时区。","Choose an amount and payment method":"选择金额和支付方式","Choose and order the groups this API key will try.":"选择并排列此 API 密钥将依次尝试的分组。","Choose another file":"重新选择文件","Choose between default expanded, compact icon-only, or full layout mode":"选择默认展开、紧凑图标模式或完整布局模式","Choose between inset, floating, or standard sidebar layout":"选择嵌入式、浮动式或标准侧边栏布局","Choose between left-to-right or right-to-left site direction":"选择从左到右或从右到左的站点方向","Choose between system preference, light mode, or dark mode":"选择系统偏好、浅色模式或深色模式","Choose channels to sync upstream ratio configurations from":"选择要同步上游比例配置的渠道","Choose file":"选择文件","Choose Group":"选择分组","Choose how flow widths are calculated.":"选择分流图连线宽度的计算方式。","Choose how quota values are shown to users":"选择如何向用户展示配额值","Choose how the platform will operate":"选择平台的运行模式","Choose how to filter domains":"选择如何过滤域名","Choose how to filter IP addresses":"选择如何过滤 IP 地址","Choose one SMTP transport security mode":"选择一种 SMTP 传输加密方式","Choose price sources":"选择价格来源","Choose the bundle type and define the items inside it.":"选择捆绑包类型并定义其中的项目。","Choose the default charts, range, and time granularity for model analytics.":"选择模型调用分析的默认图表、范围和时间粒度。","Choose the domain used when this Passkey was created, then try again.":"请选择创建此通行密钥时使用的域名,然后重试。","Choose where to fetch upstream metadata.":"选择从何处获取上游元数据。","Choose which charts are selected by default when opening model analytics.":"选择打开模型调用分析时默认选中的图表。","Clamped to":"钳制为","Claude":"Claude","Claude CLI Header Passthrough":"Claude CLI 请求头透传","Claude only":"仅 Claude","Clean":"无冲突","Clean history logs":"清理历史日志","Clean logs":"清理日志","Clean task history":"清理历史任务","Clean up inactive cache":"清理不活跃缓存","Clean Up Log Files":"清理日志文件","Cleaned up {{count}} log files, freed {{size}}":"已清理 {{count}} 个日志文件,释放 {{size}}","Cleaning...":"正在清理...","Cleanup failed":"清理失败","Cleanup Mode":"清理方式","Clear":"清空","Clear all":"清除全部","Clear All":"清除全部","Clear All Cache":"清空全部缓存","Clear all filters":"清除所有筛选","Clear cache for this rule":"清空该规则缓存","Clear chat history":"清空聊天历史","Clear chat history?":"清空聊天历史?","Clear field selection":"取消全选","Clear filters":"清除筛选器","Clear Mapping":"清除映射","Clear mode flags in prompts":"在提示中清除模式标志","Clear node filters":"清空节点筛选","Clear search":"清除搜索","Clear selection":"清除选择","Clear selection (Escape)":"清除选择 (Escape)","Clear vendor":"清除供应商归属","Cleared":"已清空","Cleared {{bindingType}} binding for user {{username}}":"清除用户 {{username}} 的 {{bindingType}} 绑定","Cleared all models":"已清除所有模型","Cleared channel affinity cache":"清除渠道亲和缓存","Cleared disk cache":"清除磁盘缓存","Cleared historical logs":"清理历史日志","Cleared log files":"清理日志文件","Click \\"Create Plan\\" to create your first subscription plan":"点击「新建套餐」创建您的第一个订阅套餐","Click \\"Generate\\" to create a token":"点击“生成”以创建令牌","Click a stage to show or hide that column":"点击某个阶段可显示或隐藏对应的列","Click any category to drill into its models, apps, and trends":"点击任意分类可下钻查看其模型、应用与趋势","Click for details":"点击查看详情","Click save when you\'re done.":"完成後點擊保存。","Click save when you're done.":"完成后点击保存。","Click the button below to bind your Telegram account":"点击下方按钮绑定您的 Telegram 账户","Click to copy":"点击复制","Click to open deployment":"点击打开部署","Click to preview audio":"点击预览音乐","Click to preview video":"点击预览视频","Click to update balance":"点击更新余额","Click to view Codex usage":"点击查看 Codex 使用量","Compliance confirmation fields cannot be changed through the general settings API":"合规确认字段不允许通过通用设置接口修改","Click to view full details":"点击查看详细信息","Click to view full error message":"点击查看完整错误信息","Click to view full prompt":"点击查看完整提示词","Composition failed":"构图失败","Click to view image":"点击查看图片","Client":"客户端","Client header value":"客户端请求头值","Client headers override the gateway defaults and may cause upstream errors":"客户端请求头会覆盖网关默认请求头,可能导致上游报错","Client ID":"Client ID","Client information such as User-Agent and IP is exposed to the upstream":"客户端信息(如 User-Agent、IP)会暴露给上游","Client model":"客户端 model","Client model matching":"客户端 model 匹配","Client model matching help":"客户端 model 匹配帮助","Client Secret":"Client Secret","Close":"关闭","Close dialog":"关闭对话框","Close menu":"关闭菜单","Close panel":"关闭面板","Close the panel to edit here":"关闭面板并在此编辑","Close Today":"今日关闭","Cloudflare":"Cloudflare","CNY":"元","CNY per USD":"人民币兑美元汇率","Code":"代码","Code generation, refactoring, autocomplete":"代码生成、重构、自动补全","Code interpreter":"代码解释器","Code samples":"调用示例","Codes copied!":"代码已复制!","Codex":"Codex","Codex Account & Usage":"Codex 账户和用量","Codex Account Status":"Codex 账号状态","Codex channels do not support batch creation":"Codex 渠道不支持批量创建","Codex channels use an OAuth JSON credential as the key.":"Codex 渠道使用 OAuth JSON 凭据作为密钥。","Codex CLI Header Passthrough":"Codex CLI 请求头透传","Codex credential must be a JSON object with access_token and account_id":"Codex 凭据必须是包含 access_token 和 account_id 的 JSON 对象","Cohere":"Cohere","Collapse":"收起","Collapse all":"全部折叠","Collapse All":"全部收起","Collapse panel":"折叠面板","Collect relay latency and success-rate metrics for the model square.":"收集 Relay 延迟和成功率指标,用于模型广场展示。","Color":"颜色","Color is required":"颜色为必填项","Color preset":"颜色预设","Color:":"颜色:","Comfortable":"宽松","Coming Soon!":"即将推出!","Comma-separated exact model names. Prefix with regex: to ignore by regular expression.":"使用英文逗号分隔精确模型名。以 regex: 开头可使用正则表达式忽略。","Comma-separated list of allowed ports (empty = all ports)":"允许的端口的逗号分隔列表(留空 = 所有端口)","Comma-separated model names (leave empty to keep current)":"逗号分隔的模型名称(留空以保持当前设置)","Comma-separated model names, e.g., gpt-4,gpt-3.5-turbo":"逗号分隔的模型名称,例如 gpt-4,gpt-3.5-turbo","Command":"命令","Common":"通用","Common Keys":"常用 Key","Common Logs":"通用日志","Common pitfall: the user group base ratio is NOT a personal discount. It only applies when the user group itself is the billing group.":"常见误区:用户分组的基础倍率不是个人折扣,只有当用户分组本身就是计费分组时才会生效。","Common ports include 25, 465, and 587":"常用端口包括 25、465 和 587","Common User":"普通用户","Community driven, self-hosted, and extensible":"社区驱动、可自托管、易于扩展","Compact":"紧凑","Compare each vendor\'s token share across the past few weeks":"对比过去几周各厂商的 Token 份额","Compare each vendor\'s token share across the past year":"对比过去一年各厂商的 Token 份额","Compare each vendor\'s token share over the past 24 hours":"对比过去 24 小时各厂商的 Token 份额","Compare each vendor\'s token share over the past month":"对比过去一个月各厂商的 Token 份额","Compare each vendor\'s token share since launch":"对比自上线以来各厂商的 Token 份额","Compare prices and choose a source for each model.":"对比价格,按模型选择来源。","Compare the most popular models on the platform":"对比平台上最受欢迎的模型","Comparison operator":"比较运算符","compatible API routes":"兼容 API 路由","Compatible API routes for common AI application workflows":"兼容常见 AI 应用工作流的 API 路由","Compatible Passkey domains":"兼容的通行密钥域名","Compilation failed":"编译失败","Complete API documentation with multi-language SDK support":"完整的 API 文档,支持多语言 SDK","Complete Order":"补单","Complete sign-in":"完成登录","Complete the invalid fields before saving or switching modes. The last valid expression is preserved.":"请先修正无效字段,再保存或切换模式。上次有效的表达式已保留。","Complete these steps to finish the initial installation.":"完成这些步骤以完成初始安装。","Complete top-up orders and manage subscription plans and user subscriptions.":"完成充值订单,并管理订阅套餐和用户订阅。","Completed":"已完成","Completed security verification":"完成了安全验证","Completed top-up order for the user":"为用户完成补单","Completion":"补全","Completion price":"补全价格","Completion price ($/1M tokens)":"完成价格(美元/百万令牌)","Completion ratio":"补全倍率","Compliance confirmation required":"需要确认合规条款","Compliance confirmed":"合规已确认","Compliance confirmed successfully":"合规确认成功","Concatenate channel system prompt with user's prompt":"将渠道系统提示与用户的提示连接起来","Condition {{path}}":"条件 {{path}}","Condition actions {{path}}":"条件 {{path}} 操作","Condition group":"条件组合","Condition group {{path}}":"条件组 {{path}}","Condition input":"条件变量","Condition Path":"条件路径","Condition Settings":"条件项设置","Condition value":"条件值","Condition Value":"条件值","Conditional multipliers":"条件乘数","Conditions":"条件","Conditions (AND)":"条件(AND)","Confidence":"置信度","Configuration":"配置","Configuration File":"配置文件","Configuration for Creem payment integration":"Creem 支付集成的配置","Configuration for Epay payment integration":"Epay 支付集成的配置","Configuration for Stripe payment integration":"Stripe 支付集成的配置","Configuration required":"需要配置","Configure":"配置","Configure a Creem product for user recharge options.":"为用户充值选项配置 Creem 产品。","Configure a custom ratio for \\"{{userGroup}}\\" users when using a specific token group.":"为“{{userGroup}}”用户使用指定令牌分组时设置自定义倍率。","Configure a custom ratio for when users use a specific token group.":"配置用户使用特定令牌分组时的自定义倍率。","Configure a group that users can select when creating API keys.":"配置用户在创建 API 密钥时可以选择的分组。","Configure a new custom OAuth provider for user authentication.":"配置新的自定义OAuth提供商用于用户认证。","Configure a payment method for user recharge options.":"配置用于用户充值选项的支付方式。","Configure a predefined chat link for end users.":"为终端用户配置预定义的聊天链接。","Configure an input price before converting this model.":"请先配置输入价格,再转换此模型。","Configure and deploy a new container instance.":"配置并部署一个新的容器实例。","Configure API documentation links for the dashboard":"配置仪表板的 API 文档链接","Configure at:":"配置位置:","Configure available payment methods. Provide a JSON array.":"配置可用的支付方式。提供一个 JSON 数组。","Configure Creem products. Provide a JSON array.":"配置 Creem 产品。提供 JSON 数组。","Configure discount rates based on recharge amounts":"配置基于充值金额的折扣率","Configure endpoint routing, authentication and protocol conversion for different upstream services":"自由配置接口路由、认证与协议转换,适配不同上游服务","Configure experimental data export for the dashboard":"配置仪表板的实验性数据导出","Configure in your Creem dashboard":"在您的 Creem 仪表板中配置","Configure keyword filtering for prompts and responses.":"配置用于提示和响应的关键词过滤。","Configure model, caching, and group ratios used for billing":"配置用于计费的模型、缓存和分组比例","Configure Models":"配置模型","Configure monitoring status page groups for the dashboard":"配置用于仪表板的监控状态页面分组","Configure NODE_NAME":"配置 NODE_NAME","Configure per-model ratio for image inputs or outputs.":"配置图像输入或输出的每模型比例。","Configure per-tool unit prices ($/1K calls). Per-request models do not incur additional tool fees.":"为每个工具配置单价($/1K 次调用)。按请求计费的模型不额外收取工具费用。","Configure pricing ratios for a specific model.":"配置特定模型的定价比例。","Configure rate limiting rules for a specific user group.":"配置特定用户分组的速率限制规则。","Configure routes":"配置路由","Configure task pricing":"配置任务定价","Configure the connection and models, then create the channel.":"配置连接和模型后创建渠道。","Configure the ratio for this group.":"配置此分组的比例。","Configure upstream providers and routing.":"配置上游提供者和路由。","Configure Waffo Pancake hosted checkout integration for USD-priced top-ups":"配置 Waffo Pancake 托管结账,用于美元计价的充值","Configure Waffo payment aggregation platform integration":"配置 Waffo 支付聚合平台集成","Configure your account behavior preferences":"配置您的账户行为偏好","Configure your account preferences and integrations":"配置您的账户偏好和集成","Configured":"已配置","Configured as PayMethods JSON. The type value decides which payment flow is used: stripe for Stripe, waffo_pancake for Waffo Pancake, and other values are sent to Epay as the type parameter.":"保存为 PayMethods JSON。type 值决定点击后使用哪个支付流程:stripe 走 Stripe,waffo_pancake 走 Waffo Pancake,其他值作为 Epay 的 type 参数提交。","Configured routes and latency checks":"已配置路由和延迟检测","Confirm":"确认","Confirm Action":"确认操作","Confirm and enable":"确认并启用","Confirm Batch Update":"确认批量更新","Confirm Billing Conflicts":"确认账单冲突","Confirm both your current and new email addresses to finish this change.":"请确认当前邮箱和新邮箱,完成此次变更。","Confirm changes":"确认变更","Confirm Changes":"确认更改","Confirm Cleanup":"确认清理","Confirm cleanup of inactive disk cache?":"确认清理不活跃的磁盘缓存?","Confirm clearing all channel affinity cache":"确认清空全部渠道亲和性缓存","Confirm clearing cache for this rule":"确认清空该规则缓存","Confirm compliance":"确认合规","Confirm compliance terms":"确认合规条款","Confirm Creem Purchase":"确认 Creem 购买","Confirm delete":"确认删除","Confirm disable":"确认禁用","Confirm email":"确认邮箱","Confirm enable":"确认启用","Confirm invalidate":"确认作废","Confirm log cleanup":"确认日志清理","Confirm log file cleanup?":"确认清理日志文件?","Confirm model changes":"确认模型变更","Confirm New Password":"确认新密码","Confirm password":"确认密码","Confirm Payment":"确认付款","Confirm Selection":"确认选择","Confirm settings and finish setup":"确认设置并完成安装","confirm that I bear legal responsibility arising from deployment":"确认承担因部署","Confirm the final prices and removed settings. Metadata and channel access are not changed.":"请确认最终价格和将移除的配置。元信息与渠道权限不会修改。","Confirm the verification code sent to your new email address.":"请输入发送到新邮箱的验证码。","Confirm Unbind":"确认解绑","Confirm usage reset":"确认重置用量","Confirm your identity before accessing this sensitive action.":"执行此敏感操作前,请先验证身份。","Confirm your identity before changing the account {{username}}.":"修改账号 {{username}} 前,请先验证身份。","Confirm your identity before creating an administrator account.":"创建管理员账号前,请先验证身份。","Confirm your identity before permanently deleting the account {{username}}.":"永久删除账号 {{username}} 前,请先验证身份。","Confirm your identity before removing this Passkey from your account.":"在解绑当前账号的 Passkey 前请确认你的身份。","Confirm your identity before unbinding {{provider}} from this user.":"为该用户解绑 {{provider}} 前,请先验证身份。","Confirm your identity with Two-factor Authentication before registering a Passkey.":"在注册 Passkey 前请使用两步验证确认你的身份。","Confirmed at {{time}} by user #{{userId}}":"用户 #{{userId}} 于 {{time}} 确认","Confirmed payment compliance":"确认支付合规","Confirmed removal of Passkey domains: {{domains}}; affected {{known}}; unknown {{unknown}}":"已确认删除通行密钥域名:{{domains}};已知受影响 {{known}};归属未知 {{unknown}}","Confirming the account linked to your profile.":"正在确认已绑定的账号。","Conflict":"矛盾","Connect":"连接","Connect through OpenAI, Claude, Gemini, and other compatible API routes":"通过 OpenAI、Claude、Gemini 以及其他兼容 API 路由接入","Connect to 360 model services":"接入 360 模型服务","Connect to Alibaba Cloud Bailian model services":"接入阿里云百炼模型服务","Connect to Cohere model services":"接入 Cohere 模型服务","Connect to Coze bots":"接入 Coze 智能体","Connect to DeepSeek model services":"接入 DeepSeek 模型服务","Connect to Dify applications and workflows":"接入 Dify 应用与工作流","Connect to Doubao Seedance video and Seedream image generation through Volcengine Ark":"通过火山方舟接入豆包 Seedance 视频生成与 Seedream 图片生成","Connect to FastGPT applications":"接入 FastGPT 应用","Connect to iFlytek Spark model services":"接入讯飞星火模型服务","Connect to Jimeng image and video generation services":"接入即梦图片与视频生成服务","Connect to Jina embedding and reranking services":"接入 Jina 向量嵌入与重排序服务","Connect to Kling video generation services":"接入可灵视频生成服务","Connect to LingYiWanWu model services":"接入零一万物模型服务","Connect to local or self-hosted Ollama models":"接入本地或自部署的 Ollama 模型服务","Connect to MiniMax model services":"接入 MiniMax 模型服务","Connect to Mistral AI model services":"接入 Mistral AI 模型服务","Connect to model services through a Sub2API gateway":"通过 Sub2API 网关接入模型服务","Connect to models through the Google Gemini API":"通过 Google Gemini API 接入模型服务","Connect to Moonshot AI model services":"接入 Moonshot AI 模型服务","Connect to New API model services with support for multiple task plugins":"接入 New API 网关的模型服务,支持多个任务插件","Connect to OpenAI models deployed on Azure":"接入 Azure 上部署的 OpenAI 模型","Connect to OpenAI Sora video generation services":"接入 OpenAI Sora 视频生成服务","Connect to Perplexity model services":"接入 Perplexity 模型服务","Connect to self-hosted models served by SGLang":"连接通过 SGLang 部署的自托管模型","Connect to self-hosted models served by vLLM":"连接通过 vLLM 部署的自托管模型","Connect to self-hosted models served by Xinference":"接入通过 Xinference 自部署的模型服务","Connect to SiliconFlow model inference services":"接入硅基流动模型推理服务","Connect to Submodel model services":"接入 Submodel 模型服务","Connect to Tencent Hunyuan model services":"接入腾讯混元模型服务","Connect to the Anthropic API or compatible services":"接入 Anthropic API 或兼容其接口的服务","Connect to the OpenAI API or compatible services":"接入 OpenAI API 或兼容其接口的服务","Connect to Vidu video generation services":"接入 Vidu 视频生成服务","Connect to Volcengine Ark model services":"接入火山方舟模型服务","Connect to xAI Grok model services":"接入 xAI Grok 模型服务","Connected to io.net service normally.":"已正常连接 io.net 服务。","Connection & Models":"连接与模型","Connection closed":"连接已关闭","Connection error":"连接错误","Connection failed":"连接失败","Connection info detected in clipboard":"检测到剪贴板中的连接信息","Connection info filled in":"连接信息已填入","Connection settings":"连接配置","Connection settings changed. Fetch models again to refresh the list.":"连接配置已更改,请重新获取模型列表。","Connection successful":"连接成功","Console":"控制台","Console area":"控制台区域","Console Area":"控制台区域","Console Content":"控制台内容","Consume":"消耗","Consumed in the last 24 hours":"近 24 小时消耗量","Container":"容器","Container name":"容器名称","Containers":"容器","Contains":"包含","Contains Match":"包含匹配","Content":"内容","Content displayed on the home page (supports Markdown)":"主页上显示的内容(支持 Markdown)","Content not found.":"内容未找到。","Content not modified!":"内容未修改!","Content width":"内容宽度","Context":"上下文","Continue":"继续","Continue account binding":"继续绑定账户","Continue with {{name}}":"使用 {{name}} 继续","Continue with an account already linked to your profile.":"使用已绑定的账号继续验证。","Continue with Discord":"使用 Discord 继续","Continue with GitHub":"使用 GitHub 继续","Continue with LinuxDO":"使用 LinuxDO 继续","Continue with OIDC":"使用 OIDC 继续","Continue with Telegram":"使用 Telegram 继续","Continue with WeChat":"使用 微信 继续","Contract review, compliance, summarisation":"合同审阅、合规与摘要","Control which models are exposed and which groups may use them.":"控制对外暴露的模型,以及哪些分组可以使用它们。","Controls catalog visibility. Channel availability is configured separately.":"控制目录中的展示,渠道可用性需单独配置。","Controls how much the model thinks before answering":"控制模型回答前的推理深度","Controls randomness and creativity":"控制输出的随机性和创造性","Controls visibility in the model square. Channel status and existing API access are unchanged.":"控制模型在模型广场中的展示,不影响渠道启用状态和已有调用权限。","Controls whether user verification (biometrics/PIN) is required during Passkey flows.":"控制在通行密钥流程中是否需要用户验证(生物识别/PIN)。","Conversation cleared":"对话已清空","Conversion rate from USD to your custom currency":"从美元到您的自定义货币的转换率","Convert reasoning_content to tag in content":"将 reasoning_content 转换为 content 中的 标签","Convert string to lowercase":"把字符串转成小写","Convert string to uppercase":"把字符串转成大写","Convert to expression":"转换为计费表达式","Converter":"转换器","Converter does not match incoming path":"转换器与入口路径不匹配","Converter is not registered":"转换器未注册","Copied":"已复制","Copied {{count}} key(s)":"已复制 {{count}} 个密钥","Copied channel (source ID: {{sourceId}}) to {{name}} (new ID: {{id}})":"复制渠道(源 ID: {{sourceId}})为 {{name}}(新 ID: {{id}})","Copied to clipboard":"已复制到剪贴板","Copied: {{model}}":"已复制: {{model}}","Copied!":"已复制!","Copy":"复制","Copy {{field}}":"复制{{field}}","Copy {{name}} pricing":"复制 {{name}} 定价","Copy a request header":"复制请求头","Copy All":"全部复制","Copy all backup codes":"复制所有备份代码","Copy All Codes":"复制所有代码","Copy all models":"复制全部模型","Copy API key":"复制 API 密钥","Copy API URL":"复制 API 地址","Copy base URL":"复制 Base URL","Copy billing expression":"复制计费表达式","Copy callback URL":"复制回调 URL","Copy Channel":"复制渠道","Copy code":"复制代码","Copy Connection Info":"复制连接信息","Copy endpoint path":"复制端点路径","Copy failed":"复制失败","Copy Field":"复制字段","Copy Header":"复制请求头","Copy homepage URL":"复制主页 URL","Copy Key":"复制密钥","Copy Link":"复制链接","Copy model name":"复制模型名称","Copy model names":"复制模型名称列表","Copy plugin key":"复制插件标识","Copy prompt":"复制提示词","Copy ready-to-run curl":"复制可直接运行的 curl","Copy redemption code":"复制兑换码","Copy redirect URL":"复制重定向 URL","Copy referral link":"复制推荐链接","Copy Request Header":"复制请求头","Copy secret key":"复制密钥","Copy selected codes":"复制选定的代码","Copy selected keys":"复制选定的密钥","Copy selected models":"复制已选模型","Copy selected models separated by commas (e.g. a,b)":"复制已选模型,使用英文逗号隔开(例如 a,b)","Copy source field to target field":"把来源字段复制到目标字段","Copy the key and paste it here":"复制密钥并粘贴到这里","Copy this prompt and send it to an LLM (e.g. ChatGPT / Claude) to help design your billing expression.":"复制以下提示词发送给 LLM(如 ChatGPT / Claude),让它帮你设计计费表达式","Copy this token now. It will not be shown again.":"请立即复制此令牌,之后将不再显示。","Copy to clipboard":"复制到剪贴板","Copy token":"复制令牌","Copy URL":"复制 URL","Copying...":"正在复制...","Copywriting, ad creative, SEO":"文案、广告创意、SEO","Core concepts":"核心概念","Core Configuration":"核心配置","Core Features":"核心功能","Core pricing":"核心定价","Correct the invalid settings before saving.":"请修正无效配置后再保存。","Cost":"费用","Cost = 10 × 0.3 = 3":"费用 = 10 × 0.3 = 3","Cost = 10 × 0.8 = 8":"费用 = 10 × 0.8 = 8","Cost = 10 × 1.0 = 10":"费用 = 10 × 1.0 = 10","Cost = model price × that one ratio. Nothing else from the group settings enters the formula.":"费用 = 模型价格 × 这一个倍率。分组设置里的其他项都不参与该公式。","Cost calculator":"费用试算","Creem webhook is not configured":"Creem Webhook 未配置","CreemProductId is not configured for this plan":"该套餐未配置 CreemProductId","Cost in {{currency}} per request, regardless of tokens used.":"每次请求的费用({{currency}}),与 Token 用量无关。","Cost in USD per request, regardless of tokens used.":"每请求的美元费用,不考虑使用的令牌数。","Cost Tracking":"成本跟踪","Could not fetch the plugin source from this browser. The host may block cross-origin requests or be unreachable.":"无法在浏览器中拉取插件源码。该主机可能禁止跨域请求或无法访问。","Could not fetch this URL from the browser. The host may block cross-origin requests or be unreachable. Download the file and paste its source below.":"无法在浏览器中拉取该 URL。该主机可能禁止跨域请求或无法访问。请下载文件后将源码粘贴到下方。","Could not load the changelog":"无法加载更新日志","Could not load this source":"无法加载该源","Count":"数量","Count must be between {{min}} and {{max}}":"计数必须介于{{min}}和{{max}}之间","Counters and averages cover the period since the upstream metrics were initialized or reset.":"计数和平均值统计自上游指标初始化或重置以来的数据。","Coze":"Coze","CPU":"CPU","CPU Threshold (%)":"CPU 阈值 (%)","Create":"新建","Create a copy of:":"创建副本:","Create a key for your app or service":"为你的应用或服务创建密钥","Create a new user group to configure ratio overrides for.":"创建一个新的用户分组来配置比例覆盖。","Create access token":"创建访问令牌","Create account":"创建账户","Create aliases for users":"给上游模型起别名","Create an account":"创建一个账户","Create an API key to unlock the real request":"创建 API 密钥以解锁真实请求","Create and review invite or credit codes.":"创建和审查邀请或信用代码。","Create API Key":"创建 API 密钥","Create API token":"创建 API 令牌","Create API token “{{name}}”":"创建 API 令牌「{{name}}」","Create cache":"创建缓存","Create cache ratio":"创建缓存倍率","Create Channel":"创建渠道","Create channels or edit keys, base URLs, and overrides.":"创建渠道或编辑密钥、基础 URL 和覆盖规则。","Create Code":"创建代码","Create credentials for the root user":"为管理员创建登录凭据","Create deployment":"创建部署","Create metadata":"创建元信息","Create Model":"创建模型","Create multiple API keys at once (random suffix will be added to names)":"一次性创建多个 API 密钥(名称将添加随机后缀)","Create multiple channels from multiple keys":"从多个密钥创建多个渠道","Create multiple redemption codes at once (1-100)":"一次创建多个兑换码 (1-100)","Create new subscription plan":"创建新的订阅套餐","Create or update frequently asked questions for users":"创建或更新用户的常见问题","Create or update system announcements for the dashboard":"创建或更新仪表板的系统公告","Create Plan":"新建套餐","Create Prefill Group":"创建预填充组","Create Provider":"创建提供商","Create Redemption Code":"创建兑换码","Create request parameter override rules with a visual editor or raw JSON.":"使用可视化编辑器或原始 JSON 创建请求参数覆盖规则。","Create request parameter override rules without editing raw JSON.":"无需编辑原始 JSON 即可创建请求参数覆盖规则。","Create reusable bundles of models, tags, endpoints, and user groups to speed up configuration elsewhere in the console.":"创建模型、标签、端点和用户分组的可重用捆绑包,以加快控制台中其他地方的配置速度。","Create succeeded":"创建成功","Create Vendor":"创建供应商","Create your first group to reuse model, tag, or endpoint selections anywhere in the dashboard.":"创建您的第一个分组,以便在仪表板的任何位置重用模型、标签或端点选择。","Create, edit, and delete API keys.":"创建、编辑和删除 API 密钥。","Create, edit, and delete deployments, and test connections.":"创建、编辑和删除部署,并测试连接。","Create, edit, and delete prefill groups.":"创建、编辑和删除预填充分组。","Create, edit, and delete redemption codes.":"创建、编辑和删除兑换码。","Create, edit, disable, and delete users, and reset their security settings.":"创建、编辑、禁用和删除用户,并重置其安全设置。","Create, revoke, and audit API tokens.":"创建、撤销和审计 API 令牌。","Created":"创建时间","Created {{count}} redemption codes named {{name}} ({{quota}} each)":"创建 {{count}} 个兑换码 {{name}}(每个 {{quota}})","Created {{time}}":"创建于 {{time}}","Custom reset cycle must be greater than 0 seconds":"自定义重置周期需大于0秒","Created a custom OAuth provider":"创建了一个自定义 OAuth 提供方","Created a deployment":"创建了一个部署","Created a model":"创建了一个模型","Created a prefill group":"创建了一个预填组","Created a subscription plan":"创建了一个订阅计划","Created a vendor":"创建了一个供应商","Created an access token":"创建了访问令牌","Created At":"创建时间","Daily check-in, received {{quota}}":"用户签到,获得额度 {{quota}}","Created channel {{name}} (type {{type}}, count {{count}})":"创建渠道 {{name}}(类型 {{type}},数量 {{count}})","Created user {{username}} (role {{role}})":"创建用户 {{username}}(角色 {{role}})","Creates a Pancake product in the saved store using this plan’s title and price. Requires Waffo Pancake to be fully configured in Payment settings first.":"使用此套餐的标题和价格,在已保存的店铺中创建 Pancake 产品。需要先在支付设置中完整配置 Waffo Pancake。","Creating...":"创建中...","Creation failed":"创建失败","Credential refreshed":"凭据已刷新","Credentials":"凭证","Credentials verification failed":"凭证验证失败","Credentials verification failed — double-check Merchant ID and API private key.":"凭证验证失败,请检查 Merchant ID 和 API 私钥。","credit":"credit","Credit remaining":"剩余额度","Creem API key (leave blank unless updating)":"Creem API 密钥(除非更新,否则留空)","Creem Gateway":"Creem 网关","Creem Payment":"Creem 支付","Creem product ID from your Creem dashboard.":"从您的 Creem 仪表板获取 Creem 产品 ID。","Creem products must be a JSON array":"Creem 产品必须是 JSON 数组","Database connection failed":"数据库连接失败","Database error, please contact the administrator":"数据库出错,请联系管理员","Cross-group":"跨分组","Cross-group retry":"跨分组重试","Cumulative usage":"累计用量","Currency":"货币","Currency & Display":"货币与展示","Current":"当前","Current Balance":"当前余额","Current Billing":"当前计费","Current Cache Size":"当前缓存大小","Current domain":"当前域名","Current domain: {{domain}}":"当前域名:{{domain}}","Current email verification code":"当前邮箱验证码","Current email: {{email}}. Enter a new email to change.":"当前邮箱:{{email}}。输入新邮箱以更改。","Current exchange rate: 1 USD = {{rate}} {{currency}}":"当前汇率:1 USD = {{rate}} {{currency}}","Current key":"当前密钥","Current key disable requested":"已请求停用当前密钥","Current legacy JSON is invalid, cannot append":"当前旧格式 JSON 不合法,无法追加模板","Current Level Only":"仅当前层","Current load":"当前负载","Current models for the longest channel in this tag. May not include all models from all channels.":"此标签中最长渠道的当前模型。可能不包括所有渠道的所有模型。","Current models: {{count}}":"当前模型:{{count}} 个","Current month":"本月","Current Password":"当前密码","Current password is incorrect.":"当前密码不正确。","Current period price":"当前时段价格","Current Price":"当前价格","Default group":"默认分组","Current pricing conditions":"当前计价条件","Current quota":"当前额度","Current site: {{origin}}":"当前站点:{{origin}}","Current time":"当前时间","Current token":"当前令牌","Current total = used + remaining. Changing the remaining quota updates the total and percentage.":"当前总额度 = 已用 + 剩余。修改剩余额度后,总额度和已用比例会随之更新。","Current total quota":"当前总额度","Current v{{from}} → install v{{to}}":"当前版本 v{{from}} → 安装版本 v{{to}}","Current value":"当前值","Current Value":"当前值","Current vendor":"当前供应商","Current version":"当前版本","Current:":"当前:","Custom":"自定义","Custom (overrides factory {{version}})":"自定义(覆盖出厂版 {{version}})","Custom (seconds)":"自定义(秒)","Custom Amount":"自定义金额","Custom API base URL. For official channels, New API has built-in addresses. Only fill this for third-party proxy sites or special endpoints. Do not add /v1 or trailing slash.":"自定义 API 基础 URL。对于官方渠道,New API 具有内置地址。仅针对第三方代理站点或特殊端点填写此项。请勿添加 /v1 或尾部斜杠。","Custom API base URL. Leave empty to use provider default.":"自定义 API 基础 URL。留空以使用提供商默认值。","Custom Currency":"自定义货币","Custom Currency Symbol":"自定义货币符号","Custom currency symbol is required":"自定义货币符号为必填项","Custom database driver detected.":"检测到自定义数据库驱动。","Custom endpoints":"自定义端点","Custom Epay method":"自定义 Epay 方式","Custom Error Response":"自定义错误响应","Custom Home Page":"自定义主页","Custom message shown when access is denied":"访问被拒绝时显示的自定义消息","Custom model (comma-separated)":"自定义模型(逗号分隔)","Custom model icon":"自定义模型图标","Custom module":"自定义模块","Custom multipliers when specific user groups use specific token groups. Example: VIP users get 0.9x rate when using \\"edit_this\\" group tokens.":"当特定用户分组使用特定令牌分组时的自定义乘数。示例:VIP 用户在使用“edit_this”分组令牌时获得 0.9 倍费率。","Custom OAuth":"自定义 OAuth","Custom OAuth Providers":"自定义OAuth提供商","Custom Seconds":"自定义秒数","Custom sidebar section":"自定义侧边栏部分","Custom task plugin setting updated":"自定义任务插件设置已更新","Custom Time Range":"自定义时间范围","Custom Zoom":"自定义缩放","Customize sidebar display content":"个性化设置左侧边栏的显示内容","Daily":"每天","Daily Check-in":"每日签到","Daily token usage by model across the past few weeks":"过去几周内按模型分布的每日 Token 使用量","Daily token usage by model across the past month":"过去一个月内各模型的每日 Token 用量","Daily token usage by model over the past month":"过去一个月内按模型分布的每日 Token 使用量","Daily uptime over the last 30 days":"最近 30 天每日可用率","Daily uptime; {{incidents}} incidents totalling {{minutes}} minutes":"每日可用率;{{incidents}} 起事件,总计 {{minutes}} 分钟","Dark":"深色","Dashboard":"数据看板","Dashboard Preferences":"看板偏好设置","Dashboards, tokens, and usage analytics.":"仪表板、令牌和使用分析。","Data Dashboard":"数据仪表板","Data directory:":"数据目录:","Data is stored locally on this device. Use system backups to keep a safe copy.":"数据存储在此设备本地。请使用系统备份来保留安全副本。","Data management and log viewing":"数据管理和日志查看","Data retention":"数据保留","Database":"数据库","Database check":"数据库检查","Date and time when this announcement should be displayed":"此公告应显示的日期和时间","Date Range":"时间范围","Day":"天","Day of month":"日期(日)","days":"天","Days to Retain":"保留天数","decides the top-up ratio, which groups the user can pick for tokens, and whether an override ratio applies.":"决定充值倍率、用户建令牌时可选哪些分组,以及是否命中覆盖倍率。","decides which channels are used and which base ratio applies.":"决定走哪些渠道、用哪个基础倍率。","Declared capabilities":"声明的能力","Decrease quota for user “{{name}}”":"减少用户「{{name}}」的额度","Decrease user quota":"减少用户额度","Decreased user quota by {{quota}}":"减少用户额度 {{quota}}","Deducted by subscription":"由订阅抵扣","DeepSeek":"DeepSeek","default":"默认","Default":"默认","Default / range":"默认值 / 范围","Default administrator permissions can be overridden for this user.":"可以为此用户覆盖默认管理员权限。","Default API address":"默认 API 地址","Default API Version":"默认 API 版本","Default API Version *":"默认 API 版本 *","Default API version for this channel":"此渠道的默认 API 版本","Default base URL":"默认 Base URL","Default Bearer":"默认 Bearer","Default Collapse Sidebar":"默认折叠侧边栏","Default consumption chart":"默认消耗分布图","Default Max Tokens":"默认最大 Token 数","Default model call chart":"默认模型调用图","Default placeholder":"默认占位图标","Default range":"默认范围","Default reminder threshold":"默认提醒阈值","Default Responses API version, if empty, will use the API version above":"默认响应 API 版本,如果为空,将使用上面的 API 版本","Deleted {{count}} auto-disabled keys":"已删除 {{count}} 个自动禁用的密钥","Default session lifetime (seconds)":"默认会话有效期(秒)","Default system prompt for this channel":"此渠道的默认系统提示","Default time granularity":"默认时间粒度","Default to auto groups":"默认使用自动分组","Default TTL (seconds)":"默认 TTL(秒)","Defaults to \\"OIDC\\" if left blank":"留空则默认显示为 \\"OIDC\\"","Defaults to the wallet page when empty":"为空时默认使用钱包页面","Define API endpoints for this model (JSON format)":"为此模型定义 API 端点(JSON 格式)","Define endpoint mappings for each provider.":"为每个提供商定义端点映射。","Define per-group rules to add, remove, or append selectable groups for specific user groups.":"为特定用户组定义按分组规则,以添加、移除或追加可选分组。","Degraded performance recently":"近期性能有所下降","Delete":"删除","Delete (":"删除 (","Delete {{count}} API key(s)?":"删除 {{count}} 个 API 密钥?","Delete {{count}} models?":"删除 {{count}} 个模型?","Delete {{count}} redemption codes?":"删除 {{count}} 个兑换码?","Delete {{count}} selected vendor records? Vendors with linked models cannot be deleted.":"删除选中的 {{count}} 条供应商记录?存在关联模型的供应商无法删除。","Delete {{count}} stale instance records? Online instances will not be deleted.":"删除 {{count}} 条失联实例记录?在线实例不会被删除。","Delete a runtime request header":"删除运行期请求头","Delete Account":"删除账户","Deployment region cannot be empty":"部署地区不能为空","Deployment region must be valid JSON, for example {{example}}":"部署地区必须是标准的 JSON 格式,例如 {{example}}","Deployment region must include a default field":"部署地区必须包含 default 字段","Delete active custom version":"删除当前自定义版本","Delete All Disabled":"删除所有已禁用","Delete All Disabled Channels?":"删除所有已禁用的渠道?","Delete all stale":"删除所有失联","Delete API token":"删除 API 令牌","Delete API token “{{name}}”":"删除 API 令牌「{{name}}」","Delete Auto-Disabled":"删除自动禁用","Delete Channel":"删除渠道","Delete Channels?":"删除渠道?","Delete completed tasks matching the current filters across all pages? Active tasks and the latest run of each task type are retained for scheduling. This cannot be undone.":"清理所有分页中符合当前筛选条件的已结束任务?进行中的任务及每种类型的最新记录将保留,用于任务调度。此操作无法撤销。","Delete condition":"删除条件","Delete Condition":"删除条件","Delete failed":"删除失败","Delete failed models":"删除失败模型","Delete failed models ({{count}})":"删除失败模型({{count}})","Delete Field":"删除字段","Delete group":"删除分组","Delete Header":"删请求头","Delete Invalid":"删除无效","Delete invalid codes":"删除无效代码","Delete invalid codes (used/disabled/expired)":"删除无效代码(已使用/已禁用/已过期)","Delete invalid redemption codes":"删除无效兑换码","Delete Invalid Redemption Codes?":"删除无效的兑换码?","Delete logs":"删除日志","Delete mapping":"删除映射","Delete metadata and custom pricing for {{count}} models?":"删除 {{count}} 个模型的资料及自定义定价?","Delete metadata for \\"{{name}}\\"? Pricing and channel configurations will be retained.":"删除“{{name}}”的元信息?价格和渠道配置将保留。","Delete metadata for \\"{{name}}\\"? Pricing will be retained.":"删除“{{name}}”的模型资料?已有定价将保留。","Delete metadata for {{count}} models? Pricing will be retained.":"删除 {{count}} 个模型的资料?已有定价将保留。","Delete Model":"删除模型","Delete model \\"{{name}}\\"?":"删除模型“{{name}}”?","Delete Models?":"删除模型?","Delete plugin version?":"删除插件版本?","Delete Provider":"删除提供商","Delete Request Header":"删除请求头","Delete rule":"删除规则","Delete Rule":"删除规则","Delete selected API keys":"删除选定的 API 密钥","Delete selected channels":"删除所选渠道","Delete selected models":"删除选定的模型","Delete selected redemption codes":"删除选中的兑换码","Delete session rule “{{name}}”? Save your changes to apply the removal.":"删除会话规则“{{name}}”?保存更改后生效。","Delete stale instance":"删除失联实例","Delete stale instance \\"{{name}}\\"? If it has reported again, it will not be deleted.":"删除失联实例 \\"{{name}}\\"?如果它已经重新上报,将不会被删除。","Delete stale instances":"删除失联实例","Delete vendor record":"删除供应商记录","Delete vendors":"删除供应商","Deleted":"已注销","Deleted \\"{{name}}\\"":"已删除 \\"{{name}}\\"","Deleted ({{id}})":"已删除({{id}})","Deleted {{count}} failed models":"已删除 {{count}} 个失败模型","Deleted {{count}} historical system tasks":"已清理 {{count}} 条历史系统任务","Deleted {{count}} stale instances":"已删除 {{count}} 个失联实例","Deleted a custom OAuth provider":"删除了一个自定义 OAuth 提供方","Deleted a deployment":"删除了一个部署","Deleted a model":"删除了一个模型","Deleted a passkey":"解绑了一个 Passkey","Descending":"降序","Disable tag grouping to drag channels":"关闭标签聚合后可拖拽渠道","Disabled {{count}} keys":"已禁用 {{count}} 个密钥","Deleted a prefill group":"删除了一个预填组","Deleted a redemption code":"删除了一个兑换码","Deleted a vendor":"删除了一个供应商","Deleted all disabled channels ({{count}})":"删除全部禁用渠道({{count}})","Deleted channel {{name}} (ID: {{id}})":"删除渠道 {{name}}(ID: {{id}})","Deleted invalid redemption codes":"删除无效兑换码","Deleted stale instance":"已删除失联实例","Discord ID is empty!":"Discord ID 为空!","Deleted successfully":"删除成功","Deleted tokens":"实际删除数","Deleted user {{username}} (ID: {{id}})":"删除用户 {{username}}(ID: {{id}})","Deleted: {{processed}}":"实际删除 {{processed}} 个","Deleting this custom version does not disable the platform. The same-name factory plugin will be restored automatically.":"删除此自定义版本不会停用平台,同名出厂插件将自动恢复。","Deleting will permanently remove this subscription record (including benefit details). Continue?":"删除会彻底移除该订阅记录(含权益明细)。是否继续?","Deleting...":"删除中...","Demo site":"演示站点","Demo site mode":"演示站点模式","Demo Site Mode":"演示站点模式","Demote":"降级","Density":"密度","Deploy your own gateway and start routing requests through your configured upstream services.":"部署你自己的网关,并通过已配置的上游服务开始转发请求。","Deployment created successfully":"创建部署成功","Deployment details":"部署详情","Deployment ID":"部署 ID","Deployment location":"部署位置","Deployment logs":"部署日志","Deployment Region":"部署区域","Deployment Region *":"部署区域 *","Deployment requested":"部署已请求","Deployments":"部署","Deprecated":"已弃用","Derives the request names your users call":"生成用户调用的请求模型名","Derives the upstream names sent to the provider":"生成发送给上游的模型名","Desc":"降序","Describe":"图生文","Describe this model...":"描述此模型...","Describe this vendor...":"描述此供应商...","Description":"说明信息","Description is required":"描述为必填项","Designed and Developed by":"设计与开发","designed for scale":"为规模而设计","Destroyed":"已销毁","Detail":"详情","Detailed request logs for investigations.":"用于调查的详细请求日志。","Details":"详情","Detect All Upstream Updates":"检测所有上游更新","Detect model updates":"检测模型更新","Detected database":"检测到的数据库","Detected high-risk status code redirect rules":"检测到以下高危状态码重定向规则:","Detection complete: {{add}} to add, {{remove}} to remove":"检测完成:新增 {{add}} 个,删除 {{remove}} 个","Detection failed":"检测失败","Determines how this group is applied elsewhere.":"确定此分组在其他地方的应用方式。","Deterministic sampling seed (best-effort)":"尽量保证可复现的采样种子","Developer Friendly":"开发者友好","Device Type Preference":"设备类型偏好","Dify":"Dify","Dify channels only support chatflow and agent, and agent does not support images":"Dify 渠道仅支持 chatflow 和 agent,agent 不支持图像","Digest:":"摘要:","Direction":"方向","Directory File Count":"目录文件数","Directory Total Size":"目录总大小","Disable":"禁用","Disable 2FA":"禁用 2FA","Downgrade group does not exist":"降级分组不存在","Disable All":"禁用全部","Disable channels on repeated failures":"多次失败时自动停用","Disable custom task plugins?":"禁用自定义任务插件?","Disable on failure":"失败时禁用","Disable plugin {{name}} ({{key}})? Requests using this plugin may be affected.":"禁用插件 {{name}}({{key}})?使用此插件的请求可能受到影响。","Disable plugin?":"禁用插件?","Disable selected channels":"禁用选定的渠道","Disable selected models":"禁用选定的模型","Disable store passthrough":"禁止透传 store","Disable task plugins?":"禁用任务插件?","Disable this key?":"禁用此密钥?","Disable threshold (seconds)":"禁用阈值(秒)","Disable Two-Factor Authentication":"禁用双重身份验证","disabled":"已禁用","Disabled":"已禁用","Disabled all channels with tag: {{tag}}":"已禁用标签「{{tag}}」下的所有渠道","Disabled channels with tag {{tag}}":"禁用标签为 {{tag}} 的渠道","Disabled globally":"全局已禁用","Disabled lanes are omitted on save.":"关闭的价格通道保存时会被省略。","Disabled Reason":"禁用原因","Disabled Time":"禁用时间","Disabled two-factor authentication":"关闭了两步验证","Disabled; fell back to factory":"已禁用;已回落出厂版","Disabled; platform unavailable":"已禁用;平台不可用","Disabling...":"禁用中...","Discard changes":"放弃修改","Discard unsaved changes?":"放弃未保存的修改?","Disclaimer: Personal use only. Do not distribute or share any credentials. This channel has prerequisites and requires prior setup; use it only if you understand the flow and risks, and comply with OpenAI\'s terms and policies. Credentials and configuration are for Codex CLI integration only, and are not intended for any other client, platform, or channel.":"免责声明:仅限个人使用,请勿分发或共享任何凭证。该渠道存在前置条件与使用门槛,请在充分了解流程与风险后使用,并遵守 OpenAI 的相关条款与政策。相关凭证与配置仅限接入 Codex CLI 使用,不适用于其他客户端、平台或渠道。","Discord":"Discord","Discount":"优惠","Discount map by recharge amount (JSON object)":"按充值金额的折扣映射 (JSON 对象)","Discount Rate":"折扣率","Discount rate must be ≤ 1":"折扣率必须 ≤ 1","Discount rate must be greater than 0":"折扣率必须大于 0","Discount Rate:":"折扣率:","Discount ratio for cache hits.":"缓存命中时的折扣比例。","Discouraged":"不推荐","Discover curated AI models, compare pricing and capabilities, and choose the right model for every scenario.":"探索精选 AI 模型,清晰比较价格与能力,为不同场景选择合适的模型。","Discover the leading models in each domain":"发掘各个领域的领先模型","Discover the most-used models and rising vendors on the platform, updated from live usage data.":"探索平台上使用最多的模型和增长中的供应商,数据基于实时用量更新。","Discover the most-used models, top apps, and rising vendors on the platform — updated continuously across every category.":"发掘平台上最受欢迎的模型、热门应用与崛起的厂商——每个分类的数据持续更新。","Discovering...":"发现中...","Disk cache cleared":"磁盘缓存已清理","Disk Cache Settings":"磁盘缓存设置","Disk Cache Threshold (MB)":"磁盘缓存阈值 (MB)","Disk cache, system performance monitoring, and operation statistics":"磁盘缓存、系统性能监控与运维统计","Disk Hits":"磁盘命中","Disk Threshold (%)":"磁盘阈值 (%)","Display in Currency":"以货币显示","Display limit":"显示数量","Display Mode":"显示模式","Display name":"显示名称","Display Name":"显示名称","Display name and email used in outgoing messages":"用于发送消息的显示名称和电子邮件","Display Name Field":"显示名称字段","Display name for this chat client.":"此聊天客户端的显示名称。","Display name for this monitoring group (max 50 characters)":"此监控分组的显示名称(最多 50 个字符)","Display name for this payment method.":"此支付方式的显示名称。","Display name shown to users.":"显示给用户的名称。","Display Options":"显示选项","Display policy":"展示策略","Display Token Statistics":"显示 Token 统计信息","Displayed":"正常展示","Displayed in":"显示单位","Displays the mobile sidebar.":"显示移动侧边栏。","Do not keep sessions":"不保持","Do not over-trust this feature. IP may be spoofed. Please use with nginx, CDN and other gateways.":"请勿过度信任此功能,IP 可能被伪造,请配合 nginx 和 cdn 等网关使用","Do not repeat check-in; only once per day":"请勿重复签到;每天仅一次","Do not wait one second between polling async tasks for this channel":"该渠道轮询异步任务时不等待一秒","Do regex replacement in the target field":"在目标字段里做正则替换","Do string replacement in the target field":"在目标字段里做字符串替换","Docs":"文档","Documentation Link":"文档链接","Documentation or external knowledge base.":"文档或外部知识库。","Does not check healthy channels. It only rechecks auto-disabled channels and restores them after they recover.":"不检查正常渠道,只复查被系统自动禁用的渠道,并在恢复后重新启用。","does not exist or might have been removed.":"不存在或可能已被移除。","Domain":"域名","Domain Filter Mode":"域名过滤模式","Don\'t have an account?":"没有账号?","Done":"完成","Doubao":"Doubao","Doubao custom API address editing unlocked":"已解锁豆包自定义 API 地址编辑","Double check the configuration below. Your system will be locked until initialization is complete.":"仔细检查以下配置。您的系统将在初始化完成前保持锁定状态。","Downgrade Group":"降级分组","Downgrade to pre-purchase group":"降级到购买前分组","Downgrade to this group after the subscription expires":"订阅过期后降级到该分组","Download":"下载","Drag {{group}} to reorder":"拖动 {{group}} 以重新排序","Drag mode":"拖拽模式","Drag mode help":"拖拽模式帮助","Drag the handle to move a channel.":"按住左侧拖拽手柄移动渠道。","Drag to change priority. Use arrow keys to move, Escape to cancel.":"拖拽调整优先级,也可使用方向键移动,Esc 取消。","Drag to move":"拖动以移动","Drag to resize":"拖动以调整大小","Drag to set channel priority":"拖拽调整渠道优先级","Draw":"绘图","Drawing":"绘图","Drawing logs":"绘制日志","Drawing Logs":"绘图日志","Drawing task polling":"绘图任务轮询","Drawing task records":"绘图任务记录","Drop a JavaScript plugin file here":"将 JavaScript 插件文件拖放到此处","Drop at an edge to create a different priority.":"拖到渠道边缘,插入新的优先级。","Drop between tiers to change priority, or in the center to join a tier":"拖到档位之间调整优先级,拖到中间加入同级","Drop in the center to use the same priority.":"拖到渠道中间,加入相同优先级。","Dry run result":"干跑结果","Duplicate":"重复","Duplicate group names: {{names}}":"存在重复的分组名称:{{names}}","Duplicate model in route models":"路由模型中存在重复模型","Duplicate source model mappings are not allowed":"不允许重复的源模型映射","Duplicate source model(s): {{models}}":"重复的源模型:{{models}}","Duration":"耗时","Duration (hours)":"时长 (小时)","Duration Settings":"有效期设置","Duration Unit":"有效期单位","Duration Value":"有效期数值","Dynamic declarations cannot be previewed. Retry or review the source below.":"动态生成的声明无法预览。可重试,或查看下方源码。","Dynamic multiplier":"动态倍率","Dynamic operation":"动态操作","Dynamic Pricing":"动态计费","e.g. ¥ or HK$":"例如,¥ 或 HK$","e.g. 401, 403, 429, 500-599":"例如 401、403、429、500-599","e.g. 8 means 1 USD = 8 units":"例如,8 表示 1 美元 = 8 单位","e.g. Basic Plan":"例如:基础套餐","e.g. Clean tool parameters to avoid upstream validation errors":"例如:清理工具参数,避免上游校验错误","e.g. Company SSO":"例如:公司 SSO","e.g. example.com":"例如,example.com","e.g. gpt-4o, gemini-2.5-flash":"例如 gpt-4o, gemini-2.5-flash","e.g. llama3.1:8b":"例如 llama3.1:8b","e.g. My GitLab":"例如:My GitLab","e.g. my-gitlab":"例如:my-gitlab","e.g. New API Console":"例如,New API 控制台","e.g. openid profile email":"例如:openid profile email","e.g. Requires level {{required}}; your current level is {{current}}":"例如:需要等级 {{required}};你当前的等级是 {{current}}","e.g. Suitable for light usage":"例如:适合轻度使用","e.g. This request does not meet access policy":"例如:该请求不满足准入策略","e.g., 0.95":"例如,0.95","Email & Notifications":"邮件与通知","Email address is already in use":"邮箱地址已被占用","e.g., 100":"例如,100","e.g., 123456":"例如,123456","e.g., 2025-04-01-preview":"例如,2025-04-01-preview","e.g., 50":"例如,50","e.g., 500000":"例如,500000","e.g., 7342866812345":"例如,7342866812345","Email is empty!":"邮箱为空!","Email or password is empty!":"邮箱地址或密码为空!","e.g., 8 means 8 local currency per USD":"例如,8 表示每美元兑换 8 单位本地货币","e.g., Alipay, WeChat":"例如,支付宝,微信","e.g., Basic Package":"例如,基本套餐","Email verification is enabled, please enter email address and verification code":"管理员开启了邮箱验证,请输入邮箱地址和验证码","e.g., CN2 GIA":"例如,CN2 GIA","e.g., Core APIs, OpenAI, Claude":"例如,核心 API,OpenAI,Claude","e.g., d6b5da8hk1awo8nap34ube6gh":"例如,d6b5da8hk1awo8nap34ube6gh","e.g., default, vip, premium":"例如,default, vip, premium","e.g., gpt-4, claude-3":"例如:gpt-4、claude-3","e.g., gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$":"例如:gpt-4.1-nano,regex:^claude-.*$,regex:^sora-.*$","e.g., https://api.example.com (path before /suno)":"例如,https://api.example.com (在 /suno 之前的路径)","e.g., https://api.openai.com/v1/chat/completions":"例如,https://api.openai.com/v1/chat/completions","e.g., https://ark.cn-beijing.volces.com":"例如,https://ark.cn-beijing.volces.com","e.g., https://docs-test-001.openai.azure.com":"例如,https://docs-test-001.openai.azure.com","e.g., https://fastgpt.run/api/openapi":"例如,https://fastgpt.run/api/openapi","e.g., OpenAI GPT-4 Production":"例如,OpenAI GPT-4 生产环境","e.g., preview":"例如,preview","e.g., prod_xxx":"例如,prod_xxx","e.g., Recommended for China Mainland Users":"例如,推荐给中国大陆用户","e.g., SiAlipay":"例如,SiAlipay","e.g., us-central1 or JSON format for model-specific regions":"例如,us-central1 或模型特定区域的 JSON 格式","e.g., v2.1":"例如,v2.1","Each backup code can only be used once.":"每个备份代码只能使用一次。","Each item must be an object with a single key-value pair.":"每个条目必须是包含单个键值对的对象。","Each item must have exactly one key-value pair.":"每个条目必须恰好包含一个键值对。","Each line represents one keyword. Leave blank to disable the list but keep the switch states.":"每行代表一个关键词。留空以禁用列表,但保留开关状态。","Each matrix cell is one rule: users of this row group pay this ratio when billed as this column group. In JSON the row is the outer key and the column is the inner key.":"矩阵的每个单元格是一条规则:该行用户分组的用户按该列分组计费时使用此倍率。在 JSON 中行是外层键,列是内层键。","Each row prices one combination of {{fields}}.":"每行分别为一种 {{fields}} 组合定价。","Each rule reads as a sentence: users of one group pay a special ratio when billed as another group. Without a rule, the billing group base ratio applies.":"每条规则就是一句话:某分组的用户按另一分组计费时享受特殊倍率。没有规则时,使用计费分组的基础倍率。","Each source serves an index.json listing installable plugins. Indexes are fetched by your browser; the gateway makes no outbound requests.":"每个源都提供一个 index.json,列出可安装的插件。索引由你的浏览器拉取,网关不会发起任何外部请求。","Each tier supports 0~2 conditions (over len, p, c); the last tier is the catch-all without conditions. Use len (full input length, including cache hits) for tier conditions to avoid mis-routing when cache hits reduce p.":"每个档位支持 0~2 个条件(针对 len、p、c),最后一档为兜底档无需条件。建议条件使用 len(完整输入长度,含缓存命中),避免缓存命中降低 p 导致档位误判。","Each tier supports up to 2 conditions; the last tier is the catch-all without conditions. Use full input length for tier conditions to avoid mis-routing when cache hits reduce billable input tokens.":"每个档位最多支持 2 个条件;最后一个档位是不带条件的兜底档。建议使用完整输入长度作为档位条件,避免缓存命中减少计费输入 token 后误判档位。","Each tier supports up to 2 conditions. The last tier without conditions is the fallback.":"每个阶梯最多支持 2 个条件。最后一个无条件阶梯作为兜底。","Earn rewards when users join through your referral link. Transfer accumulated rewards to your balance anytime.":"用户通过您的推荐链接注册后,您即可获得奖励。可随时将累计奖励转入余额。","Earnings":"收益","Edit":"编辑","Edit {{title}}":"编辑{{title}}","Edit access token":"编辑访问令牌","Edit all channels with tag:":"编辑所有带有标签的渠道:","Edit Announcement":"编辑公告","Edit API Shortcut":"编辑 API 快捷方式","Edit billing ratios and user-selectable groups in one table.":"在一个表格中编辑计费倍率和用户可选分组。","Edit Channel":"编辑渠道","Edit channel routing":"编辑渠道路由","Edit chat preset":"编辑聊天预设","Edit discount tier":"编辑折扣档位","Edit FAQ":"编辑常见问题","Edit group":"编辑分组","Edit group rate limit":"编辑组速率限制","Edit group settings as JSON. Changes are shared with the visual editor.":"通过 JSON 编辑分组设置,修改会同步到可视化编辑器。","Edit JSON object directly. Suitable for simple parameter overrides.":"直接编辑 JSON 对象。适合简单覆盖参数的场景。","Edit JSON text directly. Format will be validated on save.":"直接编辑 JSON 文本,保存时会校验格式。","Edit mapping":"编辑映射","Edit model":"编辑模型","Edit Model":"编辑模型","Edit model pricing":"编辑模型定价","Edit models and vendors, and sync them from upstream.":"编辑模型和供应商,并从上游同步。","Edit non-sensitive settings such as models, groups, and routing rules.":"编辑模型、分组和路由规则等非敏感设置。","Edit OAuth Provider":"编辑 OAuth 提供商","Edit payment method":"编辑支付方式","Edit Prefill Group":"编辑预填充组","Edit pricing rule {{name}}":"编辑定价规则 {{name}}","Edit product":"编辑产品","Edit ratio override":"编辑倍率覆盖","Edit Rule":"编辑规则","Edit selectable group":"编辑可选分组","Edit sensitive channel settings":"编辑敏感渠道设置","Edit Tag":"编辑标签","Edit Tag:":"编辑标签:","Edit Uptime Kuma Group":"编辑 Uptime Kuma 分组","Edit Vendor":"编辑供应商","Enabled {{count}} keys":"已启用 {{count}} 个密钥","edit_this":"edit_this","Edited channels with tag {{tag}}":"编辑标签为 {{tag}} 的渠道","Editor mode":"编辑器模式","Education":"教育","Effective icon":"生效图标","Email":"邮箱","Email (required for verification)":"电子邮件(验证必需)","Email Address":"电子邮件地址","Email Alias Restriction":"电子邮件别名限制","Email bound successfully!":"邮箱绑定成功!","Email confirmation code resend":"重发邮箱确认码","Email Domain Restriction":"电子邮件域限制","Email Domain Whitelist":"电子邮件域白名单","Email Field":"邮箱字段","Email Verification":"电子邮件验证","Email verification code is incorrect.":"邮箱验证码不正确。","Email verification has ended. Start again to continue.":"邮箱验证已结束,请重新开始。","Email, summarisation, knowledge work":"邮件、摘要与知识工作","Embeddings":"嵌入","Empty":"空","Empty value will be saved as {}.":"空值将保存为 {}。","Enable":"启用","Enable {{parameter}}":"启用 {{parameter}}","Enable 2FA":"启用 2FA","Enable All":"启用全部","Enable check-in feature":"启用签到功能","Enable custom task plugins":"启用自定义任务插件","Enable Data Dashboard":"启用数据仪表板","Enable demo mode with limited functionality":"启用功能受限的演示模式","Enable Discord OAuth":"启用 Discord OAuth","Enable Disk Cache":"启用磁盘缓存","Enable drawing features":"启用绘制功能","Enable filtering":"启用过滤","Enable FunctionCall thoughtSignature Fill":"启用 FunctionCall 思维签名填充","Enable GitHub OAuth":"启用 GitHub OAuth","Enable Groups":"启用分组","Enable if this is an OpenRouter enterprise account with special response format":"如果这是具有特殊响应格式的 OpenRouter 企业账户,则启用","Enable io.net deployments":"启用 io.net 部署","Enable io.net model deployment service in console":"在控制台启用 io.net 模型部署服务","Enable LinuxDO OAuth":"启用 LinuxDO OAuth","Enable model performance metrics":"启用模型性能指标","Enable OIDC":"启用 OIDC","Enable only if the upstream supports Responses WebSocket. HTTP requests are unaffected when disabled.":"仅在上游支持 Responses WebSocket 时开启。关闭后仍可使用普通 HTTP 请求。","Enable or disable this channel":"启用或禁用此渠道","Enable or disable this model":"启用或禁用此模型","Enable Passkey":"启用 Passkey","Enable passthrough":"确认开启透传","Enable Performance Monitoring":"启用性能监控","Enable plugin {{key}}":"启用插件 {{key}}","Enable plugin?":"启用插件?","Enable rate limiting":"启用速率限制","Enable request body passthrough?":"确认开启透传请求体?","Enable request header passthrough?":"确认开启透传请求头?","Enable Request Passthrough":"启用请求透传","Enable Responses WebSocket":"启用 Responses WebSocket","Enable selected channels":"启用选定的渠道","Enable selected models":"启用选定的模型","Enable session affinity":"启用会话保持","Enable SSL/TLS":"启用 SSL/TLS","Enable SSRF Protection":"启用 SSRF 保护","Enable STARTTLS":"启用 STARTTLS","Enable streaming mode for the test request.":"为测试请求启用流式模式。","Enable task plugins":"启用任务插件","Enable Telegram OAuth":"启用 Telegram OAuth","Enable test mode for Creem payments":"启用 Creem 支付测试模式","Enable this key?":"启用此密钥?","Enable Turnstile":"启用 Turnstile","Enable Two-factor Authentication or Passkey in Security & Access to continue.":"请在“安全与访问”中启用两步验证或 Passkey 后继续。","Enable Two-factor Authentication or Passkey in Security & Access to unlock sensitive operations.":"请在“安全与访问”中启用两步验证或 Passkey,以进行敏感操作。","Enable Two-factor Authentication or Passkey in your profile to unlock sensitive operations.":"在您的个人资料中启用双重身份验证或 Passkey 以解锁敏感操作。","Enable unlimited quota for this API key":"为此 API 密钥启用无限配额","Enable violation deduction":"启用违规扣费","Enable Waffo":"启用 Waffo","Enable Waffo Pancake":"启用 Waffo Pancake","Enable WeChat Auth":"启用微信授权","Enable when proxying workers that fetch images over HTTP.":"当代理通过 HTTP 获取图像的 worker 时启用。","Enable when the client and upstream use the same API format and you need to preserve upstream-specific or new fields the gateway does not yet support. Usually leave this off.":"适用于客户端与上游使用相同 API 格式,需要保留上游支持、但网关尚未适配的新参数或扩展字段的场景。通常无需开启。","Enable when the upstream needs client information from Codex or Claude Code headers; may expose client information":"上游需要获取 Codex、Claude Code 等客户端请求头信息时开启;可能暴露客户端信息","Enable when the upstream needs information from clients such as Codex or Claude Code, including User-Agent, client version or session headers. Usually leave this off.":"适用于上游需要获取 Codex、Claude Code 等客户端信息的场景,例如请求头中的 User-Agent、客户端版本或会话标识。通常无需开启。","Enabled":"已启用","Enabled all channels with tag: {{tag}}":"已启用标签「{{tag}}」下的所有渠道","Enabled channels with tag {{tag}}":"启用标签为 {{tag}} 的渠道","Enabled Status":"启用状态","Enabled two-factor authentication":"启用了两步验证","Enabling...":"正在启用...","Encourages introducing new topics":"鼓励引入新话题","Encourages new topics":"鼓励讨论新话题","End":"结束","End Error":"结束错误","End Reason":"结束原因","End Time":"结束时间","End time must be after start time":"结束时间必须晚于开始时间","Enter the Discovery URL or Issuer URL first":"请先填写 Discovery URL 或 Issuer URL","End weekday":"结束星期","End-user identifier for abuse monitoring":"用于风险审计的终端用户标识","Endpoint":"端点","Endpoint config":"端点配置","Endpoint Configuration":"端点配置","Endpoint Type":"端点类型","Endpoint, provider-specific settings, and credentials.":"接口地址、供应商专属设置和凭据。","Endpoint:":"端点:","Endpoints":"端点","English":"英文","Ensure Prefix":"确保前缀","Ensure Suffix":"确保后缀","Ensure the string has a specified prefix":"确保字符串有指定前缀","Ensure the string has a specified suffix":"确保字符串有指定后缀","Enter 6-digit code":"输入 6 位数字代码","Enter a domain such as example.com or localhost, without a protocol, port or path. Put addresses with ports in Allowed Passkey websites.":"只填域名,例如 example.com 或 localhost,不包含协议、端口或路径。带端口的完整地址请填到“允许使用通行密钥的网站”。","Enter a finite, non-negative price":"请输入有限的非负价格","Enter a finite, non-negative price.":"请输入有限的非负价格。","Enter a name":"输入名称","Enter a new name":"输入新名称","Enter a positive integer":"请输入正整数","Enter a positive or negative amount to adjust the quota":"输入正数或负数以调整配额","Enter a react-icons component name. Invalid names show no icon.":"输入 react-icons 组件名。无法解析的名称不会显示图标。","Enter a rule to preview mappings.":"填写规则后,这里会显示具体映射。","Enter a valid condition value.":"请输入有效的条件值。","Enter a valid email or leave blank":"请输入有效的邮箱地址或留空","Enter a value and press Enter":"输入值并按回车键","Enter amount in {{currency}}":"输入金额({{currency}})","Enter amount in tokens":"输入额度(Token)","Enter an absolute HTTP(S) URL without credentials, query parameters, or fragments":"请输入不含认证信息、查询参数或片段的 HTTP(S) 绝对 URL","Enter an absolute http(s) URL.":"请输入完整的 http(s) URL。","Enter an ISO date and time with a timezone offset.":"请输入带时区偏移的 ISO 日期和时间。","Enter announcement content (supports Markdown & HTML)":"输入公告内容(支持 Markdown 和 HTML)","Enter announcement content (supports Markdown/HTML)":"输入公告内容(支持 Markdown/HTML)","Enter API Key":"请输入 API Key","Enter API key for this channel":"输入此渠道的 API 密钥","Enter API Key, format: APIKey|Region":"请输入 API Key,格式:APIKey|Region","Enter API Key, one per line, format: APIKey|Region":"请输入 API Key(每行一个),格式:APIKey|Region","Enter application token":"输入应用程序令牌","Enter authenticator code":"输入身份验证器代码","Enter backup code (e.g., CAWD-OQDV)":"输入备用代码(例如,CAWD-OQDV)","Enter code":"输入代码","Enter code or backup code":"输入代码或备用代码","Enter Completion price to calculate ratio":"输入 Completion 价格来计算比率","Enter Creem API key":"输入 Creem API 密钥","Enter custom API endpoint URL":"输入自定义 API 端点 URL","Enter deployment region or JSON mapping:":"输入部署区域或 JSON 映射:","Enter display name":"输入显示名称","Enter HTML code (e.g.,

About us...

) or a URL (e.g., https://example.com) to embed as iframe":"输入 HTML 代码(例如,

关于我们...

)或 URL(例如,https://example.com)以作为 iframe 嵌入","Enter Input price to calculate ratio":"输入 Input 价格来计算比率","Enter JSON to override request headers":"输入 JSON 以覆盖请求头","Enter key, format: AccessKey|SecretAccessKey|Region":"请输入密钥,格式:AccessKey|SecretAccessKey|Region","Enter key, one per line, format: AccessKey|SecretAccessKey|Region":"请输入密钥(每行一个),格式:AccessKey|SecretAccessKey|Region","Enter model name":"请输入模型名称","Enter new key to update":"输入新密钥以更新","Enter new key to update, or leave empty to keep current key":"输入新密钥以更新,或留空以保留当前密钥","Enter new tag name (leave empty to disband tag)":"输入新标签名称(留空以解散标签)","Enter new tag name or leave empty":"输入新标签名称或留空","Enter new token to update":"输入新令牌以更新","Enter one API key per line for batch creation":"每行输入一个 API 密钥进行批量创建","Enter one key per line for batch creation":"每行输入一个密钥进行批量创建","Enter one keyword per line":"每行输入一个关键词","Enter one website address per line, such as https://example.com. Do not include a page path.":"每行填写一个网站地址,例如 https://example.com,不要带后面的页面路径。","Enter only a top-level callback domain, for example https://api.example.com, without any path.":"只填写回调顶级域名,例如 https://api.example.com,不要带任何路径。","Enter only the domain, such as example.com, without https://, a port or a page path. If you use both example.com and api.example.com, you can enter example.com.":"只填域名,例如 example.com,不要带 https://、端口或后面的页面路径。如果同时使用 example.com 和 api.example.com,可以填写 example.com。","Enter only the domain, without https://, a port or a page path. example.com and www.example.com are different Passkey domains; changing between them does not migrate existing Passkeys.":"只填写域名,不包含 https://、端口或页面路径。example.com 与 www.example.com 对应不同的通行密钥域名,切换域名不会迁移已有通行密钥。","Enter password":"输入密码","Enter password (8-20 characters)":"输入密码(8-20 个字符)","Enter password (8–128 characters)":"输入密码(8–128 个字符)","Enter previous domains, one per line, without a protocol, port or path. Different ports on the same domain do not need compatible domains.":"每行填写一个旧域名,不包含协议、端口或路径。同一域名的不同端口无需加入兼容列表。","Enter previous Passkey domains, one per line. Existing Passkeys can still verify with these domains; new Passkeys use the primary domain.":"每行填写一个旧通行密钥域名。已有通行密钥仍可通过这些域名验证,新通行密钥使用主域名。","Enter quota in {{currency}}":"输入 {{currency}} 额度","Enter quota in tokens":"输入令牌配额","Enter sample usage to estimate the cost. Group and request multipliers are not included.":"填写一次请求的用量,查看预计费用。结果未乘以分组倍率和请求规则倍率。","Enter secret key":"输入密钥","Enter system prompt (user prompt takes priority)":"输入系统提示词(用户提示词优先)","Enter tag name (optional)":"输入标签名称(可选)","Enter the 6-digit authenticator code or an unused backup code.":"输入认证器的 6 位验证码或未使用的备用码。","Enter the 6-digit authenticator code.":"请输入身份验证器中的 6 位验证码。","Enter the 6-digit code from your authenticator app":"输入来自身份验证器应用的 6 位代码","Enter the 6-digit email verification code.":"请输入六位邮箱验证码。","Enter the 6-digit Time-based One-Time Password or 8-character backup code from your authenticator app.":"输入来自身份验证器应用的 6 位基于时间的单次密码或 8 位备份代码。","Enter the complete URL, supports":"输入完整的 URL,支持","Expiration time cannot be earlier than current time":"过期时间不能早于当前时间","Enter the Coze agent ID":"输入 Coze 代理 ID","Enter the full URL of your Gotify server":"输入您的 Gotify 服务器的完整 URL","Enter the knowledge base ID":"输入知识库 ID","Enter the path before /suno, usually just the domain":"输入 /suno 之前的路径,通常只是域名","Enter the quota amount in {{currency}}":"输入 {{currency}} 的配额数量","Enter the quota amount in tokens":"输入令牌配额数量","Enter the verification code":"输入验证码","Enter the website domain, such as example.com.":"填写网站域名,例如 example.com。","Export":"导出","Export logs":"导出日志","Exported {{count}} logs":"已导出 {{count}} 条日志","Enter token counts to preview the estimated cost (excluding group multipliers).":"输入 token 数量以预览预估费用(不含用户组倍率)。","Enter URL...":"输入 URL...","Enter username":"输入用户名","Enter verification code":"输入验证码","Enter webhook secret":"输入 webhook 密钥","Enter your authenticator code or a backup code":"输入您的身份验证器代码或备份代码","Enter your email":"输入您的电子邮件","Enter your redemption code":"输入您的兑换码","Enter your registered email and we will send you a link to reset your password.":"输入您注册的邮箱,我们将向您发送一个重置密码的链接。","Enter your username":"输入您的用户名","Enter your username or email":"输入您的用户名或电子邮件","Enterprise Account":"企业账户","Enterprise-grade security with comprehensive permission management":"企业级安全性,提供全面的权限管理","Entries configured in Request Header Override still take priority":"请求头覆盖中手动配置的项仍然优先","Entrypoint (space separated)":"入口点 (空格分隔)","Enum":"枚举","Enum values":"枚举值","Env (JSON object)":"环境变量 (JSON 对象)","Environment variables":"环境变量","Environment variables (JSON)":"环境变量 (JSON)","Epay Alipay":"Epay 支付宝","Epay endpoint":"Epay 端点","Epay Gateway":"Epay 网关","Epay is a payment protocol, not a specific official website. Verify the provider yourself and do not trust random third-party Epay deployments.":"Epay 是一种支付协议,不是某个固定官网。请自行核验服务提供方,不要轻信他人搭建的第三方 Epay 站点。","Epay merchant ID":"易支付商户 ID","Epay safety reminder":"Epay 安全提醒","Epay secret key":"Epay 密钥","Epay WeChat Pay":"Epay 微信支付","Equals":"等于","Error":"错误","Error Code (optional)":"错误代码(可选)","Error establishing connection":"建立连接失败","Error Message":"错误消息","Error Message (required)":"错误消息(必填)","Error parsing response data":"解析响应数据失败","Error Type (optional)":"错误类型(可选)","Estimated cost":"预计成本","Estimated quota cost":"估算配额费用","Evaluate fields from the provider user info response. Conditions and nested groups use and/or logic.":"根据提供商返回的用户信息字段执行策略判断。条件和嵌套分组支持 and/or 逻辑。","Event":"事件","Every group name in the pricing table can be used in two places: on a user (the user group, assigned by admins) and on a token (the token group, chosen when creating the token). Same name pool, two different jobs.":"定价表中的每个分组名可用在两个地方:用户身上(用户分组,由管理员分配)和令牌身上(令牌分组,创建令牌时选择)。同一批名字,两种不同职责。","Failed to check user bindings, please try again later":"检查用户绑定时发生错误,请稍后重试","Every other device will lose access immediately. This device will remain signed in.":"其他所有设备将立即失去访问权限,当前设备将保持登录。","Everything configured for this group, in one place.":"该分组的全部配置,一处看全。","Exact":"精确","Exact Match":"完全匹配","Exact match only and case-sensitive. Prefixes, regex, and * wildcards are not supported.":"只做完整精确匹配,区分大小写;不支持前缀、正则或 * 通配。","Example":"示例","Example (all channels):":"示例(全部渠道):","Failed to copy channel. Please try again later":"复制渠道失败,请稍后重试","Example (specific channels):":"示例(指定渠道):","Example price":"示例价格","Example spec":"示例规格","Failed to count channel types. Please try again later":"获取渠道类型统计失败,请稍后重试","Failed to count channels. Please try again later":"获取渠道数量失败,请稍后重试","Failed to count tags. Please try again later":"获取标签数量失败,请稍后重试","Example:":"示例:","Example: users call gpt-4o; upstream receives gpt-4o-all.":"例如:用户调用 gpt-4o,上游收到 gpt-4o-all。","example.com blocked-site.com":"example.com blocked-site.com","Failed to create default token":"创建默认令牌失败","example.com company.com":"example.com company.com","Failed to create order":"创建订单失败","Excellent":"优秀","Exchange rate is required":"汇率为必填项","Failed to create redemption code, please try again later":"创建兑换码失败,请稍后重试","Failed to create the administrator account: {{error}}":"创建管理员账号失败: {{error}}","Failed to create the Discovery request: {{error}}":"创建 Discovery 请求失败: {{error}}","Failed to create the plan product":"创建套餐产品失败","Exchange rate must be greater than 0":"汇率必须大于 0","Excludes the first attempt. Counted per group.":"不含首次,按分组计算。","Execute code in a sandbox during the response":"在响应过程中沙箱执行代码","Executor":"执行实例","Exhausted":"已耗尽","Existing account will be reused":"将使用现有账户","Existing Models ({{count}})":"现有模型 ({{count}})","Existing models: select fields to replace their current values with the values on the right. Unselected fields stay unchanged.":"已有模型:勾选要更新的字段,当前内容会被右侧内容替换;未勾选的保持不变。","Existing Passkeys remain tied to the old domain and may stop working. Keep the old domain to preserve access, or confirm only if you have a recovery plan.":"已有通行密钥仍绑定旧域名,更改后可能无法使用。保留旧域名可维持访问;请仅在已有恢复方案时确认更改。","Exists":"存在","Expand":"展开","Expand All":"全部展开","Expand panel":"展开面板","Expected a JSON array of group identifiers":"应为分组标识符的 JSON 数组","Expected a JSON array.":"应为 JSON 数组。","Experiment with prompts and models in real time.":"实时实验提示词和模型。","Expiration":"过期时间","Expiration Time":"过期时间","expired":"已过期","Expired":"已过期","Expired at":"过期于","Expired time cannot be earlier than current time":"过期时间不能早于当前时间","Expires":"过期","Expires {{time}}":"{{time}} 过期","Expires at":"到期时间","Expires in":"剩余到期时间","Export snapshot":"导出快照","Failed to encode Vertex AI key JSON: {{error}}":"Vertex AI 密钥 JSON 编码失败:{{error}}","Failed to export logs":"导出日志失败","Expose ratio API":"暴露倍率接口","Failed to fetch channel. Please try again later":"获取渠道信息失败,请稍后重试","Failed to fetch channels with this tag. Please try again later":"获取标签渠道失败,请稍后重试","Failed to fetch channels. Please try again later":"获取渠道列表失败,请稍后重试","Exposes the pricing/models catalog in the top navigation.":"在顶部导航中显示定价/模型目录。","Expression":"计费表达式","Expression - Task pricing":"计费表达式 - 任务定价","Failed to fetch models: {{error}}":"获取模型列表失败:{{error}}","Expression argument types do not match.":"表达式参数类型不匹配。","Failed to fetch Ollama version: {{error}}":"获取 Ollama 版本失败:{{error}}","Expression based":"基于表达式","Failed to fetch reset credit details. Please try again later":"获取重置次数详情失败,请稍后重试","Failed to fetch tags. Please try again later":"获取标签失败,请稍后重试","Failed to fetch the catalog":"拉取目录失败","Failed to fetch the Discovery configuration: {{error}}":"获取 Discovery 配置失败: {{error}}","Failed to fetch the product list":"拉取产品列表失败","Expression billing":"表达式计费","Expression compatibility will be checked when saving.":"表达式兼容性将在保存时校验。","Expression editor":"表达式编辑器","Failed to fetch usage. Please try again later":"获取用量信息失败,请稍后重试","Expression error":"表达式错误","Expression pricing":"表达式计费","Failed to generate default token":"生成默认令牌失败","Extend":"延长","Failed to get the channel information. Please contact the administrator":"获取渠道信息失败,请联系管理员","Failed to get the token count":"获取令牌数量失败","Failed to get the user group":"获取用户分组失败","Failed to get token from {{provider}}, please check settings":"{{provider}} 获取 Token 失败,请检查设置","Failed to get user information":"获取用户信息失败","Extend deployment":"延长部署","Extend failed":"延长失败","Extended successfully":"延长成功","Failed to initialize the system: {{error}}":"系统初始化失败: {{error}}","External Device":"外部设备","External link for users to purchase quota":"供用户购买配额的外部链接","External operations":"对外运营","External operations mode":"对外运营模式","External Speed Test":"外部速度测试","Extra":"额外","Extra destinations beyond the channel API address. The channel address remains accessible.":"渠道 API 地址之外可访问的额外域名;渠道地址本身仍可访问。","Extra Notes (Optional)":"额外备注(可选)","Extra visible":"额外可见","Extra visible to {{group}}":"对 {{group}} 额外可见","extras":"额外项","Factory":"出厂","Factory and custom plugin behavior":"出厂与自定义插件行为","Factory and custom plugins all stop serving immediately. In-flight tasks will be handled by timeout cleanup.":"出厂插件和自定义插件将立即停止服务。进行中的任务将由超时清理处理。","Factory plugins cannot be deleted or disabled individually. A custom version can override them; deleting or disabling that version restores the factory plugin. Third-party-only platforms become unavailable when their plugin is deleted or disabled.":"出厂插件不可删除或单独禁用。自定义版本可覆盖出厂版;删除或禁用自定义版会恢复出厂版。纯第三方平台的插件被删除或禁用后将不可用。","Fail Reason":"失败原因","Fail Reason Details":"失败原因详情","failed":"已失败","Failed":"失败","Failed to {{action}} user":"{{action}}用户失败","Failed to adjust quota":"调整额度失败","Failed to apply overwrite.":"应用覆盖失败。","Failed to apply vendor changes":"应用供应商更改失败","Failed to batch delete redemption codes":"批量删除兑换码失败","Failed to bind email":"绑定邮箱失败","Failed to change password":"修改密码失败","Failed to check for updates":"检查更新失败","Failed to clean logs":"清理日志失败","Failed to complete order":"完成订单失败","Failed to complete Passkey login":"无法完成 Passkey 登录","Failed to confirm compliance":"确认合规失败","Failed to parse appended keys: {{error}}":"追加密钥解析失败:{{error}}","Failed to parse credentials. Please check the channel configuration":"解析凭证失败,请检查渠道配置","Failed to contact GitHub releases API":"无法连接 GitHub Releases API","Failed to copy":"复制失败","Failed to parse the Discovery configuration: {{error}}":"解析 Discovery 配置失败: {{error}}","Failed to parse tool price \\"{{name}}\\": {{error}}":"解析工具价格 \\"{{name}}\\" 失败:{{error}}","Failed to parse tool prices: {{error}}":"解析工具价格失败:{{error}}","Failed to copy channel":"复制渠道失败","Failed to copy keys":"复制密钥失败","Failed to copy model names":"复制模型名称失败","Failed to copy to clipboard":"复制到剪贴板失败","Failed to query channels":"查询渠道失败","Failed to query logs":"查询日志失败","Failed to query statistics":"查询统计数据失败","Failed to query the upstream task status":"查询上游任务状态失败","Failed to create account":"创建账户失败","Failed to create API key":"创建API密钥失败","Failed to refresh credentials. Please try again later":"刷新凭证失败,请稍后重试","Failed to create channel":"创建渠道失败","Failed to create deployment":"创建部署失败","Failed to create provider":"创建提供商失败","Failed to create redemption code":"创建兑换码失败","Failed to create user":"创建用户失败","Failed to delete {{count}} model(s)":"删除 {{count}} 个模型失败","Failed to delete {{count}} redemption codes":"{{count}} 个兑换码删除失败","Failed to delete account":"删除账号失败","Failed to reset usage. Please try again later":"重置用量失败,请稍后重试","Failed to delete API key":"删除API密钥失败","Failed to delete API keys":"删除API密钥失败","Failed to delete channel":"删除渠道失败","Failed to delete disabled channels":"删除已禁用渠道失败","Failed to save backup codes":"保存备用码失败","Failed to save configuration":"保存配置失败","Failed to delete failed models":"删除失败模型失败","Failed to delete group":"删除分组失败","Failed to save the demo site mode setting: {{error}}":"保存演示站点模式设置失败: {{error}}","Failed to save the self-use mode setting: {{error}}":"保存自用模式设置失败: {{error}}","Failed to delete invalid redemption codes":"删除无效兑换码失败","Failed to delete model":"删除模型失败","Failed to delete provider":"删除提供商失败","Failed to search tokens":"搜索令牌失败","Failed to search top-up records":"搜索充值记录失败","Failed to delete redemption code":"删除兑换码失败","Failed to delete user":"删除用户失败","Failed to delete vendor":"删除供应商失败","Failed to disable {{count}} model(s)":"禁用 {{count}} 个模型失败","Failed to disable 2FA":"禁用 2FA 失败","Failed to set the audio completion ratio: {{error}}":"音频补全倍率设置失败:{{error}}","Failed to set the audio ratio: {{error}}":"音频倍率设置失败:{{error}}","Failed to set the cache creation ratio: {{error}}":"缓存创建倍率设置失败:{{error}}","Failed to set the image ratio: {{error}}":"图片倍率设置失败:{{error}}","Failed to disable channels":"禁用渠道失败","Failed to disable model":"禁用模型失败","Failed to disable tag channels":"禁用标签渠道失败","Failed to discover OIDC endpoints":"发现 OIDC 端点失败","Failed to enable {{count}} model(s)":"启用 {{count}} 个模型失败","Failed to enable 2FA":"启用 2FA 失败","Failed to enable channels":"启用渠道失败","Failed to enable model":"启用模型失败","Failed to enable tag channels":"启用标签渠道失败","Failed to fetch channel key":"获取渠道密钥失败","Failed to start payment":"拉起支付失败","Failed to fetch checkin status":"获取签到状态失败","Failed to fetch deployment details":"获取部署详情失败","Failed to fetch models":"获取模型失败","Failed to fetch OIDC configuration. Please check the URL and network status":"获取 OIDC 配置失败。请检查 URL 和网络状态","Failed to fetch reset credit details":"获取重置次数详情失败","Failed to fetch upstream prices":"获取上游价格失败","Failed to fetch upstream ratios":"获取上游比率失败","Failed to fetch usage":"获取用量失败","Failed to fetch user information":"获取用户信息失败","Failed to fix abilities":"修复渠道一致性失败","Failed to generate token":"生成令牌失败","Failed to hide model from model square":"从模型广场隐藏失败","Failed to initialize OAuth":"初始化 OAuth 失败","Failed to initialize system":"系统初始化失败","Failed to load":"加载失败","Failed to load access tokens":"加载访问令牌失败","Failed to load API keys":"加载 API 密钥失败","Failed to load artifacts":"制品加载失败","Failed to load audit records":"加载审计记录失败","Failed to load billing history":"加载计费历史失败","Failed to load channel":"渠道加载失败","Failed to load enabled models":"获取启用模型失败","Failed to load home page content":"加载首页内容失败","Failed to load image":"无法加载图像","Failed to load key status":"加载密钥状态失败","Failed to load login sessions":"加载登录会话失败","Failed to load logs":"加载日志失败","Failed to load model":"加载模型失败","Failed to load model pricing":"加载模型定价失败","Failed to load models":"加载模型失败","Failed to load Passkey status":"加载 Passkey 状态失败","Failed to load playground groups":"加载 playground 分组失败","Failed to load playground models":"加载 playground 模型失败","FAQ #{{index}} answer cannot exceed 1000 characters":"第{{index}}个FAQ的答案长度不能超过1000字符","FAQ #{{index}} is missing the answer field":"第{{index}}个FAQ缺少答案字段","FAQ #{{index}} is missing the question field":"第{{index}}个FAQ缺少问题字段","FAQ #{{index}} question cannot exceed 200 characters":"第{{index}}个FAQ的问题长度不能超过200字符","Failed to load plugins":"加载插件失败","FAQ cannot exceed 100 entries":"FAQ数量不能超过100个","Failed to load profile":"加载个人资料失败","Failed to load redemption codes":"加载兑换码失败","Failed to load settings":"加载设置失败","Failed to load setup data":"无法加载设置数据","Failed to load setup status":"无法加载设置状态","Failed to load SGLang status":"加载 SGLang 状态失败","Failed to load tag data":"加载标签数据失败","Failed to load users":"加载用户失败","Failed to load vendor":"加载供应商失败","Failed to load vendors":"加载供应商失败","Failed to load vLLM status":"vLLM 状态加载失败","Failed to parse group items":"解析组项目失败","Failed to parse JSON file: {{name}}":"解析 JSON 文件失败:{{name}}","Failed to prepare pricing conversion":"定价转换准备失败","Fetched successfully":"获取成功","Failed to preview metadata":"预览元信息失败","Failed to preview vendor changes":"预览供应商更改失败","Failed to query balance":"查询余额失败","Failed to refresh cache stats":"刷新缓存统计失败","Failed to refresh credential":"刷新凭证失败","Failed to regenerate backup codes":"重新生成备份代码失败","Failed to register Passkey":"注册 Passkey 失败","Failed to remove Passkey":"移除 Passkey 失败","Failed to repair channel consistency":"修复渠道一致性失败","Failed to reset 2FA":"重置 2FA 失败","Failed to reset model ratios":"重置模型比率失败","Failed to reset Passkey":"重置 Passkey 失败","Failed to reset usage":"重置用量失败","Failed to revoke token":"撤销令牌失败","Failed to save":"保存失败","Failed to save announcements":"保存公告失败","Failed to save API info":"保存 API 信息失败","Failed to save FAQ":"保存 FAQ 失败","Failed to save model pricing":"保存模型定价失败","Failed to save Uptime Kuma groups":"保存 Uptime Kuma 组失败","Failed to search API keys":"搜索 API 密钥失败","Failed to search redemption codes":"搜索兑换码失败","Failed to search users":"搜索用户失败","Failed to send reset email":"发送重置邮件失败","Failed to send verification code":"发送验证码失败","Failed to send verification email":"发送验证邮件失败","Failed to set tag":"设置标签失败","Failed to setup 2FA":"设置 2FA 失败","Failed to show model in model square":"在模型广场显示失败","Failed to sign out other sessions":"退出其他登录会话失败","Failed to sign out session":"退出登录会话失败","Failed to start {{provider}} login":"启动 {{provider}} 登录失败","Failed to start Discord login":"启动 Discord 登录失败","Failed to start GitHub login":"启动 GitHub 登录失败","Failed to start LinuxDO login":"启动 LinuxDO 登录失败","Failed to start OIDC login":"启动 OIDC 登录失败","Failed to start Passkey login":"无法启动 Passkey 登录","Failed to start Passkey registration":"启动 Passkey 注册失败","Failed to start Telegram binding":"启动 Telegram 绑定失败","Failed to start testing all channels":"无法开始测试所有渠道","Failed to start verification":"启动验证失败","Failed to sync prices":"同步价格失败","Failed to sync ratios":"同步比率失败","Failed to test all channels":"无法测试所有渠道","Failed to test channel":"测试渠道失败","Failed to update all balances":"无法更新所有余额","Failed to update API key":"更新 API 密钥失败","Failed to update API key status":"更新 API 密钥状态失败","Failed to update balance":"无法更新余额","Failed to update channel":"更新渠道失败","Failed to update models":"更新模型失败","Failed to update profile":"无法更新个人资料","Failed to update provider":"更新提供商失败","Failed to update redemption code":"更新兑换码失败","Failed to update redemption code status":"更新兑换码状态失败","Failed to update setting":"更新设置失败","Failed to update settings":"无法更新设置","Failed to update tag":"更新标签失败","Failed to update user":"更新用户失败","Failure keywords":"失败关键词","Failure reason":"失败原因","Fair":"公平","Fallback":"兜底","Fallback base URL":"兜底 Base URL","Fallback for remaining models":"留空匹配剩余模型","Fallback must be last":"兜底必须在最后","Fallback route":"兜底路由","Fallback tier":"兜底阶梯","FAQ":"常见问答","FAQ added. Click \\"Save Settings\\" to apply.":"FAQ 已添加。点击 \\"保存设置\\" 以应用。","FAQ deleted. Click \\"Save Settings\\" to apply.":"FAQ 已删除。点击 \\"保存设置\\" 以应用。","FAQ saved successfully":"FAQ 保存成功","FAQ updated. Click \\"Save Settings\\" to apply.":"FAQ 已更新。点击 \\"保存设置\\" 以应用。","FastGPT":"FastGPT","Feature in development":"功能开发中","Fee":"扣费","Fee Amount":"扣费金额","Fetch":"拉取","Fetch available models for:":"获取可用模型:","Fetch available models from upstream":"从上游获取可用模型","Fetch from Upstream":"从上游获取","Fetch mode":"拉取模式","Fetch Models":"获取模型","Fetched {{count}} model(s) from upstream":"从上游获取了 {{count}} 个模型","Fetched {{count}} models":"已获取 {{count}} 个模型","Fetched in your browser and placed in the source field below for review. GitHub and gist page URLs are rewritten to their raw URL automatically.":"由浏览器拉取并填入下方源码框供你审查。GitHub 与 gist 页面 URL 会自动改写为 raw URL。","Fetching models...":"正在获取模型…","Fetching plugin source...":"正在拉取插件源码…","Fetching prefill groups...":"正在获取预填充分组...","Fetching upstream prices...":"正在获取上游价格...","Fetching upstream ratios...":"正在获取上游比例...","Fetching...":"正在拉取…","field":"字段","Field":"字段","Field change details were not recorded":"未记录字段变更明细","Field Mapping":"字段映射","Field passthrough controls":"字段透传控制","Field Path":"字段路径","Fields":"字段","File":"文件","File could not be verified":"文件尚未校验","File integrity verified":"文件校验通过","File Search":"文件搜索","File verification":"文件校验","Files to Retain":"保留文件数","Fill a CLI template or add a blank rule.":"填充 CLI 模板,或添加空白规则。","Fill All Models":"填充所有模型","Fill Codex CLI / Claude CLI Templates":"填充 Codex CLI / Claude CLI 模板","Fill entire column":"填充整列","Fill example (all channels)":"填充示例(全部渠道)","Fill example (specific channels)":"填充示例(指定渠道)","Fill in":"填入","Fill in both Merchant ID and API Private Key before creating.":"创建前请填写 Merchant ID 和 API 私钥。","Fill in the credentials above to begin.":"请先填写上方凭证。","Fill in the following info to create a new subscription plan":"填写以下信息创建新的订阅套餐","Fill in this website":"填入当前网站","Fill Related Models":"填入相关模型","Fill Template":"填入模板","Fill template: level and active":"填充模板:等级和激活状态","Fill template: level message":"填充模板:等级提示","Fill template: organization message":"填充模板:组织提示","Fill template: organization or role":"填充模板:组织或角色","Fill Templates":"填充模板","Fill the complete model value from the client request body, for example gpt-4o or gemini-2.5-flash. Separate multiple models with commas.":"填写客户端请求体里的完整 model 值,例如 gpt-4o 或 gemini-2.5-flash。多个模型用英文逗号分隔。","Fill thoughtSignature only for Gemini/Vertex channels using the OpenAI format":"仅为使用 OpenAI 格式的 Gemini/Vertex 渠道填充 thoughtSignature","Filled {{count}} model(s)":"已填充 {{count}} 个模型","Filled {{count}} related model(s)":"已填充 {{count}} 个关联模型","Filter":"筛选","Filter by API key...":"按 API 密钥筛选...","Filter by channel ID":"按渠道 ID 筛选","Filter by group":"按分组筛选","Filter by MjProxy task ID":"按 MjProxy 任务 ID 筛选","Filter by model name":"按模型名称筛选","Filter by model name...":"按模型名称筛选...","Filter by model...":"按模型筛选...","Filter by name or ID...":"按名称或 ID 筛选...","Filter by name, ID, or key...":"按名称、ID 或密钥筛选...","Filter by name...":"按名称筛选...","Filter by node":"按节点筛选","Filter by price field":"按价格字段筛选","Filter by ratio type":"按倍率类型筛选","Filter by request ID":"按请求 ID 筛选","Filter by task ID":"按任务 ID 筛选","Filter by token name":"按 Token 名称筛选","Filter by username":"按用户名筛选","Filter by username, name or email...":"按用户名、姓名或邮箱筛选...","Filter Dashboard Models":"筛选仪表板模型","Filter mappings":"筛选映射","Filter models by provider, group, type, endpoint, and tags.":"按供应商、分组、类型、端点和标签筛选模型。","Filter models by type, endpoint, vendor, group and tags":"按类型、端点、供应商、分组和标签筛选模型","Filter models...":"筛选模型...","Filter plugins...":"筛选插件...","Filter the model analytics view by time range and user.":"按时间范围和用户筛选模型分析视图。","Filter the traffic flow view by time range and user.":"按时间范围和用户筛选分流图视图。","Filter...":"筛选...","Filters":"筛选器","Filters active":"筛选已启用","Final Consumed":"最终消耗","Final cost = base × multiplier when conditions match":"匹配条件时,最终费用 = 基础费用 × 倍率","Final price multiplier (0.95 = 5% discount":"最终价格乘数 (0.95 = 5% 折扣","Finance":"金融","Find":"查找","Find the billing group.":"确定计费分组。","Find the ratio.":"确定倍率。","Finish reordering":"完成排序","Finish Time":"完成时间","Finished requests":"已结束请求","First API request":"首个 API 请求","First token":"首字","First/Last Frame to Video":"首尾生视频","Fix Abilities":"修复渠道一致性","Fix order":"修复顺序","Fix the Request Header Override JSON first":"请先修正请求头覆盖的 JSON","Fuzzy search keywords must be at least 2 characters long":"使用模糊搜索时,关键词长度至少为 2 个字符","Fixed":"修复","Fixed abilities: {{success}} succeeded, {{fails}} failed":"渠道一致性修复完成:{{success}} 个成功,{{fails}} 个失败","Fixed channel constraint":"固定渠道约束","Fixed fee per request":"每次请求固定费用","Fixed price":"固定价格","Fixed price (USD)":"固定价格 (USD)","Fixed request price":"固定按次价格","Flexible integration":"灵活接入","Floating":"浮动","Flow":"分流","Flow Filters":"分流筛选","Flow width metric":"连线粗细","FluentRead extension not detected. Please ensure it is installed and active.":"未检测到 FluentRead 扩展。请确保已安装并激活。","Flush interval (minutes)":"刷库间隔(分钟)","Follow the guided steps to prepare your workspace before the first login.":"请按照引导步骤在首次登录前准备您的工作区。","Follow user group":"跟随用户","Font":"字体","Footer":"页脚","Footer text displayed at the bottom of pages":"显示在页面底部的页脚文本","footer.columns.about.links.aboutProject":"关于项目","footer.columns.about.links.contact":"联系我们","footer.columns.about.links.features":"功能","footer.columns.about.title":"关于我们","footer.columns.docs.links.apiDocs":"API 文档","footer.columns.docs.links.installation":"安装指南","footer.columns.docs.links.quickStart":"快速入门","footer.columns.docs.title":"文档","footer.columns.related.links.midjourney":"MjProxy","footer.columns.related.links.newApiKeyTool":"new-api-key-tool","footer.columns.related.links.oneApi":"One API","footer.columns.related.title":"相关项目","footer.defaultCopyright":"版权所有。","footer.newapi.projectAttributionSuffix":"版权所有,由项目贡献者设计与开发。","For advanced custom channels this applies only to /v1/responses routes without protocol conversion.":"高级自定义渠道仅对 /v1/responses 且不做协议转换的路由生效。","GitHub ID is empty!":"GitHub ID 为空!","For channels added after May 10, 2025, no need to remove \\".\\" from model names during deployment":"对于 2025 年 5 月 10 日之后添加的渠道,在部署时无需从模型名称中移除 \\".\\"","For private deployments, format: https://fastgpt.run/api/openapi":"对于私有部署,格式为:https://fastgpt.run/api/openapi","For this channel, map the model name in client requests to the model name sent upstream.":"将客户端请求中的模型名称替换为此渠道对应的上游模型名称。","For this website, you can enter: {{domain}}":"当前网站通常填写:{{domain}}","Force a syntactically valid JSON response":"强制返回语法合法的 JSON","Force AUTH LOGIN":"强制 AUTH LOGIN","Force Format":"强制格式化","Force format response to OpenAI standard (OpenAI channel only)":"强制将响应格式化为 OpenAI 标准(仅限 OpenAI 渠道)","Force JSON object or schema-conforming output":"强制输出 JSON 对象或符合 Schema 的结果","Force operation":"强制操作","Force SMTP authentication using AUTH LOGIN method":"强制使用 AUTH LOGIN 方法进行 SMTP 认证","Force-disabled two-factor authentication for the user":"强制关闭了用户的两步验证","Forest Whisper":"森林低语","Forgot password":"忘记密码","Forgot password?":"忘记密码?","Form reset to saved values":"表单已重置为保存的值","Format":"格式","Format conversion is unavailable; the client must use a format the upstream supports":"格式转换不可用,客户端必须直接使用上游支持的格式","Format JSON":"格式化 JSON","Format:":"格式:","Format: Access Key ID|Secret Access Key":"格式:Access Key ID|Secret Access Key","Format: AccessKey|SecretKey (or just ApiKey if upstream is New API)":"格式:AccessKey|SecretKey(如果上游是 New API,则只需 ApiKey)","Format: Ak|Sk|Region":"格式:Ak|Sk|Region","Format: APIKey-AppId, e.g., fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041":"格式:APIKey-AppId,例如:fastgpt-0sp2gtvfdgyi4k30jwlgwf1i-64f335d84283f05518e9e041","Format: APIKey|SecretKey":"格式:APIKey|SecretKey","Format: APPID|APISecret|APIKey":"格式:APPID|APISecret|APIKey","Format: TokenHub API Key, or legacy AppId|SecretId|SecretKey":"格式:TokenHub API Key,或旧版 AppId|SecretId|SecretKey","Got it":"知道了","Gotify server URL cannot be empty":"Gotify 服务器地址不能为空","Gotify token cannot be empty":"Gotify 令牌不能为空","Forward requests directly to upstream providers without any post-processing.":"将请求直接转发给上游提供商,不进行任何后处理。","Forwarding Routes":"路由转发","Frames per second":"帧率","Free":"可用","Free: {{free}} / Total: {{total}}":"可用空间: {{free}} / 总空间: {{total}}","Frequency Penalty":"频率惩罚","Friendly name to identify this channel":"用于识别此渠道的友好名称","From Address":"发件地址","From IO.NET deployment":"来自 IO.NET 部署","From marketplace index":"来自插件源索引","From model redirect, not yet added to models list":"来自模型重定向,尚未加入模型列表","Full API Key":"完整 API 密钥","Full Base URL (supports":"完整基础 URL (支持","Group #{{index}} category name cannot exceed 50 characters":"第{{index}}个分组的分类名称长度不能超过50字符","Group #{{index}} category name duplicates another group":"第{{index}}个分组的分类名称与其他分组重复","Group #{{index}} contains disallowed content":"第{{index}}个分组包含不允许的内容","Group #{{index}} description cannot exceed 200 characters":"第{{index}}个分组的描述长度不能超过200字符","Group #{{index}} has a URL that cannot be parsed: {{error}}":"第{{index}}个分组的URL无法解析:{{error}}","Group #{{index}} has an invalid URL format":"第{{index}}个分组的URL格式不正确","Group #{{index}} is missing the category name field":"第{{index}}个分组缺少分类名称字段","Group #{{index}} is missing the slug field":"第{{index}}个分组缺少Slug字段","Group #{{index}} is missing the URL field":"第{{index}}个分组缺少URL字段","Group #{{index}} slug can only contain letters, numbers, underscores and hyphens":"第{{index}}个分组的Slug只能包含字母、数字、下划线和连字符","Group #{{index}} slug cannot exceed 100 characters":"第{{index}}个分组的Slug长度不能超过100字符","Group #{{index}} URL cannot exceed 500 characters":"第{{index}}个分组的URL长度不能超过500字符","Full Code":"完整代码","Full input length":"完整输入长度","Full input length override":"指定输入上下文总长度","Full JSON":"完整 JSON","Full layout":"全屏布局","Full source":"完整源码","Full upstream catalog":"完整上游目录","Full width":"全宽","Function calling":"函数调用","Functions":"函数","Gateways":"网关","Group name already exists":"组名称已存在","Group name and type cannot be empty":"组名称和类型不能为空","GC Count":"GC 次数","GC executed":"GC 已执行","GC execution failed":"GC 执行失败","Gemini":"Gemini","Gemini and OpenAI audio prices differ for this model. Use separate billing model names to convert them.":"此模型在 Gemini 和 OpenAI 接口上的音频价格不同,请使用独立的计费模型名分别转换。","Gemini Generate Content to OpenAI Chat":"Gemini Generate Content 到 OpenAI Chat","Gemini Generate Content to OpenAI Responses":"Gemini Generate Content 到 OpenAI Responses","Gemini Image 4K":"Gemini 图片 4K","Gemini only":"仅 Gemini","Gemini will continue to auto-detect thinking mode even with the adapter disabled. Enable this only when you need finer control over pricing and budgeting.":"即使禁用适配器,Gemini 也会继续自动检测思维模式。仅当您需要对定价和预算进行更精细的控制时才启用此选项。","General":"常规","General Settings":"通用设置","Generate":"生成","Generate Lyrics":"生成歌词","Generate Midjourney images through MjProxy":"通过 MjProxy 接入 Midjourney 图片生成","Generate Midjourney images through MjProxyPlus":"通过 MjProxyPlus 接入 Midjourney 图片生成","Generate Music":"生成音乐","Generate music and lyrics through SunoAPI":"通过 SunoAPI 接入音乐与歌词生成","Generate new backup codes for account recovery":"生成新的备份代码用于账户恢复","Generate New Codes":"生成新代码","Generate tokens from the Tokens page; you can scope them to specific models, groups, IPs, and rate-limits.":"在「令牌」页面生成 API Key,可以按模型、分组、IP、速率等维度精细化授权。","Generated image":"生成的图像","Generating new codes will invalidate all existing backup codes.":"生成新代码将使所有现有备份代码失效。","Generating...":"生成中...","Generation quality preset":"生成质量预设","Generation was interrupted":"生成已中断","Generic cache":"通用缓存","Get advice":"获取建议","Get one here":"点此获取","Get started":"开始使用","Get Started":"开始使用","GitHub":"GitHub","GitHub rate limit reached. Try again later.":"已达到 GitHub 请求限制,请稍后重试。","Give the group a recognizable name and optional description.":"为该分组提供一个可识别的名称和可选的描述。","Give this group a recognizable name.":"为此分组提供一个可识别的名称。","Header override must be valid JSON format":"请求头覆盖必须是合法的 JSON 格式","Global and channel settings":"全局与渠道设置","Global configuration and administrative tools.":"全局配置和管理工具。","Global Coverage":"全球覆盖","Global default":"全局默认","Global default: {{mode}}":"全局默认:{{mode}}","Global Model Configuration":"全局模型配置","Global throughput":"全局吞吐量","Go Back":"返回","Go back and edit":"返回修改","Go to Dashboard":"前往仪表板","Go to first page":"前往首页","Go to GitHub":"前往 GitHub","Go to home":"返回主页","Go to io.net API Keys":"前往 io.net API 密钥","Go to last page":"前往末页","Go to next page":"前往下一页","Go to page {{page}}":"前往第 {{page}} 页","Go to previous page":"前往上一页","Go to settings":"前往设置","Go to Settings":"前往设置","Good":"良好","Gotify Application Token":"Gotify 应用令牌","Gotify Documentation":"Gotify 文档","Gotify Server URL":"Gotify 服务器 URL","gpt-3.5-turbo":"gpt-3.5-turbo","gpt-3.5-turbo-0125":"gpt-3.5-turbo-0125","gpt-4":"gpt-4","gpt-4, claude-3-opus, etc.":"gpt-4, claude-3-opus, 等","GPU count":"GPU 数量","Granted at":"发放时间","Greater than":"大于","Greater Than":"大于","Greater than or equal":"大于等于","Greater Than or Equal":"大于等于","Grok":"Grok","Grok Settings":"Grok 设置","Group":"分组","Group {{path}}":"组 {{path}}","Group & Quota":"分组与配额","Group added. Click \\"Save Settings\\" to apply.":"组已添加。点击 \\"保存设置\\" 以应用。","Group channels by tag for batch operations":"按标签对渠道进行分组以进行批量操作","Group config overrides global limits, shares the same period":"分组配置覆盖全局限制,共享同一周期","Group deleted. Click \\"Save Settings\\" to apply.":"组已删除。点击 \\"保存设置\\" 以应用。","Group description":"分组描述","Group details":"分组详情","Group identifier":"分组标识符","Group is required":"组是必需的","Group name":"分组名称","Group Name":"分组名称","Group name cannot be changed when editing.":"编辑时无法更改组名称。","Group prices cannot be expanded because this expression is not a standard tiered pricing expression.":"该表达式不是标准分档计费表达式,无法展开分组价格。","Group Pricing":"分组定价","Group pricing usage guide":"分组定价使用教程","group ratio":"分组倍率","Group Ratio":"分组倍率","Group ratios":"分组比例","Group settings":"分组设置","Group updated. Click \\"Save Settings\\" to apply.":"组已更新。点击 \\"保存设置\\" 以应用。","Group visibility":"分组可见性","Group-based rate limits":"基于分组的速率限制","Group:":"分组:","Group: {{ratio}}x":"分组:{{ratio}}x","Grouped monitor status from Uptime Kuma":"来自 Uptime Kuma 的分组监控状态","Groups":"分组","Groups *":"分组 *","Groups that users can select when creating API keys.":"用户在创建 API 密钥时可以选择的分组。","Growth":"增长","Guardrails":"安全护栏","Guest":"访客","h":"小时","Haiku Model":"Haiku 模型","Hang tight while we finish connecting your account.":"请稍等,我们正在完成连接您的账户。","Hang tight while we securely link this account to your profile.":"请稍等,我们正在安全地将此账户链接到您的个人资料。","Hardware":"硬件","Hardware type":"硬件类型","Has been disabled":"已禁用","Has been enabled":"已启用","Has been invalidated":"已作废","Have a Code?":"有兑换码吗?","Header":"请求头","header instead.":" 请求头。","Header Name":"请求头名称","Header navigation":"顶部导航","Header Override":"标头覆盖","Header Passthrough (X-Request-Id)":"请求头透传(X-Request-Id)","Header Value (supports string or JSON mapping)":"请求头值(支持字符串或 JSON 映射)","header. Anthropic-formatted endpoints accept the":" 请求头。Anthropic 格式的端点也接受","Health":"健康","Health check timeout threshold (seconds)":"健康检查耗时阈值(秒)","Healthy":"正常","Hidden":"屏蔽","Hidden — verify to reveal":"隐藏 — 验证以显示","Hidden {{count}} models from model square":"已从模型广场隐藏 {{count}} 个模型","Hidden from {{group}}":"对 {{group}} 屏蔽","Hidden from catalog":"在目录隐藏","Hidden from the model square by metadata policy.":"已通过元数据策略在模型广场隐藏。","Hide":"隐藏","Hide API key":"隐藏 API 密钥","Hide from catalog":"从目录隐藏","Hide from model square":"从模型广场隐藏","Hide redirect panel":"收起重定向面板","ID is empty":"ID 为空","ID is empty!":"ID 为空!","Hide selected models from model square":"从模型广场隐藏所选模型","Hide sensitive data":"隐藏敏感数据","Hide setup guide":"隐藏设置引导","High Performance":"高性能","High-risk operation confirmation":"高危操作确认","High-risk status code retry confirmation text":"我已了解多重计费与崩溃风险,确认开启","High-risk status code retry input mismatch":"输入内容与要求不一致","High-risk status code retry input placeholder":"请完整输入上方文字","High-risk status code retry risk check 1":"我已充分阅读并理解:本人已完整阅读上述全部风险提示,完全理解强制重试 504 和 524 状态码可能带来的破坏性后果。","High-risk status code retry risk check 2":"我已与上游沟通并确认:本人确认,当前出现的超时问题属于上游服务的瓶颈。本人已与上游提供商进行过沟通,确认上游无法解决该超时问题,因此才采取强制重试方案作为妥协手段。","High-risk status code retry risk check 3":"我自愿承担计费损失:本人知晓并接受由此产生的全部双重/多重计费风险,承诺不会因重试导致的账单异常在本项目仓库中提交 Issue 或抱怨。","High-risk status code retry risk check 4":"我自愿承担系统稳定性风险:本人知晓该操作可能导致客户端严重超时及服务崩溃。若因本人开启此功能导致请求积压或服务不可用,后果由本人自行承担。","High-risk status code retry risk disclaimer":"### ⚠️ 高危操作:504/524 状态码重试风险告知与免责声明\\n\\n本项目默认对 `400`(请求错误)、`504`(网关超时)和 `524`(CDN 超时)状态码不进行重试。504 和 524 错误通常意味着**请求已成功送达上游 AI 服务,且上游正在处理,但因上游处理时间过长导致连接断开**。这通常说明超时源于上游服务瓶颈。\\n\\n开启对此类超时状态码的重定向/重试属于**极高风险操作**。在开启该功能前,您必须仔细阅读并知悉以下严重后果:\\n\\n#### 一、核心风险告知(请仔细阅读)\\n\\n1. 💸 双重/多重计费风险:绝大多数 AI 上游厂商对于已经开始处理但因网络原因中断(504/524)的请求**依然会进行扣费**。此时若触发重试,将会向上游发起全新请求,导致您被**双重甚至多重计费**。\\n2. ⏳ 客户端严重超时:单次请求已经触发超时,叠加重试机制将会使总请求耗时成倍增加,导致您的最终客户端(或调用方)出现严重甚至完全无法接受的超时现象。\\n3. 💥 请求积压与系统崩溃风险:强制重试超时请求会长时间占用系统线程和连接数。在高并发场景下,这会导致严重的**请求积压**,进而耗尽系统资源,引发雪崩效应,导致您的整个代理服务崩溃。\\n\\n#### 二、风险确认声明\\n\\n如果您坚持开启该功能,即代表您作出以下确认:","Higher priority channels are selected first":"优先级更高的渠道优先被选中","Historical capitalization":"历史大小写","Historical tokens":"历史令牌","Historical Usage":"历史使用情况","History of MjProxy-style image tasks.":"MjProxy 风格图像任务历史。","Hit criteria: If cached tokens exist in usage, it counts as a hit.":"命中判定:usage 中存在 cached tokens 即视为命中。","Image count {{count}}":"生成数量 {{count}}","Hit Rate":"命中率","Hit tier":"命中档位","Home":"主页","Home Page Content":"首页内容","Homepage URL":"主页 URL","Hook":"钩子","Hostname or IP of your SMTP provider":"您的 SMTP 提供商的主机名或 IP","Hour":"小时","Hour of day":"小时","Hourly token usage by model across the last 24 hours":"过去 24 小时内各模型的逐小时 Token 用量","Hourly token usage by model over the past 24 hours":"过去 24 小时内按模型分布的小时级 Token 使用量","hours":"小时","How a call is priced":"一次调用如何计价","How a session is identified and which channel it keeps.":"定义如何识别会话及其使用的渠道。","How client credentials are sent to the token endpoint":"客户端凭据如何发送至令牌端点","How frequently the system checks auto-disabled channels for recovery":"系统检查自动禁用渠道是否可恢复的频率","How frequently the system tests all channels":"系统测试所有渠道的频率","How It Works":"工作流程","How model mapping works":"模型映射如何工作","How much to charge for each US dollar of balance (Epay)":"每美元余额(Epay)的收费金额","How this model name should match requests":"此模型名称应如何匹配请求","How to deliver the resulting image":"图像结果的返回方式","Inactive disk cache cleared":"不活跃的磁盘缓存已清理","How to get an io.net API Key":"如何获取 io.net API 密钥","How to reset my quota?":"如何重置我的配额?","How to select keys: random or sequential polling":"密钥选择方式:随机或顺序轮询","How to set up Passkey domains":"如何设置通行密钥域名","How will you use the platform?":"您将如何使用本平台?","HTTP Protocol":"HTTP 协议","HTTP protocol must be Auto or HTTP/1.1":"HTTP 协议必须是自动或 HTTP/1.1","HTTP/1.1":"HTTP/1.1","HTTP/2 Connection Shards":"HTTP/2 连接分片","HTTP/2 connection shards are unavailable when HTTP/1.1 is selected.":"选择 HTTP/1.1 时不可用 HTTP/2 连接分片。","HTTP/2 connection shards must be 1 when HTTP/1.1 is selected":"选择 HTTP/1.1 时,HTTP/2 连接分片必须为 1","HTTP/2 connection shards must be between 1 and 8":"HTTP/2 连接分片必须在 1 到 8 之间","https://api.day.app/yourkey/{{title}}/{{content}}":"https://api.day.app/yourkey/{{title}}/{{content}}","https://api.example.com":"https://api.example.com","https://ark.ap-southeast.bytepluses.com":"https://ark.ap-southeast.bytepluses.com","https://ark.cn-beijing.volces.com":"https://ark.cn-beijing.volces.com","https://cloud.siliconflow.cn/i/hij0YNTZ":"https://cloud.siliconflow.cn/i/hij0YNTZ","https://docs.example.com":"https://docs.example.com","https://example.com":"https://example.com","https://example.com/logo.png":"https://example.com/logo.png","https://example.com/qr-code.png":"https://example.com/qr-code.png","https://example.com/topup":"https://example.com/topup","https://example.com/webhook":"https://example.com/webhook","https://gateway.example.com":"https://gateway.example.com","https://github.com/QuantumNous/new-api":"https://github.com/QuantumNous/new-api","https://gotify.example.com":"https://gotify.example.com","https://pay.example.com":"https://pay.example.com","https://provider.com/.well-known/openid-configuration":"https://provider.com/.well-known/openid-configuration","https://status.example.com":"https://status.example.com","https://wechat-server.example.com":"https://wechat-server.example.com","https://worker.example.workers.dev":"https://worker.example.workers.dev","https://your-server.example.com":"https://your-server.example.com","Human-readable name shown to users during Passkey prompts.":"在 Passkey 提示期间向用户显示的人类可读名称。","I confirm enabling high-risk retry":"我确认开启高危重试","I have read and agree to the":"我已阅读并同意","I have read and understood the above compliance reminder":"我已阅读并理解上述合规提醒","I have read and understood the above compliance reminder, acknowledge the related legal risks, and confirm that I bear legal responsibility arising from deployment, operation, and charging behavior.":"我已阅读并理解上述合规提醒,确认相关法律风险,并确认承担因部署、运营和收费行为产生的法律责任。","I understand that disabling 2FA removes its authenticator and backup codes.":"我了解,关闭 2FA 将移除身份验证器验证方式及其备用码。","I understand that disabling 2FA will remove all protection and backup codes":"我理解禁用 2FA 将移除所有保护和备份代码","Icon":"图标","Icon file must be 100 KB or smaller":"图标文件必须小于等于 100 KB","Icon identifier (e.g. github, gitlab)":"图标标识符(例如 github、gitlab)","ID":"ID","If an upstream error contains any of these keywords (case insensitive), the channel will be disabled automatically.":"如果上游错误包含以下任何关键字(不区分大小写),渠道将自动禁用。","If authorization succeeds, the generated JSON will be inserted into the key field. You still need to save the channel to persist it.":"授权成功后,生成的 JSON 将插入密钥字段。您仍需保存渠道以持久化。","If connecting to upstream One API or New API relay projects, use OpenAI type instead unless you know what you are doing":"如果连接上游 One API 或 New API 中继项目,除非您知道自己在做什么,否则请使用 OpenAI 类型","If default auto group is enabled, newly created tokens start with auto instead of an empty group.":"如果启用默认 auto 分组,新建令牌会默认使用 auto,而不是空分组。","If left blank, the system may use a different website address and Passkey sign-in can fail here.":"留空时,系统可能使用另一个网站地址,导致在当前网站无法用通行密钥登录。","If no preceding rule matched: {{condition}}":"前面未命中,且 {{condition}}","If the affinity channel fails and retry succeeds on another channel, update affinity to the successful channel.":"如果亲和到的渠道失败,重试到其他渠道成功后,将亲和更新到成功的渠道。","If this keeps happening, please report it on GitHub Issues.":"如果问题持续出现,请到 GitHub Issues 反馈。","If users already have Passkeys, changing this domain may require them to sign in another way and set up their Passkeys again.":"如果用户已经绑定过通行密钥,更改这里后,可能需要通过其他方式登录并重新绑定。","If you provide generative AI services to the public in mainland China, you will fulfill legal obligations including filing, security assessment, content safety, complaint handling, generated content labeling, log retention, and personal information protection.":"如果你在中国大陆向公众提供生成式人工智能服务,你将履行备案、安全评估、内容安全、投诉处理、生成内容标识、日志留存和个人信息保护等法律义务。","If your Passkey belongs to another website, start sign-in there:":"如果通行密钥属于其他网站,请前往该网站登录:","Ignore":"忽略","Ignore this version":"忽略该版本提醒","Ignored upstream models":"已忽略上游模型","image":"张","Image":"图片","Image Cache":"图片缓存","Image cache input price":"图片缓存输入价格","Image count":"图片数量","Image Generation":"图片生成","Image In":"图像输入","Image input":"图片输入","Image input price":"图像输入价格","Image not available":"图片不可用","Image Out":"图像输出","Image output price":"图像输出价格","Image Preview":"图片预览","Image prices with count, size or quality adjustments must be converted manually.":"包含数量、尺寸或质量调整的图片定价需手动转换。","Image ratio":"图片倍率","Image to Video":"图生视频","Image Tokens":"图像 Token","Imagine the pricing table has three groups: default (ratio 1.0), premium (ratio 0.5), and vip (ratio 0.8). Users whose account is in the vip group get user-level perks, and premium is a cheaper channel pool that users can pick for their tokens.":"假设定价分组表里有三个分组:default(倍率 1.0)、premium(倍率 0.5)、vip(倍率 0.8)。账号在 vip 分组的用户享受用户级待遇,premium 则是一个更便宜的渠道池,用户建令牌时可以选它。","Import from URL":"从 URL 导入","Import to CC Switch":"填入 CC Switch","Input Price: High to Low":"输入价格:从高到低","Input Price: Low to High":"输入价格:从低到高","Insert a new priority tier":"插入新优先级","Invalid announcements format: {{error}}":"系统公告格式错误:{{error}}","Invalid API info format: {{error}}":"API信息格式错误:{{error}}","Invalid authorization code":"无效的授权码","Invalid Bark push URL":"无效的 Bark 推送 URL","Invalid billing expression for model {{model}}: {{error}}":"模型 {{model}} 的计费表达式无效:{{error}}","Important":"重要","Invalid channel ID":"渠道ID格式错误","Importing metadata does not add channels, enable model access, or configure prices.":"导入元信息不会添加渠道、开放模型访问或配置价格。","Invalid channel priority move":"无效的渠道优先级调整","Invalid channel settings format: {{error}}":"渠道额外设置格式错误:{{error}}","In BotFather, open Login Widget, register this callback URL, and copy the Client ID and Client Secret. Existing Telegram bindings will continue to work after configuration.":"在 BotFather 中打开 Login Widget,登记此回调地址并复制 Client ID 和 Client Secret。完成配置后,现有 Telegram 绑定可继续使用。","In JSON, the user group is the outer key and the billing group is the inner key. The example below means: vip users pay 0.8 when billed as standard, and 0.3 when billed as premium.":"在 JSON 中,外层键是用户分组,内层键是计费分组。下面的示例表示:vip 用户按 standard 计费时用 0.8,按 premium 计费时用 0.3。","In Progress":"进行中","Invalid Discovery URL. Only http and https are supported":"Discovery URL 无效,仅支持 http/https","Invalid email address":"无效的邮箱地址","In the visual editor these appear as Extra visible and Hidden. In JSON, +: (or no prefix) adds a group and -: removes one.":"在可视化编辑器中显示为「额外可见」和「屏蔽」。在 JSON 中,+:(或无前缀)表示添加分组,-: 表示移除分组。","Invalid FAQ format: {{error}}":"FAQ信息格式错误:{{error}}","Invalid Gotify server URL":"无效的 Gotify 服务器地址","Invalid ID":"无效的 ID","In:":"入:","Invalid input":"输入不合法","Invalid input {{error}}":"输入不合法 {{error}}","incident":"次故障","incidents":"次故障","Incidents":"事件","Include {{price}}":"启用{{price}}","Include at least one price variable.":"请启用至少一个价格变量。","Include Group":"包含分组","Include Model":"包含模型","Invalid parameters":"无效的参数","Include name":"包含名称","Invalid Passkey login state":"Passkey 登录状态异常","Include quota":"包含额度","Include Rule Name":"包含规则名","Invalid Passkey verification request":"无效的 Passkey 验证请求","Includes changes that require security verification, such as password, two-factor settings, and account deletion.":"包含需要安全验证的变更,例如密码、两步验证设置和删除账户。","Includes request rules":"包含请求规则","Invalid provider ID":"无效的提供商 ID","Invalid request":"无效的请求","Invalid request body.":"无效的请求体。","Invalid request parameter format":"请求参数格式错误","Invalid request parameters: {{error}}":"无效的请求参数: {{error}}","Includes tool-call surcharge":"包含工具调用附加费","Including failed requests, 0 = unlimited":"包括失败的请求,0 = 无限制","Incoming path":"入口路径","Incoming path is required":"入口路径不能为空","Incoming path must be unique":"入口路径必须唯一","Incoming path must not include query":"入口路径不能包含 query","Incoming path must start with /":"入口路径必须以 / 开头","Invalid subscription ID":"无效的订阅ID","Invalid top-up amount":"充值数量无效","Invalid top-up quota":"无效的充值额度","Invalid Uptime Kuma group settings format: {{error}}":"Uptime Kuma分组配置格式错误:{{error}}","Invalid user ID":"无效的用户 ID","Incomplete":"未完成","Invalid warning type":"无效的预警类型","Invalid Webhook URL":"无效的 Webhook 地址","Increase quota for user “{{name}}”":"增加用户「{{name}}」的额度","Increase user quota":"增加用户额度","Increased user quota by {{quota}}":"增加用户额度 {{quota}}","Index":"索引","Invitation code bonus {{quota}}":"使用邀请码赠送 {{quota}}","Index request failed with HTTP {{status}}":"索引请求失败,HTTP {{status}}","Invitation quota is insufficient!":"邀请额度不足!","Index URL":"索引 URL","Information unavailable":"暂时无法读取","Inherit global Auto order":"继承全局 Auto 顺序","Inherit global default":"继承全局默认","Inherit vendor icon":"继承供应商图标","Inherited":"继承","Inherited from {{vendor}}":"继承自 {{vendor}}","Initial quota given to new users":"授予新用户的初始配额","Initial quota given to new users ({{formattedQuota}})":"授予新用户的初始配额({{formattedQuota}})","Initialization failed, please try again.":"初始化失败,请重试。","Initialize":"初始化","Initialize system":"初始化系统","Initializing…":"正在初始化…","Inpaint":"局部重绘","Input":"输入","Input mode":"输入模式","Input pre-consume multiplier":"输入预扣倍率","Input price":"输入价格","Input price is required before saving dependent prices.":"保存依赖价格前必须先填写输入价格。","Input token rate":"输入 Token 速率","Input tokens":"输入 token","Input Tokens":"输入 Token","Inset":"内嵌","Inspect requests, errors, and billing details":"查看请求、错误和计费详情","Inspect user prompts":"检查用户提示","Install":"安装","Install {{name}}":"安装 {{name}}","Install and enable":"安装并启用","Install, configure, test, and remove task plugins.":"安装、配置、测试和移除任务插件。","Installed":"已安装","Installed {{name}} v{{version}}":"已安装 {{name}} v{{version}}","Installed v{{from}} → marketplace v{{to}}":"已安装 v{{from}} → 市场 v{{to}}","Installed v{{installed}} not listed":"已装 v{{installed}} 不在索引中","Installed version is not in this index":"已安装的版本不在该索引中","Installing...":"正在安装…","Instance":"实例","Instances":"实例","Insufficient balance":"余额不足","Insufficient permission to adjust this user":"无权调整该用户的额度","Integrations":"集成","Integrity check failed":"完整性校验失败","Integrity hash":"完整性哈希","Integrity verification unavailable in this environment":"当前环境无法校验","Inter-group overrides":"分组间覆盖","Inter-group ratio overrides":"分组间比例覆盖","Interface Language":"界面语言","Internal Notes":"内部备注","Internal notes (not shown to users)":"内部备注(不显示给用户)","Internal Server Error!":"内部服务器错误!","Interval must be at least 1 minute":"间隔必须至少为 1 分钟","Invalid (NaN)":"无效 (NaN)","Invalid adjustment parameters":"额度调整参数无效","Invalid channel header override":"渠道请求头覆盖配置无效","Invalid channel proxy":"渠道代理配置无效","Invalid chat link. Please contact the administrator.":"无效的聊天链接。请联系管理员。","Invalid chat link. Please contact your administrator.":"无效的聊天链接。请联系您的管理员。","Invalid code":"无效代码","Invalid expression syntax":"表达式语法无效","Invalid inference server address":"推理服务地址无效","Invalid items format":"条目格式无效","Invalid JSON":"JSON 无效","Invalid JSON format":"无效的 JSON 格式","Invalid JSON format or values out of allowed range":"无效的 JSON 格式或值超出允许范围","Invalid JSON in parameter override template":"参数覆盖模板中的 JSON 格式无效","Invalid JSON string.":"无效的 JSON 字符串。","Invalid model mapping format":"无效的模型映射格式","Invalid Passkey domain. Enter a domain without a scheme, port, path or wildcard.":"通行密钥域名无效。请填写域名,不包含协议、端口、路径或通配符。","Join the same priority tier":"加入同一优先级","Key deleted":"密钥已删除","Key disabled":"密钥已禁用","Key enabled":"密钥已启用","Invalid Passkey registration response":"无效的 Passkey 注册响应","Key index out of range":"密钥索引超出范围","Invalid Passkey response":"无效的 Passkey 响应","Invalid payment redirect URL":"无效的支付跳转链接","Invalid pricing value":"定价值无效","Invalid reset link, please request a new password reset":"无效的重置链接,请请求新的密码重置","Invalid reset link, please request a new password reset.":"无效的重置链接,请请求新的密码重置。","Invalid response":"响应无效","Invalid rules JSON format":"规则 JSON 格式不正确","Invalid status code mapping entries: {{entries}}":"无效的状态码映射条目:{{entries}}","Invalid status code rules":"状态码规则无效","Invalid status code rules: {{tokens}}":"无效的状态码规则:{{tokens}}","Invalid vLLM server address":"vLLM 服务地址无效","Invalidate":"作废","Invalidated":"已作废","Invert match":"反向匹配","Invitation Code":"邀请码","Invitation Quota":"邀请额度","Invite Info":"邀请信息","Invited":"已邀请","Invited {{count}} users":"邀请 {{count}} 人","Invited by user ID":"由用户 ID 邀请","Invited Users":"受邀用户","Invitee Reward":"受邀者奖励","Inviter":"邀请人","Inviter ID: {{id}}":"邀请人 ID:{{id}}","Inviter Reward":"邀请者奖励","Invites":"邀请","Invoke developer-defined functions with structured arguments":"使用结构化参数调用开发者定义的函数","InvokeModel (legacy)":"InvokeModel(旧接口)","io.net API Key":"io.net API 密钥","io.net Deployments":"io.net 部署","IP":"IP","IP Address":"IP 地址","IP Filter Mode":"IP 过滤模式","IP Restriction":"IP 限制","IP Whitelist (supports CIDR)":"IP 白名单(支持 CIDR 表达式)","IP: {{ip}} · Method: {{method}}":"IP:{{ip}} · 登录方式:{{method}}","is less than the configured maximum cache size":"小于配置的最大缓存大小","is the default price; ":"为默认价格;","It seems like the page you\'re looking for":"您要查找的页面似乎","Items":"条目","Japanese":"日语","JavaScript file":"JavaScript 文件","Jimeng":"Jimeng","Jina":"Jina","JSON":"JSON","JSON array of group identifiers. When enabled below, new tokens rotate through this list.":"分组标识符的 JSON 数组。在下方启用时,新令牌将在此列表中轮换。","JSON Editor":"JSON 编辑","JSON format error":"JSON 格式错误","JSON format supports service account JSON files":"JSON 格式支持服务账户 JSON 文件","JSON is invalid at line {{line}}, column {{column}}.":"JSON 在第 {{line}} 行、第 {{column}} 列无效。","JSON is invalid at position {{position}}.":"JSON 在位置 {{position}} 无效。","JSON is invalid. Please check the syntax.":"JSON 无效,请检查语法。","JSON keys are request model names; values are upstream model names.":"JSON 的键是请求模型名称,值是上游模型名称。","JSON map of group → description exposed when users create API keys.":"分组 → 描述的 JSON 映射,在用户创建 API 密钥时公开。","JSON map of group → ratio applied when the user selects the group explicitly.":"分组 → 比率的 JSON 映射,当用户明确选择该分组时应用此比率。","JSON map of model → multiplier applied to quota billing.":"模型 → 应用于配额计费的乘数的 JSON 映射。","JSON map of model → USD cost per request. Takes precedence over ratio based billing.":"模型 → 每请求美元成本的 JSON 映射。优先于基于比率的计费。","JSON mode":"JSON 模式","JSON Mode":"JSON 模式","JSON must be an object":"JSON 必须是对象","JSON object:":"JSON 对象:","JSON structure is invalid":"JSON 结构无效","JSON Text":"JSON 文本","Leave empty to use the site default ({{amount}})":"留空则使用系统默认值({{amount}})","Legacy access tokens have been retired. Create a new access token in security settings":"旧版访问令牌已停用,请在安全设置中创建新的访问令牌","JSON-based access control rules. Leave empty to allow all users.":"基于 JSON 的访问控制规则。留空以允许所有用户。","Just now":"刚刚","JustSong":"JustSong","K":"K","Keep affinity when channel is disabled":"渠道禁用后保留亲和","Keep enabled if you need to proxy requests for different upstream accounts.":"如果需要为不同上游账户代理请求,请保持启用。","Keep enough balance before production traffic":"生产流量前保持充足余额","Keep existing domain":"保留现有域名","Keep local":"保留本地","Keep original value":"保留原值","Keep original value (skip if target exists)":"保留原值(目标已有值时不覆盖)","Keep the domains used by existing Passkeys, one per line. If the primary domain changed from www.example.com to example.com, enter www.example.com here.":"每行填写一个已有通行密钥使用的域名。例如,主域名从 www.example.com 改成 example.com 后,应在这里保留 www.example.com。","Keep the names users call; change what is sent upstream.":"用户调用的名称不变,只修改发给上游的名称。","Keep the platform ready":"保持平台就绪","Keep the session binding when the channel is unavailable":"渠道不可用时保留会话绑定","Keep this above 1 minute to avoid heavy database load":"保持此值大于 1 分钟以避免数据库负载过重","Keep this vendor":"保留此供应商","Keep upstream names; choose what users call.":"上游名称不变,设置用户调用的名称。","Keep-alive Ping":"保持连接心跳","Keeps compatible responses more repeatable":"让兼容模型的回复更可复现","Key":"密钥","Key Fingerprint":"Key 指纹","Key Sources":"Key 来源","Key Summary":"Key 摘要","Key Update Mode":"密钥更新模式","Keys, OAuth credentials, and multi-key update behavior.":"管理密钥、OAuth 凭据和多密钥更新行为。","Kind":"类型","Linux DO trust level does not meet the minimum required by administrator":"Linux DO 信任等级未达到管理员设置的最低信任等级","Kling":"Kling","Knowledge Base ID":"知识库 ID","Knowledge Base ID *":"知识库 ID *","Knowledge cutoff":"知识截止","Lake View":"湖光","Landing page with system overview.":"带有系统概览的登陆页面。","Language preference saved":"语言偏好已保存","Language Preferences":"语言偏好","Language preferences sync across your signed-in devices and affect API error messages.":"语言偏好会同步到您登录的所有设备,并影响 API 错误消息语言。","Last 24h usage":"近 24 小时消耗","Last 30 days uptime":"近 30 天可用率","Last active {{time}} · Expires {{expires}}":"最后活跃于 {{time}} · 到期时间 {{expires}}","Last check time":"上次检测时间","Last detected addable models":"上次检测到可加入模型","Last Login":"最后登录","Last Seen":"最后上报","Last successful check":"上次成功检查","Last Tested":"上次测试","Last updated":"最后更新","Last updated:":"上次更新时间:","Last Used":"最后使用","Last used {{time}}":"最后使用于 {{time}}","Last used:":"上次使用时间:","Latency":"延迟","Latency check":"延迟检测","Latency short":"延迟","Latency trend (last 24h)":"延迟趋势(最近 24 小时)","Later":"稍后","Later requests follow the new channel.":"后续请求改用新渠道。","Latest platform updates and notices":"最新平台更新和通知","Latest version":"最新版本","Lavender Dream":"薰衣草梦","Layout":"布局","lead":"领头","Leaderboards":"排行榜","Learn more":"了解更多","Learn more:":"了解更多:","Leave":"离开","Leave blank to keep the existing credential":"留空以保留现有凭证","Leave blank to keep the existing key":"留空以保留现有密钥","Leave blank unless rotating the secret":"除非正在轮换密钥,否则留空","Leave empty for fallback":"留空作为兜底","Leave empty for never expires":"留空表示永不失效","Leave empty only for the final fallback split.":"只有最后一个兜底分流可以留空。","Leave empty to disable the agreement requirement. Supports Markdown, HTML, or a full URL to redirect users.":"留空以禁用协议要求。支持 Markdown、HTML 或用于重定向用户的完整 URL。","Log export is disabled":"日志导出已关闭","Leave empty to disable the privacy policy requirement. Supports Markdown, HTML, or a full URL to redirect users.":"留空以禁用隐私政策要求。支持 Markdown、HTML 或用于重定向用户的完整 URL。","Leave empty to disband the tag":"留空以解散标签","Leave empty to keep existing key":"留空以保留现有密钥","Leave empty to keep unchanged":"留空以保持不变","Log recording":"日志记录","Log search and export":"日志查询与导出","Leave empty to match all models":"留空匹配所有模型","Leave empty to use account email":"留空以使用账户邮箱","Leave empty to use default":"留空使用默认","Leave empty to use system temp directory":"留空使用系统临时目录","Leave empty to use username":"留空以使用用户名","Leave the final split empty as the fallback for models not matched above.":"将最后一个分流留空作为兜底,用于匹配前面未命中的模型。","Leave this empty only for the final fallback split; it catches client models not matched above.":"只有最后一个兜底分流可以留空;它会匹配前面未命中的客户端模型。","Left to Right":"从左到右","Legacy Format (JSON Object)":"旧格式(JSON 对象)","Legacy format must be a JSON object":"旧格式必须是 JSON 对象","Legacy Format Template":"旧格式模板","Legacy full-URL integration; use Advanced Custom for new channels":"旧版完整请求地址接入方式,新渠道建议使用高级自定义","Legacy pricing is deprecated. Convert the current prices to an expression draft, then save to apply it.":"旧定价模式已弃用。可将当前价格转换为计费表达式草稿,保存后生效。","Legacy token":"旧版令牌","Legal":"法律","Less":"更少","Longest log time range (days)":"日志最长时间范围(天)","Less than":"小于","Less Than":"小于","Less than 1 day left":"剩余不足 1 天","Less than or equal":"小于等于","Less Than or Equal":"小于等于","License":"许可证","Light":"浅色","Lightning Fast":"极速","Limit period":"限制周期","Limit Reached":"已达上限","Limit which models can be used with this key":"限制此密钥可使用的模型","Limited":"受限","Limits only token-specific Auto snapshots. Global Auto inheritance remains unlimited.":"仅限制令牌专属的 Auto 快照;继承全局 Auto 时不受此限制。","Limits token selection to a probability mass":"按概率质量限制词元选择范围","LingYiWanWu":"LingYiWanWu","Link to your documentation site":"您的文档站点链接","Linked account":"已绑定账号","Linked models":"关联模型","Linked records are counted once. Matching rules show their covered models separately.":"关联数量按资料记录统计,匹配规则覆盖的模型数量单独展示。","LinuxDO":"LinuxDO","LinuxDO Client ID":"LinuxDO 客户端 ID","LinuxDO Client Secret":"LinuxDO 客户端密钥","List of models supported by this channel. Use comma to separate multiple models.":"此渠道支持的模型列表。使用逗号分隔多个模型。","List of origins (one per line) allowed for Passkey registration and authentication.":"允许用于 Passkey 注册和身份验证的来源列表(每行一个)。","List registered task plugins and bind them when creating or editing task plugin channels.":"列出已注册的任务插件,并在创建或编辑任务插件渠道时绑定它们。","List view":"列表视图","Listing also depends on metadata visibility and the user’s group access.":"是否展示还取决于元数据展示策略和用户可用分组。","Listing hidden":"已隐藏","Live refresh pauses when no task is running":"无任务运行时暂停自动刷新","LLM Leaderboard":"LLM 排行榜","LLM prompt helper":"LLM 辅助设计提示词","Load Balancing":"负载均衡","Load metadata preview":"加载资料预览","Load template...":"加载模板...","Loader":"加载器","Loading":"加载中","Loading channel details":"正在加载渠道详情","Loading configuration":"正在加载配置","Loading content settings...":"正在加载内容设置...","Loading conversation...":"正在加载对话...","Loading current models...":"正在加载当前模型...","Loading failed":"加载失败","Loading installed source...":"正在加载已安装的源码…","Loading maintenance settings...":"正在加载维护设置...","Loading plugins...":"正在加载插件…","Loading settings...":"正在加载设置...","Loading setup status…":"正在加载设置状态…","Loading verification methods...":"正在加载验证方式…","Loading...":"加载中...","Local":"本地","Local Billing":"本地计费","Local check":"本地检查","Local Estimate (billing-usage-anthropic)":"本地估算(billing-usage-anthropic)","Local Estimate (billing-usage-gemini)":"本地估算(billing-usage-gemini)","Local Estimate (billing-usage-openai)":"本地估算(billing-usage-openai)","Local models":"本地模型","Locations":"位置","Locked":"锁定","log":"日志的完整详情","Log cleanup":"日志清理","Log cleanup progress":"日志清理进度","Log cleanup task started.":"日志清理任务已启动。","Log Details":"日志详情","Log Directory":"日志目录","Log File Count":"日志文件数","Log files older than {{value}} days will be deleted.":"将删除 {{value}} 天前的日志文件。","Log IP address for usage and error logs":"记录用于使用和错误日志的 IP 地址","Log Maintenance":"日志维护","Log Type":"日志类型","Low balance reminder":"余额不足提醒","Maximum 100 redemption codes can be generated at once":"一次兑换码批量生成的个数不能大于 100","Logged in successfully via {{method}}":"登录成功(通过 {{method}})","Logic":"逻辑","Login":"登录","Login & Authentication":"登录与认证","Login failed":"登录失败","Login flow expired. Please sign in again.":"登录流程已过期,请重新登录。","Login Info":"登录信息","Login Method":"登录方式","Login session":"登录会话","Login sessions":"登录会话","Maximum number of tokens reached ({{max}})":"已达到最大令牌数量限制 ({{max}})","Login, security and access records":"登录、安全与访问记录","Logo":"徽标","Logo URL":"徽标 URL","Logs":"日志","Long passwords are unavailable until the password storage upgrade is complete.":"密码存储升级完成前暂不支持长密码。","Look for a special ratio rule matching this user group and this billing group. If one exists, use its ratio. Otherwise use the billing group base ratio from the pricing table.":"查找匹配「该用户分组 + 该计费分组」的特殊倍率规则。有就用规则里的倍率,没有就用定价分组表中计费分组的基础倍率。","Low balance":"余额偏低","Lowest median first-token latency":"最低首 token 延迟中位数","m":"分钟","Maintenance":"维护","Make extra groups visible to, or hide default groups from, users of a specific group.":"让特定分组的用户额外看到某些分组,或对其屏蔽默认可选的分组。","Make it easier for teammates to pick the right group.":"让队友更容易选择正确的分组。","Make sure you understand these effects before enabling.":"请确认了解以上影响后再开启。","Manage":"管理","Manage account bindings for this user":"管理此用户的账户绑定","Manage Bindings":"管理绑定","Manage catalog visibility and pricing.":"管理目录可见性和定价。","Manage custom OAuth providers for user authentication":"管理用于用户认证的自定义 OAuth 提供商","Manage Keys":"管理密钥","Manage local models for:":"管理本地模型:","Manage metadata, pricing, and channel connections. Each section saves separately.":"管理资料、定价及渠道关联,各分区分别保存。","Manage multi-key status and configuration for this channel":"管理此渠道的多密钥状态和配置","Manage Ollama Models":"管理 Ollama 模型","Manage pricing, visibility and automatic routing for your groups.":"管理分组定价、可见范围和自动路由顺序。","Manage server log files. Log files accumulate over time; regular cleanup is recommended to free disk space.":"管理服务器运行日志文件。日志文件会随运行时间不断累积,建议定期清理以释放磁盘空间。","Manage sources":"管理源","Manage subscription plans and pricing.":"管理订阅计划和定价。","Manage Subscriptions":"管理订阅","Manage vendor details and linked model records.":"管理供应商资料及关联模型记录。","Manage Vendors":"管理供应商","Manage your LinuxDO OAuth app":"管理你的 LinuxDO OAuth 应用","Manage your security settings and account access":"管理您的安全设置和账户访问","Mantle (Messages API)":"Mantle(Messages API)","Manual Disabled":"手动禁用","Map fields from the user info response to local user attributes. Supports nested paths (e.g. ocs.data.id).":"将用户信息响应中的字段映射到本地用户属性。支持嵌套路径(例如 ocs.data.id)。","Map model identifiers to Gemini API versions. A `default` entry applies when no specific match is found.":"将模型标识符映射到 Gemini API 版本。当未找到特定匹配项时,将应用 `default` 条目。","Map request model names to actual provider model names (JSON format)":"将请求模型名称映射到实际提供商模型名称 (JSON 格式)","Map response status codes (JSON format)":"映射响应状态码(JSON 格式)","Map upstream status codes to different codes":"将上游状态码映射到不同的代码","Market Share":"市场份额","Marketing":"市场营销","Marketplace":"插件市场","Marketplace installs never force past a conflict. Resolve it on the task plugins page, then install again.":"市场安装绝不会强制跳过冲突。请先在任务插件页面处理冲突,然后重新安装。","Marketplace sources":"市场源","Marketplace sources updated":"市场源已更新","Master instances run scheduled background tasks.":"master 实例执行定时后台任务。","Match All (AND)":"必须全部满足(AND)","Match Any (OR)":"满足任一条件(OR)","Match Mode":"匹配方式","Minimum transfer quota is {{min}}!":"转移额度最小为{{min}}!","Match model name exactly":"完全匹配模型名称","Match models containing this name":"匹配包含此名称的模型","Match models ending with this name":"匹配以此名称结尾的模型","Match models starting with this name":"匹配以此名称开头的模型","Match Text":"匹配文本","Match Type":"匹配类型","Match Value":"匹配值","Match Value (optional)":"匹配值(可选)","Missing group ID":"缺少组 ID","Matched":"已命中","Missing model ID":"缺少模型 ID","Matched models":"匹配模型","Missing parameter rule_name, or use all=true to clear everything":"缺少参数:rule_name,或使用 all=true 清空全部","Matched Tier":"命中阶梯","Missing vendor ID":"缺少供应商 ID","Matches models not claimed by earlier splits.":"匹配前面分流未占用的模型。","Matching Rules":"匹配规则","Matching rules apply to metadata. Pricing is configured for each concrete model.":"匹配规则仅用于元信息,价格按具体模型配置。","Max context tokens":"最大上下文 Token 数","Max Disk Cache Size (MB)":"磁盘缓存最大总量 (MB)","Max Entries":"最大条目数","Max output":"最大输出","Max Requests (incl. failures)":"最大请求数(包括失败)","Max Requests (including failures)":"最大请求数(包括失败)","Max requests per period":"每周期最大请求数","Max Retries":"最大重试","Max Success":"最大成功数","Max successful requests":"最大成功请求数","Max Successful Requests":"最大成功请求数","Max Tokens":"最大 Tokens","Maximum {{max}} groups selected":"已达到 {{max}} 个分组上限","Maximum 1000 characters. Supports Markdown and HTML.":"最多 1000 个字符。支持 Markdown 和 HTML。","Maximum 200 characters":"最多 200 个字符","Maximum 500 characters. Supports Markdown and HTML.":"最多 500 个字符。支持 Markdown 和 HTML。","Maximum cached sessions":"最多缓存会话数","Maximum check-in quota":"签到最大额度","Maximum custom groups per token":"每个令牌的最大自定义分组数","Maximum input window":"最大输入窗口","Maximum number of channels tested at the same time (1-32)":"同时测试的最大渠道数(1-32)","Maximum number of tokens each user can create. Default 1000. Setting too large may affect performance.":"每个用户可创建的最大令牌数量。默认 1000。设置过大可能会影响性能。","Maximum number of tokens in the response":"响应中最大 token 数","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}":"模型固定价格 {{model_price}},分组倍率 {{group_ratio}},操作 {{action}}","Model fixed price {{model_price}}, group ratio {{group_ratio}}, action {{action}}, ID {{id}}":"模型固定价格 {{model_price}},分组倍率 {{group_ratio}},操作 {{action}},ID {{id}}","Maximum quota amount awarded for check-in":"签到奖励的最大额度","Maximum retries":"最多重试次数","Maximum tokens including hidden reasoning tokens":"最大 token 数(含隐藏的推理 token)","Maximum tokens per response":"单次响应最大 token 数","Maximum tokens per user":"每个用户的最大令牌数","maxRequests ≥ 0, maxSuccess ≥ 1, both ≤ 2,147,483,647":"maxRequests ≥ 0, maxSuccess ≥ 1,两者均 ≤ 2,147,483,647","May be used for training by upstream provider":"可能被上游提供商用于训练","Mean queue time":"平均排队耗时","Mean request latency":"平均请求耗时","Mean time per output token":"每输出 Token 平均耗时","Mean time to first token":"平均首 Token 延迟","Media access expired. Please try again.":"媒体访问已过期,请重试。","Media preview failed. Please try again.":"媒体预览失败,请重试。","Media pricing":"媒体定价","Median time-to-first-token (TTFT) sampled hourly per group":"按小时采样的各分组首 token 延迟(TTFT)中位数","Medical Q&A, mental health support":"医疗问答与心理健康支持","Memory":"内存","Memory Hits":"内存命中","Memory Threshold (%)":"内存阈值 (%)","Merchant ID":"商户 ID","Merchant ID is required":"商户 ID 为必填项","Merge into Other":"合并为其他","Model name already exists":"模型名称已存在","Model name cannot be empty":"模型名称不能为空","Merge vendors":"合并供应商","Model name is too long: {{model}}":"模型名称过长:{{model}}","Message Priority":"消息优先级","Metadata":"元信息","Metadata changes":"资料变更","Metadata language":"资料语言","Metadata only":"仅元数据","Metadata sync completed":"资料同步完成","Model price {{model_price}}, group ratio {{group_ratio}}":"模型价格 {{model_price}},分组倍率 {{group_ratio}}","Metadata sync disabled":"已禁止资料同步","Metadata sync failed":"资料同步失败","Method":"请求方法","Migration notes":"迁移说明","min downtime":"分钟停机","Min Top-up":"最低充值","Min Top-up:":"最低充值:","Model ratio {{model_ratio}}, completion ratio {{completion_ratio}}, audio ratio {{audio_ratio}}, audio completion ratio {{audio_completion_ratio}}, group ratio {{group_ratio}}":"模型倍率 {{model_ratio}},补全倍率 {{completion_ratio}},音频倍率 {{audio_ratio}},音频补全倍率 {{audio_completion_ratio}},分组倍率 {{group_ratio}}","MiniMax":"MiniMax","Model ratios reset":"重置模型倍率成功","Minimum {{amount}}":"最低 {{amount}}","Minimum check-in quota":"签到最小额度","Minimum LinuxDO trust level required":"所需的最低 LinuxDO 信任级别","Minimum quota amount awarded for check-in":"签到奖励的最小额度","Minimum recharge amount in USD":"最低充值金额(美元)","Minimum recharge amount to qualify for this discount.":"符合此折扣的最低充值金额。","Minimum top-up (optional)":"最低充值(可选)","Minimum top-up (USD)":"最低充值(美元)","Minimum top-up amount must be at least 1":"最低充值金额至少为 1","Minimum top-up quantity":"最低充值数量","Minimum topup amount: {{amount}}":"最低充值金额:{{amount}}","Minimum Trust Level":"最低信任级别","Minimum:":"最低:","Model test":"模型测试","Minor blips in the last 30 days":"近 30 天内有轻微抖动","Mint a fresh pair below — or pick an existing one further down. Click Save when ready.":"在下方创建新的配对,或继续向下选择已有配对。准备好后点击保存。","Minute":"分钟","minutes":"分钟","Missing code":"缺少代码","Missing metadata":"缺元数据","Missing Models":"缺失的模型","Missing user data from Passkey login response":"Passkey 登录响应中缺少用户数据","Mistral":"Mistral","MjProxy":"MjProxy","MjProxyPlus":"MjProxyPlus","Modalities":"模态","Modality":"模态","Mode":"模式","model":"模型","Model":"模型","Model {{model}}":"模型 {{model}}","Model Access":"模型访问","Model Analytics":"模型数据分析","Model Analytics Defaults":"模型分析默认设置","Model Analytics Filters":"模型分析筛选","Model assignments":"模型归属","model billing support":"模型计费支持","Model Call Analytics":"模型调用分析","Model context usage":"模型上下文用量","Model deleted":"模型已删除","Model deleted successfully":"模型删除成功","Model Deployment":"模型部署","Model deployment service is disabled":"模型部署服务未启用","Model Description":"模型描述","Model details":"模型详情","Model disabled successfully":"模型禁用成功","Model discovery uses the first key; other keys are not tested.":"使用第一条密钥获取模型,其他密钥未测试。","Model discovery uses the saved channel connection settings.":"获取模型时使用渠道已保存的连接配置。","Model enabled successfully":"模型启用成功","Model fixed pricing":"模型固定定价","Model Group":"模型分组","Model hidden from model square":"已从模型广场隐藏","Model ID is required":"模型 ID 不能为空","Model Limits":"模型限制","Model limits enabled":"已启用模型限制","Model List":"模型列表","Model management":"模型管理","Model Mapping":"模型映射","Model Mapping (JSON)":"模型映射 (JSON)","Model Mapping must be a JSON object like":"模型映射必须是如下所示的 JSON 对象","Model mapping must be a JSON object with string values":"模型映射必须是值为字符串的 JSON 对象","Model mapping must be a valid JSON object":"模型映射必须是有效的 JSON 对象","Model mapping must be valid JSON":"模型映射必须是有效的 JSON","Model mapping must be valid JSON format":"模型映射必须是有效的 JSON 格式","Model mapping values must be strings":"模型映射的值必须是字符串","Model mappings are being edited in the floating panel.":"模型映射正在悬浮面板中编辑。","Model metadata":"模型资料","Model metadata saved":"模型资料已保存","Model name":"模型名称","Model Name":"模型名称","Model Name *":"模型名称 *","Model name is required":"模型名称为必填项","Model names copied to clipboard":"模型名称已复制到剪贴板","Model not found":"模型未找到","Model performance metrics":"模型性能指标","Model Price":"模型价格","Model price is not configured. Please complete model pricing in settings.":"模型价格未配置,请前往设置补充模型价格。","Model Price Not Configured":"模型价格未配置","Model prices":"模型价格","Model prices reset successfully":"模型价格重置成功","Model Pricing":"模型定价","Model pricing is managed by a super administrator.":"模型定价由超级管理员管理。","Model pricing saved":"模型定价已保存","Model pull failed: {{msg}}":"模型拉取失败:{{msg}}","Move channels into a priority tier or between tiers. Priority values update automatically.":"将渠道拖入同级或插入新的优先级,数值会自动计算。","Multi-key channels do not support balance queries":"多密钥渠道不支持余额查询","Model ratio":"模型倍率","Model ratios":"模型比例","Model ratios reset successfully":"模型比例重置成功","Model redirect is unavailable":"模型重定向不可用","Model redirects":"模型重定向","Model Regex":"模型正则","Model Regex (one per line)":"模型正则(每行一个)","Model regex cannot be empty":"模型正则不能为空","Model scope":"模型范围","Model selected":"已选择模型","Model shown in model square":"已在模型广场显示","Model source":"模型来源","Model Square":"模型广场","Model square visibility":"广场展示","Model Tags":"模型标签","Model to use for testing":"用于测试的模型","Model to use when testing channel connectivity":"测试渠道连接时使用的模型","Model Version":"模型版本","Model Version *":"模型版本 *","Model-scoped only":"仅模型分流","model(s) selected out of":"已选模型(共)","model(s)? This action cannot be undone.":"模型?此操作无法撤销。","models":"个模型","Models":"模型","Models *":"模型 *","Models & Groups":"模型与分组","Models & Routing":"模型与路由","Models appended successfully":"模型已追加成功","Models are required":"需要模型","Models climbing the leaderboard":"正在攀升的模型","Models climbing the leaderboard fastest":"排行榜上升最快的模型","Models directory":"模型目录","Models Directory":"模型目录","Models exposed by this channel":"此渠道暴露的模型","Models fetched successfully":"模型获取成功","Models filled to form":"模型已填充到表单","Models listed here skip automatic -thinking / -nothinking suffix handling. Matched names are also exempt from @-modifier parsing and 400 validation. Prefix an entry with re: to match the full model name as a Go regular expression, for example re:.*@sha256:.*":"此处列出的模型不会自动添加或移除 -thinking / -nothinking 后缀。命中的模型同时豁免 @ 修饰符解析与 400 校验。以 re: 开头的条目会按 Go 正则匹配完整模型名,例如 re:.*@sha256:.*。","Models listed here will not automatically append or remove -thinking / -nothinking suffixes.":"此处列出的模型不会自动添加或移除 -thinking / -nothinking 后缀。","Models losing positions":"排名下滑的模型","Models losing the most positions":"名次下滑最多的模型","Models not in list, may fail to invoke":"模型未加入列表,可能无法调用","Models source":"模型来源","Models that are being used but not configured in the system":"正在使用但未在系统中配置的模型","Models that skip thinking suffix processing":"不自动处理思考后缀的模型","Models updated successfully":"模型更新成功","Models used on this site":"本站使用的模型","models.dev pricing preset":"models.dev 定价预设","Modify existing subscription plan configuration":"修改现有订阅套餐的配置","Module availability":"模块可用性","MokaAI":"MokaAI","Monitor":"监控","Monitor balance, usage, and request volume":"监控余额、用量和请求量","Monitored relay requests":"已监控的中继请求","Month":"本月","Month number":"月份","Monthly":"每月","Monthly tokens":"每月 token","months":"个月","Moonshot":"Moonshot","More":"更多","More actions":"更多操作","More Apps":"更多","more mapping":"更多映射","More models ({{count}})":"更多模型({{count}})","More rules":"更多规则","More templates...":"更多模板...","More than 999 days left":"剩余超过 999 天","More...":"更多...","Most-used models in the selected period and category":"所选时间范围与分类下使用率最高的模型","Move":"移动","Move {{group}} down":"将 {{group}} 下移","Move {{group}} up":"将 {{group}} 上移","Move a request header":"移动请求头","Move affiliate rewards to your main balance":"将推广奖励转移到您的主余额","Move fallback to end":"兜底移到最后","Move Field":"移动字段","Move Header":"移动请求头","Move Request Header":"移动请求头","Move route down":"下移路由","Move route up":"上移路由","Move source field to target field":"把来源字段移动到目标字段","ms":"毫秒","Multi-key channel: Keys will be":"多密钥渠道:密钥将","Multi-Key Management":"多密钥管理","New priority: {{priority}}":"新优先级:{{priority}}","New priority: {{priority}} · {{count}} channels affected":"新优先级:{{priority}} · 影响 {{count}} 个渠道","New user registration has been disabled by administrator":"管理员关闭了新用户注册","New user sign-up bonus {{quota}}":"新用户注册赠送 {{quota}}","Multi-key management {{action}} on channel (ID: {{id}})":"对渠道(ID: {{id}})执行多密钥管理操作 {{action}}","Multi-Key Mode (multiple keys, one channel)":"多密钥模式(多个密钥,一个渠道)","Multi-Key Strategy":"多密钥策略","Multi-key: Polling rotation":"多密钥:轮询","Multi-key: Random rotation":"多密钥:随机","Multi-protocol Compatible":"兼容多协议","Multi-region deployment for stable global access":"多区域部署,实现稳定的全球访问","Multi-step thinking before final answer":"在给出最终答案前进行多步推理","Multi-user management with flexible permission allocation":"多用户管理,灵活分配权限","Multilingual translation and localisation":"多语种翻译与本地化","Multimodal":"多模态","Multiplier":"倍率","Multiplier applied when":"倍率应用于当","Multiplier applied when {{userGroup}} uses {{targetGroup}}":"当{{userGroup}}使用{{targetGroup}}时应用的倍率","Multiplier for audio inputs.":"音频输入的倍率。","Multiplier for audio outputs.":"音频输出的倍率。","Multiplier for completion tokens.":"补全令牌的倍数。","Multiplier for image processing.":"图像处理的倍率。","Multiplier for prompt tokens.":"提示令牌的倍数。","Multipliers for recharge pricing based on user groups.":"基于用户分组的充值定价倍率。","Must be a valid URL":"必须是有效的 URL","Must be at least 8 characters":"必须至少 8 个字符","Must be greater than 0":"必须大于 0","Must be greater than or equal to 0":"必须大于或等于 0","My Subscriptions":"我的订阅","my-status":"我的状态","MySQL detected":"检测到 MySQL","MySQL is a production-ready relational database. Keep your credentials secure.":"MySQL 是生产就绪的关系数据库。请确保凭据安全。","MySQL is production ready. Ensure automated backups and a dedicated user with the minimal required privileges are configured.":"MySQL 已准备好投入生产环境。请确保配置了自动备份以及具有最低所需权限的专用用户。","No auto-disabled keys to delete":"没有需要删除的自动禁用密钥","N/A":"不适用","Name":"名称","Name *":"名称 *","Name for this redemption code (1-20 characters)":"此兑换码的名称(1-20 个字符)","Name is available":"名称可用","Name is not available":"名称不可用","Name Matching Rule":"名称匹配规则","Name must be 64 characters or fewer":"名称不能超过 64 个字符","Name must be between {{min}} and {{max}} characters":"名称必须介于 {{min}} 到 {{max}} 个字符之间","Name Rule":"名称规则","Name Suffix":"名称后缀","Name the channel and choose the upstream provider.":"命名渠道并选择上游供应商。","Name the channel, choose the provider, configure API access, and set credentials.":"命名渠道、选择供应商、配置 API 访问并设置凭据。","Name, provider type, and availability.":"名称、供应商类型和可用状态。","name@example.com":"name@example.com","Native Claude Messages plus OpenAI Chat compatibility forwarding.":"Claude Messages 原生转发,并兼容 OpenAI Chat 转换。","Native format":"原生格式","Native forwarding":"原生转发","Native Gemini routes plus OpenAI Chat and Responses compatibility forwarding.":"Gemini 原生转发,并兼容 OpenAI Chat 和 Responses 转换。","Native OpenAI routes plus optional Claude and Gemini compatibility routes.":"OpenAI 原生转发,并提供可选的 Claude 和 Gemini 兼容转换。","Native routes":"原生路由","Need a redemption code?":"需要兑换码?","Needs API key":"需要 API 密钥","Negate condition":"取反","Negated group":"条件取反","Nested JSON defining per-group rules for adding (+:), removing (-:), or appending usable groups.":"嵌套 JSON,定义按分组添加(+:)、移除(-:)或追加可用分组的规则。","Nested JSON: source group →":"嵌套 JSON:源分组 →","Network connection failed or server not responding":"网络连接失败或服务器未响应","Network proxy for this channel (supports HTTP, HTTPS, SOCKS5, and SOCKS5H)":"此渠道的网络代理(支持 HTTP、HTTPS、SOCKS5 和 SOCKS5H)","Never":"永不","Never expires":"永不过期","Never used":"从未使用","Never used an API Gateway?":"从未使用过 API 网关/中转 API?","NEW":"新","New API":"New API","New API <noreply@example.com>":"New API <noreply@example.com>","New API Project Repository:":"New API 项目仓库:","New API\'s flexible channel lets you configure upstream addresses and authentication per endpoint, choose native forwarding or supported protocol conversions, and configure model listing and balance queries independently":"New API 的灵活接入渠道,可按接口配置上游地址与认证方式,选择原生转发或项目支持的协议转换,并独立配置模型列表和余额查询","New domain: {{domain}}":"新域名:{{domain}}","New email verification code":"新邮箱验证码","New Format Template":"新格式模板","New Group":"新建分组","New metadata":"新增资料","New model":"新模型","New Models ({{count}})":"新模型 ({{count}})","New models: all metadata shown below will be imported automatically. No selection is needed.":"新模型:将自动导入下方展示的全部资料,无需勾选。","New name will be:":"新名称将是:","New Passkeys use the primary domain. Compatible domains keep existing Passkeys working.":"新通行密钥使用主域名,已有通行密钥可通过兼容域名继续使用。","New Passkeys use this domain. Enter a domain without https://, a port or a path. An empty field uses the system website address.":"新通行密钥使用此域名。只填写域名,不包含 https://、端口或路径;留空时使用系统网站地址。","New Passkeys will use the new primary domain. The previous domain will be kept so existing Passkeys can still verify.":"新通行密钥将使用新的主域名。原域名会被保留,已有通行密钥仍可验证。","New password":"新密码","New Password":"新密码","New password must be different from current password":"新密码必须与当前密码不同","New records include the fields below. Existing fields are kept unless explicitly selected.":"新增记录将包含下列字段;已有记录仅覆盖明确勾选的字段。","New User Quota":"新用户配额","New value":"新值","New vendors":"新增供应商","New version available: {{version}}":"有新版本可用:{{version}}","NewAPI":"NewAPI","Newly released":"最新发布","Next":"下一步","Next branch":"下一个分支","Next page":"下一页","Next reset":"下一次重置","No":"否","No About Content Set":"未设置关于内容","No access tokens":"暂无访问令牌","No key index specified to delete":"未指定要删除的密钥索引","No key index specified to disable":"未指定要禁用的密钥索引","No key index specified to enable":"未指定要启用的密钥索引","No Active":"无生效","No keys to disable":"没有可禁用的密钥","No active login sessions":"没有活跃的登录会话","No active system tasks.":"暂无进行中的系统任务。","No additional type-specific settings for this channel type.":"此渠道类型没有额外的特定类型设置。","No amount options configured. Add amounts below to get started.":"未配置金额选项。在下方添加金额即可开始使用。","No announcements at this time":"目前暂无公告","No announcements yet. Click \\"Add Announcement\\" to create one.":"暂无公告。点击“添加公告”来创建一个。","No API Domains yet. Click \\"Add API\\" to create one.":"暂无 API 域。点击“添加 API”创建一个。","No API key yet":"暂无 API 密钥","No API keys available. Create your first API key to get started.":"没有可用的 API 密钥。创建您的第一个 API 密钥即可开始使用。","No API Keys Found":"未找到 API 密钥","No API routes configured":"未配置 API 路由","No API tokens":"无 API 密钥","No app usage data available for this model.":"该模型暂无应用使用数据。","No apps match the selected filters":"没有匹配筛选条件的应用","No Auth":"无认证","No auto groups configured":"尚未配置自动分组","No available channels":"无可用渠道","No available groups in the global Auto order.":"全局 Auto 顺序中当前没有可用分组。","No available models":"没有可用模型","No available Web chat links":"没有可用的 Web 聊天链接","No backup":"无备份","No base input price":"未设置基础输入价格","No billing parameters declared":"未声明计费参数","No billing records found":"未找到账单记录","No capabilities reported for this model.":"该模型暂未报告任何能力。","No Change":"无变化","No changelog for this version.":"此版本暂无更新日志。","No changes":"没有变更","No changes made":"未进行任何更改","No changes to save":"没有需要保存的更改","No channel is configured. This model will not appear in the model square.":"尚未配置渠道,不会在模型广场展示。","No channel is currently available. This model will not appear in the model square.":"暂无可用渠道,当前不会在模型广场展示。","No channel selected":"未选择渠道","No channel type found.":"未找到渠道类型。","No channels available. Create your first channel to get started.":"没有可用的渠道。创建您的第一个渠道即可开始使用。","No channels found":"未找到渠道","No Channels Found":"未找到渠道","No channels selected":"未选择渠道","No chat presets configured. Click \\"Add chat preset\\" to get started.":"未配置聊天预设。点击\\"添加聊天预设\\"开始。","No chat presets match your search":"没有匹配的聊天预设","No configured channel models match this metadata rule.":"没有渠道模型匹配此元数据规则。","No conflict entries available.":"没有可用的冲突条目。","No conflicts match your search.":"没有冲突匹配您的搜索。","No connection info found in clipboard":"剪贴板中未找到连接信息","No console output":"无控制台输出","No containers":"无容器","No content to copy":"没有可复制的内容","No custom groups. Saving will inherit the complete global Auto order.":"未自定义分组。保存后将继承完整的全局 Auto 顺序。","No custom OAuth providers configured yet.":"尚未配置自定义 OAuth 提供商。","No data":"暂无数据","No Data":"无数据","No data available":"暂无数据","No deployments available. Create one to get started.":"没有可用的部署。创建一个开始吧。","No Deployments Found":"未找到部署","No description available.":"暂无描述。","No notifications are available to you right now":"目前没有可接收的通知","No permission to access users of same or higher level":"无权获取同级或更高等级用户的信息","No permission to change the 2FA settings of users at the same or higher level":"无权操作同级或更高级用户的2FA设置","No discount tiers configured. Click \\"Add discount tier\\" to get started.":"未配置折扣等级。点击“添加折扣等级”即可开始使用。","No permission to update users of same or higher permission level":"无权更新同权限等级或更高权限等级的用户信息","No duplicate keys found":"未发现重复密钥","No enabled channel key":"没有可用的渠道密钥","No enabled groups":"无启用分组","No enabled tokens available":"当前没有可用的启用令牌","No encryption":"无加密","No endpoints configured. Switch to JSON mode or add rows to define endpoints.":"未配置端点。切换到 JSON 模式或添加行来定义端点。","No endpoints inferred from channels":"未从渠道推导出端点","No extra domains declared":"未声明额外域名","No FAQ entries available":"暂无 FAQ 条目","No FAQ entries yet. Click \\"Add FAQ\\" to create one.":"暂无常见问题条目。点击“添加常见问题”来创建一个。","No files match the accepted types.":"没有文件匹配接受的类型。","No flow data available":"暂无分流数据","No group":"未设置","No group found.":"未找到分组。","No group-based rate limits configured. Click \\"Add group\\" to get started.":"未配置基于组的速率限制。点击“添加组”开始使用。","No groups match your search":"没有组匹配您的搜索","No groups yet. Add a group to get started.":"暂无分组,添加一个分组开始配置。","No header overrides configured.":"未配置标头覆盖。","No historical system tasks.":"暂无历史系统任务。","No history data available":"暂无历史数据","No incidents in the last 24 hours":"最近 24 小时无异常","No incidents in the last 30 days":"最近 30 天无事件","No instances have reported yet.":"暂无实例上报。","No integrity hash":"无完整性哈希","No integrity verification":"无完整性校验","No Inviter":"无邀请人","No IP restriction":"未限制","No keys found":"未找到密钥","No latency data available":"暂无延迟数据","No linked models":"暂无关联模型","No linked OAuth provider is available.":"没有可用的已绑定 OAuth 提供方。","No log entries matched the selected time.":"没有日志条目匹配所选时间。","No logs":"暂无日志","No Logs Found":"未找到日志","No mappings configured. Click \\"Add Row\\" to get started.":"未配置映射。点击 \\"添加行\\" 开始。","No marketplace sources configured.":"尚未配置任何市场源。","No matches found":"未找到匹配项","No matching channels":"无匹配渠道","No matching icons":"未找到匹配图标","No matching items":"没有匹配项","No matching provider":"未找到匹配的提供商","No matching results":"无匹配结果","No matching rules":"没有匹配的规则","No matching token and channel usage was found.":"未找到匹配的令牌与渠道用量。","No messages yet":"暂无消息","No missing models found.":"未找到缺失的模型。","No model found.":"未找到模型。","No model mappings configured. Click \\"Add Mapping\\" to get started.":"未配置模型映射。点击“添加映射”即可开始使用。","No model price changes to save":"没有模型价格变更需要保存","No models available":"没有可用的模型","No models available in this category":"该分类下没有可用模型","No models available. Create your first model to get started.":"没有可用的模型。创建您的第一个模型即可开始使用。","No models can be synced with the current filters. Adjust the search or sync scope.":"当前条件下没有可同步的模型,请调整搜索条件或同步范围。","No models configured. Use Add model to get started.":"暂无模型配置。使用添加模型开始配置。","No models fetched from upstream":"未从上游获取模型","No models fetched yet.":"尚未获取模型。","No models found":"未找到模型","No Models Found":"未找到模型","No models found.":"未找到模型。","No models match the selected filters":"没有匹配筛选条件的模型","No models match these filters":"没有符合筛选条件的模型","No valid upstream channel":"无有效上游渠道","No models match your current filters.":"没有模型匹配您当前的筛选条件。","No models match your search":"没有匹配的模型","No models matched your search.":"没有匹配搜索的模型","No models returned by the upstream":"上游未返回模型","No models selected":"未选择模型","No models to add":"无待新增模型","No models to copy":"没有模型可复制","No models to remove":"无待删除模型","No models with unset prices":"没有未设置定价的模型","No new models to add":"没有新模型可添加","No new models yet":"暂无新模型","No newer version available.":"暂无更新版本。","No nodes":"无节点","No notable climbers right now":"当前没有显著上升的模型","No notable drops right now":"当前没有显著下降的模型","No parameter overrides configured.":"未配置参数覆盖。","No Passkey is registered.":"尚未注册 Passkey。","No payment methods available. Please contact administrator.":"没有可用的支付方式。请联系管理员。","No payment methods configured":"暂无支付方式","No payment methods configured. Click \\"Add method\\" or use templates to get started.":"未配置支付方式。点击\\"添加方式\\"或使用模板开始。","No payment methods match your search":"没有匹配的支付方式","No performance data available":"暂无性能数据","No permission to perform this action":"无权进行此操作","No plans available":"暂无可购买套餐","No plugins available for binding":"暂无可绑定的插件","No preceding rule matched":"前面的规则均未命中","No preference":"无偏好","No prefill groups yet":"暂无预填充分组","Not implemented yet":"尚未实现","No price differences found":"未发现价格差异","No processable upstream model updates for this channel":"该渠道暂无可处理的上游模型更新","No products configured. Click \\"Add product\\" to get started.":"未配置产品。点击 \\"添加产品\\" 开始。","No products match your search":"没有产品匹配您的搜索","Not logged in":"未登录","No providers available":"暂无可用提供商","No Quota":"无余额","No quota limit":"不限额","No ratio differences found":"未发现比率差异","No recent usage":"暂无使用记录","No records":"暂无记录","No records found. Try adjusting your filters.":"未找到记录。尝试调整您的筛选条件。","No redemption codes available. Create your first redemption code to get started.":"没有可用的兑换码。创建您的第一个兑换码即可开始使用。","No Redemption Codes Found":"未找到兑换码","No related models available for this channel type":"此渠道类型没有相关模型可用","No release notes provided.":"未提供发布说明。","No releases found.":"未找到可用的发布版本。","No Reset":"不重置","No reset credits":"暂无重置次数","No reset credits available":"没有可用重置次数","No restriction":"无限制","No results for \\"{{query}}\\". Try adjusting your search or filters.":"未找到 \\"{{query}}\\" 的结果。请尝试调整搜索或筛选条件。","No results found":"搜索无结果","No results found.":"未找到结果。","No Retry":"不重试","No rule for vip billed as default → use the base ratio of default, 1.0 (the 0.8 of vip is not used)":"没有「vip 按 default 计费」的规则 → 用 default 的基础倍率 1.0(vip 自己的 0.8 用不上)","No rule for vip billed as vip → use the base ratio of vip, 0.8":"没有「vip 按 vip 计费」的规则 → 用 vip 的基础倍率 0.8","No rules yet":"暂无规则","No rules yet. Add a group below to get started.":"暂无规则。请在下方添加分组以开始。","No separate media pricing configured.":"未配置单独的媒体定价。","No source available":"暂无源码","No source changes":"源码无变化","No special ratios configured":"尚未配置特殊倍率","No status code mappings configured.":"未配置状态码映射。","No stores on this merchant yet. Set a return URL and click Create to mint your first pair.":"此商户暂无店铺。设置返回 URL 后点击创建来生成第一组配对。","No subscription plans yet":"暂无订阅套餐","No subscription records":"暂无订阅记录","No Sync":"不同步","No syncable models":"暂无可同步模型","No system announcements":"暂无系统公告","No system tasks yet.":"暂无系统任务。","No task plugins found":"未找到任务插件","No token found.":"未找到令牌。","No tools configured":"未配置工具","No Upgrade":"不升级","No upstream price differences found":"未发现上游价格差异","No upstream ratio differences found":"未找到上游比例差异","Notifications to receive":"接收哪些通知","OAuth provider not found":"未找到该 OAuth 提供商","No uptime data available":"暂无可用率数据","No Uptime Kuma groups yet. Click \\"Add Group\\" to create one.":"暂无 Uptime Kuma 分组。点击“添加分组”来创建一个。","No uptime monitoring configured":"未配置正常运行时间监控","No usage logs available. Logs will appear here once API calls are made.":"暂无使用日志。发起 API 调用后日志将显示在此处。","No user information available":"暂无用户信息","No user selected":"未选择用户","No users":"无用户","No users available. Try adjusting your search or filters.":"没有可用的用户。请尝试调整您的搜索或筛选条件。","No Users Found":"未找到用户","No valid custom Auto groups remain. Add a group or restore global Auto.":"没有可用的自定义 Auto 分组。请添加分组或恢复全局 Auto。","No vendor":"未指定供应商","No vendor data available":"暂无厂商数据","No vendors found":"未找到供应商","No verification method is available for this action.":"此操作没有可用的验证方式。","No version history":"暂无版本历史","No X Found":"未找到 X","Node":"节点","Node filters":"节点筛选","Node Name":"节点名称","Node role":"节点职责","Nodes reporting from this deployment and their latest heartbeat.":"当前部署中上报的节点及其最新心跳。","Non-stream":"非流","Non-zero invitation rewards require compliance confirmation in Payment Gateway settings.":"非零邀请奖励需要先在支付网关设置中确认合规条款。","None":"无","None (plugin declaration)":"无(插件声明)","noreply@example.com":"noreply@example.com","Normalized:":"已归一化:","Not available":"不可用","Not backed up":"未备份","Not bound":"未绑定","OIDC ID is empty!":"OIDC ID 为空!","Not configured":"未配置","Not configured for some providers":"部分服务方未配置定价","Not configured for this provider":"此服务方未配置定价","Not declared":"未声明","Not declared by this plugin":"插件未声明","Not declared; an API key may still be required.":"插件未声明认证方式,仍可能需要 API Key。","Not Equals":"不等于","Not found upstream":"上游未找到","Not in pricing table":"不在定价分组表中","Not included":"未加入","Not installed":"未安装","Not listed":"隐藏","Not matched":"未匹配","Online top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"在线充值成功,充值额度: {{quota}},支付金额: {{amount}}","Not provided by this source":"该源未提供","Not recorded":"未记录","Not registered":"未注册","Not set":"未设置","Not Set":"未设置","Not set yet":"尚未设置","Not shown":"隐藏","Not Started":"未开始","Not Submitted":"未提交","Not tested":"未测试","Not used for upstream training by default":"默认不会用于上游训练","Not used yet":"尚未使用","Note":"备注","Notice":"通知","Notification Email":"通知邮箱","Notification Method":"通知方式","Notifications":"通知","Now a user whose user group is vip creates tokens with different groups and makes one call with each:":"现在,一个用户分组为 vip 的用户创建了不同分组的令牌,各调用一次:","Nucleus sampling probability mass":"核采样累计概率","Number":"数值","Number of codes to create":"要创建的代码数量","Number of completions to generate":"生成的候选条数","Number of images to generate":"生成的图像数量","Number of keys to create":"要创建的密钥数量","Number of times to retry failed requests (0-10)":"失败请求的重试次数 (0-10)","Number of tokens per unit quota":"每单位配额的令牌数","Number of top log probabilities returned per token":"每个 token 返回的 top 概率数量","Number of users invited":"已邀请的用户数量","OAuth":"OAuth","OAuth 2.0 service account":"OAuth 2.0 服务账号","OAuth authorization timed out. Please try again.":"OAuth 授权已超时,请重试。","OAuth authorization was cancelled.":"OAuth 授权已取消。","OAuth binding timed out. Please try again.":"OAuth 绑定超时,请重试。","OAuth binding window is no longer available":"OAuth 绑定窗口已不可用","OAuth callback URL":"OAuth 回调 URL","OAuth Client ID":"OAuth 客户端 ID","OAuth Client Secret":"OAuth 客户端密钥","OAuth failed":"OAuth 失败","OAuth Integrations":"OAuth 集成","OAuth pop-up was blocked":"OAuth 弹窗被浏览器拦截","OAuth popup storage is unavailable.":"OAuth 弹窗存储不可用。","OAuth window is no longer available.":"OAuth 窗口已关闭或不可用。","Object Prune Rules":"对象清理规则","Observability":"可观测性","Obtain the API key, merchant ID, and RSA key pair from the Waffo dashboard, and configure the callback URL.":"请在 Waffo 后台获取 API 密钥、商户 ID 以及 RSA 密钥对,并配置回调地址。","Obtain the merchant, store, product and signing keys from your Waffo dashboard. Webhook URL: /api/waffo-pancake/webhook":"请在 Waffo 后台获取商户、店铺、商品与签名密钥。Webhook 地址:/api/waffo-pancake/webhook","Ocean Breeze":"海风","of":"条,共","of 3:":"共 3 个:","off":"关闭","Official":"官方","Official Claude Messages":"官方 Claude Messages","Official documentation":"官方说明","Official Gemini from OpenAI Chat":"官方 Gemini(OpenAI Chat 入口)","Official Gemini Native":"官方 Gemini 原生","Official OpenAI Chat":"官方 OpenAI Chat","Official OpenAI Embeddings":"官方 OpenAI Embeddings","Official OpenAI Images":"官方 OpenAI Images","Official OpenAI Responses":"官方 OpenAI Responses","Official pricing preset":"官方定价预设","Official Repository":"官方仓库","Official Sync":"官方同步","OhMyGPT":"OhMyGPT","OIDC":"OIDC","OIDC Client ID":"OIDC 客户端 ID","OIDC Client Secret":"OIDC 客户端密钥","OIDC configuration fetched successfully":"OIDC 配置获取成功","OIDC discovery can fill the endpoint fields automatically when the provider supports it.":"当提供商支持时,OIDC Discovery 可以自动填充端点字段。","OIDC discovery URL. Click \\"Auto-discover\\" to fetch endpoints automatically.":"OIDC 发现 URL。点击\\"自动发现\\"以自动获取端点。","OIDC Display Name":"OIDC 显示名称","OIDC endpoints discovered successfully":"OIDC 端点发现成功","Old Format Template":"旧格式模板","Old format: Direct override. New format: Supports conditional judgment and custom JSON operations.":"旧格式:直接覆盖。新格式:支持条件判断和自定义 JSON 操作。","Ollama":"Ollama","Ollama Models":"Ollama 模型","One API":"One API","One domain per line":"每行一个域名","One domain per line (only used when domain restriction is enabled)":"每行一个域名 (仅在启用域名限制时使用)","One IP or CIDR range per line":"每行一个 IP 或 CIDR 范围","One IP per line (empty for no restriction)":"每行一个 IP (留空表示无限制)","one keyword per line":"每行一个关键词","online":"在线","Online":"在线","Online payment is not enabled. Please contact the administrator.":"管理员未开启在线支付功能,请联系管理员配置。","Online topup is not enabled. Please use redemption code or contact administrator.":"尚未启用在线充值。请使用兑换码或联系管理员。","Only allow specific email domains":"仅允许特定的电子邮件域名","Only available for admins. When enabled, you will receive a summary notification via your selected method when the scheduled model check detects upstream model changes or check failures.":"仅管理员可用。启用后,当定时模型检查检测到上游模型变更或检查失败时,您将通过所选方式收到汇总通知。","Only available for exact matching":"仅精确匹配可用","Only configured combinations are overridden. All other calls keep the billing group base ratio.":"只有配置过的组合才会被覆盖,其余调用仍使用计费分组的基础倍率。","Only configured combinations are overridden. All other calls keep the token group base ratio.":"只有已配置的组合会被覆盖,其他调用仍使用令牌分组的基础倍率。","Only enabled parameters are sent with the request.":"只有启用的参数会随请求发送。","Only enter the site origin, for example https://api.example.com. Do not include any path such as /api/user/epay/notify. Leave blank to use the server address.":"只填写站点根域名,例如 https://api.example.com。不要填写 /api/user/epay/notify 这类路径。留空则使用服务器地址。","Only exact model names are removed from enabled and disabled channels. Matching rules are not expanded, and channel records are retained.":"仅从所有启用及停用的渠道中移除名称完全相同的模型,不扩展匹配规则,渠道本身会保留。","Only Mine":"仅自己","Only one catch-all route is allowed for the same incoming path":"同一入口路径只允许一个兜底路由","Order is not pending payment and cannot be completed":"订单状态不是待支付,无法补单","Order number not provided":"未提供订单号","Only one OpenAI Models route is allowed":"仅允许配置一条 OpenAI 模型路由","Only selected fields will be overwritten. You can re-run the sync wizard if new conflicts appear.":"仅选定的字段将被覆盖。如果出现新的冲突,您可以重新运行同步向导。","Only show syncable models":"仅看可同步","Only successful requests":"仅成功的请求","Only successful requests count toward this limit.":"仅成功的请求计入此限制。","Only the changes listed here will be committed. If any write fails, none of these changes are applied.":"仅提交此处列出的变更。任何写入失败,本次变更均不应用。","Only the first {{shown}} IDs were recorded":"仅记录前 {{shown}} 项 ID","Only the first {{shown}} IDs were recorded ({{total}} requested)":"仅记录前 {{shown}} 项,共请求 {{total}} 项","Only the last {{value}} log files will be retained; the rest will be deleted.":"将只保留最近 {{value}} 个日志文件,其余将被删除。","Only used to find historical logs. New records are available in Audit Logs.":"仅用于查询历史日志,新记录请前往审计日志查看。","Oops! Page Not Found!":"糟糕!页面未找到!","Oops! Something went wrong":"糟糕!出错了","Open":"打开","Open a source model first":"请先打开一个源模型","Open CC Switch":"打开 CC Switch","Open filtered model list":"查看已筛选模型列表","Open in chat":"在聊天中打开","Open in new tab":"在新标签页中打开","Open in New Tab":"在新标签页中打开","Open menu":"打开菜单","Open Query Balance to view the upstream JSON response":"请打开“查询余额”查看上游 JSON 响应","Open release":"打开版本","Open source":"开源","Open Source":"开源项目","Open the io.net console API Keys page":"打开 io.net 控制台 API 密钥页面","Open theme settings":"打开主题设置","Open weights":"开放权重","OpenAI":"OpenAI","OpenAI Chat Completions":"OpenAI 聊天补全","OpenAI Chat to Anthropic Messages":"OpenAI Chat 到 Anthropic Messages","OpenAI Chat to Gemini Generate Content":"OpenAI Chat 到 Gemini Generate Content","OpenAI Chat to OpenAI Responses":"OpenAI Chat 到 OpenAI Responses","OpenAI Compatible":"兼容 OpenAI","OpenAI Compatible Upstream":"OpenAI 兼容上游","OpenAI Models route does not support client model rules":"OpenAI 模型路由不支持客户端模型规则","OpenAI Models route does not support pass-through":"OpenAI 模型路由不支持透传","OpenAI Models route is required to enable upstream model checks":"启用上游模型检查必须配置 OpenAI 模型路由","OpenAI Models route must use native forwarding":"OpenAI 模型路由必须使用原生转发","OpenAI Models upstream path must not contain {model}":"OpenAI 模型上游路径不能包含 {model}","OpenAI only":"仅 OpenAI","OpenAI Organization":"OpenAI 组织","OpenAI Organization ID (optional)":"OpenAI 组织 ID(可选)","OpenAI Responses to Gemini Generate Content":"OpenAI Responses 转 Gemini Generate Content","OpenAI Responses to OpenAI Chat":"OpenAI Responses 到 OpenAI Chat","OpenAI, Anthropic, etc.":"OpenAI、Anthropic 等","OpenAI, Anthropic, Google, etc.":"OpenAI、Anthropic、Google 等","OpenAIMax":"OpenAIMax","OpenRouter":"OpenRouter","opens in an external client. Trigger it from the sidebar or API key actions to launch the configured application.":"在外部客户端中打开。从侧边栏或 API 密钥操作中触发,以启动配置的应用。","Operate channels":"运维渠道","Operation":"操作","operation and charging behavior":"运营和收费行为产生的法律责任","Operation audit":"操作审计","Operation Audit Info":"操作审计信息","Operation cancelled":"操作已取消","Operation failed":"操作失败","Operation successful":"操作成功","Operation Type":"操作类型","Operations":"运维","Operator":"操作人","Operator Admin":"操作管理员","Optimize system for self-hosted single-user usage":"优化系统以适应自托管单用户使用","Optimized network architecture ensures millisecond response times":"优化的网络架构,确保毫秒级响应时间","Optional callback override. Leave blank to use server address":"可选的回调覆盖。留空以使用服务器地址","Optional icon identifier for the login button":"登录按钮的可选图标标识符","Optional icon.svg or icon.png shipped next to plugin.js, up to 512 KiB. Stored separately from the source.":"可选,与 plugin.js 同级的 icon.svg 或 icon.png,最大 512 KiB,与源码分开存储。","Optional JSON policy to restrict access based on user info fields":"可选的 JSON 策略,用于基于用户信息字段限制访问","Optional minimum recharge amount for this method.":"此方法的可选最低充值金额。","Optional multiplier per user group used when calculating recharge pricing. Provide a JSON object such as":"计算充值定价时使用的每个用户分组可选乘数。请提供一个 JSON 对象,例如","Optional note describing this version":"可选,用于描述该版本的备注","Optional notes about this channel":"关于此渠道的可选备注","Optional notes about when to use this group":"关于何时使用此分组的可选说明","Optional ratio used when upstream cache hits occur.":"上游缓存命中时使用的可选比率。","Optional request-rule multiplier expression. Leave empty when no request rule applies.":"可选的请求规则倍率表达式。无请求规则时留空。","Optional rule description":"可选规则说明","Optional settings for advanced container configuration.":"高级容器配置的可选设置。","Optional supplementary information (max 100 characters)":"可选补充信息 (最多 100 个字符)","Optional tag for grouping channels":"用于分组渠道的可选标签","Optional. Without it, Google picks the region; with it, requests go to the deployment region below.":"可选。不填时由 Google 决定区域;填写后,请求会发往下方的部署区域。","Opus Model":"Opus 模型","Or continue with":"或继续使用","Or enter this key manually:":"或手动输入此密钥:","or pick existing":"或选择已有项","Order completed successfully":"订单已成功完成","Order History":"订单历史","Order Payment Method":"订单支付方式","org-...":"org-...","Original Model":"原始模型","Original value":"原始值","Other":"其他","Other cases":"其他情况","Other channels":"其他渠道","Other groups":"其他分组","Other models":"其他模型","Other nodes":"其他节点","Other sessions signed out":"已退出其他登录会话","Other Settings":"其他设置","Other tokens":"其他令牌","Other users":"其他用户","Otherwise (the preceding conditions do not match)":"否则(上述条件不成立)","Otherwise → {{name}}":"否则 → {{name}}","Otherwise the binding is removed.":"关闭时清除该绑定。","Outage":"中断","Output":"输出","Output aspect ratio":"输出宽高比","Output image size":"输出图像尺寸","Output price":"输出价格","Output Price: High to Low":"输出价格:从高到低","Output Price: Low to High":"输出价格:从低到高","Output token price for generated tokens.":"生成内容的输出 token 价格。","Output token rate":"输出 Token 速率","Output tokens":"输出 token","Output Tokens":"输出 Token","Outside these times: {{condition}}":"{{condition}}以外的时段","Overage limited":"超额受限","overall":"总体","Overflow":"上溢","Overflow items":"超出项","override":"覆盖","Override":"覆盖","Override auto-discovered endpoint":"覆盖自动发现的端点","Override matrix":"覆盖矩阵","Override quota for user “{{name}}”":"覆盖用户「{{name}}」的额度","Override request headers":"覆盖请求标头","Override request headers (JSON format)":"覆盖请求头(JSON 格式)","Override request parameters":"覆盖请求参数","Override request parameters (JSON format)":"覆盖请求参数 (JSON 格式)","Override request parameters. Cannot override":"覆盖请求参数。无法覆盖","Override request parameters. Cannot override stream parameter.":"覆盖请求参数。无法覆盖 stream 参数。","Override rule: when a vip user is billed as premium, the ratio is 0.3 instead of 0.5":"覆盖规则:vip 用户按 premium 计费时,倍率用 0.3 而不是 0.5","Override Rules":"覆盖规则","Password login has been disabled by administrator":"管理员关闭了密码登录","Override the endpoint used for testing. Leave empty to auto detect.":"覆盖用于测试的端点。留空以自动检测。","Override user quota":"覆盖用户额度","overrides for matching model prefix.":"为匹配模型前缀的覆盖价。","Overrode user quota from {{from}} to {{to}}":"覆盖用户额度,从 {{from}} 改为 {{to}}","Overview":"概览","Password registration has been disabled by administrator, please use third-party account verification":"管理员关闭了通过密码进行注册,请使用第三方账户验证的形式进行注册","Overwritten":"已覆盖","Password reset link is invalid or has expired":"重置链接非法或已过期","Page":"页面","Page {{current}} of {{total}}":"第 {{current}} 页,共 {{total}} 页","PaLM":"PaLM","Pan":"平移","Pancake":"煎饼","Param Override":"参数覆盖","Parameter":"参数","Parameter configuration error":"参数配置有误","Parameter Override":"参数覆盖","Parameter override and system prompt are unavailable":"参数覆盖、系统提示词不可用","Parameter override must be a valid JSON object":"参数覆盖必须是合法的 JSON 对象","Parameter override must be valid JSON format":"参数覆盖必须是合法的 JSON 格式","Parameter Override Template (JSON)":"参数覆盖模板 (JSON)","Parameter override template must be a JSON object":"参数覆盖模板必须是 JSON 对象","Parameter settings":"参数设置","parameter.":"参数。","Parameters":"参数","Parsed {{count}} service account file(s)":"已解析 {{count}} 个服务账号文件","Pause drag demo":"暂停拖拽演示","Payment amount is too low":"充值金额过低","Payment cancel redirect URL is not in the trusted domain list":"支付取消重定向URL不在可信任域名列表中","Parsed plugin metadata":"解析出的插件元数据","Payment configuration error":"支付配置错误","Partial Submission":"部分提交确认","Payment information has not been configured by administrator":"当前管理员未配置支付信息","Partly shown":"部分展示","Pass Headers":"透传请求头","Payment method does not exist":"支付方式不存在","Pass specified request headers to upstream":"把指定请求头透传到上游请求","Pass Through Body":"透传请求体","Pass Through Headers":"请求头透传","Pass Through Request Headers":"透传请求头","Pass through the anthropic-beta header for beta features":"透传 anthropic-beta 头部以使用 beta 功能","Pass through the include field for usage obfuscation":"透传 include 字段以用于用量混淆","Pass through the inference_geo field for Claude data residency region control":"透传 inference_geo 字段用于控制 Claude 数据驻留推理区域","Pass through the inference_geo field for geographic routing":"透传 inference_geo 字段以用于地理路由","Pass through the safety_identifier field":"将 safety_identifier 字段透传到上游","Pass through the service_tier field":"将 service_tier 字段透传到上游","Pass through the speed field for Claude inference speed mode control":"透传 speed 字段用于控制 Claude 推理速度模式","Pass when key is missing":"字段缺失时通过","Payment success redirect URL is not in the trusted domain list":"支付成功重定向URL不在可信任域名列表中","Pass-through":"透传","Pass-Through":"透传","Pass-through Headers (comma-separated or JSON array)":"透传请求头(逗号分隔或 JSON 数组)","Payment, redemption, subscription, and invitation reward features are disabled. The administrator must confirm compliance terms before enabling them.":"支付、兑换码、订阅计划和邀请返利功能已禁用。管理员需先确认合规声明后方可启用。","Pass-through help":"透传说明","Pass-through requires native forwarding":"透传仅支持原生转发","Passive recovery only":"仅被动恢复","Passkey":"Passkey","Passkey Authentication":"通行密钥认证","Passkey authentication is disabled.":"Passkey 认证已关闭。","Passkey display name":"通行密钥显示名称","Passkey domain change blocked: {{domains}}; affected {{known}}; unknown {{unknown}}":"已阻止通行密钥域名变更:{{domains}};已知受影响 {{known}};归属未知 {{unknown}}","Passkey domain update failed":"通行密钥域名更新失败","Passkey domains":"通行密钥域名","Passkey is not available in this browser":"此浏览器中不支持 Passkey","Passkey is not supported in this environment":"此环境中不支持 Passkey","Passkey is not supported on this device":"此设备不支持 Passkey","Passkey is not supported on this device.":"此设备不支持通行密钥。","Passkey Login":"Passkey 登录","Passkey login failed":"Passkey 登录失败","Passkey login was cancelled":"Passkey 登录已取消","Passkey login was cancelled or timed out":"Passkey 登录已取消或超时","Passkey not supported on this device":"此设备不支持通行密钥","Passkey registered successfully":"Passkey 注册成功","Passkey registration was cancelled":"通行密钥注册已取消","Passkey removed successfully":"通行密钥已成功移除","Passkey reset successfully":"通行密钥已成功重置","Passkey verification failed":"Passkey 验证失败","Passkey verification is not available in the current state":"当前状态下无法使用 Passkey 验证","Passkey verification is not supported in this environment":"当前环境不支持 Passkey 验证","Passkey verification was cancelled":"Passkey 验证已取消","Passkey verification was cancelled or timed out":"Passkey 验证已取消或超时","Passkey website domain":"通行密钥使用的网站域名","Passkeys for removed domains will stop working. Confirm only if affected users can sign in another way.":"被移除域名的通行密钥将无法使用。请确认受影响用户可以通过其他方式登录后再继续。","Passkeys known to use removed domains: {{amount}}":"使用被删除域名的通行密钥:{{amount}}","Passkeys only work on the website they were created for. This helps prevent other websites from misusing them.":"通行密钥只认创建它的网站,防止被其他网站冒用。","Passkeys with an unknown domain that may be affected: {{amount}}":"域名归属未知、可能受影响的通行密钥:{{amount}}","Passthrough Template":"透传模板","Password":"密码","Password / Access Token":"密码 / 访问令牌","Password authentication is disabled.":"密码认证已禁用。","Password changed successfully":"密码更改成功","Password copied to clipboard: {{password}}":"密码已复制到剪贴板:{{password}}","Password has been copied to clipboard":"密码已复制到剪贴板","Password Login":"密码登录","Password must be at least 8 characters":"密码必须至少 8 个字符","Password must be at most 20 characters long":"密码最多 20 个字符","Password must be between 8 and 20 characters":"密码长度必须在 8 到 20 个字符之间","Password must contain between 8 and 128 characters.":"密码长度必须为 8–128 个字符。","Password Registration":"密码注册","Password reset and copied to clipboard: {{password}}":"密码已重置并复制到剪贴板:{{password}}","Password reset: {{password}}":"密码已重置:{{password}}","Password set successfully":"密码设置成功","Password settings have changed. Reload the page and try again.":"密码设置已变化,请刷新页面后重试。","Passwords do not match":"密码不匹配","Passwords don\'t match.":"两次输入的密码不一致。","Paste Connection Info":"粘贴连接信息","Paste JavaScript source here...":"在此粘贴 JavaScript 源码...","Path":"路径","Path not set":"未设置路径","Path Regex (one per line)":"路径正则(每行一个)","Path:":"路径:","Pay":"支付","Pay {{amount}}":"支付 {{amount}}","Per-request Price: High to Low":"按次价格:从高到低","Per-request Price: Low to High":"按次价格:从低到高","Plan amount is too low":"套餐金额过低","Pay {{amount}} • Save {{saved}}":"支付 {{amount}} • 节省 {{saved}}","Pay with Balance":"使用余额支付","Plan name cannot be empty":"套餐名称不能为空","Pay-as-you-go with real-time usage monitoring":"按量付费,实时监控使用情况","Plan price cannot be empty":"套餐价格不能为空","Payment":"支付","Payment aggregator mode — onboard with your own registered company (offshore entity). Built for Enterprise.":"支付聚合模式:使用你自己的注册公司(离岸实体)入驻。面向企业场景构建。","Payment Channel":"支付渠道","Payment Gateway":"支付网关","Payment initiated":"已发起支付","Payment Method":"付款方式","Payment method identifier":"支付方式标识","Payment method identifier is required":"支付方式标识不能为空","Payment method name":"支付方式名称","Payment method name is required":"支付方式名称不能为空","Payment method type":"支付方式类型","Payment method type is required":"支付方式类型为必填项","Payment methods":"付款方式","Payment Methods":"支付方式","Please confirm the compliance statement":"请确认合规声明","Payment page opened":"已打开支付页面","Payment request failed":"支付请求失败","Payment return URL":"支付返回地址","Payment return URL is empty. Create the product without a SuccessURL redirect?":"支付返回 URL 为空。是否在没有 SuccessURL 跳转的情况下创建产品?","Payment type key":"支付处理标识","Payment type key is required":"支付处理标识不能为空","Payment, redemption codes, subscription plans, and invitation rewards are locked until the root administrator confirms the compliance terms.":"在根管理员确认合规条款之前,支付、兑换码、订阅套餐和邀请奖励功能将保持锁定。","Peak":"峰值","Peak KV cache usage":"最高 KV 缓存使用率","Peak throughput":"峰值吞吐","Peak token pool usage":"最高令牌池使用率","Penalises repetition of frequent tokens":"惩罚高频 token 的重复出现","pending":"等待中","Pending":"待确认","per":"每","Per 1K tokens":"每 1K tokens","Per 1M tokens":"每 1M tokens","Per image":"每张图片","Per matched model":"按匹配模型配置","per request":"每次请求","Per request":"每次请求","Per Request":"按次计费","Per Second":"按秒","Per token":"按 token","Per Unit":"按次","Per-call":"每次调用","Per-feature metered windows split by model or capability.":"按模型或能力拆分的附加计费能力窗口。","Per-group performance":"各分组性能","Per-request":"按次","Per-request (deprecated)":"按次(已弃用)","Per-request (fixed price)":"按请求计费(固定价格)","Per-token":"按 Token","Per-token (deprecated)":"按 Token(已弃用)","Per-token (ratio based)":"按令牌计费(基于比例)","Per-token logit bias map":"按 token 的 logit 偏置映射","Percentage:":"百分比:","Performance":"性能","Please select a product":"请选择产品","Performance data is not yet available for this model.":"该模型暂无性能数据。","Performance health":"性能健康","Performance metrics for the last 24 hours":"最近 24 小时的性能指标","Performance metrics shown here are simulated for preview purposes and will be replaced with live observability data once the backend integration is complete.":"此处展示的性能指标为预览模拟数据,待后端对接完成后将替换为真实可观测数据。","Performance Monitor":"性能监控","Performance Settings":"性能设置","Performed {{action}} on user {{username}} (ID: {{id}})":"对用户 {{username}}(ID: {{id}})执行 {{action}}","Period":"时间范围","Periodically check for upstream model changes":"定期检查上游模型是否有变更","Periodically checks all channels except manually disabled ones to detect failures and recover channels automatically.":"定时检查除手动禁用外的全部渠道,用于主动发现故障并自动恢复渠道。","Periodically checks only channels with auto-disable enabled, excluding manually disabled channels.":"只定时检查已开启“自动禁用”的渠道;未开启该选项和手动禁用的渠道不会被检查。","Periodically send ping frames to keep streaming connections active.":"定期发送 ping 帧以保持流连接处于活动状态。","Permanently delete your account and all data":"永久删除您的帐户和所有数据","Permissions":"权限","Permit Passkey registration on non-HTTPS origins (only recommended for development)":"允许在非 HTTPS 源上注册通行密钥(仅建议用于开发)","Please wait {{seconds}} seconds before requesting another verification code.":"发送过于频繁,请等待 {{seconds}} 秒后再试","Perplexity":"Perplexity","Persist your data file":"持久化您的数据文件","Personal":"个人","Personal area":"个人中心","Personal Center Area":"个人中心区域","Personal info settings":"个人信息设置","Personal Settings":"个人设置","Personal settings and profile management.":"个人设置和个人资料管理。","Personal use":"个人使用","Personal use mode":"个人使用模式","Pick a date":"选择日期","Pick models and derive the other side with a rule to create request-to-upstream mappings.":"选择模型并用规则派生另一侧名称,生成「请求模型 → 上游模型」映射。","Pick or create both a store and a product before saving.":"保存前请同时选择或创建店铺和产品。","Ping Interval (seconds)":"Ping 间隔(秒)","Plan":"套餐","Plugin metadata contains an unknown field \\"{{field}}\\". If this plugin was downloaded from the official marketplace, it may require a newer version of new-api. Try updating new-api and installing the plugin again.":"插件元数据包含未知字段“{{field}}”。如果插件来自官方市场,可能需要更高版本的 new-api。请尝试更新 new-api 后重新安装插件。","Plan ID":"套餐 ID","Plan Name":"套餐名称","Plan Price":"套餐价格","Plan price must be greater than zero":"套餐价格必须大于 0","Plan Quota":"套餐额度","Plan Subtitle":"套餐副标题","Plan Title":"套餐标题","Plan title is required":"套餐标题为必填项","Planned action":"计划操作","Planned maintenance on Friday at 22:00 UTC...":"计划于周五 22:00 UTC 进行维护...","Platform":"平台","Playground":"游乐场","Playground and chat functions":"操练场和聊天功能","Playground experiments and live conversations.":"Playground 实验和实时对话。","Please agree to the legal terms first":"请先同意法律条款","Please complete the security check to continue.":"请完成安全验证以继续。","Please confirm that you understand the consequences":"请确认您了解后果","Please confirm your password":"请确认密码","Possibly an upstream timeout":"可能是上游超时","Please enable io.net model deployment service and configure an API key in System Settings.":"请先在系统设置中启用 io.net 模型部署服务,并配置 API Key。","Please enable Two-factor Authentication or Passkey before proceeding":"请先启用双因素认证或通行密钥","Please enter a code.":"请输入验证码。","Please enter a name":"请输入名称","Please enter a new password":"请输入新密码","Please enter a redemption code":"请输入兑换码","Please enter a valid duration":"请输入有效持续时间","Please enter a valid email address":"请输入有效的电子邮件地址","Please enter a valid number":"请输入有效的数值","Please enter a Well-Known URL first":"请先输入 Well-Known URL","Please enter amount":"请输入金额","Please enter an administrator username":"请输入管理员用户名","Please enter API key first":"请先输入 API 密钥","Please enter chat client name":"请输入聊天客户端名称","Please enter email and verification code":"请输入邮箱和验证码","Please enter keys first":"请先输入密钥","Please enter model name":"请输入模型名称","Please enter plan title":"请输入套餐标题","Please enter the authentication code.":"请输入验证码。","Please enter the URL":"请输入 URL","Please enter the verification code":"请输入验证码","Please enter the verification code or backup code":"请输入验证码或备用码","Please enter your current password":"请输入当前密码","Please enter your email":"请输入您的电子邮件","Please enter your email first":"请先输入您的邮箱","Please enter your password":"请输入密码","Please enter your username":"请输入用户名","Please enter your username or email":"请输入用户名或邮箱","Please enter your verification code":"请输入您的验证码","Please enter your verification code or backup code":"请输入您的验证码或备用码","Please fix JSON errors before saving":"请先修复 JSON 错误再保存","Please fix the highlighted fields before saving":"请先修复高亮字段后再保存","Please log in with the appropriate credentials":"请使用适当的凭据登录","Please select a container":"请选择一个容器","Please select a payment method":"请选择支付方式","Please select a primary model":"请选择主模型","Please select a subscription plan":"请选择订阅套餐","Please select at least one channel":"请选择至少一个渠道","Please select at least one model":"请选择至少一个模型","Please select items to delete":"请选择要删除的项目","Please Select user groups that can access this channel.":"请选择可以访问此渠道的用户组。","Please set Ollama API Base URL first":"请先设置 Ollama API Base URL","Please sign in to view {{module}}.":"请登录后查看 {{module}}。","Please try again later.":"请稍后再试。","Please type the following text to confirm:":"请输入以下文本进行确认:","Please upload key file(s)":"请上传密钥文件","Please wait a moment before trying again.":"请稍候再试。","Please wait a moment, human check is initializing...":"请稍等,人机验证正在初始化...","Please wait before editing to avoid overwriting saved values.":"请等待加载完成后再编辑,以免覆盖已保存的值。","Please wait before requesting another verification code.":"请稍后再请求验证码。","Please wait for the current generation to complete":"请等待当前生成完成","Plugin":"插件","Plugin activation failed":"插件激活失败","Plugin author":"插件作者","Plugin default":"插件默认值","Plugin details":"插件详情","Plugin extensions":"插件扩展","Plugin Generation":"插件运行代次","Plugin icon":"插件图标","Plugin icon exceeds the 512 KiB limit.":"插件图标超过 512 KiB 限制。","Plugin icon must be an .svg or .png file.":"插件图标必须是 .svg 或 .png 文件。","Plugin indexes are fetched by your browser. Installing runs the same review and admission pipeline as a manual upload.":"插件索引由你的浏览器拉取。安装时走的审查与准入流程与手动上传完全一致。","Plugin installation failed":"插件安装失败","Plugin is still in use":"插件仍在使用中","Plugin key":"插件键","Plugin metadata":"插件元数据","Plugin sandbox":"插件沙盒","Plugin saved, activation required":"插件已保存,待激活","Plugin source":"插件源码","Plugin source exceeds the 8 MiB limit.":"插件源码超过 8 MiB 上限。","Plugin uploaded successfully":"插件上传成功","Plugin version activated":"插件版本已激活","Price cannot be negative":"价格不能为负数","Price cannot exceed 9999":"价格不能超过9999","Plugin version deleted":"插件版本已删除","Plugin website":"插件官网","Plugin-defined interfaces":"插件自定义接口","Plugins":"插件","Plugins can access channel credentials. Review the source and differences before installing.":"插件可访问渠道凭据。安装前请审查源码与差异。","Policy JSON":"策略 JSON","Polling":"轮询","Polling mode requires Redis and memory cache, otherwise performance will be significantly degraded":"轮询模式需要 Redis 和内存缓存,否则性能将显著下降","Poor":"差","Port":"端口","Port must be a positive integer":"端口必须为正整数","Position {{position}}":"第 {{position}} 位","Post Delta":"结算差额","PostgreSQL detected":"检测到 PostgreSQL","PostgreSQL offers advanced reliability and data integrity for production workloads.":"PostgreSQL 为生产工作负载提供高级可靠性和数据完整性。","PostgreSQL offers strong reliability guarantees. Double check your maintenance window and retention policies before going live.":"PostgreSQL 提供强大的可靠性保证。在上线之前,请仔细检查您的维护窗口和保留策略。","Power AI applications, manage digital assets, connect the Future":"承载 AI 应用,管理数字资产,连接未来","Powerful API Management Platform":"强大的 API 管理平台","Pre-Consume for Free Models":"免费模型预消耗","Pre-consumed":"预扣费","Pre-Consumed Quota":"预消耗配额","Pre-release":"预发布版","Prefer the original channel, allow switching":"优先原渠道,失败允许切换","Preference saved as {{pref}}, but no active subscription. Requests will be rejected.":"已保存偏好为{{pref}},当前无生效订阅,请求将被拒绝","Preference saved as {{pref}}, but no active subscription. Wallet will be used automatically.":"已保存偏好为{{pref}},当前无生效订阅,将自动使用钱包","Preferences":"偏好设置","Prefill Group Management":"预填充分组管理","Prefill Groups":"预填充分组","Prefill groups help you keep complex configurations in sync.":"预填充分组可帮助您保持复杂配置的同步。","Prefix":"前缀","Prefix cache hit rate":"前缀缓存命中率","Prefix Match":"前缀匹配","Prefix used when displaying prices":"显示价格时使用的前缀","Prefix/Suffix Text":"前后缀文本","Premium chat models":"高级聊天模型","Premium plan, half price":"高级套餐,半价优惠","Preparing chat keys…":"正在准备聊天密钥…","Preparing conversion...":"正在准备转换…","Preparing your chat link, please try again in a moment.":"正在准备您的聊天链接,请稍后再试。","Preparing your chat link…":"正在准备您的聊天链接...","Prepend":"前置追加","Prepend to Start":"追加到开头","Prepend value to array / string / object start":"把值追加到数组/字符串/对象开头","Presence Penalty":"存在惩罚","Preserve the original field when applying this rule":"应用此规则时保留原始字段","Preserve upstream-specific fields when API formats match; bypasses model redirect, parameter override and format conversion":"客户端与上游 API 格式一致、需要保留上游扩展字段时开启;模型重定向、参数覆盖和格式转换将失效","Preset groups":"预设分组","Preset recharge amounts (JSON array)":"预设充值金额(JSON 数组)","Preset recharge amounts displayed to users":"向用户显示的预设充值金额","Preset Template":"预设模板","Preset templates":"预设模板","preset.anthropic":"Anthropic","preset.default":"默认","preset.forest-whisper":"森林低语","Product configuration error":"产品配置错误","Product does not exist":"产品不存在","preset.lake-view":"湖光","preset.lavender-dream":"薰衣草梦","preset.ocean-breeze":"海风","preset.rose-garden":"玫瑰花园","preset.simple-large":"超大字体简易","preset.sunset-glow":"日落霞光","preset.underground":"暗夜","Press Enter or comma to add tags":"按 Enter 或逗号添加标签","Press Enter to use \\"{{value}}\\"":"按 Enter 使用「{{value}}」","Prevent server-side request forgery attacks":"防止服务器端请求伪造攻击","Preview":"预览","Preview again":"重新预览","Preview changes":"预览更改","Preview excludes group ratios and request rule multipliers.":"预览不包含分组倍率和请求规则倍率。","Preview fields":"预览字段","Preview is unavailable for custom expressions.":"自定义表达式无法预览。","Preview metadata first":"请先预览资料","Preview price changes":"预览价格变更","Preview pricing conversion":"定价迁移预览","Preview selected changes":"预览所选变更","Preview unavailable":"无法预览","Preview upstream model changes":"预览上游模型变更","Previous":"上一步","Previous branch":"上一分支","Previous page":"上一页","Previous permissions":"原权限","Previous value":"原值","Price":"价格","Price ($/1K calls)":"价格($/1K 次)","Price (local currency / USD)":"价格(本地货币/美元)","Price display":"价格显示","Price display mode":"价格显示模式","Price estimation":"价格预估","Price estimation description":"完成硬件类型、部署位置、副本数量等设置后,价格将自动计算。","Price examples":"价格示例","Price ID":"价格 ID","Price mode (USD per 1M tokens)":"价格模式(每 100 万个 token 的美元价格)","Price per image":"每张图片价格","Price per request":"每次请求价格","Price source":"价格来源","Price summary":"价格摘要","price_xxx":"price_xxx","Price:":"价格:","Prices are in {{currency}}, with units shown below. Use USD when editing expressions directly.":"价格以 {{currency}} 计,单位见下方标注。手动编辑表达式时请使用美元。","Prices changed while preparing the conversion. Try again.":"准备转换时价格已变更,请重试。","Prices for each set of conditions":"不同条件对应的价格","Prices shown per":"价格显示单位","Prices shown per {{unit}} tokens":"价格按每 {{unit}} Token 显示","Prices shown per usage unit":"价格按每个用量单位显示","Prices synced successfully":"价格同步成功","Prices vary by usage tier and request conditions":"价格根据用量档位和请求条件动态调整","Pricing":"定价","Pricing & Display":"定价与显示","Pricing by condition":"按条件计价","Pricing by Group":"按分组定价","Pricing conditions":"计价条件","Pricing Configuration":"定价配置","Purchase limit cannot be negative":"购买上限不能为负数","Purchase limit for this plan has been reached":"已达到该套餐购买上限","Pricing currency":"定价货币","Pricing group example":"定价分组示例","Pricing groups":"定价分组","Pricing mode":"定价模式","Quality {{quality}}":"品质 {{quality}}","Pricing must be a JSON object":"定价配置必须是 JSON 对象","Pricing Ratios":"定价比例","Pricing rule {{number}}":"定价规则 {{number}}","Pricing rules":"定价规则","Pricing tier {{name}}":"计费档位 {{name}}","Pricing Type":"定价类型","Primary Model":"主模型","Primary Passkey domain":"主域名","Prioritize reusing the last successful channel based on keys extracted from request context (sticky routing)":"基于请求上下文提取的 Key,优先复用上一次成功的渠道(粘滞选路)","Priority":"优先级","Priority (Default)":"优先级(默认)","Priority level from 0 (lowest) to 10 (highest), default is 5":"优先级,从 0(最低)到 10(最高),默认为 5","Priority order for automatic group assignment. New tokens rotate through this list.":"自动分组分配的优先级顺序。新 token 将按此列表轮换。","Priority order for tokens in the auto group. The system tries groups from top to bottom.":"auto 分组令牌的优先顺序。系统会从上到下依次尝试各分组。","Privacy":"隐私","Privacy Policy":"隐私政策","Private Deployment URL":"私有部署 URL","Processed requests":"已处理请求","Processing OAuth response...":"正在处理 OAuth 响应...","Processing...":"处理中...","Quota change amount cannot be zero":"额度变更量不能为 0","Product":"产品","Product ID":"产品 ID","Product ID is required":"产品 ID 为必填项","Product Name":"产品名称","Productivity":"效率工具","Products":"产品","Professional team providing 24/7 technical support":"专业团队提供 24/7 技术支持","Profile":"个人资料","Profile updated successfully":"个人资料更新成功","Programming":"编程","Progress":"进度","Project":"项目","Promote":"提升","Promotion codes":"促销代码","Prompt":"提示","Prompt (EN)":"提示词 (英文)","Quota unit is misconfigured":"额度单位配置错误","Prompt cache ratio":"提示缓存倍率","Quota value cannot be negative":"额度值不能为负数","Quota value exceeds valid range, maximum is {{max}}":"额度值超出有效范围,最大值为 {{max}}","Prompt caching":"提示词缓存","Prompt Caching":"提示词缓存","Prompt Details":"提示词详情","Prompt price ($/1M tokens)":"提示词价格(美元/100 万 token)","Prompt text filtering is active with the current form values.":"按当前表单设置,提示词文本过滤已生效。","Prompt text filtering needs both switches enabled and a non-empty keyword list.":"提示词文本过滤需要同时开启两个开关,并配置非空的敏感词列表。","Proprietary":"商业闭源","Protect login and registration with Cloudflare Turnstile":"使用 Cloudflare Turnstile 保护登录和注册","Provide a JSON object where each key maps to an endpoint definition.":"提供一个 JSON 对象,其中每个键映射到一个端点定义。","Provide a valid URL starting with http:// or https://":"请提供以 http:// 或 https:// 开头的有效 URL","Provide Markdown, HTML, or an external URL for the privacy policy":"提供 Markdown、HTML 或外部 URL 作为隐私政策","Provide Markdown, HTML, or an external URL for the user agreement":"提供 Markdown、HTML 或外部 URL 作为用户协议","Provide per-category safety overrides as JSON. Use `default` for fallback values.":"以 JSON 格式提供按类别划分的安全覆盖。使用 `default` 作为回退值。","Provide per-model header overrides as JSON. Useful for enabling beta features such as expanded context windows.":"以 JSON 格式提供按模型划分的标头覆盖。可用于启用测试功能,例如扩展上下文窗口。","Provider":"提供商","Provider & data privacy":"厂商与数据隐私","Provider created successfully":"提供商创建成功","Provider deleted successfully":"提供商删除成功","Provider ID":"提供商 ID","Provider Name":"提供商名称","Provider source":"提供商来源","Provider type (OpenAI, Anthropic, etc.)":"提供商类型 (OpenAI、Anthropic 等)","Provider updated successfully":"提供商更新成功","Provider-specific endpoint, account, and compatibility settings.":"配置供应商专属的端点、账户和兼容性选项。","Proxy Address":"代理地址","Proxy address must use HTTP, HTTPS, SOCKS5, or SOCKS5H and include a valid host":"代理地址必须使用 HTTP、HTTPS、SOCKS5 或 SOCKS5H,并包含有效的主机","Prune Object Items":"清理对象项","Prune object items by conditions":"按条件清理对象中的子项","Prune Rule (string or JSON object)":"清理规则(字符串或 JSON 对象)","Public base URL for async task media. Supports a dedicated media domain, port, or Nginx path prefix; falls back to Server Address when empty.":"异步任务媒体的公开基础地址。支持独立媒体域名、端口或 Nginx 路径前缀;留空时回退到服务器地址。","Public model catalog and pricing page.":"公开模型目录和价格页面。","Public rankings page based on live usage data.":"基于真实用量数据的公开排行榜页面。","Publish Date":"发布日期","Publish the request names and remove the raw upstream names from the model list":"将请求模型名加入模型列表,并移除上游原始名称","Published":"已发布","Published as {{model}}":"对外名称 {{model}}","Published at":"发布时间","Published models, groups, and model remapping rules.":"已发布的模型、分组和模型重映射规则。","Recalculated from tokens: tokens {{tokens}}, model ratio {{model_ratio}}, group ratio {{group_ratio}}, other multiplier {{other_multiplier}}":"按 token 重算:tokens {{tokens}},模型倍率 {{model_ratio}},分组倍率 {{group_ratio}},其他倍数 {{other_multiplier}}","Published:":"已发布:","Pull":"拉取","Pull model":"拉取模型","Pulling...":"拉取中...","Purchase Limit":"限购","Purchase limit reached":"已达到购买上限","Purchase Subscription":"购买订阅套餐","QR Code Image URL":"二维码图片 URL","QR code is not configured. Please contact support.":"二维码未配置。请联系支持人员。","Quantity":"数量","QuantumNous":"QuantumNous","Query":"Query","Query Balance":"查询余额","Query Param":"请求参数","Querying...":"正在查询...","Question":"问题","Queued":"排队中","Quick actions":"快捷操作","Quick insert common payment methods":"快速插入常用支付方式","Quick insert payment entries":"快速插入支付项","Quick options":"快捷选项","Quick Range":"快速范围","Quick Setup from Preset":"从预设快速设置","Quota":"额度","Quota ({{currency}})":"额度 ({{currency}})","Quota adjusted successfully":"调整额度成功","Quota adjustment details":"额度调整详情","Redemption code count must be greater than 0":"兑换码个数必须大于0","Quota after adjustment":"调整后额度","Quota before adjustment":"调整前额度","Quota clamped":"额度已钳制","Redemption code name length must be between 1-20":"兑换码名称长度必须在1-20之间","Quota consumed before charging users":"向用户收费前消耗的配额","Quota Distribution":"消耗分布","Quota given to invited users":"授予被邀请用户的配额","Quota given to invited users ({{formattedQuota}})":"授予被邀请用户的配额({{formattedQuota}})","Quota given to users who invite others":"授予邀请其他用户的配额","Quota given to users who invite others ({{formattedQuota}})":"授予邀请其他用户的配额({{formattedQuota}})","Quota must be a positive number":"配额必须是正数","Quota must be zero or greater":"额度不能为负数","Redemption failed, please try again later":"兑换失败,请稍后重试","Redemption quota must be positive":"兑换码额度必须大于 0","Quota Per Unit":"每单位配额","Quota Reset":"额度重置","Quota saturation protection triggered":"额度饱和保护已触发","Quota Settings":"额度设置","Quota Types":"配额类型","Quota unchanged":"额度未变化","Quota update failed":"额度更新失败","Quota:":"Quota:","Radius":"圆角","Random":"随机","Randomly select a key from the pool for each request":"每次请求从池中随机选择一个密钥","Ranking data is currently simulated for preview purposes and will be replaced with live analytics once the backend integration ships.":"当前排行榜数据为预览用模拟数据,后端集成完成后将替换为真实分析数据。","Rankings":"排行榜","Rate Limit Windows":"速率限制窗口","Rate Limited":"限流","Rate Limiting":"速率限制","Rate limits":"速率限制","Ratio":"倍率","Ratio applied to audio completions for streaming models.":"应用于流式模型音频完成的比例。","Ratio applied to audio inputs where supported by the upstream model.":"应用于上游模型支持的音频输入的比例。","Ratio applied when creating cache entries for supported models.":"为支持的模型创建缓存条目时应用的倍率。","Ratio mode":"比例模式","Ratio overrides for users of this group":"该分组用户使用其他分组时的倍率覆盖","Ratio overrides when billed as this group":"按该分组计费时的倍率覆盖","Ratio Type":"比率类型","Ratio: {{value}}":"倍率:{{value}}","Ratios synced successfully":"比率同步成功","Raw expression":"原始表达式","Raw expressions and presets use USD. Currency selection only converts visual price inputs and monetary previews.":"原始表达式和预设使用美元。货币选择仅换算可视化价格输入和金额预览。","Raw JSON":"原始 JSON","Raw Quota":"原生额度","Raw response":"原始回复","Re-enable on success":"成功后重新启用","Re-login":"重新登录","Read channels":"读取渠道","Ready":"就绪","Ready to initialize":"准备初始化","Ready to simplify":"准备好简化","Real exchange rate between USD and your payment gateway currency":"美元与您的支付网关货币之间的实际汇率","Realtime pricing must be converted manually.":"Realtime 定价需要手动转换。","Reason":"原因","Reason:":"原因:","Reasoning":"推理","Reasoning Effort":"推理强度","Received":"获得","Regular administrators cannot promote other users to administrator":"普通管理员用户无法提升其他用户为管理员","Received amount":"已收额度","Recent maintenance tasks running across instances and their execution status.":"跨实例运行的近期维护任务及其执行状态。","Recent success-rate samples; gray bars indicate missing data.":"近期成功率采样;灰色条表示暂无数据。","Recently completed or failed system task runs.":"最近已完成或失败的系统任务运行记录。","Recently launched models":"近期发布的模型","Recently launched models gaining traction":"近期发布并快速增长的模型","Recharge":"充值","Recharge Amount":"充值金额","Recharge Amount (USD)":"充值金额 (USD)","Recommended":"推荐","Recommended actions":"推荐操作","Recommended to keep this high to avoid upstream throttling.":"建议保持此值较高,以避免上游限流。","Record IP Address":"记录 IP 地址","Record quota usage":"记录配额使用量","Recover auto-disabled channels only":"仅恢复自动禁用的渠道","Recursion Strategy":"递归策略","Recursive":"递归","Redeem":"兑换额度","Redeem codes":"兑换码","Redeemed":"已使用","Redeemed at":"使用时间","Redeemed By":"兑换人","Redeemed:":"已兑换:","redemption code":"兑换码","Redemption Code":"兑换码","Redemption code deleted successfully":"兑换码删除成功","Redemption code disabled successfully":"兑换码已禁用","Redemption code enabled successfully":"兑换码已启用","Redemption code updated successfully":"兑换码更新成功","Redemption code(s) created successfully":"兑换码创建成功","Redemption codes":"兑换码","Redemption Codes":"兑换码","Redemption codes are disabled until the administrator confirms compliance terms.":"管理员确认合规条款之前,兑换码功能不可用。","Redemption codes created":"兑换码创建完成","redemption codes.":"兑换码。","Redemption failed":"兑换失败","Redemption successful! Added: {{quota}}":"兑换成功!已添加:{{quota}}","Redirect {{model}}":"重定向 {{model}}","Redirect fetched upstream names to the names your users call.":"把拉取到的上游名称重定向为用户调用的名称。","Redirect panel":"重定向面板","Redirect URL":"重定向 URL","Redirecting to chat page...":"正在跳转到聊天页面...","Redirecting to Creem checkout...":"正在重定向到 Creem 结账...","Redirecting to GitHub...":"正在跳转 GitHub...","Redirecting to payment page...":"正在重定向到支付页面...","Redirecting to sign in in {{seconds}} seconds.":"将在 {{seconds}} 秒后跳转到登录页。","Redirects to {{model}}":"重定向到 {{model}}","Reduces cache hit rate":"会降低缓存命中率","Reduces repeated wording":"减少重复措辞","Reference Video":"参照生视频","Referral link:":"推荐链接:","Referral Program":"推荐计划","Referral reward transfer is disabled until the administrator confirms compliance terms.":"管理员确认合规条款之前,邀请奖励转移功能不可用。","Refine models by provider, group, type, and tags.":"按供应商、分组、类型和标签细化模型。","Refresh":"刷新","Refresh Cache":"刷新缓存","Refresh credential":"刷新凭据","Refresh details":"刷新详情","Refresh failed":"刷新失败","Refresh failed. Showing the last successful snapshot.":"刷新失败,当前显示上次成功获取的快照。","Refresh interval (minutes)":"刷新间隔 (分钟)","Refresh preview":"重新检测","Refresh Stats":"刷新统计","Refresh the list and try again.":"请刷新列表后重试。","Refresh the preview before trying again; some changes may already have been saved.":"部分变更可能已保存,请重新检测后再操作。","Refreshing...":"刷新中...","Refund":"退款","Refund Details":"退款详情","Regenerate":"重新生成","Regenerate Backup Codes":"重新生成备用代码","Regenerated two-factor backup codes":"重新生成了两步验证备用码","Regenerating immediately invalidates any existing token.":"重新生成会立即使所有现有令牌失效。","Regex":"正则","Regex Pattern":"正则表达式","Regex Replace":"正则替换","Register each URL into the matching Test Mode / Production Mode webhook slot in the Pancake dashboard. Separate endpoints prevent test traffic from accidentally crediting production accounts.":"请在 Pancake 控制台中将每个 URL 注册到对应的测试模式/生产模式 webhook 槽位。分离端点可以避免测试流量误入生产账户。","Register Passkey":"注册 Passkey","Registered":"已注册","Registered a passkey":"注册了一个 Passkey","Registration Enabled":"注册已启用","Registration flow expired. Please try again.":"注册流程已过期,请重试。","Registry (optional)":"注册表 (可选)","Registry secret":"注册表密钥","Registry username":"注册表用户名","Reinstall latest":"重装最新版","Reject Reason":"拒绝原因","Release details":"版本详情","Release to insert a new priority tier":"松手插入新优先级","Release to join priority {{priority}}":"松手加入同级 · 优先级 {{priority}}","Released":"发布于","Reload pricing":"重新加载定价","Reload vendor details":"重新加载供应商资料","Relying Party Display Name":"依赖方显示名称","Relying Party ID":"依赖方 ID","Remaining":"剩余","Remaining percentage":"剩余比例","Remaining quota":"剩余配额","Remaining Quota ({{currency}})":"剩余额度 ({{currency}})","Remaining quota units":"剩余配额单位","Remaining:":"剩余:","Remark":"备注","Remind me once when my balance drops below the threshold":"余额低于阈值时提醒我一次","Remind users through their chosen notification method when their balance drops below the threshold":"用户余额低于阈值时,通过其选择的通知方式提醒","Reminder threshold":"提醒阈值","Reminder threshold cannot be negative":"提醒阈值不能为负数","Remove":"移除","Remove {{group}}":"移除 {{group}}","Remove {{value}}":"移除 {{value}}","Remove ${{amount}}":"移除 ${{amount}}","Remove all custom prices, ratios and billing expressions for these exact model names. Built-in pricing may become effective again.":"清除这些模型名称对应的全部自定义价格、倍率和计费表达式,内置定价可能会重新生效。","Remove all log entries created before the selected timestamp.":"移除所选时间戳之前创建的所有日志条目。","Remove attachment":"移除附件","Remove branch":"删除分支","Remove compatible Passkey domains?":"移除兼容的通行密钥域名?","Remove condition":"移除条件","Remove domains":"移除域名","Remove Duplicates":"移除重复项","Remove end condition":"删除结束条件","Remove filter":"移除筛选","Remove functionResponse.id field":"移除 functionResponse.id 字段","Remove mapped targets":"移除映射目标","Remove Models":"删除模型","Remove negation":"取消取反","Remove node filter":"移除节点筛选","Remove Passkey":"解绑 Passkey","Remove Passkey?":"移除通行密钥?","Remove rule group":"移除规则组","Remove saved price":"删除已保存价格","Remove source {{name}}":"移除源 {{name}}","Remove start condition":"删除起始条件","Remove string prefix":"去掉字符串前缀","Remove string suffix":"去掉字符串后缀","Remove the target field":"删除目标字段","Remove this model’s custom pricing and use the built-in defaults. A model without a default may become unpriced.":"移除此模型的自定义价格并恢复内置默认值。没有默认价格的模型可能变为未定价状态。","Remove tier":"移除档位","Removed":"已移除","Removed {{removed}} duplicate key(s). Before: {{before}}, After: {{after}}":"已移除 {{removed}} 个重复密钥。移除前:{{before}},移除后:{{after}}","Removed an OAuth binding for the user":"解除了用户的一个 OAuth 绑定","Removed models":"已移除模型","Removed Models ({{count}})":"已移除模型 ({{count}})","Removed models will no longer be available through this channel. Select removals explicitly.":"移除后将无法通过此渠道调用这些模型,请手动勾选需要移除的项。","Removed settings":"移除的配置","Removes MjProxy flags such as --fast, --relax, and --turbo from user prompts.":"从用户提示中移除 MjProxy 参数,如 --fast、--relax 和 --turbo。","Removing Passkey will require you to sign in with your password next time. You can re-register anytime.":"移除通行密钥后,您下次将需要使用密码登录。您可以随时重新注册。","Rename":"重命名","Rename deployment":"重命名部署","Rename failed":"重命名失败","Renamed an access token":"重命名了访问令牌","Renamed successfully":"重命名成功","Renaming metadata does not rename channel models or move pricing. Existing prices stay with the original model name.":"修改元信息名称不会重命名渠道模型或迁移定价,已有价格仍归原模型名称。","Reorder channel {{id}}":"调整渠道 {{id}} 的优先级","Repair":"修复","Repair Channel Consistency":"修复渠道一致性","Repair channel consistency?":"修复渠道一致性?","Repeat the administrator password":"重复输入管理员密码","Replace":"替换","Replace {{find}} with {{replaceWith}}":"将 {{find}} 替换为 {{replaceWith}}","Replace all existing keys":"替换所有现有密钥","Replace channel models":"覆盖渠道模型","Replace forwarding routes?":"替换转发路由?","Replace mode: Will completely replace all existing keys":"替换模式:将完全替换所有现有键","Replace text":"替换文本","Replace with":"替换为","Replace With":"替换为","replaced":"已替换","Replacement Model":"替换模型","Replay drag demo":"重播拖拽演示","Replica count":"副本数","Replicate":"Replicate","Report an issue":"反馈问题","request":"请求","Request":"请求","Request & Response":"请求与响应","Request Body Disk Cache":"请求体磁盘缓存","Request Body Field":"请求体字段","Request Body Memory Cache":"请求体内存缓存","Request body must be a JSON object.":"请求体必须是 JSON 对象。","Request body pass-through is enabled. The request body will be sent directly to the upstream without any conversion.":"请求体透传已启用。请求体将直接发送到上游,不进行任何转换。","Request checks":"请求检查","Request completed":"请求已完成","Request conversion":"请求转换","Request Conversion":"请求转换","Request Count":"请求计数","Request decision flow":"请求决策流程","Request error occurred":"请求发生错误","Request failed":"请求失败","Request flow":"请求流","Request Header Field":"请求头字段","Request Header Override":"请求头覆盖","Request Header Overrides":"请求头覆盖","Request headers must be a JSON object with string values.":"请求头必须是值为字符串的 JSON 对象。","Request ID":"请求 ID","Request Limits":"请求限制","Request Model":"请求模型","Request Model Name":"请求模型名称","Request Model:":"请求模型:","Request names your users call":"用户调用的请求模型名","Request overrides, routing behavior, and upstream model automation":"请求覆盖、路由行为和上游模型自动化","Request Path":"请求路径","Request policies":"请求策略","Request policy decisions":"请求策略决策","Request processing":"请求处理","Request rejected locally":"请求在本地被拒绝","Request retry":"请求重试","Request rule pricing":"请求规则计费","Request rules apply on top of this amount.":"请求规则会在此金额之上继续应用。","Request simulation":"请求模拟","Request success rate sampled over the last 24 hours":"最近 24 小时按时间桶采样的请求成功率","Request success rate; {{incidents}} incident buckets in the last 24 hours":"请求成功率;最近 24 小时 {{incidents}} 个异常桶","Request text filtering":"请求文本过滤","Request timed out, please refresh and restart GitHub login":"请求超时,请刷新页面后重新发起 GitHub 登录","Request-based":"含请求条件","Requested items":"请求项数","Requested quota":"请求数额","Requested quota: {{quota}}":"请求数额:{{quota}}","Requested redemption code IDs":"请求删除的兑换码 ID","Requested token IDs":"请求的令牌 ID","Requested token IDs truncated":"请求的令牌 ID 已截断","Requested: {{total}}":"请求 {{total}} 项","Requested: {{total}} · Deleted: {{processed}}":"请求 {{total}} 项,实际删除 {{processed}} 个","Requested: {{total}} · Returned: {{processed}}":"请求 {{total}} 项,返回 {{processed}} 个","Requests":"请求数","Requests (24h)":"请求数(24 小时)","Requests / 24h":"请求 / 24 小时","Requests per minute":"每分钟请求数","requests served":"服务请求数","Requests will be forwarded to this worker. Trailing slashes are removed automatically.":"请求将被转发到此 Worker。末尾的斜杠会自动移除。","Requests:":"请求:","Require email verification for new accounts":"要求新账户验证邮箱","Require job success before follow-up actions":"在后续操作前要求任务成功","Require login to view models":"要求登录才能查看模型","Require login to view rankings":"要求登录才能查看排行榜","Require the original channel":"必须使用原渠道","required":"必填","Required":"必需","Required events:":"必需事件:","Required permission":"所需权限","Required provider, authentication, model, and group settings":"必填的供应商、鉴权、模型和分组设置","Required to expose MjProxy-style image generation to end users.":"需要向终端用户开放 MjProxy 风格的图像生成。","Requires an available channel and access to its group.":"仍需有可用渠道,并满足用户分组访问条件。","Requires global auto-disable and this channel option.":"需同时开启全局自动停用和本渠道开关。","Requires upstream WebSocket support":"需上游支持 WebSocket","Rerank":"重新排序","Reroll":"重绘","Research, analysis, scientific reasoning":"研究、分析与科学推理","Resend ({{seconds}}s)":"重新发送 ({{seconds}}s)","Resend codes":"重新发送验证码","Resend in {{seconds}}s":"{{seconds}} 秒后重发","Reserve requested images; settle returned images.":"按请求数量预扣,按实际返回数量结算。","Reserve the estimated input cost multiplied by this value, without estimating output tokens. Defaults to 1; positive decimals such as 0.5 and 1.5 are supported. Final charges use actual usage. Per-request and task prices are unaffected.":"按预计输入费用乘以此倍率预扣,不预估输出 token。默认为 1,支持 0.5、1.5 等正小数。最终按实际用量结算,按次和任务计费不受影响。","Reserved for viewing complete channel keys after secure verification.":"预留用于在安全验证后查看完整渠道密钥。","Reset":"重置","Reset {{count}} active subscriptions":"已重置 {{count}} 个有效订阅","Reset 2FA":"重置 2FA","Reset 2FA for {{username}}? The user must set up 2FA again to continue using it.":"要重置 {{username}} 的 2FA 吗?该用户必须重新设置 2FA 后才能继续使用。","Reset active {{plan}} subscriptions for this user?":"要重置该用户的有效 {{plan}} 订阅吗?","Reset all active subscriptions under {{plan}}?":"要重置 {{plan}} 下的所有有效订阅吗?","Reset all model prices?":"重置所有模型价格吗?","Reset all model ratios?":"重置所有模型比例吗?","Resume drag demo":"继续拖拽演示","Review the affected Passkeys and confirm the domain removal. If the settings or impact have changed, confirmation is required again.":"请核对受影响的通行密钥并确认删除域名。配置或影响范围发生变化后,需要重新确认。","Reset all settings to default values":"将所有设置重置为默认值","Reset at:":"重置于:","Reset balance and used quota":"重置余额和已用配额","Reset completed":"重置完成","Reset completed. Latest usage has been refreshed.":"重置完成,已刷新最新用量。","Reset Count":"重置数量","Reset count:":"重置次数:","Reset Credit":"重置次数","Reset Credits":"重置次数","Reset Cycle":"重置周期","Reset email sent, please check your inbox":"重置邮件已发送,请检查您的收件箱","Reset failed":"重置失败","Reset model ratios":"重置模型倍率","Reset Passkey":"重置 Passkey","Reset Passkey for {{username}}? The user will need to register a new Passkey before using passwordless login.":"要重置 {{username}} 的 Passkey 吗?该用户需要重新注册 Passkey 后才能使用无密码登录。","Reset password":"重置密码","Reset Period":"重置周期","Reset prices":"重置价格","Reset quota":"重置额度","Reset ratios":"重置比例","Reset Stats":"重置统计","Reset subscription quota":"重置订阅额度","Reset the user passkey":"重置了用户的通行密钥","Reset to default":"重置为默认","Reset to Default":"重置为默认","Reset to default configuration":"已重置为默认配置","Reset Two-Factor Authentication":"重置 2FA","Reset usage window":"重置用量窗口","Resets in:":"将于以下时间重置:","Resetting...":"重置中...","Resize column":"调整列宽","Resolve Conflicts":"解决冲突","Resource Configuration":"资源配置","Resources":"资源","Responding...":"正在回复...","Response":"响应","Response Model":"响应模型","Response model mismatch":"响应模型不一致","Response model: {{model}}":"响应模型:{{model}}","Response Time":"响应时间","Response time: {{duration}}":"响应时间:{{duration}}","Response too large":"响应过大","Responses API Version":"响应 API 版本","Responses WebSocket":"Responses WebSocket","Restore default pricing":"恢复默认定价","Restore defaults":"恢复默认","Restore global Auto":"恢复全局 Auto","Restore notifications":"恢复提醒","Restrict user model request frequency (may impact high concurrency performance)":"限制用户模型请求频率(可能会影响高并发性能)","Result":"结果","Result not retained":"结果未保留","Retain last N days":"保留最近N天","Retain last N files":"保留最近 N 个文件","Retention days":"保留天数","Retrieve result":"查询结果","Retry":"重试","rule_name cannot be empty":"rule_name 不能为空","Retry budget":"重试预算","Retry Chain":"重试链路","Retry Settings":"重试设置","Retry Suggestion":"重试建议","Retry Times":"重试次数","Return a custom error immediately":"立即返回自定义错误","Return Custom Error":"返回自定义错误","Return data conforming to a JSON schema":"返回符合 JSON Schema 的数据","Return Error":"返回错误","Return per-token log probabilities":"返回每个 token 的对数概率","Return to dashboard":"返回仪表盘","Return to the original window to continue.":"返回原窗口继续操作。","Return vector embeddings for inputs":"为输入返回向量嵌入","Returned keys":"返回密钥数","Returned token IDs":"返回的令牌 ID","Returned: {{processed}}":"返回 {{processed}} 个","Reveal API key":"显示 API 密钥","Reveal full keys":"查看完整密钥","Reveal key":"显示密钥","Revenue":"收入","Review & initialize":"审核并初始化","Review and confirm the selected prices.":"确认所选模型的价格变更。","Review and sign out devices currently using your account.":"查看并退出当前正在使用您账号的设备。","Review and upgrade":"审查并升级","Review confirmation":"检查并确认","Review every addition and overwrite before applying. Pricing, channels, and group access are not changed.":"应用前逐项检查新增和覆盖内容,定价、渠道及分组权限不会改变。","Review model rates before scaling traffic":"扩展流量前查看模型费率","Review selected changes":"核对所选变更","Review the affected records before applying. Pricing, channels, and model names are preserved.":"应用前请检查受影响的记录。定价、渠道和模型名称保持原值。","Review the compatible domains and allowed websites, then save changes on the settings page.":"检查兼容域名和允许使用的网站,然后在设置页保存更改。","Review the model changes before applying. Unselected models stay unchanged and will not be ignored.":"请先核对模型变更。未勾选的模型保持不变,也不会加入忽略列表。","Review the prices and billing expression. Confirming updates the draft; save model pricing to apply it.":"请核对价格和计费表达式。确认后仅更新草稿,保存模型定价后生效。","Review your payment details":"查看您的付款详情","Review your purchase details before proceeding.":"在继续之前,请审阅您的购买详情。","Revoke":"撤销","Revoke session?":"撤销此会话?","Revoke this access token? Scripts using it stop working immediately.":"撤销此访问令牌?使用它的脚本会立即失效。","Revoked access tokens":"已撤销的访问令牌","Revoked an access token":"撤销了访问令牌","Rewards will be added directly to your balance":"奖励将直接添加到您的余额","Rewrite callback URLs to the local server":"将回调 URL 重写到本地服务器","Right to Left":"从右到左","Role":"角色","Roleplay":"角色扮演","Root":"Root","Root Diagnostics":"Root 诊断","Rose Garden":"玫瑰花园","Route":"路由","Route active":"路由已启用","Route Description":"路由描述","Route group":"路由组","Route is required":"路由为必填项","Route models must be unique for the same incoming path":"同一入口路径下的路由模型必须唯一","Route, auth, and balance check in one place":"路由、认证和余额检查集中展示","Routes":"路由","Routes in this plan":"方案中的路由","Routes with the same incoming path are matched by model. Leave the model scope empty only for the final fallback route.":"同一入口路径的路由按模型匹配。仅最后一个兜底路由可留空模型范围。","Routes with the same incoming path are split by client model rules. Unmatched requests use the final fallback.":"同一入口路径按客户端 model 规则分流;未命中的请求走最后的兜底。","Routes with the same incoming path are split by exact client model. Unmatched requests use the final fallback.":"同一入口路径按客户端 model 精确分流;未命中的请求走最后的兜底。","Routes with the same incoming path match exact client model names. Separate multiple models with commas, and leave only the final fallback empty.":"同一入口路径按客户端请求中的精确模型名匹配。多个模型用英文逗号分隔,只有最后的兜底可留空。","Routing & Mapping":"路由与映射","Routing & Overrides":"路由与覆盖","Routing Group":"路由分组","Routing Reliability":"路由可靠性","Routing Strategy":"路由策略","Rows are user groups, columns are billing groups. Empty cells fall back to the base ratio shown in gray.":"行为用户分组,列为计费分组。空白单元格回退到灰色显示的基础倍率。","Rows per page":"每页行数","RPM":"RPM","RPM = requests per minute, TPM = tokens per minute, RPD = requests per day. Limits apply per token group.":"RPM = 每分钟请求数,TPM = 每分钟 token 数,RPD = 每日请求数。限制按令牌分组生效。","RSA Private Key (Production)":"RSA 私钥(生产)","RSA Private Key (Sandbox)":"RSA 私钥(沙盒)","Rule":"规则","Rule {{line}} is missing source field":"第 {{line}} 条操作缺少来源字段","Rule {{line}} is missing target field":"第 {{line}} 条操作缺少目标字段","Rule {{line}} is missing target path":"第 {{line}} 条操作缺少目标路径","Rule {{line}} is missing value":"第 {{line}} 条操作缺少值","Rule {{line}} pass_headers format is invalid":"第 {{line}} 条请求头透传格式无效","Rule {{line}} pass_headers is missing header names":"第 {{line}} 条请求头透传缺少请求头名称","Rule {{line}} prune_objects is missing conditions":"第 {{line}} 条 prune_objects 缺少条件","Rule {{line}} return_error requires a message field":"第 {{line}} 条 return_error 需要 message 字段","Rule Description (optional)":"规则描述(可选)","Rule editor mode":"规则编辑模式","Rule group":"规则组","Rule override":"规则单独设置","rules":"规则","Rules":"规则","Rules are checked in order. The first match determines the price.":"按顺序匹配规则,首条命中的规则决定价格。","Rules can inherit or override these defaults.":"规则可继承或单独覆盖。","Rules for {{group}}":"{{group}} 的规则","Rules JSON":"规则 JSON","Rules JSON must be an array":"规则 JSON 必须是数组","Rules match the original model value from the client request body.":"规则匹配客户端请求体里的原始 model 值。","Run and manage maintenance tasks and performance settings.":"运行和管理维护任务及性能设置。","Run background checks using the selected test mode":"按所选检查模式在后台运行检查","Run dry run":"运行干跑","Run GC":"执行 GC","Run tests for the selected models":"运行所选模型的测试","running":"运行中","Running":"运行中","Running dry run":"正在运行干跑","Running requests":"运行中请求","Runtime":"运行环境","Runtime status":"运行状态","Runway":"可用时长","s":"秒","Safety Settings":"安全设置","Same as Local":"与本地相同","Sample interval: {{seconds}} seconds":"采样间隔:{{seconds}} 秒","Sampling temperature; lower is more deterministic":"采样温度;越低越稳定","Sandbox":"沙盘","Sandbox mode":"沙盒模式","Save":"保存","Save & Submit":"保存并提交","Save all settings":"保存所有设置","Save as a file":"保存为文件","Save as Markdown":"保存为 Markdown","Save as TXT":"保存为 TXT","Save Backup Codes":"保存备份代码","Save changes":"保存更改","Save Changes":"保存更改","Save chat settings":"保存聊天设置","Save check-in settings":"保存签到设置","Save Creem settings":"保存 Creem 设置","Save drawing settings":"保存绘图设置","Save Epay settings":"保存 Epay 设置","Save failed":"保存失败","Save failed, please retry":"保存失败,请重试","Save general settings":"保存通用设置","Save group ratios":"保存分组比率","Save group settings":"保存分组设置","Save io.net settings":"保存 io.net 设置","Save log settings":"保存日志设置","Save metadata":"保存资料","Save model prices":"保存模型价格","Save model ratios":"保存模型比率","Save Models":"保存模型","Save monitoring rules":"保存监控规则","Save navigation":"保存导航","Save notice":"保存通知","Save or discard pricing changes before renaming metadata.":"重命名前,请先保存或放弃定价修改。","Save Preferences":"保存偏好设置","Save preview":"保存预览","Save rate limits":"保存速率限制","Save redemption codes":"保存兑换码","Save sensitive words":"保存敏感词","Save Settings":"保存设置","Save sidebar modules":"保存侧边栏模块","Save SSRF settings":"保存 SSRF 设置","Save Stripe settings":"保存 Stripe 设置","Save these backup codes in a safe place. Each code can only be used once.":"将这些备份代码保存在安全的地方。每个代码只能使用一次。","Save these codes in a safe place. Each code can only be used once.":"将这些代码保存在安全的地方。每个代码只能使用一次。","Save token limits":"保存令牌限制","Save tool prices":"保存工具价格","Save Waffo Pancake settings":"保存 Waffo Pancake 设置","Save Worker settings":"保存 Worker 设置","Saved successfully":"保存成功","Saving permission changes requires security verification":"修改权限后保存需要安全验证","Saving...":"正在保存...","Scan QR Code":"扫描二维码","Scan the QR code to follow the official account and reply with “验证码” to receive your verification code.":"扫描二维码关注官方账号,回复“验证码”以接收您的验证码。","Scan this QR code with your authenticator app (Google Authenticator, Microsoft Authenticator, etc.)":"使用您的身份验证器应用(Google Authenticator、Microsoft Authenticator 等)扫描此二维码","Scenario Templates":"场景模板","Scheduled channel tests":"定期渠道测试","Scheduled full test":"定时全量测试","Scheduled full test probes non-manually-disabled channels; passive recovery only checks auto-disabled channels after real request failures.":"定时全量测试会探测非手动禁用的渠道;仅被动恢复只会在真实请求失败导致渠道自动禁用后检查这些渠道是否可恢复。","Scheduled or bulk health checks can disable a channel when this duration is exceeded, if both global and channel auto-disable are enabled.":"全局和渠道自动停用均开启时,定时或批量健康检查耗时超过此阈值可触发停用。","Scheduled recovery is off. Bulk channel tests can still re-enable automatically disabled channels.":"定时恢复未运行,批量测试仍可恢复被自动停用的渠道。","Scheduled test options":"定期测试子选项","scheduling controls":"调度控制能力","Science":"科研","Scope":"作用域","Scopes":"作用域","Search":"搜索","Search by name or URL...":"按名称或 URL 搜索...","Select at least one valid permission.":"请至少选择一个有效权限。","Search by order number...":"按订单号搜索...","Search channel type...":"搜索渠道类型...","Search chat presets...":"搜索聊天预设...","Search colors...":"搜索颜色...","Search conflicting models or fields":"搜索冲突的模型或字段","Search deployments...":"搜索部署...","Search feature in development":"搜索功能开发中","Search group names...":"搜索分组名称...","Search groups by name or description":"搜索分组名称或描述","Search groups...":"搜索分组...","Search icons or enter an icon key":"搜索图标或输入图标标识","Search method identifiers...":"搜索支付方式标识...","Search missing models":"搜索缺失的模型","Search model name, provider, endpoint, or tag...":"搜索模型名称、供应商、端点或标签...","Search model name...":"搜索模型名称...","Search models":"搜索模型","Search models or fields...":"搜索模型或字段...","Search models...":"搜索模型...","Search payment methods...":"搜索付款方式...","Search payment type keys...":"搜索支付处理标识...","Search payment types...":"搜索支付类型...","Search products...":"搜索产品...","Search providers, plugins, or type numbers":"搜索提供商、插件或类型编号","Search rules...":"搜索规则…","Search tags...":"搜索标签...","Search the public web at inference time":"推理时检索公开互联网","Search vendor names or descriptions":"搜索供应商名称或简介","Search vendors":"搜索供应商","Search vendors...":"搜索供应商...","Search, add, and edit model vendors.":"搜索、添加和编辑模型供应商。","Search...":"搜索...","second":"秒","Second":"秒","seconds":"秒","Secret env (JSON object)":"密钥环境 (JSON 对象)","Secret environment variables (JSON)":"密钥环境变量 (JSON)","Secret Key":"密钥","Secure & Reliable":"安全可靠","Secured":"已保护","Security":"安全","Security & Access":"安全与访问","Security & Limits":"安全与限制","Security Check":"安全验证","Security verification":"安全验证","Security verification has expired. Please verify again.":"安全验证已过期,请重新验证。","Security verification is no longer valid. Please verify again.":"安全验证已失效,请重新验证。","Seed":"随机种子","Select":"选择","Select {{name}}":"选择 {{name}}","Select a color":"选择颜色","Select a complete plan, then keep only the routes you need.":"选择完整方案,再保留需要的路由。","Select a concrete model to configure pricing. Metadata matching does not propagate prices.":"请选择具体模型配置价格,元信息匹配不会传播定价。","Select a group":"选择一个分组","Select a group type":"选择分组类型","Select a model to edit pricing":"选择一个模型编辑定价","Select a preset...":"选择一个预设...","Select a price source and review pricing changes. Model metadata and channel access are not changed.":"选择价格来源并预览价格变更,模型资料与渠道权限不会修改。","Select a product":"选择产品","Select a role":"选择角色","Select a rule to edit.":"请选择一条规则进行编辑。","Select a saved vendor.":"请选择已保存的供应商。","Select a store":"选择店铺","Select a suggested icon or keep an existing advanced icon key.":"选择推荐图标,也可保留已有的高级图标字符串。","Select a timestamp before clearing logs.":"清除日志前请选择一个时间戳。","Select a usage mode to continue":"选择使用模式以继续","Select a verification method first":"请先选择验证方式","Select a version to compare":"选择要比较的版本","Select active subscription plan":"选择有效订阅套餐","Select all":"全选","Select all (filtered)":"全选(筛选结果)","Select all changed fields":"全选变更字段","Select all matching models":"全选匹配模型","Select all models":"选择所有模型","Select all models in {{category}}":"全选 {{category}} 中的模型","Select all prices from {{source}}":"全选 {{source}} 的价格","Select all syncable models (all pages, {{count}})":"全选可同步项(跨页,共 {{count}} 项)","Select All Visible":"全选当前","Select an operation mode and enter the amount":"选择操作模式并输入金额","Select announcement type":"选择公告类型","Select at least one Auto group or restore global Auto.":"请至少选择一个 Auto 分组,或恢复全局 Auto。","Select at least one field to overwrite.":"请选择至少一个要覆盖的字段。","Select at least one model to preview mappings.":"至少选择一个模型以预览映射。","Select at least one permission":"至少选择一项权限","Select at least one route":"请至少选择一条路由","Select at least one target model":"请至少选择一个目标模型","Select at most {{max}} Auto groups":"最多选择 {{max}} 个 Auto 分组","Select body font":"选择正文字体","Select border radius":"选择圆角大小","Select channel type":"选择渠道类型","Select color preset":"选择颜色预设","Select content width":"选择内容宽度","Select corner radius":"选择圆角大小","Select currency":"选择货币","Select date":"选择日期","Select default chart":"选择默认图表","Select default range":"选择默认范围","Select display mode":"选择显示模式","Select end time":"选择结束时间","Select from presets or type custom identifier.":"从预设中选择或输入自定义标识符。","Select granularity":"选择粒度","Select groups (leave empty to keep current)":"选择分组(留空以保持当前设置)","Select interface density":"选择界面密度","Select items...":"选择项目...","Select key format":"请选择密钥格式","Select language":"选择语言","Select Language":"选择语言","Select layout style":"选择布局样式","Select locations":"选择位置","Select model":"选择模型","Select Model":"选择模型","Select model {{model}}":"选择模型 {{model}}","Select models":"选择模型","Select models (empty for allow all)":"选择模型(留空表示允许所有)","Select models and apply to channel models list.":"选择模型并应用到渠道模型列表。","Select models or add custom ones":"选择模型或添加自定义模型","Select models to process. Unselected \\"add\\" models will be ignored.":"勾选要处理的模型,未勾选的「新增」模型将作为忽略处理。","Select models to run batch tests.":"选择要运行批量测试的模型。","Select or enter color value":"选择或输入颜色值","Select or enter method identifier":"选择或输入支付方式标识","Select or enter model name":"选择或输入模型名称","Select or enter payment type":"选择或输入支付类型","Select or enter payment type key":"选择或输入支付处理标识","Select payment method":"选择支付方式","Select preset or enter custom CSS color value.":"选择预设或输入自定义 CSS 颜色值。","Select price for {{model}} from {{source}}":"选择 {{source}} 的 {{model}} 定价","Select price sources":"选择价格来源","Select publish date":"选择发布日期","Select requirement":"选择要求","Select row":"选择行","Select row {{number}}":"选择第 {{number}} 行","Select sidebar style":"选择侧边栏样式","Select site direction":"选择站点方向","Select start time":"选择开始时间","Select subscription plan":"选择订阅套餐","Select successful models ({{count}})":"勾选成功模型({{count}})","Select Sync Channels":"选择同步渠道","Select sync channels to compare prices":"选择同步渠道以对比价格","Select sync channels to compare ratios":"选择同步渠道以比较比率","Select Sync Source":"选择同步源","Select syncable models on this page":"全选本页可同步项","Select task plugin":"选择任务插件","Select the API endpoint region":"选择 API 终端节点区域","Select the fields you want to overwrite with upstream data. Unselected fields keep their local values.":"选择要使用上游数据覆盖的字段。未选择的字段将保留其本地值。","Select the models to keep in this channel.":"选择要在此渠道中保留的模型。","Select the task plugins installed on the upstream gateway":"选择上游网关已安装的任务插件","Settings updated":"设置已更新","Select theme preference":"选择主题偏好","Settled by the task usage expression":"按任务用量表达式结算","Select theme preset":"选择主题预设","Select time granularity":"选择时间粒度","Select vendor":"选择供应商","Select version":"选择版本","Selectable groups":"可选分组","selected":"已选择","Selected {{count}}":"已选 {{count}} 个","Selected {{selected}} / {{total}}":"已选 {{selected}} / {{total}}","selected channel(s). Leave empty to remove tag.":"选定的渠道。留空以移除标签。","Selected conflicts were overwritten successfully.":"选中的冲突已成功覆盖。","Selected names are":"选中的名称是","Selected nodes":"已选节点","Selected when creating a token and used as the default billing group for API calls.":"创建令牌时选择,用作 API 调用的默认计费分组。","Selecting a plugin fills its declared models and default base URL.":"选择插件后将自动填入其声明的模型和默认 Base URL。","Self-Use Mode":"自用模式","Send":"发送","Send a request":"发送请求","Send chat completions to the OpenAI-compatible /v1/chat/completions instead of the native Ollama /api/chat":"将对话补全请求发送至 OpenAI 兼容的 /v1/chat/completions,而不是 Ollama 原生的 /api/chat","Send code":"发送验证码","Send reset email":"发送重置邮件","Send the original request body to upstream without conversion. Only available for native forwarding routes.":"将原始请求体不经转换直接发送到上游。仅原生转发路由可用。","Sending...":"发送中...","Sensitive channel settings are read-only for your account.":"你的账号只能查看敏感渠道设置。","Sensitive Words":"敏感词","Sent the API key to FluentRead.":"API 密钥已发送至 FluentRead。","Separate image/audio prices are enabled.":"已启用图像/音频单独定价。","Separate multiple rules with English commas. For regex patterns that need commas, switch to JSON Text.":"多个规则用英文逗号分隔。正则里需要逗号时,请切换到 JSON 文本。","Separate several values with commas":"多个值用逗号分隔","Serve multiple users or teams with billing and quota control.":"为多个用户或团队提供计费和配额管理服务。","Server Address":"服务器地址","Server IP":"服务器 IP","Server Log Management":"服务器日志管理","Server logging is not enabled (log directory not configured)":"服务器日志功能未启用(未配置日志目录)","Server Token":"服务器 Token","Service account JSON file(s)":"服务账号 JSON 文件","Session":"会话","Session behavior":"会话保持","Session behavior prevents switching channels":"会话保持设置阻止切换渠道","Session defaults":"会话默认设置","Session expired!":"会话已过期!","Session expired?":"会话已过期?","Session rule":"会话规则","Session rule matched":"命中会话规则","Session rules":"会话规则","Session rules table":"会话规则表格","Session signed out":"已退出此会话","Sessions & Access":"会话与访问","Sign in to bind an account":"绑定操作需要登录","Sessions and retries":"会话与重试","Set":"设置","Set a discount rate for a specific recharge amount threshold.":"为特定的充值金额阈值设置折扣率。","Set a secure password (min. 8 characters)":"设置安全密码(最少 8 个字符)","Set a tag for":"设置标签为","Set API key access restrictions":"设置令牌的访问限制","Set API key basic information":"设置令牌的基本信息","Set default ranges and charts for model analytics.":"设置模型分析的默认时间范围和图表。","Set Field":"设置字段","Set filters to customize your dashboard statistics and charts.":"设置筛选器以自定义您的仪表板统计数据和图表。","Set filters to narrow down your log search results.":"设置筛选器以缩小日志搜索结果范围。","Set Header":"设请求头","Set Password":"设置密码","Set prices for each set of conditions below. Cost = usage × unit price + additional charge. Token prices are per million tokens.":"为下方不同条件分别填写价格。费用 = 用量 × 单价 + 加收费用;Token 单价按每百万 Token 填写。","Set prices for each set of conditions below. Cost = usage × unit price + fixed fee. Token prices are per million tokens.":"为下方不同条件分别填写价格。费用 = 用量 × 单价 + 固定费用;Token 单价按每百万 Token 填写。","Set Project to io.cloud when creating/selecting key":"创建/选择密钥时将项目设置为 io.cloud","Set quota amount and limits":"设置令牌可用额度和数量","Set Request Header":"设置请求头","Set runtime request header: override entire value, or manipulate comma-separated tokens":"设置运行期请求头:可直接覆盖整条值,也可对逗号分隔的 token 做处理","Set separate prices for cache reads and writes.":"为缓存读取和写入设置单独价格。","Set separately for this provider":"为此服务方单独设置","Set Tag":"设置标签","Set tag for selected channels":"为选定的渠道设置标签","Set the language used across the interface":"设置界面显示语言","Set the user\'s role (cannot be Root)":"设置用户角色(不能是 Root)","Set the website where users will use their Passkeys.":"请填写用户使用通行密钥的网站域名。","Set these values in the provider application before enabling login.":"启用登录前,请先在提供商应用中设置这些值。","Set up model redirects":"设置模型重定向","Set up redirect":"设置重定向","Setting Key":"配置项","Setting saved":"设置已保存","Size {{size}}":"大小 {{size}}","Setting up 2FA...":"正在设置 2FA...","Setting updated successfully":"设置更新成功","Settings":"设置","Settings & Preferences":"设置与偏好","Settings updated successfully":"设置更新成功","Setup expired. Scan the new QR code and save the new backup codes.":"设置已过期,请扫描新的二维码并保存新的备用码。","Setup guide":"设置引导","Setup guide complete":"设置引导已完成","Setup guide is collapsed. Expand it anytime.":"设置引导已收起,可随时展开。","Setup Instructions":"设置说明","Setup progress: {{completed}}/{{total}}":"设置进度:{{completed}}/{{total}}","Setup Two-Factor Authentication":"设置双重身份验证","Setup: three groups and one override matrix cell.":"配置:三个分组和一个覆盖矩阵单元格。","Setup: three groups and one override rule.":"配置:三个分组和一条覆盖规则。","SGLang":"SGLang","SMTP server is not configured":"SMTP 服务器未配置","SGLang API key, or EMPTY if authentication is disabled":"SGLang API 密钥,未启用认证时填 EMPTY","SGLang channel base URL cannot be empty":"SGLang 渠道的服务地址不能为空","SGLang server address, without /v1":"SGLang 服务地址,不含 /v1","SGLang status":"SGLang 状态","Some files could not be deleted ({{failed}}/{{total}})":"部分文件删除失败({{failed}}/{{total}})","Share":"占比","Share your link and earn rewards":"分享您的链接并赚取奖励","Shared configuration for all payment gateways":"所有支付网关的共享配置","Shorten":"缩词","Show":"显示","Show All":"显示全部","Show all providers including unbound":"显示所有提供商(包括未绑定)","Show all tags":"查看全部标签","Show in model catalog":"在模型目录展示","Show in model square":"在模型广场显示","Show only bound providers":"仅显示已绑定的提供商","Show or hide flow columns":"显示或隐藏分流列","Show preview":"显示预览","Show prices in currency instead of quota.":"以货币而非配额显示价格。","Show selected models in model square":"在模型广场显示所选模型","Show sensitive data":"显示敏感数据","Show setup guide":"显示设置引导","Show source":"显示源码","Show token usage statistics in the UI":"在用户界面中显示令牌使用统计信息","Showcase core capabilities with demo credentials and limited access.":"使用演示凭据和有限访问权限展示核心功能。","Showing":"显示第","Showing {{shown}} of {{total}} mappings":"显示 {{shown}} / {{total}} 条映射","showing •":"显示 •","Showing the last successfully checked release.":"当前显示上次成功检查的发布信息。","Shown":"显示","Shown {{count}} models in model square":"已在模型广场显示 {{count}} 个模型","Sidebar":"侧边栏","Sidebar collapsed by default for new users":"默认情况下为新用户折叠侧边栏","Sidebar modules":"侧边栏模块","Sidebar Personal Settings":"左侧边栏个人设置","Sign in":"登录","Sign In":"登录","Sign in now":"立即登录","Sign in required":"需要登录","Sign in with Passkey":"使用 Passkey 登录","Sign out":"登出","Sign out other sessions":"退出其他会话","Sign out other sessions?":"退出其他会话?","Sign out others":"退出其他会话","Sign out this device?":"退出当前设备?","Sign up":"注册","Signed in":"已登录","Signed in successfully!":"登录成功!","Signed in via WeChat":"通过微信登录","Signed in with Passkey":"使用 Passkey 登录","Signed out":"已登出","Significant outages detected":"检测到较为严重的故障","Signing you in with {{provider}}":"正在使用 {{provider}} 登录","SiliconFlow":"SiliconFlow","Simple":"简洁","Simple mode only returns message; status code and error type use system defaults.":"简洁模式仅返回 message;状态码和错误类型将使用系统默认值。","Simple mode: prune objects by type, e.g. redacted_thinking.":"简洁模式:按 type 全量清理对象,例如 redacted_thinking。","Simulate a request including request rules and excluding group multipliers. Empty objects represent an empty request.":"模拟费用包含请求规则,不含分组倍率。空对象表示没有相应字段的请求。","Simulated request body":"模拟请求体","Simulated request cost":"模拟请求费用","Simulated request headers":"模拟请求头","Sort by priority to drag channels":"按优先级排序后可拖拽渠道","Sort channels by":"渠道排序依据","State parameter is empty or mismatched":"state 参数为空或不匹配","Simulation context is missing.":"缺少模拟所需的上下文。","Simulation time":"模拟时间","Since previous sample":"自上次采样以来","Single .js file, up to 8 MiB. Its source is shown below before upload.":"单个 .js 文件,最大 8 MiB。上传前会在下方显示其源码。","Single Key":"单密钥","Site & Branding":"站点与品牌","Site currency ({{currency}})":"站点货币({{currency}})","Site Key":"站点密钥","Site URL":"网站地址","Size:":"大小:","sk_xxx or rk_xxx":"sk_xxx 或 rk_xxx","Skip async task polling delay":"跳过异步任务轮询延迟","Skip pre-consumption when the wallet balance and limited API key balance both exceed this amount. Set to 0 to always pre-consume. Subscriptions and asynchronous tasks always reserve quota.":"钱包余额和有限额的 API 令牌余额都超过此金额时,跳过预扣。设为 0 则始终预扣。订阅和异步任务始终预留额度。","Skip retry on failure":"失败后不重试","Skip SMTP TLS certificate verification":"跳过 SMTP TLS 证书验证","Skip to Main":"跳到主内容","Skip Upstream TLS Verification":"忽略上游证书校验","Slug":"标识符","Slug can only contain letters, numbers, hyphens, and underscores":"Slug 只能包含字母、数字、连字符和下划线","Slug is required":"Slug 不能为空","Slug must be less than 100 characters":"Slug 不能超过 100 个字符","Smallest USD amount users can recharge (Epay)":"用户可以充值的最小美元金额 (Epay)","SMTP encryption":"SMTP 加密方式","SMTP Host":"SMTP 主机","smtp.example.com":"smtp.example.com","socks5://user:pass@host:port":"socks5://user:pass@host:port","Soft Errors":"软错误","Some channels failed: {{errorMsg}}":"部分渠道失败:{{errorMsg}}","Some matching models are hidden or have no available channel.":"部分匹配模型已隐藏或暂无可用渠道。","Some plugin information could not be read":"部分插件信息无法读取","Something went wrong!":"出现错误!","Sonnet Model":"Sonnet 模型","Sora":"Sora","Sort":"排序","Sort by ID":"使用 ID 排序","Sort Order":"排序","Sort priority":"排序优先级","Source":"来源","Source diff":"源码差异","Source Endpoint":"来源端点","Source Field":"来源字段","Source Header":"来源请求头","Source ID":"来源 ID","Source name":"源名称","Source vendors":"来源供应商","Source vendors will be deleted after their model assignments are moved. The target vendor’s details are preserved.":"模型归属转移后将删除来源供应商。目标供应商的资料保持原值。","Source: global settings. Changes take effect after saving.":"来源:全局设置。修改后保存生效。","sources":"来源","Space-separated OAuth scopes":"以空格分隔的OAuth作用域","Spark model version, e.g., v2.1 (version number in API URL)":"Spark 模型版本,例如 v2.1(API URL 中的版本号)","Spec":"规格","Special billing expression":"特殊计费表达式","Stripe is not configured or key is invalid":"Stripe 未配置或密钥无效","Special group":"特殊分组","Stripe webhook is not configured":"Stripe Webhook 未配置","Special ratio rules":"特殊倍率规则","StripePriceId is not configured for this plan":"该套餐未配置 StripePriceId","Special ratios override the token group ratio for specific user group and token group combinations.":"特殊倍率会针对特定用户分组和令牌分组组合覆盖令牌分组倍率。","Special usable group rules":"特殊可用分组规则","Special usable group rules can add, remove, or append selectable token groups for a specific user group.":"特殊可用分组规则可以为特定用户分组添加、移除或追加可选令牌分组。","Special usable group rules make extra token groups visible to, or hide default ones from, users of a specific user group.":"特殊可用分组规则可以让特定用户分组的用户额外看到某些令牌分组,或对其屏蔽默认可选的令牌分组。","Special visibility rules":"特殊可见性规则","Specified time":"指定时间","Speculative decoding acceptance rate":"推测解码接受率","Spend limited":"消费受限","Spread HTTP/2 traffic across multiple reusable connections to the same upstream origin (1-8).":"将 HTTP/2 流量分散到同一上游源站的多条可复用连接(1-8)。","SQLite stores all data in a single file. Make sure that file is persisted when running in containers.":"SQLite 将所有数据存储在单个文件中。在容器中运行时请确保该文件已持久化。","SSL/TLS":"SSL/TLS","SSRF Protection":"SSRF 保护","stale":"失联","Standard":"标准","Standard price":"标准价格","Standard protocol interfaces":"标准协议接口","Start":"开始","Start ≤ end: within the day; start > end: across midnight":"开始 ≤ 结束为当日区间,开始 > 结束为跨零点区间","Subscription plan is not enabled":"套餐未启用","Subscription plan title cannot be empty":"套餐标题不能为空","Start a conversation to see messages here":"开始对话以在此处查看消息","Start a playground chat":"开始一场游乐场对话","Start again":"重新开始","Subscription purchased with balance, plan: {{plan}}, payment amount: {{amount}}, quota deducted: {{quota}}":"使用余额购买订阅成功,套餐: {{plan}},支付金额: {{amount}},扣除额度: {{quota}}","Subscription purchased, plan: {{plan}}, payment amount: {{amount}}, payment method: {{method}}":"订阅购买成功,套餐: {{plan}},支付金额: {{amount}},支付方式: {{method}}","Start collecting payments globally without registering a company. Built for indie developers, OPC sole proprietorships, and startups. Waffo Pancake acts as your Merchant of Record, taking on the compliance burden of global payment collection — consumption tax, invoicing, subscription management, refunds, and chargebacks. Solo developers can launch fast and stay focused on product instead of compliance. Onboard in minutes — one prompt to a full integration.":"无需注册公司即可开始全球收款。面向独立开发者、OPC 个体经营者和初创团队构建。Waffo Pancake 作为你的登记商户(Merchant of Record),承担全球收款相关的合规负担,包括消费税、开票、订阅管理、退款和拒付。个人开发者可以快速上线,专注产品而不是合规事务。几分钟即可完成入驻,从一个提示词到完整集成。","Start for free with generous limits. No credit card required.":"免费开始使用,额度充足,无需绑定信用卡。","Start SGLang with --enable-metrics to expose Prometheus metrics.":"启动 SGLang 时添加 --enable-metrics 以启用 Prometheus 指标。","Start Time":"起始时间","Start weekday":"起始星期","Started":"启动时间","Started two-factor authentication setup":"开始设置两步验证","STARTTLS":"STARTTLS","State changed":"状态已变更","State unchanged: {{status}}":"状态未变化:{{status}}","Static page describing the platform.":"描述平台的静态页面。","Statistical count":"统计计数","Statistical quota":"统计配额","Statistical tokens":"统计 Token 数","Statistics reset":"统计已重置","Status":"状态","Status & Sync":"状态与同步","Status change":"状态变化","Status Code":"状态码","Status Code Mapping":"状态码映射","Status code mapping must use valid HTTP status codes":"状态码映射必须使用有效的 HTTP 状态码","Status is outside the retry rules":"状态码未命中重试规则","Status matches the retry rules":"状态码命中重试规则","Status Page Slug":"状态页面 Slug","Status short":"状态","Status:":"状态:","Stay":"留下来","Stay tuned though!":"敬请期待!","Steer behaviour with a system instruction":"通过系统指令引导模型行为","Step":"步骤","Step {{current}} of {{total}}: {{label}}":"第 {{current}} 步,共 {{total}} 步:{{label}}","Still pending addition":"仍待新增","Still pending removal":"仍待移除","Stop":"停止","Stop Retry":"停止重试","Stop testing":"停止测试","Stopping batch test...":"正在停止批量测试...","Stopping...":"正在停止...","Storage":"存储","Store":"店铺","Store + product created":"店铺和产品已创建","Store ID":"商店 ID","Store ID is required":"商店 ID 为必填项","Stored configuration with effective defaults":"已保存的配置及生效默认值","Stored value is not echoed back for security":"出于安全考虑,已存储的值不会回显","stream":"流","Stream":"流","Stream did not complete successfully":"流式输出未成功完成","Stream Mode":"流式模式","Stream Status":"流状态","Stream tokens incrementally as they are generated":"在生成过程中按 token 逐步流式返回","Stream tokens via Server-Sent Events":"通过 SSE 流式返回 token","Streaming":"流式输出","String Replace":"字符串替换","Strip {{affix}}":"去掉 {{affix}}","Strip prefix":"去掉前缀","Strip suffix":"去掉后缀","Stripe":"Stripe","Stripe API key (leave blank unless updating)":"Stripe API 密钥(除非更新,否则留空)","Stripe Dashboard":"Stripe 控制面板","Stripe Gateway":"Stripe 网关","Stripe product price ID":"Stripe 产品价格 ID","Stripe/Creem requires creating products on the third-party platform and entering the ID":"Stripe/Creem 需在第三方平台创建商品并填入 ID","Structured output":"结构化输出","Submit":"提交","Submit directly":"直接提交","Submit request":"提交请求","Submit Result":"提交结果","Submit Time":"提交时间","Submitted":"已提交","Submitting":"提交中","Submitting...":"提交中...","Submodel":"Submodel","Subscribe Now":"立即订阅","Subscribe to a plan for model access":"订阅套餐以获取模型访问权限","Subscription":"订阅","Subscription Billing":"订阅计费","Subscription First":"优先订阅","Subscription Management":"订阅管理","Subscription Only":"仅用订阅","System error: {{error}}":"系统错误: {{error}}","Subscription plan creation and changes are locked until the administrator confirms compliance terms in Payment Gateway settings.":"管理员在支付网关设置中确认合规条款之前,订阅套餐的创建和修改会被锁定。","Subscription Plans":"订阅套餐","System initialized successfully":"系统初始化成功","Subscription plans do NOT use the bound Product — each plan has its own dedicated Pancake product, set in the Subscriptions admin (or auto-minted via the \\"+ Create\\" button there).":"订阅套餐不会使用已绑定的产品。每个套餐都有独立的 Pancake 产品,可在订阅管理中设置,或通过其中的“+ 创建”按钮自动生成。","Subscription purchased successfully":"订阅购买成功","Subscriptions":"订阅","Subtract":"减少","succeeded":"已成功","Success":"成功","Success rate":"成功率","Success rate excludes business rejections and includes the current partial hour.":"成功率排除业务拒绝,统计包含当前尚未结束的小时。","Successful scheduled or bulk checks can restore automatically disabled channels. Manually disabled channels stay disabled.":"定时或批量检查成功后,可恢复被自动停用的渠道;人工停用的渠道保持停用。","Successfully created {{count}} API Key(s)":"成功创建了 {{count}} 个 API 密钥","Successfully created {{count}} redemption codes":"成功创建了 {{count}} 个兑换码","Successfully deleted {{count}} API key(s)":"成功删除了 {{count}} 个 API 密钥","Successfully deleted {{count}} invalid redemption codes":"已成功删除 {{count}} 个无效兑换码","Successfully deleted {{count}} model(s)":"成功删除 {{count}} 个模型","Successfully deleted {{count}} redemption codes":"成功删除 {{count}} 个兑换码","Successfully disabled {{count}} model(s)":"成功禁用 {{count}} 个模型","Successfully enabled {{count}} model(s)":"成功启用 {{count}} 个模型","Suffix":"后缀","Suffix Match":"后缀匹配","Suggested rules":"建议规则","Summarize text":"总结文本","SunoAPI":"SunoAPI","Sunset Glow":"日落霞光","Super admin":"超级管理员","Super Admin":"超级管理员","Tag cannot be empty":"标签不能为空","Super Large":"超大","Support for high concurrency with automatic load balancing":"支持高并发和自动负载均衡","Supported Applications":"常用应用支持","Supported endpoints":"支持的端点","Supported Imagine Models":"支持的 Imagine 模型","Supported interfaces":"支持的接口","Supported modalities":"支持的模态","Supported models":"支持的模型","Supported operators: eq, ne, gt, gte, lt, lte, in, not_in, contains, not_contains, exists, not_exists. Leave empty to allow all users.":"支持的操作符:eq、ne、gt、gte、lt、lte、in、not_in、contains、not_contains、exists、not_exists。留空则允许所有用户。","Supported parameters":"支持的参数","Supported variables":"支持变量","Supports `-thinking`, `-thinking-":"支持 `-thinking`、`-thinking-`","Supports HTML markup or iframe embedding. Enter HTML code directly, or provide a complete URL to automatically embed it as an iframe.":"支持 HTML 标记或 iframe 嵌入。直接输入 HTML 代码,或提供完整的 URL 以将其自动嵌入为 iframe。","Supports one-click configuration and perfectly adapts to NewAPI multi-protocol configuration.":"支持一键配置并完美适配 NewAPI 多协议配置","Supports plugin extensions":"支持插件扩展","Supports PNG, JPG, SVG, or WebP. Recommended size: 128×128 or smaller.":"支持 PNG、JPG、SVG 或 WebP,建议尺寸不超过 128×128。","Surprise me":"给我惊喜","Sustained tokens per second":"持续每秒 Token 数","Swap Face":"换脸","Switch affinity on success":"成功后切换亲和","Switch to JSON":"切换到 JSON","Switch to Visual":"切换到可视化","Switch to visual editor":"切换到可视化编辑","Switch to visual mode to add rules or apply templates.":"切换到可视化模式后,可添加规则或填充模板。","Switch to visual pricing?":"切换到可视化定价?","Switching regenerates the expression from the price table and replaces its original formatting and tier names. Changes apply only after saving.":"切换后将根据价格表重新生成表达式,替换原始写法和档位名称。更改将在保存后生效。","Sync":"同步","Sync Endpoint":"同步端点","Sync Endpoints":"同步端点","Sync Fields":"字段同步","Sync from the public upstream metadata repository.":"从公共上游元数据仓库同步。","Sync metadata":"同步资料","Sync missing metadata":"同步缺失资料","Sync model metadata":"同步模型资料","Sync model pricing":"同步模型定价","Sync models":"同步模型","Sync Now":"立即同步","Task timed out":"任务超时","Task timed out (a task left by the old system is not refunded; contact the administrator)":"任务超时(旧系统遗留任务,不进行退款,请联系管理员)","Sync policy":"同步策略","Sync pricing":"同步价格","Sync results":"同步结果","Sync scope":"同步范围","Sync steps":"同步步骤","Sync this model with official upstream":"将此模型与官方上游同步","Sync Upstream":"同步上游","Sync Upstream Models":"同步上游模型","Synced upstream models":"同步上游模型","Synchronize models and vendors from an upstream source":"从上游源同步模型和供应商","Synchronous":"同步执行","Telegram ID is empty!":"Telegram ID 为空!","Syncing prices, please wait...":"正在同步价格,请稍候...","Syncing...":"同步中...","System":"系统","System Administration":"系统管理","System Announcements":"系统公告","System Behavior":"系统行为","System constraint":"系统约束","System data statistics":"系统数据统计","System default":"系统默认","System Info":"系统信息","System Information":"系统信息","System initialized successfully! Redirecting…":"系统初始化成功!正在重定向…","System logo":"系统徽标","System maintenance":"系统维护","System Memory":"系统内存","System Memory Stats":"系统内存统计","System Name":"系统名称","System name is required":"系统名称为必填项","System Notice":"系统公告","System Performance Monitoring":"系统性能监控","System prompt":"系统提示词","System Prompt":"系统提示词","System Prompt Concatenation":"系统提示词连接","System Prompt Override":"系统提示覆盖","System retry exclusion":"系统禁止重试的情况","System settings":"系统设置","System Settings":"系统设置","System setup wizard":"系统设置向导","System task records":"系统任务记录","System Tasks":"系统任务","System updates":"系统更新","System updates, current version: {{version}}":"系统更新,当前版本:{{version}}","System Version":"系统版本","Table view":"表格视图","Tag":"标签","Tag Aggregate":"标签聚合","Tag Mode":"标签模式","Tag Name":"标签名称","Tag set successfully":"标签设置成功","Tag updated successfully":"标签更新成功","The access token lacks the required permission: {{scope}}":"访问令牌缺少所需权限:{{scope}}","Tag:":"标签:","Tags":"标签","Take photo":"拍照","Take screenshot":"截图","Target":"操作对象","Target Endpoint":"目标端点","Target Field":"目标字段","Target Field Path":"目标字段路径","Target group":"目标分组","Target Header":"目标请求头","Target not recorded":"目标未记录","Target Path (optional)":"目标路径(可选)","Target User":"目标用户","Target user not found":"目标用户不存在","Target username":"目标用户名","Target vendor":"目标供应商","The Classic frontend has been removed. The theme can only be set to default":"Classic 前端已移除,主题只能设置为 default","Task":"任务","Task billing":"任务计费","The current sign-in method does not support security verification":"当前认证方式不支持安全验证","Task Details":"任务详情","Task failed":"任务失败","Task History":"历史任务","Task ID":"任务 ID","Task ID:":"任务 ID:","Task logs":"任务日志","Task Logs":"任务日志","Task Plugin":"任务插件","Task plugin *":"任务插件 *","Task plugin setting updated":"任务插件设置已更新","Task plugins":"任务插件","Task Plugins":"任务插件","The longest log time range must be at least 1 day":"日志最长时间范围至少为 1 天","The longest time range a user can view at once in the logs and on the dashboard, and the longest range any export can cover.":"用户在日志和数据看板中一次最多能查看的时间范围,也是每次导出的最长时间范围。","Task pricing":"任务定价","Task pricing must be converted manually using the task usage schema.":"任务定价需根据任务用量定义手动转换。","Task pricing not configured":"尚未配置任务定价","Task usage data is required to estimate this expression. Check the model\'s task plugin configuration.":"此表达式需要任务用量数据才能估算费用,请检查模型的任务插件配置。","Task usage metadata is unavailable. Pricing details cannot be displayed.":"缺少任务用量字段定义,暂时无法展示价格明细。","Task usage prices are USD per declared unit. They are not token prices and are not divided by one million.":"任务用量价格以每个已声明单位的美元金额计价,不是 token 价格,也不会除以一百万。","Task usage prices are USD per declared unit. Token fields use dollars per 1M tokens; the editor writes / 1000000 into the expression. Other units are not divided by one million.":"任务用量价格按声明单位以美元计。token 字段按每 100 万 token 的美元价输入,编辑器会在表达式中写入 / 1000000。其他单位不会除以一百万。","Tasks currently pending or running.":"当前等待中或运行中的任务。","Team Collaboration":"团队协作","The ratio config API is not enabled":"倍率配置接口未启用","Technical Support":"技术支持","Telegram":"Telegram","Telegram authorization failed. Please try again.":"Telegram 授权失败,请重试。","The search pattern can contain at most 2 % wildcards":"搜索模式中最多允许包含 2 个 % 通配符","The search pattern cannot contain consecutive % wildcards":"搜索模式中不允许包含连续的 % 通配符","Telegram binding failed. Please try again.":"Telegram 绑定失败,请重试。","Telegram binding is disabled.":"Telegram 绑定已禁用。","Telegram login has changed. Reload the page and start Telegram OAuth again.":"Telegram 登录方式已更新,请刷新页面并重新发起 Telegram OAuth 登录。","Telegram Login Widget":"Telegram 登录小部件","Telegram OAuth Client ID from BotFather":"BotFather 提供的 Telegram OAuth Client ID","Telegram OAuth Client Secret from BotFather":"BotFather 提供的 Telegram OAuth Client Secret","Telegram OAuth is not configured or enabled. Please contact your administrator.":"Telegram OAuth 尚未配置或启用,请联系管理员。","Temperature":"温度","Template":"模板","The system is already initialized":"系统已经初始化完成","Template variables:":"模板变量:","Templates":"模板","Templates appended":"模板已追加","The time range cannot exceed {{days}} days":"时间跨度不能超过 {{days}} 天","Tencent":"腾讯","Termination requested":"终止请求","Test":"测试","Test {{count}} matching models":"测试 {{count}} 个匹配模型","Test {{count}} selected":"测试 {{count}} 个已选择项","Test a model with a starter prompt, or write your own request below.":"使用入门提示词测试模型,或在下方编写自己的请求。","Test all {{count}} models":"测试全部 {{count}} 个模型","Test All Channels":"测试所有渠道","Test Channel Connection":"测试渠道连接","Test channels, refresh balances, and enable/disable individual, batch, or tagged channels.":"测试渠道、刷新余额,并启用/禁用单个、批量或带标签的渠道。","Test Connection":"测试连接","Test connectivity for:":"测试连接性:","Test failed":"测试失败","Test interval (minutes)":"测试间隔 (分钟)","Test Latency":"测试延迟","Test Mode":"测试模式","Test Model":"测试模型","Test models and prompts from the browser":"在浏览器中测试模型和提示词","Test selected models":"测试所选模型","Testing all enabled channels started. Please refresh to see results.":"测试所有启用的渠道已开始。请刷新以查看结果。","Testing...":"测试中...","Text":"文本","Text description of the desired image":"想要生成图像的文字描述","Text description of the desired video":"想要生成视频的文字描述","Text Input":"文字输入","Text or array of texts to embed":"需要向量化的文本或文本数组","Text Output":"文字输出","Text to Video":"文生视频","Text-only requests":"纯文本请求","The access token lacks the required permission":"访问令牌缺少所需权限","The action details are invalid.":"操作信息无效。","The admin configured three groups and one special ratio rule:":"管理员配置了三个分组和一条特殊倍率规则:","The admin wants vip users to pay even less when they use premium. That needs an override rule: in the override matrix, set the cell at row vip, column premium to 0.3.":"管理员希望 vip 用户使用 premium 时价格更低。这就需要一条覆盖规则:在覆盖矩阵中,把「行 vip、列 premium」的单元格填成 0.3。","The administrator account is already initialized. You can keep your existing credentials and continue to the next step.":"管理员账户已初始化。您可以保留现有凭据并继续下一步。","The administrator configured an external link for this document.":"管理员为此文档配置了外部链接。","The administrator has not configured a privacy policy yet.":"管理员尚未配置隐私政策。","The administrator has not configured a user agreement yet.":"管理员尚未配置用户协议。","The administrator has not configured any about content yet. You can set it in the settings page, supporting HTML or URL.":"管理员尚未配置任何关于内容。您可以在设置页面中进行设置,支持 HTML 或 URL。","The API key used for the requests":"请求所使用的 API 密钥","The authenticator code is incorrect.":"认证器验证码错误。","The binding will complete automatically after authorization":"授权后绑定将自动完成","This API is deprecated":"该接口已废弃","The bound Product powers wallet top-ups: when a user enters any amount, new-api runs the checkout against this single Pancake product and overrides the price per session — no need to pre-create $1 / $5 / $10 SKUs.":"已绑定产品用于钱包充值:当用户输入任意金额时,new-api 会基于这个单一 Pancake 产品发起结账,并按会话覆盖价格,无需预先创建 $1 / $5 / $10 的 SKU。","The bound Store is the parent container for every Pancake product new-api creates from this admin — both the wallet top-up product and any subscription-plan products. One store is enough; pin a different one only if you genuinely run separate Pancake catalogs.":"已绑定店铺是 new-api 从此管理端创建的所有 Pancake 产品的父容器,包括钱包充值产品和订阅套餐产品。一个店铺通常足够;只有在确实运营多个 Pancake 目录时才需要绑定不同店铺。","The button fills in this website and keeps any existing website addresses. Save changes on the settings page to apply.":"点击按钮会填入当前网站,并保留已有的网站地址。回到设置页保存后生效。","The change succeeded, but the notification email could not be sent.":"变更已完成,但通知邮件发送失败。","The changelog could not be fetched or parsed. Please try again.":"无法获取或解析更新日志,请重试。","The converted price must be a finite, non-negative number.":"换算后的价格必须是有限的非负数。","The current setting could not be loaded. You can still enter the website domain yourself.":"暂时无法读取当前设置,你仍可以手动填写网站域名。","The deployment node that handled the requests":"处理请求的部署节点","This channel is not in multi-key mode":"该渠道不是多密钥模式","The downloaded source does not match the sha256 declared in the index. Do not install it.":"下载到的源码与索引声明的 sha256 不一致,请勿安装。","The effective domain for Passkey registration. Must match the current domain or be its parent domain.":"用于 Passkey 注册的有效域。必须与当前域匹配或为其父域。","The entered text does not match the required text.":"输入文本与要求文本不匹配。","The environment (test vs production) is decided by the key you paste here — use the Test key while integrating, then swap to the Production key when going live.":"环境(测试或生产)由你在此粘贴的密钥决定。集成期间使用测试密钥,上线时再切换为生产密钥。","The exact model identifier as used in API requests.":"API 请求中使用的确切模型标识符。","The following models have billing type conflicts (fixed price vs ratio billing). Confirm to proceed with the changes.":"以下模型存在计费类型冲突(固定价格 vs 比例计费)。确认以继续更改。","The following models in the model redirect have not been added to the \\"Models\\" list and may fail during invocation due to missing available models:":"模型重定向里的下列模型尚未添加到\\"模型\\"列表,调用时会因为缺少可用模型而失败:","The gateway rejected this plugin":"网关拒绝了该插件","The index could not be fetched or parsed: {{message}}. The host may block cross-origin requests.":"索引无法拉取或解析:{{message}}。该主机可能禁止跨域请求。","The legacy token stops working on {{date}}. Create a new token to replace it.":"旧版令牌将于 {{date}} 停用,请创建新令牌替换。","The login session that started this Telegram binding is no longer valid.":"发起此 Telegram 绑定的登录会话已失效。","The mapped upstream model(s)":"映射的上游模型","The model routing configuration could not be verified.":"无法验证模型路由配置。","The model that was requested":"被请求的模型","The model you\'re looking for doesn\'t exist.":"您查找的模型不存在。","The model-level expression cannot be evaluated by: {{plugins}}":"以下服务方无法计算模型级表达式:{{plugins}}","The name displayed across the application":"在整个应用程序中显示的名称","The new token will only be shown once. Copy it and store it securely.":"新令牌仅显示一次。请复制并妥善保存。","The OAuth account does not match the account linked to your profile.":"此 OAuth 账号与已绑定的账号不一致。","The public URL of your server, used for OAuth callbacks, webhooks, and other external integrations":"服务器的公开URL,用于OAuth回调、Webhook和其他外部集成","The requested chat preset does not exist or has been removed.":"请求的聊天预设不存在或已被删除。","The reset request stays disabled until a credit is available.":"没有可用次数时,重置请求会保持禁用。","The result was returned in the API response and was not saved as an artifact":"结果已在接口响应中返回,未保存为制品","The server returned the following result. Unselected models remain pending.":"以下为服务器返回的处理结果,未勾选的模型仍保留为待处理项。","The setup wizard will use this database during initialization.":"设置向导将在初始化过程中使用此数据库。","The site exchange rate is invalid. Prices are shown in USD.":"站点汇率无效,价格以美元显示。","The site is not available at the moment.":"该站点目前不可用。","The slug is appended to the URL:":"别名将附加到 URL:","The source is unavailable or this browser cannot calculate SHA-256. The gateway checks the published hash during installation.":"源码尚不可用,或浏览器无法计算 SHA-256。安装时网关会核对发布的校验值。","The sync will fetch missing models and vendors from the selected source. Existing records are updated only when you approve conflicts.":"同步将从选定的源获取缺失的模型和供应商。仅在您批准冲突时才会更新现有记录。","The system always bills in USD. Site currency makes entering and converting prices easier; amounts are converted to USD using the site exchange rate. Switching currencies does not change the actual price. Raw billing expressions always use USD.":"系统底层统一使用美元计价。选择站点货币是为了方便输入和换算,金额会按站点汇率转换为美元。切换货币不会改变实际价格;原始计费表达式始终使用美元。","The system currently uses: {{domain}}":"系统目前使用:{{domain}}","The task was accepted; submission cannot be replayed":"任务已接受,不能重复提交","The Telegram authorization request is invalid or expired.":"Telegram 授权请求无效或已过期。","The telegram OAuth provider name is reserved. Ask your administrator to rename the conflicting custom provider.":"telegram 是保留的 OAuth 提供方名称,请联系管理员重命名冲突的自定义提供方。","The token group that will have a custom ratio":"将具有自定义比例的令牌分组","The token has no group, so it is billed as the user group vip, using the base ratio of vip.":"令牌未设置分组,因此按用户分组 vip 计费,使用 vip 的基础倍率。","The two roles of a group":"分组的两种角色","The two-factor setup has expired or changed. Start setup again.":"两步验证设置已过期或变更,请重新设置。","The unique identifier for this model":"此模型的唯一标识符","This OAuth provider still has linked users and cannot be deleted. Unbind all users first.":"该 OAuth 提供商还有用户绑定,无法删除。请先解除所有用户绑定。","The unique name for this vendor":"此供应商的唯一名称","The upstream address this plugin sends requests to. The plugin declares no default, so it must be filled in.":"插件发送请求的上游地址。该插件未声明默认地址,必须手动填写。","The upstream channel that served the requests":"处理请求的上游渠道","The upstream key has unlimited quota. Turn on \\"Allow querying user quota\\" for this key on the upstream to see the real balance.":"上游令牌是无限额度,在上游为这个令牌开启“允许查询用户额度”后才能查到真实余额。","The upstream natively supports all three protocols; every selected route is forwarded without conversion.":"上游原生支持三种协议,所选路由均不经转换直接转发。","The upstream response is valid JSON, but it does not match the OpenAI credit_summary format. The channel balance was not updated.":"上游响应是有效 JSON,但不符合 OpenAI credit_summary 格式,渠道余额未更新。","The upstream returned a model name different from both the requested and upstream models. Aliases or dated versions may also cause this; this warning alone does not prove model substitution.":"上游返回的模型名与请求模型、上游请求模型均不一致。模型别名或日期版本也可能导致差异,不能仅凭此警示认定模型被替换。","The URL for this chat client.":"此聊天客户端的 URL。","The URL returned HTTP {{status}}. Check the address, or download the file and paste its source below.":"该 URL 返回 HTTP {{status}}。请检查地址,或下载文件后将源码粘贴到下方。","The user group applied to the requests":"请求所应用的用户分组","The user who made the requests":"发起请求的用户","The vendor no longer exists. Reload the vendor list.":"供应商已不存在,请重新加载供应商列表。","Theme":"主题","Theme preset":"主题预设","Theme Settings":"主题设置","There are both add and remove models pending, but you only selected one type. Confirm submitting only the selected items?":"当前有新增和删除两类待处理模型,但您只勾选了其中一类。确认仅提交已勾选的部分吗?","This rule does not have include_rule_name enabled, so its cache cannot be cleared by rule":"该规则未启用 include_rule_name,无法按规则清空缓存","There is a rule for vip billed as premium → use its ratio 0.3":"存在「vip 按 premium 计费」的规则 → 用规则里的 0.3","These models are still in your selection but were not returned by the upstream listing. Entries that are only model_mapping source aliases are omitted. Toggle to adjust before saving.":"这些模型仍然在您的勾选列表中,但上游已不再返回该名称;仅作为 model_mapping 来源键而不会出现在 upstream 列表的别名已从本视图排除,请在保存前调整勾选。","This slug conflicts with a built-in OAuth provider":"该 Slug 与内置 OAuth 提供商冲突","This slug is already in use":"该 Slug 已被使用","These models were not returned by the upstream. Uncheck to remove them, or select them again before saving. Model mapping source aliases are excluded.":"上游未返回这些模型。取消勾选可将其移除,保存前仍可重新勾选。模型映射的来源别名不会显示在此列表中。","These plugins use this channel\'s connection settings.":"这些插件使用当前渠道的连接配置。","These toggles affect whether certain request fields are passed through to the upstream provider.":"这些开关控制某些请求字段是否透传到上游服务。","These values come from the source index and are shown for review only. The gateway admits the plugin based on the metadata compiled from its source.":"这些值来自源索引,仅供审查参考。网关的准入判定只依据从源码编译出的真实元数据。","Thinking Suffix Adapter":"思考后缀适配器","Thinking to Content":"思维到内容","Thinking...":"思考中...","Third-party":"第三方","Third-party — use at your own risk":"第三方 — 风险自担","Third-party account bindings (read-only, managed by user in profile settings)":"第三方账户绑定(只读,由用户在个人资料设置中管理)","Third-party account bindings (read-only, managed by user in Security & Access)":"第三方账户绑定(只读,由用户在“安全与访问”中管理)","This user has no active subscription to this plan":"该用户没有有效的此套餐订阅","Third-party Payment Config":"第三方支付配置","This user is already a common user":"该用户已经是普通用户","This user is already an administrator":"该用户已经是管理员","Third-party plugin risk":"第三方插件风险","Third-party source risk":"第三方源风险","Third-party-only plugins become unavailable immediately. In-flight tasks will be handled by timeout cleanup.":"纯第三方插件将立即不可用,在途任务将由超时清理处理。","This action cannot be undone.":"此操作无法撤消。","This action cannot be undone. This will permanently delete your account and remove all your data from our servers.":"此操作无法撤消。这将永久删除您的账户并从我们的服务器中移除您的所有数据。","This action will permanently remove 2FA protection from your account.":"此操作将永久移除您账户的 2FA 保护。","This announcement will be removed from the list.":"此公告将从列表中移除。","This API key has no quota limit. Requests still require available wallet or subscription quota.":"此令牌不限额,请求仍受钱包余额或订阅额度约束。","This API shortcut will be removed from the list.":"此 API 快捷方式将从列表中移除。","This base URL points at a private or local network host. Make sure it is an upstream you control.":"该 Base URL 指向内网或本机地址,请确认这是你可控的上游服务。","This base URL uses plain HTTP, so the channel key is sent unencrypted.":"该 Base URL 使用明文 HTTP,渠道密钥将以未加密方式发送。","This callback URL updates from the slug field and is the value to register with your provider.":"此回调 URL 会根据 slug 字段实时更新,请将它注册到你的提供商。","This changelog is not available in your language. Showing English.":"此更新日志暂无当前语言版本,现显示英文。","This channel has no configured models.":"该渠道没有配置模型。","This channel is not an Ollama channel.":"该渠道不是 Ollama 渠道。","This channel serves the models of every selected plugin. The upstream New API gateway must have the same plugins installed.":"此渠道将提供所选每个插件的模型。上游 New API 网关必须安装相同的插件。","This channel type does not support fetching models":"此渠道类型不支持获取模型","This channel type requires additional configuration":"此渠道类型需要填写额外配置","This combination will be billed as free.":"此组合将免费计费。","This confirmation unlocks payment, redemption code, subscription plan, and invitation reward features. Please read the statements carefully.":"此确认会解锁支付、兑换码、订阅套餐和邀请奖励功能。请仔细阅读相关声明。","This controls model request rate limiting. Web/API route throttling is configured by environment variables and may still return 429.":"此处仅控制模型请求速率限制。Web/API 路由限流由环境变量配置,仍可能返回 429。","This data may be unreliable, use with caution":"此数据可能不可靠,请谨慎使用","This device does not support Passkey":"此设备不支持 Passkey","This device does not support Passkey verification.":"此设备不支持 Passkey 验证。","This domain does not match the current website. Passkeys may not work here.":"这个域名与当前网站不匹配,可能无法使用通行密钥。","This email address is already in use.":"此邮箱地址已被使用。","This {{provider}} account cannot be linked to an existing account automatically, please sign in or register another way and then link {{provider}} in account settings":"无法自动将该 {{provider}} 账户关联到现有账户,请使用其他方式登录或注册后,在账户设置中绑定 {{provider}}","This {{provider}} account has already been bound":"该 {{provider}} 账户已被绑定","This email address is not allowed by the administrator\'s email policy.":"此邮箱地址不符合管理员设置的邮箱规则。","This expression cannot be edited visually without losing information.":"此表达式无法无损转换为可视化编辑。","This expression cannot be expanded into a price table. View the original expression below.":"此表达式暂不支持展开为价格表,可查看下方原始表达式。","This expression cannot be represented by the price table. Switching discards the entire expression, including request rules, and resets all prices to zero. Configure prices before saving.":"价格表无法表示此表达式。切换后将丢弃整个表达式(包括请求规则),并将所有价格重置为零。请重新配置价格后再保存。","This expression cannot be represented by the price table. You can switch to visual editing by confirming that the expression will be discarded.":"价格表无法表示此表达式。确认丢弃表达式后,仍可切换到可视化编辑。","This expression cannot be simulated in the browser.":"此表达式无法在浏览器中模拟。","This expression does not price each combination exactly once, so it opens as a raw expression. Sparse or custom pricing stays in this editor.":"此表达式未对每种组合恰好定价一次,因此将以原始表达式模式打开。稀疏或自定义定价会保留在此编辑器中。","This expression exceeds the browser simulation limits.":"此表达式超出了浏览器模拟的限制。","This expression is too complex for the visual editor. Please switch to expression mode to edit.":"此表达式对可视化编辑器过于复杂,请切换到表达式模式进行编辑。","This external account is already bound.":"此第三方账户已被绑定。","This FAQ entry will be removed from the list.":"此 FAQ 条目将从列表中移除。","This feature is experimental. Configuration format and behavior may change.":"此功能为实验性功能。配置格式和行为可能会发生变化。","This feature requires signing in to the dashboard":"此功能需要登录面板后使用","This field does not support wildcards or regular expressions.":"这里不支持通配符或正则表达式。","This historical record predates audit-info tracking and cannot be backfilled. The current instance already records server IP, callback IP, payment method, and system version for new top-ups going forward.":"该条历史记录缺少审计字段。当前版本已支持记录服务器 IP、回调 IP、支付方式与系统版本等审计信息;这些字段仅会写入后续新产生的记录,历史记录无法自动补齐。","This identifier is sent to the payment backend when creating an order. Use alipay for Alipay, wxpay for WeChat Pay, stripe for Stripe. Custom values must be supported by your payment provider.":"创建订单时会把这个标识提交给支付后端。支付宝填 alipay,微信填 wxpay,Stripe 填 stripe。自定义值必须是支付服务支持的标识。","This instance is using an automatic hostname. Set NODE_NAME to a stable unique value for multi-instance management.":"该实例正在使用自动主机名。请设置稳定且唯一的 NODE_NAME,以便进行多实例管理。","This is a task model billed by usage (e.g. seconds, resolution). Prices entered here act as a per-call base rate, not per-token prices.":"这是一个按用量(例如秒数、分辨率)计费的任务模型。此处输入的价格会作为每次调用的基础费率,而不是按 token 计价。","This list does not include the current website. Add {{origin}} if users sign in here.":"列表中还没有当前网站。如果用户在这里登录,请添加 {{origin}}。","This may cause cache failures.":"这可能导致缓存故障。","This may take a few moments while we validate the request and update your session.":"这可能需要一些时间,因为我们正在验证请求并更新您的会话。","This model already uses an expression.":"此模型已使用计费表达式。","This model has both fixed price and ratio billing conflicts":"此模型同时存在固定价格和比例计费冲突","This model has both fixed-price and ratio settings. Saving the current mode will rewrite the conflicting fields.":"该模型同时存在固定价格和比例设置。保存当前模式会重写冲突字段。","This model has both fixed-price and token-price settings. Saving the current mode will rewrite the conflicting fields.":"该模型同时存在固定价格和按 token 价格设置。保存当前模式会重写冲突字段。","This model has provider-specific billing and must be converted manually.":"此模型使用供应商专用计费逻辑,需手动转换。","This model is billed by usage, but the administrator has not configured its pricing yet.":"此模型按用量计费,但管理员尚未配置价格。","This model is not available in any group, or no group pricing information is configured.":"此模型在任何分组中均不可用,或未配置分组定价信息。","This month":"本月获得","This OpenRouter Claude price derives cache-write usage from upstream cost and must be converted manually.":"此 OpenRouter Claude 定价根据上游费用反推缓存写入用量,需要手动转换。","This operation is only supported for vLLM channels":"此操作仅支持 vLLM 渠道","This operation is only supported for vLLM or SGLang channels":"此操作仅支持 vLLM 或 SGLang 渠道","This page has not been created yet.":"此页面尚未创建。","This Passkey domain is not available on this website. Use its original website or another verification method.":"此通行密钥域名无法在当前网站使用。请前往原网站或选择其他验证方式。","This plan does not allow balance redemption":"该套餐不允许使用余额兑换","This plugin has no factory fallback. Deleting or disabling it makes this platform unavailable.":"此插件没有出厂回落版本,删除或禁用后该平台将不可用。","This plugin path does not resolve within the source repository.":"该插件路径未指向源仓库内的位置。","This preview reads static plugin declarations. The gateway validates the plugin during installation.":"此预览读取插件的静态声明,安装时由网关校验插件。","This project must be used in compliance with the":"此项目的使用必须遵守","This provider is unavailable for this model.":"此服务方当前无法提供该模型。","This removes {{count}} failed models from this channel. This action cannot be undone.":"此操作将从该渠道移除 {{count}} 个测试失败的模型,且无法撤销。","This route discovers upstream OpenAI models and cannot be split or matched by client model rules.":"此路由用于发现上游 OpenAI 模型,不能拆分或使用客户端模型规则匹配。","This route is used only by channel management to discover upstream models.":"此路由仅供渠道管理获取上游模型。","This route is used only by channel management to query the upstream balance.":"此路由仅供渠道管理查询上游余额。","This session will lose access immediately and must sign in again.":"此会话将立即失去访问权限,并且必须重新登录。","This site currently has {{count}} models enabled":"本站当前已启用模型,总计 {{count}} 个","This source does not publish a sha256 for this version, so the downloaded source cannot be pinned to what the source intended.":"该源未为此版本提供 sha256,因此无法确认下载到的源码与该源所发布的内容一致。","This source lists no installable task plugins.":"该源未列出任何可安装的任务插件。","This Telegram account is already bound.":"此 Telegram 账户已被绑定。","This Telegram account is not linked. Sign in using another method and link it first.":"此 Telegram 账号尚未绑定,请先通过其他方式登录并绑定。","This Telegram binding request has expired or has already been used.":"此 Telegram 绑定请求已过期或已使用。","This tier catches any request that did not match earlier tiers.":"此阶梯会兜底处理未匹配前面阶梯的请求。","this token group":"此令牌分组","This Uptime Kuma group will be removed from the list.":"此 Uptime Kuma 分组将从列表中移除。","This user account is disabled.":"此用户账户已被禁用。","This user account no longer exists.":"此用户账户已不存在。","this user group":"此用户分组","Token count exceeds the limit. Only exact search is allowed, do not use the % wildcard":"令牌数量超过上限,仅允许精确搜索,请勿使用 % 通配符","This user has no bindings":"该用户无任何绑定","This verification has already been used. Please verify again.":"此验证凭证已使用,请重新验证。","This verification method is currently unavailable.":"此验证方式当前不可用。","This verification method is not allowed for this action.":"此操作不允许使用该验证方式。","Token has expired and cannot be enabled. Please modify the expiration time or set it to never expire":"令牌已过期,无法启用,请先修改令牌过期时间,或者设置为永不过期","This verification method requires its dedicated verification flow.":"此验证方式需要通过专用验证流程完成。","This version is ignored":"已忽略此版本","Token ID or user ID is empty":"令牌 ID 或用户 ID 为空","This version is saved but not active. Activate it to replace the current version, or activate it later from the Versions tab.":"此版本已保存但尚未激活。激活后将替换当前版本,也可以稍后在插件详情的“版本”页中激活。","Token IDs cannot be empty":"令牌 ID 不能为空","This week":"本周","This will append 2 template rules (Codex CLI and Claude CLI) to the existing rule list.":"这将在现有规则列表中追加 2 条模板规则(Codex CLI 和 Claude CLI)。","This will clear custom pricing ratios and revert to upstream defaults.":"这将清除自定义定价比例并恢复到上游默认值。","This will delete all":"这将删除所有","This will delete all used, disabled, and expired redemption codes.":"这将删除所有已使用、已禁用和已过期的兑换码。","This will delete all channel affinity cache entries still in memory.":"这将删除内存中所有的渠道亲和性缓存条目。","Token name is too long":"令牌名称过长","This will delete temporary cache files that have not been used for more than 10 minutes":"这将删除超过 10 分钟未使用的临时缓存文件","This will extend the deployment by the specified hours.":"这将通过指定的小时数延长部署。","This will permanently delete all manually and automatically disabled channels. This action cannot be undone.":"这将永久删除所有手动禁用和自动禁用的渠道。此操作无法撤销。","This will permanently delete API key":"这将永久删除 API 密钥","This will permanently delete redemption code":"这将永久删除兑换码","This will permanently delete user":"这将永久删除用户","This will permanently remove all log entries created before {{date}}.":"这将永久删除 {{date}} 之前创建的所有日志条目。","This will permanently remove log entries before the selected timestamp.":"这将永久删除所选时间戳之前的日志条目。","This will rebuild the channel routing index from every channel configuration, including supported models, groups, priorities, and weights. Routing may be briefly incomplete while the rebuild is running. Continue?":"这会根据所有渠道配置重建渠道路由索引,包括支持模型、分组、优先级和权重。重建期间路由可能短暂不完整。是否继续?","Token quota is exhausted and cannot be enabled. Please modify the remaining quota or set it to unlimited":"令牌可用额度已用尽,无法启用,请先修改令牌剩余额度,或者设置为无限额度","This will remove {{removed}} forwarding routes and create {{created}} selected routes. Model list and balance routes will be preserved.":"将删除 {{removed}} 条转发路由并创建 {{created}} 条所选路由。模型列表和余额路由会保留。","This will remove {{removed}} forwarding routes and replace them with the {{template}} template ({{created}} routes). Model list and balance routes will be preserved.":"这将移除 {{removed}} 条转发路由,并替换为 {{template}} 模板({{created}} 条路由)。模型列表和余额路由将保留。","This will update the priority to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"这会将标签 \\"{{tag}}\\" 下所有 {{count}} 个渠道的优先级更新为 {{value}}。继续吗?","This will update the weight to {{value}} for all {{count}} channel(s) with tag \\"{{tag}}\\". Continue?":"这会将标签 \\"{{tag}}\\" 下所有 {{count}} 个渠道的权重更新为 {{value}}。继续吗?","This year":"本年","Thought for {{duration}} seconds":"思考了 {{duration}} 秒","Three calls made by the same user, whose user group is vip:":"同一个用户(用户分组为 vip)发起的三次调用:","Three calls made by the same vip user. Assume the base price of one call is 10.":"同一个 vip 用户发起三次调用,假设模型单次调用基础价格为 10:","Three groups; the override matrix has exactly one cell filled in (highlighted).":"三个分组;覆盖矩阵只填了一个格子(高亮显示)。","Three steps to get started":"三步快速上手","Throughput":"吞吐量","Throughput by group":"各分组吞吐量","Throughput short":"吞吐","Throughput trend":"吞吐量趋势","Tier":"档位","Tier billing mode":"分支计费方式","Tier conditions":"阶梯条件","Tier name":"档位名称","Tiered":"阶梯","Tiered (billing expression)":"阶梯计费(计费表达式)","Tiered price table":"分档价格表","Tiered pricing":"阶梯计费","tiers":"档","Too many items in batch request, maximum is {{max}}":"批量请求数量过多,最多 {{max}} 条","Time":"时间","Time between scheduled channel checks":"定时渠道检查的执行间隔","Time functions use the timezone written in the expression.":"时间函数使用表达式中指定的时区。","Time Granularity":"时间粒度","Tool price \\"{{name}}\\" must be a finite non-negative number":"工具价格 \\"{{name}}\\" 必须是有限的非负数字","Tool price \\"{{name}}\\" must be a non-negative number":"工具价格 \\"{{name}}\\" 必须是非负数字","Time range":"时间范围","Time remaining":"剩余时间","Tool prices must be a JSON object":"工具价格必须是 JSON 对象","Time window for rate limiting":"速率限制的时间窗口","Time-based":"含时间条件","Time-sliced cache (Claude)":"分时缓存(Claude)","Time:":"时间:","Timeline":"时间线","times":"次","Timezone":"时区","Timing":"耗时","Tip":"提示","Tip: after configuring one model, select others in the table and use bulk copy.":"提示:配置一个模型后,可在表格中选择其他模型并使用批量复制。","to":"至","to access this resource.":"访问此资源。","To Anthropic Messages":"转 Anthropic Messages","to confirm":"以确认","To Gemini Generate Content":"转 Gemini Generate Content","To Lower":"转小写","To Lowercase":"转小写","Top-up amount cannot be less than {{min}}":"充值数量不能小于 {{min}}","Top-up amount cannot exceed {{max}}":"充值数量不能大于 {{max}}","To OpenAI Chat":"转 OpenAI Chat","To OpenAI Responses":"转 OpenAI Responses","to override billing when a user in one group uses a token of another group.":"当一个分组中的用户使用另一个分组的令牌时,用于覆盖计费。","Top-up is processing, please try again later":"充值处理中,请稍后重试","to the Models list so users can use them before the mapping sends traffic upstream.":"到模型列表,以便用户在映射将流量发送到上游之前可以使用它们。","Top-up order does not exist":"充值订单不存在","Top-up quota exceeds the range the system can represent":"充值额度超出系统可表示范围","Top-up quota limit exceeded":"超出充值额度上限","Top-up quota must be greater than 0":"充值额度必须大于 0","To Upper":"转大写","To Uppercase":"转大写","Topped up {{quota}} with a redemption code, code ID {{id}}":"通过兑换码充值 {{quota}},兑换码ID {{id}}","to view this resource.":"查看此资源。","Today":"今天","Toggle columns":"切换列","Toggle navigation menu":"切换导航菜单","Toggle plan":"切换计划","Toggle theme":"切换主题","token":"令牌","Token":"令牌","token (unit)":"token","Token Breakdown":"Token 明细","Token Endpoint":"令牌端点","Token Endpoint (Optional)":"Token 端点(可选)","Token estimator":"Token 估算器","Token group":"令牌分组","Token has no group":"令牌未设置分组","Token ID":"令牌 ID","Token identifier":"令牌标识","Total quota cannot be negative":"总额度不能为负数","Token Limits":"令牌限制","Token management":"令牌管理","Token Management":"令牌管理","Token Mgmt":"令牌管理","Token name":"令牌名称","Token Name":"令牌名称","Token obtained from your Gotify application":"从您的 Gotify 应用程序获取的 Token","Token operation details":"令牌操作详情","Token or per-call pricing":"按 token 或按次计费","Token price for audio input.":"音频输入 token 价格。","Token price for audio output.":"音频输出 token 价格。","Token price for cache reads.":"缓存读取 token 价格。","Token price for creating cache entries.":"创建缓存条目的 token 价格。","Token price for image input.":"图像输入 token 价格。","Token prices":"Token 价格","Token regenerated and copied to clipboard":"令牌已重新生成并复制到剪贴板","Token scope":"令牌范围","Token share by model author across the last 24 hours":"过去 24 小时内各厂商的 Token 占比","Token share by model author across the past few weeks":"最近几周内各厂商的 Token 占比","Token share by model author across the past month":"过去一个月内各厂商的 Token 占比","Token share by model author across the past year":"过去一年内各厂商的 Token 占比","Transfer failed {{error}}":"划转失败 {{error}}","Token share by model author since launch":"自上线以来各厂商的 Token 占比","Token unit":"Token 单位","Token usage by model since launch":"自上线以来各模型的 Token 用量","Token-based":"按量计费","Tokenizer":"分词器","tokens":"Token","Tokens":"Token","tokens / mo":"token / 月","Tokens by category":"分类 Token 占比","Tokens Only":"仅限 Token","Tokens per minute":"每分钟 Token 数","Tokens since launch":"发布以来累计 Token","Tokens_usage":"Token","Tokens-only mode will show raw quota values regardless of this toggle.":"Tokens-only 模式将无视此开关显示原始配额值。","Too many active login sessions. On a device where you are already signed in, open Login sessions and use “Sign out other sessions” to revoke them. If you cannot access a signed-in device, reset your password to sign out all sessions.":"活跃登录会话数量已达上限。请在一台已登录的设备上打开“登录会话”,使用“退出其他登录会话”将其撤销。如果无法访问任何已登录设备,请重置密码以退出所有会话。","Too many files. Some were not added.":"文件过多。部分未添加。","Too many incorrect codes. Start email verification again.":"验证码错误次数过多,请重新开始邮箱验证。","Too many login sessions were created recently. Please wait for the rolling window to pass, then try again.":"近期创建的登录会话过多。请等待滚动时间窗口结束后再试。","Too many requests":"请求过于频繁","Tool / function declarations the model may call":"模型可调用的工具 / 函数声明","Tool identifier":"工具标识","Tool price settings":"工具价格设置","Tool prices":"工具价格","Tool-choice policy or specific tool name":"工具选择策略或具体工具名","Tools":"工具","Top {{count}}":"前 {{count}}","Turnstile token is empty":"Turnstile token 为空","Turnstile verification failed, please refresh and try again!":"Turnstile 校验失败,请刷新重试!","Top app":"领头应用","Top apps":"热门应用","Top Apps":"热门应用","Top integrations using this model":"使用此模型的主要集成","Top model":"领头模型","Top models":"热门模型","Top Models":"热门模型","Top models by traffic":"流量最高的模型","Top P":"Top P","Top up balance and view billing history.":"充值余额并查看账单历史。","Top up, pay for subscriptions, check in, and transfer referral rewards.":"充值、支付订阅、签到和划转邀请奖励。","Top Users":"热门用户","Top vendors":"热门厂商","Top-up":"充值","Top-up amount options":"充值金额选项","Top-up Audit Info":"充值审计信息","Top-up group ratios":"充值分组比例","Top-Up Link":"充值链接","top-up ratio":"充值倍率","Top-up ratio":"充值倍率","Topup Amount":"充值金额","Total":"总计","Unable to connect to {{provider}} server, please try again later":"无法连接至 {{provider}} 服务器,请稍后重试","Unable to create the Passkey credential":"无法创建 Passkey 凭证","Total {{count}} records":"共 {{count}} 条记录","Total = used + remaining. It is not an initial allocation or a periodic budget; changing the remaining quota changes the total and percentage.":"总额度 = 已用 + 剩余,并非初始额度或周期预算。修改剩余额度会改变总额度和已用比例。","Total Allocated":"总分配","Total attempt budget exhausted":"整次尝试次数已耗尽","Total check-ins":"累计签到","Total consumed":"总消耗","Total consumed quota":"总消耗额度","Total cost":"总成本","Total Cost":"总费用","Total Count":"总数","Total earned":"累计获得","Total Earned":"总收入","Total GPUs":"总 GPU","Unauthorized, insufficient privileges":"无权进行此操作,权限不足","Unauthorized, invalid access token":"无权进行此操作,access token 无效","Unauthorized, invalid user info":"无权进行此操作,用户信息无效","Unauthorized, not logged in and no access token provided":"无权进行此操作,未登录且未提供 access token","Unauthorized, the access token has expired":"访问令牌已过期","Total invitation revenue":"总邀请收入","Total Log Size":"日志总大小","Total Quota":"总额度","Unbound successfully":"解绑成功","Total quota included in the plan, usable per billing period. 0 means unlimited.":"套餐包含的总额度,每个计费周期可用;0 表示不限量","Total requests allowed per period. 0 = unlimited.":"每周期允许的总请求数。0 = 无限制。","Total requests made":"总请求数","Total Revenue":"累计收益","Total time":"总耗时","Total tokens":"总 Token","Total Tokens":"总 Token 数","Total Usage":"总用量","Total Used":"累计已用","Total:":"总计:","TPM":"TPM","Track per-request consumption to power usage analytics. Keeping this on increases database writes.":"跟踪每个请求的消耗,以支持使用情况分析。保持开启会增加数据库写入。","Track usage, costs and performance with real-time analytics":"通过实时分析跟踪用量、成本和性能","Tracked apps":"已跟踪的应用","Tracks current account base limits and additional metered usage on Codex upstream.":"跟踪当前账号在 Codex 上游的基础限额与附加计费用量。","Trading insights, accounting, advisory":"交易洞察、记账与财务建议","Traditional Chinese":"繁体中文","Transfer":"转移","Undo":"撤销","Unknown OAuth provider":"未知的 OAuth 提供商","Unknown rule name":"未知规则名称","Unknown setting type: {{type}}":"未知的设置类型:{{type}}","Transfer Amount":"转移金额","Transfer failed":"转账失败","Transfer Rewards":"转移奖励","Transfer successful":"转账成功","Transfer to Balance":"转移到余额","Translation":"翻译","Transparent Billing":"透明计费","Trend":"趋势","Trending down":"下降趋势","Unsupported add mode":"不支持的添加模式","Unsupported operation":"不支持的操作","Unsupported payment channel":"不支持的支付渠道","Unsupported payment method":"不支持的支付方式","Trending up":"上升趋势","Triggered garbage collection":"触发垃圾回收","Trim leading/trailing whitespace":"去掉字符串头尾空白","Trim Prefix":"裁剪前缀","Trim Space":"去掉空白","Trim Suffix":"裁剪后缀","Truncate embeddings to this many dimensions":"将向量截断到指定维度","Trusted":"受信任","Try adjusting your search":"请尝试调整搜索条件","Try adjusting your search to locate a missing model.":"尝试调整您的搜索以找到缺失的模型。","TTFT P50":"TTFT P50","TTFT P95":"TTFT P95","TTFT P99":"TTFT P99","TTFT percentiles, throughput, and 30-day uptime by group":"各分组的 TTFT 分位数、吞吐量与 30 天可用率","TTL":"TTL","TTL (seconds, 0 = default)":"TTL(秒,0 表示默认)","TTL (seconds)":"TTL(秒)","Tune selection priority, testing, status handling, and request overrides.":"调整选择优先级、测试、状态处理和请求覆盖。","Turnstile is enabled but site key is empty.":"Turnstile 已启用但站点密钥为空。","Tutoring, learning aids, assessment":"辅导、学习辅助与测评","Two-factor Authentication":"双重身份验证","Two-Factor Authentication":"两步验证","Two-factor authentication disabled":"两因素认证已禁用","Two-factor authentication enabled successfully!":"两步验证已成功启用!","Two-factor authentication is already enabled.":"两步验证已启用。","Two-factor authentication is not enabled.":"两步验证尚未启用。","Two-factor authentication is temporarily locked.":"两步验证已暂时锁定。","Two-factor authentication reset":"两因素认证已重置","Two-Step Verification":"两步验证","Update successful":"更新成功","Type":"类型","Type (common)":"类型(常用)","Type *":"类型 *","Type to confirm":"输入 以确认","Type a command or search...":"输入命令或搜索...","Type the confirmation text here":"在此输入确认文本","Type-Specific Settings":"特定类型设置","Type:":"类型:","UI granularity only — data is still aggregated hourly":"仅 UI 粒度 — 数据仍按小时汇总","Unable to build Passkey assertion":"无法生成 Passkey 断言","Unable to compare versions":"无法比较版本","Unable to confirm the update result":"无法确认更新结果","Unable to estimate price for this deployment.":"无法为该部署估算价格。","Unable to generate chat link. Please contact your administrator.":"无法生成聊天链接。请联系您的管理员。","Unable to load groups":"无法加载分组","Unable to load login sessions":"无法加载登录会话","Unable to load rankings":"无法加载排行榜","Unable to load rankings data":"无法加载排行榜数据","Unable to open chat":"无法打开聊天","Unable to parse Passkey login options from response":"无法解析响应中的 Passkey 登录选项","Unable to parse structured pricing":"无法解析为结构化价格","Unable to prepare chat link. Please ensure you have an enabled API key.":"无法准备聊天链接。请确保您有一个已启用的 API 密钥。","Unable to read clipboard":"无法读取剪贴板","Unauthorized":"未授权","Unauthorized Access":"未经授权的访问","Unavailable":"无法展示","Unbind":"解绑","Unbind failed":"解绑失败","Unbound {{provider}}":"已解绑 {{provider}}","Unchanged":"不变","Underflow":"下溢","Underground":"暗夜","Understand how user groups, token groups, ratios, and special rules work together.":"了解用户分组、令牌分组、倍率和特殊规则如何共同生效。","Upgrade group does not exist":"升级分组不存在","Understand image inputs alongside text":"在文本之外理解图像输入","Unexpected release payload":"意外的版本数据格式","Unified API Gateway for":"统一 API 网关,服务于","Unique identifier for this group.":"此组的唯一标识符。","unit":"次","Unit":"单位","Unit price (local currency / USD)":"单价(本地货币 / USD)","Unit price (USD)":"单价 (USD)","Unit price must be greater than 0":"单价必须大于 0","Unit price: {{field}}":"{{field}} 单价","Units per USD":"每 USD 单位数","Unknown":"未知","Unknown device":"未知设备","Unknown version":"未知版本","Unlimited":"无限制","Unlimited Quota":"无限配额","Unrecognized status code":"无法识别的状态码","Unsaved changes":"未保存的更改","Unset legacy prices use the billing engine defaults.":"未设置的旧模式价格使用计费引擎的默认值。","Unset price":"未设置价格","Unset price models":"未设置价格模型","Unsupported account password hashing configuration.":"账户密码哈希配置不受支持。","Unsupported verification method: {{method}}":"不支持的验证方式:{{method}}","Until":"至","Untitled":"未命名","Untrusted upstream data:":"不受信任的上游数据:","Unused":"未使用","Up to 4 strings that stop generation":"最多 4 个停止生成的字符串","Up to date":"已是最新","Update":"更新","Update All Balances":"更新所有余额","Update API Key":"更新 API 密钥","Update API token":"更新 API 令牌","Update API token “{{name}}”":"更新 API 令牌「{{name}}」","Update available":"可更新","Update Balance":"更新余额","Update balance for:":"更新余额:","Update Channel":"更新渠道","Update channel configuration and click save when you\'re done.":"更新渠道配置,完成后点击保存。","Update check timed out. Try again.":"检查更新超时,请重试。","Update completed":"更新完成","Update configuration":"更新配置","Update failed":"更新失败","Update Model":"更新模型","Update model configuration and click save when you\'re done.":"更新模型配置,完成后点击保存。","Update plan info":"更新套餐信息","Update Provider":"更新提供商","Update Redemption Code":"更新兑换码","Update results":"更新结果","Update selected fields":"更新所选字段","Upstream returned no usage":"上游无计费信息","Upstream returned no usage, so nothing was charged (possibly an upstream timeout)":"上游没有返回计费信息,无法扣费(可能是上游超时)","Update succeeded":"更新成功","Update the API key by providing necessary info.":"通过提供必要信息更新 New API 密钥。","Upstream task not found":"上游找不到这个任务","Update the configuration for this custom OAuth provider.":"更新此自定义OAuth提供商的配置。","Upstream task timed out (over 1 hour)":"上游任务超时(超过1小时)","Update the redemption code by providing necessary info.":"通过提供必要信息更新兑换码。","Update the reusable bundle below.":"更新下面的可重用捆绑包。","Update the session binding after a successful switch":"切换成功后更新会话绑定","Update the user by providing necessary info.":"通过提供必要信息更新用户。","Update vendor information for {{name}}":"更新 {{name}} 的供应商信息","Update your password for account:":"更新账户密码:","Update your password to keep your account secure":"更新您的密码以确保账户安全","Updated":"更新时间","Updated {{models}} model assignments and deleted {{vendors}} vendor records.":"已更新 {{models}} 条模型归属,删除 {{vendors}} 条供应商记录。","Uptime Kuma groups cannot exceed 20 entries":"Uptime Kuma分组数量不能超过20个","Updated a custom OAuth provider":"更新了一个自定义 OAuth 提供方","Updated a deployment":"更新了一个部署","Updated a model":"更新了一个模型","Updated a prefill group":"更新了一个预填组","Updated a redemption code":"更新了一个兑换码","URL must start with http:// or https://":"URL 必须以 http:// 或 https:// 开头","Updated a subscription plan":"更新了一个订阅计划","Updated a vendor":"更新了一个供应商","Updated At":"更新时间","Updated channel {{name}} (ID: {{id}})":"更新渠道 {{name}}(ID: {{id}})","Updated channel status (ID: {{id}})":"更新渠道状态(ID: {{id}})","Updated daily":"每日更新","Updated Passkey domains: removed {{domains}}; affected {{known}}; unknown {{unknown}}":"已更新通行密钥域名:删除 {{domains}};已知受影响 {{known}};归属未知 {{unknown}}","Updated successfully":"更新成功","Updated system setting {{key}}":"修改系统设置 {{key}}","Updated user {{username}} (ID: {{id}})":"更新用户 {{username}}(ID: {{id}})","Updates have not been checked yet.":"尚未检查更新。","Updates with the system":"随系统更新","Updating all channel balances. This may take a while. Please refresh to see results.":"正在更新所有渠道余额。这可能需要一段时间。请刷新以查看结果。","Updating...":"正在更新...","Upgrade {{name}}":"升级 {{name}}","Upgrade and enable":"升级并启用","Upgrade available: v{{installed}} to v{{latest}}":"可升级:v{{installed}} → v{{latest}}","Upgrade Group":"升级分组","Upgrade plaintext SMTP connection with STARTTLS before authentication":"在身份验证前使用 STARTTLS 升级明文 SMTP 连接","Upload":"上传","Upload a JavaScript task platform plugin.":"上传 JavaScript 任务平台插件。","Upload a single service account JSON file":"上传单个服务账号 JSON 文件","Upload a task plugin to add a platform.":"上传任务插件以添加平台。","Upload file":"上传文件","Upload files":"上传文件","Upload multiple JSON files in batch modes":"批量模式下可上传多个 JSON 文件","Upload new plugin version":"上传插件新版本","Upload new version":"上传新版本","Upload or reference a local configuration file.":"上传或引用本地配置文件。","Upload photo":"上传照片","Upload plugin":"上传插件","Upload task plugin":"上传任务插件","Uploading a plugin is an administrator-level trust decision. A plugin can access channel credentials and shape upstream requests. Review its source and diff before activation.":"上传插件属于管理员级信任行为。插件可访问渠道凭据并构造上游请求,请在激活前审查源码及差异。","Uploading...":"上传中...","Upscale":"放大","Upstream":"上游","Upstream authentication":"上游认证方式","Upstream connection":"上游连接","Upstream did not return reset credit details.":"上游未返回重置次数详情。","Upstream JSON response":"上游 JSON 响应","Upstream Model":"上游请求模型","Upstream Model Detection Settings":"检测上游模型设置","Upstream model detection task started. Track progress in System Info, then refresh to review staged updates.":"上游模型检测任务已开始。可在「系统信息」中查看进度,完成后刷新以查看待处理的更新。","Upstream model list":"上游模型列表","Upstream Model Name":"上游模型名称","Upstream Model Update Check":"上游模型更新检查","Upstream Model Updates":"上游模型更新","Upstream model updates applied: {{added}} added, {{removed}} removed, {{ignored}} ignored this time, {{totalIgnored}} total ignored models":"已处理上游模型更新:加入 {{added}} 个,删除 {{removed}} 个,本次忽略 {{ignored}} 个,当前已忽略模型 {{totalIgnored}} 个","Upstream names returned by the provider":"上游返回的模型名","Upstream path":"上游路径","Upstream path is required":"上游路径不能为空","Upstream path must be a full URL or a path starting with /":"上游路径必须是完整 URL,或以 / 开头的路径","Upstream price sync":"上游价格同步","Upstream prices fetched successfully":"已成功获取上游价格","Upstream protocol plan":"上游协议方案","Upstream ratios fetched successfully":"上游比率获取成功","Upstream receives":"上游收到","Upstream request failed":"上游请求失败","Upstream Request ID":"上游请求 ID","Upstream response":"上游响应","Upstream Response":"上游返回","Upstream Response (billing-usage-anthropic-estimated)":"上游返回(billing-usage-anthropic-estimated)","Upstream Response (billing-usage-anthropic)":"上游返回(billing-usage-anthropic)","Upstream Response (billing-usage-gemini-estimated)":"上游返回(billing-usage-gemini-estimated)","Upstream Response (billing-usage-gemini)":"上游返回(billing-usage-gemini)","Upstream Response (billing-usage-openai-estimated)":"上游返回(billing-usage-openai-estimated)","Upstream Response (billing-usage-openai)":"上游返回(billing-usage-openai)","upstream services integrated":"上游服务适配","Upstream Task ID":"上游任务 ID","Upstream task plugins":"上游任务插件","Upstream Updates":"上游更新","Upstream URL":"上游 URL","Upstream URL must be a full URL":"上游 URL 必须是完整 URL","Upstream vendor missing":"上游缺少供应商信息","uptime":"正常运行时间","Uptime":"运行时间","Uptime (30d)":"可用率 (30 天)","Uptime (last 30 days)":"可用率(最近 30 天)","Uptime Kuma":"Uptime Kuma","Uptime Kuma groups saved successfully":"Uptime Kuma 组保存成功","Uptime Kuma URL":"Uptime Kuma URL","Uptime since":"运行时间始于","URL":"URL","URL is required":"URL 为必填项","URL to your logo image (optional)":"您的徽标图片 URL(可选)","Use the same priority as the highlighted channels":"与高亮渠道使用相同优先级","User does not exist":"用户不存在","US dollar (USD)":"美元(USD)","Usage":"用量","Usage · {{price}}":"用量 · {{price}}","Usage at a glance":"用量概览","Usage guide":"使用教程","User group will be reverted to {{group}}":"用户分组将回退到 {{group}}","User group will be upgraded to {{group}}":"用户分组将升级到 {{group}}","Usage logs":"使用日志","Usage Logs":"使用日志","Usage mode":"使用模式","User has been banned":"用户已被封禁","User has been deleted":"用户已注销","Usage parameters":"用量参数","Usage percentage":"已用比例","Usage prices":"用量价格","Usage-based":"基于使用量","Usage-based billing":"按用量计费","Usage-based billing · price not configured":"按用量计费 · 尚未配置价格","USD":"USD","USD Exchange Rate":"美元汇率","USD price per 1M input tokens.":"每 100 万输入 token 的美元价格。","User registration failed or user ID retrieval failed":"用户注册失败或用户ID获取失败","USD price per 1M tokens.":"每 100 万 token 的美元价格。","Use +: to add a group, -: to remove a default selectable group, or no prefix to append a group.":"使用 +: 添加分组,使用 -: 移除默认可选分组,不加前缀则追加分组。","Use 8–128 characters.":"使用 8–128 个字符。","Use a compatible browser or device with biometric authentication or a security key to register a Passkey.":"请使用支持生物识别认证或安全密钥的兼容浏览器或设备来注册通行密钥。","Use a different stable value for each instance, then restart the service.":"每个实例使用不同且稳定的值,然后重启服务。","Use a Passkey from another website":"使用其他网站的通行密钥","Use a path to append it to the channel Base URL, or enter a full URL to override the Base URL for this route.":"填写以 / 开头的路径时会自动拼接渠道 Base URL;填写完整 URL 时,此路由会直接使用该 URL。","Username already exists or has been deleted":"用户名已存在,或已注销","Use access tokens to call the dashboard API from scripts. Each token only has the permissions you select.":"在脚本中调用面板 API 时使用访问令牌。每个令牌只拥有你勾选的权限。","Use an HTTPS domain (or localhost for development) to configure Passkey.":"请通过 HTTPS 域名配置 Passkey;本地开发可使用 localhost。","Username must be {{max}} characters or fewer":"用户名长度不能超过{{max}}个字符","Use authenticator code":"使用验证器代码","Username or password is incorrect, or user has been banned":"用户名或密码错误,或用户已被封禁","Use backup code":"使用备用代码","Use Bearer for all protocols":"所有协议统一使用 Bearer","Use channel type {{type}}":"使用渠道类型 {{type}}","Users can download their own logs from the usage log page. Administrators can always export.":"用户可以在使用日志页面下载自己的日志。管理员始终可以导出。","Use default":"使用默认值","Use disk cache when request body exceeds this size":"请求体超过此大小时使用磁盘缓存","Use exact client model names, separated by commas. Prefixes and wildcards are not supported.":"填写客户端请求里的精确 model 名,多个用英文逗号分隔。不支持前缀或通配符。","Use exact model names such as gpt-4o, or regex rules prefixed with re: such as re:^gemini-.":"可以填写 gpt-4o 这类精确模型名,也可以填写 re:^gemini- 这类以 re: 开头的正则规则。","Use expression pricing when a dependent price is non-zero and its base price is zero.":"基础价格为零而关联价格非零时,请使用表达式定价。","Use external tools to extend capabilities":"通过外部工具扩展能力","Use Mantle for supported Claude models and automatic prompt caching. Keep InvokeModel for older models and Amazon Nova.":"支持的 Claude 模型及自动提示缓存可使用 Mantle。旧模型和 Amazon Nova 请继续使用 InvokeModel。","Use model-level expression":"沿用模型级表达式","Use model-level pricing":"使用模型级价格","Use one available reset credit for this channel. The reset request is sent only after confirmation.":"将为当前渠道使用 1 次可用重置次数。只有确认后才会发送重置请求。","Use one available reset credit to refresh the current Codex usage windows.":"使用 1 次可用重置次数,刷新当前 Codex 用量窗口。","Use OpenAI-compatible Ollama chat API":"使用 Ollama 的 OpenAI 兼容对话接口","Use our unified OpenAI-compatible endpoint in your applications":"在应用中使用我们兼容 OpenAI 的统一接口","Use Passkey or 2FA to confirm your identity before revealing this channel key.":"请使用 Passkey 或双重身份验证确认身份后再查看此渠道密钥。","Use Passkey to sign in without entering your password.":"使用通行密钥登录,无需输入密码。","Use presets or upstream discovery to populate the model list faster.":"使用预设或上游发现来更快填充模型列表。","Use secure connection when sending emails":"发送电子邮件时使用安全连接","Use sidebar shortcut":"使用侧边栏快捷方式","Use the existing token total":"使用现有 token 总长度","Use the full-width table to scan prices, then select a row to edit it here.":"先在表格中快速浏览价格,然后选择一行在这里编辑。","Use the group set on the token. If the token has no group, use the user group. The auto group tries the auto assignment order from top to bottom.":"使用令牌上设置的分组;令牌未设置分组时,使用用户分组。auto 分组会按自动分组顺序从上到下尝试。","Use the group set on the token. If the token has no group, use the user group. The auto group tries the configured groups from top to bottom.":"使用令牌设置的分组;令牌未设置分组时,使用用户分组。auto 分组会按配置顺序从上到下尝试各分组。","Use the pricing group table to manage the ratio and whether the group appears in the token creation dropdown.":"使用定价分组表管理倍率,以及该分组是否出现在创建令牌的下拉框中。","Use this callback URL pattern when registering a custom OAuth provider.":"注册自定义 OAuth 提供商时使用此回调 URL 格式。","Use this token for API authentication":"使用此令牌进行 API 身份验证","Use tier(name, fixed(amount)) for a USD price per request. Group and request multipliers still apply.":"使用 tier(name, fixed(amount)) 设置以美元计价的每次请求价格。分组倍率和请求倍率仍然生效。","Use your Passkey":"使用您的通行密钥","used":"已使用","Used":"已使用","Used {{used}} of {{total}} ({{percent}}%)":"已用 {{used}} / {{total}}({{percent}}%)","Used / Remaining":"已使用 / 剩余","Used amount":"已用","Used as SuccessURL on the new product. You\'ll be prompted to confirm if left blank.":"用作新产品的 SuccessURL。若留空,系统会要求你确认。","Used by route auth templates":"用于路由认证模板","Used for load balancing. Higher weight = more requests":"用于负载均衡。权重越高 = 请求越多","Used in URLs and API routes":"用于URL和API路由","Used Quota":"消耗额度","Used reset credits cannot be restored.":"已使用的重置次数无法恢复。","Used to authenticate with io.net deployment API":"用于 io.net 部署 API 鉴权","Used to authenticate with the worker. Leave blank to keep the existing secret.":"用于与 Worker 进行身份验证。留空以保留现有密钥。","Used to decide the payment flow. Built-in keys include stripe for Stripe and waffo_pancake for Waffo Pancake; other values are sent to Epay as the type parameter.":"用于决定点击后走哪个支付流程。stripe 走 Stripe,waffo_pancake 走 Waffo Pancake;其他值会作为 Epay 的 type 参数提交。","Used when a Task Plugin channel has no API address configured.":"任务插件渠道未填写 API 地址时使用此默认值。","Used:":"已使用:","Verification code is incorrect or has expired":"验证码错误或已过期","User":"用户","User {{id}}":"用户 {{id}}","User Agent":"用户代理","User Agreement":"用户协议","User Analytics":"用户统计","User Consumption Ranking":"用户消耗排行","User Consumption Trend":"用户消耗趋势","User Count":"用户数量","User created successfully":"用户创建成功","User dashboard and quota controls.":"用户仪表板和配额控制。","User deleted successfully":"用户删除成功","User demoted to regular user successfully":"已成功降级为普通用户","User disabled successfully":"用户禁用成功","User enabled successfully":"用户启用成功","User Exclusive Ratio":"专属倍率","User group":"用户分组","User Group":"用户分组","User group name":"用户分组名称","User Group: {{ratio}}x":"用户分组:{{ratio}}x","User groups that can access channels with this tag":"可以访问带有此标签的渠道的用户分组","User groups that can access this channel. ":"可以访问此渠道的用户组。","User ID":"用户 ID","User ID Field":"用户ID字段","User ID:":"用户 ID:","User Info Endpoint":"用户信息端点","User Info Endpoint (Optional)":"用户信息端点(可选)","User Information":"用户信息","User Menu":"用户菜单","User personal functions":"用户个人功能","User promoted to admin successfully":"已成功提升为管理员","User selectable":"用户可选","User Subscription Management":"用户订阅管理","User updated successfully":"用户更新成功","User Verification":"用户验证","User-Agent include (one per line)":"User-Agent include(每行一个)","Username":"用户名","Username confirmation does not match":"用户名确认不匹配","Username Field":"用户名字段","Username or Email":"用户名或电子邮件","Users":"用户","Users call":"用户调用","Users call the model on the left. The platform forwards the request to the upstream model on the right.":"用户调用左侧的模型。平台将请求转发给右侧的上游模型。","Users in {{group}}":"{{group}} 分组的用户","Users must wait for a successful drawing before upscales or variations.":"用户必须等待成功的绘图完成,才能进行放大或变体。","Users of vip, when billed as premium, pay ratio":"vip 分组的用户,按 premium 计费时,倍率用","Vertex AI keys for batch adding cannot be empty":"批量添加 Vertex AI 的密钥不能为空","Users only see groups marked as user selectable. Non-selectable groups can still be assigned by administrators.":"用户只能看到标记为用户可选的分组。不可选分组仍可由管理员分配。","uses":"使用次数","Using built-in or default pricing":"使用内置或默认定价","Using the complete global Auto order ({{count}} groups)":"正在使用完整全局 Auto 顺序({{count}} 个分组)","v{{installed}} is installed but this source does not list it. Installing replaces it with v{{target}}.":"当前已安装 v{{installed}},但该源未列出此版本。安装将把它替换为 v{{target}}。","Validity":"有效期","Validity Period":"有效期","Value":"值","Value (supports JSON or plain text)":"值(支持 JSON 或普通文本)","Value is required":"值为必填项","Value metric":"数值口径","Value must be at least 0":"值必须至少为 0","Value Regex":"Value 正则","variable":"变量","variable)":"变量)","variable) *":"变量) *","Variables":"变量","Vary":"变换","Vary (Strong)":"强变换","Vary (Subtle)":"弱变换","Vast Range of AI Models":"海量 AI 模型","vendor":"供应商","Vendor":"供应商","Vendor created successfully":"供应商已创建","Vendor data changed. Preview again before applying.":"供应商数据已变化,请重新预览后再应用。","Vendor deleted successfully":"供应商删除成功","Vendor details":"供应商资料","Vendor management":"供应商管理","Vendor Name":"供应商名称","Vendor Name *":"供应商名称 *","Vendor name and icon must not exceed 128 characters.":"供应商名称和图标标识均不能超过 128 个字符。","Vendor name is required":"供应商名称不能为空","Vendor updated successfully":"供应商已更新","Vendor:":"供应商:","Vendors":"供应商","Vendors ranked by aggregated token volume":"厂商按聚合 Token 用量排序","Vendors source":"供应商来源","Vendors still have {{count}} linked model records. Transfer or clear their assignments first.":"供应商仍有关联的 {{count}} 条模型记录,请先转移或清除归属。","Verification code":"验证码","Verification Code":"验证码","Verification code must be 6 digits":"验证码必须是 6 位数字","Verification code sent! Please check your email.":"验证码已发送!请检查您的电子邮件。","Verification code updates every 30 seconds.":"验证码每 30 秒更新一次。","Verification does not match this action.":"验证与此操作不匹配。","Verification does not match this action\'s details. Please verify again.":"验证与本次操作的具体内容不匹配,请重新验证。","Verification email could not be sent. Start email verification again.":"验证邮件发送失败,请重新开始邮箱验证。","Verification email sent":"验证邮件已发送","Verification failed":"验证失败","Verification failed. Please try again.":"验证失败,请重试。","Verification flow expired":"验证流程已过期","Verification is not configured properly":"验证未正确配置","Verification method":"验证方式","Verification proof was not returned":"服务端未返回验证凭证","Verification required to reveal the saved key.":"需要验证才能显示已保存的密钥。","Verification scope is missing":"缺少验证范围","Violation fee charged":"已收取违规费用","Verify":"验证","Verify again before retrying this action.":"重试此操作前,请重新验证。","VIP group":"VIP 分组","Verify and Sign In":"验证并登录","Verify routing with Playground or your client":"使用 Playground 或你的客户端验证路由","Verify Setup":"验证设置","Verify to create administrator":"验证后创建管理员","Verify to delete user":"验证后删除用户","Verify to demote user":"验证后降级用户","Verify to disable user":"验证后禁用用户","Verify to enable user":"验证后启用用户","Verify to promote user":"验证后提升用户","Verify to reset 2FA":"验证后重置 2FA","Verify to reset Passkey":"验证后重置 Passkey","Verify to unbind account":"验证后解绑账号","Verify to update user credentials":"验证后更新用户凭据","Verify to view channel key":"验证后查看渠道密钥","Verify upstream pricing":"请核实上游价格","Verify your database connection":"验证数据库连接","Verify your identity to finish signing in.":"请验证身份以完成登录。","Verifying credentials and pulling stores from your Pancake account...":"正在验证凭证并从你的 Pancake 账户拉取店铺...","Verifying your {{provider}} account":"正在验证 {{provider}} 账号","Version":"版本","Version differences":"版本差异","Version history":"版本历史","Version Overrides":"版本覆盖","Versions":"版本","Vertex AI":"Vertex AI","Waffo Pancake configuration is incomplete":"Waffo Pancake 配置不完整","Waffo Pancake credentials are not configured":"Waffo Pancake 凭证未配置","Vertex AI API Key mode does not support batch creation":"Vertex AI API Key 模式不支持批量创建","Waffo Pancake is not configured or key is invalid":"Waffo Pancake 未配置或密钥无效","Waffo Pancake is not fully configured. Complete the gateway binding in payment settings first.":"Waffo Pancake 未完成配置,请先在支付设置中完成网关绑定","Vertex AI does not support functionResponse.id. Enable this to remove the field automatically.":"Vertex AI 不支持 functionResponse.id 字段,开启后将自动移除该字段","Vertex AI Key Format":"Vertex AI 密钥格式","Vertex AI Project ID":"Vertex AI 项目 ID","e.g., my-project-123":"例如 my-project-123","Vertex AI service account key must be valid JSON":"Vertex AI 服务账号密钥必须是有效 JSON","Video":"视频","Video length in seconds":"视频时长(秒)","Video pricing must be converted manually.":"视频定价需手动转换。","Video Remix":"视频 Remix","Vidu":"Vidu","Waffo payment is not enabled":"Waffo 支付未启用","View":"查看","View all currently available models":"查看当前可用的所有模型","WaffoPancakeProductId is not configured for this plan":"该套餐未配置 WaffoPancakeProductId","View all top-up records, subscription plans, and user subscriptions.":"查看所有充值记录、订阅套餐和用户订阅。","View all users\' usage logs, statistics, and tasks.":"查看所有用户的使用日志、统计和任务。","View API keys and their settings without the full key.":"查看 API 密钥及其设置,不含完整密钥。","View API token key":"查看 API 令牌密钥","View API token keys in batch":"批量查看 API 令牌密钥","View audit records from user and admin roles. Root records are always excluded.":"查看 user 和 admin 角色的审计记录,始终排除 root 级别记录。","View balance, top-up records, subscriptions, and referral information.":"查看余额、充值记录、订阅和邀请信息。","View changelog source":"查看日志源文件","View channel lists and details without secrets.":"查看不含密钥的渠道列表和详情。","View channel secrets":"查看渠道密钥","View complete API keys.":"查看完整的 API 密钥。","View deployments and price estimates.":"查看部署和价格估算。","View detailed information about this user including balance, usage statistics, and invitation details.":"查看此用户的详细信息,包括余额、使用统计和邀请详情。","View details":"查看详情","View document":"查看文档","View groups and prefill groups.":"查看分组和预填充分组。","View installed task plugins and their settings.":"查看已安装的任务插件及其设置。","View issued reset credits, grant dates, and expiration.":"查看已发放的重置次数、发放日期和到期时间。","View key for API token “{{name}}”":"查看 API 令牌「{{name}}」的密钥","View logs":"查看日志","View mapping":"查看映射","View mode":"视图模式","View model statistics and charts":"查看模型统计和图表","View models":"查看模型","View models and vendors, and preview upstream sync.":"查看模型和供应商,并预览上游同步。","View other accounts\' audit logs":"查看其他账户审计日志","View Passkey, two-factor, and sign-in binding status.":"查看 Passkey、两步验证和登录绑定状态。","View performance, system tasks, and system information.":"查看性能、系统任务和系统信息。","View Pricing":"查看定价","View pricing for {{model}}":"查看 {{model}} 的定价","View redemption codes.":"查看兑换码。","View scope":"查看范围","View system settings, custom OAuth providers, and price sync sources.":"查看系统设置、自定义 OAuth 提供商和价格同步来源。","View the complete details for this":"查看此条","Webhook URL cannot be empty":"Webhook 地址不能为空","View the complete details for this log entry":"查看此日志条目的完整详情","View the complete details for this task":"查看此任务的完整详情","View the complete error message and details":"查看完整错误信息与详情","WeChat ID is empty!":"微信 ID 为空!","View the complete prompt and its English translation":"查看完整提示词及其英文翻译","View the generated image":"查看生成的图片","View users, their sign-in bindings, and permission settings.":"查看用户及其登录绑定和权限设置。","View your profile, groups, and available models.":"查看个人资料、分组和可用模型。","View your topup transaction records and payment history":"查看您的充值交易记录和付款历史","View your usage logs, statistics, tasks, and audit logs.":"查看你的使用日志、统计、任务和审计日志。","Viewed channel key {{name}} (ID: {{id}})":"查看渠道密钥 {{name}}(ID: {{id}})","Violation Code":"违规代码","Violation deduction amount":"违规扣费金额","Violation Fee":"违规扣费","Violation Marker":"违规标记","vip":"vip","VIP users with premium access":"拥有高级访问权限的 VIP 用户","Visible":"可见","Visible only to users with access to the model’s groups.":"仅向有权访问模型所属分组的用户展示。","Vision":"视觉","Vision, image / video, document chat":"视觉理解、图像 / 视频、文档对话","Visit Settings → General and adjust quota options...":"访问设置 → 通用并调整配额选项...","Visitors must authenticate before accessing the pricing directory.":"访客必须先进行身份验证才能访问定价目录。","Visitors must authenticate before accessing the rankings page.":"访客必须先进行身份验证才能访问排行榜页面。","Visual":"可视化","Visual edit":"可视化编辑","Visual editor":"可视化编辑器","Visual Editor":"可视编辑器","Visual indicator color for the API card":"API 卡的可视指示器颜色","Visual Mode":"可视模式","Visual Parameter Override":"可视化参数覆盖","Visual prices use {{currency}} per declared unit; token prices are per 1M tokens. Raw expressions always use USD, with token terms divided by 1000000.":"可视化价格以 {{currency}} 按声明的单位计价;Token 价格按每百万 Token 计价。原始表达式始终使用美元,Token 项除以 1000000。","vLLM":"vLLM","vLLM API key, or EMPTY if authentication is disabled":"vLLM API 密钥,未启用鉴权时填写 EMPTY","vLLM server address, without /v1":"vLLM 服务地址,不包含 /v1","vLLM status":"vLLM 状态","VolcEngine":"火山方舟","vs. previous":"相较上期","Waffo":"Waffo","Waffo Aggregator Gateway":"Waffo 聚合网关","Waffo Pancake Dashboard":"Waffo Pancake 控制台","Waffo Pancake MoR":"Waffo Pancake MoR","Waffo Pancake Payment Gateway":"Waffo Pancake 支付网关","Waffo Pancake product created":"Waffo Pancake 产品已创建","Waffo Pancake product creation failed":"Waffo Pancake 产品创建失败","Waffo Pancake save failed":"Waffo Pancake 保存失败","Waffo Pancake settings saved":"Waffo Pancake 设置已保存","Waffo Payment":"Waffo 支付","Waffo Payment Gateway":"Waffo 支付网关","Waffo Public Key (Production)":"Waffo 公钥(生产)","Waffo Public Key (Sandbox)":"Waffo 公钥(沙盒)","Waiting":"等待中","Waiting for email...":"等待电子邮件...","Waiting for two comparable samples. Counter resets restart the sampling window.":"等待两次可比较的采样,计数重置后将重新开始统计。","Waiting requests":"排队中请求","Wallet":"钱包","Wallet First":"优先钱包","Wallet Management":"钱包管理","Wallet management and personal preferences.":"钱包管理和个人偏好设置。","Wallet Only":"仅用钱包","Wallet pre-consume bypass threshold (USD)":"钱包免预扣门槛(美元)","Wallet quota limit exceeded":"超出钱包额度范围","Warning":"警告","Warning: Base URL should not end with /v1. New API will handle it automatically. This may cause request failures.":"警告:基础 URL 不应以 /v1 结尾。New API 将自动处理它。这可能会导致请求失败。","Warning: Disabling 2FA will make your account less secure.":"警告:禁用双重身份验证将使您的账户安全性降低。","Warning: This action is permanent and irreversible!":"警告:此操作是永久且不可逆的!","We apologize for the inconvenience.":"对于由此造成的不便,我们深表歉意。","We could not load instances.":"无法加载实例信息。","We could not load system tasks.":"无法加载系统任务。","We could not load the setup status.":"我们无法加载设置状态。","We will prompt your device to confirm using biometrics or your hardware key.":"我们将提示您的设备使用生物识别或硬件密钥进行确认。","We\'ll be back online shortly.":"我们将很快恢复在线。","Web search":"网络搜索","Web Search":"网页搜索","Webhook Configuration:":"Webhook 配置:","Webhook public key (production)":"Webhook 公钥(生产)","Webhook public key (production) is required":"Webhook 公钥(生产)为必填项","Webhook public key (sandbox)":"Webhook 公钥(沙盒)","When a channel is disabled or re-enabled automatically, or a test of all channels finishes":"渠道被自动禁用或重新启用,或全部渠道测试完成时","You can create at most {{count}} access tokens":"最多可创建 {{count}} 个访问令牌","Webhook public key (sandbox) is required":"Webhook 公钥(沙盒)为必填项","Webhook secret":"Webhook 密钥","Webhook Secret":"Webhook 密钥","Webhook signing secret (leave blank unless updating)":"Webhook 签名密钥(除非更新,否则留空)","You cannot grant one or more of these permissions.":"你无法授予其中一项或多项权限。","Webhook URL":"Webhook 地址","Webhook URL (Production):":"Webhook URL(生产):","Webhook URL (Test):":"Webhook URL(测试):","Webhook URL:":"Webhook URL:","Website is under maintenance!":"网站正在维护中!","WeChat":"微信","WeChat login QR code":"微信登录二维码","WeChat Pay":"微信支付","WeChat sign in":"微信登录","Week":"本周","Weekday":"星期","Weekly":"每周","Weekly token usage by model across the past few weeks":"最近几周内各模型的每周 Token 用量","Weekly token usage by model across the past year":"过去一年内按模型分布的每周 Token 使用量","Weekly token usage by model since launch":"自上线以来按模型分布的每周 Token 使用量","Weekly Window":"每周窗口","Weight":"权重","Weighted by request count":"按请求数加权","Welcome back!":"欢迎回来!","Welcome to our New API...":"欢迎使用我们的 New API...","Well-Known URL":"Well-Known URL","Well-Known URL must start with http:// or https://":"Well-Known URL 必须以 http:// 或 https:// 开头","What do you want to change?":"你想修改什么?","What would you like to know?":"您想了解什么?","When a token uses the auto group, the system tries groups from top to bottom until it finds an available group.":"当令牌使用 auto 分组时,系统会按从上到下的顺序尝试,直到找到可用分组。","When billed as {{group}}":"按 {{group}} 计费时","When conditions match":"条件成立时","When conditions match → {{name}}":"条件成立 → {{name}}","When conditions match, the final price is multiplied by X. Multiple matches multiply together; values < 1 act as discounts.":"条件满足时,最终价格乘以 X;多条命中的倍率会相乘;小于 1 的值为折扣。","When disabled, all uploaded custom plugins are ignored and every platform falls back to its built-in factory plugin.":"关闭后,所有上传的自定义插件都会被忽略,每个平台均回落到内置的出厂插件。","When disabled, the entire task plugin system stops serving, including factory and custom plugins.":"关闭后,整个任务插件系统停止服务,包括出厂插件和自定义插件。","When enabled, if channels in the current group fail, it will try channels in the next group in order.":"开启后,当前分组渠道失败时会按顺序尝试下一个分组的渠道。","When enabled, keep the affinity entry even if the affinity channel is disabled or no longer usable for the current group/model. Leave it off to delete the entry and select another channel.":"开启后,亲和到的渠道被禁用,或不再适用于当前分组/模型时,仍保留这条亲和;关闭时会删除并重新选择渠道。","When enabled, large request bodies are temporarily stored on disk instead of memory, significantly reducing memory usage. SSD recommended.":"启用磁盘缓存后,大请求体将临时存储到磁盘而非内存,可显著降低内存占用。建议在 SSD 环境下使用。","When enabled, MjProxy callbacks are accepted (reveals server IP).":"启用时,接受 MjProxy 回调 (会泄露服务器 IP)。","When enabled, newly created tokens start in the first auto group.":"启用后,新创建的令牌将从第一个自动分组开始。","When enabled, prompts are scanned before reaching upstream models.":"启用后,提示将在到达上游模型之前被扫描。","When enabled, the store field will be blocked":"开启后将阻止 store 字段透传","When enabled, this API key can be used to check your account\'s remaining and used quota.":"开启后,可用这个令牌查询账户的剩余额度和已用额度。","When enabled, users can pick this group when creating tokens.":"启用后,用户创建令牌时可以选择该分组。","When enabled, violation requests will incur additional charges.":"开启后,违规请求将额外扣费。","When enabled, zero-cost models also pre-consume quota before final settlement.":"启用后,零成本模型也会在最终结算前预先消耗配额。","When no conditions are set, the operation always executes.":"没有条件时,默认总是执行该操作。","When performance monitoring is enabled and system resource usage exceeds the set threshold, new Relay requests will be rejected.":"启用性能监控后,当系统资源使用率超过设定阈值时,将拒绝新的 Relay 请求。","When running in containers or ephemeral environments, ensure the SQLite file is mapped to persistent storage to avoid data loss on restart.":"在容器或临时环境中运行时,请确保 SQLite 文件映射到持久存储,以避免重启时数据丢失。","When the primary domain changes, the previous domain is automatically kept in the compatible domains list.":"修改主域名时,原域名会自动保留在兼容域名列表中。","Whitelist":"白名单","Whitelist (Only allow listed domains)":"白名单(仅允许列出的域)","Whitelist (Only allow listed IPs)":"白名单(仅允许列出的 IP)","whsec_xxx":"whsec_xxx","Why only one store + product?":"为什么只需要一个店铺和产品?","Why set a website domain?":"为什么要填写网站域名?","Why set this?":"为什么需要设置?","Window:":"窗口:","Wire encoding for the embedding vectors":"向量传输的编码格式","with conflicts":"有冲突","With linked models":"有关联模型","with the API key from your token settings.":"替换为令牌设置中的 API Key。","With these settings, automatic disabling is off for all channels.":"按当前设置,所有渠道的自动停用均不生效。","Without additional conditions, only the type above is used for pruning.":"未添加附加条件时,仅使用上方 type 进行清理。","Without linked models":"无关联模型","Worked example":"完整示例","Worker Access Key":"Worker 访问密钥","Worker instances do not run master-only background tasks.":"worker 实例不执行仅限 master 的后台任务。","Worker metrics":"工作进程指标","Worker Proxy":"Worker 代理","Worker URL":"Worker URL","Workspaces":"工作区","Write value to the target field":"把值写入目标字段","x":"x","xAI":"xAI","Xinference":"Xinference","Xunfei":"讯飞","Year":"今年","years":"年","Yes":"是","You are about to delete {{count}} API key(s).":"您即将删除 {{count}} 个 API 密钥。","You are offline. Updates will be checked when you reconnect.":"当前处于离线状态,恢复联网后将检查更新。","You are running the latest version ({{version}}).":"您正在运行最新版本 ({{version}})。","You can add models manually or try fetching again.":"可以手动添加模型,也可以重新获取。","You can close this tab once the binding completes or a success message appears in the original window.":"绑定完成后或原窗口出现成功消息后,您可以关闭此标签页。","You can create up to {{count}} access tokens":"最多可创建 {{count}} 个访问令牌","You can manually add them in \\"Custom Model Names\\", click \\"Fill\\" and then submit, or use the operations below to handle automatically.":"你可以在\\"自定义模型名称\\"处手动添加它们,然后点击\\"填入\\"后再提交,或者直接使用下方操作自动处理。","You can only check in once per day":"每日仅可签到一次,请勿重复签到","You can still edit non-sensitive operations fields such as models, groups, priority, and weight.":"你仍可编辑模型、分组、优先级和权重等非敏感运维字段。","You commit not to use this system to implement, assist with, or indirectly implement acts that violate applicable laws and regulations, regulatory requirements, platform rules, public interests, or the lawful rights and interests of third parties.":"你承诺不会使用本系统实施、协助实施或间接实施违反适用法律法规、监管要求、平台规则、公共利益或第三方合法权益的行为。","You commit to using upstream APIs, accounts, keys, quotas, and service capabilities only within the scope of lawful authorization obtained from upstream service providers, model service providers, or relevant rights holders, and will not conduct unauthorized resale, trafficking, distribution, or other non-compliant commercialization.":"你承诺仅在从上游服务提供商、模型服务提供商或相关权利人处获得合法授权的范围内使用上游 API、账户、密钥、额度和服务能力,并不会进行未经授权的转售、倒卖、分发或其他不合规商业化行为。","You do not have permission to edit channels":"你没有编辑渠道的权限","You do not have permission to edit sensitive channel settings.":"你没有权限编辑敏感渠道设置。","You do not have permission to perform this action.":"你没有执行此操作的权限。","You don\'t have necessary permission":"您没有必要的权限","You have legally obtained authorization for the connected model APIs, accounts, keys, and quotas.":"你已合法取得所连接模型 API、账户、密钥和额度的授权。","You have unsaved changes":"您有未保存的更改","You have unsaved changes. Are you sure you want to leave?":"您有未保存的更改。确定要离开吗?","You Pay":"您支付","You save":"您节省","You understand and independently bear legal responsibility arising from deployment, operation, and charging behavior.":"你理解并独立承担因部署、运营和收费行为产生的法律责任。","You understand this compliance reminder is only for risk notice and does not constitute legal advice, a compliance review conclusion, or a guarantee of the legality of your use of this system; you should consult professional legal or compliance advisors based on your actual business scenario.":"你理解此合规提醒仅用于风险提示,不构成法律意见、合规审查结论或对你使用本系统合法性的保证;你应结合实际业务场景咨询专业法律或合规顾问。","You will be redirected to Telegram to complete the binding process.":"您将被重定向到 Telegram 以完成绑定过程。","You\'ll be redirected automatically. You can return to the previous page if nothing happens after a few seconds.":"您将被自动重定向。如果几秒钟后无反应,您可以返回上一页。","Your account can edit sensitive channel settings.":"你的账号可以编辑敏感渠道设置。","Your account cannot edit sensitive channel settings.":"你的账号不能编辑敏感渠道设置。","{{name}} called {{count}} times, cost {{quota}}":"{{name}} 调用 {{count}} 次,调用花费 {{quota}}","your AI integration?":"你的 AI 集成了吗?","Your Azure OpenAI endpoint URL":"您的 Azure OpenAI 端点 URL","Your Bot Name":"您的机器人名称","Your changes have not been saved.":"修改尚未保存。","Your Cloudflare Account ID":"您的 Cloudflare 账户 ID","Your Discord OAuth Client ID":"您的 Discord OAuth 客户端 ID","Your Discord OAuth Client Secret":"您的 Discord OAuth 客户端密钥","{{provider}} login and registration has not been enabled by administrator":"管理员未开启通过 {{provider}} 登录以及注册","{{provider}} returned empty user info, please check settings":"{{provider}} 获取用户信息为空,请检查设置","{{provider}} top-up succeeded, amount added: {{quota}}, payment amount: {{amount}}":"{{provider}} 充值成功,充值额度: {{quota}},支付金额: {{amount}}","Your GitHub OAuth Client ID":"您的 GitHub OAuth 客户端 ID","Your GitHub OAuth Client Secret":"您的 GitHub OAuth 客户端密钥","Your identity has been verified. Continue to the provider to finish linking your account.":"身份验证已通过,请前往服务提供商完成账户绑定。","Your new backup codes are ready":"您的新备份代码已准备就绪","Your Referral Link":"您的推荐链接","Your setup guide is collapsed so usage stays in focus.":"设置引导已收起,让用量信息保持在焦点位置。","Your Telegram Bot Token":"您的 Telegram 机器人令牌","Your transaction history will appear here":"您的交易历史会显示在这里","Your Turnstile secret key":"您的 Turnstile 密钥","Your Turnstile site key":"您的 Turnstile 站点密钥","Zero retention":"零数据保留","Zhipu":"智谱","Zhipu GLM":"智谱GLM","Zhipu V4":"智谱 V4","Zoom":"缩放"}}');R.Ay.use(N.A).use(j.r9).init({resources:{en:D,zhCN:F,fr:O,ru:q,ja:L,vi:U,zhTW:E},fallbackLng:"en",supportedLngs:["en","zhCN","fr","ru","ja","vi","zhTW"],load:"currentOnly",nsSeparator:!1,debug:!1,interpolation:{escapeValue:!1},detection:{order:["localStorage","navigator"],caches:["localStorage"],convertDetectedLanguage:M.wz}});var _=n(82799),B=n(64798),G=n(2718),V=n(91125),z=n(47488),K=n(30589);function W(){let e=(0,l.useRef)(null),t=(0,z.k)();return(0,l.useEffect)(()=>{"pending"===t.status?e.current?.continuousStart():e.current?.complete()},[t.status]),(0,i.jsx)(K.Ay,{color:"var(--muted-foreground)",ref:e,shadow:!0,height:2})}var H=n(32627),J=n(54666),Q=n(8992),$=n(89823),Y=n(15453),X=n(74401),Z=n(20598);let ee=e=>{let{resolvedTheme:t}=(0,I.D)();return(0,i.jsx)(Z.l$,{theme:t,className:"toaster group",icons:{success:(0,i.jsx)(X.n,{icon:H.A,strokeWidth:2,className:"size-4"}),info:(0,i.jsx)(X.n,{icon:J.A,strokeWidth:2,className:"size-4"}),warning:(0,i.jsx)(X.n,{icon:Q.A,strokeWidth:2,className:"size-4"}),error:(0,i.jsx)(X.n,{icon:$.A,strokeWidth:2,className:"size-4"}),loading:(0,i.jsx)(X.n,{icon:Y.A,strokeWidth:2,className:"size-4 animate-spin"})},style:{"--normal-bg":"var(--popover)","--normal-text":"var(--popover-foreground)","--normal-border":"var(--border)","--success-bg":"color-mix(in oklch, var(--success) 16%, var(--popover))","--success-border":"color-mix(in oklch, var(--success) 35%, var(--border))","--success-text":"var(--success)","--info-bg":"color-mix(in oklch, var(--info) 16%, var(--popover))","--info-border":"color-mix(in oklch, var(--info) 35%, var(--border))","--info-text":"var(--info)","--warning-bg":"color-mix(in oklch, var(--warning) 18%, var(--popover))","--warning-border":"color-mix(in oklch, var(--warning) 38%, var(--border))","--warning-text":"var(--warning)","--error-bg":"color-mix(in oklch, var(--destructive) 16%, var(--popover))","--error-border":"color-mix(in oklch, var(--destructive) 35%, var(--border))","--error-text":"var(--destructive)","--border-radius":"var(--radius)"},...e})};var et=n(46759),en=n(93870),ea=n(6715),ei=n(2527),eo=n(5742),es=n(57129),er=n(8620),el=n(22583);let ec="https://legacy-route.invalid",ed={"/console":"/dashboard","/console/models":"/models","/console/deployment":"/models/deployments","/console/subscription":"/subscriptions","/console/channel":"/channels","/console/token":"/keys","/console/playground":"/playground","/console/redemption":"/redemption-codes","/console/user":"/users","/console/personal":"/profile","/console/log":"/usage-logs","/console/midjourney":"/usage-logs/drawing","/console/task":"/usage-logs/task"},eu={operation:"/system-settings/operations/behavior",dashboard:"/system-settings/content/dashboard",chats:"/system-settings/content/chat",drawing:"/system-settings/content/drawing",payment:"/system-settings/billing/payment",ratio:"/system-settings/billing/model-pricing",ratelimit:"/system-settings/security/rate-limit",models:"/system-settings/models/global","model-deployment":"/system-settings/models/model-deployment",performance:"/system-settings/operations/performance",system:"/system-settings/site/system-info",other:"/system-settings/site/system-info"};function eh(e,t){let n=new URL(e,ec);return t.searchParams.forEach((e,t)=>{n.searchParams.append(t,e)}),n.hash=t.hash,`${n.pathname}${n.search}${n.hash}`}var ep=n(52523);let em=!1,eg=(0,G.hy)()({beforeLoad:async e=>{let{location:t}=e,n=function(e){var t;let n;try{n=new URL(e,ec)}catch{return null}let a="/"===(t=n.pathname)?t:t.replace(/\/+$/,"");if("/login"===a)return eh("/sign-in",n);if("/forbidden"===a)return eh("/403",n);if("/console/topup"===a)return eh("/wallet",n);if("/console/setting"===a)return eh(eu[n.searchParams.get("tab")??""]??"/system-settings",n);if("/console/chat"===a)return eh("/dashboard",n);if(a.startsWith("/console/chat/")){let e=a.slice(14);return eh(e?`/chat/${e}`:"/dashboard",n)}let i=ed[a];return i?eh(i,n):a.startsWith("/console/")?eh("/dashboard",n):null}(t.href);if(n)throw(0,V.V2)({href:n,replace:!0});let a=t?.pathname||"",i=!em&&!a.startsWith("/setup"),o=(0,er.T7)();if(i){let[e]=await Promise.all([(0,eo.YA)().catch(e=>null),o]);if(e?.success&&e.data){if(!e.data.status)throw(0,V.V2)({to:"/setup"});em=!0}}else await o},component:function(){let e=(0,_.Z)(),t=(0,o.jE)();return(0,es.R)({autoLoad:!0}),(0,l.useEffect)(()=>{let e=new URLSearchParams(window.location.search).get("aff")?.trim();e&&(0,en.E)(e)},[]),(0,l.useEffect)(()=>ep.n.subscribe((e,n)=>{e.auth.session?.sid!==n.auth.session?.sid&&t.clear()}),[t]),(0,l.useEffect)(()=>(0,el.m)(n=>{let a=ep.n.getState().auth.session?.sid;if("authenticated"===n.kind){if(n.sid===a)return;a&&(0,er.cy)(!1),window.location.reload();return}a&&n.sid===a&&((0,er.BR)(t,!1),e({to:"/sign-in",replace:!0}))}),[e,t]),(0,i.jsxs)(et._,{children:[(0,i.jsx)(W,{}),(0,i.jsx)(B.s,{}),(0,i.jsx)(ee,{closeButton:!0,duration:5e3,position:"top-center",richColors:!0}),!1]})},notFoundComponent:ei.m,errorComponent:ea.$});var ef=n(54145),ey=n(58932);let eb=(0,ey.WK)("/")({component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(37500),n.e(99940),n.e(74400),n.e(92156),n.e(93834)]).then(n.bind(n,49905)),"component")}),ev=(0,ey.WK)("/(auth)")({}),ek=(0,ey.WK)("/_authenticated")({beforeLoad:async e=>{let{location:t}=e;await (0,er.BF)();let{auth:n}=ep.n.getState();if(!n.user||!n.accessToken)throw(0,V.V2)({to:"/sign-in",search:{redirect:t.href}})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(10349)]).then(n.bind(n,89532)),"component")}),ex=(0,ey.WK)("/privacy-policy")({component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(7578)]).then(n.bind(n,95809)),"component")}),ew=(0,ey.WK)("/user-agreement")({component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(99641)]).then(n.bind(n,31232)),"component")}),eC=(0,ey.WK)("/(auth)/forgot-password")({component:(0,ef.Z)(()=>n.e(42878).then(n.bind(n,16269)),"component")}),eA=(0,ey.WK)("/(auth)/oauth")({component:(0,ef.Z)(()=>n.e(32122).then(n.bind(n,67009)),"component")}),eS=(0,ey.WK)("/(auth)/otp")({component:(0,ef.Z)(()=>Promise.all([n.e(2860),n.e(69928),n.e(10311),n.e(51079)]).then(n.bind(n,12244)),"component")}),eP=(0,ey.WK)("/(auth)/register")({beforeLoad:e=>{let{location:t}=e;throw(0,V.V2)({to:"/sign-up",search:t.search,replace:!0})}}),eT=(0,ey.WK)("/(auth)/reset")({component:(0,ef.Z)(()=>n.e(72994).then(n.bind(n,4985)),"component")});var eI=n(49256),eR=n(21798);let eN=eI.Ik({redirect:eI.Yj().optional()}),ej=(0,ey.WK)("/(auth)/sign-in")({component:(0,ef.Z)(()=>Promise.all([n.e(2860),n.e(57836),n.e(10311),n.e(33249),n.e(87166)]).then(n.bind(n,269)),"component"),validateSearch:eN,beforeLoad:async e=>{let{search:t}=e;await (0,er.BF)();let{auth:n}=ep.n.getState();if(n.user){let e=(0,eR.r)(t?.redirect,window.location.origin)??"/dashboard";throw(0,V.V2)({href:e,replace:!0})}}}),eM=(0,ey.WK)("/(auth)/sign-up")({component:(0,ef.Z)(()=>Promise.all([n.e(2860),n.e(57836),n.e(10311),n.e(33249),n.e(20829)]).then(n.bind(n,44236)),"component"),beforeLoad:async()=>{let{auth:e}=ep.n.getState();if(e.user)throw(0,V.V2)({to:"/dashboard"})}}),eD=(0,ey.WK)("/(errors)/401")({component:(0,ef.Z)(()=>n.e(49941).then(n.bind(n,90836)),"component")}),eO=(0,ey.WK)("/(errors)/403")({component:(0,ef.Z)(()=>n.e(78063).then(n.bind(n,20562)),"component")}),eL=(0,ey.WK)("/(errors)/404")({component:(0,ef.Z)(()=>n.e(88458).then(n.bind(n,8209)),"component")}),eq=(0,ey.WK)("/(errors)/500")({component:(0,ef.Z)(()=>n.e(3197).then(n.bind(n,85759)),"component")}),eU=(0,ey.WK)("/(errors)/503")({component:(0,ef.Z)(()=>n.e(30576).then(n.bind(n,30035)),"component")}),eE=(0,ey.WK)("/_authenticated/chat2link")({component:(0,ef.Z)(()=>n.e(11648).then(n.bind(n,77827)),"component")});var eF=n(89795);let e_=(0,ey.WK)("/_authenticated/system-settings")({beforeLoad:()=>{let{auth:e}=ep.n.getState();if(e.user?.role!==eF.z7.SUPER_ADMIN)throw(0,V.V2)({to:"/403"})},component:(0,ef.Z)(()=>n.e(58666).then(n.bind(n,86161)),"component")}),eB=(0,ey.WK)("/about/")({component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(89908)]).then(n.bind(n,69791)),"component")}),eG=(0,ey.WK)("/oauth/$provider")({component:(0,ef.Z)(()=>Promise.all([n.e(2860),n.e(57836),n.e(10311),n.e(84661)]).then(n.bind(n,99092)),"component")});var eV=n(6695);let ez=eI.Ik({search:eI.Yj().optional(),sort:eI.Yj().optional(),vendor:eI.Yj().optional(),group:eI.Yj().optional(),quotaType:eI.Yj().optional(),endpointType:eI.Yj().optional(),tag:eI.Yj().optional(),tokenUnit:eI.k5(["M","K"]).optional(),view:eI.k5(["card","table"]).optional().catch(void 0),rechargePrice:eI.zM().optional()}),eK=(0,ey.WK)("/pricing/")({validateSearch:ez,beforeLoad:async e=>{let{context:t,location:n}=e,a=await (0,eV.vL)(t.queryClient,"pricing");if(!a.enabled)throw(0,V.V2)({to:"/"});if(a.requireAuth){let{auth:e}=ep.n.getState();if(!e.user)throw(0,V.V2)({to:"/sign-in",search:{redirect:n.href}})}},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(39243),n.e(47124),n.e(99940),n.e(74400),n.e(92156),n.e(79001),n.e(77952),n.e(30660)]).then(n.bind(n,11242)),"component")}),eW=eI.Ik({period:eI.k5(["today","week","month","year"]).optional().catch(void 0)}),eH=(0,ey.WK)("/rankings/")({validateSearch:eW,beforeLoad:async e=>{let{context:t,location:n}=e,a=await (0,eV.vL)(t.queryClient,"rankings");if(!a.enabled)throw(0,V.V2)({to:"/"});if(a.requireAuth){let{auth:e}=ep.n.getState();if(!e.user)throw(0,V.V2)({to:"/sign-in",search:{redirect:n.href}})}},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(39243),n.e(99940),n.e(74400),n.e(92156),n.e(80745)]).then(n.bind(n,78958)),"component")}),eJ=(0,ey.WK)("/setup/")({beforeLoad:async()=>{let e=await (0,eo.YA)().catch(e=>null);if(e?.success&&e.data?.status)throw(0,V.V2)({to:"/"})},component:(0,ef.Z)(()=>n.e(63247).then(n.bind(n,69778)),"component")}),eQ=(0,ey.WK)("/(auth)/user/reset")({component:(0,ef.Z)(()=>n.e(69998).then(n.bind(n,61405)),"component")}),e$=eI.Ik({page:eI.ai().optional().catch(1),pageSize:eI.ai().optional().catch(void 0),filter:eI.Yj().optional().catch(""),status:eI.YO(eI.Yj()).optional().catch([]),type:eI.YO(eI.Yj()).optional().catch([]),group:eI.YO(eI.Yj()).optional().catch([]),model:eI.Yj().optional().catch("")}),eY=(0,ey.WK)("/_authenticated/channels/")({beforeLoad:()=>{let{auth:e}=ep.n.getState();if(!e.user||e.user.rolePromise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(47124),n.e(91621),n.e(99940),n.e(74400),n.e(92156),n.e(2860),n.e(69928),n.e(61489),n.e(34769),n.e(21509)]).then(n.bind(n,18340)),"component")});var eX=n(71374),eZ=n(1258);let e0=(0,ey.WK)("/_authenticated/dashboard/")({beforeLoad:()=>{throw(0,V.V2)({to:"/dashboard/$section",params:{section:eZ.$F}})}}),e1=(0,ey.WK)("/_authenticated/dashboard/$section")({beforeLoad:e=>{let{params:t}=e;if(!eZ.qB.includes(t.section))throw(0,V.V2)({to:"/dashboard/$section",params:{section:eZ.$F}})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(86581)]).then(n.bind(n,84372)),"component")});var e2=n(46016),e5=n(64564);let e4=eI.Ik({page:eI.ai().optional().catch(1),pageSize:eI.ai().optional().catch(void 0),status:eI.YO(eI.k5(e5.F7.map(e=>e.value))).optional().catch([]),filter:eI.Yj().optional().catch(""),token:eI.Yj().optional().catch("")}),e3=(0,ey.WK)("/_authenticated/keys/")({validateSearch:e4,component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(34769),n.e(66138)]).then(n.bind(n,47430)),"component")});var e6=n(87558);let e8=(0,ey.WK)("/_authenticated/models/")({beforeLoad:()=>{let{auth:e}=ep.n.getState();if(!e.user||e.user.role{let{params:t}=e,{auth:n}=ep.n.getState();if(!n.user||n.user.rolePromise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(79001),n.e(28253)]).then(n.bind(n,93679)),"component")}),te=(0,ey.WK)("/_authenticated/playground/")({beforeLoad:()=>{if(!(0,eV.QT)("chat","playground"))throw(0,V.V2)({to:"/dashboard"})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(47124),n.e(97280),n.e(70467),n.e(99940),n.e(74400),n.e(92156),n.e(34640)]).then(n.bind(n,29203)),"component")}),tt=(0,ey.WK)("/_authenticated/profile/")({component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(68669)]).then(n.bind(n,2284)),"component")});var tn=n(29130);let ta=eI.Ik({page:eI.ai().optional().catch(1),pageSize:eI.ai().optional().catch(10),filter:eI.Yj().optional().catch(""),status:eI.YO(eI.k5(tn.cS)).optional().catch([])}),ti=(0,ey.WK)("/_authenticated/redemption-codes/")({beforeLoad:()=>{let{auth:e}=ep.n.getState();if(!e.user||e.user.rolePromise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(60712)]).then(n.bind(n,83515)),"component")}),to=(0,ey.WK)("/_authenticated/security/")({component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(97280),n.e(65290),n.e(99940),n.e(2860),n.e(57836),n.e(69928),n.e(4878),n.e(77302),n.e(82637)]).then(n.bind(n,28092)),"component")}),ts=(0,ey.WK)("/_authenticated/subscriptions/")({beforeLoad:()=>{let{auth:e}=ep.n.getState();if(!e.user||e.user.rolePromise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(20193)]).then(n.bind(n,96472)),"component")}),tr=(0,ey.WK)("/_authenticated/system-info/")({beforeLoad:()=>{let{auth:e}=ep.n.getState();if(e.user?.role!==eF.z7.SUPER_ADMIN)throw(0,V.V2)({to:"/403"})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(702)]).then(n.bind(n,19373)),"component")}),tl=(0,ey.WK)("/_authenticated/system-settings/")({beforeLoad:()=>{throw(0,V.V2)({to:"/system-settings/site"})}}),tc=(0,ey.WK)("/_authenticated/task-plugins/")({beforeLoad:()=>{let{auth:e}=ep.n.getState();if(e.user?.role!==eF.z7.SUPER_ADMIN)throw(0,V.V2)({to:"/403"})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(47124),n.e(99940),n.e(74400),n.e(92156),n.e(61489),n.e(2491)]).then(n.bind(n,90678)),"component")});var td=n(51581);let tu=(0,ey.WK)("/_authenticated/usage-logs/")({beforeLoad:()=>{throw(0,V.V2)({to:"/usage-logs/$section",params:{section:td.Ck}})}}),th=eI.vk(e=>{if(null!=e&&""!==e)return Array.isArray(e)?e:[e]},eI.YO(eI.k5(["0","1","2","3","4","5","6","7"])).optional()).catch([]),tp=eI.Ik({page:eI.ai().optional().catch(1),pageSize:eI.ai().optional().catch(void 0),type:th.optional(),filter:eI.Yj().optional().catch(""),model:eI.Yj().optional().catch(""),token:eI.Yj().optional().catch(""),channel:eI.Yj().optional().catch(""),group:eI.Yj().optional().catch(""),username:eI.Yj().optional().catch(""),requestId:eI.Yj().optional().catch(""),upstreamRequestId:eI.Yj().optional().catch(""),startTime:eI.ai().optional(),endTime:eI.ai().optional()}),tm=(0,ey.WK)("/_authenticated/usage-logs/$section")({beforeLoad:e=>{let{params:t,search:n}=e;if(!(0,td.Dk)(t.section))throw(0,V.V2)({to:"/usage-logs/$section",params:{section:td.Ck}});let a=Array.isArray(n?.type)?n.type.length>0:n?.type!=null&&""!==n.type;if("common"!==t.section&&a)throw(0,V.V2)({to:"/usage-logs/$section",params:{section:t.section},search:{...n,type:void 0},replace:!0})},validateSearch:tp,component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(97280),n.e(40348),n.e(99940),n.e(74400),n.e(92156),n.e(79001),n.e(4878),n.e(43503)]).then(n.bind(n,60914)),"component")}),tg=(0,ey.WK)("/_authenticated/usage-logs/audit")({component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(97280),n.e(99940),n.e(74400),n.e(92156),n.e(4878),n.e(77302),n.e(28102)]).then(n.bind(n,27056)),"component")}),tf=eI.Ik({page:eI.ai().optional().catch(1),pageSize:eI.ai().optional().catch(void 0),filter:eI.Yj().optional().catch(""),status:eI.YO(eI.k5(["-1","1","2"])).optional().catch([]),role:eI.YO(eI.k5(["1","10","100"])).optional().catch([]),group:eI.YO(eI.Yj()).optional().catch([])}),ty=(0,ey.WK)("/_authenticated/users/")({beforeLoad:()=>{let{auth:e}=ep.n.getState();if(!e.user||e.user.rolePromise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(2860),n.e(57836),n.e(69928),n.e(44573)]).then(n.bind(n,18924)),"component")});var tb=n(51234);let tv=eI.Ik({search:eI.Yj().optional(),sort:eI.Yj().optional(),vendor:eI.Yj().optional(),group:eI.Yj().optional(),quotaType:eI.Yj().optional(),endpointType:eI.Yj().optional(),tag:eI.Yj().optional(),tokenUnit:eI.k5(["M","K"]).optional(),view:eI.k5(["card","table"]).optional().catch(void 0),rechargePrice:eI.zM().optional()}),tk=(0,ey.WK)("/pricing/$modelId/")({validateSearch:tv,beforeLoad:async e=>{let{context:t,location:n}=e,a=await (0,eV.vL)(t.queryClient,"pricing");if(!a.enabled)throw(0,V.V2)({to:"/"});if(a.requireAuth){let{auth:e}=ep.n.getState();if(!e.user)throw(0,V.V2)({to:"/sign-in",search:{redirect:n.href}})}},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(39243),n.e(47124),n.e(99940),n.e(74400),n.e(92156),n.e(79001),n.e(77952),n.e(64527)]).then(n.bind(n,6386)),"component")});var tx=n(52409);let tw=(0,ey.WK)("/_authenticated/system-settings/auth/")({beforeLoad:()=>{throw(0,V.V2)({to:"/system-settings/auth/$section",params:{section:tx.t0}})}}),tC=(0,ey.WK)("/_authenticated/system-settings/auth/$section")({beforeLoad:e=>{let{params:t}=e;if(!tx.aj.includes(t.section))throw(0,V.V2)({to:"/system-settings/auth/$section",params:{section:tx.t0}})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(63559)]).then(n.bind(n,62874)),"component")});var tA=n(24707);let tS=(0,ey.WK)("/_authenticated/system-settings/billing/")({beforeLoad:()=>{throw(0,V.V2)({to:"/system-settings/billing/$section",params:{section:tA.Is}})}}),tP=(0,ey.WK)("/_authenticated/system-settings/billing/$section")({beforeLoad:e=>{let{params:t}=e;if(!tA.dK.includes(t.section))throw(0,V.V2)({to:"/system-settings/billing/$section",params:{section:tA.Is}})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(42097)]).then(n.bind(n,66504)),"component")});var tT=n(59520);let tI=(0,ey.WK)("/_authenticated/system-settings/content/")({beforeLoad:()=>{throw(0,V.V2)({to:"/system-settings/content/$section",params:{section:tT.Ku}})}}),tR=(0,ey.WK)("/_authenticated/system-settings/content/$section")({beforeLoad:e=>{let{params:t}=e;if(!tT.PS.includes(t.section))throw(0,V.V2)({to:"/system-settings/content/$section",params:{section:tT.Ku}})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(6215)]).then(n.bind(n,47770)),"component")});var tN=n(22923);let tj=(0,ey.WK)("/_authenticated/system-settings/models/")({beforeLoad:()=>{throw(0,V.V2)({to:"/system-settings/models/$section",params:{section:tN.Fi}})}}),tM=(0,ey.WK)("/_authenticated/system-settings/models/$section")({beforeLoad:e=>{let{params:t}=e;if("channel-affinity"===t.section||"routing-reliability"===t.section)throw(0,V.V2)({to:"/system-settings/request-policies/$section",params:{section:"routing"},replace:!0});if(!tN.ev.includes(t.section))throw(0,V.V2)({to:"/system-settings/models/$section",params:{section:tN.Fi}})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(56362)]).then(n.bind(n,52689)),"component")});var tD=n(51056);let tO=(0,ey.WK)("/_authenticated/system-settings/operations/")({beforeLoad:()=>{throw(0,V.V2)({to:"/system-settings/operations/$section",params:{section:tD.Tn}})}}),tL=(0,ey.WK)("/_authenticated/system-settings/operations/$section")({beforeLoad:e=>{let{params:t}=e;if("monitoring"===t.section)throw(0,V.V2)({to:"/system-settings/request-policies/$section",params:{section:"health"},replace:!0});if(!tD.UK.includes(t.section))throw(0,V.V2)({to:"/system-settings/operations/$section",params:{section:tD.Tn}})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(344)]).then(n.bind(n,54187)),"component")}),tq=(0,ey.WK)("/_authenticated/system-settings/request-policies/")({beforeLoad:()=>{throw(0,V.V2)({to:"/system-settings/request-policies/$section",params:{section:"routing"},replace:!0})}});var tU=n(21423);let tE=(0,ey.WK)("/_authenticated/system-settings/request-policies/$section")({beforeLoad:e=>{let{params:t}=e;if(!tU.Um.includes(t.section))throw(0,V.V2)({to:"/system-settings/request-policies/$section",params:{section:"routing"},replace:!0})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(39276)]).then(n.bind(n,33063)),"component")});var tF=n(20729);let t_=(0,ey.WK)("/_authenticated/system-settings/security/")({beforeLoad:()=>{throw(0,V.V2)({to:"/system-settings/security/$section",params:{section:tF.r1}})}}),tB=(0,ey.WK)("/_authenticated/system-settings/security/$section")({beforeLoad:e=>{let{params:t}=e;if("sensitive-words"===t.section)throw(0,V.V2)({to:"/system-settings/request-policies/$section",params:{section:"filtering"},replace:!0});if(!tF._f.includes(t.section))throw(0,V.V2)({to:"/system-settings/security/$section",params:{section:tF.r1}})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(98839)]).then(n.bind(n,83722)),"component")});var tG=n(98500);let tV=(0,ey.WK)("/_authenticated/system-settings/site/")({beforeLoad:()=>{throw(0,V.V2)({to:"/system-settings/site/$section",params:{section:tG.O0}})}}),tz=(0,ey.WK)("/_authenticated/system-settings/site/$section")({beforeLoad:e=>{let{params:t}=e;if(!tG.$K.includes(t.section))throw(0,V.V2)({to:"/system-settings/site/$section",params:{section:tG.O0}})},component:(0,ef.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(90837)]).then(n.bind(n,98004)),"component")}),tK=eb.update({id:"/",path:"/",getParentRoute:()=>eg}),tW=ev.update({id:"/(auth)",getParentRoute:()=>eg}),tH=ek.update({id:"/_authenticated",getParentRoute:()=>eg}),tJ=ex.update({id:"/privacy-policy",path:"/privacy-policy",getParentRoute:()=>eg}),tQ=ew.update({id:"/user-agreement",path:"/user-agreement",getParentRoute:()=>eg}),t$=eC.update({id:"/forgot-password",path:"/forgot-password",getParentRoute:()=>tW}),tY=eA.update({id:"/oauth",path:"/oauth",getParentRoute:()=>tW}),tX=eS.update({id:"/otp",path:"/otp",getParentRoute:()=>tW}),tZ=eP.update({id:"/register",path:"/register",getParentRoute:()=>tW}),t0=eT.update({id:"/reset",path:"/reset",getParentRoute:()=>tW}),t1=ej.update({id:"/sign-in",path:"/sign-in",getParentRoute:()=>tW}),t2=eM.update({id:"/sign-up",path:"/sign-up",getParentRoute:()=>tW}),t5=eD.update({id:"/(errors)/401",path:"/401",getParentRoute:()=>eg}),t4=eO.update({id:"/(errors)/403",path:"/403",getParentRoute:()=>eg}),t3=eL.update({id:"/(errors)/404",path:"/404",getParentRoute:()=>eg}),t6=eq.update({id:"/(errors)/500",path:"/500",getParentRoute:()=>eg}),t8=eU.update({id:"/(errors)/503",path:"/503",getParentRoute:()=>eg}),t9=eE.update({id:"/chat2link",path:"/chat2link",getParentRoute:()=>tH}),t7=e_.update({id:"/system-settings",path:"/system-settings",getParentRoute:()=>tH}),ne=eB.update({id:"/about/",path:"/about/",getParentRoute:()=>eg}),nt=eG.update({id:"/oauth/$provider",path:"/oauth/$provider",getParentRoute:()=>eg}),nn=eK.update({id:"/pricing/",path:"/pricing/",getParentRoute:()=>eg}),na=eH.update({id:"/rankings/",path:"/rankings/",getParentRoute:()=>eg}),ni=eJ.update({id:"/setup/",path:"/setup/",getParentRoute:()=>eg}),no=eQ.update({id:"/user/reset",path:"/user/reset",getParentRoute:()=>tW}),ns=eY.update({id:"/channels/",path:"/channels/",getParentRoute:()=>tH}),nr=eX.q.update({id:"/chat/$chatId",path:"/chat/$chatId",getParentRoute:()=>tH}),nl=e0.update({id:"/dashboard/",path:"/dashboard/",getParentRoute:()=>tH}),nc=e1.update({id:"/dashboard/$section",path:"/dashboard/$section",getParentRoute:()=>tH}),nd=e2.q.update({id:"/errors/$error",path:"/errors/$error",getParentRoute:()=>tH}),nu=e3.update({id:"/keys/",path:"/keys/",getParentRoute:()=>tH}),nh=e8.update({id:"/models/",path:"/models/",getParentRoute:()=>tH}),np=e7.update({id:"/models/$section",path:"/models/$section",getParentRoute:()=>tH}),nm=te.update({id:"/playground/",path:"/playground/",getParentRoute:()=>tH}),ng=tt.update({id:"/profile/",path:"/profile/",getParentRoute:()=>tH}),nf=ti.update({id:"/redemption-codes/",path:"/redemption-codes/",getParentRoute:()=>tH}),ny=to.update({id:"/security/",path:"/security/",getParentRoute:()=>tH}),nb=ts.update({id:"/subscriptions/",path:"/subscriptions/",getParentRoute:()=>tH}),nv=tr.update({id:"/system-info/",path:"/system-info/",getParentRoute:()=>tH}),nk=tl.update({id:"/",path:"/",getParentRoute:()=>t7}),nx=tc.update({id:"/task-plugins/",path:"/task-plugins/",getParentRoute:()=>tH}),nw=tu.update({id:"/usage-logs/",path:"/usage-logs/",getParentRoute:()=>tH}),nC=tm.update({id:"/usage-logs/$section",path:"/usage-logs/$section",getParentRoute:()=>tH}),nA=tg.update({id:"/usage-logs/audit",path:"/usage-logs/audit",getParentRoute:()=>tH}),nS=ty.update({id:"/users/",path:"/users/",getParentRoute:()=>tH}),nP=tb.q.update({id:"/wallet/",path:"/wallet/",getParentRoute:()=>tH}),nT=tk.update({id:"/pricing/$modelId/",path:"/pricing/$modelId/",getParentRoute:()=>eg}),nI=tw.update({id:"/auth/",path:"/auth/",getParentRoute:()=>t7}),nR=tC.update({id:"/auth/$section",path:"/auth/$section",getParentRoute:()=>t7}),nN=tS.update({id:"/billing/",path:"/billing/",getParentRoute:()=>t7}),nj=tP.update({id:"/billing/$section",path:"/billing/$section",getParentRoute:()=>t7}),nM=tI.update({id:"/content/",path:"/content/",getParentRoute:()=>t7}),nD=tR.update({id:"/content/$section",path:"/content/$section",getParentRoute:()=>t7}),nO=tj.update({id:"/models/",path:"/models/",getParentRoute:()=>t7}),nL=tM.update({id:"/models/$section",path:"/models/$section",getParentRoute:()=>t7}),nq=tO.update({id:"/operations/",path:"/operations/",getParentRoute:()=>t7}),nU=tL.update({id:"/operations/$section",path:"/operations/$section",getParentRoute:()=>t7}),nE=tq.update({id:"/request-policies/",path:"/request-policies/",getParentRoute:()=>t7}),nF=tE.update({id:"/request-policies/$section",path:"/request-policies/$section",getParentRoute:()=>t7}),n_=t_.update({id:"/security/",path:"/security/",getParentRoute:()=>t7}),nB=tB.update({id:"/security/$section",path:"/security/$section",getParentRoute:()=>t7}),nG=tV.update({id:"/site/",path:"/site/",getParentRoute:()=>t7}),nV=tz.update({id:"/site/$section",path:"/site/$section",getParentRoute:()=>t7}),nz=tW._addFileChildren({authForgotPasswordRoute:t$,authOauthRoute:tY,authOtpRoute:tX,authRegisterRoute:tZ,authResetRoute:t0,authSignInRoute:t1,authSignUpRoute:t2,authUserResetRoute:no}),nK=t7._addFileChildren({AuthenticatedSystemSettingsIndexRoute:nk,AuthenticatedSystemSettingsAuthSectionRoute:nR,AuthenticatedSystemSettingsBillingSectionRoute:nj,AuthenticatedSystemSettingsContentSectionRoute:nD,AuthenticatedSystemSettingsModelsSectionRoute:nL,AuthenticatedSystemSettingsOperationsSectionRoute:nU,AuthenticatedSystemSettingsRequestPoliciesSectionRoute:nF,AuthenticatedSystemSettingsSecuritySectionRoute:nB,AuthenticatedSystemSettingsSiteSectionRoute:nV,AuthenticatedSystemSettingsAuthIndexRoute:nI,AuthenticatedSystemSettingsBillingIndexRoute:nN,AuthenticatedSystemSettingsContentIndexRoute:nM,AuthenticatedSystemSettingsModelsIndexRoute:nO,AuthenticatedSystemSettingsOperationsIndexRoute:nq,AuthenticatedSystemSettingsRequestPoliciesIndexRoute:nE,AuthenticatedSystemSettingsSecurityIndexRoute:n_,AuthenticatedSystemSettingsSiteIndexRoute:nG}),nW=tH._addFileChildren({AuthenticatedSystemSettingsRouteRoute:nK,AuthenticatedChat2linkRoute:t9,AuthenticatedChatChatIdRoute:nr,AuthenticatedDashboardSectionRoute:nc,AuthenticatedErrorsErrorRoute:nd,AuthenticatedModelsSectionRoute:np,AuthenticatedUsageLogsSectionRoute:nC,AuthenticatedUsageLogsAuditRoute:nA,AuthenticatedChannelsIndexRoute:ns,AuthenticatedDashboardIndexRoute:nl,AuthenticatedKeysIndexRoute:nu,AuthenticatedModelsIndexRoute:nh,AuthenticatedPlaygroundIndexRoute:nm,AuthenticatedProfileIndexRoute:ng,AuthenticatedRedemptionCodesIndexRoute:nf,AuthenticatedSecurityIndexRoute:ny,AuthenticatedSubscriptionsIndexRoute:nb,AuthenticatedSystemInfoIndexRoute:nv,AuthenticatedTaskPluginsIndexRoute:nx,AuthenticatedUsageLogsIndexRoute:nw,AuthenticatedUsersIndexRoute:nS,AuthenticatedWalletIndexRoute:nP}),dlDocsLoad=e=>{if(!["/docs","/docs/","/docs.html"].includes(new URL(e.location.href,window.location.origin).pathname))throw(0,n(67161).m)()},dlDocsPage=()=>{let e=new URL(window.location.href);e.pathname="/docs";e.searchParams.set("docs_rev","20261022r5");let t=e.pathname+e.search+e.hash,n=window.location.href===e.href,a="/docs.html"+e.search+e.hash;return(0,l.useEffect)(()=>{n||window.location.replace(t)},[t,n]),(0,i.jsx)("a",{href:n?a:t,children:n?"打开文档":"正在打开文档…"})},dlDocsRoute=(0,ey.WK)("/docs")({beforeLoad:dlDocsLoad,component:dlDocsPage}).update({id:"/docs",path:"/docs",getParentRoute:()=>eg}),dlDocsHtmlRoute=(0,ey.WK)("/docs.html")({beforeLoad:dlDocsLoad,component:dlDocsPage}).update({id:"/docs.html",path:"/docs.html",getParentRoute:()=>eg}),nH=eg._addFileChildren({DocsRoute:dlDocsRoute,DocsHtmlRoute:dlDocsHtmlRoute,IndexRoute:tK,authRouteRoute:nz,AuthenticatedRouteRoute:nW,PrivacyPolicyRoute:tJ,UserAgreementRoute:tQ,errors401Route:t5,errors403Route:t4,errors404Route:t3,errors500Route:t6,errors503Route:t8,OauthProviderRoute:nt,AboutIndexRoute:ne,PricingIndexRoute:nn,RankingsIndexRoute:na,SetupIndexRoute:ni,PricingModelIdIndexRoute:nT})._addFileTypes();!function(){if("u">typeof window)try{if(window.localStorage.getItem(g)===m)return;(function(){let e=[];for(let t=0;twindow.localStorage.removeItem(e))})(),window.localStorage.setItem(g,m)}catch{}}(),function(){let e,t;if(u||"u"0)return e}catch{}}())&&e.length>0?e:"0000",`rv.${t}.${d}`),a=Object.freeze({rev:n,ch:d,at:Date.now()});try{Object.defineProperty(window,"__APP_BUILD__",{value:a,writable:!1,configurable:!1,enumerable:!1})}catch{}try{let e=document.documentElement;e.hasAttribute("data-build-rev")||e.setAttribute("data-build-rev",n),e.hasAttribute("data-app-channel")||e.setAttribute("data-app-channel",d)}catch{}try{document.documentElement.style.setProperty("--app-build-rev",`'${n}'`)}catch{}try{let e=document.querySelector('meta[name="build-id"]');e||((e=document.createElement("meta")).setAttribute("name","build-id"),document.head.appendChild(e)),e.setAttribute("content",n)}catch{}try{window.localStorage.setItem("app:rev",n)}catch{}try{console.debug("[build] %s",n)}catch{}}();let nJ=(a=()=>{nQ.navigate({to:"/500"})},new y.E({defaultOptions:{queries:{retry:(e,t)=>!(e>3)&&![401,403].includes((0,x._m)(t)??0),refetchOnWindowFocus:!1,staleTime:1e4}},mutationCache:new b.q({onError:(e,t,n,a)=>{a.meta?.errorToast===!1||a.options.onError||(0,k.Q)(e)}}),queryCache:new v.$({onError:(e,t)=>{t.meta?.errorToast!==!1&&(0,k.Q)(e),500===(0,x._m)(e)&&a?.()}})})),nQ=(0,s.a)({routeTree:nH,context:{queryClient:nJ},defaultPreload:"intent",defaultPreloadStaleTime:0}),n$=document.querySelector("#root");if(!n$)throw Error("Root element not found");!function(){try{if("u"{document.title=e;let t=document.querySelector('meta[name="title"]');t&&t.setAttribute("content",e)},t=(0,w.bf)();t?.system_name&&e(t.system_name),t?.logo&&(0,h.K)(t.logo),nJ.ensureQueryData(w.d6).then(t=>{t?.system_name&&e(t.system_name),t?.logo&&(0,h.K)(t.logo)}).catch(()=>{})}catch{}}(),n$.innerHTML||c.createRoot(n$).render((0,i.jsx)(l.StrictMode,{children:(0,i.jsx)(o.Ht,{client:nJ,children:(0,i.jsx)(I.N,{children:(0,i.jsx)(function(e){let{children:t}=e,[n,a]=(0,l.useState)(()=>{let e=(0,S.Ri)(P);return A.includes(e)?e:A["0"]});return(0,l.useEffect)(()=>{let e;(e=document.documentElement).classList.forEach(t=>{t.startsWith("font-")&&e.classList.remove(t)}),e.classList.add(`font-${n}`)},[n]),(0,i.jsx)(T,{value:{font:n,setFont:e=>{(0,S.TV)(P,e,31536e3),a(e)},resetFont:()=>{(0,S.zs)(P),a(A["0"])}},children:t})},{children:(0,i.jsx)(C.F,{children:(0,i.jsx)(r.p,{router:nQ})})})})})}))},71374(e,t,n){"use strict";var a=n(54145),i=n(58932),o=n(91125);let s=(0,i.WK)("/_authenticated/chat/$chatId")({loader:async e=>{let{params:t}=e;if(!Number.isInteger(Number(t.chatId)))throw(0,o.V2)({to:"/dashboard"})},component:(0,a.Z)(()=>n.e(12450).then(n.bind(n,39865)),"component")});n.d(t,{},{q:s})},46016(e,t,n){"use strict";var a=n(54145);let i=(0,n(58932).WK)("/_authenticated/errors/$error")({component:(0,a.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(2414)]).then(n.bind(n,52381)),"component")});n.d(t,{},{q:i})},51234(e,t,n){"use strict";var a=n(54145),i=n(58932),o=n(49256);let s=o.Ik({show_history:o.zM().optional()}),r=(0,i.WK)("/_authenticated/wallet/")({component:(0,a.Z)(()=>Promise.all([n.e(28984),n.e(9110),n.e(35875),n.e(20534),n.e(99940),n.e(74400),n.e(92156),n.e(57836),n.e(8249)]).then(n.bind(n,99616)),"component"),validateSearch:s});n.d(t,{},{q:r})},52523(e,t,n){"use strict";let a=(0,n(79540).v)()(e=>({auth:{user:null,accessToken:null,accessExpiresAt:null,session:null,pendingLoginVerification:null,bootstrapState:"idle",setBundle:t=>e(e=>({...e,auth:{...e.auth,user:t.user,accessToken:t.access_token,accessExpiresAt:t.access_expires_at,session:t.session,pendingLoginVerification:null,bootstrapState:"complete"}})),setUser:t=>e(e=>({...e,auth:{...e.auth,user:t,pendingLoginVerification:e.auth.user?.id===t?.id?e.auth.pendingLoginVerification:null}})),setPendingLoginVerification:t=>e(e=>({...e,auth:{...e.auth,pendingLoginVerification:t}})),setBootstrapState:t=>e(e=>({...e,auth:{...e.auth,bootstrapState:t}})),reset:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"complete";return e(e=>({...e,auth:{...e.auth,user:null,accessToken:null,accessExpiresAt:null,session:null,pendingLoginVerification:null,bootstrapState:t}}))}}}));n.d(t,{},{n:a})},5676(e,t,n){"use strict";var a=n(79540),i=n(71795);let o=(0,a.v)()((0,i.Zr)(e=>({currency:"USD",setCurrency:t=>e({currency:t})}),{name:"model-pricing-preferences",partialize:e=>({currency:e.currency})}));n.d(t,{},{v:o})},43919(e,t,n){"use strict";var a=n(79540),i=n(71795),o=n(24567);let s={displayInCurrency:!0,quotaDisplayType:"USD",quotaPerUnit:5e5,usdExchangeRate:1,customCurrencySymbol:"¤",customCurrencyExchangeRate:1},r=(0,a.v)()((0,i.Zr)(e=>({config:{systemName:o.It,logo:o.Gs,currency:{...s}},loading:!0,loadedLogoUrl:o.Gs,setConfig:t=>e(e=>({config:{...e.config,...t,currency:{...e.config.currency,...t.currency??{}}}})),setLoadedLogoUrl:t=>e({loadedLogoUrl:t}),setLoading:t=>e({loading:t})}),{name:"system-config-storage",partialize:e=>({config:e.config,loadedLogoUrl:e.loadedLogoUrl})}));n.d(t,{},{Eh:r,tV:s})}},c={};function d(e){var t=c[e];if(void 0!==t)return t.exports;var n=c[e]={exports:{}};return l[e].call(n.exports,n,n.exports,d),n.exports}if(d.m=l,d.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return d.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(n,a){if(1&a&&(n=this(n)),8&a||"object"==typeof n&&n&&(4&a&&n.__esModule||16&a&&"function"==typeof n.then))return n;var i=Object.create(null);d.r(i);var o={};e=e||[null,t({}),t([]),t(t)];for(var s=2&a&&n;("object"==typeof s||"function"==typeof s)&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach(e=>{o[e]=()=>n[e]});return o.default=()=>n,d.d(i,o),i},d.d=(e,t,n)=>{var a=(t,n)=>{for(var a in t)d.o(t,a)&&!d.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,[n]:t[a]})};a(t,"get"),a(n,"value")},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce((t,n)=>(d.f[n](e,t),t),[])),d.u=e=>92156===e?"brand/navigation-20261022-r1/navigation.ae7aba79250a.js":86581===e?"brand/studio-20261022-r1/overview.d2616e105f33.js":34640===e?"brand/playground-20261025-r1/playground.685b314da2e2.js":43503===e?"brand/fast-log-status-20261029-r1/usage-logs.162ff1e6ad11.js":"static/js/async/"+e+"."+({10044:"b952d6dc16",10114:"1de97084a4",1013:"4d8f7c5a1a",1016:"5773bed1ef",10234:"59af172d7f",10311:"2822d6b9d5",10349:"2bc71de35a",10542:"a707b26088",10550:"d9177274a5",10593:"1e89cfaed9",10600:"fc4ddaa25f",10605:"2b8bb467c8",10614:"6d60a24e2a",10617:"43fbd78917",10653:"c62824d7f6",10675:"dcde1de0ac",10700:"44edb53962",10731:"c6d359195d",10762:"120a558eed",10765:"3237f24ab2",10802:"0bf0bb4fb8",10840:"c72fdde99c",10910:"7790338feb",10990:"d5728f843a",1100:"ee84ee3bed",11022:"06ad960fc9",11049:"d07bf45cfc",11064:"e34ede8585",11099:"86183276d5",11185:"415699d0ed",11213:"f41ae3efc3",11275:"4fd3104cbf",11355:"bd5643c5c3",11371:"f3a2bcf825",1145:"356b041e70",11450:"da54e8965c",11514:"5d1a52c74f",1153:"f6cdf379c1",11534:"75d4b037d6",11545:"79e9725783",11581:"144d220dba",11591:"ff14f5f561",11607:"c873e9707a",11612:"b56f1c0ee6",11630:"dbb55ebc94",11633:"f9370951f7",11648:"ed1eff6eb6",11664:"580e9b0a1d",11732:"a25118532e",11736:"4216adf827",11746:"5d08bcc9f4",1178:"0d5abbcdd8",11801:"58646b3feb",11856:"708e07c0f0",11900:"cb09c226f9",11921:"9484aae0f0",11970:"5acf403d72",1198:"aa5ec942be",12061:"66666ec93e",1215:"f7de2d625b",1218:"284c086655",12414:"2e2c035b8a",12425:"12102302af",12450:"badc069bc0",12511:"54d2a2f26c",12643:"91b6d14a0f",12677:"3d5399a5e8",12706:"59409455e1",12825:"ce5b76cf9d",12843:"7cd170ee98",12889:"925784b8f5",12942:"90f70fb1a6",1305:"ef6d0fc804",1306:"079a8b0808",13097:"60d09b77df",13112:"ffe4e61405",13117:"55d1290487",13137:"c8f1fb5ef0",13411:"6154c52651",13437:"0311951f24",13447:"d33136ebfa",13448:"d6c97d16ae",13549:"e71ac1e9da",13573:"3a919ffec8",13602:"92212fad05",13646:"fd51f6f499",13671:"a3673d7d11",1378:"f3ad89a855",13792:"83642282cb",13806:"3fc86d10ea",13851:"310570d769",1404:"19947fa89e",14053:"563fc22637",14105:"29ddd69bb0",14121:"a7fd21042b",14149:"c5e350b888",14163:"44b0056481",14249:"99a9d1ef35",14266:"aa19b4361b",14297:"6781c3064a",14309:"98a50b763b",14332:"c7b1510627",14415:"5bcb7f95d5",14525:"f602fe2740",14526:"8176a53f7f",14573:"a094e997da",14619:"5c80b29a6a",14658:"8c62f3f41b",14679:"644d0a0b96",14796:"8b2feab79b",14799:"24e920baa4",14808:"81137dbf5a",1494:"969ae8b7ef",15066:"84f0de544e",15073:"c409def9f6",15085:"53e79c8664",15131:"ede04a3278",15317:"7c517408d1",15370:"15aa3bc058",15438:"5edc350681",15457:"28acd449f9",1550:"ae3e43863f",15618:"8626d25163",15676:"e709b55f8a",15742:"3c6790e93d",15988:"842ccef611",15989:"0b392f2ccc",16099:"6e373d855d",16142:"fe58933ea8",162:"4a51149264",16267:"151d81be93",16280:"bd53b1250a",16297:"7e9911eec6",16355:"21921596e9",16359:"1a50d8a3c6",16373:"56fcb296cb",16375:"5136daa76d",16527:"d7b6443bdc",16623:"bcc2635ffe",16629:"8b31d1e02f",1664:"884a3d8aab",16677:"b674770bb3",16699:"682feebe18",16706:"1c9cb346d9",16737:"f9eb41fdec",16740:"546c5d99c2",16756:"3850d21f6d",17007:"24b985f20d",17101:"3d76010584",17119:"efca525392",17137:"8e1708e707",17147:"393416a513",17174:"2c5e7077e3",17215:"e8bdf51e1e",17237:"bb1ba68cd6",17339:"acaa561628",17395:"d77b43a34a",17449:"bd46a2dd99",17592:"4536115896",17617:"a3175c0ed3",17754:"edd8949a48",17761:"51ae32f17f",17841:"84cea21629",17851:"e1e9ed74b8",17896:"dd004578da",1800:"8cec901b04",18059:"9b65cbc4c7",18139:"639f5143fe",18162:"c1d3e60303",18216:"665fc7d2b4",18247:"896967b689",18310:"3a04f929ce",18317:"fff0e04bff",18334:"61fa475a54",18392:"c43aafa29b",18396:"5c71e0f126",18496:"b92b8ef7e1",18523:"230a6fd7a3",18548:"f42c26745b",18567:"766dc61e07",186:"e70b625c1d",18670:"19ebb5f7e2",18796:"0a4ac9845a",18801:"758b8df879",18845:"ae04963c5f",18906:"9b4a3f862f",18979:"5d7ea6fb95",19071:"a09bb2cdee",19083:"975477e469",19128:"e1982c14a9",19229:"559769bc1f",19252:"945d10045b",1929:"692827cc27",19294:"e0f1d185f8",19425:"dc18c1ee7f",19447:"a152515855",19527:"0b5bcbd8d0",19565:"f52820e2cd",19605:"bb18594869",19619:"dc2d53708f",19638:"c683d6e9df",19652:"c441a154ef",19783:"48da51e729",19792:"964a9dffaa",19802:"7db91621a2",19817:"1f7a618693",19818:"fe10614196",19857:"36a3f2a18f",19858:"0e3bbd08c8",19960:"819667cb4a",19983:"d487a58dee",20038:"fdbe189f84",20129:"1920bc18f8",20162:"27023099b7",20193:"60eb9af940",20299:"6cec4fa092",203:"7bfa8bee0e",20314:"a952b86e67",20328:"395871cdc4",20414:"42b953e387",20420:"e94ce50ec1",20436:"95343f2559",20465:"42f27ee474",20476:"f3e1510b26",20534:"a1e9781e05",20552:"3e2db372bb",20564:"bbcc2b7c44",20660:"9ad2023079",20755:"6cb606aed6",20757:"5ee830f061",20780:"8fc2da617b",20808:"79106d1a2c",20828:"0c61f1b554",20829:"29310b4e10",20886:"899d34e367",21029:"c4ed51d2be",21041:"2aa39716c2",2116:"e40546b6f5",21291:"afb877204d",21384:"a92852c55e",21437:"a6ed2ffd20",21460:"df78ae6417",21466:"6523b46588",21467:"4ea7a90a5d",21509:"ed75d05570",21510:"36097d58be",21591:"5e607f4c22",21651:"b8e2f51da1",2167:"235c8d54ca",21697:"8621facecd",21715:"baeddd2244",21827:"f21ebcb821",21859:"5f5fc4df75",21867:"e027f5cb7b",21892:"46c86a7b0a",22001:"9c6dec9b55",22044:"a4d22b4572",22214:"edb6b2e731",22239:"6cf4029fcd",22284:"d8b9e23bb2",22298:"b8670a074e",2232:"3266ec3984",2235:"c4e0dfb5d5",22457:"0bc5538d11",22482:"0f5d3a70f4",22613:"ff808268df",22631:"f06eaffa94",22726:"de800ad05a",2274:"f044089ea2",22841:"ccec124aed",22932:"ce4baca600",22985:"228b8cef8d",2301:"c3066d4c4d",2311:"8024fa12fb",23116:"3a6c571e4b",23285:"bb225dd5dd",23327:"897f2588d8",23394:"42905c8898",23427:"75a10b3b9d",23755:"8b3012ff21",23776:"75242e54c7",23869:"0070b31204",23871:"f09a70d7fa",240:"8dd4101a83",24001:"9ec4d5dae2",2404:"82490bf74a",2409:"c9063b265f",2414:"2cca508b7f",24151:"cf339028ad",24152:"ef5e4fc5ed",24196:"ca9cf807cd",24237:"53d8b86c36",24283:"1d24d07741",24291:"e4fdcfde2b",24333:"0f885b22ba",2444:"5249a285e3",24493:"07455fa810",24557:"4abaf9383f",24567:"e744e8fad3",24580:"22ab24b191",24742:"3cbc36a812",24801:"be581e1293",24813:"518afdbc9f",24820:"04fd6350a1",24897:"2385d975e5",2491:"9dbade0e90",24940:"f8581ae208",24983:"017cf4cd30",25e3:"89d2009143",25029:"e582ba52bc",25164:"62231fdd33",25234:"8ebd2a00da",25290:"f7de6e0140",25345:"d7f55cbc4d",25437:"8ad6f7e0f8",25559:"1289a24e6d",2557:"00912dd7a7",25576:"4b652ebc9a",25808:"4070db3da7",25884:"f592fcc135",25918:"8d300e1d27",25945:"817f145970",26029:"a39c16120d",26057:"89caba3d03",26059:"55d70b13b7",26078:"e79416a509",26092:"b9c6ee12a3",26094:"2af53fd2b1",26143:"a10e31fe8e",2617:"1a326cf6b8",2621:"f36363f822",26212:"3b157c0c60",26435:"ce4245730c",26460:"4b0004201b",26658:"7fe6bcc275",26765:"19c653f93f",2677:"07399bfa92",26805:"171d2ea0ad",26846:"da55072a9c",26881:"96a865a724",26895:"6f19153e13",26929:"132e22d33e",27005:"28c7a135c3",27157:"fd65a174b6",2717:"8cc857a831",27285:"642d933f24",27308:"b9210f702c",27318:"7a3c6ca2b6",27333:"2d5e03dc5a",27419:"2cd21e425b",27489:"cf47765237",27498:"2f7c4cb609",27537:"65cb865166",27595:"8ecbdaa7ff",27759:"ad7fabd599",27889:"d9a7b0494f",27923:"e837c15645",2795:"71417747dc",28011:"5e3bc5465f",28032:"9fa6ff3a02",28081:"aa56997f17",28084:"63f63ac0b9",281:"0288b3a95e",28102:"96cd548ac1",28166:"0263b0a73e",28183:"c2109a8fba",28185:"393ead64d6",28241:"9d64ecde85",28253:"bd48e0dca5",28376:"564596ac9b",2839:"57cc34d6a5",2860:"61ebb578d1",2861:"1382cbe5ee",28637:"6006cf1583",28701:"f76d9b4c77",28788:"a61d2bcdbd",28934:"148e402838",28939:"e0ca060ab0",28995:"e855c7a026",2903:"d9023e0290",29340:"33c7fcb105",29399:"0131521349",294:"34edea289d",29406:"c606ca0a6f",29472:"62bf2d9932",29522:"1b0cc3a565",29524:"ba085af25d",2958:"794e5c5c8c",29598:"b2a2354c7b",29744:"39b04b8408",29854:"ad96b8946d",29901:"ee43214a89",30002:"647570993c",30035:"7d30f2913f",30038:"e98af19ffa",30068:"35febac7a9",3008:"21e944ef48",30097:"d9a6a0552f",30137:"e0cc2bd7be",30249:"49ca2f12eb",30285:"7616b272fc",30308:"4f53271c29",30332:"7390fad50a",30366:"b23b1b688c",30455:"8bb82ae7b4",30463:"c786c720ce",30491:"5822bab7a8",30506:"f40a92f2ad",30552:"a6d2f113b8",30558:"3cec00eb8e",30576:"6da9411e6e",30623:"53a1dd8272",30660:"a2eb0b1576",30663:"2b2612383d",3079:"a6586c0abb",30801:"f0fd81ab96",30834:"9ac6513c4f",30848:"190c08edff",30861:"d0f7396ba3",3087:"ed30150e3a",30883:"8ca23a60c6",30894:"ec161dd71e",30928:"ce5cc64d9f",31023:"1bc3f64d25",31066:"a9235fa2d9",31127:"15d2ad561f",3118:"c3d5603c85",31299:"9cc839e81d",31343:"f28d96d0d5",31359:"c6e7aa3397",31361:"72224fdc9e",31393:"49e7370e5f",31410:"7a586b11ce",31420:"f71c15e50b",31423:"6009bee27d",3144:"7a11735e19",31513:"8b210eb720",31674:"66acf6ef23",31929:"d7cafaae00",31930:"3215ea126b",3197:"99a09f68dd",31995:"7d63d5cd30",3208:"08ac5918a3",32122:"d5188a2306",32130:"6cd163f1e6",32362:"6761a77ed4",32363:"eea6e751f0",3239:"33fd36c243",32400:"9e0a0406ae",32416:"cdded6e6f6",32430:"87792e1cba",32477:"5f75cea438",32503:"43e0ea79ca",32525:"f9e9461603",32533:"f85f0d8cfb",32557:"dc44caad1f",32634:"67203c5b78",32649:"9c2f202983",32663:"102612f22e",32740:"eb81136ff2",32743:"75c2b85688",32835:"8755dd9a7f",32929:"8b8dc7bad3",33011:"e2b93a6a81",33043:"2127a5721e",33249:"59d1e5e7c0",33298:"67393d8465",33334:"86155eec9e",33582:"b3d85570e6",33713:"dddec8af67",33816:"4edd2242b8",3387:"f604a1b1d9",33919:"47e6da244b",3392:"c301e61634",3400:"39545f0284",3405:"7a1cfb5504",34054:"9b8313d52e",34084:"b31f582e6e",34156:"6520287e5e",3426:"af9d583fd5",34336:"e887250501",34346:"7dc689822e",34369:"c570de6c15",344:"deb0e35f3a",34432:"a6d5845384",34514:"31d64d1081",34640:"6e32beb69f",34769:"725a51c856",34779:"2efa07fdae",34795:"87248cd2c0",34803:"91fac06788",3484:"2cffd339ad",34889:"357d0b1663",34942:"dbf25b81c8",34996:"4b503b1992",35060:"2eb943bb71",35105:"4ca655f836",35139:"1ba87f8151",35171:"b9f6451359",35255:"09f7ad9e91",3526:"8c8993f67f",35276:"ea6f70257f",35324:"d158258bb2",35414:"033583ada0",35424:"da044e1398",35566:"589a0b70bf",35682:"6143dc32c6",35709:"cba56df85c",35748:"14e4d85c29",35810:"cf147848f4",35826:"9a966ab531",35846:"900743da38",35864:"80b6ad1ebb",35875:"91864455ba",35951:"e4b2b024de",3599:"c4cd10a762",35994:"9d154b24c6",36067:"c192be71dc",36087:"ca06b01ac6",36184:"3331234afe",36217:"b882b21c61",36338:"9a6dfa355a",36494:"da9155b056",36513:"fff20326a4",36571:"920326f97f",36583:"71086e3551",36799:"d76caede34",368:"619a84d804",36939:"dc13caab3b",37186:"c95c8bfdaf",37216:"b6c95103f4",3731:"fce0ec64f8",37321:"1fa5c7fce0",37323:"a450432c36",37365:"a2b80e7482",37396:"97a6a4e830",37447:"fc2d487cff",37500:"0e6b47125d",37506:"682c5d3bd2",37519:"f38147ba82",37540:"baeada44dd",37577:"9764803216",37732:"7cf68ff910",37822:"1feba8b6d1",37917:"583c0896ce",38045:"beefe9e2d2",38240:"bbe00bf54c",38331:"98c05c9e52",38354:"ad54c97d57",3836:"044944954e",38387:"6fbde1bb47",38485:"537a3f168c",38516:"1bab0f6d81",38641:"1ab5a919f6",38648:"0004e07a8e",38702:"7d7968d2f3",38718:"f62668ba81",38741:"04d215d2cc",38743:"e42e1833c4",38808:"ed9cc292e5",38827:"2e3839b62a",38846:"724d887df4",3904:"ab3f0121e2",39060:"1ee45b515c",39111:"4f2b889828",39192:"6a5683685c",39209:"ddf54854b3",39243:"288a1dc690",39276:"70b8c96602",3929:"c29a377996",39301:"375872fc14",39317:"e9d460dd80",39484:"569825ab2c",39583:"fb9a58c5c4",39635:"0789244aab",3965:"9b20c34714",39729:"1b23619e90",3975:"6ab663638a",39764:"79c25fbbb4",39849:"f42393683d",39860:"cd97b1d266",39893:"43e3c1a476",39923:"41ab5877c8",39929:"1f58fb3911",39994:"3b8c83a9a3",40003:"7f52f9869e",40029:"75beb0dfcb",4014:"45d4a71530",40151:"85bd9de1dc",40191:"e6f397136e",40219:"7fd3378d02",40226:"ecbad63331",40266:"f7683656f1",40344:"3193ef4539",40348:"fb22b2a0c0",40406:"a76a47bf93",40436:"b6348b4ee5",40521:"d742054ac0",40599:"f842488cd6",40650:"6ac8508416",40681:"fe9052d22c",40703:"ee329a1e70",40721:"603d774ee0",40766:"b273925315",40778:"47023b7a9c",40825:"5bbd4e9552",40831:"de8cb0ab14",40902:"b96bca1296",40922:"14dc42a60a",40995:"b386c2300c",41204:"97bf597448",41220:"62fdcbee4c",41222:"38e11ace53",4143:"e5a51571d4",41451:"990878e155",4147:"5bb085b8d4",41515:"9fa4a90b25",41522:"ce7b4515e6",41636:"6afd4c1cfb",41681:"094d3779bc",41724:"a4490ec220",41733:"41531f5d5c",418:"29b313884f",41826:"e4b2e7cf99",41853:"1b026960ab",41898:"513fbc4ca8",41975:"3ee9dd6282",41994:"3ffc9f1b0d",42081:"ae6f7a8401",42082:"c03f6872a8",42097:"f1e03a49bc",42101:"16b22f504b",42166:"ea2a0692f9",4221:"3d5dcf839c",42261:"a582f08967",42264:"a859cd1c52",42306:"f2165f4bd9",4231:"6d483e9319",42428:"946b31cc6a",42527:"b75914b3f5",42662:"e1d56dc001",42675:"d180607b7d",42676:"a5b3f05503",42769:"90adbb0fb0",42786:"cf88a2ec11",42873:"c48c7a3f6e",42878:"4225395fb2",42956:"a54cd98d6f",42996:"35e24b65cb",43010:"e09bc239a1",43068:"8c2cb5de7c",43138:"1b6ea9bd36",43146:"95b4b0cfa1",43210:"499eec54d8",4322:"083fa834ed",43264:"17fbefb32b",43289:"43d63b9945",43362:"602157738b",43432:"a3a96f66b8",43503:"1ba0ddd2d5",43508:"b418188c43",43559:"c4bc097293",43614:"b52dd65fb2",43616:"1d255762b3",43756:"bdc72dc898",43916:"62d23f04c0",4399:"2164fcc2c5",44e3:"7ea546dc11",44039:"6637b36a52",44050:"74f8dcbabf",44068:"d90d424a03",44078:"14530d91e0",44123:"c4b5c1f11e",44251:"9f50f1f69a",44256:"465e668808",44306:"d32761b633",44368:"c1f45d01bb",44427:"a7cf884a4c",44524:"d1b1088198",44533:"ea2f9e879d",44573:"9bbc828b44",44580:"f297463bb5",44655:"784964161e",44656:"1d73dc7d0d",44722:"1eb9a8ab8d",44786:"b78f218dba",44807:"f72b4bb1f6",4487:"1fcd1534d7",44882:"bdae1ff198",44947:"71d6fbd346",44985:"e85186b363",45038:"4a0d856ecc",45086:"1232bb27db",452:"fac27d47c3",45228:"aba4181957",45299:"77828922e8",45340:"d289ee9bfa",45395:"52cb11eae9",45396:"7d9bdcbfb2",45446:"9ede43e706",45521:"d914bdfcaf",45576:"0b2364d858",45599:"0e4822bf7d",45603:"dcdd606fa9",45622:"b489fe603f",45632:"4cb5c3e016",45689:"65f92bcdf0",45824:"1ee81d53f3",45892:"b92bea1517",45920:"77a93e7cf9",4595:"4a924a378b",45990:"69c2c1cc62",46005:"ed1438286b",46143:"16d5817520",46146:"8d912806d8",4615:"a7d128e7ff",46191:"ee85f5d88e",46297:"9e8b093af1",46311:"03e235bdd9",46349:"fdb08d85c8",46628:"35ef54597a",46676:"0f265db6a0",46700:"38b55fa247",46904:"519d67fa93",46981:"959ab2ed60",47034:"3b147b4f71",47044:"9349aab6c9",47071:"6e687bcee7",471:"795f8f04ab",47104:"d17e73d8e0",47124:"cc5e6be773",47151:"a6f83da672",4722:"3f4368ec0c",47232:"71b756c079",47299:"c7d3b0ff14",47303:"fc89f9909c",4744:"5c6f2d3b08",47572:"2d192e24c0",47641:"e526fd514a",47689:"6d22db0f55",47723:"a180cff940",47814:"cd3fefc7b2",47844:"7bccaef7f5",47966:"5e5ae4d340",48017:"64b10be0a8",48085:"0ea0a19e4c",48154:"82b332101f",48201:"2a88f24006",48247:"8747a5cdf4",48287:"5dfe363bbd",48480:"d1fe8f6c27",48482:"375e51581e",48661:"4901a38730",48684:"1255c4e1f2",48699:"2bae53054f",48712:"42f42f2746",48721:"b49a00ff93",4878:"f7e0bf8d2d",48803:"fa2dae0a49",4897:"010a791c3a",48995:"6d365c528b",48996:"e6285d202d",49:"ec464253e4",49004:"f6e9f90cb3",49120:"23ae7b4b17",49127:"2a91924ce8",49159:"9e7df011d1",49164:"92b38ea456",49326:"237d05e9e7",49478:"ad42d1fba3",49527:"d0aa912dfe",49567:"723eed6740",49578:"15b6827da2",49593:"375420942a",49598:"5aa9aec5e1",49632:"147cc3bfd3",49649:"ff4cd4f6d9",49666:"fd5d12cd8d",49881:"9586a923f2",49884:"52d1645e33",49903:"34c2b77f8e",49941:"d3b6abd9a2",49948:"398a02c388",50079:"3c424dc195",502:"f40333a5e9",50255:"1350c72469",50312:"617fd8cff9",50370:"7e2b435b3c",5059:"c4f1214958",50618:"a6a340dbf6",5069:"6c5d701a21",50837:"7c8731dbed",50865:"c913e61ad7",5087:"a21591e0a4",50906:"51d5e0c4b7",50923:"4bf753441a",50987:"33e49b2b29",51079:"c881d3d4b7",51082:"a471d7b7b8",51129:"22f74f13f4",51192:"4eaaa6d49d",5130:"8494c7ec61",51314:"6c150c34bb",51350:"8cc03bc126",51431:"d65ed5c598",51434:"3c893e238c",51474:"2fe1abebcd",51704:"74dbb7c3dc",5172:"c47aff09fe",51721:"40ff7916f0",51734:"4d92f0485f",51752:"b88cb1d3cf",51823:"3a1a3420f4",51910:"2296597711",51937:"4f3dd4966d",51947:"784e50cf8d",51949:"738e2cb817",51951:"a905962a72",52077:"fbd6302e0b",52091:"01dad95e12",52282:"c21aa35e07",52285:"e35c8fac02",5229:"9362ee6298",52327:"996c033e83",52354:"5182ed8d84",52456:"e6a8eda4ee",52535:"19f8a5ae8f",52594:"afa917ef13",52944:"ca286c43c3",53011:"246dd2d1f1",53134:"ad4827f0cf",5320:"749ab47eb7",53201:"5f2b71ee94",53238:"51612830f9",5329:"1020cca047",53317:"b5b05e8a60",53439:"24529ba779",53448:"5779d73afd",53452:"3b3aaa5070",53494:"9e12014631",53619:"d573b47174",53637:"5079474e51",53716:"bbb1181b54",5373:"374a248dce",53802:"8b65b00136",54025:"971b153131",54068:"c8355b76aa",54083:"da2dd7be0b",54100:"279873da06",54216:"27e1aa2a68",54247:"5a840e101d",54292:"3757f3f5b7",5430:"ea74b4eb8d",54325:"6d51809023",54333:"3cda588690",5434:"f10d2d00b1",54340:"ed6fb5b525",54382:"478008412a",54434:"d9aac94684",54446:"6f32a76015",54508:"1a38b2c73c",54509:"3c8453fea2",54528:"528f0a33c5",5458:"b3a8af2681",54756:"1fa03aa108",54814:"4bd6be707f",54970:"592b990a50",55053:"4598ec213e",55276:"50ecdbfb17",55375:"df89fa538f",55388:"799e19e312",55415:"cb260f97f5",5546:"cd27479cf6",55467:"3dafa11563",55476:"9a4857add6",55492:"b38696adbe",55596:"7e90da4444",55621:"bd1ab6ea10",55690:"1b6cc7ec00",55694:"b7b765e733",55747:"005e832099",5579:"5decc69842",56139:"2d56eff680",56219:"0f405bafec",56228:"2e6c2ed062",56236:"1002666b50",56322:"1e3d445db6",56362:"9f0697d41a",56401:"b960fd5671",56476:"8592791724",56480:"08a9d7d25b",56533:"fe91a86965",56559:"f067e1dec2",56564:"22b691d170",56714:"7391dbd9be",56756:"8ca0b0e8e0",56765:"4167bdaf10",56781:"8983ac4960",56821:"97e5e2b7fb",56877:"f8abf55998",56896:"eb1a165916",56924:"3d3bb0d339",56950:"f06854a818",57056:"6297bb6f4d",57183:"d231cec0ad",57248:"e122951a5e",57264:"bf4bd61c6d",57283:"a9296197bb",57365:"02396b5fcf",57468:"b80c53f770",57471:"aaadc45466",57544:"0d2cd70f56",57564:"1b31226aaa",57705:"ae494fce9e",57720:"14c6211eaf",57743:"aeca6db4e1",57802:"b682a20160",57836:"fa804ec13d",57837:"b79a0c05cd",57843:"327684f641",57896:"dfacfc91cc",57901:"168ecf1b11",57945:"314e6f677d",58058:"7769dc9f5f",58093:"a2504b671d",5813:"bb7043323c",5814:"4945939b8b",58212:"2f63d43255",5822:"7e1e78afcd",5825:"3813e9cecf",58285:"ce0eefb796",58409:"79d2edc27d",58458:"61f01c4b69",58475:"5602567d85",58521:"44279af036",58531:"2d5c62b187",58554:"a0cd449982",58561:"088a36c78f",58624:"70d6b7cdb0",58666:"ec32322695",58676:"809f464748",5868:"6d1116cdab",58708:"c05d1a6e59",58767:"aa774c5b8f",58988:"f85b87eaee",59225:"e85bb7ca45",59236:"86b0284744",59309:"51b518891f",59413:"f6fde1cd83",59481:"aa3c9a7e36",59486:"34c065e599",59500:"99639db0e3",59595:"dfdf51823b",59634:"a25cd3740b",59677:"002630deb0",59700:"caed3b1e1e",59709:"8fb0d9dbec",59794:"f72ae0c8e7",59835:"0c54dfa3cc",59905:"9420d6771c",59925:"a8cb53908e",59937:"b048df24c4",60041:"e21bee7dd1",60058:"a8a8353014",60075:"4d543a6ff9",60145:"208317a383",60160:"d9fdfcdd78",6017:"9ed2f568eb",60175:"34279d2355",60336:"850f89be88",60371:"b01117d59d",60575:"a002462a00",6065:"8c524c3ef6",60663:"029e2847f1",60712:"249f45431c",60731:"a30b930eea",60793:"467074df1d",60834:"1a176f4c61",6097:"5ae5a1ce3e",61013:"ec42df0404",61016:"b394722477",61073:"a99a527d5e",61174:"dd273d6cf2",61287:"7333a003f1",61461:"c40a98d741",61473:"41d8c7265b",61489:"39ccfd001c",61490:"a690dee01c",61491:"e79330685b",61582:"12e795ea60",61584:"460d6c6873",6170:"09bdece3f1",61742:"239649abdc",61773:"0cd42ab60c",6181:"512cc85c14",61824:"ee4069af91",61833:"a6e0c54653",61859:"a4ec0514b2",61906:"491801d083",61928:"a44040c001",61996:"e3e25a8528",62015:"8d7f10e676",62042:"09a335b211",62043:"d2ec4d89df",6215:"55f9048473",62175:"f33f29bae8",62292:"f4544091c0",62379:"19441a9ddc",62411:"68ae1a8ca5",62435:"866bdb75e1",62455:"9ed9980d4c",62459:"f9b31ec2a8",62493:"149a772d43",62524:"19313c6102",62597:"ae0237ef51",62621:"68ef140574",62638:"20eaf4dfe5",62708:"2b85145f7e",62818:"a22e0c66d4",62825:"0969cd3047",62866:"c0efbee14c",62954:"0a1a2513f5",62980:"372df4244b",6310:"a40a0b3771",63124:"5da859b281",63132:"949657f039",6314:"31f3f0d7a7",63163:"541b2bb091",63194:"81eb4317a6",63222:"4af8ab8c57",63247:"cf9d2606ee",63401:"9ae71c0982",63446:"48085b77e4",63484:"04171b7d79",6354:"b60027c67a",63559:"0f6b70d93b",6358:"8fa085904d",63622:"0547178282",63670:"206c90d273",63749:"ed32b44226",63821:"5907a34fab",63839:"c046f92fd0",63866:"33aac41ead",63898:"42a36b960d",63908:"8785570418",63992:"ca81b19837",64146:"8274bb6bcb",64199:"990189602d",6423:"3bc52666f9",64286:"85794c9e78",64334:"306b7207e6",64340:"13f70f05b6",64344:"e81873d80e",64360:"b0e106c16f",64461:"ebfedf0670",64527:"6fe6ac1a8f",6453:"07800ffe0a",64602:"dac7452ed6",64650:"9ed96b5a14",647:"11aa639d24",64737:"68c9e97dfc",64745:"7a9ff42e3e",64883:"d259434997",64999:"f89eb20730",65005:"f0c13af6cc",65009:"7acf25d5c5",65011:"c5c626034a",6503:"8dbba2965f",65055:"fe16939b78",65091:"d9f640e1d4",6514:"837fa6689b",65215:"dbf509a9ba",65238:"8487664f05",65290:"02e8a92b0c",65339:"4a3d810212",65526:"901d38aca6",65668:"2c39368941",65819:"b6eeef3d04",65880:"7ad6aea483",65893:"eb3b8723c0",65923:"e217df806e",65991:"2bcda8406e",65999:"9a400a8431",66044:"253b34d738",66138:"1740409166",66177:"4bd656c568",66309:"3aa29f5e38",66333:"1fca16e960",66383:"c222c83acc",66437:"2b1c80829b",66439:"6afe22094c",66497:"cfa6e119e7",6656:"2201746897",66567:"141b2d0b2f",66579:"f886d909ae",66596:"cb664381be",66709:"b280b0a137",66796:"e09f03bbdd",66804:"3f19ad35c7",66832:"7a72972397",6684:"aaa37897c7",66884:"a174e1776e",6701:"ee7e9e0f69",67067:"27c65d5804",67113:"db096292ff",67115:"c0383910ee",67118:"860c05365e",67133:"3122d667ee",6715:"4013213b6b",67181:"46db7c2cee",67205:"dc03dab733",6723:"dd814d3362",67253:"d66aa601f4",67278:"63d62e5dbd",67285:"1be33a6b17",67482:"2fc1ea115d",67527:"1ecbe467a7",67561:"0956f8becf",67585:"af0b86a7b2",67604:"c750d2b583",67776:"6b25d89a12",67927:"7c5e104915",6801:"69567f9f48",6803:"d5fc8c7c73",68077:"9b652e0056",68112:"7a10a6b86b",68152:"4a8e327980",68208:"6d87754d16",6821:"20234783a8",68235:"56cae7c91b",68391:"984a65899b",68499:"6490205104",68669:"79f0d92d78",68679:"c1facc35e9",68710:"71119fdae9",68728:"4e21781c5b",6885:"6d945452d9",68886:"d379535eef",68908:"c8db4eeab6",68909:"7cf46f80ec",68961:"e730c41227",69024:"1cbbe667c6",69074:"463b2f6e0a",69078:"9c3a190427",69110:"33a76c9b8f",69262:"27cca76aef",69294:"c656fec090",69343:"494da45f2b",69429:"c9e8764587",6943:"30c110b871",69438:"6347b4e91c",69456:"4a8189d46e",69575:"66b6756e90",69628:"81cf51419c",69672:"39324b61ef",6983:"1b59dd56f1",69928:"d9318264c4",69932:"bb4a002d82",69998:"d0e9dfa17d",70010:"f682a8570d",70092:"3a7a28e34b",70104:"d5a568ab87",70124:"909b18ead1",702:"64f85a4b5f",70227:"ba75173200",70467:"dfbcee9a52",7047:"c89a81d649",70522:"f6b5b2e15c",70549:"6169ac4c38",70573:"75606712c3",70587:"5570b108e0",70663:"f26bed45b3",70669:"bf00fae0c3",70684:"c10aec8bee",70698:"68f6d9f4d6",70796:"ae8f05f46e",70946:"25158d50da",70989:"0250ec9fda",71088:"bfebf574aa",71144:"a09139283f",71216:"3cc69d1ea6",71322:"e04b9faa66",7135:"aec312bffb",71434:"7828f0796f",71475:"4d618c9064",71549:"41213e1b80",71574:"3dbb9cb135",71579:"745fc65e68",71673:"cc93bf791b",71731:"d62c0eb3d7",71794:"81f67c410e",71806:"fc86819a65",71854:"05712c2b7f",71907:"726ccc15a3",71927:"27e45b208b",72110:"870fc3df1d",72138:"c728a3ee4d",72139:"0bc27246b5",7220:"0a9f1f37c5",72236:"b33b8cb552",72237:"82a42c2fe9",72290:"88649faf8f",72436:"1705f7d75e",72527:"52e0a40206",72535:"471c181c7d",72561:"97f1f008ee",72587:"8fc902d9c8",72593:"b40630e526",72666:"1094595343",7272:"cdf26deb55",72742:"e8d045826b",72774:"f0d2759266",72897:"229e3c6a40",72954:"aa000ac9a3",72994:"c10432d4bf",73091:"67045040f2",73312:"627d2c2e53",73336:"06e2a1a15e",73436:"1671836a53",7349:"950145a5a8",73559:"c7073cd4b5",73564:"fe2c52699e",7360:"1a615f0357",73733:"ad23773991",73833:"1e88bad653",73903:"5b25130dda",73938:"85e0e501c6",7394:"000789b631",741:"011142e9a9",74324:"fd35a60f82",74330:"8b3867a6ca",74339:"aa59e28e3f",74343:"a8386f259b",74400:"f1aee56b16",74467:"ffe73b9177",74547:"2660c951ee",74654:"bcf06724aa",74670:"67736e0f72",74692:"56a2b16e6a",74809:"a6f0dc68b2",74873:"229301d609",74882:"195adf41e6",74916:"7ddea44498",74973:"7c6a7b4a27",75071:"24dfd88c92",75193:"3be32b2f9c",75216:"b0ab72b97d",75377:"ec08b5a9dd",75593:"33b4a6c9a8",7565:"63edebc123",75729:"cbb858bded",75745:"fa1915b475",7578:"1d022536c8",75803:"e8ab40b8be",75868:"d9d7e30eac",76080:"09442f627a",76091:"04ee9433e7",76102:"a57ba8d4b3",76170:"58874a60fa",76195:"c32b9296e7",76224:"0c65997150",7624:"e70fa6d27d",76267:"3ba7da724f",76314:"e050576c64",76351:"80e02da0e4",76360:"494b9dd2d2",76621:"04873b6770",76713:"b90c1f6340",76801:"77ac472b69",76869:"4ed95465a3",76873:"6a801afbd5",77133:"e2dab9d299",77144:"f47fc3f826",77153:"27bd1403b6",77206:"d7bfac8a08",7723:"1dd628d214",77230:"52cab8e041",77255:"8ff2bf2f3e",7729:"cc685424fc",77302:"9a9fdd4b6f",77307:"cc921c8ae8",77311:"2267cbae29",77382:"49e5a77215",77396:"69ff11d018",77397:"8061cd013b",77419:"743cab1469",77424:"d42446c2a2",77430:"34fbbf6de1",77515:"7ca1976cf8",77548:"8f93b28931",77648:"9b68747e8a",77670:"95fe4e5b08",77676:"e29850f454",77796:"4a967081b0",7786:"47ef7ba9df",77879:"43639c6376",77909:"76f8167de9",77935:"475eb9ec9f",7795:"80cb84f354",77952:"291d2ecde0",78063:"022d594bab",78152:"b77d620b15",78215:"37c4baa948",7823:"2b59eea94e",78255:"444c542cbd",78273:"2e22928989",78510:"f5551a9552",78551:"90faf80799",78562:"5c35799085",78585:"e8e1757a44",78597:"c35694b97a",78719:"03b3f8987c",7876:"44752d8ff2",78821:"c683a61b58",78878:"8a67202816",78930:"13709116ca",78949:"c301013b61",79001:"54df49777d",79096:"04a2e1c3c5",79264:"f5252a10c0",79367:"a4047d1319",79404:"1b38cebc3a",79413:"75e9b4566f",79416:"6ea8e84bae",79421:"13bd58416c",79427:"16ae03255f",79555:"cea6a64323",79574:"3521975dfd",796:"03385881f9",79652:"824056528b",79694:"130bfb3b31",7974:"050d4cf191",79795:"1a93962c98",79847:"fde4771580",79914:"c02ddff0d8",79926:"295118323b",80008:"80c8b18f41",80059:"d08fcf4f3f",80076:"0d7632d9d4",80140:"c3bb4940bb",80199:"e67e970d3d",80294:"57770ee8a3",80310:"dff0fa8efa",8037:"74064b9d2e",80476:"c84ac8ce29",80688:"47a7584152",80714:"71e4c883d4",80726:"24d909c689",80745:"aed6a4f51f",80859:"2c8167e2d4",80887:"0abf71e55a",8089:"30c8cbab51",80949:"ab60bfa003",81069:"bd7dea439f",81114:"4218a38bf8",81131:"d4f0246a2f",81157:"efad7b4d68",81207:"db2d6f4124",8122:"6237b3e99d",81255:"7ead863297",81275:"c79d7a187f",813:"988b5cec17",81636:"578d61f9da",81656:"ec2f862fcb",81909:"5d0be14f25",81923:"f29ad048fc",81988:"5e67184369",82010:"c7dd5f895b",82118:"6a5e3c30af",82133:"0598315e60",82208:"351c0bac8f",82376:"651243c977",82401:"e308cccecc",82424:"4ce321dd75",82442:"17c651133e",8249:"b48cf94c2b",82497:"40a678468e",82557:"896990cd4c",82594:"28288afde1",82609:"83a623007a",82623:"d98bb62ef3",82637:"2b412781c8",82739:"d4956942a5",8279:"a20480f461",82996:"bbb8f6307e",83003:"a107ef926b",83045:"5ce2711cd1",83095:"258172ad3c",83161:"588b423f70",83341:"0d6f261a8a",83594:"fa4839acb9",83689:"6ca6cf6b2d",8370:"38dd09d6fe",83747:"69ad5a277e",83791:"d97b55e862",8381:"ddfe2ab8e2",83942:"0add4cb77e",83950:"f88e5e735c",84076:"665d34ab5b",84110:"e8afe159e2",8417:"fe2c893548",84192:"78bab52f04",84275:"42fbdba9f5",84329:"cf4095693c",84330:"6863eb6d71",84360:"d99e4df2f3",84373:"9bd55c05ea",84436:"230a16427a",8452:"490be35682",84596:"e1aba7a8a5",84661:"220a3159c8",84730:"53b4e7dbe6",84796:"27a833906e",84813:"db78ed193e",84981:"fb89d87fc9",85019:"a52588f806",85053:"b160c46fea",8547:"80b50ee87d",85510:"2bf2a77442",85578:"45089efb5b",85604:"038bc8e1e9",85633:"c38a89f453",85662:"8849ee156a",85811:"b88ab07f21",85834:"dff68cae10",85851:"31c0455b34",85877:"b57df011a6",85947:"55779aeed6",86099:"97e0d9c843",86131:"230f01ee44",86170:"3801673aef",86198:"fd63d4ab3b",86226:"a29d3668fd",86241:"2729e8d0f6",86245:"411a9e6d50",8625:"5684b8c631",86276:"1d0a13564c",86352:"def10291cc",86495:"cb918551db",86557:"9ef529523b",86565:"a009c96c9b",86579:"b0a961cfda",86581:"d2e5073098",86657:"df7e0bcdc1",86740:"6ae1457703",86761:"ea14a8182e",86792:"c9f077276a",86830:"3ee44b2b4a",8693:"d2e20728d3",86936:"4408e5c443",86971:"cc1e0cec2e",87045:"03217e0934",87053:"ac809cb893",87137:"ebbbf0773e",87166:"28d99c8572",87182:"098ff911a6",87247:"4b626c467a",87250:"473ed7636b",87333:"26120a454b",87347:"d189064c28",87453:"09678e39da",87493:"d076edf85d",87543:"26db33595b",87596:"8cb04b17a7",87818:"3d2f99d893",8782:"d5e510dc5c",87853:"3eec79aa73",87869:"b24b123e91",87887:"6d6ae1ac19",87955:"594688d314",87991:"fcc0d969e9",88004:"74bc7f4a93",88044:"4e8e2532af",8817:"0065e3a7e2",88171:"0c5dada471",88253:"459c315150",88261:"089ba54d07",88263:"580d54dcbe",88276:"96930a626b",88300:"413884bb75",88330:"5086e7f5e7",88351:"32c735c107",88458:"4f7f3f3181",88480:"2293654137",88730:"5dc1b0f52e",88755:"b1e780a27a",88928:"85d435d662",88948:"a639b51d4a",89e3:"8aa521b156",89120:"e408d6c3d7",89126:"619786b30b",89140:"e7e7f93058",89160:"8171eda5fe",89197:"6c460ccb38",89253:"1a4f1aedd6",89261:"ee4d8e81f9",89372:"63b57831c0",89392:"aef7cddc8d",89394:"a1ca50fd4a",89450:"5ec3a44644",89468:"9fbc6c5f48",89508:"223aa7bc80",89534:"022b82d907",89547:"c948efe9cb",8955:"294375e898",8975:"d49b73e9a4",89779:"8d2a37be80",89866:"2cd14b2f64",89908:"f7cbf474ad",89981:"07c41afa2f",90047:"e7c740a5ba",90163:"f3a458e40b",90292:"ccd7af46a7",90317:"253d67b052",90405:"aa556628cb",90415:"53447af188",90487:"bc8ccd92ba",90506:"3380918f79",90513:"7f7d3f1fe6",90524:"cc1b7e8483",90672:"da131e34c4",90711:"30e736cca4",90727:"f7deb9fb4d",90813:"2446d766d0",90837:"738748f56c",90873:"4d2a7066b7",90964:"64f5c0799f",91047:"58fb52ead4",91076:"1c096490b8",91100:"6ad27b2f70",91103:"08795c3ec4",91119:"4a26034b9a",91245:"5e3b335817",91255:"93caee73bf",91261:"c3dc0b0948",91292:"59f3739a36",91369:"32a4c428ba",91415:"047027a2ae",91621:"c4de28907c",91656:"c8b3e10170",9167:"4977b9f089",9169:"0f02e2a450",9170:"f3044437b3",91731:"de1d4107d6",91803:"56785a4a12",91831:"621e10e1b7",91916:"be16804d35",91941:"20e7393c89",91955:"e0bbd6807d",92096:"4232757bdf",92155:"a3bfcf6e6c",92156:"59c32defd1",92200:"3edf4dd896",92230:"88f96f9bdb",92244:"34581c8bc7",92255:"c62f257086",92294:"0f7d6fd48a",92314:"e8596cc3e0",92381:"86121e55fe",92413:"534bb1a4f9",92643:"ad30d8440e",92679:"a23318d510",92717:"0a098ea59c",92739:"54506fbcc9",92795:"637b52a3e1",92837:"18743489b6",92853:"0ca471bd5d",92861:"659a626b17",92890:"c8bf2798b9",92977:"45ab8d1b4b",93116:"343d23089a",93154:"e5c2e1a337",93325:"2efd4c5206",93336:"1eec3451a3",93483:"2c25d224d2",93512:"8eaa159a0c",93516:"6b9780c7e9",9352:"d8ab93ffe1",93536:"5a77c64b18",9365:"58d910d08b",93683:"c52c480190",9376:"7c0db7c2bc",93834:"f0f9cb0812",93902:"fc3ea689f0",94084:"ca696f5e62",9415:"0431870d87",94193:"d98339808d",94297:"ced2e5e86b",94317:"61621139ec",94329:"6b29cd6695",94345:"64257a2031",94405:"b700550b68",94426:"17bf262434",94427:"bb2edc0020",94440:"3556179085",94467:"f9b9220c59",94512:"e3fa77b406",94521:"d7b945f66b",94560:"02a23cc0c1",94565:"cf6220bb29",94596:"198ad3da9e",94629:"ffd08f40a5",9476:"1c7d75dda4",9479:"009dcc9ba2",94840:"dc18ab102c",94843:"6030402d7c",94862:"8667c20ac3",94867:"7b548c7152",95014:"7e135a5916",95143:"886641147e",9529:"df19b634cc",953:"d5d76a2a4c",95353:"2bb444942e",95406:"f0956f21c8",9542:"9f223f1991",95426:"ca8f352e24",95473:"a120dbdbab",95499:"727e26181c",95600:"18806807da",95669:"7ece824d2c",95696:"7b16f3f27f",95889:"86018147cf",95913:"ee2c0f3d80",96:"888d55f122",9601:"90f30e4cf1",96075:"c89d6611d9",96139:"8df3b54215",96176:"a058851c25",96279:"1449b7639f",96284:"9d23c520b2",96285:"1f7e9dcb1a",96394:"318de0d344",96448:"805f3da02b",96498:"852dfb5a22",96503:"95b98598ea",96547:"cb5ccd463f",96580:"2df3fb20d0",96713:"97b1fb73ad",96714:"2a32670d46",96745:"57ca92aeb0",96845:"4b3ea94893",96873:"0cb5c6a991",9689:"a1f30260c6",96903:"b84d63f3cc",96922:"65e2fbec75",96929:"2e33e17cba",96954:"37f2c39593",96956:"8468b1bcc8",9697:"14ce65a0b9",97108:"83f859739e",97125:"5d1b488b2d",97137:"e1fecaafb5",97154:"7fb0f34ec1",97280:"b3bd449514",97303:"dddcc136d1",97345:"8031bde88a",97426:"b7f6608995",97553:"f6c9d33a97",97627:"d77fe265cb",9767:"90a01d1bb0",97710:"ce19d086d5",97720:"d94aa0ecff",97747:"71f35b456c",9783:"c3ae15983b",97871:"6eca40dbe2",97898:"2b06e26fa1",97914:"d868490a41",97925:"cc7c0a3cdd",98009:"6a01f87ed2",98073:"8625c2f898",98132:"6fd28dfcfc",98163:"4b806cbbc3",9828:"c2d610a03a",98335:"399795d644",98364:"2c61dc1775",98510:"afb8a4f405",98515:"1042da11ca",9853:"45ed6a03f9",98629:"b81a00a4c1",98679:"f33746269e",98695:"844c3df0a8",98735:"81010b10dd",98756:"67d86cf9ac",98763:"0fa0d858c4",98792:"03b6ca3733",98815:"5aec921884",98831:"41872df1e1",98839:"61b5d7ee2b",98938:"29d7734898",98955:"98c4980215",99020:"e562648f5c",99076:"b74ea84c82",99116:"61ebddb25f",99134:"1f59e2cada",99161:"ddccb7aff7",99287:"3f6fdf7812",99304:"83dee7e5ee",99325:"ae34a11332",99353:"94be6973b5",99384:"fb3bad32ee",99385:"146c6143ab",9939:"04622bbb98",99427:"e967be36bb",99495:"d71db498c3",99513:"f60ae09432",99561:"e90dcf738a",99627:"521f4601f2",99641:"59a240f0f8",99654:"71e45039fb",99669:"fb735858a9",99673:"2756d33958",99694:"00b9b33ffd",99792:"b72ca6bfa5",99940:"09639549e4"})[e]+".js",d.miniCssF=e=>"static/css/async/"+e+".8ba09e32d6.css",d.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n={},a="newapi-web:",d.l=function(e,t,i,o){if(n[e])return void n[e].push(t);if(void 0!==i)for(var s,r,l=document.getElementsByTagName("script"),c=0;c{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.nc=void 0,i=[],d.O=(e,t,n,a)=>{if(t){a=a||0;for(var o=i.length;o>0&&i[o-1][2]>a;o--)i[o]=i[o-1];i[o]=[t,n,a];return}for(var s=1/0,o=0;o=a)&&Object.keys(d.O).every(e=>d.O[e](t[l]))?t.splice(l--,1):(r=!1,atypeof document){var u=function(e,t,n,a,i,o){var s=document.createElement("link");return s.rel="stylesheet",s.type="text/css",d.nc&&(s.nonce=d.nc),s.href=t,s.onerror=s.onload=function(n){if(s.onerror=s.onload=null,"load"===n.type)a();else{var o=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.href||t,l=Error("Loading CSS chunk "+e+" failed.\\n("+r+")");l.code="CSS_CHUNK_LOAD_FAILED",l.type=o,l.request=r,s.parentNode&&s.parentNode.removeChild(s),i(l)}},n?n.parentNode.insertBefore(s,n.nextSibling):document.head.appendChild(s),s},h=function(e,t){for(var n=document.getElementsByTagName("link"),a=0;an=o[e]=[t,a]);t.push(n[2]=a);var i=d.p+d.u(e),s=Error();d.l(i,function(t){if(d.o(o,e)&&(0!==(n=o[e])&&(o[e]=void 0),n)){var a=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;s.message="Loading chunk "+e+" failed.\n("+a+": "+i+")",s.name="ChunkLoadError",s.type=a,s.request=i,n[1](s)}},"chunk-"+e,e)}},d.O.j=e=>0===o[e],s=(e,t)=>{var n,a,[i,s,r]=t,l=0;if(i.some(e=>0!==o[e])){for(n in s)d.o(s,n)&&(d.m[n]=s[n]);if(r)var c=r(d)}for(e&&e(t);ld(53978));m=d.O(m)})();