Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/fixes/16658-hi-untranslated-ui-strings.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- **fix(i18n):** UI strings of the Hindi locale were still English (the quota-share time windows, the Codex cooldown and paid credits, the proxy subscription core errors, the per-model concurrency caps, the request timeline labels); they are now translated with the wording of the neighbouring hi keys ([#16658](https://github.com/diegosouzapw/OmniRoute/pull/16658)) — thanks @pacocartones.
122 changes: 61 additions & 61 deletions src/i18n/messages/hi.json
Original file line number Diff line number Diff line change
Expand Up @@ -5268,11 +5268,11 @@
}
},
"providers": {
"codexReleaseCooldown": "Clear local cooldown",
"codexReleaseCooldownHint": "Allow this Codex account to be tried again. Does not redeem a reset credit or change upstream limits.",
"codexReleasingCooldown": "Clearing…",
"codexCooldownReleased": "Local cooldown cleared.",
"codexCooldownReleaseFailed": "Could not clear cooldown. Please try again.",
"codexReleaseCooldown": "स्थानीय कूलडाउन साफ़ करें",
"codexReleaseCooldownHint": "इस Codex खाते को फिर से आज़माने की अनुमति दें। यह रीसेट क्रेडिट का उपयोग नहीं करता और अपस्ट्रीम सीमाएँ नहीं बदलता।",
"codexReleasingCooldown": "साफ़ किया जा रहा है…",
"codexCooldownReleased": "स्थानीय कूलडाउन साफ़ हो गया।",
"codexCooldownReleaseFailed": "कूलडाउन साफ़ नहीं हो सका। कृपया फिर से प्रयास करें।",
"title": "प्रदाता",
"Account Deactivated": "खाता निष्क्रिय कर दिया गया",
"allProviders": "सभी प्रदाता",
Expand Down Expand Up @@ -5543,7 +5543,7 @@
"modelsImported": "{count} मॉडल आयात किए गए",
"allModelsAlreadyImported": "सभी मॉडल पहले से ही आयातित हैं",
"noNewModelsToImport": "आयात करने के लिए कोई नए मॉडल नहीं — सभी मॉडल पहले से ही रजिस्ट्री या कस्टम मॉडल सूची में हैं",
"localCatalogFallbackStatus": "Couldn't reach the provider's model list — showing the built-in catalog",
"localCatalogFallbackStatus": "प्रदाता की मॉडल सूची तक नहीं पहुँचा जा सका — अंतर्निहित कैटलॉग दिखाया जा रहा है",
"skippingExistingModels": "{count} मौजूदा मॉडल छोड़े जा रहे हैं",
"autoSync": "स्वतः-सिंक",
"autoSyncShort": "सिंक करें",
Expand Down Expand Up @@ -6729,16 +6729,16 @@
"searchByModelAria": "मॉडल द्वारा खोजें",
"selectSupportedEndpoint": "कम से कम एक समर्थित एंडपॉइंट चुनें",
"antigravityClientProfileHarness": "हार्नेस / CLI",
"rateLimitOverridesModelConcurrencyLabel": "Per-model concurrency caps",
"rateLimitOverridesModelConcurrencyLabel": "प्रति-मॉडल समवर्तीता सीमाएँ",
"rateLimitOverridesModelConcurrencyPlaceholder": "glm-5=1\nglm-4.7=3",
"rateLimitOverridesModelConcurrencyHint": "Optional: one model=cap per line, matched against the exact upstream model id. Queues excess requests locally; blank means no per-model cap.",
"rateLimitOverridesModelConcurrencyInvalid": "Invalid per-model concurrency entry \"{entry}\" — use model=cap with a whole number from 1 to {max}.",
"codexPaidCreditsShort": "Extra credits",
"codexPaidCreditsToggleTitle": "Allow paid Codex credits after subscription quota runs out (additional charges may apply)",
"codexPaidCreditsEnabled": "Codex paid credits enabled (additional charges may apply)",
"codexPaidCreditsDisabled": "Codex paid credits disabled",
"failedUpdateCodexPaidCredits": "Failed to update Codex paid-credit policy",
"allowCodexPaidCreditsLabel": "Allow paid Codex credits",
"rateLimitOverridesModelConcurrencyHint": "वैकल्पिक: प्रति पंक्ति एक model=cap, अपस्ट्रीम मॉडल आईडी से ठीक-ठीक मिलाया जाता है। अतिरिक्त अनुरोध स्थानीय रूप से कतार में रहते हैं; खाली का अर्थ है कोई प्रति-मॉडल सीमा नहीं।",
"rateLimitOverridesModelConcurrencyInvalid": "अमान्य प्रति-मॉडल समवर्तीता प्रविष्टि \"{entry}\" — model=cap का उपयोग करें, जहाँ cap 1 से {max} के बीच की पूर्ण संख्या हो।",
"codexPaidCreditsShort": "अतिरिक्त क्रेडिट",
"codexPaidCreditsToggleTitle": "सदस्यता कोटा समाप्त होने के बाद सशुल्क Codex क्रेडिट की अनुमति दें (अतिरिक्त शुल्क लग सकते हैं)",
"codexPaidCreditsEnabled": "सशुल्क Codex क्रेडिट सक्षम हैं (अतिरिक्त शुल्क लग सकते हैं)",
"codexPaidCreditsDisabled": "सशुल्क Codex क्रेडिट अक्षम हैं",
"failedUpdateCodexPaidCredits": "सशुल्क Codex क्रेडिट नीति अपडेट नहीं हो सकी",
"allowCodexPaidCreditsLabel": "सशुल्क Codex क्रेडिट की अनुमति दें",
"allowCodexPaidCreditsDescription": "Allow this account to use paid credits after its subscription quota reaches the cutoff. Requires available credits reported by OpenAI; may incur charges. Spark limits and upstream cooldowns still apply. Credit availability is checked even if quota preflight is disabled."
},
"settings": {
Expand Down Expand Up @@ -7089,10 +7089,10 @@
"NEEDS_CORE_NOT_CONFIGURED": "इस सदस्यता में ऐसे नोड्स हैं जिन्हें स्थानीय प्रॉक्सी कोर (SS/VMess/Trojan/VLESS) की आवश्यकता है; जब तक आप स्थानीय-कोर SOCKS5 एंडपॉइंट को कॉन्फ़िगर नहीं करते, तब तक उन्हें रूट नहीं किया जाएगा।",
"NO_USABLE_NODES": "सदस्यता से कोई उपयोगी नोड्स प्राप्त नहीं हुए (http/https/socks5 या स्थानीय कोर एंडपॉइंट वाले नोड्स)।",
"SELECTOR_SWITCH_FAILED": "प्रॉक्सी-कोर नियंत्रण कॉल विफल रहा; पिछला मार्ग सक्रिय रहता है। नियंत्रण URL और सीक्रेट जाँचें, फिर रीफ़्रेश करें।",
"CORE_CONFIG_NOT_GENERATED": "The local-core config was not generated; the adopted file is unchanged. Check the path and refresh.",
"CORE_CONFIG_NOT_GENERATED": "स्थानीय कोर कॉन्फ़िगरेशन नहीं बना; अपनाई गई फ़ाइल अपरिवर्तित है। पथ जाँचें और रीफ़्रेश करें।",
"CORE_CONFIG_NOT_APPLIED": "उत्पन्न मूल कॉन्फ़िगरेशन अपनाई गई फ़ाइल को प्रतिस्थापित नहीं कर सका; इसके बजाय उसके बगल वाली प्रति बनाए रखी गई।",
"CORE_RELOAD_UNDECLARED": "No reload channel is declared for the replaced core config. Declare one: a control URL on a compatible core, the OMNIROUTE_PROXY_CORE_RELOAD_COMMAND variable as a JSON argument array, or the value external for an outside observer.",
"CORE_RELOAD_FAILED": "The proxy core reload failed; the new config file stays in place. Check the reload command, then refresh.",
"CORE_RELOAD_UNDECLARED": "बदले गए कोर कॉन्फ़िगरेशन के लिए कोई रीलोड चैनल घोषित नहीं है। एक घोषित करें: संगत कोर पर कंट्रोल URL, JSON आर्गुमेंट ऐरे के रूप में OMNIROUTE_PROXY_CORE_RELOAD_COMMAND वेरिएबल, या बाहरी पर्यवेक्षक के लिए मान external।",
"CORE_RELOAD_FAILED": "प्रॉक्सी कोर रीलोड विफल रहा; नई कॉन्फ़िगरेशन फ़ाइल अपनी जगह रहती है। रीलोड कमांड जाँचें, फिर रीफ़्रेश करें।",
"CORE_CONFIG_ENTRIES_SKIPPED": "उत्पादन के दौरान कुछ प्रविष्टियाँ छोड़ दी गईं। सर्वर लॉग देखें।"
},
"description": "अपना प्रॉक्सी सदस्यता लिंक चिपकाएँ. एक बार सक्षम होने पर, ट्रैफ़िक को प्रॉक्सी पूल के माध्यम से वैश्विक या नियम (निर्दिष्ट प्रदाता) मोड में रूट किया जाता है। सदस्यता नोड्स स्वचालित रूप से प्रॉक्सी पूल में सिंक हो जाते हैं और मौजूदा मतदान, स्वास्थ्य-जांच और एंटी-लीक तंत्र का पुन: उपयोग करते हैं।",
Expand Down Expand Up @@ -7180,17 +7180,17 @@
"lastSwitchMember": "सेवारत सदस्य",
"nextSwitch": "अगला संभावित स्विच",
"nextSwitchNow": "अभी",
"coreConfigPath": "Core config file",
"coreConfigPath": "कोर कॉन्फ़िगरेशन फ़ाइल",
"coreConfigPathPlaceholder": "/var/lib/omniroute/sing-box/config.json",
"coreConfigPathDesc": "Absolute .json path (lowercase extension). Empty = no generation. Each sync writes '<path>'.generated beside the adopted file, never into it.",
"lastSwitchKind": "Switch reason",
"coreConfigPathDesc": "निरपेक्ष .json पथ (छोटे अक्षरों में एक्सटेंशन)। खाली = न बनाएँ। हर सिंक अपनाई गई फ़ाइल के बगल में '<path>'.generated लिखता है, उस फ़ाइल में कभी नहीं।",
"lastSwitchKind": "स्विच का कारण",
"switchKind": {
"ip_quota_429": "quota",
"proxy_unreachable": "unreachable",
"transport": "transport",
"slow": "slow"
"ip_quota_429": "कोटा",
"proxy_unreachable": "पहुँच से बाहर",
"transport": "ट्रांसपोर्ट",
"slow": "धीमा"
},
"coreReloadAppliedBy": "Applied by: {mode}",
"coreReloadAppliedBy": "लागू करने वाला: {mode}",
"coreBinaryPath": "कोर बाइनरी पथ",
"coreBinaryPathPlaceholder": "/usr/bin/sing-box",
"coreBinaryPathHelp": "वैकल्पिक: अपनाई गई फ़ाइल को प्रतिस्थापित करने से पहले कोर बाइनरी के साथ उत्पन्न फ़ाइल को सत्यापित करता है। इसके बगल में लिखते रहने के लिए खाली छोड़ें। न होने पर निर्देशिका बना दी जाती है।"
Expand Down Expand Up @@ -10123,10 +10123,10 @@
"lastRefreshed": "अंतिम बार रीफ़्रेश किया गया",
"providerQuota": "प्रदाता कोटा",
"providerQuotaHomeHint": "कनेक्टेड खातों में लाइव स्थिति",
"codexPaidCreditsLabel": "Paid Codex credits",
"codexPaidCreditsAvailable": "Available (balance not reported)",
"codexPaidCreditsUnavailable": "Unavailable or spending limit reached",
"codexPaidCreditsUnlimited": "Unlimited"
"codexPaidCreditsLabel": "सशुल्क Codex क्रेडिट",
"codexPaidCreditsAvailable": "उपलब्ध (शेष राशि की रिपोर्ट नहीं)",
"codexPaidCreditsUnavailable": "अनुपलब्ध या खर्च सीमा पूरी हो गई",
"codexPaidCreditsUnlimited": "असीमित"
},
"modals": {
"waitingAuth": "प्राधिकरण की प्रतीक्षा की जा रही है",
Expand Down Expand Up @@ -12147,33 +12147,33 @@
"accountQuotaNone": "—",
"logTitle": "उपयोग लॉग",
"logEmpty": "अभी तक कोई उपयोग नहीं",
"schedulesTitle": "Time windows",
"schedulesHint": "Say when OmniRoute may use these accounts, and how much it may take. Allow windows act as a whitelist: add one and the pool is closed outside it. A block window is a blackout and always wins over an allow window it overlaps.",
"schedulesEmpty": "No time windows — the pool is available around the clock",
"schedulesAdd": "Add window",
"schedulesRemove": "Remove window",
"schedulesEnabled": "Window enabled",
"schedulesMode": "Window type",
"schedulesModeAllow": "Allow",
"schedulesModeBlock": "Block",
"schedulesFrom": "From",
"schedulesTo": "To",
"schedulesReserve": "Keep free",
"schedulesReserveHint": "Stop using the account once less than this share of a quota window is left. Counts everyone's usage, so someone else working on the same account pushes OmniRoute out first. Add one floor per window: a weekly reserve that protects the whole week would throttle every short burst if it also governed the 5h window.",
"schedulesReserveNone": "no floor — OmniRoute may use the account down to empty",
"schedulesReserveAdd": "Add floor",
"schedulesReserveRemove": "Remove floor",
"schedulesReserveWindow": "Quota window this floor guards",
"schedulesReserveWindowAny": "any window",
"schedulesBudget": "OmniRoute budget",
"schedulesBudgetHint": "How much OmniRoute itself may spend in this window. Counts only its own traffic, so usage by anyone else neither eats nor inflates it.",
"schedulesBudgetUnit": "Budget unit",
"schedulesBudgetWindow": "Budget window",
"schedulesTimezone": "Time zone",
"schedulesPriority": "Priority",
"schedulesSaved": "Time windows saved",
"schedulesSaveError": "Could not save the time windows",
"schedulesLoadError": "Could not load the time windows",
"schedulesTitle": "समय विंडो",
"schedulesHint": "बताएँ कि OmniRoute इन खातों का उपयोग कब कर सकता है और कितना ले सकता है। अनुमति विंडो श्वेतसूची की तरह काम करती हैं: एक जोड़ें और पूल उसके बाहर बंद रहता है। ब्लॉक विंडो एक ब्लैकआउट है और जिस अनुमति विंडो से ओवरलैप करती है उस पर हमेशा भारी पड़ती है।",
"schedulesEmpty": "कोई समय विंडो नहीं — पूल चौबीसों घंटे उपलब्ध है",
"schedulesAdd": "विंडो जोड़ें",
"schedulesRemove": "विंडो हटाएँ",
"schedulesEnabled": "विंडो सक्षम",
"schedulesMode": "विंडो प्रकार",
"schedulesModeAllow": "अनुमति दें",
"schedulesModeBlock": "ब्लॉक करें",
"schedulesFrom": "से",
"schedulesTo": "तक",
"schedulesReserve": "खाली रखें",
"schedulesReserveHint": "जब कोटा विंडो का शेष हिस्सा इस अनुपात से कम रह जाए तो खाते का उपयोग रोक दें। इसमें सभी का उपयोग गिना जाता है, इसलिए उसी खाते पर कोई और काम करे तो OmniRoute पहले बाहर हो जाता है। प्रति विंडो एक न्यूनतम सीमा जोड़ें: पूरे सप्ताह को बचाने वाला साप्ताहिक रिज़र्व 5 घंटे की विंडो को भी नियंत्रित करे तो हर छोटे उछाल को रोक देगा।",
"schedulesReserveNone": "कोई न्यूनतम सीमा नहीं — OmniRoute खाते को खाली होने तक उपयोग कर सकता है",
"schedulesReserveAdd": "न्यूनतम सीमा जोड़ें",
"schedulesReserveRemove": "न्यूनतम सीमा हटाएँ",
"schedulesReserveWindow": "वह कोटा विंडो जिसे यह न्यूनतम सीमा सुरक्षित रखती है",
"schedulesReserveWindowAny": "कोई भी विंडो",
"schedulesBudget": "OmniRoute बजट",
"schedulesBudgetHint": "इस विंडो में OmniRoute स्वयं कितना खर्च कर सकता है। यह केवल उसके अपने ट्रैफ़िक को गिनता है, इसलिए किसी और का उपयोग न इसे घटाता है न बढ़ाता है।",
"schedulesBudgetUnit": "बजट इकाई",
"schedulesBudgetWindow": "बजट विंडो",
"schedulesTimezone": "समय क्षेत्र",
"schedulesPriority": "प्राथमिकता",
"schedulesSaved": "समय विंडो सहेजी गईं",
"schedulesSaveError": "समय विंडो सहेजी नहीं जा सकीं",
"schedulesLoadError": "समय विंडो लोड नहीं हो सकीं",
"groupLabel": "समूह",
"newGroup": "नया समूह",
"renameGroup": "समूह का नाम बदलें",
Expand Down Expand Up @@ -14635,11 +14635,11 @@
"day": "दिन",
"unknownModel": "अज्ञात",
"pending": "लंबित",
"allApiKeys": "All API keys",
"allApiKeys": "सभी API कुंजियाँ",
"mcp": "MCP",
"mcpTool": "MCP tool",
"scope": "Scope",
"apiKey": "API key"
"mcpTool": "MCP टूल",
"scope": "दायरा",
"apiKey": "API कुंजी"
},
"metadata": {
"compressionTitle": "संपीड़न",
Expand Down
Loading