diff --git a/src/cljs/nr/account.cljs b/src/cljs/nr/account.cljs index 626db94808..99844ca79d 100644 --- a/src/cljs/nr/account.cljs +++ b/src/cljs/nr/account.cljs @@ -298,7 +298,8 @@ {:name "한국어" :ref "ko"} {:name "Polski" :ref "pl"} {:name "Igpay Atinlay" :ref "la-pig"} - {:name "Português" :ref "pt"}]] + {:name "Português" :ref "pt"} + {:name "Русский" :ref "ru"}]] [:option {:value (:ref option) :key (:ref option)} (:name option)]))]] [:section [:h3 (tr [:settings.sounds "Sounds"])] diff --git a/src/cljs/nr/translations.cljs b/src/cljs/nr/translations.cljs index fe8f407f7b..dcbe553399 100644 --- a/src/cljs/nr/translations.cljs +++ b/src/cljs/nr/translations.cljs @@ -3379,6 +3379,450 @@ :win-points (fn [[turn]] (str "計画ポイントによる勝利 " turn " ターン")) :win-other (fn [[turn reason]] (str "wins by " reason " on turn " turn))} } + + :ru + (defn ru-quant [group1 group2 group3] + (fn [[cnt]] + (let [group (if (contains? #{5 6 7 8 9 10 11 12 13 14} (rem cnt 100)) + group1 + (condp contains? (rem cnt 10) + #{0 5 6 7 8 9} group1 + #{1} group2 + #{2 3 4} group3))] + (str cnt " " group)))) + {:missing ":ru missing text" + :side + {:corp "Корпорация" + :runner "Бегущий" + :any-side "Любая сторона" + :all "Все"} + :faction + {:all "Все" + :any-faction "Все фракции" + :anarch "Анарх" + :criminal "Криминал" + :shaper "Шейпер" + :adam "Адам" + :apex "Апекс" + :sunny-lebeau "Санни Лебо" + :jinteki "Джинтеки" + :haas-bioroid "Хаас-Биороид" + :nbn "NBN" + :weyland-consortium "Консорциум Вейланда" + :neutral "Нейтральные"} + :format + {:all "Все" + :any-format "Любой формат" + :standard "Стандарт" + :eternal "Вечный" + :core-experience "Core Experience" + :snapshot "Snapshot" + :snapshot-plus "Snapshot Plus" + :socr "SOCR" + :sunset "Закат" + :neo "Нео" + :classic "Классический" + :casual "Свободный" + :system-gateway "Врата Системы" + :startup "Стартап"} + :card-type + {:all "Все" + :identity "Роль" + :agenda "Проект" + :asset "Актив" + :upgrade "Улучшение" + :operation "Операция" + :ice "Лёд" + :event "Событие" + :hardware "Устройство" + :resource "Ресурс" + :program "Программа"} + :pronouns + {:none "Не указаны" + :any "Любые" + :myodb "Не хочу указывать" + :blank "[пусто]" + :they "Они/их" + :she "Она/её" + :shethey "Она/их" + :he "Он/его" + :hethey "Он/их" + :it "Оно" + :ne "Ne/nem" + :ve "Ve/ver" + :ey "Ey/em" + :zehir "Ze/hir" + :zezir "Ze/zir" + :xe "Xe/xem"} + :chat + {:title "Играть в Netrunner в браузере" + :channels "Каналы" + :send "Отправить" + :placeholder "Напишите что-нибудь..." + :delete "Удалить сообщение" + :delete-all "Удалить все сообщения пользователя" + :block "Заблокировать пользователя" + :cancel "Отмена"} + :nav + {:chat "Чат" + :cards "Карты" + :deck-builder "Колодостроение" + :play "Играть" + :help "Помощь" + :settings "Настройки" + :stats "Статистика" + :about "О нас" + :tournaments "Турниры" + :admin "Администратор" + :users "Пользователи" + :features "Возможности" + :game-count (ru-quant "игр" "игра" "игры")} + :menu + {:settings :en.nav/settings + :logout "Отключиться" + :admin :en.nav/admin + :moderator "Модератор" + :donor "Спонсор"} + :card-browser + {:search-hint "Искать карты" + :sort "Сортировать по" + :format "Формат" + :set "Набор" + :side "Сторона" + :faction "Фракция" + :type "Тип" + :clear "Сбросить" + :select-art "Выбрать изображение" + :selected-art "Выбранное изображение" + :update-success "Изображение обновлено" + :update-failure "Ошибка обновления изображения" + :memory "Память" + :cost "Цена" + :trash-cost "Цена сноса" + :strength "Сила" + :advancement "Требование к продвижению" + :agenda-points "Победные очки" + :min-deck "Минимальный размер колоды" + :inf-limit "Предел влияния" + :influence "Влияние" + :sort-by {:faction "Фракция" + :name "Название" + :type "Тип" + :influence "Влияние" + :cost "Цена" + :set-number "Номер в наборе"} + } + :deck-builder + {:loading-msg "Загрузка коллекции колод..." + :new-corp "Новая колода Корпорации" + :new-runner "Новая колода Бегущего" + :import-button "Импорт колоды" + :reset "Сброс" + :import-title "Введите ID общедоступной колоды с NRDB или ссылку" + :import "Импортировать" + :cancel "Отмена" + :import-placeholder "ID с NRDB" + :deck-count (ru-quant "колод" "колода" "колоды") + :filtered "(filtered)" + :save "Сохранить" + :confirm-delete "Подтвердить удаление" + :edit "Редактировать" + :delete "Удалить" + :copy "Скопировать" + :deck-copy-suffix "копия" + :clear-stats "Сбросить статистику" + :create-game "Создать игру" + :deck-name "Название колоды" + :format "Формат" + :identity "Роль" + :deck-notes "Примечания" + :decklist "Список карт" + :decklist-inst "(Напишите или вставьте список карт, он будет распознан)" + :notes "Примечания" + :add-to-deck "Добавить в колоду" + :add-cards "Добавить карты" + :card-name "Название карты" + :no-decks "Нет колод" + :cards "карты" + :min "минимум" + :max "максимум" + :influence "Влияние" + :agenda-points "Победные очки" + :deck-points "Очки колоды" + :hash "Турнирный хеш" + :why "Почему?" + :legal ": легальна" + :illegal ": нелегальна" + :games "Игр" + :completed "Завершено" + :won "Побед" + :lost "Поражений"} + :lobby + {:no-games "Нет игр" + :tournament "Турнирные" + :competitive "Соревновательные" + :casual "Обычные" + :new-game "Новая игра" + :reload "Перезагрузить список" + :load-replay "Загрузить повтор" + :start-replay "Начать повтор" + :save-replay "Сохранить повтор" + :replay-link-error "Ссылка на повтор недействительна." + :replay-invalid-file "Выберите подходящий файл повтора." + :create "Создать" + :cancel "Отмена" + :title "Название" + :side "Сторона" + :format "Формат" + :options "Параметры" + :spectators "Допустить зрителей" + :hidden "Раскрыть зрителям скрытую информацию" + :password-protected "Защитить паролем" + :password "Пароль" + :start "Начать" + :leave "Выйти" + :swap "Изменить стороны" + :waiting "Игроки выбирают колоды" + :players "Игроки" + :deck-selected "Колода выбрана" + :select-deck "Выбрать колоду" + :chat "Чат" + :select-title "Выберите вашу колоду" + :spectator-count (ru-quant "зрителей" "зритель" "зрителя") + :closed-msg "Лобби закрыто из-за отсутствия активности" + :title-error "Пожалуйста, введите название игры." + :password-error "Пожалуйста, введите пароль." + :too-little-data "Слишком мало данных" + :completion-rate "Процент завершённых игр" + :watch "Смотреть" + :join "Войти" + :rejoin "Перезайти" + :as-corp "За Корпорацию" + :as-runner "За Бегущего" + :private "ЧАСТНОЕ" + :reset "Сбросить название игры" + :delete "Удалить игру" + :password-for "Пароль для" + :invalid-password "Неправильный пароль" + :not-allowed "Не разрешено" + :aborted "Соединение разорвано" + :lobby.api-access "Разрешить доступ к данным игры через API" + :lobby.api-requires-key "(Требуется ключ API в Настройках)" + :game-count (ru-quant "игр" "игра" "игры") + :filtered "(с фильтром)"} + :settings + {:invalid-password "Неправильный логин или пароль" + :invalid-email "Учётной записи с таким адресом электронной почты не существует" + :updated "Профиль обновлён. Пожалуйста, обновите страницу браузера" + :updating "Обновление профиля..." + :get-log-width "Записать текущую ширину журнала" + :get-log-top "Записать текущую высоту журнала" + :email-title "Изменить адрес электронной почты" + :current-email "Текущий адрес" + :desired-email "Новый адрес" + :email-placeholder "Адрес электронной почты" + :enter-valid "Пожалуйста, введите корректный адрес электронной почты" + :update "Обновить" + :cancel "Отмена" + :email "Электронная почта" + :change-email "Изменить адрес электронной почты" + :avatar "Аватар" + :change-avatar "Изменить на gravatar.com" + :pronouns "Местоимения" + :language "Язык" + :sounds "Звуки" + :enable-lobby-sounds "Включить звуки в лобби" + :enable-game-sounds "Включить звуки в игре" + :volume "Громкость" + :layout-options "Настройки расположения" + :stacked-cards "Складывать вместе одинаковые карты (по умолчанию включено)" + :runner-layout "Раскладка Бегущего при игре за Корпорацию" + :runner-classic "Классическая раскладка Бегущего (Сверху вниз: Программы, Устройства, Ресурсы)" + :runner-reverse "Обратная раскладка Бегущего (Сверху вниз: Ресурсы, Устройства, Программы)" + :background "Фон игрового поля" + :card-backs "Рубашки карт" + :game-stats "Учёт статистики побед/поражений" + :deck-stats "Учёт статистики колод" + :always "Всегда" + :comp-only "Только в соревновательном лобби" + :none "Не учитывать" + :alt-art "Альтернативные изображения карт" + :show-alt "Показывать альтернативные изображения карт" + :high-res "Включить загрузку изображений высокого разрешения" + :card-images "Изображения карт" + :set-all "Изменить все карты на" + :set "Изменить" + :reset "Сбросить до официальных изображений" + :blocked "Заблокированные пользователи" + :user-name "Имя пользователя" + :block "Заблокировать пользователя" + :update-profile "Обновить профиль" + :nisei "NISEI" + :nsg "NSG" + :ffg "FFG" + :api-keys "Ключи API" + :delete-api-key "Удалить" + :create-api-key "Создать ключ API"} + :stats + {:game-stats "Игровая статистика" + :corp-stats "Статистика за Корпорацию" + :runner-stats "Статистика за Бегущего" + :clear-stats "Очистить статистику" + :no-log "Журнал недоступен" + :view-log "Смотреть журнал" + :winner "Победитель" + :no-games "Нет игр" + :all-games "Показать все игры" + :shared-games "Показать игры с публичными повторами" + :started "Начато" + :ended "Закончено" + :completed "Завершено" + :not-completed "Не завершено" + :won "Выиграно" + :lost "Проиграно" + :turn-count (ru-quant "ходов" "ход" "хода") + :lobby "Лобби" + :format "Формат" + :win-method "Способ победы" + :view-games "Вернуться к статистике" + :share "Поделиться повтором" + :launch "Запустить повтор" + :download "Скачать повтор" + :unavailable "Повтор недоступен" + :filtered "(отфильтровано)" + :log-count (ru-quant "журналов" "журнал" "журнала") + :clicks-gained "Получено кликов" + :credits-gained "Получено кредитов" + :credits-spent "Потрачено кредитов" + :credits-click "Получено кредитов за клики" + :cards-drawn "Взято карт" + :cards-click "Взято карт за клики" + :damage-done "Нанесено урона" + :cards-rezzed "Развёрнуто карт" + :tags-gained "Получено меток" + :runs-made "Совершено забегов" + :cards-accessed "Карт в доступе"} + :log + {:game-log "Журнал игры" + :annotating "Аннотации" + :shared "Опубликованные аннотации"} + :annotations + {:remote-annotations-fail "Не удалось загрузить аннотации." + :turn-placeholder "Заметки к этому ходу" + :click-placeholder "Заметки к этому клику" + :available-annotations "Доступные аннотации" + :annotations-no-published-annotations "Нет опубликованных аннотаций." + :annotations.available-annotations "Доступные аннотации" + :notes.publish "Опубликовать" + :notes.clear-annotations "Очистить локальные аннотации" + :import-local "Импортировать файл с аннотациями" + :load-local "Загрузить" + :save-local "Сохранить" + :clear "Очистить"} + :game + {:keep "Оставить" + :mulligan "Пересдать" + :close "Закрыть" + :start "Начать игру" + :remove-tag "Снять метку" + :run "Начать забег" + :purge "Сбросить вирусы" + :trash-resource "Снести ресурс" + :draw "Взять карту" + :gain-credit "Получить кредит" + :game-start "Начало игры" + :start-turn "Начать ход" + :end-turn "Закончить ход" + :mandatory-draw "Карта за начало хода" + :take-clicks "Получить клики" + :hq "HQ" + :grip "Рука" + :rfg "Удалены из игры" + :play-area "Игровая зона" + :current "Течение" + :scored-area "Зона зачёта" + :archives "Архивы" + :max-hand "Макс. размер руки" + :brain-damage "Критический урон" + :tag-count (fn [[base additional total]] + (str base (when (pos? additional) (str " + " additional)) (ru-quant "меток" "метка" "метки"))) + :agenda-count (fn [[agenda-point]] (str agenda-point (ru-quant "победных очков" "победное очко" "победных очка"))) + :link-strength "Мощность канала" + :credit-count (fn [[credit run-credit]] (str credit (ru-quant "кредитов" "кредит" "кредита")) + (when (pos? run-credit) + (str " (" run-credit " для забега)")))) + :click-count (fn [[click]] (str click (ru-quant "кликов" "клик" "клика"))) + :bad-pub-count (fn [[base additional]] (str base (when (pos? additional) (str " + " additional)) (ru-quant "плохих репутаций" "плохая репутация" "плохих репутации"))) + :mu-count (fn [[unused available]] (str unused " из " available " свободных ЯП")) + :special-mu-count (fn [[unused available mu-type]] (str unused " из " available " " mu-type " свободных ЯП")) + :indicate-action "Обозначить действие" + :spec-count (fn [[c]] (str c (ru-quant "зрителей" "зритель" "зрителя"))) + :spec-view "Перспектива зрителя" + :runner-view "Перспектива Бегущего" + :corp-view "Перспектива Корпорации" + :leave-replay "Выйти из повтора" + :leave "Выйти из игры" + :rig-irl "Раскладка рига: настольная" + :rig-jnet "Раскладка рига: jnet" + :unstack-cards "Не складывать карты стопкой" + :stack-cards "Складывать карты стопкой" + :unmute "Включить сообщения зрителей" + :mute "Выключить сообщения зрителей" + :concede "Сдаться" + :inactivity "Игра закрыта из-за отсутствия активности" + :server "Сервер" + :unimplemented "Не реализовано" + :abilities "Способности" + :let-subs-fire "Разрешить выполнение не сломанных подпрограмм" + :subs "Подпрограммы" + :actions "Действия" + :fire-unbroken "Выполнить не сломанные подпрограммы" + :stack "Стек" + :r&d "R&D" + :shuffle "Перемешать" + :show "Показать" + :close-shuffle "Закрыть и перемешать" + :heap "Куча" + :card-count (fn [[size]] (str size (ru-quant "карт" "карта" "карты") ".")) + :face-down-count (fn [[total face-up]] (str total (ru-quant "карт" "карта" "карты") ", " (- total face-up) " лицом вниз.")) + :up-down-count (fn [[total face-up]] (str face-up "↑ " (- total face-up) "↓")) + :initiation "Инициация" + :approach-ice "Приблизиться ко льду" + :encounter-ice "Встретиться со льдом" + :pass-ice "Пройти лёд" + :movement "Движение" + :approach-server "Приблизиться к серверу" + :corp-phase-43 "Фаза Корпорации 4.3" + :access-server "Получить доступ к серверу" + :breach-server "Взломать сервер" + :success "Успех" + :end-of-run "Конец забега" + :run-ends "Забег завершается" + :no-current-run "Нет активного забега" + :current-phase "Текущая фаза" + :unknown-phase "Неизвестная фаза" + :rez "Развернуть" + :action-access "Действие перед доступом" + :no-further "Нет дальнейших действий" + :continue "Продолжить" + :continue-to "Продолжить к" + :stop-auto-pass "Прекратить автопередачу приоритета" + :auto-pass "Автопередача приоритета" + :jack-out "Отключиться" + :undo-click "Отменить клик" + :pass-continue "Пройти лёд и продолжить" + :pass-jack "Пройти лёд и отключиться" + :trace "Отследить" + :credits "кредитов" + :card "Карта" + :time-taken (fn [[t]] (str "Затраченное время: " t " минут")) + :win-decked (fn [[turn]] (str "побеждает. Соперник не смог взять карту из R&D на " turn " ходу")) + :win-flatlined (fn [[turn]] (str "побеждает. Соперник получил флетлайн на " turn " ходу")) + :win-conceded (fn [[turn]] (str "побеждает. Соперник сдался на " turn " ходу")) + :win-claimed (fn [[turn]] (str "объявляет победу на " turn " ходу")) + :win-points (fn [[turn]] (str "побеждает, засчитав победные очки на " turn " ходу")) + :win-other (fn [[turn reason]] (str "побеждает из-за " reason " на " turn " ходу"))} + } }) (defn opts [] {:dict translation-dictionary})