Files
Cell 5f1e79f49c feat(i18n): add RTL support for Arabic, Persian and Urdu (#831)
* feat(i18n): add RTL support and Arabic/Persian translations

- Add `dir` attribute to `<html>` via `.Site.Language.Direction`
- Convert physical CSS properties to logical properties across ~30 SCSS files
- Add `[dir="rtl"]` overrides for elements that need physical direction (code blocks, translate, icons)
- Add `logical-direction.html` template function for config value normalization
- Add RTL-aware deprecation warnings for old "left"/"right" config values
- Rename github corner, TOC position, reading progress config values from "left"/"right" to "start"/"end"
- Add Arabic (ar.toml) and Persian (fa.toml) i18n translation files
- Update multilingual documentation with RTL language configuration guide

* feat(shortcodes): add RTL support for tabs and refactor border-radius mixin

- Rename tabs placement values from "left"/"right" to "start"/"end" with deprecation warnings
- Convert all physical directional properties in tabs SCSS to logical properties
- Add RTL overrides for translate and box-shadow in tabs
- Add "start"/"end" support to border-radius mixin using CSS logical properties
- Refactor fixit-decryptor to use border-radius(start/end) mixin

* feat(assets): add RTL support for toc-dialog slide animation

The mobile toc-dialog always slid in from the right (100vw). In RTL
mode it should slide from the left (-100vw), matching the
border-inline-start/margin-inline-end anchoring.

* feat(assets): add RTL support for post-tag comma separator

* refactor(assets): extract RTL styles into dedicated _rtl.scss

* feat(assets): add RTL support for theme-switch and directional icons

* feat(i18n): add RTL support and improve i18n

- Add RTL typography corrections for Arabic-script languages (:lang(ar/fa/ur))
- Remove fa-list-ol from RTL flip list (numbers get mirrored)
- Add Urdu translation file (i18n/ur.toml)
- Rename noMoretTranslations to noTranslations and simplify all translations
- Update json-viewer-element from 1.0.4 to 1.0.6
- Add RTL test posts (index.en.md, index.ar.md)
- Fix layout partials for RTL support

See https://fixit.lruihao.cn/docs/content-management/introduction/#rtl-language-support
2026-08-24 00:22:34 +08:00

265 lines
9.1 KiB
TOML
Raw Permalink 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.
# Translations for Russian
# Переводы на русский
# https://gohugo.io/content-management/multilingual/#translation-of-strings
# === Init ===
[init]
hugoVersionError = "Версия Hugo слишком низкая.\n\nТекущая версия Hugo — {{ .Current }}, минимальная поддерживаемая версия для FixIt — {{ .Minimal }}.\n\nЕсли вы запускаете Hugo на своём компьютере, ознакомьтесь с руководством по обновлению по адресу https://gohugo.io/getting-started/installing/#upgrade-hugo.\n\nЕсли вы развёртываете на сторонней платформе, настройте версию Hugo соответствующим образом."
hugoExtendedWarn = "Для поддержки SCSS необходима версия Hugo Extended."
configurationError = "Ошибка конфигурации\nВы еще не настроили параметр версии FixIt правильно. См. https://fixit.lruihao.cn/docs/getting-started/configuration/params/?lang=russian"
compatibilityError = "Ошибка совместимости ({{ .From }} -> {{ .To }}):\nУ вас есть несовместимое обновление. См. https://github.com/hugo-fixit/FixIt/releases"
devVersionWarn = "Вы используете версию разработки FixIt. Пожалуйста, рассмотрите возможность использования стабильной версии.\nСм. https://github.com/hugo-fixit/FixIt/releases"
devEnvWarn = "Текущая среда - \"разработка\". \"Система комментариев\", \"PWA\", \"CDN\", \"отпечаток\" и \"аналитика\" будут отключены."
quicklyUpgrade = "Быстрое обновление используйте команду: "
# === Init ===
# === Base Layout ===
[baseof]
backToTop = "Наверх"
viewComments = "Посмотреть комментарии"
noscript = "Этот сайт работает лучше с включенным JavaScript."
# === Base Layout ===
# === Taxonomy ===
[archives]
other = "Архив"
[allSome]
other = "Все {{ .Some }}"
[category]
other = "Категория"
[categories]
other = "Категории"
[collection]
other = "Collection"
[collections]
other = "Collections"
[tag]
other = "Тэг"
[tags]
other = "Тэги"
[posts]
other = "Статьи"
# === Taxonomy ===
# === Section ===
[section]
recentlyUpdated = "Недавно обновленные"
[section.totalWordCount]
one = "Всего одно слово"
other = "Всего {{ .Count }} слов"
[section.archiveCounter]
one = "Только одна статья"
other = "Всего {{ .Count }} статей"
# === Section ===
# === Pagination ===
[pagination]
more = "Больше"
# === Pagination ===
# === Header ===
[header]
selectLanguage = "Выбор Языка"
noTranslations = "Нет переводов"
switchTheme = "Сменить Тему"
# === Header ===
# === Footer ===
[footer]
poweredBySome = "Сделано {{ .Hugo }} | Тема - {{ .Theme }}"
siteUV = "Всего посетителей"
sitePV = "Всего посещений"
siteRunning = "Website running ..."
# === Footer ===
# === Comment ===
[comment]
valinePlaceholder = "Ваш комментарий ..."
# === Comment ===
# === Assets ===
[assets]
search = "Поиск"
searchPlaceholder = "Поиск заголовков или содержимого ..."
searchIn = "Поиск в {{ . }}"
searchBy = "Поиск через"
gotoResultsPage = "Перейти на страницу результатов поиска ..."
clear = "Очистить"
cancel = "Отменить"
navigate = "Навигация"
select = "Выбрать"
close = "Закрыть"
refresh = "Обновить"
noResultsFound = "Результаты не найдены"
copyToClipboard = "Копировать в буфер обмена"
copyText = "Копировать"
copiedText = "Скопировано"
toggleLineNumbers = "Переключить номера строк"
toggleLineWrap = "Переключить перенос строк"
toggleCodeEditable = "Переключить редактируемый блок кода"
downloadCode = "Скачать код"
expandCode = "Развернуть или свернуть блок кода"
fullscreen = "Полный экран"
exitFullscreen = "Выйти из полного экрана"
cookieconsentMessage = "Этот сайт использует Cookies для улучшения вашего опыта."
cookieconsentDismiss = "Согласен"
cookieconsentLink = "Учить больше"
# === Assets ===
# === Share ===
[shareOn]
other = "Поделиться в"
# === Share ===
# === Single Post ===
[single]
contents = "Содержание"
pin = "Закрепить наверху"
repost = "Перепостить"
publishedOnDate = "Опубликовано {{ .Date }}"
views = "просмотров"
comments = "комментариев"
author = "Автор"
updatedOnDate = "Oбновлена {{ .Date }}"
readMarkdown = "Читать Markdown"
viewSource = "Просмотреть источник"
editThisPage = "Редактировать эту страницу"
reportIssue = "Сообщить о проблеме"
openInEditor = "Открыть в редакторе"
back = "Назад"
home = "Домой"
readMore = "Читать больше"
expirationReminder = "Эта статья последний раз обновлялась {{ .Date }}, содержание может быть устаревшим."
encryptedAbstract = "Эта статья была зашифрована, поэтому ее исходное содержание невидимо!"
encryptedMessage = "Пожалуйста, введите пароль"
password = "арготизм"
enterBtn = "Войти"
encryptyAgain = "Зашифровать снова"
encryptionWarning = "Обнаружено шифрование контента, но он всё ещё в открытом виде!"
encryptionCommand = "Запустите `npx @hugo-fixit/encrypt` после сборки, чтобы фактически зашифровать их."
relatedContent = "Связанный контент"
[single.includedIn]
categories = "включен в {{ .Categories }}"
collections = "включен в {{ .Collections }}"
both = "включен в {{ .Categories }} и {{ .Collections }}"
[single.wordCount]
one = "Одно слово"
other = "{{ .Count }} слов"
[single.fuzzyWordCount]
other = "Около {{ .Count }} слов"
[single.readingTime]
one = "Одна минута"
other = "{{ .Count }} минут"
[single.reward]
donate = ""
wechatpay = ""
alipay = ""
paypal = ""
bitcoin = ""
# === Single Post ===
# === Error Pages ===
[pageNotFound]
other = "Страница не найдена"
[pageNotFoundText]
other = "Страница, которую вы ищете, не существует. Приносим извинения."
# === Error Pages ===
# === Offline ===
[offlineTitle]
other = "Не в сети"
[offlineText]
other = "Вы не подключены к интернету, будут доступны только кешированные страницы."
# === Offline ===
# === Service Worker ===
[serviceWorker]
updateTitle = "Доступно обновление"
updateText = "Доступна новая версия этого сайта."
# === Service Worker ===
# === Link Redirection ===
[linkRedirection]
title = "Уведомление о перенаправлении"
message = "Вы собираетесь покинуть {{ .Title }}. Пожалуйста, обратите внимание на безопасность вашего аккаунта и имущества."
confirm = "Продолжить посещение"
# === Link Redirection ===
# === Alert ===
[alert]
note = "Примечание"
tip = "Совет"
important = "Важно"
warning = "Предупреждение"
caution = "Осторожно"
# === Alert ===
# === Task List ===
[taskList]
x = "Проверено"
" " = "Не проверено"
"/" = "В процессе"
"-" = "Отменено"
"<" = "Запланировано"
">" = "Перенесено"
"!" = "Важно"
"!x" = "Важно Проверено"
"?" = "Вопрос"
# === Task List ===
# === Admonition ===
[admonition]
note = "Замечание"
abstract = "Краткое описание"
info = "Инфо"
todo = "Сделать"
tip = "Совет"
success = "Удачто"
question = "Вопрос"
warning = "Предупреждение"
failure = "Отказ"
danger = "Опасность"
bug = "Ошибка"
example = "Пример"
quote = "Цитата"
# === Admonition ===
# === Version ===
[version]
new = "НОВЫЙ"
changed = "ИЗМЕНЕН"
deleted = "УДАЛЕН"
deprecated = "УСТАРЕЛ"
# === Version ===
# === Diagram ===
[diagram]
zoomIn = "Увеличить"
zoomOut = "Уменьшить"
reset = "Сбросить"
download = "Скачать SVG"
# === Diagram ===
# === Tabs ===
[tabs]
diagram = "Диаграмма"
code = "Код"
# === Tabs ===