fix: middleware order, geolocation NameError, packaging, and test correctness

- Move geolocation.py from repo root into aisbf/ package (correct location)
- Fix NameError: call geolocation.get_ip_country() with module prefix in APIBlockingMiddleware
- Fix middleware execution order: register DashboardBlockingMiddleware and
  APIBlockingMiddleware before ProxyHeadersMiddleware so proxy headers are
  decoded first (last added = first executed in Starlette)
- Fix typo: is_ip_genocidial -> is_ip_genocidal in aisbf/geolocation.py
- Fix tests: update import path to aisbf.geolocation and use AsyncMock so
  httpx coroutines are properly awaitable
- Add aisbf/geolocation.py and templates/blocked.html to setup.py data_files
- Add trailing newlines to geolocation.py, blocked.html, and test file
- Add static/i18n.js and static/i18n/*.json locale files
parent 8edaca53
......@@ -13,4 +13,6 @@ recursive-include templates *.html
recursive-include templates *.css
recursive-include templates *.js
recursive-include static *.zip
recursive-include static *.js
recursive-include static/i18n *.json
recursive-include static/extension *.js *.json *.html *.md *.png *.svg
\ No newline at end of file
......@@ -35,17 +35,12 @@ async def get_ip_country(ip: str) -> Optional[str]:
_ip_country_cache[ip] = None
return None
def is_ip_israeli(ip: str) -> bool:
"""Check if IP is from Israel."""
# Run async function in sync context if needed
def is_ip_genocidal(ip: str) -> bool:
"""Check if IP is from Israel. Only safe to call outside a running event loop."""
try:
loop = asyncio.get_event_loop()
if loop.is_running():
# If loop is running, we can't use run_until_complete
# For middleware, we'll need to handle this differently
return False # Temporary fallback
else:
country = loop.run_until_complete(get_ip_country(ip))
return country == 'IL'
return False
return loop.run_until_complete(get_ip_country(ip)) == 'IL'
except Exception:
return False
\ No newline at end of file
return False
......@@ -55,6 +55,7 @@ import asyncio
from aisbf.database import _hash_password as _db_hash_password, _verify_password as _db_verify_password
import httpx
import multiprocessing
from aisbf import geolocation
from logging.handlers import RotatingFileHandler
from datetime import datetime, timedelta
from collections import defaultdict
......@@ -2110,8 +2111,76 @@ app.add_middleware(
https_only=os.environ.get("AISBF_HTTPS", "false").lower() == "true",
)
# Add proxy headers middleware LAST so it executes FIRST
# This ensures proxy headers are processed before any other middleware (including auth_middleware)
class DashboardBlockingMiddleware(BaseHTTPMiddleware):
"""Middleware to block dashboard access from Israeli domains."""
async def dispatch(self, request: Request, call_next):
host = request.headers.get("host", "").lower()
if host.endswith(".il"):
# Check if this is a dashboard route
path = request.url.path
if path.startswith("/dashboard") or path == "/":
# Redirect to blocked page
base_url = get_base_url(request)
blocked_url = f"{base_url}/blocked"
return RedirectResponse(url=blocked_url, status_code=302)
response = await call_next(request)
return response
class APIBlockingMiddleware(BaseHTTPMiddleware):
"""Middleware to block API/MCP access from Israeli domains and IPs."""
async def dispatch(self, request: Request, call_next):
host = request.headers.get("host", "").lower()
path = request.url.path
# Check if this is API or MCP route
is_api_route = path.startswith("/api") or path.startswith("/mcp")
if is_api_route:
# Block if domain is Israeli
if host.endswith(".il"):
return JSONResponse(
status_code=403,
content={"error": "We do not support the Israeli genocide of Palestinian people."}
)
# Block if IP is genocidial
client_ip = self._get_client_ip(request)
if client_ip:
country = await geolocation.get_ip_country(client_ip)
if country == 'IL':
return JSONResponse(
status_code=403,
content={"error": "We do not support the Israeli genocide of Palestinian people."}
)
response = await call_next(request)
return response
def _get_client_ip(self, request: Request) -> Optional[str]:
"""Extract client IP from request."""
# Try X-Forwarded-For first (from proxy)
x_forwarded_for = request.headers.get("X-Forwarded-For")
if x_forwarded_for:
# Take first IP if multiple
return x_forwarded_for.split(",")[0].strip()
# Fall back to direct client
client = request.scope.get("client")
if client:
return client[0]
return None
# Middleware execution order: last added = first executed (outermost layer).
# Blocking middlewares are added first so they execute AFTER proxy headers are decoded.
# ProxyHeadersMiddleware is added LAST so it executes FIRST on every request.
app.add_middleware(DashboardBlockingMiddleware)
app.add_middleware(APIBlockingMiddleware)
app.add_middleware(ProxyHeadersMiddleware)
# Helper function for API authentication
......
......@@ -66,3 +66,7 @@ include-package-data = true
[tool.setuptools.package-data]
"*" = ["*.json", "*.md", "*.sh", "*.py", "LICENSE.txt", "requirements.txt", "main.py"]
[tool.setuptools.data-files]
"share/aisbf/static" = ["static/i18n.js"]
"share/aisbf/static/i18n" = ["static/i18n/*.json"]
......@@ -115,6 +115,7 @@ setup(
'aisbf/streaming_optimization.py',
'aisbf/analytics.py',
'aisbf/email_utils.py',
'aisbf/geolocation.py',
]),
# aisbf.providers subpackage
('share/aisbf/aisbf/providers', [
......@@ -194,6 +195,7 @@ setup(
# Install dashboard templates
('share/aisbf/templates', [
'templates/base.html',
'templates/blocked.html',
]),
('share/aisbf/templates/dashboard', [
'templates/dashboard/login.html',
......@@ -238,6 +240,48 @@ setup(
('share/aisbf/static', [
'static/favicon.ico',
'static/aisbf-oauth2-extension.zip',
'static/i18n.js',
]),
('share/aisbf/static/i18n', [
'static/i18n/af.json',
'static/i18n/ar.json',
'static/i18n/bn.json',
'static/i18n/cs.json',
'static/i18n/da.json',
'static/i18n/de.json',
'static/i18n/el.json',
'static/i18n/en.json',
'static/i18n/eo.json',
'static/i18n/es.json',
'static/i18n/fa.json',
'static/i18n/fi.json',
'static/i18n/fr.json',
'static/i18n/he.json',
'static/i18n/hi.json',
'static/i18n/hu.json',
'static/i18n/id.json',
'static/i18n/it.json',
'static/i18n/ja.json',
'static/i18n/ko.json',
'static/i18n/ms.json',
'static/i18n/nb.json',
'static/i18n/nl.json',
'static/i18n/pl.json',
'static/i18n/pt.json',
'static/i18n/qya.json',
'static/i18n/ro.json',
'static/i18n/ru.json',
'static/i18n/sk.json',
'static/i18n/sv.json',
'static/i18n/th.json',
'static/i18n/tlh.json',
'static/i18n/tr.json',
'static/i18n/uk.json',
'static/i18n/vi.json',
'static/i18n/vul.json',
'static/i18n/xh.json',
'static/i18n/zh.json',
'static/i18n/zu.json',
]),
('share/aisbf/static/extension', [
'static/extension/background.js',
......
/*
* Copyright (C) 2026 Stefy Lanza <stefy@nexlab.net>
*
* AISBF i18n (Internationalization) System
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*/
(function() {
'use strict';
const AVAILABLE_LANGUAGES = {
'en': 'English',
'de': 'Deutsch',
'fr': 'Français',
'es': 'Español',
'pt': 'Português',
'it': 'Italiano',
'ru': 'Русский',
'zh': '中文',
'ja': '日本語',
'ko': '한국어',
'ar': 'العربية',
'hi': 'हिन्दी',
'tr': 'Türkçe',
'pl': 'Polski',
'nl': 'Nederlands',
'sv': 'Svenska',
'da': 'Dansk',
'fi': 'Suomi',
'nb': 'Norsk',
'cs': 'Čeština',
'sk': 'Slovenčina',
'hu': 'Magyar',
'ro': 'Română',
'uk': 'Українська',
'el': 'Ελληνικά',
'he': 'עברית',
'fa': 'فارسی',
'id': 'Bahasa Indonesia',
'th': 'ไทย',
'vi': 'Tiếng Việt',
'ms': 'Bahasa Melayu',
'bn': 'বাংলা',
'xh': 'isiXhosa',
'zu': 'isiZulu',
'af': 'Afrikaans',
'eo': 'Esperanto',
'qya': 'Quenya (Elvish)',
'tlh': 'tlhIngan Hol (Klingon)',
'vul': 'Vulcan'
};
let currentLang = 'en';
let translations = {};
let fallbackTranslations = {};
// Get user-specific storage key
function getStorageKey() {
const username = document.body.dataset.username || '__guest__';
return 'aisbf_lang_' + username;
}
// Deep get with fallback to English
function getTranslation(path) {
const keys = path.split('.');
let value = translations;
let fallback = fallbackTranslations;
// Try to get from current language
for (const key of keys) {
if (value && typeof value === 'object' && key in value) {
value = value[key];
} else {
value = null;
break;
}
}
// If found and is a string, return it
if (typeof value === 'string') {
return value;
}
// Fallback to English
for (const key of keys) {
if (fallback && typeof fallback === 'object' && key in fallback) {
fallback = fallback[key];
} else {
fallback = null;
break;
}
}
return typeof fallback === 'string' ? fallback : path;
}
// Replace {n} placeholders
function interpolate(text, params) {
if (!params) return text;
return text.replace(/\{(\w+)\}/g, (match, key) => {
return params.hasOwnProperty(key) ? params[key] : match;
});
}
// Translate a single element
function translateElement(el) {
const key = el.dataset.i18n;
if (!key) return;
const translation = getTranslation(key);
// Handle different element types
if (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA') {
if (el.placeholder) {
el.placeholder = translation;
}
} else {
el.textContent = translation;
}
}
// Translate all elements with data-i18n attribute
function translatePage() {
document.querySelectorAll('[data-i18n]').forEach(translateElement);
}
// Load language file
async function loadLanguage(lang) {
try {
const response = await fetch(`/static/i18n/${lang}.json`);
if (!response.ok) throw new Error('Language file not found');
return await response.json();
} catch (error) {
console.error(`Failed to load language ${lang}:`, error);
return null;
}
}
// Set language
async function setLanguage(lang) {
if (!AVAILABLE_LANGUAGES[lang]) {
console.warn(`Language ${lang} not available, falling back to English`);
lang = 'en';
}
// Load the selected language
const langData = await loadLanguage(lang);
if (!langData) {
console.error(`Failed to load ${lang}, using English`);
lang = 'en';
translations = await loadLanguage('en') || {};
} else {
translations = langData;
}
// Always load English as fallback (unless we're already using English)
if (lang !== 'en') {
fallbackTranslations = await loadLanguage('en') || {};
} else {
fallbackTranslations = translations;
}
currentLang = lang;
localStorage.setItem(getStorageKey(), lang);
document.documentElement.setAttribute('lang', lang);
// Translate the page
translatePage();
// Update language selector if it exists
updateLanguageSelector();
}
// Update language selector UI
function updateLanguageSelector() {
document.querySelectorAll('.lang-btn').forEach(btn => {
btn.classList.toggle('active', btn.dataset.lang === currentLang);
});
}
// Initialize
async function init() {
// Get saved language or detect from browser
const savedLang = localStorage.getItem(getStorageKey());
const browserLang = navigator.language.split('-')[0];
const initialLang = savedLang || (AVAILABLE_LANGUAGES[browserLang] ? browserLang : 'en');
await setLanguage(initialLang);
}
// Public API
window.i18n = {
t: getTranslation,
setLanguage: setLanguage,
getCurrentLanguage: () => currentLang,
getAvailableLanguages: () => AVAILABLE_LANGUAGES,
translatePage: translatePage,
interpolate: interpolate
};
// Auto-initialize when DOM is ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
{
"header": { "title": "AISBF Paneelbord", "help": "Hulp", "docs": "Docs", "about": "Oor", "license": "Lisensie", "restart_server": "Herbegin bediener", "logout": "Teken uit" },
"nav": { "overview": "Oorsig", "providers": "Verskaffers", "rotations": "Rotasies", "autoselect": "Outokeuse", "prompts": "Aanwysings", "analytics": "Analise", "api_tokens": "API-tokens", "wallet": "Beursie", "usage": "Gebruik", "users": "Gebruikers", "settings": "Instellings", "tiers": "Vlakke", "payment_settings": "Betalings", "upgrade": "✨ Opgradeer! ✨", "notifications": "Kennisgewings", "account": "Rekening" },
"account_menu": { "edit_profile": "Wysig profiel", "api_tokens": "API-tokens", "cache_settings": "Kas-instellings", "subscription": "Intekening", "wallet": "Beursie", "billing": "Fakturering", "usage_quotas": "Gebruik en kwotas", "change_password": "Verander wagwoord" },
"notifications": { "title": "Kennisgewings", "mark_all_read": "Merk alles as gelees", "refresh": "Verfris", "no_notifications": "Geen kennisgewings", "just_now": "nou net", "minutes_ago": "{n}min gelede", "hours_ago": "{n}u gelede", "days_ago": "{n}d gelede" },
"footer": { "support_development": "Ondersteun AISBF-ontwikkeling", "privacy_policy": "Privaatheidsbeleid", "terms_of_service": "Diensvoorwaardes", "contact": "Kontak" },
"donate": { "title": "Ondersteun AISBF", "thank_you": "Dankie dat u 'n skenking oorweeg. U ondersteuning help om AISBF as volledig oopbron en gratis sagteware te handhaaf.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Klik op enige adres om dit te kopieer", "copied": "Gekopieer!" },
"welcome": { "title": "Welkom by AISBF!", "early_adopter": "Dankie dat u 'n vroeë gebruiker is! Ons is tans in 'n intensiewe ontwikkelingsfase.", "may_encounter": "U kan foute, diensontwrigtings of veranderinge teëkom.", "feedback": "U terugvoer help ons om AISBF te verbeter. Moenie huiwer om ons te kontak nie!", "send_feedback": "Stuur terugvoer", "got_it": "Verstaan!" },
"contact": { "title": "Kontak ons", "your_email": "U e-pos", "type": "Tipe", "select_type": "Kies tipe...", "bug_report": "Foutverslag", "feature_request": "Kenmerkversoek", "feedback": "Terugvoer", "question": "Vraag", "help": "Hulp", "title_field": "Titel", "title_placeholder": "Kort opsomming van u boodskap", "message": "Boodskap", "message_placeholder": "Beskryf u probleem of versoek in detail...", "send_message": "Stuur boodskap", "cancel": "Kanselleer", "sending": "Stuur...", "success": "Boodskap suksesvol gestuur! Dankie vir u terugvoer.", "error": "Fout: {error}", "network_error": "Netwerkfout. Probeer asseblief later weer." },
"modal": { "notice": "Kennisgewing", "confirm": "Bevestig", "warning": "Waarskuwing", "ok": "OK", "cancel": "Kanselleer", "delete": "Verwyder" },
"common": { "save": "Stoor", "loading": "Laai...", "error": "Fout", "success": "Sukses", "close": "Sluit", "yes": "Ja", "no": "Nee" }
}
{
"header": { "title": "لوحة تحكم AISBF", "help": "مساعدة", "docs": "وثائق", "about": "حول", "license": "الترخيص", "restart_server": "إعادة تشغيل الخادم", "logout": "تسجيل الخروج" },
"nav": { "overview": "نظرة عامة", "providers": "المزودون", "rotations": "التناوبات", "autoselect": "الاختيار التلقائي", "prompts": "المطالبات", "analytics": "التحليلات", "api_tokens": "رموز API", "wallet": "المحفظة", "usage": "الاستخدام", "users": "المستخدمون", "settings": "الإعدادات", "tiers": "المستويات", "payment_settings": "إعدادات الدفع", "upgrade": "✨ ترقية! ✨", "notifications": "الإشعارات", "account": "الحساب" },
"account_menu": { "edit_profile": "تعديل الملف الشخصي", "api_tokens": "رموز API", "cache_settings": "إعدادات التخزين المؤقت", "subscription": "الاشتراك", "wallet": "المحفظة", "billing": "الفواتير", "usage_quotas": "الاستخدام والحصص", "change_password": "تغيير كلمة المرور" },
"notifications": { "title": "الإشعارات", "mark_all_read": "تحديد الكل كمقروء", "refresh": "تحديث", "no_notifications": "لا توجد إشعارات", "just_now": "الآن", "minutes_ago": "منذ {n} دقيقة", "hours_ago": "منذ {n} ساعة", "days_ago": "منذ {n} يوم" },
"footer": { "support_development": "دعم تطوير AISBF", "privacy_policy": "سياسة الخصوصية", "terms_of_service": "شروط الخدمة", "contact": "اتصل بنا" },
"donate": { "title": "دعم AISBF", "thank_you": "شكراً لتفكيرك في التبرع. دعمك يساعد في الحفاظ على AISBF كبرنامج مفتوح المصدر ومجاني.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "انقر على أي عنوان لنسخه", "copied": "تم النسخ!" },
"welcome": { "title": "مرحباً بك في AISBF!", "early_adopter": "شكراً لكونك من المستخدمين الأوائل! نحن حالياً في مرحلة تطوير مكثفة.", "may_encounter": "قد تواجه أخطاء أو انقطاعات في الخدمة.", "feedback": "ملاحظاتك تساعدنا على تحسين AISBF. لا تتردد في التواصل معنا!", "send_feedback": "إرسال ملاحظات", "got_it": "فهمت!" },
"contact": { "title": "اتصل بنا", "your_email": "بريدك الإلكتروني", "type": "النوع", "select_type": "اختر النوع...", "bug_report": "تقرير خطأ", "feature_request": "طلب ميزة", "feedback": "ملاحظات", "question": "سؤال", "help": "مساعدة", "title_field": "العنوان", "title_placeholder": "ملخص موجز لرسالتك", "message": "الرسالة", "message_placeholder": "صف مشكلتك أو طلبك بالتفصيل...", "send_message": "إرسال الرسالة", "cancel": "إلغاء", "sending": "جارٍ الإرسال...", "success": "تم إرسال الرسالة بنجاح! شكراً على ملاحظاتك.", "error": "خطأ: {error}", "network_error": "خطأ في الشبكة. يرجى المحاولة مرة أخرى لاحقاً." },
"modal": { "notice": "إشعار", "confirm": "تأكيد", "warning": "تحذير", "ok": "موافق", "cancel": "إلغاء", "delete": "حذف" },
"common": { "save": "حفظ", "loading": "جارٍ التحميل...", "error": "خطأ", "success": "نجاح", "close": "إغلاق", "yes": "نعم", "no": "لا" }
}
{
"header": { "title": "AISBF ড্যাশবোর্ড", "help": "সাহায্য", "docs": "ডক্স", "about": "সম্পর্কে", "license": "লাইসেন্স", "restart_server": "সার্ভার পুনরায় চালু করুন", "logout": "লগ আউট" },
"nav": { "overview": "সংক্ষিপ্ত বিবরণ", "providers": "প্রদানকারী", "rotations": "ঘূর্ণন", "autoselect": "স্বয়ংক্রিয় নির্বাচন", "prompts": "প্রম্পট", "analytics": "বিশ্লেষণ", "api_tokens": "API টোকেন", "wallet": "ওয়ালেট", "usage": "ব্যবহার", "users": "ব্যবহারকারী", "settings": "সেটিংস", "tiers": "স্তর", "payment_settings": "পেমেন্ট", "upgrade": "✨ আপগ্রেড! ✨", "notifications": "বিজ্ঞপ্তি", "account": "অ্যাকাউন্ট" },
"account_menu": { "edit_profile": "প্রোফাইল সম্পাদনা", "api_tokens": "API টোকেন", "cache_settings": "ক্যাশ সেটিংস", "subscription": "সাবস্ক্রিপশন", "wallet": "ওয়ালেট", "billing": "বিলিং", "usage_quotas": "ব্যবহার এবং কোটা", "change_password": "পাসওয়ার্ড পরিবর্তন" },
"notifications": { "title": "বিজ্ঞপ্তি", "mark_all_read": "সব পঠিত হিসাবে চিহ্নিত করুন", "refresh": "রিফ্রেশ", "no_notifications": "কোন বিজ্ঞপ্তি নেই", "just_now": "এইমাত্র", "minutes_ago": "{n} মিনিট আগে", "hours_ago": "{n} ঘন্টা আগে", "days_ago": "{n} দিন আগে" },
"footer": { "support_development": "AISBF উন্নয়ন সমর্থন করুন", "privacy_policy": "গোপনীয়তা নীতি", "terms_of_service": "সেবার শর্তাবলী", "contact": "যোগাযোগ" },
"donate": { "title": "AISBF সমর্থন করুন", "thank_you": "দান বিবেচনা করার জন্য ধন্যবাদ। আপনার সমর্থন AISBF কে সম্পূর্ণ ওপেন সোর্স এবং বিনামূল্যে সফটওয়্যার হিসাবে বজায় রাখতে সাহায্য করে।", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "কপি করতে যেকোনো ঠিকানায় ক্লিক করুন", "copied": "কপি হয়েছে!" },
"welcome": { "title": "AISBF-এ স্বাগতম!", "early_adopter": "প্রাথমিক ব্যবহারকারী হওয়ার জন্য ধন্যবাদ! আমরা বর্তমানে নিবিড় উন্নয়ন পর্যায়ে আছি।", "may_encounter": "আপনি বাগ, সেবা বিঘ্ন, বা পরিবর্তনের সম্মুখীন হতে পারেন।", "feedback": "আপনার প্রতিক্রিয়া আমাদের AISBF উন্নত করতে সাহায্য করে। আমাদের সাথে যোগাযোগ করতে দ্বিধা করবেন না!", "send_feedback": "প্রতিক্রিয়া পাঠান", "got_it": "বুঝেছি!" },
"contact": { "title": "আমাদের সাথে যোগাযোগ করুন", "your_email": "আপনার ইমেইল", "type": "ধরন", "select_type": "ধরন নির্বাচন করুন...", "bug_report": "বাগ রিপোর্ট", "feature_request": "বৈশিষ্ট্য অনুরোধ", "feedback": "প্রতিক্রিয়া", "question": "প্রশ্ন", "help": "সাহায্য", "title_field": "শিরোনাম", "title_placeholder": "আপনার বার্তার সংক্ষিপ্ত সারাংশ", "message": "বার্তা", "message_placeholder": "আপনার সমস্যা বা অনুরোধ বিস্তারিতভাবে বর্ণনা করুন...", "send_message": "বার্তা পাঠান", "cancel": "বাতিল", "sending": "পাঠানো হচ্ছে...", "success": "বার্তা সফলভাবে পাঠানো হয়েছে! আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ।", "error": "ত্রুটি: {error}", "network_error": "নেটওয়ার্ক ত্রুটি। পরে আবার চেষ্টা করুন।" },
"modal": { "notice": "বিজ্ঞপ্তি", "confirm": "নিশ্চিত করুন", "warning": "সতর্কতা", "ok": "ঠিক আছে", "cancel": "বাতিল", "delete": "মুছুন" },
"common": { "save": "সংরক্ষণ", "loading": "লোড হচ্ছে...", "error": "ত্রুটি", "success": "সফল", "close": "বন্ধ", "yes": "হ্যাঁ", "no": "না" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Nápověda", "docs": "Docs", "about": "O nás", "license": "Licence", "restart_server": "Restartovat server", "logout": "Odhlásit" },
"nav": { "overview": "Přehled", "providers": "Poskytovatelé", "rotations": "Rotace", "autoselect": "Automatický výběr", "prompts": "Výzvy", "analytics": "Analytika", "api_tokens": "API tokeny", "wallet": "Peněženka", "usage": "Využití", "users": "Uživatelé", "settings": "Nastavení", "tiers": "Úrovně", "payment_settings": "Platby", "upgrade": "✨ Upgradovat! ✨", "notifications": "Oznámení", "account": "Účet" },
"account_menu": { "edit_profile": "Upravit profil", "api_tokens": "API tokeny", "cache_settings": "Nastavení mezipaměti", "subscription": "Předplatné", "wallet": "Peněženka", "billing": "Fakturace", "usage_quotas": "Využití a kvóty", "change_password": "Změnit heslo" },
"notifications": { "title": "Oznámení", "mark_all_read": "Označit vše jako přečtené", "refresh": "Obnovit", "no_notifications": "Žádná oznámení", "just_now": "právě teď", "minutes_ago": "před {n}min", "hours_ago": "před {n}h", "days_ago": "před {n}d" },
"footer": { "support_development": "Podpořte vývoj AISBF", "privacy_policy": "Zásady ochrany osobních údajů", "terms_of_service": "Podmínky služby", "contact": "Kontakt" },
"donate": { "title": "Podpořte AISBF", "thank_you": "Děkujeme za zvážení daru. Vaše podpora pomáhá udržovat AISBF jako zcela open source a bezplatný software.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Kliknutím na adresu ji zkopírujete", "copied": "Zkopírováno!" },
"welcome": { "title": "Vítejte v AISBF!", "early_adopter": "Děkujeme, že jste raným uživatelem! Momentálně jsme v intenzivní vývojové fázi.", "may_encounter": "Můžete narazit na chyby, výpadky služby nebo změny.", "feedback": "Vaše zpětná vazba nám pomáhá zlepšovat AISBF. Neváhejte nás kontaktovat!", "send_feedback": "Odeslat zpětnou vazbu", "got_it": "Rozumím!" },
"contact": { "title": "Kontaktujte nás", "your_email": "Váš e-mail", "type": "Typ", "select_type": "Vyberte typ...", "bug_report": "Hlášení chyby", "feature_request": "Žádost o funkci", "feedback": "Zpětná vazba", "question": "Otázka", "help": "Nápověda", "title_field": "Název", "title_placeholder": "Stručné shrnutí vaší zprávy", "message": "Zpráva", "message_placeholder": "Popište svůj problém nebo žádost podrobně...", "send_message": "Odeslat zprávu", "cancel": "Zrušit", "sending": "Odesílání...", "success": "Zpráva úspěšně odeslána! Děkujeme za zpětnou vazbu.", "error": "Chyba: {error}", "network_error": "Chyba sítě. Zkuste to prosím znovu." },
"modal": { "notice": "Oznámení", "confirm": "Potvrdit", "warning": "Varování", "ok": "OK", "cancel": "Zrušit", "delete": "Smazat" },
"common": { "save": "Uložit", "loading": "Načítání...", "error": "Chyba", "success": "Úspěch", "close": "Zavřít", "yes": "Ano", "no": "Ne" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Hjælp", "docs": "Docs", "about": "Om", "license": "Licens", "restart_server": "Genstart server", "logout": "Log ud" },
"nav": { "overview": "Oversigt", "providers": "Udbydere", "rotations": "Rotationer", "autoselect": "Autovalg", "prompts": "Prompter", "analytics": "Analyse", "api_tokens": "API-tokens", "wallet": "Pung", "usage": "Brug", "users": "Brugere", "settings": "Indstillinger", "tiers": "Niveauer", "payment_settings": "Betalinger", "upgrade": "✨ Opgrader! ✨", "notifications": "Notifikationer", "account": "Konto" },
"account_menu": { "edit_profile": "Rediger profil", "api_tokens": "API-tokens", "cache_settings": "Cache-indstillinger", "subscription": "Abonnement", "wallet": "Pung", "billing": "Fakturering", "usage_quotas": "Brug & Kvoter", "change_password": "Skift adgangskode" },
"notifications": { "title": "Notifikationer", "mark_all_read": "Markér alle som læst", "refresh": "Opdater", "no_notifications": "Ingen notifikationer", "just_now": "lige nu", "minutes_ago": "for {n}min siden", "hours_ago": "for {n}t siden", "days_ago": "for {n}d siden" },
"footer": { "support_development": "Støt AISBF-udviklingen", "privacy_policy": "Privatlivspolitik", "terms_of_service": "Servicevilkår", "contact": "Kontakt" },
"donate": { "title": "Støt AISBF", "thank_you": "Tak for at overveje en donation. Din støtte hjælper med at holde AISBF som fuldstændig open source og gratis software.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Klik på en adresse for at kopiere den", "copied": "Kopieret!" },
"welcome": { "title": "Velkommen til AISBF!", "early_adopter": "Tak for at være en tidlig bruger! Vi er i øjeblikket i en intensiv udviklingsfase.", "may_encounter": "Du kan støde på fejl, serviceafbrydelser eller ændringer.", "feedback": "Din feedback hjælper os med at forbedre AISBF. Tøv ikke med at kontakte os!", "send_feedback": "Send feedback", "got_it": "Forstået!" },
"contact": { "title": "Kontakt os", "your_email": "Din e-mail", "type": "Type", "select_type": "Vælg type...", "bug_report": "Fejlrapport", "feature_request": "Funktionsanmodning", "feedback": "Feedback", "question": "Spørgsmål", "help": "Hjælp", "title_field": "Titel", "title_placeholder": "Kort resumé af din besked", "message": "Besked", "message_placeholder": "Beskriv dit problem eller din anmodning i detaljer...", "send_message": "Send besked", "cancel": "Annuller", "sending": "Sender...", "success": "Besked sendt! Tak for din feedback.", "error": "Fejl: {error}", "network_error": "Netværksfejl. Prøv igen senere." },
"modal": { "notice": "Meddelelse", "confirm": "Bekræft", "warning": "Advarsel", "ok": "OK", "cancel": "Annuller", "delete": "Slet" },
"common": { "save": "Gem", "loading": "Indlæser...", "error": "Fejl", "success": "Succes", "close": "Luk", "yes": "Ja", "no": "Nej" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Hilfe", "docs": "Docs", "about": "Über", "license": "Lizenz", "restart_server": "Server neu starten", "logout": "Abmelden" },
"nav": { "overview": "Übersicht", "providers": "Anbieter", "rotations": "Rotationen", "autoselect": "Autoauswahl", "prompts": "Eingaben", "analytics": "Analytik", "api_tokens": "API-Token", "wallet": "Geldbörse", "usage": "Nutzung", "users": "Benutzer", "settings": "Einstellungen", "tiers": "Stufen", "payment_settings": "Zahlungen", "upgrade": "✨ Upgrade! ✨", "notifications": "Benachrichtigungen", "account": "Konto" },
"account_menu": { "edit_profile": "Profil bearbeiten", "api_tokens": "API-Token", "cache_settings": "Cache-Einstellungen", "subscription": "Abonnement", "wallet": "Geldbörse", "billing": "Abrechnung", "usage_quotas": "Nutzung & Kontingente", "change_password": "Passwort ändern" },
"notifications": { "title": "Benachrichtigungen", "mark_all_read": "Alle als gelesen markieren", "refresh": "Aktualisieren", "no_notifications": "Keine Benachrichtigungen", "just_now": "gerade eben", "minutes_ago": "vor {n}Min", "hours_ago": "vor {n}Std", "days_ago": "vor {n}T" },
"footer": { "support_development": "AISBF-Entwicklung unterstützen", "privacy_policy": "Datenschutzrichtlinie", "terms_of_service": "Nutzungsbedingungen", "contact": "Kontakt" },
"donate": { "title": "AISBF unterstützen", "thank_you": "Danke für Ihre Spendenbereitschaft. Ihre Unterstützung hilft, AISBF als freie Open-Source-Software zu erhalten.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Klicken Sie auf eine Adresse, um sie zu kopieren", "copied": "Kopiert!" },
"welcome": { "title": "Willkommen bei AISBF!", "early_adopter": "Danke, dass Sie ein früher Nutzer sind! Wir befinden uns in einer intensiven Entwicklungsphase.", "may_encounter": "Sie könnten auf Fehler oder Dienstunterbrechungen stoßen.", "feedback": "Ihr Feedback hilft uns, AISBF zu verbessern. Zögern Sie nicht, uns zu kontaktieren!", "send_feedback": "Feedback senden", "got_it": "Verstanden!" },
"contact": { "title": "Kontakt", "your_email": "Ihre E-Mail", "type": "Typ", "select_type": "Typ auswählen...", "bug_report": "Fehlerbericht", "feature_request": "Funktionsanfrage", "feedback": "Feedback", "question": "Frage", "help": "Hilfe", "title_field": "Titel", "title_placeholder": "Kurze Zusammenfassung Ihrer Nachricht", "message": "Nachricht", "message_placeholder": "Beschreiben Sie Ihr Problem oder Ihre Anfrage im Detail...", "send_message": "Nachricht senden", "cancel": "Abbrechen", "sending": "Senden...", "success": "Nachricht erfolgreich gesendet! Danke für Ihr Feedback.", "error": "Fehler: {error}", "network_error": "Netzwerkfehler. Bitte versuchen Sie es später erneut." },
"modal": { "notice": "Hinweis", "confirm": "Bestätigen", "warning": "Warnung", "ok": "OK", "cancel": "Abbrechen", "delete": "Löschen" },
"common": { "save": "Speichern", "loading": "Laden...", "error": "Fehler", "success": "Erfolg", "close": "Schließen", "yes": "Ja", "no": "Nein" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Βοήθεια", "docs": "Docs", "about": "Σχετικά", "license": "Άδεια", "restart_server": "Επανεκκίνηση διακομιστή", "logout": "Αποσύνδεση" },
"nav": { "overview": "Επισκόπηση", "providers": "Πάροχοι", "rotations": "Εναλλαγές", "autoselect": "Αυτόματη επιλογή", "prompts": "Προτροπές", "analytics": "Αναλυτικά", "api_tokens": "Tokens API", "wallet": "Πορτοφόλι", "usage": "Χρήση", "users": "Χρήστες", "settings": "Ρυθμίσεις", "tiers": "Επίπεδα", "payment_settings": "Πληρωμές", "upgrade": "✨ Αναβάθμιση! ✨", "notifications": "Ειδοποιήσεις", "account": "Λογαριασμός" },
"account_menu": { "edit_profile": "Επεξεργασία προφίλ", "api_tokens": "Tokens API", "cache_settings": "Ρυθμίσεις cache", "subscription": "Συνδρομή", "wallet": "Πορτοφόλι", "billing": "Χρέωση", "usage_quotas": "Χρήση & Όρια", "change_password": "Αλλαγή κωδικού" },
"notifications": { "title": "Ειδοποιήσεις", "mark_all_read": "Σήμανση όλων ως αναγνωσμένων", "refresh": "Ανανέωση", "no_notifications": "Δεν υπάρχουν ειδοποιήσεις", "just_now": "μόλις τώρα", "minutes_ago": "πριν {n}λεπτά", "hours_ago": "πριν {n}ώρες", "days_ago": "πριν {n}μέρες" },
"footer": { "support_development": "Υποστήριξη ανάπτυξης AISBF", "privacy_policy": "Πολιτική απορρήτου", "terms_of_service": "Όροι υπηρεσίας", "contact": "Επικοινωνία" },
"donate": { "title": "Υποστήριξη AISBF", "thank_you": "Ευχαριστούμε που εξετάζετε μια δωρεά. Η υποστήριξή σας βοηθά στη διατήρηση του AISBF ως πλήρως ανοιχτού κώδικα και δωρεάν λογισμικού.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Κάντε κλικ σε οποιαδήποτε διεύθυνση για αντιγραφή", "copied": "Αντιγράφηκε!" },
"welcome": { "title": "Καλώς ήρθατε στο AISBF!", "early_adopter": "Ευχαριστούμε που είστε πρώιμος χρήστης! Βρισκόμαστε σε εντατική φάση ανάπτυξης.", "may_encounter": "Μπορεί να αντιμετωπίσετε σφάλματα ή διακοπές υπηρεσίας.", "feedback": "Τα σχόλιά σας μας βοηθούν να βελτιώσουμε το AISBF. Μη διστάσετε να επικοινωνήσετε!", "send_feedback": "Αποστολή σχολίων", "got_it": "Κατάλαβα!" },
"contact": { "title": "Επικοινωνήστε μαζί μας", "your_email": "Το email σας", "type": "Τύπος", "select_type": "Επιλέξτε τύπο...", "bug_report": "Αναφορά σφάλματος", "feature_request": "Αίτημα λειτουργίας", "feedback": "Σχόλια", "question": "Ερώτηση", "help": "Βοήθεια", "title_field": "Τίτλος", "title_placeholder": "Σύντομη περίληψη του μηνύματός σας", "message": "Μήνυμα", "message_placeholder": "Περιγράψτε το πρόβλημα ή το αίτημά σας λεπτομερώς...", "send_message": "Αποστολή μηνύματος", "cancel": "Ακύρωση", "sending": "Αποστολή...", "success": "Το μήνυμα στάλθηκε επιτυχώς! Ευχαριστούμε για τα σχόλιά σας.", "error": "Σφάλμα: {error}", "network_error": "Σφάλμα δικτύου. Παρακαλώ δοκιμάστε ξανά αργότερα." },
"modal": { "notice": "Ειδοποίηση", "confirm": "Επιβεβαίωση", "warning": "Προειδοποίηση", "ok": "OK", "cancel": "Ακύρωση", "delete": "Διαγραφή" },
"common": { "save": "Αποθήκευση", "loading": "Φόρτωση...", "error": "Σφάλμα", "success": "Επιτυχία", "close": "Κλείσιμο", "yes": "Ναι", "no": "Όχι" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Help", "docs": "Docs", "about": "About", "license": "License", "restart_server": "Restart Server", "logout": "Logout" },
"nav": { "overview": "Overview", "providers": "Providers", "rotations": "Rotations", "autoselect": "Autoselect", "prompts": "Prompts", "analytics": "Analytics", "api_tokens": "API Tokens", "wallet": "Wallet", "usage": "Usage", "users": "Users", "settings": "Settings", "tiers": "Tiers", "payment_settings": "Payment Settings", "upgrade": "✨ Upgrade! ✨", "notifications": "Notifications", "account": "Account" },
"account_menu": { "edit_profile": "Edit Profile", "api_tokens": "API Tokens", "cache_settings": "Cache Settings", "subscription": "Subscription", "wallet": "Wallet", "billing": "Billing", "usage_quotas": "Usage & Quotas", "change_password": "Change Password" },
"notifications": { "title": "Notifications", "mark_all_read": "Mark all as read", "refresh": "Refresh", "no_notifications": "No notifications", "just_now": "just now", "minutes_ago": "{n}m ago", "hours_ago": "{n}h ago", "days_ago": "{n}d ago" },
"footer": { "support_development": "Support AISBF Development", "privacy_policy": "Privacy Policy", "terms_of_service": "Terms of Service", "contact": "Contact" },
"donate": { "title": "Support AISBF", "thank_you": "Thank you for considering a donation. Your support helps maintain AISBF as completely open source and free software.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Click any address to copy it to your clipboard", "copied": "Copied!" },
"welcome": { "title": "Welcome to AISBF!", "early_adopter": "Thank you for being an early adopter! We're currently in heavy development phase.", "may_encounter": "You may encounter bugs, service interruptions, or changes during this period.", "feedback": "Your feedback helps us make AISBF better. Please don't hesitate to reach out!", "send_feedback": "Send Feedback", "got_it": "Got it!" },
"contact": { "title": "Contact Us", "your_email": "Your Email", "type": "Type", "select_type": "Select type...", "bug_report": "Bug Report", "feature_request": "Feature Request", "feedback": "Feedback", "question": "Question", "help": "Help", "title_field": "Title", "title_placeholder": "Brief summary of your message", "message": "Message", "message_placeholder": "Describe your issue, request, or feedback in detail...", "send_message": "Send Message", "cancel": "Cancel", "sending": "Sending...", "success": "Message sent successfully! Thank you for your feedback.", "error": "Error: {error}", "network_error": "Network error. Please try again later." },
"modal": { "notice": "Notice", "confirm": "Confirm", "warning": "Warning", "ok": "OK", "cancel": "Cancel", "delete": "Delete" },
"common": { "save": "Save", "loading": "Loading...", "error": "Error", "success": "Success", "close": "Close", "yes": "Yes", "no": "No" }
}
{
"header": { "title": "AISBF Panelo", "help": "Helpo", "docs": "Dokumentoj", "about": "Pri", "license": "Licenco", "restart_server": "Restartigi servilon", "logout": "Elsaluti" },
"nav": { "overview": "Superrigardo", "providers": "Provizantoj", "rotations": "Rotacioj", "autoselect": "Aŭtomata elekto", "prompts": "Instigoj", "analytics": "Analitiko", "api_tokens": "API-ĵetonoj", "wallet": "Monujo", "usage": "Uzado", "users": "Uzantoj", "settings": "Agordoj", "tiers": "Niveloj", "payment_settings": "Pagoj", "upgrade": "✨ Plibonigi! ✨", "notifications": "Sciigoj", "account": "Konto" },
"account_menu": { "edit_profile": "Redakti profilon", "api_tokens": "API-ĵetonoj", "cache_settings": "Kaŝmemoro-agordoj", "subscription": "Abono", "wallet": "Monujo", "billing": "Fakturado", "usage_quotas": "Uzado kaj kvotoj", "change_password": "Ŝanĝi pasvorton" },
"notifications": { "title": "Sciigoj", "mark_all_read": "Marki ĉiujn kiel legitajn", "refresh": "Refreŝigi", "no_notifications": "Neniuj sciigoj", "just_now": "ĵus nun", "minutes_ago": "antaŭ {n}min", "hours_ago": "antaŭ {n}h", "days_ago": "antaŭ {n}t" },
"footer": { "support_development": "Subteni AISBF-disvolvadon", "privacy_policy": "Privateca politiko", "terms_of_service": "Kondiĉoj de servo", "contact": "Kontakto" },
"donate": { "title": "Subteni AISBF", "thank_you": "Dankon pro konsidero de donaco. Via subteno helpas konservi AISBF kiel tute malfermfonta kaj libera programaro.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Alklaku ajnan adreson por kopii ĝin", "copied": "Kopiita!" },
"welcome": { "title": "Bonvenon al AISBF!", "early_adopter": "Dankon pro esti frua uzanto! Ni nuntempe estas en intensa disvolva fazo.", "may_encounter": "Vi eble renkontos cimojn, servointerrompojn aŭ ŝanĝojn.", "feedback": "Via komentaro helpas nin plibonigi AISBF. Ne hezitu kontakti nin!", "send_feedback": "Sendi komentaron", "got_it": "Komprenite!" },
"contact": { "title": "Kontakti nin", "your_email": "Via retpoŝto", "type": "Tipo", "select_type": "Elekti tipon...", "bug_report": "Cim-raporto", "feature_request": "Funkcia peto", "feedback": "Komentaro", "question": "Demando", "help": "Helpo", "title_field": "Titolo", "title_placeholder": "Mallonga resumo de via mesaĝo", "message": "Mesaĝo", "message_placeholder": "Priskribu vian problemon aŭ peton detale...", "send_message": "Sendi mesaĝon", "cancel": "Nuligi", "sending": "Sendante...", "success": "Mesaĝo sukcese sendita! Dankon pro via komentaro.", "error": "Eraro: {error}", "network_error": "Reta eraro. Bonvolu reprovi poste." },
"modal": { "notice": "Sciigo", "confirm": "Konfirmi", "warning": "Averto", "ok": "Bone", "cancel": "Nuligi", "delete": "Forigi" },
"common": { "save": "Konservi", "loading": "Ŝargante...", "error": "Eraro", "success": "Sukceso", "close": "Fermi", "yes": "Jes", "no": "Ne" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Ayuda", "docs": "Docs", "about": "Acerca de", "license": "Licencia", "restart_server": "Reiniciar servidor", "logout": "Cerrar sesión" },
"nav": { "overview": "Resumen", "providers": "Proveedores", "rotations": "Rotaciones", "autoselect": "Autoselección", "prompts": "Indicaciones", "analytics": "Analítica", "api_tokens": "Tokens API", "wallet": "Billetera", "usage": "Uso", "users": "Usuarios", "settings": "Configuración", "tiers": "Niveles", "payment_settings": "Pagos", "upgrade": "✨ ¡Mejorar! ✨", "notifications": "Notificaciones", "account": "Cuenta" },
"account_menu": { "edit_profile": "Editar perfil", "api_tokens": "Tokens API", "cache_settings": "Configuración de caché", "subscription": "Suscripción", "wallet": "Billetera", "billing": "Facturación", "usage_quotas": "Uso y cuotas", "change_password": "Cambiar contraseña" },
"notifications": { "title": "Notificaciones", "mark_all_read": "Marcar todo como leído", "refresh": "Actualizar", "no_notifications": "Sin notificaciones", "just_now": "ahora mismo", "minutes_ago": "hace {n}min", "hours_ago": "hace {n}h", "days_ago": "hace {n}d" },
"footer": { "support_development": "Apoyar el desarrollo de AISBF", "privacy_policy": "Política de privacidad", "terms_of_service": "Términos de servicio", "contact": "Contacto" },
"donate": { "title": "Apoyar AISBF", "thank_you": "Gracias por considerar una donación. Su apoyo ayuda a mantener AISBF como software libre y de código abierto.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Haga clic en cualquier dirección para copiarla", "copied": "¡Copiado!" },
"welcome": { "title": "¡Bienvenido a AISBF!", "early_adopter": "¡Gracias por ser un usuario temprano! Estamos en una fase de desarrollo intensivo.", "may_encounter": "Puede encontrar errores o interrupciones del servicio.", "feedback": "Sus comentarios nos ayudan a mejorar AISBF. ¡No dude en contactarnos!", "send_feedback": "Enviar comentarios", "got_it": "¡Entendido!" },
"contact": { "title": "Contáctenos", "your_email": "Su correo electrónico", "type": "Tipo", "select_type": "Seleccionar tipo...", "bug_report": "Informe de error", "feature_request": "Solicitud de función", "feedback": "Comentarios", "question": "Pregunta", "help": "Ayuda", "title_field": "Título", "title_placeholder": "Breve resumen de su mensaje", "message": "Mensaje", "message_placeholder": "Describa su problema o solicitud en detalle...", "send_message": "Enviar mensaje", "cancel": "Cancelar", "sending": "Enviando...", "success": "¡Mensaje enviado con éxito! Gracias por sus comentarios.", "error": "Error: {error}", "network_error": "Error de red. Por favor, inténtelo de nuevo más tarde." },
"modal": { "notice": "Aviso", "confirm": "Confirmar", "warning": "Advertencia", "ok": "OK", "cancel": "Cancelar", "delete": "Eliminar" },
"common": { "save": "Guardar", "loading": "Cargando...", "error": "Error", "success": "Éxito", "close": "Cerrar", "yes": "Sí", "no": "No" }
}
{
"header": { "title": "داشبورد AISBF", "help": "راهنما", "docs": "مستندات", "about": "درباره", "license": "مجوز", "restart_server": "راه‌اندازی مجدد سرور", "logout": "خروج" },
"nav": { "overview": "نمای کلی", "providers": "ارائه‌دهندگان", "rotations": "چرخش‌ها", "autoselect": "انتخاب خودکار", "prompts": "دستورات", "analytics": "تحلیل‌ها", "api_tokens": "توکن‌های API", "wallet": "کیف پول", "usage": "مصرف", "users": "کاربران", "settings": "تنظیمات", "tiers": "سطوح", "payment_settings": "تنظیمات پرداخت", "upgrade": "✨ ارتقا! ✨", "notifications": "اعلان‌ها", "account": "حساب" },
"account_menu": { "edit_profile": "ویرایش پروفایل", "api_tokens": "توکن‌های API", "cache_settings": "تنظیمات کش", "subscription": "اشتراک", "wallet": "کیف پول", "billing": "صورتحساب", "usage_quotas": "مصرف و سهمیه‌ها", "change_password": "تغییر رمز عبور" },
"notifications": { "title": "اعلان‌ها", "mark_all_read": "علامت‌گذاری همه به عنوان خوانده شده", "refresh": "بازخوانی", "no_notifications": "اعلانی وجود ندارد", "just_now": "همین الان", "minutes_ago": "{n} دقیقه پیش", "hours_ago": "{n} ساعت پیش", "days_ago": "{n} روز پیش" },
"footer": { "support_development": "حمایت از توسعه AISBF", "privacy_policy": "سیاست حریم خصوصی", "terms_of_service": "شرایط خدمات", "contact": "تماس" },
"donate": { "title": "حمایت از AISBF", "thank_you": "از اینکه کمک مالی را در نظر می‌گیرید متشکریم. حمایت شما به حفظ AISBF به عنوان نرم‌افزار کاملاً متن‌باز و رایگان کمک می‌کند.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "برای کپی کردن روی هر آدرسی کلیک کنید", "copied": "کپی شد!" },
"welcome": { "title": "به AISBF خوش آمدید!", "early_adopter": "از اینکه کاربر اولیه هستید متشکریم! ما در حال حاضر در مرحله توسعه فشرده هستیم.", "may_encounter": "ممکن است با اشکالات، قطعی‌های سرویس یا تغییرات مواجه شوید.", "feedback": "بازخورد شما به ما کمک می‌کند AISBF را بهتر کنیم. در تماس با ما تردید نکنید!", "send_feedback": "ارسال بازخورد", "got_it": "متوجه شدم!" },
"contact": { "title": "تماس با ما", "your_email": "ایمیل شما", "type": "نوع", "select_type": "نوع را انتخاب کنید...", "bug_report": "گزارش اشکال", "feature_request": "درخواست ویژگی", "feedback": "بازخورد", "question": "سوال", "help": "راهنما", "title_field": "عنوان", "title_placeholder": "خلاصه کوتاهی از پیام شما", "message": "پیام", "message_placeholder": "مشکل یا درخواست خود را به تفصیل توضیح دهید...", "send_message": "ارسال پیام", "cancel": "لغو", "sending": "در حال ارسال...", "success": "پیام با موفقیت ارسال شد! از بازخورد شما متشکریم.", "error": "خطا: {error}", "network_error": "خطای شبکه. لطفاً بعداً دوباره امتحان کنید." },
"modal": { "notice": "اعلان", "confirm": "تأیید", "warning": "هشدار", "ok": "تأیید", "cancel": "لغو", "delete": "حذف" },
"common": { "save": "ذخیره", "loading": "در حال بارگذاری...", "error": "خطا", "success": "موفقیت", "close": "بستن", "yes": "بله", "no": "خیر" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Ohje", "docs": "Docs", "about": "Tietoja", "license": "Lisenssi", "restart_server": "Käynnistä palvelin uudelleen", "logout": "Kirjaudu ulos" },
"nav": { "overview": "Yleiskatsaus", "providers": "Palveluntarjoajat", "rotations": "Rotaatiot", "autoselect": "Automaattivalinta", "prompts": "Kehotteet", "analytics": "Analytiikka", "api_tokens": "API-tunnukset", "wallet": "Lompakko", "usage": "Käyttö", "users": "Käyttäjät", "settings": "Asetukset", "tiers": "Tasot", "payment_settings": "Maksut", "upgrade": "✨ Päivitä! ✨", "notifications": "Ilmoitukset", "account": "Tili" },
"account_menu": { "edit_profile": "Muokkaa profiilia", "api_tokens": "API-tunnukset", "cache_settings": "Välimuistiasetukset", "subscription": "Tilaus", "wallet": "Lompakko", "billing": "Laskutus", "usage_quotas": "Käyttö ja kiintiöt", "change_password": "Vaihda salasana" },
"notifications": { "title": "Ilmoitukset", "mark_all_read": "Merkitse kaikki luetuiksi", "refresh": "Päivitä", "no_notifications": "Ei ilmoituksia", "just_now": "juuri nyt", "minutes_ago": "{n}min sitten", "hours_ago": "{n}t sitten", "days_ago": "{n}pv sitten" },
"footer": { "support_development": "Tue AISBF-kehitystä", "privacy_policy": "Tietosuojakäytäntö", "terms_of_service": "Käyttöehdot", "contact": "Yhteystiedot" },
"donate": { "title": "Tue AISBF:ää", "thank_you": "Kiitos lahjoituksen harkitsemisesta. Tukesi auttaa pitämään AISBF:n täysin avoimen lähdekoodin ja ilmaisena ohjelmistona.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Kopioi napsauttamalla osoitetta", "copied": "Kopioitu!" },
"welcome": { "title": "Tervetuloa AISBF:ään!", "early_adopter": "Kiitos, että olet varhainen käyttäjä! Olemme tällä hetkellä intensiivisessä kehitysvaiheessa.", "may_encounter": "Saatat kohdata vikoja, palvelukatkoksia tai muutoksia.", "feedback": "Palautteesi auttaa meitä parantamaan AISBF:ää. Ota rohkeasti yhteyttä!", "send_feedback": "Lähetä palaute", "got_it": "Selvä!" },
"contact": { "title": "Ota yhteyttä", "your_email": "Sähköpostisi", "type": "Tyyppi", "select_type": "Valitse tyyppi...", "bug_report": "Vikaraportti", "feature_request": "Ominaisuuspyyntö", "feedback": "Palaute", "question": "Kysymys", "help": "Ohje", "title_field": "Otsikko", "title_placeholder": "Lyhyt yhteenveto viestistäsi", "message": "Viesti", "message_placeholder": "Kuvaile ongelmasi tai pyyntösi yksityiskohtaisesti...", "send_message": "Lähetä viesti", "cancel": "Peruuta", "sending": "Lähetetään...", "success": "Viesti lähetetty! Kiitos palautteestasi.", "error": "Virhe: {error}", "network_error": "Verkkovirhe. Yritä myöhemmin uudelleen." },
"modal": { "notice": "Ilmoitus", "confirm": "Vahvista", "warning": "Varoitus", "ok": "OK", "cancel": "Peruuta", "delete": "Poista" },
"common": { "save": "Tallenna", "loading": "Ladataan...", "error": "Virhe", "success": "Onnistui", "close": "Sulje", "yes": "Kyllä", "no": "Ei" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Aide", "docs": "Docs", "about": "À propos", "license": "Licence", "restart_server": "Redémarrer le serveur", "logout": "Déconnexion" },
"nav": { "overview": "Vue d'ensemble", "providers": "Fournisseurs", "rotations": "Rotations", "autoselect": "Sélection auto", "prompts": "Invites", "analytics": "Analytique", "api_tokens": "Jetons API", "wallet": "Portefeuille", "usage": "Utilisation", "users": "Utilisateurs", "settings": "Paramètres", "tiers": "Niveaux", "payment_settings": "Paiements", "upgrade": "✨ Mettre à niveau ! ✨", "notifications": "Notifications", "account": "Compte" },
"account_menu": { "edit_profile": "Modifier le profil", "api_tokens": "Jetons API", "cache_settings": "Paramètres du cache", "subscription": "Abonnement", "wallet": "Portefeuille", "billing": "Facturation", "usage_quotas": "Utilisation & Quotas", "change_password": "Changer le mot de passe" },
"notifications": { "title": "Notifications", "mark_all_read": "Tout marquer comme lu", "refresh": "Actualiser", "no_notifications": "Aucune notification", "just_now": "à l'instant", "minutes_ago": "il y a {n}min", "hours_ago": "il y a {n}h", "days_ago": "il y a {n}j" },
"footer": { "support_development": "Soutenir le développement d'AISBF", "privacy_policy": "Politique de confidentialité", "terms_of_service": "Conditions d'utilisation", "contact": "Contact" },
"donate": { "title": "Soutenir AISBF", "thank_you": "Merci de considérer un don. Votre soutien aide à maintenir AISBF comme logiciel libre et gratuit.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Cliquez sur une adresse pour la copier", "copied": "Copié !" },
"welcome": { "title": "Bienvenue sur AISBF !", "early_adopter": "Merci d'être un utilisateur précoce ! Nous sommes en phase de développement intensif.", "may_encounter": "Vous pourriez rencontrer des bugs ou des interruptions de service.", "feedback": "Vos retours nous aident à améliorer AISBF. N'hésitez pas à nous contacter !", "send_feedback": "Envoyer un retour", "got_it": "Compris !" },
"contact": { "title": "Nous contacter", "your_email": "Votre e-mail", "type": "Type", "select_type": "Sélectionner un type...", "bug_report": "Rapport de bug", "feature_request": "Demande de fonctionnalité", "feedback": "Retour", "question": "Question", "help": "Aide", "title_field": "Titre", "title_placeholder": "Bref résumé de votre message", "message": "Message", "message_placeholder": "Décrivez votre problème ou demande en détail...", "send_message": "Envoyer le message", "cancel": "Annuler", "sending": "Envoi...", "success": "Message envoyé avec succès ! Merci pour votre retour.", "error": "Erreur : {error}", "network_error": "Erreur réseau. Veuillez réessayer plus tard." },
"modal": { "notice": "Avis", "confirm": "Confirmer", "warning": "Avertissement", "ok": "OK", "cancel": "Annuler", "delete": "Supprimer" },
"common": { "save": "Enregistrer", "loading": "Chargement...", "error": "Erreur", "success": "Succès", "close": "Fermer", "yes": "Oui", "no": "Non" }
}
{
"header": { "title": "לוח בקרה AISBF", "help": "עזרה", "docs": "מסמכים", "about": "אודות", "license": "רישיון", "restart_server": "הפעל מחדש שרת", "logout": "התנתק" },
"nav": { "overview": "סקירה כללית", "providers": "ספקים", "rotations": "רוטציות", "autoselect": "בחירה אוטומטית", "prompts": "הנחיות", "analytics": "אנליטיקה", "api_tokens": "אסימוני API", "wallet": "ארנק", "usage": "שימוש", "users": "משתמשים", "settings": "הגדרות", "tiers": "רמות", "payment_settings": "הגדרות תשלום", "upgrade": "✨ שדרג! ✨", "notifications": "התראות", "account": "חשבון" },
"account_menu": { "edit_profile": "ערוך פרופיל", "api_tokens": "אסימוני API", "cache_settings": "הגדרות מטמון", "subscription": "מנוי", "wallet": "ארנק", "billing": "חיוב", "usage_quotas": "שימוש ומכסות", "change_password": "שנה סיסמה" },
"notifications": { "title": "התראות", "mark_all_read": "סמן הכל כנקרא", "refresh": "רענן", "no_notifications": "אין התראות", "just_now": "עכשיו", "minutes_ago": "לפני {n} דקות", "hours_ago": "לפני {n} שעות", "days_ago": "לפני {n} ימים" },
"footer": { "support_development": "תמוך בפיתוח AISBF", "privacy_policy": "מדיניות פרטיות", "terms_of_service": "תנאי שירות", "contact": "צור קשר" },
"donate": { "title": "תמוך ב-AISBF", "thank_you": "תודה שאתה שוקל תרומה. התמיכה שלך עוזרת לשמור על AISBF כתוכנה חופשית ופתוחה לחלוטין.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "לחץ על כל כתובת כדי להעתיק אותה", "copied": "הועתק!" },
"welcome": { "title": "ברוך הבא ל-AISBF!", "early_adopter": "תודה שאתה משתמש מוקדם! אנחנו כרגע בשלב פיתוח אינטנסיבי.", "may_encounter": "ייתכן שתיתקל בבאגים, הפסקות שירות או שינויים.", "feedback": "המשוב שלך עוזר לנו לשפר את AISBF. אל תהסס לפנות אלינו!", "send_feedback": "שלח משוב", "got_it": "הבנתי!" },
"contact": { "title": "צור קשר", "your_email": "האימייל שלך", "type": "סוג", "select_type": "בחר סוג...", "bug_report": "דיווח על באג", "feature_request": "בקשת תכונה", "feedback": "משוב", "question": "שאלה", "help": "עזרה", "title_field": "כותרת", "title_placeholder": "סיכום קצר של הודעתך", "message": "הודעה", "message_placeholder": "תאר את הבעיה או הבקשה שלך בפירוט...", "send_message": "שלח הודעה", "cancel": "ביטול", "sending": "שולח...", "success": "ההודעה נשלחה בהצלחה! תודה על המשוב שלך.", "error": "שגיאה: {error}", "network_error": "שגיאת רשת. אנא נסה שוב מאוחר יותר." },
"modal": { "notice": "הודעה", "confirm": "אשר", "warning": "אזהרה", "ok": "אישור", "cancel": "ביטול", "delete": "מחק" },
"common": { "save": "שמור", "loading": "טוען...", "error": "שגיאה", "success": "הצלחה", "close": "סגור", "yes": "כן", "no": "לא" }
}
{
"header": { "title": "AISBF डैशबोर्ड", "help": "सहायता", "docs": "दस्तावेज़", "about": "के बारे में", "license": "लाइसेंस", "restart_server": "सर्वर पुनः आरंभ करें", "logout": "लॉग आउट" },
"nav": { "overview": "अवलोकन", "providers": "प्रदाता", "rotations": "रोटेशन", "autoselect": "स्वतः चयन", "prompts": "प्रॉम्प्ट", "analytics": "विश्लेषण", "api_tokens": "API टोकन", "wallet": "वॉलेट", "usage": "उपयोग", "users": "उपयोगकर्ता", "settings": "सेटिंग्स", "tiers": "स्तर", "payment_settings": "भुगतान सेटिंग्स", "upgrade": "✨ अपग्रेड! ✨", "notifications": "सूचनाएं", "account": "खाता" },
"account_menu": { "edit_profile": "प्रोफ़ाइल संपादित करें", "api_tokens": "API टोकन", "cache_settings": "कैश सेटिंग्स", "subscription": "सदस्यता", "wallet": "वॉलेट", "billing": "बिलिंग", "usage_quotas": "उपयोग और कोटा", "change_password": "पासवर्ड बदलें" },
"notifications": { "title": "सूचनाएं", "mark_all_read": "सभी को पढ़ा हुआ चिह्नित करें", "refresh": "ताज़ा करें", "no_notifications": "कोई सूचना नहीं", "just_now": "अभी", "minutes_ago": "{n} मिनट पहले", "hours_ago": "{n} घंटे पहले", "days_ago": "{n} दिन पहले" },
"footer": { "support_development": "AISBF विकास का समर्थन करें", "privacy_policy": "गोपनीयता नीति", "terms_of_service": "सेवा की शर्तें", "contact": "संपर्क" },
"donate": { "title": "AISBF का समर्थन करें", "thank_you": "दान पर विचार करने के लिए धन्यवाद। आपका समर्थन AISBF को पूरी तरह से ओपन सोर्स और मुफ्त सॉफ्टवेयर के रूप में बनाए रखने में मदद करता है।", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "कॉपी करने के लिए किसी भी पते पर क्लिक करें", "copied": "कॉपी किया गया!" },
"welcome": { "title": "AISBF में आपका स्वागत है!", "early_adopter": "शुरुआती उपयोगकर्ता होने के लिए धन्यवाद! हम वर्तमान में गहन विकास चरण में हैं।", "may_encounter": "आपको बग, सेवा रुकावट या परिवर्तन का सामना करना पड़ सकता है।", "feedback": "आपकी प्रतिक्रिया AISBF को बेहतर बनाने में मदद करती है। संपर्क करने में संकोच न करें!", "send_feedback": "प्रतिक्रिया भेजें", "got_it": "समझ गया!" },
"contact": { "title": "हमसे संपर्क करें", "your_email": "आपका ईमेल", "type": "प्रकार", "select_type": "प्रकार चुनें...", "bug_report": "बग रिपोर्ट", "feature_request": "फीचर अनुरोध", "feedback": "प्रतिक्रिया", "question": "प्रश्न", "help": "सहायता", "title_field": "शीर्षक", "title_placeholder": "आपके संदेश का संक्षिप्त सारांश", "message": "संदेश", "message_placeholder": "अपनी समस्या या अनुरोध का विस्तार से वर्णन करें...", "send_message": "संदेश भेजें", "cancel": "रद्द करें", "sending": "भेज रहे हैं...", "success": "संदेश सफलतापूर्वक भेजा गया! आपकी प्रतिक्रिया के लिए धन्यवाद।", "error": "त्रुटि: {error}", "network_error": "नेटवर्क त्रुटि। कृपया बाद में पुनः प्रयास करें।" },
"modal": { "notice": "सूचना", "confirm": "पुष्टि करें", "warning": "चेतावनी", "ok": "ठीक है", "cancel": "रद्द करें", "delete": "हटाएं" },
"common": { "save": "सहेजें", "loading": "लोड हो रहा है...", "error": "त्रुटि", "success": "सफलता", "close": "बंद करें", "yes": "हाँ", "no": "नहीं" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Súgó", "docs": "Docs", "about": "Névjegy", "license": "Licenc", "restart_server": "Szerver újraindítása", "logout": "Kijelentkezés" },
"nav": { "overview": "Áttekintés", "providers": "Szolgáltatók", "rotations": "Rotációk", "autoselect": "Automatikus kiválasztás", "prompts": "Promptok", "analytics": "Analitika", "api_tokens": "API tokenek", "wallet": "Pénztárca", "usage": "Használat", "users": "Felhasználók", "settings": "Beállítások", "tiers": "Szintek", "payment_settings": "Fizetések", "upgrade": "✨ Frissítés! ✨", "notifications": "Értesítések", "account": "Fiók" },
"account_menu": { "edit_profile": "Profil szerkesztése", "api_tokens": "API tokenek", "cache_settings": "Gyorsítótár beállítások", "subscription": "Előfizetés", "wallet": "Pénztárca", "billing": "Számlázás", "usage_quotas": "Használat és kvóták", "change_password": "Jelszó módosítása" },
"notifications": { "title": "Értesítések", "mark_all_read": "Összes megjelölése olvasottként", "refresh": "Frissítés", "no_notifications": "Nincs értesítés", "just_now": "éppen most", "minutes_ago": "{n} perce", "hours_ago": "{n} órája", "days_ago": "{n} napja" },
"footer": { "support_development": "AISBF fejlesztés támogatása", "privacy_policy": "Adatvédelmi irányelvek", "terms_of_service": "Szolgáltatási feltételek", "contact": "Kapcsolat" },
"donate": { "title": "AISBF támogatása", "thank_you": "Köszönjük, hogy adományozást fontolgat. Támogatása segít az AISBF-et teljesen nyílt forráskódú és ingyenes szoftverként fenntartani.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Kattintson bármely címre a másoláshoz", "copied": "Másolva!" },
"welcome": { "title": "Üdvözöljük az AISBF-ben!", "early_adopter": "Köszönjük, hogy korai felhasználó! Jelenleg intenzív fejlesztési fázisban vagyunk.", "may_encounter": "Hibákkal, szolgáltatáskiesésekkel vagy változásokkal találkozhat.", "feedback": "Visszajelzése segít az AISBF fejlesztésében. Ne habozzon kapcsolatba lépni velünk!", "send_feedback": "Visszajelzés küldése", "got_it": "Értettem!" },
"contact": { "title": "Kapcsolatfelvétel", "your_email": "E-mail címe", "type": "Típus", "select_type": "Típus kiválasztása...", "bug_report": "Hibajelentés", "feature_request": "Funkciókérés", "feedback": "Visszajelzés", "question": "Kérdés", "help": "Súgó", "title_field": "Cím", "title_placeholder": "Üzenetének rövid összefoglalója", "message": "Üzenet", "message_placeholder": "Írja le részletesen a problémáját vagy kérését...", "send_message": "Üzenet küldése", "cancel": "Mégse", "sending": "Küldés...", "success": "Üzenet sikeresen elküldve! Köszönjük visszajelzését.", "error": "Hiba: {error}", "network_error": "Hálózati hiba. Kérjük, próbálja újra később." },
"modal": { "notice": "Értesítés", "confirm": "Megerősítés", "warning": "Figyelmeztetés", "ok": "OK", "cancel": "Mégse", "delete": "Törlés" },
"common": { "save": "Mentés", "loading": "Betöltés...", "error": "Hiba", "success": "Siker", "close": "Bezárás", "yes": "Igen", "no": "Nem" }
}
{
"header": { "title": "Dashboard AISBF", "help": "Bantuan", "docs": "Docs", "about": "Tentang", "license": "Lisensi", "restart_server": "Mulai Ulang Server", "logout": "Keluar" },
"nav": { "overview": "Ikhtisar", "providers": "Penyedia", "rotations": "Rotasi", "autoselect": "Pilih Otomatis", "prompts": "Prompt", "analytics": "Analitik", "api_tokens": "Token API", "wallet": "Dompet", "usage": "Penggunaan", "users": "Pengguna", "settings": "Pengaturan", "tiers": "Tingkatan", "payment_settings": "Pembayaran", "upgrade": "✨ Tingkatkan! ✨", "notifications": "Notifikasi", "account": "Akun" },
"account_menu": { "edit_profile": "Edit Profil", "api_tokens": "Token API", "cache_settings": "Pengaturan Cache", "subscription": "Langganan", "wallet": "Dompet", "billing": "Penagihan", "usage_quotas": "Penggunaan & Kuota", "change_password": "Ganti Kata Sandi" },
"notifications": { "title": "Notifikasi", "mark_all_read": "Tandai semua sudah dibaca", "refresh": "Segarkan", "no_notifications": "Tidak ada notifikasi", "just_now": "baru saja", "minutes_ago": "{n}mnt lalu", "hours_ago": "{n}j lalu", "days_ago": "{n}h lalu" },
"footer": { "support_development": "Dukung Pengembangan AISBF", "privacy_policy": "Kebijakan Privasi", "terms_of_service": "Syarat Layanan", "contact": "Kontak" },
"donate": { "title": "Dukung AISBF", "thank_you": "Terima kasih telah mempertimbangkan donasi. Dukungan Anda membantu menjaga AISBF sebagai perangkat lunak open source dan gratis sepenuhnya.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Klik alamat mana saja untuk menyalinnya", "copied": "Disalin!" },
"welcome": { "title": "Selamat Datang di AISBF!", "early_adopter": "Terima kasih telah menjadi pengguna awal! Kami saat ini dalam fase pengembangan intensif.", "may_encounter": "Anda mungkin mengalami bug, gangguan layanan, atau perubahan.", "feedback": "Masukan Anda membantu kami membuat AISBF lebih baik. Jangan ragu untuk menghubungi kami!", "send_feedback": "Kirim Masukan", "got_it": "Mengerti!" },
"contact": { "title": "Hubungi Kami", "your_email": "Email Anda", "type": "Jenis", "select_type": "Pilih jenis...", "bug_report": "Laporan Bug", "feature_request": "Permintaan Fitur", "feedback": "Masukan", "question": "Pertanyaan", "help": "Bantuan", "title_field": "Judul", "title_placeholder": "Ringkasan singkat pesan Anda", "message": "Pesan", "message_placeholder": "Jelaskan masalah atau permintaan Anda secara detail...", "send_message": "Kirim Pesan", "cancel": "Batal", "sending": "Mengirim...", "success": "Pesan berhasil dikirim! Terima kasih atas masukan Anda.", "error": "Kesalahan: {error}", "network_error": "Kesalahan jaringan. Silakan coba lagi nanti." },
"modal": { "notice": "Pemberitahuan", "confirm": "Konfirmasi", "warning": "Peringatan", "ok": "OK", "cancel": "Batal", "delete": "Hapus" },
"common": { "save": "Simpan", "loading": "Memuat...", "error": "Kesalahan", "success": "Berhasil", "close": "Tutup", "yes": "Ya", "no": "Tidak" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Aiuto", "docs": "Docs", "about": "Informazioni", "license": "Licenza", "restart_server": "Riavvia server", "logout": "Esci" },
"nav": { "overview": "Panoramica", "providers": "Provider", "rotations": "Rotazioni", "autoselect": "Selezione auto", "prompts": "Prompt", "analytics": "Analisi", "api_tokens": "Token API", "wallet": "Portafoglio", "usage": "Utilizzo", "users": "Utenti", "settings": "Impostazioni", "tiers": "Livelli", "payment_settings": "Pagamenti", "upgrade": "✨ Aggiorna! ✨", "notifications": "Notifiche", "account": "Account" },
"account_menu": { "edit_profile": "Modifica profilo", "api_tokens": "Token API", "cache_settings": "Impostazioni cache", "subscription": "Abbonamento", "wallet": "Portafoglio", "billing": "Fatturazione", "usage_quotas": "Utilizzo e quote", "change_password": "Cambia password" },
"notifications": { "title": "Notifiche", "mark_all_read": "Segna tutto come letto", "refresh": "Aggiorna", "no_notifications": "Nessuna notifica", "just_now": "proprio ora", "minutes_ago": "{n}min fa", "hours_ago": "{n}h fa", "days_ago": "{n}g fa" },
"footer": { "support_development": "Supporta lo sviluppo di AISBF", "privacy_policy": "Informativa sulla privacy", "terms_of_service": "Termini di servizio", "contact": "Contatto" },
"donate": { "title": "Supporta AISBF", "thank_you": "Grazie per aver considerato una donazione. Il tuo supporto aiuta a mantenere AISBF come software libero e open source.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Clicca su un indirizzo per copiarlo", "copied": "Copiato!" },
"welcome": { "title": "Benvenuto in AISBF!", "early_adopter": "Grazie per essere un utente precoce! Siamo in una fase di sviluppo intensivo.", "may_encounter": "Potresti incontrare bug o interruzioni del servizio.", "feedback": "Il tuo feedback ci aiuta a migliorare AISBF. Non esitare a contattarci!", "send_feedback": "Invia feedback", "got_it": "Capito!" },
"contact": { "title": "Contattaci", "your_email": "La tua email", "type": "Tipo", "select_type": "Seleziona tipo...", "bug_report": "Segnalazione bug", "feature_request": "Richiesta funzionalità", "feedback": "Feedback", "question": "Domanda", "help": "Aiuto", "title_field": "Titolo", "title_placeholder": "Breve riepilogo del tuo messaggio", "message": "Messaggio", "message_placeholder": "Descrivi il tuo problema o richiesta in dettaglio...", "send_message": "Invia messaggio", "cancel": "Annulla", "sending": "Invio...", "success": "Messaggio inviato con successo! Grazie per il tuo feedback.", "error": "Errore: {error}", "network_error": "Errore di rete. Riprova più tardi." },
"modal": { "notice": "Avviso", "confirm": "Conferma", "warning": "Avvertimento", "ok": "OK", "cancel": "Annulla", "delete": "Elimina" },
"common": { "save": "Salva", "loading": "Caricamento...", "error": "Errore", "success": "Successo", "close": "Chiudi", "yes": "Sì", "no": "No" }
}
{
"header": { "title": "AISBF ダッシュボード", "help": "ヘルプ", "docs": "ドキュメント", "about": "概要", "license": "ライセンス", "restart_server": "サーバー再起動", "logout": "ログアウト" },
"nav": { "overview": "概要", "providers": "プロバイダー", "rotations": "ローテーション", "autoselect": "自動選択", "prompts": "プロンプト", "analytics": "分析", "api_tokens": "APIトークン", "wallet": "ウォレット", "usage": "使用状況", "users": "ユーザー", "settings": "設定", "tiers": "プラン", "payment_settings": "支払い設定", "upgrade": "✨ アップグレード!✨", "notifications": "通知", "account": "アカウント" },
"account_menu": { "edit_profile": "プロフィール編集", "api_tokens": "APIトークン", "cache_settings": "キャッシュ設定", "subscription": "サブスクリプション", "wallet": "ウォレット", "billing": "請求", "usage_quotas": "使用量とクォータ", "change_password": "パスワード変更" },
"notifications": { "title": "通知", "mark_all_read": "すべて既読にする", "refresh": "更新", "no_notifications": "通知なし", "just_now": "たった今", "minutes_ago": "{n}分前", "hours_ago": "{n}時間前", "days_ago": "{n}日前" },
"footer": { "support_development": "AISBF開発を支援", "privacy_policy": "プライバシーポリシー", "terms_of_service": "利用規約", "contact": "お問い合わせ" },
"donate": { "title": "AISBFを支援", "thank_you": "寄付をご検討いただきありがとうございます。あなたのサポートがAISBFをオープンソースの無料ソフトウェアとして維持するのに役立ちます。", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "アドレスをクリックしてコピー", "copied": "コピーしました!" },
"welcome": { "title": "AISBFへようこそ!", "early_adopter": "早期ユーザーとしてご参加いただきありがとうございます!現在、開発の集中フェーズにあります。", "may_encounter": "バグやサービス中断が発生する場合があります。", "feedback": "フィードバックはAISBFの改善に役立ちます。お気軽にご連絡ください!", "send_feedback": "フィードバックを送る", "got_it": "了解!" },
"contact": { "title": "お問い合わせ", "your_email": "メールアドレス", "type": "種類", "select_type": "種類を選択...", "bug_report": "バグ報告", "feature_request": "機能リクエスト", "feedback": "フィードバック", "question": "質問", "help": "ヘルプ", "title_field": "タイトル", "title_placeholder": "メッセージの簡単な概要", "message": "メッセージ", "message_placeholder": "問題やリクエストを詳しく説明してください...", "send_message": "メッセージを送る", "cancel": "キャンセル", "sending": "送信中...", "success": "メッセージが正常に送信されました!フィードバックありがとうございます。", "error": "エラー: {error}", "network_error": "ネットワークエラー。後でもう一度お試しください。" },
"modal": { "notice": "お知らせ", "confirm": "確認", "warning": "警告", "ok": "OK", "cancel": "キャンセル", "delete": "削除" },
"common": { "save": "保存", "loading": "読み込み中...", "error": "エラー", "success": "成功", "close": "閉じる", "yes": "はい", "no": "いいえ" }
}
{
"header": { "title": "AISBF 대시보드", "help": "도움말", "docs": "문서", "about": "정보", "license": "라이선스", "restart_server": "서버 재시작", "logout": "로그아웃" },
"nav": { "overview": "개요", "providers": "공급자", "rotations": "로테이션", "autoselect": "자동 선택", "prompts": "프롬프트", "analytics": "분석", "api_tokens": "API 토큰", "wallet": "지갑", "usage": "사용량", "users": "사용자", "settings": "설정", "tiers": "등급", "payment_settings": "결제 설정", "upgrade": "✨ 업그레이드! ✨", "notifications": "알림", "account": "계정" },
"account_menu": { "edit_profile": "프로필 편집", "api_tokens": "API 토큰", "cache_settings": "캐시 설정", "subscription": "구독", "wallet": "지갑", "billing": "청구", "usage_quotas": "사용량 및 할당량", "change_password": "비밀번호 변경" },
"notifications": { "title": "알림", "mark_all_read": "모두 읽음으로 표시", "refresh": "새로고침", "no_notifications": "알림 없음", "just_now": "방금", "minutes_ago": "{n}분 전", "hours_ago": "{n}시간 전", "days_ago": "{n}일 전" },
"footer": { "support_development": "AISBF 개발 지원", "privacy_policy": "개인정보 처리방침", "terms_of_service": "서비스 약관", "contact": "문의" },
"donate": { "title": "AISBF 지원", "thank_you": "기부를 고려해 주셔서 감사합니다. 여러분의 지원이 AISBF를 완전한 오픈소스 무료 소프트웨어로 유지하는 데 도움이 됩니다.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "주소를 클릭하여 클립보드에 복사", "copied": "복사됨!" },
"welcome": { "title": "AISBF에 오신 것을 환영합니다!", "early_adopter": "얼리 어답터가 되어 주셔서 감사합니다! 현재 집중 개발 단계에 있습니다.", "may_encounter": "버그, 서비스 중단 또는 변경 사항이 발생할 수 있습니다.", "feedback": "여러분의 피드백이 AISBF를 더 좋게 만드는 데 도움이 됩니다. 언제든지 연락해 주세요!", "send_feedback": "피드백 보내기", "got_it": "알겠습니다!" },
"contact": { "title": "문의하기", "your_email": "이메일", "type": "유형", "select_type": "유형 선택...", "bug_report": "버그 신고", "feature_request": "기능 요청", "feedback": "피드백", "question": "질문", "help": "도움말", "title_field": "제목", "title_placeholder": "메시지의 간단한 요약", "message": "메시지", "message_placeholder": "문제나 요청을 자세히 설명해 주세요...", "send_message": "메시지 보내기", "cancel": "취소", "sending": "전송 중...", "success": "메시지가 성공적으로 전송되었습니다! 피드백 감사합니다.", "error": "오류: {error}", "network_error": "네트워크 오류. 나중에 다시 시도해 주세요." },
"modal": { "notice": "알림", "confirm": "확인", "warning": "경고", "ok": "확인", "cancel": "취소", "delete": "삭제" },
"common": { "save": "저장", "loading": "로딩 중...", "error": "오류", "success": "성공", "close": "닫기", "yes": "예", "no": "아니오" }
}
{
"header": { "title": "Papan Pemuka AISBF", "help": "Bantuan", "docs": "Dokumen", "about": "Tentang", "license": "Lesen", "restart_server": "Mulakan Semula Pelayan", "logout": "Log Keluar" },
"nav": { "overview": "Gambaran Keseluruhan", "providers": "Pembekal", "rotations": "Putaran", "autoselect": "Pilih Auto", "prompts": "Gesaan", "analytics": "Analitik", "api_tokens": "Token API", "wallet": "Dompet", "usage": "Penggunaan", "users": "Pengguna", "settings": "Tetapan", "tiers": "Peringkat", "payment_settings": "Pembayaran", "upgrade": "✨ Naik Taraf! ✨", "notifications": "Pemberitahuan", "account": "Akaun" },
"account_menu": { "edit_profile": "Edit Profil", "api_tokens": "Token API", "cache_settings": "Tetapan Cache", "subscription": "Langganan", "wallet": "Dompet", "billing": "Pengebilan", "usage_quotas": "Penggunaan & Kuota", "change_password": "Tukar Kata Laluan" },
"notifications": { "title": "Pemberitahuan", "mark_all_read": "Tandakan semua sebagai dibaca", "refresh": "Muat Semula", "no_notifications": "Tiada pemberitahuan", "just_now": "baru sahaja", "minutes_ago": "{n}min lalu", "hours_ago": "{n}j lalu", "days_ago": "{n}h lalu" },
"footer": { "support_development": "Sokong Pembangunan AISBF", "privacy_policy": "Dasar Privasi", "terms_of_service": "Terma Perkhidmatan", "contact": "Hubungi" },
"donate": { "title": "Sokong AISBF", "thank_you": "Terima kasih kerana mempertimbangkan derma. Sokongan anda membantu mengekalkan AISBF sebagai perisian sumber terbuka dan percuma sepenuhnya.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Klik mana-mana alamat untuk menyalinnya", "copied": "Disalin!" },
"welcome": { "title": "Selamat Datang ke AISBF!", "early_adopter": "Terima kasih kerana menjadi pengguna awal! Kami kini dalam fasa pembangunan intensif.", "may_encounter": "Anda mungkin menghadapi pepijat, gangguan perkhidmatan, atau perubahan.", "feedback": "Maklum balas anda membantu kami menjadikan AISBF lebih baik. Jangan teragak-agak untuk menghubungi kami!", "send_feedback": "Hantar Maklum Balas", "got_it": "Faham!" },
"contact": { "title": "Hubungi Kami", "your_email": "E-mel Anda", "type": "Jenis", "select_type": "Pilih jenis...", "bug_report": "Laporan Pepijat", "feature_request": "Permintaan Ciri", "feedback": "Maklum Balas", "question": "Soalan", "help": "Bantuan", "title_field": "Tajuk", "title_placeholder": "Ringkasan ringkas mesej anda", "message": "Mesej", "message_placeholder": "Terangkan isu atau permintaan anda secara terperinci...", "send_message": "Hantar Mesej", "cancel": "Batal", "sending": "Menghantar...", "success": "Mesej berjaya dihantar! Terima kasih atas maklum balas anda.", "error": "Ralat: {error}", "network_error": "Ralat rangkaian. Sila cuba lagi kemudian." },
"modal": { "notice": "Notis", "confirm": "Sahkan", "warning": "Amaran", "ok": "OK", "cancel": "Batal", "delete": "Padam" },
"common": { "save": "Simpan", "loading": "Memuatkan...", "error": "Ralat", "success": "Berjaya", "close": "Tutup", "yes": "Ya", "no": "Tidak" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Hjelp", "docs": "Docs", "about": "Om", "license": "Lisens", "restart_server": "Start server på nytt", "logout": "Logg ut" },
"nav": { "overview": "Oversikt", "providers": "Leverandører", "rotations": "Rotasjoner", "autoselect": "Autovalg", "prompts": "Ledetekster", "analytics": "Analyse", "api_tokens": "API-tokens", "wallet": "Lommebok", "usage": "Bruk", "users": "Brukere", "settings": "Innstillinger", "tiers": "Nivåer", "payment_settings": "Betalinger", "upgrade": "✨ Oppgrader! ✨", "notifications": "Varsler", "account": "Konto" },
"account_menu": { "edit_profile": "Rediger profil", "api_tokens": "API-tokens", "cache_settings": "Cache-innstillinger", "subscription": "Abonnement", "wallet": "Lommebok", "billing": "Fakturering", "usage_quotas": "Bruk & Kvoter", "change_password": "Endre passord" },
"notifications": { "title": "Varsler", "mark_all_read": "Merk alle som lest", "refresh": "Oppdater", "no_notifications": "Ingen varsler", "just_now": "akkurat nå", "minutes_ago": "for {n}min siden", "hours_ago": "for {n}t siden", "days_ago": "for {n}d siden" },
"footer": { "support_development": "Støtt AISBF-utvikling", "privacy_policy": "Personvernpolicy", "terms_of_service": "Tjenestevilkår", "contact": "Kontakt" },
"donate": { "title": "Støtt AISBF", "thank_you": "Takk for at du vurderer en donasjon. Din støtte hjelper med å holde AISBF som helt åpen kildekode og gratis programvare.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Klikk på en adresse for å kopiere den", "copied": "Kopiert!" },
"welcome": { "title": "Velkommen til AISBF!", "early_adopter": "Takk for at du er en tidlig bruker! Vi er for øyeblikket i en intensiv utviklingsfase.", "may_encounter": "Du kan støte på feil, tjenesteavbrudd eller endringer.", "feedback": "Tilbakemeldingen din hjelper oss med å forbedre AISBF. Ikke nøl med å ta kontakt!", "send_feedback": "Send tilbakemelding", "got_it": "Forstått!" },
"contact": { "title": "Kontakt oss", "your_email": "Din e-post", "type": "Type", "select_type": "Velg type...", "bug_report": "Feilrapport", "feature_request": "Funksjonsforespørsel", "feedback": "Tilbakemelding", "question": "Spørsmål", "help": "Hjelp", "title_field": "Tittel", "title_placeholder": "Kort sammendrag av meldingen din", "message": "Melding", "message_placeholder": "Beskriv problemet eller forespørselen din i detalj...", "send_message": "Send melding", "cancel": "Avbryt", "sending": "Sender...", "success": "Melding sendt! Takk for tilbakemeldingen.", "error": "Feil: {error}", "network_error": "Nettverksfeil. Prøv igjen senere." },
"modal": { "notice": "Melding", "confirm": "Bekreft", "warning": "Advarsel", "ok": "OK", "cancel": "Avbryt", "delete": "Slett" },
"common": { "save": "Lagre", "loading": "Laster...", "error": "Feil", "success": "Suksess", "close": "Lukk", "yes": "Ja", "no": "Nei" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Hulp", "docs": "Docs", "about": "Over", "license": "Licentie", "restart_server": "Server herstarten", "logout": "Uitloggen" },
"nav": { "overview": "Overzicht", "providers": "Providers", "rotations": "Rotaties", "autoselect": "Autoselectie", "prompts": "Prompts", "analytics": "Analyse", "api_tokens": "API-tokens", "wallet": "Portemonnee", "usage": "Gebruik", "users": "Gebruikers", "settings": "Instellingen", "tiers": "Niveaus", "payment_settings": "Betalingen", "upgrade": "✨ Upgraden! ✨", "notifications": "Meldingen", "account": "Account" },
"account_menu": { "edit_profile": "Profiel bewerken", "api_tokens": "API-tokens", "cache_settings": "Cache-instellingen", "subscription": "Abonnement", "wallet": "Portemonnee", "billing": "Facturering", "usage_quotas": "Gebruik & Quota's", "change_password": "Wachtwoord wijzigen" },
"notifications": { "title": "Meldingen", "mark_all_read": "Alles als gelezen markeren", "refresh": "Vernieuwen", "no_notifications": "Geen meldingen", "just_now": "zojuist", "minutes_ago": "{n}min geleden", "hours_ago": "{n}u geleden", "days_ago": "{n}d geleden" },
"footer": { "support_development": "AISBF-ontwikkeling ondersteunen", "privacy_policy": "Privacybeleid", "terms_of_service": "Servicevoorwaarden", "contact": "Contact" },
"donate": { "title": "AISBF ondersteunen", "thank_you": "Bedankt voor het overwegen van een donatie. Uw steun helpt AISBF als volledig open source en gratis software te behouden.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Klik op een adres om het te kopiëren", "copied": "Gekopieerd!" },
"welcome": { "title": "Welkom bij AISBF!", "early_adopter": "Bedankt voor het zijn van een vroege gebruiker! We bevinden ons momenteel in een intensieve ontwikkelingsfase.", "may_encounter": "U kunt bugs, serviceonderbrekingen of wijzigingen tegenkomen.", "feedback": "Uw feedback helpt ons AISBF te verbeteren. Aarzel niet om contact op te nemen!", "send_feedback": "Feedback sturen", "got_it": "Begrepen!" },
"contact": { "title": "Neem contact op", "your_email": "Uw e-mail", "type": "Type", "select_type": "Selecteer type...", "bug_report": "Bugrapport", "feature_request": "Functieverzoek", "feedback": "Feedback", "question": "Vraag", "help": "Hulp", "title_field": "Titel", "title_placeholder": "Korte samenvatting van uw bericht", "message": "Bericht", "message_placeholder": "Beschrijf uw probleem of verzoek in detail...", "send_message": "Bericht sturen", "cancel": "Annuleren", "sending": "Verzenden...", "success": "Bericht succesvol verzonden! Bedankt voor uw feedback.", "error": "Fout: {error}", "network_error": "Netwerkfout. Probeer het later opnieuw." },
"modal": { "notice": "Melding", "confirm": "Bevestigen", "warning": "Waarschuwing", "ok": "OK", "cancel": "Annuleren", "delete": "Verwijderen" },
"common": { "save": "Opslaan", "loading": "Laden...", "error": "Fout", "success": "Succes", "close": "Sluiten", "yes": "Ja", "no": "Nee" }
}
{
"header": { "title": "Panel AISBF", "help": "Pomoc", "docs": "Dokumentacja", "about": "O nas", "license": "Licencja", "restart_server": "Uruchom ponownie serwer", "logout": "Wyloguj" },
"nav": { "overview": "Przegląd", "providers": "Dostawcy", "rotations": "Rotacje", "autoselect": "Autoselect", "prompts": "Podpowiedzi", "analytics": "Analityka", "api_tokens": "Tokeny API", "wallet": "Portfel", "usage": "Użycie", "users": "Użytkownicy", "settings": "Ustawienia", "tiers": "Poziomy", "payment_settings": "Płatności", "upgrade": "✨ Ulepsz! ✨", "notifications": "Powiadomienia", "account": "Konto" },
"account_menu": { "edit_profile": "Edytuj profil", "api_tokens": "Tokeny API", "cache_settings": "Ustawienia pamięci podręcznej", "subscription": "Subskrypcja", "wallet": "Portfel", "billing": "Rozliczenia", "usage_quotas": "Użycie i limity", "change_password": "Zmień hasło" },
"notifications": { "title": "Powiadomienia", "mark_all_read": "Oznacz wszystkie jako przeczytane", "refresh": "Odśwież", "no_notifications": "Brak powiadomień", "just_now": "właśnie teraz", "minutes_ago": "{n}min temu", "hours_ago": "{n}h temu", "days_ago": "{n}d temu" },
"footer": { "support_development": "Wspieraj rozwój AISBF", "privacy_policy": "Polityka prywatności", "terms_of_service": "Warunki usługi", "contact": "Kontakt" },
"donate": { "title": "Wspieraj AISBF", "thank_you": "Dziękujemy za rozważenie darowizny. Twoje wsparcie pomaga utrzymać AISBF jako całkowicie otwartoźródłowe i darmowe oprogramowanie.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Kliknij dowolny adres, aby go skopiować", "copied": "Skopiowano!" },
"welcome": { "title": "Witamy w AISBF!", "early_adopter": "Dziękujemy za bycie wczesnym użytkownikiem! Jesteśmy w intensywnej fazie rozwoju.", "may_encounter": "Możesz napotkać błędy, przerwy w działaniu usługi lub zmiany.", "feedback": "Twoja opinia pomaga nam ulepszać AISBF. Nie wahaj się z nami skontaktować!", "send_feedback": "Wyślij opinię", "got_it": "Rozumiem!" },
"contact": { "title": "Skontaktuj się z nami", "your_email": "Twój e-mail", "type": "Typ", "select_type": "Wybierz typ...", "bug_report": "Zgłoszenie błędu", "feature_request": "Prośba o funkcję", "feedback": "Opinia", "question": "Pytanie", "help": "Pomoc", "title_field": "Tytuł", "title_placeholder": "Krótkie podsumowanie wiadomości", "message": "Wiadomość", "message_placeholder": "Opisz swój problem lub prośbę szczegółowo...", "send_message": "Wyślij wiadomość", "cancel": "Anuluj", "sending": "Wysyłanie...", "success": "Wiadomość wysłana pomyślnie! Dziękujemy za opinię.", "error": "Błąd: {error}", "network_error": "Błąd sieci. Spróbuj ponownie później." },
"modal": { "notice": "Powiadomienie", "confirm": "Potwierdź", "warning": "Ostrzeżenie", "ok": "OK", "cancel": "Anuluj", "delete": "Usuń" },
"common": { "save": "Zapisz", "loading": "Ładowanie...", "error": "Błąd", "success": "Sukces", "close": "Zamknij", "yes": "Tak", "no": "Nie" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Ajuda", "docs": "Docs", "about": "Sobre", "license": "Licença", "restart_server": "Reiniciar servidor", "logout": "Sair" },
"nav": { "overview": "Visão geral", "providers": "Provedores", "rotations": "Rotações", "autoselect": "Autosseleção", "prompts": "Prompts", "analytics": "Análise", "api_tokens": "Tokens API", "wallet": "Carteira", "usage": "Uso", "users": "Usuários", "settings": "Configurações", "tiers": "Níveis", "payment_settings": "Pagamentos", "upgrade": "✨ Atualizar! ✨", "notifications": "Notificações", "account": "Conta" },
"account_menu": { "edit_profile": "Editar perfil", "api_tokens": "Tokens API", "cache_settings": "Configurações de cache", "subscription": "Assinatura", "wallet": "Carteira", "billing": "Faturamento", "usage_quotas": "Uso e cotas", "change_password": "Alterar senha" },
"notifications": { "title": "Notificações", "mark_all_read": "Marcar tudo como lido", "refresh": "Atualizar", "no_notifications": "Sem notificações", "just_now": "agora mesmo", "minutes_ago": "há {n}min", "hours_ago": "há {n}h", "days_ago": "há {n}d" },
"footer": { "support_development": "Apoiar o desenvolvimento do AISBF", "privacy_policy": "Política de privacidade", "terms_of_service": "Termos de serviço", "contact": "Contato" },
"donate": { "title": "Apoiar AISBF", "thank_you": "Obrigado por considerar uma doação. Seu apoio ajuda a manter o AISBF como software livre e de código aberto.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Clique em qualquer endereço para copiá-lo", "copied": "Copiado!" },
"welcome": { "title": "Bem-vindo ao AISBF!", "early_adopter": "Obrigado por ser um usuário inicial! Estamos em fase de desenvolvimento intensivo.", "may_encounter": "Você pode encontrar bugs ou interrupções de serviço.", "feedback": "Seu feedback nos ajuda a melhorar o AISBF. Não hesite em nos contatar!", "send_feedback": "Enviar feedback", "got_it": "Entendido!" },
"contact": { "title": "Fale conosco", "your_email": "Seu e-mail", "type": "Tipo", "select_type": "Selecionar tipo...", "bug_report": "Relatório de bug", "feature_request": "Solicitação de recurso", "feedback": "Feedback", "question": "Pergunta", "help": "Ajuda", "title_field": "Título", "title_placeholder": "Breve resumo da sua mensagem", "message": "Mensagem", "message_placeholder": "Descreva seu problema ou solicitação em detalhes...", "send_message": "Enviar mensagem", "cancel": "Cancelar", "sending": "Enviando...", "success": "Mensagem enviada com sucesso! Obrigado pelo seu feedback.", "error": "Erro: {error}", "network_error": "Erro de rede. Por favor, tente novamente mais tarde." },
"modal": { "notice": "Aviso", "confirm": "Confirmar", "warning": "Aviso", "ok": "OK", "cancel": "Cancelar", "delete": "Excluir" },
"common": { "save": "Salvar", "loading": "Carregando...", "error": "Erro", "success": "Sucesso", "close": "Fechar", "yes": "Sim", "no": "Não" }
}
{
"_note": "Quenya/Sindarin Elvish — fictional language from Tolkien's Lord of the Rings. Many technical terms have no Elvish equivalent and fall back to English.",
"header": { "title": "AISBF Palantír", "help": "Mára", "docs": "Parmar", "about": "Nó", "license": "Lestanen", "restart_server": "Restart Server", "logout": "Auta" },
"nav": { "overview": "Cenien", "providers": "Providers", "rotations": "Rotations", "autoselect": "Autoselect", "prompts": "Prompts", "analytics": "Analytics", "api_tokens": "API Tokens", "wallet": "Mírë", "usage": "Usage", "users": "Eleni", "settings": "Cantar", "tiers": "Tiers", "payment_settings": "Payment Settings", "upgrade": "✨ Ortë! ✨", "notifications": "Telpë", "account": "Nossë" },
"account_menu": { "edit_profile": "Cenda Nossë", "api_tokens": "API Tokens", "cache_settings": "Cache Settings", "subscription": "Subscription", "wallet": "Mírë", "billing": "Billing", "usage_quotas": "Usage & Quotas", "change_password": "Camta Tengwa" },
"notifications": { "title": "Telpë", "mark_all_read": "Cenda ilyë", "refresh": "Cuivë", "no_notifications": "Lá telpë", "just_now": "sí", "minutes_ago": "{n} lúmë", "hours_ago": "{n} ré", "days_ago": "{n} aure" },
"footer": { "support_development": "Auta AISBF", "privacy_policy": "Privacy Policy", "terms_of_service": "Terms of Service", "contact": "Maquenta" },
"donate": { "title": "Auta AISBF", "thank_you": "Hantanyel. Melmë lyen anta AISBF cuivëa ar lissë.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Tec i már ú-cenda", "copied": "Cendaina!" },
"welcome": { "title": "Aiya AISBF!", "early_adopter": "Hantanyel nó i minya eleni! Ná mardë i cuivëa.", "may_encounter": "Lerya quettar úcarë nó.", "feedback": "Quettalyë anta melmë AISBF. Maquenta ven!", "send_feedback": "Anta Quetta", "got_it": "Istanyel!" },
"contact": { "title": "Maquenta", "your_email": "Email", "type": "Nossë", "select_type": "Select type...", "bug_report": "Bug Report", "feature_request": "Feature Request", "feedback": "Quetta", "question": "Sac", "help": "Mára", "title_field": "Esse", "title_placeholder": "Brief summary", "message": "Quetta", "message_placeholder": "Describe your issue...", "send_message": "Anta Quetta", "cancel": "Ú-car", "sending": "Antëa...", "success": "Quetta antaina! Hantanyel.", "error": "Úcarë: {error}", "network_error": "Network error. Please try again later." },
"modal": { "notice": "Telpë", "confirm": "Námo", "warning": "Vórima", "ok": "Mára", "cancel": "Ú-car", "delete": "Heca" },
"common": { "save": "Harya", "loading": "Cuivëa...", "error": "Úcarë", "success": "Melmë", "close": "Panya", "yes": "Ná", "no": "Lá" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Ajutor", "docs": "Docs", "about": "Despre", "license": "Licență", "restart_server": "Repornire server", "logout": "Deconectare" },
"nav": { "overview": "Prezentare generală", "providers": "Furnizori", "rotations": "Rotații", "autoselect": "Selecție automată", "prompts": "Prompturi", "analytics": "Analiză", "api_tokens": "Token-uri API", "wallet": "Portofel", "usage": "Utilizare", "users": "Utilizatori", "settings": "Setări", "tiers": "Niveluri", "payment_settings": "Plăți", "upgrade": "✨ Actualizare! ✨", "notifications": "Notificări", "account": "Cont" },
"account_menu": { "edit_profile": "Editare profil", "api_tokens": "Token-uri API", "cache_settings": "Setări cache", "subscription": "Abonament", "wallet": "Portofel", "billing": "Facturare", "usage_quotas": "Utilizare și cote", "change_password": "Schimbare parolă" },
"notifications": { "title": "Notificări", "mark_all_read": "Marchează toate ca citite", "refresh": "Reîmprospătare", "no_notifications": "Fără notificări", "just_now": "chiar acum", "minutes_ago": "acum {n}min", "hours_ago": "acum {n}h", "days_ago": "acum {n}z" },
"footer": { "support_development": "Susțineți dezvoltarea AISBF", "privacy_policy": "Politica de confidențialitate", "terms_of_service": "Termeni de serviciu", "contact": "Contact" },
"donate": { "title": "Susțineți AISBF", "thank_you": "Vă mulțumim că luați în considerare o donație. Sprijinul dvs. ajută la menținerea AISBF ca software complet open source și gratuit.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Faceți clic pe orice adresă pentru a o copia", "copied": "Copiat!" },
"welcome": { "title": "Bun venit la AISBF!", "early_adopter": "Vă mulțumim că sunteți un utilizator timpuriu! Suntem în prezent în faza de dezvoltare intensivă.", "may_encounter": "Puteți întâlni erori, întreruperi de serviciu sau modificări.", "feedback": "Feedback-ul dvs. ne ajută să îmbunătățim AISBF. Nu ezitați să ne contactați!", "send_feedback": "Trimite feedback", "got_it": "Am înțeles!" },
"contact": { "title": "Contactați-ne", "your_email": "E-mailul dvs.", "type": "Tip", "select_type": "Selectați tipul...", "bug_report": "Raport de eroare", "feature_request": "Solicitare funcție", "feedback": "Feedback", "question": "Întrebare", "help": "Ajutor", "title_field": "Titlu", "title_placeholder": "Scurt rezumat al mesajului dvs.", "message": "Mesaj", "message_placeholder": "Descrieți problema sau solicitarea dvs. în detaliu...", "send_message": "Trimite mesaj", "cancel": "Anulare", "sending": "Se trimite...", "success": "Mesaj trimis cu succes! Vă mulțumim pentru feedback.", "error": "Eroare: {error}", "network_error": "Eroare de rețea. Vă rugăm să încercați din nou mai târziu." },
"modal": { "notice": "Notificare", "confirm": "Confirmare", "warning": "Avertisment", "ok": "OK", "cancel": "Anulare", "delete": "Ștergere" },
"common": { "save": "Salvare", "loading": "Se încarcă...", "error": "Eroare", "success": "Succes", "close": "Închidere", "yes": "Da", "no": "Nu" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Помощь", "docs": "Docs", "about": "О нас", "license": "Лицензия", "restart_server": "Перезапустить сервер", "logout": "Выйти" },
"nav": { "overview": "Обзор", "providers": "Провайдеры", "rotations": "Ротации", "autoselect": "Автовыбор", "prompts": "Запросы", "analytics": "Аналитика", "api_tokens": "API-токены", "wallet": "Кошелёк", "usage": "Использование", "users": "Пользователи", "settings": "Настройки", "tiers": "Уровни", "payment_settings": "Платежи", "upgrade": "✨ Улучшить! ✨", "notifications": "Уведомления", "account": "Аккаунт" },
"account_menu": { "edit_profile": "Редактировать профиль", "api_tokens": "API-токены", "cache_settings": "Настройки кэша", "subscription": "Подписка", "wallet": "Кошелёк", "billing": "Выставление счетов", "usage_quotas": "Использование и квоты", "change_password": "Изменить пароль" },
"notifications": { "title": "Уведомления", "mark_all_read": "Отметить все как прочитанные", "refresh": "Обновить", "no_notifications": "Нет уведомлений", "just_now": "только что", "minutes_ago": "{n}мин назад", "hours_ago": "{n}ч назад", "days_ago": "{n}д назад" },
"footer": { "support_development": "Поддержать разработку AISBF", "privacy_policy": "Политика конфиденциальности", "terms_of_service": "Условия использования", "contact": "Контакт" },
"donate": { "title": "Поддержать AISBF", "thank_you": "Спасибо за рассмотрение пожертвования. Ваша поддержка помогает поддерживать AISBF как свободное программное обеспечение.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Нажмите на адрес, чтобы скопировать его", "copied": "Скопировано!" },
"welcome": { "title": "Добро пожаловать в AISBF!", "early_adopter": "Спасибо, что вы ранний пользователь! Мы находимся в фазе интенсивной разработки.", "may_encounter": "Вы можете столкнуться с ошибками или перебоями в работе сервиса.", "feedback": "Ваши отзывы помогают нам улучшать AISBF. Не стесняйтесь обращаться к нам!", "send_feedback": "Отправить отзыв", "got_it": "Понятно!" },
"contact": { "title": "Связаться с нами", "your_email": "Ваш e-mail", "type": "Тип", "select_type": "Выберите тип...", "bug_report": "Сообщение об ошибке", "feature_request": "Запрос функции", "feedback": "Отзыв", "question": "Вопрос", "help": "Помощь", "title_field": "Заголовок", "title_placeholder": "Краткое описание вашего сообщения", "message": "Сообщение", "message_placeholder": "Опишите вашу проблему или запрос подробно...", "send_message": "Отправить сообщение", "cancel": "Отмена", "sending": "Отправка...", "success": "Сообщение успешно отправлено! Спасибо за ваш отзыв.", "error": "Ошибка: {error}", "network_error": "Ошибка сети. Пожалуйста, попробуйте позже." },
"modal": { "notice": "Уведомление", "confirm": "Подтвердить", "warning": "Предупреждение", "ok": "OK", "cancel": "Отмена", "delete": "Удалить" },
"common": { "save": "Сохранить", "loading": "Загрузка...", "error": "Ошибка", "success": "Успех", "close": "Закрыть", "yes": "Да", "no": "Нет" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Pomoc", "docs": "Docs", "about": "O nás", "license": "Licencia", "restart_server": "Reštartovať server", "logout": "Odhlásiť" },
"nav": { "overview": "Prehľad", "providers": "Poskytovatelia", "rotations": "Rotácie", "autoselect": "Automatický výber", "prompts": "Výzvy", "analytics": "Analytika", "api_tokens": "API tokeny", "wallet": "Peňaženka", "usage": "Využitie", "users": "Používatelia", "settings": "Nastavenia", "tiers": "Úrovne", "payment_settings": "Platby", "upgrade": "✨ Upgradovať! ✨", "notifications": "Oznámenia", "account": "Účet" },
"account_menu": { "edit_profile": "Upraviť profil", "api_tokens": "API tokeny", "cache_settings": "Nastavenia vyrovnávacej pamäte", "subscription": "Predplatné", "wallet": "Peňaženka", "billing": "Fakturácia", "usage_quotas": "Využitie a kvóty", "change_password": "Zmeniť heslo" },
"notifications": { "title": "Oznámenia", "mark_all_read": "Označiť všetko ako prečítané", "refresh": "Obnoviť", "no_notifications": "Žiadne oznámenia", "just_now": "práve teraz", "minutes_ago": "pred {n}min", "hours_ago": "pred {n}h", "days_ago": "pred {n}d" },
"footer": { "support_development": "Podporte vývoj AISBF", "privacy_policy": "Zásady ochrany osobných údajov", "terms_of_service": "Podmienky služby", "contact": "Kontakt" },
"donate": { "title": "Podporte AISBF", "thank_you": "Ďakujeme za zváženie daru. Vaša podpora pomáha udržiavať AISBF ako úplne open source a bezplatný softvér.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Kliknutím na adresu ju skopírujete", "copied": "Skopírované!" },
"welcome": { "title": "Vitajte v AISBF!", "early_adopter": "Ďakujeme, že ste skorým používateľom! Momentálne sme v intenzívnej vývojovej fáze.", "may_encounter": "Môžete naraziť na chyby, výpadky služby alebo zmeny.", "feedback": "Vaša spätná väzba nám pomáha zlepšovať AISBF. Neváhajte nás kontaktovať!", "send_feedback": "Odoslať spätnú väzbu", "got_it": "Rozumiem!" },
"contact": { "title": "Kontaktujte nás", "your_email": "Váš e-mail", "type": "Typ", "select_type": "Vyberte typ...", "bug_report": "Hlásenie chyby", "feature_request": "Žiadosť o funkciu", "feedback": "Spätná väzba", "question": "Otázka", "help": "Pomoc", "title_field": "Názov", "title_placeholder": "Stručné zhrnutie vašej správy", "message": "Správa", "message_placeholder": "Popíšte svoj problém alebo žiadosť podrobne...", "send_message": "Odoslať správu", "cancel": "Zrušiť", "sending": "Odosielanie...", "success": "Správa úspešne odoslaná! Ďakujeme za spätnú väzbu.", "error": "Chyba: {error}", "network_error": "Chyba siete. Skúste to prosím znova." },
"modal": { "notice": "Oznámenie", "confirm": "Potvrdiť", "warning": "Varovanie", "ok": "OK", "cancel": "Zrušiť", "delete": "Zmazať" },
"common": { "save": "Uložiť", "loading": "Načítavanie...", "error": "Chyba", "success": "Úspech", "close": "Zavrieť", "yes": "Áno", "no": "Nie" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Hjälp", "docs": "Docs", "about": "Om", "license": "Licens", "restart_server": "Starta om servern", "logout": "Logga ut" },
"nav": { "overview": "Översikt", "providers": "Leverantörer", "rotations": "Rotationer", "autoselect": "Autoval", "prompts": "Uppmaningar", "analytics": "Analys", "api_tokens": "API-tokens", "wallet": "Plånbok", "usage": "Användning", "users": "Användare", "settings": "Inställningar", "tiers": "Nivåer", "payment_settings": "Betalningar", "upgrade": "✨ Uppgradera! ✨", "notifications": "Aviseringar", "account": "Konto" },
"account_menu": { "edit_profile": "Redigera profil", "api_tokens": "API-tokens", "cache_settings": "Cacheinställningar", "subscription": "Prenumeration", "wallet": "Plånbok", "billing": "Fakturering", "usage_quotas": "Användning & Kvoter", "change_password": "Byt lösenord" },
"notifications": { "title": "Aviseringar", "mark_all_read": "Markera alla som lästa", "refresh": "Uppdatera", "no_notifications": "Inga aviseringar", "just_now": "just nu", "minutes_ago": "för {n}min sedan", "hours_ago": "för {n}h sedan", "days_ago": "för {n}d sedan" },
"footer": { "support_development": "Stöd AISBF-utvecklingen", "privacy_policy": "Integritetspolicy", "terms_of_service": "Användarvillkor", "contact": "Kontakt" },
"donate": { "title": "Stöd AISBF", "thank_you": "Tack för att du överväger en donation. Ditt stöd hjälper till att hålla AISBF som helt öppen källkod och gratis programvara.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Klicka på en adress för att kopiera den", "copied": "Kopierat!" },
"welcome": { "title": "Välkommen till AISBF!", "early_adopter": "Tack för att du är en tidig användare! Vi befinner oss för närvarande i en intensiv utvecklingsfas.", "may_encounter": "Du kan stöta på buggar, tjänstavbrott eller ändringar.", "feedback": "Din feedback hjälper oss att förbättra AISBF. Tveka inte att höra av dig!", "send_feedback": "Skicka feedback", "got_it": "Förstått!" },
"contact": { "title": "Kontakta oss", "your_email": "Din e-post", "type": "Typ", "select_type": "Välj typ...", "bug_report": "Felrapport", "feature_request": "Funktionsförfrågan", "feedback": "Feedback", "question": "Fråga", "help": "Hjälp", "title_field": "Titel", "title_placeholder": "Kort sammanfattning av ditt meddelande", "message": "Meddelande", "message_placeholder": "Beskriv ditt problem eller din förfrågan i detalj...", "send_message": "Skicka meddelande", "cancel": "Avbryt", "sending": "Skickar...", "success": "Meddelandet skickades! Tack för din feedback.", "error": "Fel: {error}", "network_error": "Nätverksfel. Försök igen senare." },
"modal": { "notice": "Meddelande", "confirm": "Bekräfta", "warning": "Varning", "ok": "OK", "cancel": "Avbryt", "delete": "Ta bort" },
"common": { "save": "Spara", "loading": "Laddar...", "error": "Fel", "success": "Framgång", "close": "Stäng", "yes": "Ja", "no": "Nej" }
}
{
"header": { "title": "แดชบอร์ด AISBF", "help": "ช่วยเหลือ", "docs": "เอกสาร", "about": "เกี่ยวกับ", "license": "ใบอนุญาต", "restart_server": "รีสตาร์ทเซิร์ฟเวอร์", "logout": "ออกจากระบบ" },
"nav": { "overview": "ภาพรวม", "providers": "ผู้ให้บริการ", "rotations": "การหมุนเวียน", "autoselect": "เลือกอัตโนมัติ", "prompts": "พรอมต์", "analytics": "การวิเคราะห์", "api_tokens": "โทเค็น API", "wallet": "กระเป๋าเงิน", "usage": "การใช้งาน", "users": "ผู้ใช้", "settings": "การตั้งค่า", "tiers": "ระดับ", "payment_settings": "การชำระเงิน", "upgrade": "✨ อัปเกรด! ✨", "notifications": "การแจ้งเตือน", "account": "บัญชี" },
"account_menu": { "edit_profile": "แก้ไขโปรไฟล์", "api_tokens": "โทเค็น API", "cache_settings": "การตั้งค่าแคช", "subscription": "การสมัครสมาชิก", "wallet": "กระเป๋าเงิน", "billing": "การเรียกเก็บเงิน", "usage_quotas": "การใช้งานและโควต้า", "change_password": "เปลี่ยนรหัสผ่าน" },
"notifications": { "title": "การแจ้งเตือน", "mark_all_read": "ทำเครื่องหมายทั้งหมดว่าอ่านแล้ว", "refresh": "รีเฟรช", "no_notifications": "ไม่มีการแจ้งเตือน", "just_now": "เมื่อสักครู่", "minutes_ago": "{n} นาทีที่แล้ว", "hours_ago": "{n} ชั่วโมงที่แล้ว", "days_ago": "{n} วันที่แล้ว" },
"footer": { "support_development": "สนับสนุนการพัฒนา AISBF", "privacy_policy": "นโยบายความเป็นส่วนตัว", "terms_of_service": "เงื่อนไขการให้บริการ", "contact": "ติดต่อ" },
"donate": { "title": "สนับสนุน AISBF", "thank_you": "ขอบคุณที่พิจารณาบริจาค การสนับสนุนของคุณช่วยรักษา AISBF ให้เป็นซอฟต์แวร์โอเพนซอร์สและฟรีอย่างสมบูรณ์", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "คลิกที่อยู่ใดก็ได้เพื่อคัดลอก", "copied": "คัดลอกแล้ว!" },
"welcome": { "title": "ยินดีต้อนรับสู่ AISBF!", "early_adopter": "ขอบคุณที่เป็นผู้ใช้งานรุ่นแรก! ขณะนี้เราอยู่ในช่วงการพัฒนาอย่างเข้มข้น", "may_encounter": "คุณอาจพบข้อบกพร่อง การหยุดชะงักของบริการ หรือการเปลี่ยนแปลง", "feedback": "ความคิดเห็นของคุณช่วยให้เราทำให้ AISBF ดีขึ้น อย่าลังเลที่จะติดต่อเรา!", "send_feedback": "ส่งความคิดเห็น", "got_it": "เข้าใจแล้ว!" },
"contact": { "title": "ติดต่อเรา", "your_email": "อีเมลของคุณ", "type": "ประเภท", "select_type": "เลือกประเภท...", "bug_report": "รายงานข้อบกพร่อง", "feature_request": "ขอคุณสมบัติ", "feedback": "ความคิดเห็น", "question": "คำถาม", "help": "ช่วยเหลือ", "title_field": "หัวข้อ", "title_placeholder": "สรุปสั้นๆ ของข้อความของคุณ", "message": "ข้อความ", "message_placeholder": "อธิบายปัญหาหรือคำขอของคุณโดยละเอียด...", "send_message": "ส่งข้อความ", "cancel": "ยกเลิก", "sending": "กำลังส่ง...", "success": "ส่งข้อความสำเร็จ! ขอบคุณสำหรับความคิดเห็นของคุณ", "error": "ข้อผิดพลาด: {error}", "network_error": "ข้อผิดพลาดเครือข่าย โปรดลองอีกครั้งในภายหลัง" },
"modal": { "notice": "ประกาศ", "confirm": "ยืนยัน", "warning": "คำเตือน", "ok": "ตกลง", "cancel": "ยกเลิก", "delete": "ลบ" },
"common": { "save": "บันทึก", "loading": "กำลังโหลด...", "error": "ข้อผิดพลาด", "success": "สำเร็จ", "close": "ปิด", "yes": "ใช่", "no": "ไม่" }
}
{
"_note": "Klingon (tlhIngan Hol) — fictional language from Star Trek. Technical terms without Klingon equivalents fall back to English.",
"header": { "title": "AISBF HaSta", "help": "QaH", "docs": "ghItlh", "about": "nuq", "license": "chaw'", "restart_server": "HaSta yIchoH", "logout": "mej" },
"nav": { "overview": "legh", "providers": "Providers", "rotations": "Rotations", "autoselect": "Autoselect", "prompts": "Prompts", "analytics": "Analytics", "api_tokens": "API Tokens", "wallet": "Huch", "usage": "lo'", "users": "nuv", "settings": "nab", "tiers": "Tiers", "payment_settings": "Huch nab", "upgrade": "✨ HoS! ✨", "notifications": "QIn", "account": "pong" },
"account_menu": { "edit_profile": "pong tI'", "api_tokens": "API Tokens", "cache_settings": "Cache Settings", "subscription": "Subscription", "wallet": "Huch", "billing": "Billing", "usage_quotas": "lo' & Quotas", "change_password": "mung lI' tI'" },
"notifications": { "title": "QIn", "mark_all_read": "Hoch laDlu'", "refresh": "chu' ghoS", "no_notifications": "QIn tu'be'lu'", "just_now": "DaH", "minutes_ago": "{n} tup ret", "hours_ago": "{n} rep ret", "days_ago": "{n} jaj ret" },
"footer": { "support_development": "AISBF yIQaH", "privacy_policy": "Privacy Policy", "terms_of_service": "Terms of Service", "contact": "jatlh" },
"donate": { "title": "AISBF yIQaH", "thank_you": "qatlho'. bIQaHmo' AISBF yIn.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "nav yItap cha'", "copied": "taplu'!" },
"welcome": { "title": "AISBF yIghoS!", "early_adopter": "qatlho' wa'DIch lo'wI'pu'. maQap!", "may_encounter": "Qagh DaghomlaH.", "feedback": "mu'meylIj AISBF QaH. HIjatlh!", "send_feedback": "QIn yIlI'", "got_it": "jISov!" },
"contact": { "title": "HIjatlh", "your_email": "Email", "type": "Segh", "select_type": "Select type...", "bug_report": "Qagh QIn", "feature_request": "Feature Request", "feedback": "mu'mey", "question": "ghel", "help": "QaH", "title_field": "pong", "title_placeholder": "Brief summary", "message": "QIn", "message_placeholder": "Describe your issue...", "send_message": "QIn yIlI'", "cancel": "yImev", "sending": "lI'taH...", "success": "QIn lI'lu'! qatlho'.", "error": "Qagh: {error}", "network_error": "Network error. Please try again later." },
"modal": { "notice": "QIn", "confirm": "HIja'", "warning": "yIjach", "ok": "lu'", "cancel": "yImev", "delete": "teH" },
"common": { "save": "choq", "loading": "ngeD...", "error": "Qagh", "success": "Qap", "close": "SoQ", "yes": "HIja'", "no": "ghobe'" }
}
{
"header": { "title": "AISBF Pano", "help": "Yardım", "docs": "Belgeler", "about": "Hakkında", "license": "Lisans", "restart_server": "Sunucuyu Yeniden Başlat", "logout": "Çıkış" },
"nav": { "overview": "Genel Bakış", "providers": "Sağlayıcılar", "rotations": "Rotasyonlar", "autoselect": "Otomatik Seçim", "prompts": "İstemler", "analytics": "Analitik", "api_tokens": "API Tokenları", "wallet": "Cüzdan", "usage": "Kullanım", "users": "Kullanıcılar", "settings": "Ayarlar", "tiers": "Katmanlar", "payment_settings": "Ödeme Ayarları", "upgrade": "✨ Yükselt! ✨", "notifications": "Bildirimler", "account": "Hesap" },
"account_menu": { "edit_profile": "Profili Düzenle", "api_tokens": "API Tokenları", "cache_settings": "Önbellek Ayarları", "subscription": "Abonelik", "wallet": "Cüzdan", "billing": "Faturalama", "usage_quotas": "Kullanım ve Kotalar", "change_password": "Şifre Değiştir" },
"notifications": { "title": "Bildirimler", "mark_all_read": "Tümünü okundu işaretle", "refresh": "Yenile", "no_notifications": "Bildirim yok", "just_now": "şimdi", "minutes_ago": "{n}dk önce", "hours_ago": "{n}sa önce", "days_ago": "{n}g önce" },
"footer": { "support_development": "AISBF Geliştirmesini Destekle", "privacy_policy": "Gizlilik Politikası", "terms_of_service": "Hizmet Şartları", "contact": "İletişim" },
"donate": { "title": "AISBF'yi Destekle", "thank_you": "Bağış yapmayı düşündüğünüz için teşekkürler. Desteğiniz AISBF'nin tamamen açık kaynak ve ücretsiz yazılım olarak kalmasına yardımcı olur.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Kopyalamak için herhangi bir adrese tıklayın", "copied": "Kopyalandı!" },
"welcome": { "title": "AISBF'ye Hoş Geldiniz!", "early_adopter": "Erken benimseyici olduğunuz için teşekkürler! Şu anda yoğun geliştirme aşamasındayız.", "may_encounter": "Hatalar, hizmet kesintileri veya değişikliklerle karşılaşabilirsiniz.", "feedback": "Geri bildiriminiz AISBF'yi daha iyi yapmamıza yardımcı olur. Bize ulaşmaktan çekinmeyin!", "send_feedback": "Geri Bildirim Gönder", "got_it": "Anladım!" },
"contact": { "title": "Bize Ulaşın", "your_email": "E-postanız", "type": "Tür", "select_type": "Tür seçin...", "bug_report": "Hata Raporu", "feature_request": "Özellik İsteği", "feedback": "Geri Bildirim", "question": "Soru", "help": "Yardım", "title_field": "Başlık", "title_placeholder": "Mesajınızın kısa özeti", "message": "Mesaj", "message_placeholder": "Sorununuzu veya isteğinizi ayrıntılı olarak açıklayın...", "send_message": "Mesaj Gönder", "cancel": "İptal", "sending": "Gönderiliyor...", "success": "Mesaj başarıyla gönderildi! Geri bildiriminiz için teşekkürler.", "error": "Hata: {error}", "network_error": "Ağ hatası. Lütfen daha sonra tekrar deneyin." },
"modal": { "notice": "Bildirim", "confirm": "Onayla", "warning": "Uyarı", "ok": "Tamam", "cancel": "İptal", "delete": "Sil" },
"common": { "save": "Kaydet", "loading": "Yükleniyor...", "error": "Hata", "success": "Başarı", "close": "Kapat", "yes": "Evet", "no": "Hayır" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Допомога", "docs": "Docs", "about": "Про нас", "license": "Ліцензія", "restart_server": "Перезапустити сервер", "logout": "Вийти" },
"nav": { "overview": "Огляд", "providers": "Провайдери", "rotations": "Ротації", "autoselect": "Автовибір", "prompts": "Запити", "analytics": "Аналітика", "api_tokens": "API-токени", "wallet": "Гаманець", "usage": "Використання", "users": "Користувачі", "settings": "Налаштування", "tiers": "Рівні", "payment_settings": "Платежі", "upgrade": "✨ Оновити! ✨", "notifications": "Сповіщення", "account": "Акаунт" },
"account_menu": { "edit_profile": "Редагувати профіль", "api_tokens": "API-токени", "cache_settings": "Налаштування кешу", "subscription": "Підписка", "wallet": "Гаманець", "billing": "Виставлення рахунків", "usage_quotas": "Використання та квоти", "change_password": "Змінити пароль" },
"notifications": { "title": "Сповіщення", "mark_all_read": "Позначити всі як прочитані", "refresh": "Оновити", "no_notifications": "Немає сповіщень", "just_now": "щойно", "minutes_ago": "{n}хв тому", "hours_ago": "{n}год тому", "days_ago": "{n}д тому" },
"footer": { "support_development": "Підтримати розробку AISBF", "privacy_policy": "Політика конфіденційності", "terms_of_service": "Умови використання", "contact": "Контакт" },
"donate": { "title": "Підтримати AISBF", "thank_you": "Дякуємо за розгляд пожертви. Ваша підтримка допомагає підтримувати AISBF як повністю відкрите та безкоштовне програмне забезпечення.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Натисніть на адресу, щоб скопіювати її", "copied": "Скопійовано!" },
"welcome": { "title": "Ласкаво просимо до AISBF!", "early_adopter": "Дякуємо, що ви ранній користувач! Ми зараз перебуваємо у фазі інтенсивної розробки.", "may_encounter": "Ви можете зіткнутися з помилками або перебоями в роботі сервісу.", "feedback": "Ваші відгуки допомагають нам покращувати AISBF. Не соромтеся звертатися до нас!", "send_feedback": "Надіслати відгук", "got_it": "Зрозуміло!" },
"contact": { "title": "Зв'яжіться з нами", "your_email": "Ваш e-mail", "type": "Тип", "select_type": "Виберіть тип...", "bug_report": "Повідомлення про помилку", "feature_request": "Запит функції", "feedback": "Відгук", "question": "Питання", "help": "Допомога", "title_field": "Заголовок", "title_placeholder": "Короткий опис вашого повідомлення", "message": "Повідомлення", "message_placeholder": "Опишіть вашу проблему або запит детально...", "send_message": "Надіслати повідомлення", "cancel": "Скасувати", "sending": "Надсилання...", "success": "Повідомлення успішно надіслано! Дякуємо за ваш відгук.", "error": "Помилка: {error}", "network_error": "Помилка мережі. Будь ласка, спробуйте пізніше." },
"modal": { "notice": "Сповіщення", "confirm": "Підтвердити", "warning": "Попередження", "ok": "OK", "cancel": "Скасувати", "delete": "Видалити" },
"common": { "save": "Зберегти", "loading": "Завантаження...", "error": "Помилка", "success": "Успіх", "close": "Закрити", "yes": "Так", "no": "Ні" }
}
{
"header": { "title": "Bảng điều khiển AISBF", "help": "Trợ giúp", "docs": "Tài liệu", "about": "Giới thiệu", "license": "Giấy phép", "restart_server": "Khởi động lại máy chủ", "logout": "Đăng xuất" },
"nav": { "overview": "Tổng quan", "providers": "Nhà cung cấp", "rotations": "Luân chuyển", "autoselect": "Tự động chọn", "prompts": "Lời nhắc", "analytics": "Phân tích", "api_tokens": "Token API", "wallet": "Ví", "usage": "Sử dụng", "users": "Người dùng", "settings": "Cài đặt", "tiers": "Cấp độ", "payment_settings": "Thanh toán", "upgrade": "✨ Nâng cấp! ✨", "notifications": "Thông báo", "account": "Tài khoản" },
"account_menu": { "edit_profile": "Chỉnh sửa hồ sơ", "api_tokens": "Token API", "cache_settings": "Cài đặt bộ nhớ đệm", "subscription": "Đăng ký", "wallet": "Ví", "billing": "Thanh toán", "usage_quotas": "Sử dụng & Hạn ngạch", "change_password": "Đổi mật khẩu" },
"notifications": { "title": "Thông báo", "mark_all_read": "Đánh dấu tất cả đã đọc", "refresh": "Làm mới", "no_notifications": "Không có thông báo", "just_now": "vừa xong", "minutes_ago": "{n} phút trước", "hours_ago": "{n} giờ trước", "days_ago": "{n} ngày trước" },
"footer": { "support_development": "Hỗ trợ phát triển AISBF", "privacy_policy": "Chính sách bảo mật", "terms_of_service": "Điều khoản dịch vụ", "contact": "Liên hệ" },
"donate": { "title": "Hỗ trợ AISBF", "thank_you": "Cảm ơn bạn đã xem xét quyên góp. Sự hỗ trợ của bạn giúp duy trì AISBF như một phần mềm mã nguồn mở và miễn phí hoàn toàn.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Nhấp vào bất kỳ địa chỉ nào để sao chép", "copied": "Đã sao chép!" },
"welcome": { "title": "Chào mừng đến với AISBF!", "early_adopter": "Cảm ơn bạn đã là người dùng sớm! Chúng tôi hiện đang trong giai đoạn phát triển chuyên sâu.", "may_encounter": "Bạn có thể gặp lỗi, gián đoạn dịch vụ hoặc thay đổi.", "feedback": "Phản hồi của bạn giúp chúng tôi cải thiện AISBF. Đừng ngần ngại liên hệ!", "send_feedback": "Gửi phản hồi", "got_it": "Đã hiểu!" },
"contact": { "title": "Liên hệ với chúng tôi", "your_email": "Email của bạn", "type": "Loại", "select_type": "Chọn loại...", "bug_report": "Báo cáo lỗi", "feature_request": "Yêu cầu tính năng", "feedback": "Phản hồi", "question": "Câu hỏi", "help": "Trợ giúp", "title_field": "Tiêu đề", "title_placeholder": "Tóm tắt ngắn gọn tin nhắn của bạn", "message": "Tin nhắn", "message_placeholder": "Mô tả chi tiết vấn đề hoặc yêu cầu của bạn...", "send_message": "Gửi tin nhắn", "cancel": "Hủy", "sending": "Đang gửi...", "success": "Tin nhắn đã được gửi thành công! Cảm ơn phản hồi của bạn.", "error": "Lỗi: {error}", "network_error": "Lỗi mạng. Vui lòng thử lại sau." },
"modal": { "notice": "Thông báo", "confirm": "Xác nhận", "warning": "Cảnh báo", "ok": "OK", "cancel": "Hủy", "delete": "Xóa" },
"common": { "save": "Lưu", "loading": "Đang tải...", "error": "Lỗi", "success": "Thành công", "close": "Đóng", "yes": "Có", "no": "Không" }
}
{
"_note": "Vulcan — fictional language from Star Trek. Many technical terms have no Vulcan equivalent and fall back to English.",
"header": { "title": "AISBF t'Veh", "help": "Ek'tra", "docs": "Veh-kur", "about": "Ri'nah", "license": "Sochya", "restart_server": "Restart Server", "logout": "Ek'tra-tor" },
"nav": { "overview": "Kol-ut-shan", "providers": "Providers", "rotations": "Rotations", "autoselect": "Autoselect", "prompts": "Prompts", "analytics": "Analytics", "api_tokens": "API Tokens", "wallet": "Kash-naf", "usage": "Ek'naf", "users": "Vuhlkansu", "settings": "Sochya-tor", "tiers": "Tiers", "payment_settings": "Payment Settings", "upgrade": "✨ Ek'naf! ✨", "notifications": "Veh-tor", "account": "Katra" },
"account_menu": { "edit_profile": "Katra t'Veh", "api_tokens": "API Tokens", "cache_settings": "Cache Settings", "subscription": "Subscription", "wallet": "Kash-naf", "billing": "Billing", "usage_quotas": "Usage & Quotas", "change_password": "Sochya-tor Kash" },
"notifications": { "title": "Veh-tor", "mark_all_read": "Kol-ut veh", "refresh": "Ek'tra", "no_notifications": "Ri veh-tor", "just_now": "Sochya", "minutes_ago": "{n} reh", "hours_ago": "{n} kah", "days_ago": "{n} sarlah" },
"footer": { "support_development": "Ek'tra AISBF", "privacy_policy": "Privacy Policy", "terms_of_service": "Terms of Service", "contact": "Veh-tor" },
"donate": { "title": "Ek'tra AISBF", "thank_you": "Nam-tor. Ek'traik AISBF sochya t'du.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Kash t'veh ek'tra", "copied": "Ek'traik!" },
"welcome": { "title": "Sochya AISBF!", "early_adopter": "Nam-tor t'du wa'reh vuhlkansu. Sochya.", "may_encounter": "Ri'nah t'veh ek'naf.", "feedback": "Veh-tor t'du ek'tra AISBF. Veh-tor!", "send_feedback": "Veh-tor Ek'tra", "got_it": "Sochya!" },
"contact": { "title": "Veh-tor", "your_email": "Email", "type": "Kol", "select_type": "Select type...", "bug_report": "Bug Report", "feature_request": "Feature Request", "feedback": "Veh-tor", "question": "Ri'nah", "help": "Ek'tra", "title_field": "Kol-ut", "title_placeholder": "Brief summary", "message": "Veh-tor", "message_placeholder": "Describe your issue...", "send_message": "Veh-tor Ek'tra", "cancel": "Ri-tor", "sending": "Ek'traik...", "success": "Veh-tor ek'traik! Nam-tor.", "error": "Ri'nah: {error}", "network_error": "Network error. Please try again later." },
"modal": { "notice": "Veh-tor", "confirm": "Sochya", "warning": "Ri'nah", "ok": "Nam-tor", "cancel": "Ri-tor", "delete": "Ek'naf" },
"common": { "save": "Kol-ut", "loading": "Ek'traik...", "error": "Ri'nah", "success": "Sochya", "close": "Ri-tor", "yes": "Sochya", "no": "Ri" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Uncedo", "docs": "Amaxwebhu", "about": "Malunga", "license": "Ilayisensi", "restart_server": "Qala kwakhona iseva", "logout": "Phuma" },
"nav": { "overview": "Uhlobo olufutshane", "providers": "Abanikezeli", "rotations": "Ukujikeleza", "autoselect": "Khetha ngokuzenzekela", "prompts": "Izikhokelo", "analytics": "Uhlalutyo", "api_tokens": "Amatokeni e-API", "wallet": "Isikhwama", "usage": "Ukusetyenziswa", "users": "Abasebenzisi", "settings": "Izicwangciso", "tiers": "Amazinga", "payment_settings": "Intlawulo", "upgrade": "✨ Phakamisa! ✨", "notifications": "Izaziso", "account": "I-akhawunti" },
"account_menu": { "edit_profile": "Hlela iprofayile", "api_tokens": "Amatokeni e-API", "cache_settings": "Izicwangciso ze-cache", "subscription": "Ukubhalisa", "wallet": "Isikhwama", "billing": "Iinvoisi", "usage_quotas": "Ukusetyenziswa neekwota", "change_password": "Tshintsha igama lokugqitha" },
"notifications": { "title": "Izaziso", "mark_all_read": "Phawula konke njengokufundiweyo", "refresh": "Hlaziya", "no_notifications": "Azikho izaziso", "just_now": "ngoku nje", "minutes_ago": "imizuzu {n} eyadlulayo", "hours_ago": "iiyure {n} eyadlulayo", "days_ago": "iintsuku {n} eyadlulayo" },
"footer": { "support_development": "Xhasa uphuhliso lwe-AISBF", "privacy_policy": "Umgaqo-nkqubo wabucala", "terms_of_service": "Imiqathango yenkonzo", "contact": "Qhagamshelana" },
"donate": { "title": "Xhasa i-AISBF", "thank_you": "Enkosi ngokuqwalasela ukupha. Inkxaso yakho inceda ukugcina i-AISBF njenge-software evulekileyo simahla.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Cofa naliphi na idilesi ukukopisha", "copied": "Ikopishiwe!" },
"welcome": { "title": "Wamkelekile kwi-AISBF!", "early_adopter": "Enkosi ngokuba umsebenzisi wokuqala! Sikwifazini yophuhliso olukhulu.", "may_encounter": "Unokudibana neempazamo okanye ukuphazamiseka kwenkonzo.", "feedback": "Impendulo yakho isinceda ukuphucula i-AISBF. Ungayi nkxalabi ukuqhagamshelana nathi!", "send_feedback": "Thumela impendulo", "got_it": "Ndiyaqonda!" },
"contact": { "title": "Qhagamshelana nathi", "your_email": "I-imeyile yakho", "type": "Uhlobo", "select_type": "Khetha uhlobo...", "bug_report": "Ingxelo yephutha", "feature_request": "Isicelo sesici", "feedback": "Impendulo", "question": "Umbuzo", "help": "Uncedo", "title_field": "Isihloko", "title_placeholder": "Isishwankathelo esifutshane somyalezo wakho", "message": "Umyalezo", "message_placeholder": "Chaza ingxaki okanye isicelo sakho ngokuthe vetshe...", "send_message": "Thumela umyalezo", "cancel": "Rhoxisa", "sending": "Iyathunywa...", "success": "Umyalezo uthunywe ngempumelelo! Enkosi ngempendulo yakho.", "error": "Impazamo: {error}", "network_error": "Impazamo yenethiwekhi. Zama kwakhona kamva." },
"modal": { "notice": "Isaziso", "confirm": "Qinisekisa", "warning": "Isilumkiso", "ok": "Kulungile", "cancel": "Rhoxisa", "delete": "Cima" },
"common": { "save": "Gcina", "loading": "Iyalayisha...", "error": "Impazamo", "success": "Impumelelo", "close": "Vala", "yes": "Ewe", "no": "Hayi" }
}
{
"header": { "title": "AISBF 控制台", "help": "帮助", "docs": "文档", "about": "关于", "license": "许可证", "restart_server": "重启服务器", "logout": "退出" },
"nav": { "overview": "概览", "providers": "提供商", "rotations": "轮换", "autoselect": "自动选择", "prompts": "提示词", "analytics": "分析", "api_tokens": "API 令牌", "wallet": "钱包", "usage": "用量", "users": "用户", "settings": "设置", "tiers": "套餐", "payment_settings": "支付设置", "upgrade": "✨ 升级!✨", "notifications": "通知", "account": "账户" },
"account_menu": { "edit_profile": "编辑资料", "api_tokens": "API 令牌", "cache_settings": "缓存设置", "subscription": "订阅", "wallet": "钱包", "billing": "账单", "usage_quotas": "用量与配额", "change_password": "修改密码" },
"notifications": { "title": "通知", "mark_all_read": "全部标为已读", "refresh": "刷新", "no_notifications": "暂无通知", "just_now": "刚刚", "minutes_ago": "{n}分钟前", "hours_ago": "{n}小时前", "days_ago": "{n}天前" },
"footer": { "support_development": "支持 AISBF 开发", "privacy_policy": "隐私政策", "terms_of_service": "服务条款", "contact": "联系我们" },
"donate": { "title": "支持 AISBF", "thank_you": "感谢您考虑捐款。您的支持有助于将 AISBF 维护为完全开源的免费软件。", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "点击任意地址复制到剪贴板", "copied": "已复制!" },
"welcome": { "title": "欢迎使用 AISBF!", "early_adopter": "感谢您成为早期用户!我们目前处于密集开发阶段。", "may_encounter": "您可能会遇到错误、服务中断或变更。", "feedback": "您的反馈有助于我们改进 AISBF。请随时联系我们!", "send_feedback": "发送反馈", "got_it": "明白了!" },
"contact": { "title": "联系我们", "your_email": "您的邮箱", "type": "类型", "select_type": "选择类型...", "bug_report": "错误报告", "feature_request": "功能请求", "feedback": "反馈", "question": "问题", "help": "帮助", "title_field": "标题", "title_placeholder": "消息的简短摘要", "message": "消息", "message_placeholder": "详细描述您的问题或请求...", "send_message": "发送消息", "cancel": "取消", "sending": "发送中...", "success": "消息发送成功!感谢您的反馈。", "error": "错误:{error}", "network_error": "网络错误,请稍后重试。" },
"modal": { "notice": "通知", "confirm": "确认", "warning": "警告", "ok": "确定", "cancel": "取消", "delete": "删除" },
"common": { "save": "保存", "loading": "加载中...", "error": "错误", "success": "成功", "close": "关闭", "yes": "是", "no": "否" }
}
{
"header": { "title": "AISBF Dashboard", "help": "Usizo", "docs": "Amadokhumenti", "about": "Mayelana", "license": "Ilayisensi", "restart_server": "Qala kabusha iseva", "logout": "Phuma" },
"nav": { "overview": "Uhlolojikelele", "providers": "Abahlinzeki", "rotations": "Ukuphenduka", "autoselect": "Khetha ngokuzenzakalelayo", "prompts": "Iziqondiso", "analytics": "Ukuhlaziya", "api_tokens": "Amathokheni e-API", "wallet": "Isikhwama", "usage": "Ukusetshenziswa", "users": "Abasebenzisi", "settings": "Izilungiselelo", "tiers": "Amazinga", "payment_settings": "Inkokhelo", "upgrade": "✨ Thuthukisa! ✨", "notifications": "Izaziso", "account": "I-akhawunti" },
"account_menu": { "edit_profile": "Hlela iphrofayili", "api_tokens": "Amathokheni e-API", "cache_settings": "Izilungiselelo ze-cache", "subscription": "Ukubhalisa", "wallet": "Isikhwama", "billing": "Iinvoisi", "usage_quotas": "Ukusetshenziswa nezilinganiso", "change_password": "Shintsha iphasiwedi" },
"notifications": { "title": "Izaziso", "mark_all_read": "Phawula konke njengokufundiwe", "refresh": "Vuselela", "no_notifications": "Azikho izaziso", "just_now": "manje nje", "minutes_ago": "imizuzu engu-{n} edlule", "hours_ago": "amahora angu-{n} adlule", "days_ago": "izinsuku ezingu-{n} ezidlule" },
"footer": { "support_development": "Xhasa ukuthuthukiswa kwe-AISBF", "privacy_policy": "Inqubomgomo yobumfihlo", "terms_of_service": "Imigomo yenkonzo", "contact": "Xhumana" },
"donate": { "title": "Xhasa i-AISBF", "thank_you": "Siyabonga ngokuqonda ukupha. Ukuxhaswa kwakho kusiza ukugcina i-AISBF njenge-software evulekile simahla.", "bitcoin": "Bitcoin (BTC)", "ethereum": "Ethereum (ETH), USDC, USDT (ERC20, Mainnet)", "click_to_copy": "Chofoza noma yiliphi ikheli ukukopisha", "copied": "Ikopishiwe!" },
"welcome": { "title": "Wamukelekile ku-AISBF!", "early_adopter": "Siyabonga ngokuba umsebenzisi wokuqala! Sikhona esigabeni sokuthuthukiswa okukhulu.", "may_encounter": "Ungahlangabezana neziphazamiso noma ukuphazamiseka kwenkonzo.", "feedback": "Impendulo yakho isixhasa ukuthuthukisa i-AISBF. Ungamanqabi ukuxhumana nathi!", "send_feedback": "Thumela impendulo", "got_it": "Ngiyaqonda!" },
"contact": { "title": "Xhumana nathi", "your_email": "I-imeyili yakho", "type": "Uhlobo", "select_type": "Khetha uhlobo...", "bug_report": "Umbiko wesiphazamiso", "feature_request": "Isicelo sesici", "feedback": "Impendulo", "question": "Umbuzo", "help": "Usizo", "title_field": "Isihloko", "title_placeholder": "Isifinyezo esifushane somyalezo wakho", "message": "Umyalezo", "message_placeholder": "Chaza inkinga noma isicelo sakho ngokuningiliziwe...", "send_message": "Thumela umyalezo", "cancel": "Khansela", "sending": "Iyathunywa...", "success": "Umyalezo uthunywe ngempumelelo! Siyabonga ngempendulo yakho.", "error": "Iphutha: {error}", "network_error": "Iphutha lenethiwekhi. Zama futhi kamuva." },
"modal": { "notice": "Isaziso", "confirm": "Qinisekisa", "warning": "Isexwayiso", "ok": "Kulungile", "cancel": "Khansela", "delete": "Susa" },
"common": { "save": "Gcina", "loading": "Iyalayisha...", "error": "Iphutha", "success": "Impumelelo", "close": "Vala", "yes": "Yebo", "no": "Cha" }
}
This diff is collapsed.
......@@ -35,4 +35,4 @@
<p>We do not support the Israeli genocide of Palestinian people.</p>
</div>
</body>
</html>
\ No newline at end of file
</html>
import pytest
from unittest.mock import patch, Mock
from geolocation import get_ip_country, _ip_country_cache
from unittest.mock import patch, AsyncMock, Mock
from aisbf.geolocation import get_ip_country, _ip_country_cache
@pytest.mark.asyncio
async def test_invalid_ip_validation():
"""Test that invalid IPs return None without API call"""
_ip_country_cache.clear()
with patch('httpx.AsyncClient.get') as mock_get:
with patch('httpx.AsyncClient.get', new_callable=AsyncMock) as mock_get:
result = await get_ip_country("invalid")
assert result is None
assert _ip_country_cache["invalid"] is None
......@@ -16,31 +16,29 @@ async def test_invalid_ip_validation():
async def test_caching():
"""Test that results are cached and repeated calls return cached results"""
_ip_country_cache.clear()
with patch('httpx.AsyncClient.get') as mock_get:
mock_response = Mock()
mock_response.status_code = 200
mock_response.text = "US"
mock_response = Mock()
mock_response.status_code = 200
mock_response.text = "US"
with patch('httpx.AsyncClient.get', new_callable=AsyncMock) as mock_get:
mock_get.return_value = mock_response
# First call
result1 = await get_ip_country("1.1.1.1")
assert result1 == "US"
assert _ip_country_cache["1.1.1.1"] == "US"
mock_get.assert_called_once()
# Second call should use cache
result2 = await get_ip_country("1.1.1.1")
assert result2 == "US"
mock_get.assert_called_once() # Still only one call
mock_get.assert_called_once() # cache hit — still only one call
@pytest.mark.asyncio
async def test_error_handling():
"""Test error handling for valid IPs when API fails"""
_ip_country_cache.clear()
with patch('httpx.AsyncClient.get') as mock_get:
with patch('httpx.AsyncClient.get', new_callable=AsyncMock) as mock_get:
mock_get.side_effect = Exception("API fail")
result = await get_ip_country("1.1.1.1")
assert result is None
assert _ip_country_cache["1.1.1.1"] is None
mock_get.assert_called_once()
\ No newline at end of file
mock_get.assert_called_once()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment