i18n(ru): apply translation improvements from PR #120

Manually merged kilyabin's Russian locale improvements (more natural phrasing
throughout) while preserving keys added after #120 was opened: fsLyricsToggle,
lyricsServerFirst/Desc, lyricsSourceServer/Lrclib.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-06 22:46:01 +02:00
parent 7fc0550b65
commit 4ef21d6d78
+50 -46
View File
@@ -1,8 +1,8 @@
/** Russian UI strings — natural phrasing for a music desktop app */ /** Russian UI strings — natural phrasing for a music desktop app */
export const ruTranslation = { export const ruTranslation = {
sidebar: { sidebar: {
library: 'Медиатека', library: 'Библиотека',
mainstage: 'Для вас', mainstage: 'Главная',
newReleases: 'Новинки', newReleases: 'Новинки',
allAlbums: 'Все альбомы', allAlbums: 'Все альбомы',
randomAlbums: 'Случайные альбомы', randomAlbums: 'Случайные альбомы',
@@ -26,8 +26,8 @@ export const ruTranslation = {
radio: 'Онлайн-радио', radio: 'Онлайн-радио',
}, },
home: { home: {
hero: 'Подборка', hero: 'Рекомендации',
starred: 'Личное избранное', starred: 'Избранное',
recent: 'Недавно добавлено', recent: 'Недавно добавлено',
mostPlayed: 'Чаще всего', mostPlayed: 'Чаще всего',
recentlyPlayed: 'Недавно проиграно', recentlyPlayed: 'Недавно проиграно',
@@ -38,14 +38,14 @@ export const ruTranslation = {
discoverArtistsMore: 'Все исполнители', discoverArtistsMore: 'Все исполнители',
}, },
hero: { hero: {
eyebrow: 'Альбом дня', eyebrow: 'Рекомендуемый альбом',
playAlbum: 'Воспроизвести альбом', playAlbum: 'Воспроизвести альбом',
enqueue: 'В очередь', enqueue: 'В очередь',
enqueueTooltip: 'Добавить весь альбом в очередь', enqueueTooltip: 'Добавить весь альбом в очередь',
}, },
search: { search: {
placeholder: 'Исполнитель, альбом или трек…', placeholder: 'Исполнитель, альбом или трек…',
noResults: 'Ничего не найдено по запросу «{{query}}»', noResults: 'Нет результатов для «{{query}}»',
artists: 'Исполнители', artists: 'Исполнители',
albums: 'Альбомы', albums: 'Альбомы',
songs: 'Треки', songs: 'Треки',
@@ -93,11 +93,11 @@ export const ruTranslation = {
addToQueue: 'В конец очереди', addToQueue: 'В конец очереди',
enqueueAlbum: 'Альбом в очередь', enqueueAlbum: 'Альбом в очередь',
startRadio: 'Радио по похожим', startRadio: 'Радио по похожим',
lfmLove: 'Любимое на Last.fm', lfmLove: 'Нравится на Last.fm',
lfmUnlove: 'Убрать с Last.fm', lfmUnlove: 'Убрать лайк с Last.fm',
favorite: 'В избранное', favorite: 'В избранное',
favoriteArtist: 'Исполнитель в избранное', favoriteArtist: 'Добавить исполнителя в избранное',
favoriteAlbum: 'Альбом в избранное', favoriteAlbum: 'Добавить альбом в избранное',
unfavorite: 'Убрать из избранного', unfavorite: 'Убрать из избранного',
unfavoriteArtist: 'Убрать исполнителя из избранного', unfavoriteArtist: 'Убрать исполнителя из избранного',
unfavoriteAlbum: 'Убрать альбом из избранного', unfavoriteAlbum: 'Убрать альбом из избранного',
@@ -121,7 +121,7 @@ export const ruTranslation = {
offlineDownloading: 'Кэширование… ({{n}} из {{total}})', offlineDownloading: 'Кэширование… ({{n}} из {{total}})',
removeOffline: 'Удалить офлайн-копию', removeOffline: 'Удалить офлайн-копию',
offlineStorageFull: offlineStorageFull:
'Место для офлайн закончилось (лимит {{mb}} МБ). Освободите место в офлайн-библиотеке или увеличьте лимит в настройках.', 'Место для офлайн-кэша закончилось (лимит {{mb}} МБ). Освободите место или увеличьте лимит в настройках.',
offlineStorageGoToLibrary: 'Офлайн-библиотека', offlineStorageGoToLibrary: 'Офлайн-библиотека',
offlineStorageGoToSettings: 'Настройки', offlineStorageGoToSettings: 'Настройки',
favoriteAdd: 'В избранное', favoriteAdd: 'В избранное',
@@ -129,7 +129,7 @@ export const ruTranslation = {
favorite: 'Избранное', favorite: 'Избранное',
noBio: 'Биография недоступна.', noBio: 'Биография недоступна.',
moreByArtist: 'Ещё от {{artist}}', moreByArtist: 'Ещё от {{artist}}',
tracksCount: 'Композиций: {{n}}', tracksCount: '{{n}} треков',
goToArtist: 'Перейти к {{artist}}', goToArtist: 'Перейти к {{artist}}',
moreLabelAlbums: 'Другие альбомы на {{label}}', moreLabelAlbums: 'Другие альбомы на {{label}}',
trackTitle: 'Название', trackTitle: 'Название',
@@ -140,7 +140,7 @@ export const ruTranslation = {
trackRating: 'Оценка', trackRating: 'Оценка',
trackDuration: 'Длительность', trackDuration: 'Длительность',
trackTotal: 'Итого', trackTotal: 'Итого',
columns: 'Колонки', columns: 'Столбцы',
notFound: 'Альбом не найден.', notFound: 'Альбом не найден.',
bioModal: 'Биография исполнителя', bioModal: 'Биография исполнителя',
bioClose: 'Закрыть', bioClose: 'Закрыть',
@@ -174,18 +174,18 @@ export const ruTranslation = {
featuredOn: 'Также участвует в', featuredOn: 'Также участвует в',
similarArtists: 'Похожие исполнители', similarArtists: 'Похожие исполнители',
cacheOffline: 'Сохранить дискографию офлайн', cacheOffline: 'Сохранить дискографию офлайн',
offlineCached: 'Дискография сохранена', offlineCached: 'Дискография сохранена в кэш',
offlineDownloading: 'Кэширование… ({{done}} из {{total}} альбомов)', offlineDownloading: 'Кэширование… ({{done}} из {{total}} альбомов)',
uploadImage: 'Загрузить фото исполнителя', uploadImage: 'Загрузить фото исполнителя',
uploadImageError: 'Не удалось загрузить изображение', uploadImageError: 'Не удалось загрузить изображение',
}, },
favorites: { favorites: {
title: 'Избранное', title: 'Избранное',
empty: 'Пока ничего не отмечено звёздочкой.', empty: 'Здесь пока пусто... \nПора добавить что-нибудь в избранное.',
artists: 'Исполнители', artists: 'Исполнители',
albums: 'Альбомы', albums: 'Альбомы',
songs: 'Треки', songs: 'Треки',
enqueueAll: 'Всё в очередь', enqueueAll: 'Добавить всё в очередь',
playAll: 'Воспроизвести всё', playAll: 'Воспроизвести всё',
removeSong: 'Убрать из избранного', removeSong: 'Убрать из избранного',
stations: 'Радиостанции', stations: 'Радиостанции',
@@ -204,7 +204,7 @@ export const ruTranslation = {
loading: 'Загрузка жанров…', loading: 'Загрузка жанров…',
empty: 'Жанры не найдены.', empty: 'Жанры не найдены.',
albumsLoading: 'Загрузка альбомов…', albumsLoading: 'Загрузка альбомов…',
albumsEmpty: 'В этом жанре альбомов нет.', albumsEmpty: 'Альбомы в этом жанре не найдены.',
loadMore: 'Ещё', loadMore: 'Ещё',
back: 'Назад', back: 'Назад',
}, },
@@ -220,7 +220,7 @@ export const ruTranslation = {
trackDuration: 'Длительность', trackDuration: 'Длительность',
favoriteAdd: 'В избранное', favoriteAdd: 'В избранное',
favoriteRemove: 'Убрать из избранного', favoriteRemove: 'Убрать из избранного',
play: 'Играть', play: 'Воспроизвести',
trackGenre: 'Жанр', trackGenre: 'Жанр',
excludeAudiobooks: 'Исключать аудиокниги и радиоспектакли', excludeAudiobooks: 'Исключать аудиокниги и радиоспектакли',
excludeAudiobooksDesc: excludeAudiobooksDesc:
@@ -275,18 +275,18 @@ export const ruTranslation = {
serverNamePlaceholder: 'Мой Navidrome', serverNamePlaceholder: 'Мой Navidrome',
serverUrl: 'Адрес сервера', serverUrl: 'Адрес сервера',
serverUrlPlaceholder: '192.168.1.100:4533 или music.example.com', serverUrlPlaceholder: '192.168.1.100:4533 или music.example.com',
username: 'Логин', username: 'Имя пользователя',
usernamePlaceholder: 'admin', usernamePlaceholder: 'admin',
password: 'Пароль', password: 'Пароль',
showPassword: 'Показать пароль', showPassword: 'Показать пароль',
hidePassword: 'Скрыть пароль', hidePassword: 'Скрыть пароль',
connect: 'Подключиться', connect: 'Подключиться',
connecting: 'Подключение…', connecting: 'Подключение…',
connected: 'Готово!', connected: 'Подключено!',
error: 'Не удалось подключиться — проверьте данные.', error: 'Не удалось подключиться — проверьте данные.',
urlRequired: 'Укажите адрес сервера.', urlRequired: 'Укажите адрес сервера.',
savedServers: 'Сохранённые серверы', savedServers: 'Сохранённые серверы',
addNew: 'Или добавить новый сервер', addNew: 'Или добавьте новый сервер',
}, },
connection: { connection: {
connected: 'Подключено', connected: 'Подключено',
@@ -297,7 +297,7 @@ export const ruTranslation = {
extern: 'Внешний', extern: 'Внешний',
offlineTitle: 'Нет связи с сервером', offlineTitle: 'Нет связи с сервером',
offlineSubtitle: 'Сервер {{server}} недоступен. Проверьте сеть и адрес.', offlineSubtitle: 'Сервер {{server}} недоступен. Проверьте сеть и адрес.',
offlineModeBanner: 'Офлайн — воспроизведение из локального кэша', offlineModeBanner: 'Воспроизведение из локального кэша',
offlineLibraryTitle: 'Офлайн-библиотека', offlineLibraryTitle: 'Офлайн-библиотека',
offlineLibraryEmpty: offlineLibraryEmpty:
'Пока ничего не сохранено. Подключитесь к сети, откройте альбом и нажмите «Сохранить офлайн».', 'Пока ничего не сохранено. Подключитесь к сети, откройте альбом и нажмите «Сохранить офлайн».',
@@ -342,7 +342,7 @@ export const ruTranslation = {
bulkRemoveFromPlaylist: 'Убрать из плейлиста', bulkRemoveFromPlaylist: 'Убрать из плейлиста',
bulkClear: 'Снять выделение', bulkClear: 'Снять выделение',
updaterAvailable: 'Доступно обновление', updaterAvailable: 'Доступно обновление',
updaterVersion: 'Версия {{version}} готова', updaterVersion: 'Версия {{version}} готова к установке',
updaterInstall: 'Установить и перезапустить', updaterInstall: 'Установить и перезапустить',
updaterDownloading: 'Скачивание…', updaterDownloading: 'Скачивание…',
updaterInstalling: 'Установка…', updaterInstalling: 'Установка…',
@@ -359,7 +359,6 @@ export const ruTranslation = {
languageZh: 'Китайский', languageZh: 'Китайский',
languageNb: 'Норвежский', languageNb: 'Норвежский',
languageRu: 'Русский', languageRu: 'Русский',
languageRu2: 'Русский 2',
font: 'Шрифт', font: 'Шрифт',
theme: 'Тема', theme: 'Тема',
appearance: 'Оформление', appearance: 'Оформление',
@@ -380,14 +379,14 @@ export const ruTranslation = {
serverFailed: 'Ошибка подключения.', serverFailed: 'Ошибка подключения.',
testBtn: 'Проверить', testBtn: 'Проверить',
testingBtn: 'Проверка…', testingBtn: 'Проверка…',
serverCompatible: 'Совместимость: Navidrome · Gonic · Airsonic · Subsonic', serverCompatible: 'Совместимо с: Navidrome · Gonic · Airsonic · Subsonic',
connected: 'Подключено', connected: 'Подключено',
failed: 'Ошибка', failed: 'Ошибка',
eqTitle: 'Эквалайзер', eqTitle: 'Эквалайзер',
eqEnabled: 'Включить эквалайзер', eqEnabled: 'Включить эквалайзер',
eqPreset: 'Пресет', eqPreset: 'Пресет',
eqPresetCustom: 'Свой', eqPresetCustom: 'Свой',
eqPresetBuiltin: 'Встроенные', eqPresetBuiltin: 'Встроенные пресеты',
eqPresetCustomGroup: 'Мои пресеты', eqPresetCustomGroup: 'Мои пресеты',
eqSavePreset: 'Сохранить как пресет', eqSavePreset: 'Сохранить как пресет',
eqPresetName: 'Название пресета…', eqPresetName: 'Название пресета…',
@@ -409,21 +408,21 @@ export const ruTranslation = {
lfmConnected: 'Аккаунт', lfmConnected: 'Аккаунт',
lfmDisconnect: 'Отключить', lfmDisconnect: 'Отключить',
lfmConnectDesc: lfmConnectDesc:
ривяжите Last.fm для скробблинга и статуса «Сейчас слушаю» прямо из Psysonic — настраивать Navidrome не нужно.', одключите аккаунт Last.fm для включения скробблинга и обновления "Сейчас играет" напрямую из Psysonic — без необходимости настройки Navidrome.',
lfmOpenBrowser: 'Откроется браузер. Разрешите доступ на Last.fm, затем нажмите кнопку ниже.', lfmOpenBrowser: 'Откроется браузер. Разрешите доступ на Last.fm, затем нажмите кнопку ниже.',
lfmScrobbles: 'Скробблов: {{n}}', lfmScrobbles: '{{n}} скробблов',
lfmMemberSince: 'С {{year}} года', lfmMemberSince: 'Участник с {{year}} года',
scrobbleEnabled: 'Скробблинг включён', scrobbleEnabled: 'Скробблинг включён',
scrobbleDesc: 'Отправлять прослушивания на Last.fm после 50% трека', scrobbleDesc: 'Отправлять прослушивания на Last.fm после 50% воспроизведения',
behavior: 'Поведение', behavior: 'Поведение',
cacheTitle: 'Макс. размер кэша', cacheTitle: 'Макс. размер кэша',
cacheDesc: cacheDesc:
'Обложки и фото исполнителей. При переполнении старые записи удаляются. Офлайн-альбомы не трогаются автоматически, но сотрутся при полной очистке кэша.', 'Обложки и фото исполнителей. При переполнении старые записи удаляются. Сохраненные альбомы не трогаются автоматически, но сотрутся при полной очистке кэша.',
cacheUsedImages: 'Изображения:', cacheUsedImages: 'Изображения:',
cacheUsedOffline: 'Офлайн-треки:', cacheUsedOffline: 'Сохраненные треки:',
cacheMaxLabel: 'Лимит', cacheMaxLabel: 'Лимит',
cacheClearBtn: 'Очистить кэш', cacheClearBtn: 'Очистить кэш',
cacheClearWarning: 'Будут удалены и все офлайн-альбомы.', cacheClearWarning: 'Будут удалены и все сохраненные альбомы.',
cacheClearConfirm: 'Очистить всё', cacheClearConfirm: 'Очистить всё',
cacheClearCancel: 'Отмена', cacheClearCancel: 'Отмена',
offlineDirTitle: 'Офлайн-библиотека (в приложении)', offlineDirTitle: 'Офлайн-библиотека (в приложении)',
@@ -439,13 +438,15 @@ export const ruTranslation = {
showTrayIconDesc: 'Показывать Psysonic в области уведомлений / строке меню.', showTrayIconDesc: 'Показывать Psysonic в области уведомлений / строке меню.',
minimizeToTray: 'Сворачивать в трей', minimizeToTray: 'Сворачивать в трей',
minimizeToTrayDesc: 'При закрытии окна не выходить из приложения, а оставаться в трее.', minimizeToTrayDesc: 'При закрытии окна не выходить из приложения, а оставаться в трее.',
discordRichPresence: 'Статус в Discord', discordRichPresence: 'Статус в Discord (Rich Presence)',
discordRichPresenceDesc: discordRichPresenceDesc:
'Показывать текущий трек в профиле и статусе Discord. Нужен запущенный клиент Discord.', 'Показывать текущий трек в профиле и статусе Discord (Rich Presence). Нужен запущенный клиент Discord.',
nowPlayingEnabled: 'Показывать в «Сейчас играет»', nowPlayingEnabled: 'Показывать в «Сейчас играет»',
nowPlayingEnabledDesc: nowPlayingEnabledDesc:
'Отправлять на сервер, что вы сейчас слушаете. Отключите, чтобы не делиться этим.', 'Отправлять на сервер, что вы сейчас слушаете. Отключите, чтобы не делиться этим.',
downloadsTitle: 'Экспорт ZIP и архивы', lyricsServerFirst: 'Приоритет серверного текста',
lyricsServerFirstDesc: 'Сначала запрашивать текст с сервера (теги, sidecar-файлы), затем LRCLIB. Отключите, чтобы использовать LRCLIB первым.',
downloadsTitle: 'Экспорт в ZIP и архивирование',
downloadsFolderDesc: 'Куда сохранять альбомы в виде ZIP на диск.', downloadsFolderDesc: 'Куда сохранять альбомы в виде ZIP на диск.',
downloadsDefault: 'Папка «Загрузки» по умолчанию', downloadsDefault: 'Папка «Загрузки» по умолчанию',
pickFolder: 'Выбрать', pickFolder: 'Выбрать',
@@ -454,9 +455,9 @@ export const ruTranslation = {
logout: 'Выйти', logout: 'Выйти',
aboutTitle: 'О Psysonic', aboutTitle: 'О Psysonic',
aboutDesc: aboutDesc:
'Современный десктопный плеер для серверов с протоколом Subsonic (Navidrome, Gonic и др.). На Tauri v2 и нативном аудиодвижке на Rust — лёгкий и быстрый: волновая шкала, синхронные тексты, Last.fm, 10-полосный EQ, кроссфейд, воспроизведение без пауз, Replay Gain, жанры и много тем оформления.', 'Современный десктопный плеер для серверов с протоколом Subsonic (Navidrome, Gonic и др.). Построен на Tauri v2 и нативном аудиодвижке на Rust — лёгкий и быстрый: волновая шкала, синхронные тексты, Last.fm, 10-полосный EQ, кроссфейд, воспроизведение без пауз, Replay Gain (выравнивание громкости), жанры и много тем оформления.',
aboutFeatures: aboutFeatures:
'Несколько серверов · Last.fm · полноэкранный режим · волна · тексты · 10 полос EQ · кроссфейд и воспроизведение без пауз · Replay Gain · жанры · десятки тем · несколько языков', 'Несколько серверов · Last.fm · полноэкранный режим · волна · тексты · 10 полос EQ · кроссфейд и воспроизведение без пауз · Replay Gain (выравнивание громкости) · жанры · десятки тем · несколько языков',
aboutLicense: 'Лицензия', aboutLicense: 'Лицензия',
aboutLicenseText: 'GNU GPL v3 — свободное использование и изменение на тех же условиях.', aboutLicenseText: 'GNU GPL v3 — свободное использование и изменение на тех же условиях.',
aboutRepo: 'Исходный код на GitHub', aboutRepo: 'Исходный код на GitHub',
@@ -533,7 +534,7 @@ export const ruTranslation = {
preloadBalanced: 'Умеренно (за 30 с до конца)', preloadBalanced: 'Умеренно (за 30 с до конца)',
preloadEarly: 'Рано (через 5 с после старта)', preloadEarly: 'Рано (через 5 с после старта)',
preloadCustom: 'Свой интервал', preloadCustom: 'Свой интервал',
preloadCustomSeconds: 'Секунд до конца: {{n}}', preloadCustomSeconds: '{{n}} секунд до конца',
infiniteQueue: 'Бесконечная очередь', infiniteQueue: 'Бесконечная очередь',
infiniteQueueDesc: 'Подмешивать случайные треки, когда очередь закончится', infiniteQueueDesc: 'Подмешивать случайные треки, когда очередь закончится',
experimental: 'Экспериментально', experimental: 'Экспериментально',
@@ -589,7 +590,7 @@ export const ruTranslation = {
s5: 'Скробблинг', s5: 'Скробблинг',
q16: 'Как устроен скробблинг?', q16: 'Как устроен скробблинг?',
a16: a16:
'Psysonic шлёт прослушивания напрямую на Last.fm — в Navidrome ничего настраивать не нужно. Подключите аккаунт в настройках.', 'Psysonic отправляет прослушивания напрямую на Last.fm — в Navidrome ничего настраивать не нужно. Подключите аккаунт в настройках.',
q17: 'Когда уходит скроббл?', q17: 'Когда уходит скроббл?',
a17: 'После прослушивания примерно половины трека.', a17: 'После прослушивания примерно половины трека.',
q22: 'Что за волна внизу?', q22: 'Что за волна внизу?',
@@ -612,13 +613,13 @@ export const ruTranslation = {
s6: 'Если что-то не так', s6: 'Если что-то не так',
q18: 'Медленно грузятся обложки.', q18: 'Медленно грузятся обложки.',
a18: a18:
'Первый раз картинки тянутся с сервера и кэшируются на ~30 дней. Медленный диск на сервере даёт задержку только при первом заходе.', 'Первый раз картинки загружаются с сервера и кэшируются на ~30 дней. Медленный диск на сервере даёт задержку только при первом заходе.',
q19: 'Тест соединения не проходит.', q19: 'Тест соединения не проходит.',
a19: a19:
'Проверьте адрес с портом (http://192.168.1.100:4533), файрвол, для локалки иногда нужен http вместо https. Логин и пароль должны совпадать с сервером.', 'Проверьте адрес с портом (http://192.168.1.100:4533), файрвол, для локальной сети иногда нужен http вместо https. Логин и пароль должны совпадать с сервером.',
q20: 'Нет звука в Linux.', q20: 'Нет звука в Linux.',
a20: a20:
'Есть пакеты .deb, .rpm и AUR. Убедитесь, что запущены PipeWire или PulseAudio.', 'Убедитесь, что запущены PipeWire или PulseAudio.',
q21: 'Чёрный экран в Linux.', q21: 'Чёрный экран в Linux.',
a21: a21:
'Часто драйвер GPU / WebKitGTK. Запуск с GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1. В официальных пакетах это часто уже задано.', 'Часто драйвер GPU / WebKitGTK. Запуск с GDK_BACKEND=x11 WEBKIT_DISABLE_COMPOSITING_MODE=1 WEBKIT_DISABLE_DMABUF_RENDERER=1. В официальных пакетах это часто уже задано.',
@@ -639,7 +640,7 @@ export const ruTranslation = {
q35: 'Как сохранить альбом офлайн?', q35: 'Как сохранить альбом офлайн?',
a35: a35:
'Страница альбома → иконка загрузки в шапке. Прогресс на кнопке, после загрузки — индикатор готовности. Список — в офлайн-библиотеке.', 'Страница альбома → иконка загрузки в шапке. Прогресс на кнопке, после загрузки — индикатор готовности. Список — в офлайн-библиотеке.',
q36: 'Сколько места занимает офлайн?', q36: 'Сколько места занимает кэш?',
a36: a36:
'Лимит задаётся в настройках. При переполнении на странице альбома появится предупреждение; удалить можно из офлайн-библиотеки.', 'Лимит задаётся в настройках. При переполнении на странице альбома появится предупреждение; удалить можно из офлайн-библиотеки.',
}, },
@@ -747,15 +748,18 @@ export const ruTranslation = {
volume: 'Громкость', volume: 'Громкость',
toggleQueue: 'Очередь', toggleQueue: 'Очередь',
lyrics: 'Текст', lyrics: 'Текст',
fsLyricsToggle: 'Текст в полноэкранном режиме',
lyricsLoading: 'Загрузка текста…', lyricsLoading: 'Загрузка текста…',
lyricsNotFound: 'Текст не найден', lyricsNotFound: 'Текст не найден',
lyricsSourceServer: 'Источник: сервер',
lyricsSourceLrclib: 'Источник: LRCLIB',
}, },
songInfo: { songInfo: {
title: 'О треке', title: 'О треке',
songTitle: 'Название', songTitle: 'Название',
artist: 'Исполнитель', artist: 'Исполнитель',
album: 'Альбом', album: 'Альбом',
albumArtist: 'Альбомный исполнитель', albumArtist: 'Исполнитель альбома',
year: 'Год', year: 'Год',
genre: 'Жанр', genre: 'Жанр',
duration: 'Длительность', duration: 'Длительность',
@@ -799,7 +803,7 @@ export const ruTranslation = {
noSuggestions: 'Пока нет рекомендаций.', noSuggestions: 'Пока нет рекомендаций.',
titleBadge: 'Плейлист', titleBadge: 'Плейлист',
refreshSuggestions: 'Обновить подборку', refreshSuggestions: 'Обновить подборку',
addSong: 'В плейлист', addSong: 'Добавить в плейлист',
cacheOffline: 'Сохранить плейлист офлайн', cacheOffline: 'Сохранить плейлист офлайн',
offlineCached: 'Плейлист сохранён', offlineCached: 'Плейлист сохранён',
offlineDownloading: 'Кэширование… ({{done}} из {{total}} альбомов)', offlineDownloading: 'Кэширование… ({{done}} из {{total}} альбомов)',