0f3b4dbcff
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Successful in 11s
CI / integration (pull_request) Successful in 22s
CI / ui (pull_request) Successful in 1m14s
CI / conformance (pull_request) Successful in 10s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Failing after 40s
Author ui/legal/{privacy,eula}_ru.md, reworked from the source documents: the seller INN is unified (290210610742), contacts unified to the Telegram bot + email + postal address, the EULA governing-law clause leads with Russian law + jurisdiction as residence tiers, the single-binding-language clause is dropped, data collection is scoped to voluntary/support provision, and "Компания" is no longer shout-cased.
Serve both as static pages through the render sidecar, reusing a shared renderLegalHtml generalised from renderOfferHtml: new GET /privacy/ and GET /eula/ (301 from the slashless form), the markdown baked into the image, no backend fetch. Route them at the edge via the @legal caddy matcher with a CI probe asserting each page's canonical URL + the seller INN, so a missing route cannot silently fall through to the landing. Add the two links to the landing footer.
Docs baked in: ARCHITECTURE (renderer legal pages + edge routing), FUNCTIONAL (+_ru) footer, renderer/README routes. Tests: renderer legal.test.mjs, ui renderLegalHtml unit, landing footer e2e.
475 lines
27 KiB
TypeScript
475 lines
27 KiB
TypeScript
// Russian message catalog. Typed as Record<MessageKey, string> so it must cover every
|
||
// key the English catalog defines (a Vitest test asserts parity too).
|
||
|
||
import type { MessageKey } from './en';
|
||
|
||
export const ru: Record<MessageKey, string> = {
|
||
'app.title': 'Scrabble',
|
||
'app.brand': 'Эрудит',
|
||
'dict.loading': 'Загрузка…',
|
||
'connection.connecting': 'Подключение…',
|
||
'net.offline': 'Нет соединения',
|
||
'net.online': 'Соединение восстановлено',
|
||
'maintenance.title': 'Технические работы',
|
||
'maintenance.body': 'Идёт короткое обновление игры. Мы скоро вернёмся — страницу перезагружать не нужно.',
|
||
'maintenance.retry': 'Повторить',
|
||
'update.title': 'Требуется обновление',
|
||
'update.body': 'Приложение устарело и не может продолжить работу. Загрузите обновлённую версию, чтобы продолжить играть и побеждать.',
|
||
'update.action': 'Обновить',
|
||
'update.playOffline': 'Играть офлайн',
|
||
'update.available': 'Доступно обновление',
|
||
|
||
'blocked.title': 'Учётная запись заблокирована',
|
||
'blocked.permanent': 'Ваша учётная запись заблокирована.',
|
||
'blocked.temporary': 'Ваша учётная запись заблокирована до {until}.',
|
||
'blocked.reason': 'Причина:',
|
||
|
||
'boot.errorTitle': 'Не удалось загрузить игру',
|
||
'boot.errorBody': 'Попробуйте ещё раз или зайдите позже.',
|
||
|
||
'launch.errorTitle': 'Не открывается в Telegram',
|
||
'launch.errorBody': 'Сделайте скриншот или поделитесь с разработчиком.',
|
||
'launch.share': 'Поделиться',
|
||
'launch.copied': 'Скопировано',
|
||
|
||
'common.back': 'Назад',
|
||
'common.cancel': 'Отмена',
|
||
'common.ok': 'ОК',
|
||
'common.close': 'Закрыть',
|
||
'common.loading': 'Загрузка…',
|
||
'common.retry': 'Повторить',
|
||
'common.you': 'Вы',
|
||
'common.guest': 'Гость',
|
||
'common.save': 'Сохранить',
|
||
|
||
'login.title': 'Вход',
|
||
'login.guest': 'Играть как гость',
|
||
'login.email': 'Эл. почта',
|
||
'login.emailPlaceholder': 'you@example.com',
|
||
'login.sendCode': 'Отправить код',
|
||
'login.codePlaceholder': 'Код из 6 цифр',
|
||
'login.signIn': 'Войти',
|
||
'confirm.busy': 'Подтверждаем почту…',
|
||
'confirm.linked': 'Почта подтверждена.',
|
||
'confirm.merge': 'Почти готово — завершите объединение в приложении.',
|
||
'confirm.close': 'Можно закрыть это окно и вернуться в игру.',
|
||
'confirm.expired': 'Ссылка недействительна или истекла. Запросите новый код.',
|
||
'login.codeSent': 'Мы отправили код на {email}.',
|
||
|
||
'lobby.activeGames': 'Активные игры',
|
||
'lobby.finishedGames': 'Завершённые игры',
|
||
'lobby.noActive': 'Пока нет активных игр.',
|
||
'lobby.noFinished': 'Пока нет завершённых игр.',
|
||
'lobby.limitReached': 'Вы достигли лимита одновременных партий',
|
||
'lobby.new': 'Играть',
|
||
'lobby.stats': 'Цифры',
|
||
'lobby.profile': 'Профиль',
|
||
'lobby.settings': 'Настройки',
|
||
'lobby.about': 'О программе',
|
||
'lobby.yourTurn': 'Ваш ход',
|
||
'lobby.theirTurn': 'Ход соперника',
|
||
'lobby.hideGame': 'Убрать из списка',
|
||
'lobby.vs': 'против {opponents}',
|
||
|
||
'new.title': 'Новая игра',
|
||
'new.english': 'Scrabble',
|
||
'new.russian': 'Скрэббл',
|
||
'new.erudit': 'Эрудит',
|
||
'new.find': 'Найти игру',
|
||
'new.searching': 'Ищем соперника…',
|
||
'new.rulesEnglish': '100 фишек · бинго +50',
|
||
'new.rulesRussian': '104 фишки · ё — отдельная буква · бинго +50',
|
||
'new.rulesErudit': '131 фишка · ё = е · центр не удваивает · бонус +15',
|
||
'new.moveLimit': 'Время на ход: {n} ч. 00 мин.',
|
||
'new.searchHint':
|
||
'Иногда поиск соперника может занять некоторое время. Если не захотите ждать после начала игры, можете вернуться в приложение через несколько минут.',
|
||
|
||
// Подсказки первого запуска (components/Coachmark.svelte).
|
||
'onboarding.lobbySettings': 'Друзья, настройки игры и профиля, обратная связь', // ⚙️
|
||
'onboarding.lobbyStats': 'Статистика обновляется после каждой игры с соперником', // ✏️
|
||
'onboarding.lobbyNew': 'Потренируйтесь с ИИ', // 🎲
|
||
'onboarding.gameHeader': 'История ходов, чат и проверка слова', // шапка над доской
|
||
'onboarding.gameTurn': 'Пропуск хода, обмен фишек', // 🔄
|
||
'onboarding.gameHints': 'Доступные подсказки', // 🛟
|
||
'onboarding.gameShuffle': 'Встряхните фишки', // 🔀
|
||
'onboarding.gameRack': 'Выбирайте фишку и ставьте на доску', // rack
|
||
|
||
'game.bag': '{n} в мешке',
|
||
'game.bagCount': 'В мешке: {n}',
|
||
'game.bagEmpty': 'Мешок пуст',
|
||
'game.hints': 'Подсказки {n}',
|
||
'game.yourTurn': 'Ваш ход',
|
||
'game.yourTurnBy': '{name}: Ваш ход!',
|
||
'game.opponentsTurn': 'Ход соперника',
|
||
'game.searchingForOpponent': 'Ждём соперника…',
|
||
'game.waiting': 'Ожидаем {name}',
|
||
'game.makeMove': 'Сделать ход',
|
||
'game.reset': 'Сброс',
|
||
'game.draw': 'Обмен/Пас',
|
||
'game.shuffle': 'Перемешать',
|
||
'game.hint': 'Подсказка',
|
||
'game.hintLockedIn': 'Будет доступно через {n} мин.',
|
||
'game.chat': 'Чат',
|
||
'game.checkWord': 'Проверить слово',
|
||
'game.dictionary': 'Словарь',
|
||
'game.dropGame': 'Покинуть игру',
|
||
'game.oneWordRule': 'Одно слово за ход',
|
||
'game.chooseBlank': 'Выберите букву для бланка',
|
||
'game.exchangeTitle': 'Обмен или пас',
|
||
'game.exchangeConfirm': 'Обменять {n}',
|
||
'game.passNoExchange': 'Пас без обмена',
|
||
'game.confirmResign': 'Сдаться в этой игре?',
|
||
'game.hintShown': 'Лучший ход: {word} на {n}',
|
||
'game.won': 'Вы выиграли',
|
||
'game.lost': 'Вы проиграли',
|
||
'game.tied': 'Ничья',
|
||
'game.abortedNote': 'Партия не может быть продолжена по вине организатора и завершена ничьёй.',
|
||
'game.checkWordPrompt': 'Введите слово',
|
||
'game.wordLegal': '«{word}» допустимо',
|
||
'game.wordIllegal': '«{word}» недопустимо',
|
||
'game.complain': 'Возражаю',
|
||
'game.lookup': 'Поискать в словаре',
|
||
'game.complaintSent': 'Спасибо, отправлено на проверку.',
|
||
'game.check': 'Проверить',
|
||
'game.checkWait': 'Секунду, пожалуйста.',
|
||
'game.noHintOptions': 'Нет вариантов с вашим набором.',
|
||
'game.thinking': 'думает…',
|
||
|
||
'move.pass': 'пас',
|
||
'move.exchange': 'обмен',
|
||
'move.resign': 'сдаюсь',
|
||
'move.timeout': 'тайм-аут',
|
||
|
||
'result.victory': 'Победа',
|
||
'result.defeat': 'Поражение',
|
||
'result.draw': 'Ничья',
|
||
'result.place2': 'II место',
|
||
'result.place3': 'III место',
|
||
'result.place4': 'IV место',
|
||
'result.yourMove': 'Ваш ход',
|
||
'result.oppMove': 'Ход соперника',
|
||
|
||
'chat.placeholder': 'Короткое сообщение…',
|
||
'chat.send': 'Отправить',
|
||
'chat.nudge': 'Жду Вашего хода 🤭',
|
||
'chat.nudgeBy': '{name}: Жду Вашего хода 🤭',
|
||
'chat.nudgeAction': 'Поторопить',
|
||
'chat.awaitingReply': 'Немного терпения',
|
||
'chat.empty': 'Сообщений пока нет.',
|
||
'chat.nudged': '{name} торопит вас',
|
||
'chat.sentThisTurn': 'Можно написать снова в следующем ходу.',
|
||
|
||
'profile.title': 'Профиль',
|
||
'profile.language': 'Язык',
|
||
'profile.timezone': 'Часовой пояс',
|
||
'profile.hintBalance': 'Баланс подсказок',
|
||
'profile.guest': 'Гостевой аккаунт',
|
||
'profile.edit': 'Редактировать профиль',
|
||
'profile.displayName': 'Отображаемое имя',
|
||
'profile.awayWindow': 'Окно отсутствия',
|
||
'profile.awayHint': 'В эти часы вам не засчитывают автопоражение.',
|
||
'profile.from': 'С',
|
||
'profile.to': 'До',
|
||
'profile.blockChat': 'Отключить чат',
|
||
'profile.blockFriendRequests': 'Отключить заявки в друзья',
|
||
'profile.notificationsInAppOnly': 'Уведомления только в приложении',
|
||
'profile.preferences': 'Предпочтения',
|
||
'profile.preferencesHint': 'Варианты игр, в которые вас могут подобрать. Выберите хотя бы один.',
|
||
'profile.email': 'Эл. почта',
|
||
'profile.bindEmail': 'Привязать почту',
|
||
'profile.emailCode': 'Код подтверждения',
|
||
'profile.emailSent': 'Мы отправили код на {email}.',
|
||
'profile.emailBound': 'Почта подтверждена.',
|
||
'profile.saved': 'Профиль сохранён.',
|
||
'profile.guestLocked': 'Войдите по почте, чтобы управлять профилем.',
|
||
'profile.linkAccount': 'Привязать аккаунт',
|
||
'profile.linkTelegram': 'Привязать Telegram',
|
||
'profile.linkVK': 'Привязать VK',
|
||
'profile.linked': 'Аккаунт привязан.',
|
||
'profile.merged': 'Аккаунты объединены.',
|
||
'profile.mergeTitle': 'Объединить аккаунты?',
|
||
'profile.mergeBody': 'Эта личность уже принадлежит «{name}» (игр: {games}, друзей: {friends}).',
|
||
'profile.mergeIrreversible': 'Объединение сольёт оба аккаунта в этот и необратимо.',
|
||
'profile.mergeConfirm': 'Объединить',
|
||
'profile.accountsTitle': 'Способы входа',
|
||
'profile.changeEmail': 'Изменить',
|
||
'profile.newEmailPlaceholder': 'Новый адрес e-mail',
|
||
'profile.emailChanged': 'E-mail изменён.',
|
||
'profile.emailChangeTaken': 'Проверьте правильность e-mail или обратитесь в поддержку.',
|
||
'profile.unlink': 'Отвязать',
|
||
'profile.unlinked': 'Аккаунт отвязан.',
|
||
'profile.unlinkTitle': 'Отвязать аккаунт?',
|
||
'profile.unlinkBody': 'Убрать {provider} как способ входа? Позже можно привязать снова.',
|
||
'profile.deleteAccount': 'Удалить аккаунт',
|
||
'profile.deleteTitle': 'Удалить аккаунт?',
|
||
'profile.deleteWarn': 'Аккаунт будет удалён, а способы входа освобождены. Отменить нельзя.',
|
||
'profile.deleteEmailPrompt': 'Мы отправили код на вашу почту. Введите его, чтобы удалить аккаунт.',
|
||
'profile.deletePhrasePrompt': 'Введите DELETE для подтверждения.',
|
||
'profile.deletePhrasePlaceholder': 'DELETE',
|
||
'profile.deleteConfirm': 'Удалить навсегда',
|
||
'deleted.title': 'Учётная запись удалена',
|
||
'deleted.body': 'Аккаунт удалён. Если снова откроете приложение — будет создан новый аккаунт.',
|
||
|
||
'settings.title': 'Настройки',
|
||
'settings.theme': 'Тема',
|
||
'settings.themeAuto': 'Авто',
|
||
'settings.themeLight': 'Светлая',
|
||
'settings.themeDark': 'Тёмная',
|
||
'settings.language': 'Язык интерфейса',
|
||
'settings.boardStyle': 'Стиль доски',
|
||
'settings.boardLabels': 'Подписи бонусов',
|
||
'settings.labelsBeginner': 'Новичок',
|
||
'settings.labelsClassic': 'Классика',
|
||
'settings.labelsNone': 'Без текста',
|
||
'settings.reduceMotion': 'Меньше анимаций',
|
||
'settings.zoomBoard': 'Приближать доску',
|
||
'settings.offline': 'Оффлайн',
|
||
'offline.preloadWarning': 'Плохое соединение с интернет. Некоторые функции могут быть недоступны.',
|
||
|
||
// --- wallet ---
|
||
'wallet.title': 'Кошелёк',
|
||
'wallet.tab': 'Кошелёк',
|
||
'wallet.source.vk': 'VK',
|
||
'wallet.source.telegram': 'Telegram',
|
||
'wallet.source.direct': 'Веб',
|
||
'wallet.active': 'Активные',
|
||
'wallet.activeHints': 'Подсказки: {n}',
|
||
'wallet.noAdsUntil': 'Без рекламы до {date}',
|
||
'wallet.noAdsForever': 'Без рекламы навсегда',
|
||
'wallet.store': 'Магазин',
|
||
'wallet.tabBuy': 'Купить фишки',
|
||
'wallet.tabSpend': 'Потратить фишки',
|
||
'wallet.empty': 'Магазин пока пуст',
|
||
'wallet.buy': 'Купить',
|
||
'wallet.spend': 'Обмен',
|
||
'wallet.rewardWatch': 'Ролик за {n} 🪙',
|
||
'wallet.rewardCta': 'Смотреть',
|
||
'wallet.rewardCredited': '+{n} 🪙 за просмотр',
|
||
'wallet.rewardCapped': 'Достигнут дневной лимит наград',
|
||
'wallet.rewardFailed': 'Не удалось показать ролик',
|
||
'wallet.offer': 'Публичная оферта',
|
||
'wallet.platformNoBuy': 'На данной платформе покупки невозможны',
|
||
'wallet.iosBlockedPre': 'Покупки на iOS запрещены политикой Apple. Попробуйте воспользоваться ',
|
||
'wallet.iosBlockedLink': 'другой версией',
|
||
'wallet.iosBlockedPost': ' игры.',
|
||
'wallet.gpStub': 'Чтобы покупать фишки, установите версию из RuStore.',
|
||
'wallet.purchasesSoon': 'Покупки появятся в одном из следующих обновлений.',
|
||
'wallet.cur.RUB': '₽',
|
||
'wallet.cur.VOTE': 'голосов',
|
||
'wallet.cur.XTR': '⭐',
|
||
'wallet.spendTitle': 'Подтверждение обмена',
|
||
'wallet.spendBody': 'Обменять {n} 🪙 на «{title}»?',
|
||
'wallet.spendConfirm': 'Обменять',
|
||
'wallet.warnBody':
|
||
'Оплата спишет фишки VK/Telegram, и благо будет работать только в вебе и приложении — из-за правил магазинов.',
|
||
'wallet.warnCancel': 'Отмена',
|
||
'about.title': 'О программе',
|
||
'about.tab': 'Инфо',
|
||
'about.description': 'Мультиплатформенная игра в «Эрудит».',
|
||
'about.version': 'Версия {v}',
|
||
|
||
'feedback.title': 'Обратная связь',
|
||
'feedback.placeholder': 'Опишите проблему или поделитесь предложением…',
|
||
'feedback.attach': 'Прикрепить файл',
|
||
'feedback.removeFile': 'Удалить',
|
||
'feedback.send': 'Отправить',
|
||
'feedback.fileRejected': 'Этот файл нельзя прикрепить.',
|
||
'feedback.sent': 'Ваше сообщение отправлено',
|
||
'feedback.waiting': 'Ожидаем рассмотрения вашего последнего обращения',
|
||
'feedback.banned': 'Отправка обратной связи недоступна',
|
||
'feedback.replyTitle': 'Ответ на ваше последнее сообщение',
|
||
|
||
'landing.tagline': 'Играй в «Эрудита» с друзьями, случайным соперником или ИИ-роботом.',
|
||
'landing.playTelegram': 'Играть в Telegram',
|
||
'landing.playVK': 'Играть во ВКонтакте',
|
||
'landing.playWeb': 'Играть в браузере',
|
||
'landing.captionTelegram': 'Telegram',
|
||
'landing.captionVK': 'VK',
|
||
'landing.captionWeb': 'Веб-версия',
|
||
'landing.eula': 'Пользовательское соглашение',
|
||
'landing.privacy': 'Политика конфиденциальности',
|
||
'landing.offer': 'Публичная оферта',
|
||
'landing.feedback': 'Обратная связь',
|
||
|
||
'install.title': 'Установить приложение',
|
||
'install.subtitle': 'Поместите иконку приложения на рабочий стол (домашний экран), чтобы открывать игру одним нажатием.',
|
||
'install.iosTitle': 'На экран «Домой»',
|
||
'install.iosStep1': 'Нажмите кнопку «Поделиться» на панели браузера.',
|
||
'install.iosStep2': 'Выберите «На экран „Домой“».',
|
||
'install.iosStep3': 'Нажмите «Добавить».',
|
||
|
||
'lang.en': 'English',
|
||
'lang.ru': 'Русский',
|
||
|
||
'error.not_your_turn': 'Сейчас не ваш ход.',
|
||
'error.nudge_own_turn': 'Сейчас ваш ход — некого торопить.',
|
||
'error.illegal_play': 'Это недопустимый ход.',
|
||
'error.hint_unavailable': 'Подсказки недоступны.',
|
||
'error.no_hint_available': 'Нет вариантов с вашим набором.',
|
||
'error.chat_rejected': 'Сообщение отклонено (слишком длинное или содержит контакты).',
|
||
'error.nudge_too_soon': 'Не стоит торопить соперника так часто.',
|
||
'error.chat_not_your_turn': 'Писать в чат можно только в свой ход.',
|
||
'error.chat_already_sent': 'За один ход можно отправить только одно сообщение.',
|
||
'error.game_finished': 'Эта игра уже завершена.',
|
||
'error.not_a_player': 'Вы не участник этой игры.',
|
||
'error.already_queued': 'Вы уже в очереди.',
|
||
'error.email_taken': 'Эта почта принадлежит другому аккаунту.',
|
||
'error.code_invalid': 'Неверный или истёкший код.',
|
||
'error.invalid_email': 'Введите корректный адрес почты.',
|
||
'error.invalid_config': 'Неверные настройки игры.',
|
||
'error.not_found': 'Не найдено.',
|
||
'error.insufficient_chips': 'Не хватает фишек.',
|
||
'error.product_not_found': 'Этого товара больше нет.',
|
||
'error.session_invalid': 'Сессия истекла. Войдите снова.',
|
||
'error.unauthenticated': 'Пожалуйста, войдите.',
|
||
'error.rate_limited': 'Слишком много запросов, помедленнее.',
|
||
'error.unavailable': 'Проблема соединения. Повторяем…',
|
||
'error.internal': 'Что-то пошло не так.',
|
||
'error.generic': 'Что-то пошло не так.',
|
||
|
||
'lobby.invitations': 'Приглашения',
|
||
'lobby.friends': 'Друзья',
|
||
|
||
'friends.title': 'Друзья',
|
||
'friends.yours': 'Ваши друзья',
|
||
'friends.none': 'Друзей пока нет.',
|
||
'friends.incoming': 'Заявки в друзья',
|
||
'friends.accept': 'Принять',
|
||
'friends.decline': 'Отклонить',
|
||
'friends.unfriend': 'Удалить',
|
||
'friends.block': 'Заблокировать',
|
||
'friends.actions': 'Действия',
|
||
'friends.blockConfirm': 'Заблокировать?',
|
||
'friends.unfriendConfirm': 'Удалить из друзей?',
|
||
'friends.add': 'Добавить друга',
|
||
'friends.addFromGame': 'В друзья',
|
||
'friends.blockFromGame': 'Заблокировать',
|
||
'friends.requestSent': 'Заявка в друзья отправлена.',
|
||
'friends.getCode': 'Показать мой код',
|
||
'friends.codeHint': 'Передайте этот код другу в течение 12 часов.',
|
||
'friends.codeExpires': 'Истекает в {time}',
|
||
'friends.enterCode': 'Есть код? Добавить друга',
|
||
'friends.codePlaceholder': 'Код из 6 цифр',
|
||
'friends.redeem': 'Добавить',
|
||
'friends.copy': 'Копировать',
|
||
'friends.codeCopied': 'Код скопирован.',
|
||
'friends.shareTelegram': 'Поделиться',
|
||
'friends.inviteText': 'Давай играть в Эрудит!',
|
||
'friends.linkCopied': 'Ссылка скопирована.',
|
||
'friends.selfInvite': 'Надеюсь, что с собой Вы уже давно дружите ☺️',
|
||
'friends.staleInviteTitle': 'Ссылка устарела',
|
||
'friends.staleInvite': 'Вы открыли игру по устаревшей ссылке. Откройте бота {bot}, чтобы играть и получать уведомления.',
|
||
'friends.welcomeRedeemTitle': 'Добро пожаловать!',
|
||
'friends.welcomeRedeem': 'Добро пожаловать, {name}!\n\nВоспользуйтесь {bot}, чтобы заходить в игру наиболее удобным способом.',
|
||
'friends.added': 'Добавлен(а) {name}.',
|
||
'friends.blockedList': 'Заблокированные',
|
||
'friends.unblock': 'Разблокировать',
|
||
'friends.noneBlocked': 'Заблокированных нет.',
|
||
|
||
'invitations.none': 'Приглашений нет.',
|
||
'invitations.from': 'От {name}',
|
||
'invitations.with': 'С {names}',
|
||
'invitations.accept': 'Принять',
|
||
'invitations.decline': 'Отклонить',
|
||
'invitations.declineConfirm': 'Отклонить приглашение?',
|
||
'invitations.cancel': 'Отменить',
|
||
'invitations.waiting': 'Ожидаем ответы',
|
||
|
||
'new.auto': 'Быстрая игра',
|
||
'new.withFriends': 'Игра с друзьями',
|
||
'new.playRemote': 'Пригласить друга',
|
||
'new.playLocal': 'На одном устройстве',
|
||
'new.needsNetwork': 'Для игры онлайн нужна сеть.',
|
||
'new.dictUnavailable': 'Этот словарь пока недоступен офлайн.',
|
||
'new.pickFriends': 'Кого пригласить',
|
||
'new.searchFriends': 'Поиск друзей',
|
||
'new.gameType': 'Вариант',
|
||
'new.invite': 'Отправить приглашение',
|
||
'new.moveTime': 'Время на ход',
|
||
'new.hintsPerPlayer': 'Подсказки',
|
||
'new.multipleWordsPerTurn': 'Несколько слов за ход',
|
||
'new.start': 'Начать игру',
|
||
'new.invited': 'Приглашение отправлено.',
|
||
'new.limitGuestTitle': 'Больше партий?',
|
||
'new.limitGuestBody': 'Войдите или создайте учётную запись, чтобы воспользоваться всеми функциями игры.',
|
||
'new.limitDurableTitle': 'Лимит игр',
|
||
'new.limitDurableBody': 'Вы достигли лимита. Доиграйте активные партии, чтобы начать новую.',
|
||
'new.limitLogin': 'Вход',
|
||
'new.noFriends': 'Сначала добавьте друзей, чтобы пригласить их.',
|
||
'new.opponentAI': 'ИИ',
|
||
'new.opponentRandom': 'Случайный игрок',
|
||
'new.aiInactiveLimit': 'Поражение, если 7 дней нет активности',
|
||
|
||
'stats.title': 'Статистика',
|
||
'stats.wins': 'Победы',
|
||
'stats.losses': 'Поражения',
|
||
'stats.draws': 'Ничьи',
|
||
'stats.played': 'Игры',
|
||
'stats.moves': 'Ходы',
|
||
'stats.hintShare': 'Доля подсказок',
|
||
'stats.winRate': 'Доля побед',
|
||
'stats.maxGame': 'Лучшая игра',
|
||
'stats.maxWord': 'Лучший ход',
|
||
'stats.guestHint': 'Войдите, чтобы вести статистику.',
|
||
|
||
'game.exportGcg': 'Экспорт партии',
|
||
'game.exportChoice': 'Экспортировать завершённую партию как:',
|
||
'game.exportImageOpt': 'Картинка (PNG)',
|
||
'game.exportGcgOpt': 'Файл GCG',
|
||
'game.gcgActiveOnly': 'Доступно после завершения игры.',
|
||
'game.gcgCopied': 'GCG скопирован в буфер обмена.',
|
||
'game.addFriendShort': 'В друзья?',
|
||
'game.blockShort': 'В бан?',
|
||
|
||
'time.minutes': '{n} мин',
|
||
'time.hours': '{n} ч',
|
||
|
||
'error.self_relation': 'Нельзя сделать это с самим собой.',
|
||
'error.request_exists': 'Заявка или дружба уже существует.',
|
||
'error.request_blocked': 'Игрок не принимает заявки.',
|
||
'error.request_not_found': 'Подходящей заявки нет.',
|
||
'error.no_shared_game': 'Можно добавить только того, с кем вы играли.',
|
||
'error.request_declined': 'Игрок отклонил вашу заявку.',
|
||
'error.friend_code_invalid': 'Код недействителен или истёк.',
|
||
'error.invalid_invitation': 'Неверное приглашение.',
|
||
'error.invitation_blocked': 'Нельзя пригласить этого игрока.',
|
||
'error.invitation_not_found': 'Приглашение не найдено.',
|
||
'error.invitation_not_pending': 'Приглашение больше не открыто.',
|
||
'error.invitation_expired': 'Приглашение истекло.',
|
||
'error.not_invited': 'Вас не приглашали.',
|
||
'error.already_responded': 'Вы уже ответили.',
|
||
'error.not_inviter': 'Только пригласивший может это сделать.',
|
||
'error.game_active': 'Доступно только после завершения игры.',
|
||
'error.invalid_profile': 'Некоторые поля профиля некорректны.',
|
||
'error.already_confirmed': 'Эта почта уже подтверждена.',
|
||
|
||
'pin.enter': 'Введите PIN',
|
||
'pin.create': 'Придумайте PIN',
|
||
'pin.repeat': 'Повторите PIN',
|
||
'pin.enterCurrent': 'Введите текущий PIN',
|
||
'pin.mismatch': 'PIN не совпадает',
|
||
'pin.wrong': 'Неверный PIN',
|
||
'pin.setNew': 'Задать новый PIN',
|
||
'pin.remove': 'Удалить пароль',
|
||
|
||
'hotseat.hostPin': 'Пароль ведущего',
|
||
'hotseat.setPin': 'Пароль',
|
||
'hotseat.changePin': 'Изменить',
|
||
'hotseat.playerName': 'Имя игрока',
|
||
'hotseat.addPlayer': 'Добавить игрока',
|
||
'hotseat.removePlayer': 'Удалить игрока',
|
||
'hotseat.hostPlaysTitle': 'Принимаете участие в игре?',
|
||
'hotseat.hostPlaysYes': 'Да, играю',
|
||
'hotseat.hostPlaysNo': 'Нет',
|
||
'hotseat.unlock': 'Разблокировать',
|
||
'hotseat.unlockTitle': 'Разблокировать: {name}',
|
||
'hotseat.turnOf': 'Ход: {name}',
|
||
'hotseat.host': 'Ведущий',
|
||
'hotseat.skip': 'Пропустить ход',
|
||
'hotseat.exclude': 'Исключить игрока:',
|
||
'hotseat.terminate': 'Отменить партию',
|
||
'hotseat.askSkip': 'Пропустить ход игрока {name}?',
|
||
'hotseat.askExclude': 'Удалить {name} из игры?',
|
||
'hotseat.askTerminate': 'Отменить партию без результата?',
|
||
};
|