fix: locales in admin panel settings page

This commit is contained in:
3252a8
2026-05-12 10:31:21 +03:00
parent 9679190709
commit b9c0dfb9a1
5 changed files with 282 additions and 87 deletions
+8 -4
View File
@@ -173,8 +173,8 @@ SETTINGS_MANIFEST: List[SettingField] = [
"notifications",
"Логировать действия администраторов",
"Если выключено, события от пользователей из ADMIN_IDS не записываются в message logs.",
i18n_label_key="admin_settings_field_log_admin_actions_label",
i18n_description_key="admin_settings_field_log_admin_actions_description",
i18n_label_key="settings_field_log_admin_actions_label",
i18n_description_key="settings_field_log_admin_actions_description",
),
SettingField("LOG_LEVEL", "string", "notifications", "Глобальный уровень логов", "DEBUG / INFO / WARNING / ERROR"),
SettingField("LOG_CHAT_ID", "int", "notifications", "ID чата для логов"),
@@ -255,6 +255,8 @@ def manifest_payload() -> List[dict]:
}
items: List[dict] = []
for field in SETTINGS_MANIFEST:
auto_label_i18n_key = f"settings_field_{field.key.lower()}_label"
auto_description_i18n_key = f"settings_field_{field.key.lower()}_description"
items.append(
{
"key": field.key,
@@ -264,8 +266,10 @@ def manifest_payload() -> List[dict]:
"subsection": field.subsection,
"label": field.label,
"description": field.description,
"i18n_label_key": field.i18n_label_key,
"i18n_description_key": field.i18n_description_key,
"i18n_label_key": field.i18n_label_key or auto_label_i18n_key,
"i18n_description_key": field.i18n_description_key or (
auto_description_i18n_key if field.description else None
),
"placeholder": field.placeholder,
"optional": field.optional,
"secret": field.secret,
@@ -494,7 +494,7 @@
{/if}
{#if active === "settings"}
<SettingsSection {at} {isCompact} {onSettingsSaved} />
<SettingsSection {at} {isCompact} {onSettingsSaved} {currentLang} />
{/if}
</main>
</section>
@@ -7,6 +7,7 @@
export let at;
export let onSettingsSaved;
export let isCompact = false;
export let currentLang = "ru";
const settingsStore = getContext("settingsStore");
@@ -90,6 +91,28 @@
};
return map[id] || id;
}
function englishFieldLabelFallback(key, originalLabel) {
if (!key) return originalLabel || "";
return String(key)
.toLowerCase()
.split("_")
.filter(Boolean)
.map((part) => {
if (part === "id") return "ID";
if (part === "url") return "URL";
if (part === "api") return "API";
if (part === "tg") return "TG";
return part.charAt(0).toUpperCase() + part.slice(1);
})
.join(" ");
}
function fieldLabelText(field) {
const isEnglish = String(currentLang || "").toLowerCase().startsWith("en");
const fallback = isEnglish ? englishFieldLabelFallback(field.key, field.label) : field.label;
return field.i18n_label_key ? at(field.i18n_label_key, {}, fallback) : fallback;
}
</script>
{#snippet renderField(field)}
@@ -97,7 +120,7 @@
<div class="admin-setting" class:is-overridden={isOverridden(field)}>
<div class="admin-setting-meta">
<strong>
{field.i18n_label_key ? at(field.i18n_label_key, {}, field.label) : field.label}
{fieldLabelText(field)}
<AdminBadge variant="warning">{at("settings_badge_secret", {}, "Secret")}</AdminBadge>
{#if isOverridden(field)}
<AdminBadge variant="success">{at("settings_badge_override", {}, "Override")}</AdminBadge>