localization, dark theme

This commit is contained in:
2025-11-11 08:26:25 +09:00
parent 68bbef35ee
commit 271f303757
8 changed files with 725 additions and 81 deletions

View File

@@ -445,7 +445,7 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
<div className="col-12 mb-3">
<div className="alert alert-info">
<i className="bi bi-info-circle me-2"></i>
<strong>Совет:</strong> Попробуйте разные макеты, чтобы найти наиболее подходящий для вашего контента.
<strong>{t('customization.layout.tip')}</strong> {t('customization.layout.tipText')}
Каждый стиль имеет свои преимущества в зависимости от количества ссылок и их типа.
</div>
</div>
@@ -515,7 +515,7 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
<div className="d-flex align-items-center gap-2">
<img
src={settings.background_image_url}
alt="Текущий фон"
alt={t('customization.colors.currentBackgroundAlt')}
className="img-thumbnail"
style={{ maxWidth: '200px', maxHeight: '100px', objectFit: 'cover' }}
/>
@@ -654,13 +654,13 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
onChange={(e) => handleChange('show_groups_title', e.target.checked)}
/>
<label className="form-check-label">
Показывать заголовок "Группы ссылок"
{t('customization.colors.showGroupsTitle')}
</label>
</div>
</div>
<div className="col-md-6 mb-3">
<label className="form-label">Цвет описаний групп</label>
<label className="form-label">{t('customization.colors.groupDescription')}</label>
<div className="input-group">
<input
type="color"
@@ -681,7 +681,7 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
<div className="col-12 mb-3">
<div className="card">
<div className="card-header">
<h6 className="mb-0">Цветовое перекрытие групп</h6>
<h6 className="mb-0">{t('customization.colors.groupOverlay')}</h6>
</div>
<div className="card-body">
<div className="form-check mb-3">
@@ -708,7 +708,7 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
className="form-control form-control-color"
value={settings.group_overlay_color || '#000000'}
onChange={(e) => handleChange('group_overlay_color', e.target.value)}
title="Выберите цвет перекрытия"
title={t('customization.colors.chooseOverlayColor')}
/>
<input
type="text"
@@ -716,7 +716,7 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
value={settings.group_overlay_color || '#000000'}
onChange={(e) => handleChange('group_overlay_color', e.target.value)}
placeholder="#000000"
title="Hex код цвета"
title={t('customization.colors.hexColorCode')}
/>
</div>
</div>
@@ -767,7 +767,7 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
<div className="col-12">
<div className="alert alert-info">
<i className="bi bi-info-circle me-2"></i>
<strong>Настройки отдельных групп</strong><br/>
<strong>{t('customization.advanced.individualGroupSettings')}</strong><br/>
Чтобы настроить конкретную группу (публичность, избранное, разворачивание), используйте кнопку редактирования рядом с названием группы в основном списке.
</div>
</div>
@@ -776,7 +776,7 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
<div className="col-12 mt-4">
<div className="border rounded p-3">
<div className="d-flex align-items-center justify-content-between mb-3">
<h6 className="mb-0">Цветовое перекрытие кнопок ссылок</h6>
<h6 className="mb-0">{t('customization.colors.linkOverlay')}</h6>
<div className="form-check form-switch">
<input
className="form-check-input"
@@ -883,8 +883,8 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
value={settings.font_family}
onChange={(e) => handleChange('font_family', e.target.value)}
>
<option value="sans-serif">Системный Sans Serif</option>
<option value="serif">Системный Serif</option>
<option value="sans-serif">{t('customization.advanced.systemSansSerif')}</option>
<option value="serif">{t('customization.advanced.systemSerif')}</option>
<option value="monospace">Monospace</option>
<option value="'PT Sans', sans-serif">PT Sans</option>
<option value="'PT Serif', serif">PT Serif</option>
@@ -906,7 +906,7 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
value={settings.heading_font_family || settings.font_family}
onChange={(e) => handleChange('heading_font_family', e.target.value)}
>
<option value="">Как основной</option>
<option value="">{t('customization.advanced.sameAsMain')}</option>
<option value="'PT Sans', sans-serif">PT Sans</option>
<option value="'PT Serif', serif">PT Serif</option>
<option value="'Roboto', sans-serif">Roboto</option>
@@ -935,7 +935,7 @@ export function CustomizationPanel({ isOpen, onClose, onSettingsUpdate, user, gr
value={settings.body_font_family || settings.font_family}
onChange={(e) => handleChange('body_font_family', e.target.value)}
>
<option value="">Как основной</option>
<option value="">{t('customization.advanced.sameAsMain')}</option>
<option value="'PT Sans', sans-serif">PT Sans</option>
<option value="'PT Serif', serif">PT Serif</option>
<option value="'Roboto', sans-serif">Roboto</option>