Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/src/contributing/common-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ pub fn my_button_style(&self) -> impl Fn(&Theme, Status) -> button::Style {
ashell uses [Fluent](https://projectfluent.org/) via the `i18n-embed` crate.
Catalogs live in `i18n/<lang-tag>/ashell.ftl` and are baked into the binary at compile time with `include_str!`.

1. Copy the seed catalog to a new BCP-47 directory (e.g. `fr-FR`, `de-DE`, `it-IT`):
1. Copy the seed catalog to a new BCP-47 directory (e.g. `fr-FR`, `de-DE`, `ru-RU`, `it-IT`):
```bash
mkdir -p i18n/<lang-tag>
cp i18n/en-US/ashell.ftl i18n/<lang-tag>/ashell.ftl
Expand Down
2 changes: 1 addition & 1 deletion docs/src/getting-started/project-layout.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ ashell/
├── .github/workflows/ # CI/CD pipelines
├── website/ # User-facing Docusaurus website
├── docs/ # This developer guide (mdbook)
├── i18n/ # Fluent translation catalogs (en-US, de-DE, fr-FR)
├── i18n/ # Fluent translation catalogs (en-US, de-DE, fr-FR, ru-RU)
├── i18n.toml # i18n-embed configuration
├── build.rs # Build script (font subsetting, git hash)
├── Cargo.toml # Dependencies and project metadata
Expand Down
181 changes: 181 additions & 0 deletions i18n/ru-RU/ashell.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
## Русская (ru-RU) версия. Новые ключи сначала появляются в каталоге en-US;
## остальные языки наследуют их через согласование Fluent и резерв (fallback).

app-name = ashell

## Модуль обновлений
updates-up-to-date = Всё актуально ;)
updates-available =
{ $count ->
[one] { $count } обновление доступно
[few] { $count } обновления доступно
*[other] { $count } обновлений доступно
}
updates-button-update = Обновить
updates-button-check-now = Проверить сейчас

## Модуль медиаплеера
media-player-not-connected = Нет соединения с сервисом MPRIS
media-player-heading = Плееры
media-player-loading-cover = Загрузка обложки…
media-player-no-title = Без названия
media-player-unknown-artist = Неизвестный исполнитель
media-player-unknown-album = Неизвестный альбом

## Диалог пароля / подключения к сети
password-dialog-open-network-title = Открытая сеть
password-dialog-authentication-required-title = Требуется авторизация
password-dialog-open-network-warning =
«{ $ssid }» — открытая сеть. Данные, передаваемые по этому соединению, могут быть видны другим.
Подключиться всё равно?
password-dialog-insert-password = Введите пароль для подключения к: { $ssid }
password-dialog-connect-once = Подключить только в этот раз
password-dialog-cancel = Отмена
password-dialog-confirm = Подтвердить

## Диалог «Поделиться Wi-Fi»
share-wifi-title = Поделиться Wi-Fi
share-wifi-subtitle =
Отсканируйте этот QR-код другим устройством,
чтобы подключиться к "{ $ssid }"
share-wifi-password-label = Пароль Wi-Fi:
share-wifi-password-open-network = Открытая сеть — пароль не требуется.
share-wifi-password-unavailable-message = Пароль этой сети нельзя прочитать, поэтому поделиться им невозможно.
share-wifi-unsupported-message = Метод аутентификации этой сети нельзя передать через QR-код.
share-wifi-error-message = Не удалось прочитать пароль Wi-Fi.
share-wifi-close = Закрыть

## OSD
osd-airplane-toggle =
{ $state ->
[on] Режим полёта включён
*[off] Режим полёта выключен
}
osd-idle-inhibitor-toggle =
{ $state ->
[on] Блокировка простоя включена
*[off] Блокировка простоя выключена
}

## Настройки — общие
settings-scanning = Поиск…
settings-more = Ещё

## Настройки — сеть
settings-network-wifi = Wi-Fi
settings-network-vpn = VPN
settings-network-vpns-connected =
{ $count ->
[one] { $count } VPN подключён
[few] { $count } VPN подключено
*[other] { $count } VPN подключено
}
settings-network-airplane-mode = Режим полёта
settings-network-nearby-wifi = Wi-Fi поблизости

## Настройки — Bluetooth
settings-bluetooth = Bluetooth
settings-bluetooth-devices = Bluetooth-устройства
settings-bluetooth-known-devices = Известные устройства
settings-bluetooth-available = Доступные
settings-bluetooth-pair = Сопряжение
settings-bluetooth-no-devices = Устройства не найдены
settings-bluetooth-connected-count =
{ $count ->
[one] { $count } устройство
[few] { $count } устройства
*[other] { $count } устройств
}

## Настройки — питание
settings-power-suspend = Спящий режим
settings-power-hibernate = Гибернация
settings-power-reboot = Перезагрузить
settings-power-shutdown = Выключить
settings-power-logout = Выйти
settings-power-calculating = Рассчитываем…
settings-power-full-in = Зарядится через { $duration }
settings-power-empty-in = Разрядится через { $duration }
settings-power-charge-limit = Лимит зарядки
settings-power-profile-balanced = Сбалансированный
settings-power-profile-performance = Производительность
settings-power-profile-power-saver = Экономия энергии
settings-power-status-charging = Заряжается
settings-power-status-discharging = Разряжается
settings-power-status-not-charging = Не заряжается
settings-power-status-unknown = Неизвестно
settings-power-status-full = Заряжена
settings-power-health = Состояние { $percentage }% ({ $energy_full } / { $energy_full_design } Вт·ч)
settings-power-charge-cycles =
{ $count ->
[one] { $count } цикл зарядки
[few] { $count } цикла зарядки
*[other] { $count } циклов зарядки
}

## Настройки — блокировка простоя
settings-idle-inhibitor = Блокировка простоя

## Настройки — «Не беспокоить»
settings-dnd = Не беспокоить

## Настройки — всплывающие подсказки
settings-tooltip-empty = Нечего показать
settings-tooltip-empty-audio = Нет активного аудиоустройства
settings-tooltip-empty-bluetooth = Нет подключённых устройств
settings-tooltip-empty-wifi = Нет подключения
settings-tooltip-empty-vpn = Нет активного VPN
settings-tooltip-empty-battery = Нет информации о батарее

## Модуль погоды
tempo-feels-like = Ощущается { $value }{ $unit }
tempo-humidity = Влажность
tempo-wind = Ветер

## Условие погоды (коды WMO Open-Meteo)
weather-clear-sky = Ясно
weather-mainly-clear = Преимущественно ясно
weather-partly-cloudy = Переменная облачность
weather-overcast = Пасмурно
weather-fog = Туман
weather-fog-rime = Изморозь
weather-drizzle-light = Лёгкая морось
weather-drizzle-moderate = Морось
weather-drizzle-dense = Густая морось
weather-drizzle-freezing-light = Лёгкая ледяная морось
weather-drizzle-freezing-dense = Густая ледяная морось
weather-rain-slight = Слабый дождь
weather-rain-moderate = Дождь
weather-rain-heavy = Сильный дождь
weather-rain-freezing-light = Лёгкий холодный дождь
weather-rain-freezing-heavy = Сильный холодный дождь
weather-snow-slight = Слабый снег
weather-snow-moderate = Снег
weather-snow-heavy = Сильный снег
weather-snow-grains = Снежная крупа
weather-rain-showers-slight = Слабый ливень
weather-rain-showers-moderate = Ливень
weather-rain-showers-violent = Сильный ливень
weather-snow-showers-slight = Слабый снежный ливень
weather-snow-showers-heavy = Сильный снежный ливень
weather-thunderstorm = Слабая или умеренная гроза
weather-thunderstorm-hail-slight = Гроза с лёгким градом
weather-thunderstorm-hail-heavy = Гроза с сильным градом
weather-unknown = Неизвестное погодное условие

## Модуль уведомлений
notifications-heading = Уведомления
notifications-empty = Нет уведомлений
notifications-group-count = { $count } новых

## Модуль информации о системе
system-info-heading = Информация о системе
system-info-cpu-usage = Загрузка CPU
system-info-memory-usage = Загрузка памяти
system-info-swap-memory-usage = Использование swap-памяти
system-info-swap-indicator-prefix = swap
system-info-temperature = Температура
system-info-disk-usage = Использование диска { $mount }
system-info-ip-address = IP-адрес
system-info-download-speed = Скорость загрузки
system-info-upload-speed = Скорость отправки
1 change: 1 addition & 0 deletions src/i18n.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const CATALOGS: &[(&str, &str)] = &[
("en-US", include_str!("../i18n/en-US/ashell.ftl")),
("fr-FR", include_str!("../i18n/fr-FR/ashell.ftl")),
("de-DE", include_str!("../i18n/de-DE/ashell.ftl")),
("ru-RU", include_str!("../i18n/ru-RU/ashell.ftl")),
];

const FALLBACK_LANG: &str = "en-US";
Expand Down
1 change: 1 addition & 0 deletions website/docs/configuration/main.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ ashell currently ships UI translations for:
- `en-US` (also the fallback for any unmatched language)
- `de-DE`
- `fr-FR`
- `ru-RU`

Setting `language` to anything else is not an error; untranslated strings just
fall back to English. `region` is not restricted to this list: it accepts any
Expand Down
Loading