Files
hugo-theme-stack/i18n/ru.toml
T
4ad88a327e feat: add GDPR cookie consent banner (#1216)
* feat: add GDPR cookie consent banner

Add a GDPR-compliant cookie consent banner that gates analytics (Google
Analytics) and functional cookies (comments) until user consent is given.

Features:
- Theme-consistent styling using CSS variables (light/dark mode)
- Settings panel with category toggles (necessary, analytics, functional)
- Consent stored in cookie for 365 days
- Google Analytics only loads after analytics consent
- Comments only load after functional consent
- Translations for all 32 supported languages
- Accessible with proper ARIA attributes and focus management

Configuration in hugo.yaml:
  params:
    cookies:
      enabled: true
      categories:
        analytics: true
        functional: true

When cookies.enabled is false, scripts load normally without consent gating.

Closes #412

* refactor: move consent-gated GA to cookies/analytics.html

Move Google Analytics consent logic to avoid shadowing Hugo's internal
`_internal/google_analytics.html` template.

Changes:
- Rename google_analytics.html → cookies/analytics.html
- Update head.html to conditionally load:
  - cookies.enabled=true: cookies/analytics.html (consent-gated)
  - cookies.enabled=false: Hugo's _internal/google_analytics.html
- Align cookies/analytics.html with Hugo's internal template:
  - Support Privacy.GoogleAnalytics.Disable setting
  - Support Privacy.GoogleAnalytics.RespectDoNotTrack setting
  - Add UA- prefix deprecation warning

Note: Custom JS is required for consent-gated GA because Hugo templates
render at build time, but consent happens at runtime. We cannot call
Hugo's internal template after the user grants consent - we must
dynamically inject the GA script via JavaScript.

* style: indent cookies/analytics.html

* refactor: don't use default, put default configurations in params.toml

* fix: don't use `description` as translation key because it's reserved and will throw error

* fix: remove footer/components/custom-font.html call

* fix: banner showSettings key

* style: indent comments/include

* Add missing article.alert translation back

* style: format i18n toml files

* style: indent head/head.html

* style adjustment

* style: add missing -

* style: format demo/config/params.toml

* style: remove redundant comments from cookies.scss

* style: update box-shadow for cookie banner content

---------

Co-authored-by: delize <4028612+delize@users.noreply.github.com>
Co-authored-by: Jimmy Cai <jimmy@cai.im>
2026-02-19 17:21:25 +01:00

80 lines
3.1 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
toggleMenu = "Показать/скрыть меню"
darkMode = "Тёмный режим"
[list]
section = "Раздел"
[list.page]
one = "{{ .Count }} страница"
few = "{{ .Count }} страницы"
many = "{{ .Count }} страниц"
other = "{{ .Count }} страниц"
[list.subsection]
one = "Подраздел"
few = "Подразделы"
many = "Подразделы"
other = "Подразделы"
[article]
back = "Назад"
relatedContent = "Также рекомендуем"
lastUpdatedOn = "Обновлено"
tableOfContents = "Содержание"
readingTime = "Время чтения: {{ .Count }} мин."
[article.alert]
note = "Примечание"
tip = "Совет"
important = "Важно"
warning = "Предупреждение"
caution = "Осторожно"
[notFound]
title = "Не найдено"
subtitle = "Запрашиваемая страница не существует"
[widget]
[widget.archives]
title = "Архивы"
more = "Ещё"
[widget.tagCloud]
title = "Теги"
[widget.categoriesCloud]
title = "Категории"
[search]
title = "Поиск"
placeholder = "Введите что-нибудь..."
resultTitle = "Найдено #PAGES_COUNT страниц (за #TIME_SECONDS с.)"
[footer]
builtWith = "Создано при помощи {{ .Generator }}"
designedBy = "Тема {{ .Theme }}, дизайн {{ .DesignedBy }}"
[cookies]
title = "Согласие на использование файлов cookie"
text = "Мы используем файлы cookie для улучшения вашего опыта просмотра и анализа трафика сайта."
acceptAll = "Принять все"
deny = "Отклонить"
managePreferences = "Управление настройками"
settingsTitle = "Настройки файлов cookie"
savePreferences = "Сохранить настройки"
cancel = "Отмена"
footerLink = "Настройки файлов cookie"
commentsDisabled = "Комментарии отключены, пока вы не примете функциональные файлы cookie."
[cookies.necessary]
title = "Необходимые"
text = "Эти файлы cookie необходимы для работы сайта и не могут быть отключены."
[cookies.analytics]
title = "Аналитика"
text = "Эти файлы cookie помогают нам понять, как посетители взаимодействуют с нашим сайтом."
[cookies.functional]
title = "Функциональные"
text = "Эти файлы cookie включают такие функции, как комментарии и встроенный контент."