trying to add multilanguage support
parent
5133fdf8f4
commit
b0afb3d7cb
|
@ -1,443 +1,530 @@
|
|||
module.exports = {
|
||||
" regimen": " режим",
|
||||
" sequence": " последовательность",
|
||||
" unknown (offline)": " неизвестно (не в сети)",
|
||||
"(No selection)": "(Нет выделения)",
|
||||
"Accelerate for (steps)": "Ускоряться за (шагов)",
|
||||
"Account Not Verified": "Аккаунт не верифицирован",
|
||||
"Add to map": "Добавить на карту",
|
||||
"Always Power Motors": "Питание на моторах всегда включено",
|
||||
"An error occurred during configuration.": "Произошла ошибка во время настройки.",
|
||||
"App Settings": "Свойства приложения",
|
||||
"Are you sure you want to delete this step?": "Вы уверены, что хотите удалить этот шаг?",
|
||||
"AUTO SYNC": "Авто Синрх.",
|
||||
"Automatic Factory Reset": "Авто сброс к заводским настройкам",
|
||||
"Axis Length (steps)": "Длина оси (шагов)",
|
||||
"back": "назад",
|
||||
"Back": "Назад",
|
||||
"Beta release Opt-In": "Beta release Opt-In",
|
||||
"BIND": "Назначить",
|
||||
"BLUR": "BLUR",
|
||||
"Calibrate": "Калибровка",
|
||||
"Calibration Object Separation": "Calibration Object Separation",
|
||||
"Calibration Object Separation along axis": "Calibration Object Separation along axis",
|
||||
"CAMERA": "Камера",
|
||||
"Camera Offset X": "Сдвиг камеры по X",
|
||||
"Camera Offset Y": "Сдвиг камеры по Y",
|
||||
"Camera rotation": "Поворот камеры",
|
||||
"Can't connect to bot": "Неудалось подключиться к роботу",
|
||||
"Can't connect to release server": "Не удалось подключиться к серверу",
|
||||
"Cancel": "Отмена",
|
||||
"Change Password": "Изменить пароль",
|
||||
"Change slot direction": "Change slot direction",
|
||||
"Change the Farm Designer map size based on axis length. A value must be input in AXIS LENGTH and STOP AT MAX must be enabled in the HARDWARE widget.": "Изменить размер карты Farm Designer, основываясь на длинах осей. Значение в поле \"Длина оси\" должно быть задано и переключатель \"Останавливаться на максимуме\" должен быть включен в окне \"Железо\".",
|
||||
"Choose a crop": "Выберите рассаду",
|
||||
"CLEAR WEEDS": "Уборка сорняков",
|
||||
"CLICK anywhere within the grid": "Кликните в любом месте координатной сетки",
|
||||
"Click the edit button to add or edit a feed URL.": "Нажмите кнопку \"Редактировать\", чтобы добавить или отредактировать URL видеопотока",
|
||||
"color": "цвет",
|
||||
"Color Range": "Диапазон цветов",
|
||||
"Commands": "Команды",
|
||||
"computer": "ПК",
|
||||
"Confirm New Password": "Подтвердите новый пароль",
|
||||
"Confirm Sequence step deletion": "Подтвердите удаление шага последовательности",
|
||||
"Connection Attempt Period": "Период ожидания попытки подключения",
|
||||
"Connectivity": "Связь",
|
||||
"Could not delete image.": "Не удалось удалить изображение.",
|
||||
"Could not delete plant.": "Не удалось удалить растение.",
|
||||
"Could not download FarmBot OS update information.": "Не удалось скачать информацию об обновлении FarmBot OS.",
|
||||
"Create logs for sequence:": "Создать логи для последовательности:",
|
||||
"Create point": "Создать точку",
|
||||
"Created At:": "Создано:",
|
||||
"Date": "Дата",
|
||||
"delete": "удалить",
|
||||
"Delete Account": "Удалить аккаунт",
|
||||
"Delete all created points": "Удалить все созданные точки",
|
||||
"Delete all of the points created through this panel.": "Удалить все точки, созданные через эту панель.",
|
||||
"Delete multiple": "Удалить несколько",
|
||||
"Delete Photo": "Удалить фото",
|
||||
"Delete selected": "Удалить выделенное",
|
||||
"Deleted farm event.": "Удаленное событие.",
|
||||
"Deselect all": "Снять выделение",
|
||||
"Display Encoder Data": "Отображать данные с энкодеров",
|
||||
"Display plant animations": "Отображать анимацию растений",
|
||||
"Documentation": "Документация",
|
||||
"Done": "Готово",
|
||||
"Double default map dimensions": "Удвоить значения карты по-умолчанию",
|
||||
"Double the default dimensions of the Farm Designer map for a map with four times the area.": "Double the default dimensions of the Farm Designer map for a map with four times the area.",
|
||||
"Drag and drop": "Перетащите",
|
||||
"DRAG COMMAND HERE": "ПЕРЕТАЩИТЕ КОМАНДУ СЮДА",
|
||||
"Dynamic map size": "Динамический размер карты",
|
||||
"E-Stop on Movement Error": "Активировать E-Stop ошибках в движении",
|
||||
"Edit on": "Редактирование включено",
|
||||
"ELSE...": "ELSE...",
|
||||
"Email has been sent.": "Email отправлен.",
|
||||
"Email sent.": "Email отправлен.",
|
||||
"Enable 2nd X Motor": "Активировать второй мотор по оси X",
|
||||
"Enable Encoders": "Включить энкодеры",
|
||||
"Enable Endstops": "Включить концевые датчики",
|
||||
"Enable plant animations in the Farm Designer.": "Включить анимацию растений в Farm Designer.",
|
||||
"Encoder Missed Step Decay": "Encoder Missed Step Decay",
|
||||
"Encoder Scaling": "Масштабный коэффициент энкодера",
|
||||
"ENCODER TYPE": "ТИП ЭНКОДЕРА",
|
||||
"Enter a URL": "Введите URL",
|
||||
"Error saving device settings.": "Ошибка при сохранении настроек робота.",
|
||||
"Error taking photo": "Ошибка при фотографировании",
|
||||
"Every": "Каждый",
|
||||
"FACTORY RESET": "СБРОС НА ЗАВОДСКИЕ НАСТРОЙКИ",
|
||||
"FarmBot forum.": "форум FarmBot.",
|
||||
"FarmBot is not connected.": "FarmBot не подключен.",
|
||||
"FARMBOT OS": "FARMBOT OS",
|
||||
"FARMBOT OS AUTO UPDATE": "АВТООБНОВЛЕНИЕ FARMBOT OS",
|
||||
"FarmBot Web App": "FarmBot Web-приложение",
|
||||
"FarmBot?": "FarmBot?",
|
||||
"Filter logs": "Фильтровать логи",
|
||||
"Filters active": "Фильтровать активные",
|
||||
"Find Home": "Поиск домашней позиции",
|
||||
"Find Home on Boot": "Поиск домашней позиции при включении",
|
||||
"Firmware Logs:": "Внутренние логи:",
|
||||
"First-party Farmware": "Первичная прошивка",
|
||||
"Forgot password?": "Забыли пароль?",
|
||||
"Full Name": "Полное имя",
|
||||
"Have the browser also read aloud log messages on the ": "Have the browser also read aloud log messages on the ",
|
||||
"Hide Webcam widget": "Спрятать окно веб-камеры",
|
||||
"HOME {{axis}}": "В начало {{axis}}",
|
||||
"HOMING": "Поиск домашней позиции",
|
||||
"Hotkeys": "Горячие клавишы",
|
||||
"HUE": "Оттенок",
|
||||
"If not using a webcam, use this setting to remove the widget from the Controls page.": "Если Вы не используете веб-камеру, включите этот переключатель, чтобы спрятать соответствующее окно со страницы \"Управление\".",
|
||||
"image": "картинка",
|
||||
"Image Deleted.": "Картинка удалена.",
|
||||
"Image loading (try refreshing)": "Загрузка изображение (попробуйте обновить страницу)",
|
||||
"Install": "Установка",
|
||||
"Internationalize Web App": "Internationalize Web App",
|
||||
"Invert 2nd X Motor": "Инвертировать направление второго мотора оси X",
|
||||
"Invert Encoders": "Инвертировать энкодеры",
|
||||
"Invert Endstops": "Инвертировать концевые датчики",
|
||||
"Invert Hue Range Selection": "Инверсия выбора диапазона оттенков",
|
||||
"Invert Jog Buttons": "Инвертировать кнопки перемещения",
|
||||
"Invert Motors": "Инвертировать моторы",
|
||||
"ITERATION": "Итерация",
|
||||
"LAST SEEN": "Замечен в последний раз",
|
||||
"Loading": "Загрузка",
|
||||
"Loading...": "Загрузка...",
|
||||
"Login failed.": "Ошибка входа.",
|
||||
"Logs": "Логи",
|
||||
"Manual input": "Ручной ввод",
|
||||
"max": "максимум",
|
||||
"Max Missed Steps": "Максимально разрешенное число пропущенных шагов",
|
||||
"Max Retries": "Максимально число попыток",
|
||||
"Menu": "Меню",
|
||||
"mm": "мм",
|
||||
"MORPH": "MORPH",
|
||||
"move mode": "режим движения",
|
||||
"Move to location": "Двигаться к точке",
|
||||
"Move to this coordinate": "Двигаться к данной координате",
|
||||
"Must be a positive number. Rounding up to 0.": "Число должно быть положительным. Округляю до 0.",
|
||||
"Negative Coordinates Only": "Только отрицательные координаты",
|
||||
"Newer than": "Новее, чем",
|
||||
"Next": "Следующий",
|
||||
"No beta releases available": "Нет новых Beta-версий",
|
||||
"No day(s) selected.": "Дни не выбраны.",
|
||||
"No Executables": "Нет исполняемых файлов",
|
||||
"No webcams yet. Click the edit button to add a feed URL.": "Веб-камеры не добавлены. Нажмите кнопку \"Редактировать\", чтобы добавить URL видеопотока.",
|
||||
"normal": "нормально",
|
||||
"Not Set": "Не задано",
|
||||
"Older than": "Старше чем",
|
||||
"Origin": "Начальная точка",
|
||||
"Origin Location in Image": "Начальная точка на изображении",
|
||||
"Outside of planting area. Plants must be placed within the grid.": "За границей зоны посадки. Растения должны быть расположены внутри зоны посадки.",
|
||||
"Page Not Found.": "Страница не найдена.",
|
||||
"Password change failed.": "Смена пароля не удалась.",
|
||||
"Photos?": "Фотографии?",
|
||||
"Pin": "Пин",
|
||||
"Pin Guard 1": "Pin Guard 1",
|
||||
"Pin Guard 2": "Pin Guard 2",
|
||||
"Pin Guard 3": "Pin Guard 3",
|
||||
"Pin Guard 4": "Pin Guard 4",
|
||||
"Pin Guard 5": "Pin Guard 5",
|
||||
"Pin numbers are required and must be positive and unique.": "Номера пинов должны быть заданы и должны быть положительными и уникальными.",
|
||||
"Pin numbers must be less than 1000.": "Номера пинов должны быть меньше 1000.",
|
||||
"Pixel coordinate scale": "Размерность пикселей",
|
||||
"plant icon": "иконка растения",
|
||||
"Plant Type": "Тип растения",
|
||||
"Plants?": "Растения?",
|
||||
"Please check your email for the verification link.": "Пожалуйста проверьте почту и активируйте ссылку для верификации.",
|
||||
"Please check your email to confirm email address changes": "Пожалуйста проверьте почту для подтверждения смены адреса",
|
||||
"Points?": "Точки?",
|
||||
"Position (x, y, z)": "Позиция (x, y, z)",
|
||||
"Presets:": "Предустановки:",
|
||||
"Prev": "пред.",
|
||||
"Privacy Policy": "Политика конфиденциальности",
|
||||
"Processing now. Results usually available in one minute.": "Обрабатываю. Результат обычно доступен в течение одной минуты.",
|
||||
"Processing Parameters": "Обрабатываю параметры",
|
||||
"radius": "радиус",
|
||||
"Raw encoder position": "Положение энкодера (в импульсах) ",
|
||||
"Read speak logs in browser": "Read speak logs in browser",
|
||||
"Recursive condition.": "Рекурсивное условие.",
|
||||
"Regimen": "Режим",
|
||||
"Regimen Editor": "Редактор режимов",
|
||||
"Reinstall": "Переустановить",
|
||||
"Release Notes": "Примечания к релизу",
|
||||
"Remove": "Удалить",
|
||||
"Repeats?": "Повторения?",
|
||||
"Resend Verification Email": "Повторная отправка письма для верификации",
|
||||
"Reset hardware parameter defaults": "Сброс настроек железа",
|
||||
"Run": "Запуск",
|
||||
"Run Farmware": "Запуск Farmware",
|
||||
"SATURATION": "Насыщенность",
|
||||
"Save sequence and sync device before running.": "Сохраните последовательность и сделайте синхронизацию перед запуском.",
|
||||
"Scaled encoder position": "Положение энкодера (в миллиметрах)",
|
||||
"Scan image": "Сканировать изображение",
|
||||
"Scheduler": "Планировщик",
|
||||
"Search OpenFarm...": "Искать на OpenFarm...",
|
||||
"Search Regimens...": "Искать в Режимах...",
|
||||
"Search Sequences...": "Искать в последовательностях...",
|
||||
"Search your plants...": "Искать в ваших растениях...",
|
||||
"Select a regimen first or create one.": "Сначала выберите или создайте режим.",
|
||||
"Select a sequence first": "Сначала выберите последовательность",
|
||||
"Select a sequence from the dropdown first.": "Выберите последовательность из выпадающего списка.",
|
||||
"Select all": "Выбрать все",
|
||||
"Select none": "Отменить выбор",
|
||||
"Select plants": "Выбрать растения",
|
||||
"Sending camera configuration...": "Отправляю конфигурацию камеры...",
|
||||
"Sending firmware configuration...": "Отправляю аппаратую конфигурацию...",
|
||||
"SET ZERO POSITION": "УСТ. НУЛЕВОЙ ПОЗИЦИИ",
|
||||
"Setup, customize, and control FarmBot from your": "Запустите, настройте, и контролируйте FarmBot с вашего",
|
||||
"Show a confirmation dialog when the sequence delete step icon is pressed.": "Показывать диалог подтверждения при нажатии на иконку удаления шага последовательности.",
|
||||
"Show in list": "Показывать в списке",
|
||||
"Slot": "Слот",
|
||||
"smartphone": "смартфона",
|
||||
"Something went wrong while rendering this page.": "При обработке данной страницы что-то пошло не так.",
|
||||
"Spread?": "Размах?",
|
||||
"Status": "Статус",
|
||||
"Stop at Home": "Остановка на домашней позиции",
|
||||
"Stop at Max": "Остановка на максимуме",
|
||||
"Successfully configured camera!": "Камера успешно сконфигурирована!",
|
||||
"tablet": "планшета",
|
||||
"Terms of Service": "Условия обслуживания",
|
||||
"Terms of Use": "Условия использования",
|
||||
"Test": "Тест",
|
||||
"THEN...": "THEN...",
|
||||
"TIME ZONE": "ВРЕМЕННАЯ ЗОНА",
|
||||
"Timeout (sec)": "Таймаут (сек)",
|
||||
"Timeout after (seconds)": "Таймаут после (секунд)",
|
||||
"to add the plant to the map. You can add the plant as many times as you need to before pressing DONE to finish.": "чтобы добавить растение на карту. Вы можете добавить сколько угодно растений, после чего нажмите \"Готово\", чтобы закончить.",
|
||||
"To State": "Конечное состояние",
|
||||
"Tool": "Инструмент",
|
||||
"Tool Name": "Название инструмента",
|
||||
"Turn off to set Web App to English.": "Выключите для перехода на Английский язык.",
|
||||
"Type": "Тип",
|
||||
"Unable to load webcam feed.": "Не удалось получить видеопоток с веб-камеры.",
|
||||
"Unable to save farm event.": "Не удалось сохранить событие.",
|
||||
"Unable to send email.": "Не удалось отправить email.",
|
||||
"Unexpected error occurred, we've been notified of the problem.": "Произошла непредвиденная ошибка. Разработчики были уведомлены",
|
||||
"Update": "Обновление",
|
||||
"Use current location": "Использовать текущее положение",
|
||||
"Use Encoders for Positioning": "Использовать энкодеры для позиционирования",
|
||||
"VALUE": "ЗНАЧЕНИЕ",
|
||||
"Verification email resent. Please check your email!": "Письмо для верификации было отправлено повторно. Пожалуйста проверьте свою почту!",
|
||||
"VERSION": "ВЕРСИЯ",
|
||||
"Version {{ version }}": "Версия {{ version }}",
|
||||
"View": "Вид",
|
||||
"Warning": "Предупреждение",
|
||||
"Welcome to the": "Добро пожаловать в",
|
||||
"Widget load failed.": "Не удалось загрузить окно.",
|
||||
"Will reboot device.": "Устройство будет перезапущено.",
|
||||
"X Axis": "Ось X",
|
||||
"X-Offset": "Сдвиг X",
|
||||
"Y Axis": "Ось Y",
|
||||
"Y-Offset": "Сдвиг Y",
|
||||
"You are running an old version of FarmBot OS.": "У Вас используется устаревшая версия FarmBot OS.",
|
||||
"You have been logged out.": "Был совершен выход из аккаунта.",
|
||||
"You haven't made any regimens or sequences yet. Please create a": "Не создан не один режим или последовательность. Пожалуйста создайте",
|
||||
"You haven't yet taken any photos with your FarmBot. Once you do, they will show up here.": "Робот FarmBot еще не сделал ни одно фото. Когда фото будут сделаны, они отобразятся сдесь.",
|
||||
"You may click the button below to resend the email.": "Можно кликнуть на кнопку ниже, чтобы переотправить письмо.",
|
||||
"Your password is changed.": "Ваш пароль изменен.",
|
||||
"Z Axis": "Ось Z",
|
||||
"Z-Offset": "Сдвиг Z",
|
||||
"zero {{axis}}": "обнулить {{axis}}",
|
||||
"Account Settings": "Настройки Аккаунта",
|
||||
"Add Farm Event": "Добавить событие",
|
||||
"Age": "Возраст",
|
||||
"BACK": "НАЗАД",
|
||||
"CALIBRATE {{axis}}": "КАЛИБРОВАТЬ {{axis}}",
|
||||
"CALIBRATION": "КАЛИБРОВКА",
|
||||
"Copy": "Копировать",
|
||||
"Create Account": "Создать Аккаунт",
|
||||
"Data Label": "Data Label",
|
||||
"Day {{day}}": "день {{day}}",
|
||||
"Delete": "Удалить",
|
||||
"Delete this plant": "Удалить это растение",
|
||||
"Designer": "Дизайнер",
|
||||
"Drag and drop into map": "Перетащи на карту",
|
||||
"EXECUTE SEQUENCE": "ВЫПОЛНИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ",
|
||||
"Edit": "Редактировать",
|
||||
"Edit Farm Event": "Редактировать событие",
|
||||
"Email": "Email",
|
||||
"Enter Email": "Введите Email",
|
||||
"Enter Password": "Введите пароль",
|
||||
"Execute Sequence": "Выполнить Последовательность",
|
||||
"FIRMWARE": "ПРОШИВКА",
|
||||
"Factory Reset": "Сброс устройства",
|
||||
"Farm Events": "События",
|
||||
"GO": "СТАРТ",
|
||||
"I Agree to the Terms of Service": "Я согласен с правилами и положениями",
|
||||
"I agree to the terms of use": "Я согласен с правилами использования",
|
||||
"IF STATEMENT": "ЕСЛИ STATEMENT",
|
||||
"If Statement": "Если Statement",
|
||||
"Import coordinates from": "Импортировать координаты из",
|
||||
"Location": "Координаты",
|
||||
"Login": "Войти",
|
||||
"Logout": "Выход",
|
||||
"MOVE ABSOLUTE": "АБСОЛЮТНОЕ ПЕРЕМЕЩЕНИЕ",
|
||||
"MOVE AMOUNT (mm)": "Переместить на (мм)",
|
||||
"MOVE RELATIVE": "ОТНОСИТЕЛЬНОЕ ПЕРЕМЕЩЕНИЕ",
|
||||
"Message": "Сообщение",
|
||||
"Move Absolute": "Абсолютное Перемещение",
|
||||
"Move Relative": "Относительное Перемещение",
|
||||
"NAME": "ИМЯ",
|
||||
"New Password": "Новый пароль",
|
||||
"Old Password": "Текущий пароль",
|
||||
"Operator": "Оператор",
|
||||
"Package Name": "Имя пакета",
|
||||
"Password": "Пароль",
|
||||
"Pin Mode": "Режим Pin",
|
||||
"Pin Number": "Номер Pin",
|
||||
"Plant Info": "Инфо о растении",
|
||||
"Plants": "Растения",
|
||||
"READ PIN": "СЧИТАТЬ PIN",
|
||||
"RESET": "СБРОС",
|
||||
"RESTART": "ПЕРЕЗАГРУЗКА",
|
||||
"RESTART FARMBOT": "ПЕРЕЗАГРУЗИТЬ РОБОТА",
|
||||
"Read Pin": "Считать Pin",
|
||||
"Regimen Name": "Название режима",
|
||||
"Regimens": "Режимы",
|
||||
"Request sent": "Запрос отправлен",
|
||||
"Reset": "Сброс",
|
||||
"Reset Password": "Сброс Пароля",
|
||||
"Reset your password": "Сбросить ваш пароль",
|
||||
"SAVE": "СОХРАНИТЬ",
|
||||
"SEND MESSAGE": "ОТПРАВИТЬ СООБЩЕНИЕ",
|
||||
"SHUTDOWN": "ВЫКЛЮЧИТЬ",
|
||||
"SHUTDOWN FARMBOT": "ВЫКЛЮЧИТЬ РОБОТА",
|
||||
"Save": "Сохранить",
|
||||
"Send Message": "Отправить сообщение",
|
||||
"Sequence": "Последовательность",
|
||||
"Sequence Editor": "Редактор Последовательностей",
|
||||
"Sequence or Regimen": "Sequence or Regimen",
|
||||
"Sequences": "Последовательности",
|
||||
"Server Port": "Порт сервера",
|
||||
"Server URL": "Сервер URL",
|
||||
"Started": "Запущено",
|
||||
"Starts": "Запускается",
|
||||
"Steps per MM": "Шагов за мм",
|
||||
"TAKE PHOTO": "СДЕЛАТЬ ФОТО",
|
||||
"TEST": "ТЕСТ",
|
||||
"Take Photo": "Сделать фото",
|
||||
"Take a Photo": "Сделать фото",
|
||||
"Time": "Время",
|
||||
"Time in milliseconds": "Время в миллисекундах",
|
||||
"UP TO DATE": "UP TO DATE",
|
||||
"UPDATE": "UPDATE",
|
||||
"Until": "До",
|
||||
"Value": "Значение",
|
||||
"Variable": "Переменная",
|
||||
"WAIT": "ОЖДИНАИЕ",
|
||||
"WRITE PIN": "ЗАПИСАТЬ PIN",
|
||||
"Wait": "Ожидание",
|
||||
"Week": "Неделя",
|
||||
"Write Pin": "Записать Pin",
|
||||
"X": "X",
|
||||
"X (mm)": "X (мм)",
|
||||
"X AXIS": "Ось X",
|
||||
"Y": "Y",
|
||||
"Y (mm)": "Y (мм)",
|
||||
"Y AXIS": "Ось Y",
|
||||
"Your Name": "Ваше Имя",
|
||||
"Z": "Z",
|
||||
"Z (mm)": "Z (мм)",
|
||||
"Z AXIS": "Ось Z",
|
||||
"days old": "дней",
|
||||
"no": "нет",
|
||||
"ACCELERATE FOR (steps)": "УСКОРЕНИЕ (шаги)",
|
||||
"ALLOW NEGATIVES": "РАЗРЕШИТЬ ОТРИЦАТЕЛЬНЫЕ",
|
||||
"Add": "Добавить",
|
||||
"Agree to Terms of Service": "Я согласен с правилами и положениями",
|
||||
"Bot ready": "Робот Готов",
|
||||
"CONTROLLER": "Контроллер",
|
||||
"Camera": "Камера",
|
||||
"Choose a species": "Выберите вид",
|
||||
"Confirm Password": "Повторите пароль",
|
||||
"Could not download sync data": "Невозможно загрузить синхронизированную информацию",
|
||||
"Create An Account": "Создать Аккаунт",
|
||||
"Crop Info": "Инфо об Урожае",
|
||||
"DELETE ACCOUNT": "УДАЛИТЬ АККАУНТ",
|
||||
"DEVICE": "УСТРОЙСТВО",
|
||||
"DRAG STEP HERE": "ПЕРЕТЯНИ СЮДА",
|
||||
"EDIT": "РЕДАКТИРОВАТЬ",
|
||||
"ENABLE ENCODERS": "ВКЛЮЧИТЬ ЭНКОДЕРЫ",
|
||||
"EXECUTE SCRIPT": "ВЫПОЛНИТЬ СЦЕНАРИЙ",
|
||||
"Error establishing socket connection": "Ошибка нестабильное соеденение",
|
||||
"Execute Script": "Выполнить Скрипт",
|
||||
"Forgot Password": "Забыл пароль",
|
||||
"INVERT ENDPOINTS": "ИНВЕНТИРОВАТЬ ENDSTOPS",
|
||||
"INVERT MOTORS": "ИНВЕНТИРОВАТЬ МОТОРЫ",
|
||||
"LENGTH (m)": "Длинна (м)",
|
||||
"NETWORK": "СЕТЬ",
|
||||
"Not Connected to bot": "Нет соеденения с роботом",
|
||||
"Parameters": "Параметры",
|
||||
"Pin {{num}}": "Пин {{num}}",
|
||||
"Problem Loading Terms of Service": "Проблема загрузки правил и соглашений",
|
||||
"Repeats Every": "Повторять каждые",
|
||||
"SLOT": "СЛОТ",
|
||||
"STATUS": "СТАТУС",
|
||||
"Send Password reset": "Send Password reset",
|
||||
"Socket Connection Established": "Соеденение не стабильно",
|
||||
"Speed": "Скорость",
|
||||
"Sync Required": "Требуется синхронизация",
|
||||
"TIMEOUT AFTER (seconds)": "ТАЙМАУТ ПОСЛЕ (секунд)",
|
||||
"TOOL": "НАСАДКА",
|
||||
"TOOL NAME": "НАЗВАНИЕ НАСАДКИ",
|
||||
"TOOLBAY NAME": "ДЕРЖАТЕЛЬ НАСАДОК",
|
||||
"Tried to delete Farm Event": "Попытка удаления события",
|
||||
"Tried to delete plant": "Попытка удаления растения",
|
||||
"Tried to save Farm Event": "Попытка сохранения события",
|
||||
"Tried to save plant": "Попытка сохранения растения",
|
||||
"Tried to update Farm Event": "Попытка обновления события",
|
||||
"Unable to delete sequence": "Не удалось удалить последовательность",
|
||||
"Unable to download device credentials": "Не удалось загрузить настройки устройства",
|
||||
"Verify Password": "Повторите Пароль",
|
||||
"Version": "Версия",
|
||||
"Weed Detector": "Детектор Сорняков",
|
||||
"calling FarmBot with credentials": "запрос данных",
|
||||
"downloading device credentials": "загрузка данных устройства",
|
||||
"initiating connection": "установка соеденения",
|
||||
"never connected to device": "никогда не подключалось к устройству",
|
||||
"yes": "да",
|
||||
"Motor Coordinates (mm)":"Координаты двигателя (мм)",
|
||||
"Raw Encoder data":"Импульсы энкодера",
|
||||
"Move":"Перемещение",
|
||||
"Webcam Feeds":"Веб-камеры",
|
||||
"Feed Name":"Имя видеопотока",
|
||||
"Power and Reset":"Питание и сброс",
|
||||
"USB Camera":"USB-камера",
|
||||
"Raspberry Pi Camera":"Камера Raspberry Pi",
|
||||
"Homing and Calibration":"Поиск домашней позиции и калибровка",
|
||||
"Motors":"Двигатели",
|
||||
"Encoders and Endstops":"Энкодеры и концевые датчики",
|
||||
"Danger Zone":"Опасная зона (не нажимай, не подумав)",
|
||||
"Pin Guard":"Защита пинов (отключение по таймауту)",
|
||||
"Pin Bindings":"Назначение команд пинам",
|
||||
"Check Again":"Проверить снова",
|
||||
"Message Broker":"Центр сообщений",
|
||||
"Browser":"Браузер",
|
||||
"No recent messages.":"Нет новых сообщений",
|
||||
"Connected.":"Подключено.",
|
||||
"Disconnected.":"Отключено.",
|
||||
"Internet":"Интернет",
|
||||
"No messages seen yet.":"Пока не было ни одного сообщения",
|
||||
"Diagnosis":"Диагноз",
|
||||
"from":"от",
|
||||
"to":"к"
|
||||
}
|
||||
" regimen" : " режим",
|
||||
" sequence" : " функция",
|
||||
" unknown (offline)" : " неизвестно (не в сети)",
|
||||
"(No selection)" : "(Нет выделения)",
|
||||
"(unknown)" : "(неизвестно)",
|
||||
"Accelerate for (steps)" : "Ускоряться за (шагов)",
|
||||
"ACCELERATE FOR (steps)" : "УСКОРЕНИЕ (шаги)",
|
||||
"Account Not Verified" : "Аккаунт не верифицирован",
|
||||
"Account Settings" : "Настройки Аккаунта",
|
||||
"active" : "активн.",
|
||||
"Add" : "Добавить",
|
||||
"Add Farm Event" : "Добавить событие",
|
||||
"Add to map" : "Добавить на карту",
|
||||
"Age" : "Возраст",
|
||||
"Agree to Terms of Service" : "Я согласен с правилами и положениями",
|
||||
"ALLOW NEGATIVES" : "РАЗРЕШИТЬ ОТРИЦАТЕЛЬНЫЕ",
|
||||
"Always Power Motors" : "Питание на моторах всегда включено",
|
||||
"An error occurred during configuration." : "Произошла ошибка во время настройки.",
|
||||
"Analog" : "Аналоговый",
|
||||
"App Settings" : "Свойства приложения",
|
||||
"Are you sure you want to delete this step?" : "Вы уверены, что хотите удалить этот шаг?",
|
||||
"AUTO SYNC" : "Авто Синрх.",
|
||||
"Automatic Factory Reset" : "Авто сброс к заводским настройкам",
|
||||
"Axis Length (steps)" : "Длина оси (шагов)",
|
||||
"BACK" : "НАЗАД",
|
||||
"back" : "назад",
|
||||
"Back" : "Назад",
|
||||
"Begin" : "Начало",
|
||||
"Beta release Opt-In" : "Beta release Opt-In",
|
||||
"BIND" : "Назначить",
|
||||
"BLUR" : "РАЗМЫТИЕ",
|
||||
"BOOTING" : "ЗАГРУЗКА",
|
||||
"Bot ready" : "Робот Готов",
|
||||
"Bottom Left" : "Низ лево",
|
||||
"Bottom Right" : "Низ право",
|
||||
"Browser" : "Браузер",
|
||||
"Busy" : "Занят",
|
||||
"Calibrate" : "Калибровка",
|
||||
"CALIBRATE {{axis}}" : "КАЛИБРОВАТЬ {{axis}}",
|
||||
"CALIBRATION" : "КАЛИБРОВКА",
|
||||
"Calibration Object Separation" : "Расстояние между калибровочными объектами",
|
||||
"Calibration Object Separation along axis" : "Ось, вдоль которой расположены калибровочные объекты",
|
||||
"calling FarmBot with credentials" : "запрос данных",
|
||||
"Camera" : "Камера",
|
||||
"CAMERA" : "Камера",
|
||||
"Camera Calibration" : "Калибровка камеры",
|
||||
"Camera Offset X" : "Сдвиг камеры по X",
|
||||
"Camera Offset Y" : "Сдвиг камеры по Y",
|
||||
"Camera rotation" : "Поворот камеры",
|
||||
"Can't connect to bot" : "Неудалось подключиться к роботу",
|
||||
"Can't connect to release server" : "Не удалось подключиться к серверу",
|
||||
"Cancel" : "Отмена",
|
||||
"Change Password" : "Изменить пароль",
|
||||
"Change slot direction" : "Изменить направление слота",
|
||||
"Change the Farm Designer map size based on axis length. A value must be input in AXIS LENGTH and STOP AT MAX must be enabled in the HARDWARE widget." : "Изменить размер карты Farm Designer, основываясь на длинах осей. Значение в поле \"Длина оси\" должно быть задано и переключатель \"Останавливаться на максимуме\" должен быть включен в окне \"Аппаратная часть\".",
|
||||
"Check Again" : "Проверить снова",
|
||||
"Choose a crop" : "Выберите рассаду",
|
||||
"Choose a species" : "Выберите вид",
|
||||
"CLEAR WEEDS" : "Уборка сорняков",
|
||||
"CLICK anywhere within the grid" : "Кликните в любом месте координатной сетки",
|
||||
"Click the edit button to add or edit a feed URL." : "Нажмите кнопку \"Редактировать\", чтобы добавить или отредактировать URL видеопотока",
|
||||
"Collapse All" : "Свернуть все",
|
||||
"color" : "цвет",
|
||||
"Color Range" : "Диапазон цветов",
|
||||
"Commands" : "Команды",
|
||||
"Complete" : "Завершено",
|
||||
"computer" : "ПК",
|
||||
"Confirm New Password" : "Подтвердите новый пароль",
|
||||
"Confirm Password" : "Повторите пароль",
|
||||
"Confirm Sequence step deletion" : "Подтвердите удаление шага функции",
|
||||
"Connected." : "Подключено.",
|
||||
"Connection Attempt Period" : "Период ожидания попытки подключения",
|
||||
"Connectivity" : "Связь",
|
||||
"CONTROLLER" : "Контроллер",
|
||||
"Controls" : "Управление",
|
||||
"Copy" : "Копировать",
|
||||
"Could not delete image." : "Не удалось удалить изображение.",
|
||||
"Could not delete plant." : "Не удалось удалить растение.",
|
||||
"Could not download FarmBot OS update information." : "Не удалось скачать информацию об обновлении FarmBot OS.",
|
||||
"Could not download sync data" : "Невозможно загрузить синхронизированную информацию",
|
||||
"Create Account" : "Создать Аккаунт",
|
||||
"Create An Account" : "Создать Аккаунт",
|
||||
"Create logs for sequence:" : "Создать логи для функции:",
|
||||
"Create point" : "Создать точку",
|
||||
"Created At:" : "Создано:",
|
||||
"Crop Info" : "Инфо об Урожае",
|
||||
"Danger Zone" : "Опасная зона (не нажимай, не подумав)",
|
||||
"Data Label" : "Название",
|
||||
"Date" : "Дата",
|
||||
"Day {{day}}" : "день {{day}}",
|
||||
"Days" : "Дни",
|
||||
"days old" : "дней",
|
||||
"Debug" : "Отладка",
|
||||
"delete" : "удалить",
|
||||
"Delete" : "Удалить",
|
||||
"DELETE ACCOUNT" : "УДАЛИТЬ АККАУНТ",
|
||||
"Delete Account" : "Удалить аккаунт",
|
||||
"Delete all created points" : "Удалить все созданные точки",
|
||||
"Delete all of the points created through this panel." : "Удалить все точки, созданные через эту панель.",
|
||||
"Delete multiple" : "Удалить несколько",
|
||||
"Delete Photo" : "Удалить фото",
|
||||
"Delete selected" : "Удалить выделенное",
|
||||
"Delete this plant" : "Удалить это растение",
|
||||
"Deleted farm event." : "Удаленное событие.",
|
||||
"Deselect all" : "Снять выделение",
|
||||
"Designer" : "Дизайнер",
|
||||
"DEVICE" : "Робот",
|
||||
"Device" : "Робот",
|
||||
"Diagnosis" : "Диагноз",
|
||||
"Digital" : "Цифровой",
|
||||
"DISCONNECTED" : "ОТКЛЮЧЕНО",
|
||||
"Disconnected." : "Отключено.",
|
||||
"Display Encoder Data" : "Отображать данные с энкодеров",
|
||||
"Display plant animations" : "Отображать анимацию растений",
|
||||
"Documentation" : "Документация",
|
||||
"Done" : "Готово",
|
||||
"Double default map dimensions" : "Удвоить значения карты по-умолчанию",
|
||||
"Double the default dimensions of the Farm Designer map for a map with four times the area." : "Double the default dimensions of the Farm Designer map for a map with four times the area.",
|
||||
"downloading device credentials" : "загрузка данных устройства",
|
||||
"Drag and drop" : "Перетащите",
|
||||
"Drag and drop into map" : "Перетащи на карту",
|
||||
"DRAG COMMAND HERE" : "ПЕРЕТАЩИТЕ КОМАНДУ СЮДА",
|
||||
"DRAG STEP HERE" : "ПЕРЕТЯНИ СЮДА",
|
||||
"Dynamic map size" : "Динамический размер карты",
|
||||
"E-Stop on Movement Error" : "Активировать E-Stop ошибках в движении",
|
||||
"EDIT" : "РЕДАКТИРОВАТЬ",
|
||||
"Edit" : "Редактировать",
|
||||
"Edit Farm Event" : "Редактировать событие",
|
||||
"Edit on" : "Редактирование включено",
|
||||
"ELSE..." : "ИНАЧЕ...",
|
||||
"Email" : "Email",
|
||||
"Email has been sent." : "Email отправлен.",
|
||||
"Email sent." : "Email отправлен.",
|
||||
"Enable 2nd X Motor" : "Активировать второй мотор по оси X",
|
||||
"Enable Encoders" : "Включить энкодеры",
|
||||
"ENABLE ENCODERS" : "ВКЛЮЧИТЬ ЭНКОДЕРЫ",
|
||||
"Enable Endstops" : "Включить концевые датчики",
|
||||
"Enable plant animations in the Farm Designer." : "Включить анимацию растений в Farm Designer.",
|
||||
"Encoder Missed Step Decay" : "\"Забывание\" пропущенных шагов энкодера",
|
||||
"Encoder Scaling" : "Масштабный коэффициент энкодера",
|
||||
"ENCODER TYPE" : "ТИП ЭНКОДЕРА",
|
||||
"Encoders and Endstops" : "Энкодеры и концевые датчики",
|
||||
"Enter a URL" : "Введите URL",
|
||||
"Enter Email" : "Введите Email",
|
||||
"Enter Password" : "Введите пароль",
|
||||
"Error" : "Ошибка",
|
||||
"Error establishing socket connection" : "Ошибка нестабильное соеденение",
|
||||
"Error saving device settings." : "Ошибка при сохранении настроек робота.",
|
||||
"Error taking photo" : "Ошибка при фотографировании",
|
||||
"Every" : "Каждый",
|
||||
"EXECUTE SCRIPT" : "ВЫПОЛНИТЬ СЦЕНАРИЙ",
|
||||
"Execute Script" : "Выполнить Скрипт",
|
||||
"EXECUTE SEQUENCE" : "ВЫПОЛНИТЬ ФУНКЦИЮ",
|
||||
"Execute Sequence" : "Выполнить функцию",
|
||||
"Expand All" : "Развернуть все",
|
||||
"FACTORY RESET" : "СБРОС НА ЗАВОДСКИЕ НАСТРОЙКИ",
|
||||
"Factory Reset" : "Сброс устройства",
|
||||
"Farm Designer" : "Дизайнер фермы",
|
||||
"Farm Events" : "События",
|
||||
"FarmBot forum." : "форум FarmBot.",
|
||||
"FarmBot is at position " : "FarmBot на позиции ",
|
||||
"FarmBot is not connected." : "FarmBot не подключен.",
|
||||
"FARMBOT OS" : "FARMBOT OS",
|
||||
"FARMBOT OS AUTO UPDATE" : "АВТООБНОВЛЕНИЕ FARMBOT OS",
|
||||
"FarmBot Web App" : "FarmBot Web-приложение",
|
||||
"FarmBot?" : "FarmBot?",
|
||||
"Feed Name" : "Имя видеопотока",
|
||||
"Filter logs" : "Фильтровать логи",
|
||||
"Filters active" : "Фильтровать активные",
|
||||
"Find " : "Поиск ",
|
||||
"Find Home" : "Поиск домашней позиции",
|
||||
"Find Home on Boot" : "Поиск домашней позиции при включении",
|
||||
"FIRMWARE" : "ПРОШИВКА",
|
||||
"Firmware Logs:" : "Внутренние логи:",
|
||||
"First-party Farmware" : "Первичная прошивка",
|
||||
"Forgot Password" : "Забыл пароль",
|
||||
"Forgot password?" : "Забыли пароль?",
|
||||
"from" : "от",
|
||||
"Full Name" : "Полное имя",
|
||||
"GO" : "СТАРТ",
|
||||
"Hardware" : "Аппаратная часть",
|
||||
"Hardware setting conflict" : "Ошибка в настройках аппаратной части",
|
||||
"Have the browser also read aloud log messages on the " : "Have the browser also read aloud log messages on the ",
|
||||
"Hide Webcam widget" : "Спрятать окно веб-камеры",
|
||||
"HOME {{axis}}" : "В начало {{axis}}",
|
||||
"HOMING" : "Поиск домашней позиции",
|
||||
"Homing and Calibration" : "Поиск домашней позиции и калибровка",
|
||||
"Hotkeys" : "Горячие клавишы",
|
||||
"HUE" : "Оттенок",
|
||||
"I Agree to the Terms of Service" : "Я согласен с правилами и положениями",
|
||||
"I agree to the terms of use" : "Я согласен с правилами использования",
|
||||
"If not using a webcam, use this setting to remove the widget from the Controls page." : "Если Вы не используете веб-камеру, включите этот переключатель, чтобы спрятать соответствующее окно со страницы \"Управление\".",
|
||||
"If Statement" : "Оператор \"ЕСЛИ\"",
|
||||
"IF STATEMENT" : "ОПЕРАТОР \"ЕСЛИ\"",
|
||||
"IF..." : "ЕСЛИ...",
|
||||
"image" : "картинка",
|
||||
"Image Deleted." : "Картинка удалена.",
|
||||
"Image loading (try refreshing)" : "Загрузка изображение (попробуйте обновить страницу)",
|
||||
"Import coordinates from" : "Импортировать координаты из",
|
||||
"inactive" : "неактивн.",
|
||||
"Info" : "Инфо",
|
||||
"initiating connection" : "установка соеденения",
|
||||
"Install" : "Установка",
|
||||
"Internationalize Web App" : "Internationalize Web App",
|
||||
"Internet" : "Интернет",
|
||||
"Invert 2nd X Motor" : "Инвертировать направление второго мотора оси X",
|
||||
"Invert Encoders" : "Инвертировать энкодеры",
|
||||
"INVERT ENDPOINTS" : "ИНВЕНТИРОВАТЬ ENDSTOPS",
|
||||
"Invert Endstops" : "Инвертировать концевые датчики",
|
||||
"Invert Hue Range Selection" : "Инверсия выбора диапазона оттенков",
|
||||
"Invert Jog Buttons" : "Инвертировать кнопки перемещения",
|
||||
"Invert Motors" : "Инвертировать моторы",
|
||||
"INVERT MOTORS" : "ИНВЕНТИРОВАТЬ МОТОРЫ",
|
||||
"is" : "равно",
|
||||
"is equal to" : "равно",
|
||||
"is greater than" : "больше чем",
|
||||
"is less than" : "меньше чем",
|
||||
"is not" : "не равно",
|
||||
"is not equal to" : "не равно",
|
||||
"is unknown" : "неизвестно",
|
||||
"ITERATION" : "Итерация",
|
||||
"LAST SEEN" : "Замечен в последний раз",
|
||||
"LENGTH (m)" : "Длинна (м)",
|
||||
"Lighting" : "Освещение",
|
||||
"Loading" : "Загрузка",
|
||||
"Loading..." : "Загрузка...",
|
||||
"Location" : "Координаты",
|
||||
"Login" : "Войти",
|
||||
"Login failed." : "Ошибка входа.",
|
||||
"Logout" : "Выход",
|
||||
"Logs" : "Логи",
|
||||
"MAINTENANCE DOWNTIME" : "ТЕХ. ОБСЛУЖИВАНИЕ",
|
||||
"Manual input" : "Ручной ввод",
|
||||
"max" : "максимум",
|
||||
"Max Missed Steps" : "Максимально разрешенное число пропущенных шагов",
|
||||
"Max Retries" : "Максимально число попыток",
|
||||
"Max Speed (steps/s)" : "Макс. скорость (шагов/мм)",
|
||||
"Menu" : "Меню",
|
||||
"Message" : "Сообщение",
|
||||
"Message Broker" : "Центр сообщений",
|
||||
"Minimum Speed (steps/s)" : "Мин. скорость (шагов/мм)",
|
||||
"mm" : "мм",
|
||||
"MORPH" : "MORPH",
|
||||
"Motor Coordinates (mm)" : "Координаты двигателя (мм)",
|
||||
"Motors" : "Двигатели",
|
||||
"Move" : "Перемещение",
|
||||
"Move Absolute" : "Абсолютное Перемещение",
|
||||
"MOVE ABSOLUTE" : "АБСОЛЮТНОЕ ПЕРЕМЕЩЕНИЕ",
|
||||
"MOVE AMOUNT (mm)" : "Переместить на (мм)",
|
||||
"move mode" : "режим движения",
|
||||
"Move Relative" : "Относительное Перемещение",
|
||||
"MOVE RELATIVE" : "ОТНОСИТЕЛЬНОЕ ПЕРЕМЕЩЕНИЕ",
|
||||
"Move to location" : "Двигаться к точке",
|
||||
"Move to this coordinate" : "Двигаться к данной координате",
|
||||
"Must be a positive number. Rounding up to 0." : "Число должно быть положительным. Округляю до 0.",
|
||||
"NAME" : "ИМЯ",
|
||||
"Negative Coordinates Only" : "Только отрицательные координаты",
|
||||
"Negative X" : "X в минус",
|
||||
"Negative Y" : "Y в минус",
|
||||
"NETWORK" : "СЕТЬ",
|
||||
"never connected to device" : "никогда не подключалось к устройству",
|
||||
"New Password" : "Новый пароль",
|
||||
"New Peripheral" : "Новая периферия",
|
||||
"New regimen " : "Новый режим ",
|
||||
"new sequence " : "новая функция ",
|
||||
"Newer than" : "Новее, чем",
|
||||
"Next" : "Следующий",
|
||||
"no" : "нет",
|
||||
"No beta releases available" : "Нет новых Beta-версий",
|
||||
"No day(s) selected." : "Дни не выбраны.",
|
||||
"No Executables" : "Нет исполняемых файлов",
|
||||
"No logs to display. Visit Logs page to view filters." : "Нет логов важных. Для детального просмотра, перейдите на вкладку \"Логи\"",
|
||||
"No logs yet." : "Пока нет логов.",
|
||||
"No messages seen yet." : "Пока не было ни одного сообщения",
|
||||
"No recent messages." : "Нет новых сообщений",
|
||||
"No results." : "Не найдено.",
|
||||
"No webcams yet. Click the edit button to add a feed URL." : "Веб-камеры не добавлены. Нажмите кнопку \"Редактировать\", чтобы добавить URL видеопотока.",
|
||||
"None" : "Нет",
|
||||
"normal" : "нормально",
|
||||
"Not Connected to bot" : "Нет соеденения с роботом",
|
||||
"Not Set" : "Не задано",
|
||||
"OFF" : "Выкл.",
|
||||
"Old Password" : "Текущий пароль",
|
||||
"Older than" : "Старше чем",
|
||||
"ON" : "Вкл.",
|
||||
"Operator" : "Оператор",
|
||||
"Origin" : "Начальная точка",
|
||||
"Origin Location in Image" : "Начальная точка на изображении",
|
||||
"Outside of planting area. Plants must be placed within the grid." : "За границей зоны посадки. Растения должны быть расположены внутри зоны посадки.",
|
||||
"Package Name" : "Имя пакета",
|
||||
"Page Not Found." : "Страница не найдена.",
|
||||
"Parameters" : "Параметры",
|
||||
"Password" : "Пароль",
|
||||
"Password change failed." : "Смена пароля не удалась.",
|
||||
"Peripheral " : "Периферия ",
|
||||
"Peripherals" : "Периферия",
|
||||
"Photos" : "Фотографии",
|
||||
"Photos?" : "Фотографии?",
|
||||
"Pin" : "Пин",
|
||||
"Pin " : "Пин ",
|
||||
"Pin #" : "Пин №",
|
||||
"Pin Bindings" : "Назначение команд пинам",
|
||||
"Pin Guard" : "Защита пинов (отключение по таймауту)",
|
||||
"Pin Guard " : "Защита пина ",
|
||||
"Pin Mode" : "Режим пина",
|
||||
"Pin Number" : "Номер пина",
|
||||
"Pin numbers are required and must be positive and unique." : "Номера пинов должны быть заданы и должны быть положительными и уникальными.",
|
||||
"Pin numbers must be less than 1000." : "Номера пинов должны быть меньше 1000.",
|
||||
"Pin {{num}}" : "Пин {{num}}",
|
||||
"Pins" : "Пины",
|
||||
"Pixel coordinate scale" : "Размерность пикселей",
|
||||
"plant icon" : "иконка растения",
|
||||
"Plant Info" : "Инфо о растении",
|
||||
"Plant Type" : "Тип растения",
|
||||
"Plants" : "Растения",
|
||||
"Plants?" : "Растения?",
|
||||
"Please check your email for the verification link." : "Пожалуйста проверьте почту и активируйте ссылку для верификации.",
|
||||
"Please check your email to confirm email address changes" : "Пожалуйста проверьте почту для подтверждения смены адреса",
|
||||
"Points?" : "Точки?",
|
||||
"Position (x, y, z)" : "Позиция (x, y, z)",
|
||||
"Positive X" : "X в плюс",
|
||||
"Positive Y" : "Y в плюс",
|
||||
"Power and Reset" : "Питание и сброс",
|
||||
"Presets:" : "Предустановки:",
|
||||
"Prev" : "пред.",
|
||||
"Privacy Policy" : "Политика конфиденциальности",
|
||||
"Problem Loading Terms of Service" : "Проблема загрузки правил и соглашений",
|
||||
"Processing now. Results usually available in one minute." : "Обрабатываю. Результат обычно доступен в течение одной минуты.",
|
||||
"Processing Parameters" : "Обрабатываю параметры",
|
||||
"radius" : "радиус",
|
||||
"Raspberry Pi Camera" : "Камера Raspberry Pi",
|
||||
"Raw Encoder data" : "Импульсы энкодера",
|
||||
"Raw encoder position" : "Положение энкодера (в импульсах) ",
|
||||
"Read Pin" : "Считать пин",
|
||||
"READ PIN" : "СЧИТАТЬ ПИН",
|
||||
"Read speak logs in browser" : "Read speak logs in browser",
|
||||
"Received" : "Получено",
|
||||
"Recursive condition." : "Рекурсивное условие.",
|
||||
"Regimen" : "Режим",
|
||||
"Regimen Editor" : "Редактор режимов",
|
||||
"Regimen Name" : "Название режима",
|
||||
"Regimens" : "Режимы",
|
||||
"Reinstall" : "Переустановить",
|
||||
"Release Notes" : "Примечания к релизу",
|
||||
"Remove" : "Удалить",
|
||||
"Repeats Every" : "Повторять каждые",
|
||||
"Repeats?" : "Повторения?",
|
||||
"Request sent" : "Запрос отправлен",
|
||||
"Resend Verification Email" : "Повторная отправка письма для верификации",
|
||||
"Reset" : "Сброс",
|
||||
"RESET" : "СБРОС",
|
||||
"Reset hardware parameter defaults" : "Сброс настроек аппаратной части",
|
||||
"Reset Password" : "Сброс Пароля",
|
||||
"Reset your password" : "Сбросить ваш пароль",
|
||||
"RESTART" : "ПЕРЕЗАГРУЗКА",
|
||||
"RESTART FARMBOT" : "ПЕРЕЗАГРУЗИТЬ РОБОТА",
|
||||
"Run" : "Запуск",
|
||||
"Run Farmware" : "Запуск Farmware",
|
||||
"SATURATION" : "Насыщенность",
|
||||
"SAVE" : "СОХРАНИТЬ",
|
||||
"Save" : "Сохранить",
|
||||
"Save " : "Сохранить ",
|
||||
"Save sequence and sync device before running." : "Сохраните функцию и сделайте синхронизацию перед запуском.",
|
||||
"Saved " : "Сохранено ",
|
||||
"Saving" : "Сохраняю",
|
||||
"Scaled encoder position" : "Положение энкодера (в миллиметрах)",
|
||||
"Scan image" : "Сканировать изображение",
|
||||
"Scheduler" : "Планировщик",
|
||||
"Search OpenFarm..." : "Искать на OpenFarm...",
|
||||
"Search Regimens..." : "Искать в Режимах...",
|
||||
"Search Sequences..." : "Искать в функциях...",
|
||||
"Search your plants..." : "Искать в ваших растениях...",
|
||||
"Seed Bin" : "Семенной бункер",
|
||||
"Seed Tray" : "Семенной лоток",
|
||||
"Seeder" : "Сажалка",
|
||||
"Select a regimen first or create one." : "Сначала выберите или создайте режим.",
|
||||
"Select a sequence first" : "Сначала выберите функцию",
|
||||
"Select a sequence from the dropdown first." : "Выберите функцию из выпадающего списка.",
|
||||
"Select all" : "Выбрать все",
|
||||
"Select none" : "Отменить выбор",
|
||||
"Select plants" : "Выбрать растения",
|
||||
"Send Message" : "Отправить сообщение",
|
||||
"SEND MESSAGE" : "ОТПРАВИТЬ СООБЩЕНИЕ",
|
||||
"Send Password reset" : "Send Password reset",
|
||||
"Sending camera configuration..." : "Отправляю конфигурацию камеры...",
|
||||
"Sending firmware configuration..." : "Отправляю аппаратую конфигурацию...",
|
||||
"Sensors" : "Датчики",
|
||||
"Sent" : "Отправлено",
|
||||
"Sequence" : "Функция",
|
||||
"Sequence Editor" : "Редактор функций",
|
||||
"Sequence or Regimen" : "Функция или режим",
|
||||
"Sequences" : "Функции",
|
||||
"Server Port" : "Порт сервера",
|
||||
"Server URL" : "Сервер URL",
|
||||
"SET ZERO POSITION" : "УСТ. НУЛЕВОЙ ПОЗИЦИИ",
|
||||
"Setup, customize, and control FarmBot from your" : "Запустите, настройте, и контролируйте FarmBot с вашего",
|
||||
"Show a confirmation dialog when the sequence delete step icon is pressed." : "Показывать диалог подтверждения при нажатии на иконку удаления шага функции.",
|
||||
"Show in list" : "Показывать в списке",
|
||||
"SHUTDOWN" : "ВЫКЛЮЧИТЬ",
|
||||
"SHUTDOWN FARMBOT" : "ВЫКЛЮЧИТЬ РОБОТА",
|
||||
"SLOT" : "СЛОТ",
|
||||
"Slot" : "Слот",
|
||||
"smartphone" : "смартфона",
|
||||
"Socket Connection Established" : "Соеденение не стабильно",
|
||||
"Soil Sensor" : "Датчик влажности почвы",
|
||||
"Something went wrong while rendering this page." : "При обработке данной страницы что-то пошло не так.",
|
||||
"Speak" : "Речевое уведомление",
|
||||
"Speed" : "Скорость",
|
||||
"Speed (%)" : "Скорость (%)",
|
||||
"Spread?" : "Размах?",
|
||||
"Started" : "Запущено",
|
||||
"Starts" : "Запускается",
|
||||
"Status" : "Статус",
|
||||
"STATUS" : "СТАТУС",
|
||||
"Steps" : "Шаги",
|
||||
"Steps per MM" : "Шагов за мм",
|
||||
"Stock Tools" : "Стандартные насадки",
|
||||
"Stop at Home" : "Остановка на домашней позиции",
|
||||
"Stop at Max" : "Остановка на максимуме",
|
||||
"Success" : "Успех",
|
||||
"Successfully configured camera!" : "Камера успешно сконфигурирована!",
|
||||
"SYNC ERROR" : "ОШИБКА СИНХР.",
|
||||
"SYNC NOW" : "СИНХРОНИЗИРОВАТЬ",
|
||||
"Sync Required" : "Требуется синхронизация",
|
||||
"SYNCED" : "СИНХРОНИЗИРОВАНО",
|
||||
"SYNCING" : "СИНХРОНИЗИРУЮ",
|
||||
"tablet" : "планшета",
|
||||
"Take a Photo" : "Сделать фото",
|
||||
"TAKE PHOTO" : "СДЕЛАТЬ ФОТО",
|
||||
"Take Photo" : "Сделать фото",
|
||||
"Terms of Service" : "Условия обслуживания",
|
||||
"Terms of Use" : "Условия использования",
|
||||
"TEST" : "ТЕСТ",
|
||||
"Test" : "Тест",
|
||||
"THEN..." : "ТО...",
|
||||
"Ticker Notification" : "Бегущая строка",
|
||||
"Time" : "Время",
|
||||
"Time in milliseconds" : "Время в миллисекундах",
|
||||
"TIME ZONE" : "ВРЕМЕННАЯ ЗОНА",
|
||||
"Timeout (sec)" : "Таймаут (сек)",
|
||||
"Timeout after (seconds)" : "Таймаут после (секунд)",
|
||||
"TIMEOUT AFTER (seconds)" : "ТАЙМАУТ ПОСЛЕ (секунд)",
|
||||
"to" : "к",
|
||||
"to add the plant to the map. You can add the plant as many times as you need to before pressing DONE to finish." : "чтобы добавить растение на карту. Вы можете добавить сколько угодно растений, после чего нажмите \"Готово\", чтобы закончить.",
|
||||
"To State" : "Конечное состояние",
|
||||
"Toast Pop Up" : "Всплывающее сообщение",
|
||||
"Tool" : "Насадка",
|
||||
"TOOL" : "НАСАДКА",
|
||||
"Tool " : "Насадка ",
|
||||
"TOOL NAME" : "НАЗВАНИЕ НАСАДКИ",
|
||||
"Tool Name" : "Название насадки",
|
||||
"Tool Slots" : "Слоты насадок",
|
||||
"ToolBay " : "База насадок ",
|
||||
"TOOLBAY NAME" : "ДЕРЖАТЕЛЬ НАСАДОК",
|
||||
"Tools" : "Насадки",
|
||||
"Top Left" : "Верх лево",
|
||||
"Top Right" : "Верх право",
|
||||
"Tried to delete Farm Event" : "Попытка удаления события",
|
||||
"Tried to delete plant" : "Попытка удаления растения",
|
||||
"Tried to save Farm Event" : "Попытка сохранения события",
|
||||
"Tried to save plant" : "Попытка сохранения растения",
|
||||
"Tried to update Farm Event" : "Попытка обновления события",
|
||||
"Turn off to set Web App to English." : "Выключите для перехода на Английский язык.",
|
||||
"Type" : "Тип",
|
||||
"Unable to delete sequence" : "Не удалось удалить функцию",
|
||||
"Unable to download device credentials" : "Не удалось загрузить настройки устройства",
|
||||
"Unable to load webcam feed." : "Не удалось получить видеопоток с веб-камеры.",
|
||||
"Unable to save farm event." : "Не удалось сохранить событие.",
|
||||
"Unable to send email." : "Не удалось отправить email.",
|
||||
"Unexpected error occurred, we've been notified of the problem." : "Произошла непредвиденная ошибка. Разработчики были уведомлены",
|
||||
"Until" : "До",
|
||||
"UP TO DATE" : "UP TO DATE",
|
||||
"Update" : "Обновление",
|
||||
"UPDATE" : "UPDATE",
|
||||
"USB Camera" : "USB-камера",
|
||||
"Use current location" : "Использовать текущее положение",
|
||||
"Use Encoders for Positioning" : "Использовать энкодеры для позиционирования",
|
||||
"Vacuum" : "Вакуум",
|
||||
"VALUE" : "ЗНАЧЕНИЕ",
|
||||
"Value" : "Значение",
|
||||
"Variable" : "Переменная",
|
||||
"Verification email resent. Please check your email!" : "Письмо для верификации было отправлено повторно. Пожалуйста проверьте свою почту!",
|
||||
"Verify Password" : "Повторите Пароль",
|
||||
"Version" : "Версия",
|
||||
"VERSION" : "ВЕРСИЯ",
|
||||
"Version {{ version }}" : "Версия {{ version }}",
|
||||
"View" : "Вид",
|
||||
"WAIT" : "ОЖИДАНИЕ",
|
||||
"Wait" : "Ожидание",
|
||||
"Warning" : "Предупреждение",
|
||||
"Water" : "Подача воды",
|
||||
"Watering Nozzle" : "Поливочная насадка",
|
||||
"Webcam Feeds" : "Веб-камеры",
|
||||
"Weed Detector" : "Детектор Сорняков",
|
||||
"Weeder" : "Насадка для прополки",
|
||||
"Week" : "Неделя",
|
||||
"Welcome to the" : "Добро пожаловать в",
|
||||
"Widget load failed." : "Не удалось загрузить окно.",
|
||||
"Will reboot device." : "Устройство будет перезапущено.",
|
||||
"Write Pin" : "Записать пин",
|
||||
"WRITE PIN" : "ЗАПИСАТЬ ПИН",
|
||||
"X" : "X",
|
||||
"X (mm)" : "X (мм)",
|
||||
"X Axis" : "Ось X",
|
||||
"X AXIS" : "Ось X",
|
||||
"X position" : "Позиция X",
|
||||
"X-Offset" : "Сдвиг X",
|
||||
"Y" : "Y",
|
||||
"Y (mm)" : "Y (мм)",
|
||||
"Y AXIS" : "Ось Y",
|
||||
"Y Axis" : "Ось Y",
|
||||
"Y position" : "Позиция Y",
|
||||
"Y-Offset" : "Сдвиг Y",
|
||||
"yes" : "да",
|
||||
"You are running an old version of FarmBot OS." : "У Вас используется устаревшая версия FarmBot OS.",
|
||||
"You have been logged out." : "Был совершен выход из аккаунта.",
|
||||
"You haven't made any regimens or sequences yet. Please create a" : "Не создан не один режим или функция. Пожалуйста создайте",
|
||||
"You haven't yet taken any photos with your FarmBot. Once you do, they will show up here." : "Робот FarmBot еще не сделал ни одно фото. Когда фото будут сделаны, они отобразятся сдесь.",
|
||||
"You may click the button below to resend the email." : "Можно кликнуть на кнопку ниже, чтобы переотправить письмо.",
|
||||
"Your Name" : "Ваше Имя",
|
||||
"Your password is changed." : "Ваш пароль изменен.",
|
||||
"Z" : "Z",
|
||||
"Z (mm)" : "Z (мм)",
|
||||
"Z AXIS" : "Ось Z",
|
||||
"Z Axis" : "Ось Z",
|
||||
"Z position" : "Позиция Z",
|
||||
"Z-Offset" : "Сдвиг Z",
|
||||
"zero {{axis}}" : "обнулить {{axis}}"
|
||||
}
|
|
@ -50,7 +50,7 @@ export class Move extends React.Component<MoveProps, {}> {
|
|||
|
||||
return <Widget>
|
||||
<WidgetHeader
|
||||
title=t("Move")
|
||||
title={t("Move")}
|
||||
helpText={ToolTips.MOVE}>
|
||||
<Popover position={Position.BOTTOM_RIGHT}>
|
||||
<i className="fa fa-gear" />
|
||||
|
|
|
@ -68,7 +68,7 @@ export class Peripherals extends React.Component<PeripheralsProps, PeripheralSta
|
|||
}
|
||||
|
||||
emptyPeripheral = (): TaggedPeripheral => {
|
||||
return this.taggedPeripheral(0, "New Peripheral");
|
||||
return this.taggedPeripheral(0, t("New Peripheral"));
|
||||
}
|
||||
|
||||
farmduinoPeripherals = (dispatch: Function) => {
|
||||
|
@ -76,11 +76,11 @@ export class Peripherals extends React.Component<PeripheralsProps, PeripheralSta
|
|||
dispatch(init(this.taggedPeripheral(pin, label)));
|
||||
};
|
||||
|
||||
newPeripheral(7, "Lighting");
|
||||
newPeripheral(8, "Water");
|
||||
newPeripheral(9, "Vacuum");
|
||||
newPeripheral(10, "Peripheral 4");
|
||||
newPeripheral(12, "Peripheral 5");
|
||||
newPeripheral(7, t("Lighting"));
|
||||
newPeripheral(8, t("Water"));
|
||||
newPeripheral(9, t("Vacuum"));
|
||||
newPeripheral(10, t("Peripheral ") + "4");
|
||||
newPeripheral(12, t("Peripheral ") + "5");
|
||||
}
|
||||
|
||||
render() {
|
||||
|
@ -90,7 +90,7 @@ export class Peripherals extends React.Component<PeripheralsProps, PeripheralSta
|
|||
const status = getArrayStatus(peripherals);
|
||||
|
||||
return <Widget className="peripherals-widget">
|
||||
<WidgetHeader title={"Peripherals"} helpText={ToolTips.PERIPHERALS}>
|
||||
<WidgetHeader title={t("Peripherals")} helpText={ToolTips.PERIPHERALS}>
|
||||
<button
|
||||
className="fb-button gray"
|
||||
onClick={this.toggle}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as React from "react";
|
||||
import { t } from "i18next";
|
||||
import { destroy, edit } from "../../api/crud";
|
||||
import { PeripheralFormProps } from "./interfaces";
|
||||
import { sortResourcesById } from "../../util";
|
||||
|
@ -19,7 +20,7 @@ export function PeripheralForm(props: PeripheralFormProps) {
|
|||
}}
|
||||
labelPlaceholder="Name"
|
||||
value={(p.body.pin || "").toString()}
|
||||
valuePlaceholder="Pin #"
|
||||
valuePlaceholder={t("Pin #")}
|
||||
onValueChange={(e) => {
|
||||
const { value } = e.currentTarget;
|
||||
const update: Partial<typeof p.body> = { pin: parseInt(value, 10) };
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as React from "react";
|
||||
import { t } from "i18next";
|
||||
import { MCUFactoryReset, bulkToggleControlPanel } from "../actions";
|
||||
import { Widget, WidgetHeader, WidgetBody, SaveBtn } from "../../ui/index";
|
||||
import { HardwareSettingsProps } from "../interfaces";
|
||||
|
@ -21,7 +22,7 @@ export class HardwareSettings extends
|
|||
const { bot, dispatch, sourceFbosConfig } = this.props;
|
||||
const { sync_status } = this.props.bot.hardware.informational_settings;
|
||||
return <Widget className="hardware-widget">
|
||||
<WidgetHeader title="Hardware" helpText={ToolTips.HW_SETTINGS}>
|
||||
<WidgetHeader title={t("Hardware")} helpText={ToolTips.HW_SETTINGS}>
|
||||
<MustBeOnline
|
||||
hideBanner={true}
|
||||
syncStatus={sync_status}
|
||||
|
@ -39,12 +40,12 @@ export class HardwareSettings extends
|
|||
<button
|
||||
className={"fb-button gray no-float"}
|
||||
onClick={() => dispatch(bulkToggleControlPanel(true))}>
|
||||
Expand All
|
||||
{t("Expand All")}
|
||||
</button>
|
||||
<button
|
||||
className={"fb-button gray no-float"}
|
||||
onClick={() => dispatch(bulkToggleControlPanel(false))}>
|
||||
Collapse All
|
||||
{t("Collapse All")}
|
||||
</button>
|
||||
<MustBeOnline
|
||||
networkState={this.props.botToMqttStatus}
|
||||
|
|
|
@ -39,35 +39,35 @@ export function PinGuard(props: PinGuardProps) {
|
|||
</Col>
|
||||
</Row>
|
||||
<PinGuardMCUInputGroup
|
||||
name={t("Pin Guard 1")}
|
||||
name={t("Pin Guard ")+"1"}
|
||||
pinNumber={"pin_guard_1_pin_nr"}
|
||||
timeout={"pin_guard_1_time_out"}
|
||||
activeState={"pin_guard_1_active_state"}
|
||||
dispatch={dispatch}
|
||||
bot={bot} />
|
||||
<PinGuardMCUInputGroup
|
||||
name={t("Pin Guard 2")}
|
||||
name={t("Pin Guard ")+"2"}
|
||||
pinNumber={"pin_guard_2_pin_nr"}
|
||||
timeout={"pin_guard_2_time_out"}
|
||||
activeState={"pin_guard_2_active_state"}
|
||||
dispatch={dispatch}
|
||||
bot={bot} />
|
||||
<PinGuardMCUInputGroup
|
||||
name={t("Pin Guard 3")}
|
||||
name={t("Pin Guard ")+"3"}
|
||||
pinNumber={"pin_guard_3_pin_nr"}
|
||||
timeout={"pin_guard_3_time_out"}
|
||||
activeState={"pin_guard_3_active_state"}
|
||||
dispatch={dispatch}
|
||||
bot={bot} />
|
||||
<PinGuardMCUInputGroup
|
||||
name={t("Pin Guard 4")}
|
||||
name={t("Pin Guard ")+"4"}
|
||||
pinNumber={"pin_guard_4_pin_nr"}
|
||||
timeout={"pin_guard_4_time_out"}
|
||||
activeState={"pin_guard_4_active_state"}
|
||||
dispatch={dispatch}
|
||||
bot={bot} />
|
||||
<PinGuardMCUInputGroup
|
||||
name={t("Pin Guard 5")}
|
||||
name={t("Pin Guard ")+"5"}
|
||||
pinNumber={"pin_guard_5_pin_nr"}
|
||||
timeout={"pin_guard_5_time_out"}
|
||||
activeState={"pin_guard_5_active_state"}
|
||||
|
|
|
@ -18,7 +18,7 @@ export class CameraCalibration extends
|
|||
const classname = "weed-detector-widget";
|
||||
return <Widget className={classname}>
|
||||
<TitleBar
|
||||
title={"Camera Calibration"}
|
||||
title={t("Camera Calibration")}
|
||||
help={t(ToolTips.CAMERA_CALIBRATION)}
|
||||
docs={"farmware#section-weed-detector"}
|
||||
onCalibrate={this.props.dispatch(calibrate)}
|
||||
|
|
|
@ -34,8 +34,7 @@ export class ImageFlipper extends
|
|||
</div>;
|
||||
} else {
|
||||
return <div className="no-flipper-image-container">
|
||||
<p>{t(`You haven't yet taken any photos with your FarmBot.
|
||||
Once you do, they will show up here.`)}</p>
|
||||
<p>{t("You haven't yet taken any photos with your FarmBot. Once you do, they will show up here.")}</p>
|
||||
<img
|
||||
className="image-flipper-image"
|
||||
src={PLACEHOLDER_FARMBOT} />
|
||||
|
|
|
@ -71,7 +71,7 @@ export class Photos extends React.Component<PhotosProps, {}> {
|
|||
.format("MMMM Do, YYYY h:mma")
|
||||
: "";
|
||||
return <Widget className="photos-widget">
|
||||
<WidgetHeader helpText={ToolTips.PHOTOS} title={"Photos"}>
|
||||
<WidgetHeader helpText={ToolTips.PHOTOS} title={t("Photos")}>
|
||||
<button
|
||||
className="fb-button gray"
|
||||
onClick={this.takePhoto}>
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import { t } from "i18next";
|
||||
import { DropDownItem } from "../../ui/index";
|
||||
import { SPECIAL_VALUES } from "./remote_env/constants";
|
||||
|
||||
|
@ -12,19 +13,19 @@ export const SPECIAL_VALUE_DDI: { [index: number]: DropDownItem } = {
|
|||
value: SPECIAL_VALUES.Y
|
||||
},
|
||||
[SPECIAL_VALUES.TOP_LEFT]: {
|
||||
label: "Top Left",
|
||||
label: t("Top Left"),
|
||||
value: SPECIAL_VALUES.TOP_LEFT
|
||||
},
|
||||
[SPECIAL_VALUES.TOP_RIGHT]: {
|
||||
label: "Top Right",
|
||||
label: t("Top Right"),
|
||||
value: SPECIAL_VALUES.TOP_RIGHT
|
||||
},
|
||||
[SPECIAL_VALUES.BOTTOM_LEFT]: {
|
||||
label: "Bottom Left",
|
||||
label: t("Bottom Left"),
|
||||
value: SPECIAL_VALUES.BOTTOM_LEFT
|
||||
},
|
||||
[SPECIAL_VALUES.BOTTOM_RIGHT]: {
|
||||
label: "Bottom Right",
|
||||
label: t("Bottom Right"),
|
||||
value: SPECIAL_VALUES.BOTTOM_RIGHT
|
||||
},
|
||||
};
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as React from "react";
|
||||
import { t } from "i18next";
|
||||
import { Link } from "react-router";
|
||||
import { NavLinksProps } from "./interfaces";
|
||||
import { getPathArray } from "../history";
|
||||
|
@ -26,7 +27,7 @@ export const NavLinks = (props: NavLinksProps) => {
|
|||
key={link.slug}
|
||||
onClick={props.close("mobileMenuOpen")}>
|
||||
<i className={`fa fa-${link.icon}`} />
|
||||
{link.name}
|
||||
{t(link.name)}
|
||||
</Link>;
|
||||
})}
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as React from "react";
|
||||
import { t } from "i18next";
|
||||
import { SyncStatus } from "farmbot/dist";
|
||||
import { NavButtonProps } from "./interfaces";
|
||||
import { sync } from "../devices/actions";
|
||||
|
@ -30,7 +31,7 @@ export function SyncButton({ user, bot, dispatch, consistent }: NavButtonProps)
|
|||
let { sync_status } = bot.hardware.informational_settings;
|
||||
sync_status = sync_status || "unknown";
|
||||
const color = consistent ? (COLOR_MAPPING[sync_status] || "red") : "gray";
|
||||
const text = TEXT_MAPPING[sync_status] || "DISCONNECTED";
|
||||
const text = t(TEXT_MAPPING[sync_status] || "DISCONNECTED");
|
||||
return <button
|
||||
className={`nav-sync ${color} fb-button`}
|
||||
onClick={() => dispatch(sync())}>
|
||||
|
|
|
@ -27,7 +27,7 @@ const logFilter = (log: Log): Log | undefined => {
|
|||
const getfirstTickerLog = (logs: Log[]): Log => {
|
||||
if (logs.length == 0) {
|
||||
return {
|
||||
message: "No logs yet.",
|
||||
message: t("No logs yet."),
|
||||
meta: { type: "debug", verbosity: -1 },
|
||||
channels: [], created_at: NaN
|
||||
};
|
||||
|
@ -37,7 +37,7 @@ const getfirstTickerLog = (logs: Log[]): Log => {
|
|||
return filteredLogs[0];
|
||||
} else {
|
||||
return {
|
||||
message: "No logs to display. Visit Logs page to view filters.",
|
||||
message: t("No logs to display. Visit Logs page to view filters."),
|
||||
meta: { type: "debug", verbosity: -1 },
|
||||
channels: [], created_at: NaN
|
||||
};
|
||||
|
|
|
@ -10,7 +10,7 @@ export function WeekGrid({ weeks, dispatch }: WeekGridProps) {
|
|||
<Row>
|
||||
<Col xs={12}>
|
||||
<label className="regimen-days-label">
|
||||
Days
|
||||
{t("Days")}
|
||||
</label>
|
||||
{weeks.map(function (week, i) {
|
||||
return <WeekRow key={i} index={i} week={week}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as React from "react";
|
||||
import { t } from "i18next";
|
||||
import { AddRegimenProps } from "../interfaces";
|
||||
import { push } from "../../history";
|
||||
import { TaggedRegimen, SpecialStatus } from "../../resources/tagged_resources";
|
||||
|
@ -10,7 +11,7 @@ function emptyRegimen(length: number): TaggedRegimen {
|
|||
uuid: "NEVER",
|
||||
specialStatus: SpecialStatus.DIRTY,
|
||||
body: {
|
||||
name: ("New regimen " + (length++)),
|
||||
name: (t("New regimen ") + (length++)),
|
||||
color: "gray",
|
||||
regimen_items: []
|
||||
}
|
||||
|
|
|
@ -74,7 +74,7 @@ export class SequencesList extends
|
|||
uuid: "REDUCER_MUST_CHANGE_THIS",
|
||||
specialStatus: SpecialStatus.SAVED,
|
||||
body: {
|
||||
name: "new sequence " + (this.props.sequences.length),
|
||||
name: t("new sequence ") + (this.props.sequences.length),
|
||||
args: {
|
||||
version: -999,
|
||||
locals: { kind: "scope_declaration", args: {} },
|
||||
|
|
|
@ -82,7 +82,7 @@ export function StepButtonCluster({ dispatch, current }: StepButtonProps) {
|
|||
step={{
|
||||
kind: "send_message",
|
||||
args: {
|
||||
message: "FarmBot is at position {{ x }}, {{ y }}, {{ z }}.",
|
||||
message: t("FarmBot is at position ") + "{{ x }}, {{ y }}, {{ z }}.",
|
||||
message_type: "success"
|
||||
}
|
||||
}}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as React from "react";
|
||||
import { t } from "i18next";
|
||||
import {
|
||||
getAllSavedPeripherals,
|
||||
getAllSavedSensors
|
||||
|
@ -36,17 +37,17 @@ export function StepCheckBox(props: StepCheckBoxProps) {
|
|||
export enum PinGroupName { sensor = "👂", peripheral = "🔌", pin = "📌" }
|
||||
|
||||
export const PERIPHERAL_HEADING: DropDownItem =
|
||||
({ heading: true, label: "➖ Peripherals", value: 0 });
|
||||
({ heading: true, label: "➖ "+t("Peripherals"), value: 0 });
|
||||
|
||||
export const SENSOR_HEADING: DropDownItem =
|
||||
({ heading: true, label: "➖ Sensors", value: 0 });
|
||||
({ heading: true, label: "➖ "+t("Sensors"), value: 0 });
|
||||
|
||||
export const PIN_HEADING: DropDownItem =
|
||||
({ heading: true, label: "➖ Pins", value: 0 });
|
||||
({ heading: true, label: "➖ "+t("Pins"), value: 0 });
|
||||
|
||||
/** Pass it the number X and it will generate a DropDownItem for `pin x`. */
|
||||
const pinNumber2DropDown =
|
||||
(n: number) => ({ label: `Pin ${n}`, value: n, headingId: PinGroupName.pin });
|
||||
(n: number) => ({ label: t("Pin")+` ${n}`, value: n, headingId: PinGroupName.pin });
|
||||
|
||||
const peripheral2DropDown =
|
||||
(x: TaggedPeripheral): DropDownItem => ({
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as React from "react";
|
||||
import { t } from "i18next";
|
||||
import { FindHome, ALLOWED_AXIS, Xyz } from "farmbot";
|
||||
import { StepParams, HardwareFlags } from "../interfaces";
|
||||
import { TaggedSequence } from "../../resources/tagged_resources";
|
||||
|
@ -110,7 +111,7 @@ class InnerFindHome extends React.Component<FindHomeParams, {}> {
|
|||
this.handleUpdate(nextVal);
|
||||
}}
|
||||
checked={this.isSelected(axis)} />
|
||||
{" "} Find {axis}
|
||||
{" "} {t("Find ")} {axis}
|
||||
</label>
|
||||
</div>;
|
||||
})}
|
||||
|
|
|
@ -12,11 +12,11 @@ import { ALLOWED_OPS } from "farmbot/dist";
|
|||
|
||||
const IS_UNDEFINED: ALLOWED_OPS = "is_undefined";
|
||||
const label_ops: Record<ALLOWED_OPS, string> = {
|
||||
"is_undefined": "is unknown",
|
||||
">": "is greater than",
|
||||
"<": "is less than",
|
||||
"is": "is",
|
||||
"not": "is not"
|
||||
"is_undefined": t("is unknown"),
|
||||
">": t("is greater than"),
|
||||
"<": t("is less than"),
|
||||
"is": t("is"),
|
||||
"not": t("is not")
|
||||
};
|
||||
|
||||
export function If_(props: IfParams) {
|
||||
|
@ -42,7 +42,7 @@ export function If_(props: IfParams) {
|
|||
|
||||
return <Row>
|
||||
<Col xs={12}>
|
||||
<h4 className="top">IF...</h4>
|
||||
<h4 className="top">{t("IF...")}</h4>
|
||||
</Col>
|
||||
<Col xs={4}>
|
||||
<label>{t("Variable")}</label>
|
||||
|
|
|
@ -31,17 +31,17 @@ export type Operator = "lhs"
|
|||
| "_else";
|
||||
|
||||
export const LHSOptions: DropDownItem[] = [
|
||||
{ value: "x", label: "X position" },
|
||||
{ value: "y", label: "Y Position" },
|
||||
{ value: "z", label: "Z position" }
|
||||
].concat(range(0, 70).map(x => ({ value: `pin${x}`, label: `Pin ${x}` })));
|
||||
{ value: "x", label: t("X position") },
|
||||
{ value: "y", label: t("Y position") },
|
||||
{ value: "z", label: t("Z position") }
|
||||
].concat(range(0, 70).map(x => ({ value: `pin${x}`, label: t("Pin ")+`${x}` })));
|
||||
|
||||
export const operatorOptions: DropDownItem[] = [
|
||||
{ value: "<", label: "is less than" },
|
||||
{ value: ">", label: "is greater than" },
|
||||
{ value: "is", label: "is equal to" },
|
||||
{ value: "not", label: "is not equal to" },
|
||||
{ value: "is_undefined", label: "is unknown" }
|
||||
{ value: "<", label: t("is less than") },
|
||||
{ value: ">", label: t("is greater than") },
|
||||
{ value: "is", label: t("is equal to") },
|
||||
{ value: "not", label: t("is not equal to") },
|
||||
{ value: "is_undefined", label: t("is unknown") }
|
||||
];
|
||||
|
||||
export function seqDropDown(i: ResourceIndex) {
|
||||
|
@ -67,7 +67,7 @@ export function initialValue(input: Execute | Nothing, index: ResourceIndex) {
|
|||
throw new Error("Failed seq id type assertion.");
|
||||
}
|
||||
case "nothing":
|
||||
return { label: "None", value: 0 };
|
||||
return { label: t("None"), value: 0 };
|
||||
default:
|
||||
throw new Error("Only _else or _then");
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import { t } from "i18next";
|
||||
import { editStep } from "../../api/crud";
|
||||
import * as _ from "lodash";
|
||||
import { WritePin, SequenceBodyItem } from "farmbot";
|
||||
|
@ -5,21 +6,21 @@ import { DropDownItem } from "../../ui/index";
|
|||
import { StepParams } from "../interfaces";
|
||||
|
||||
export const PIN_MODES = [
|
||||
{ value: 1, label: "Analog" },
|
||||
{ value: 0, label: "Digital" }
|
||||
{ value: 1, label: t("Analog") },
|
||||
{ value: 0, label: t("Digital") }
|
||||
];
|
||||
|
||||
export const PIN_VALUES = [
|
||||
{ value: 1, label: "ON" },
|
||||
{ value: 0, label: "OFF" }
|
||||
{ value: 1, label: t("ON") },
|
||||
{ value: 0, label: t("OFF") }
|
||||
];
|
||||
|
||||
export function currentModeSelection(currentStep: SequenceBodyItem) {
|
||||
const step = currentStep as WritePin;
|
||||
const pinMode = step.args.pin_mode;
|
||||
const modes: { [s: string]: string } = {
|
||||
0: "Digital",
|
||||
1: "Analog"
|
||||
0: t("Digital"),
|
||||
1: t("Analog")
|
||||
};
|
||||
return { label: modes[pinMode], value: pinMode };
|
||||
}
|
||||
|
@ -28,8 +29,8 @@ export function currentValueSelection(currentStep: SequenceBodyItem) {
|
|||
const step = currentStep as WritePin;
|
||||
const pinValue = step.args.pin_value;
|
||||
const values: { [s: string]: string } = {
|
||||
0: "OFF",
|
||||
1: "ON"
|
||||
0: t("OFF"),
|
||||
1: t("ON")
|
||||
};
|
||||
return { label: values[pinValue], value: pinValue };
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import { t } from "i18next";
|
||||
import { Channel } from "farmbot/dist";
|
||||
import { ChannelName } from "../interfaces";
|
||||
|
||||
|
@ -12,18 +13,18 @@ interface ChanInfo {
|
|||
}
|
||||
|
||||
export const EACH_CHANNEL: ChanInfo[] = [
|
||||
{ alwaysOn: true, name: "ticker", label: "Ticker Notification" },
|
||||
{ alwaysOn: false, name: "toast", label: "Toast Pop Up" },
|
||||
{ alwaysOn: false, name: "email", label: "Email" },
|
||||
{ alwaysOn: false, name: "espeak", label: "Speak" },
|
||||
{ alwaysOn: true, name: "ticker", label: t("Ticker Notification") },
|
||||
{ alwaysOn: false, name: "toast", label: t("Toast Pop Up") },
|
||||
{ alwaysOn: false, name: "email", label: t("Email") },
|
||||
{ alwaysOn: false, name: "espeak", label: t("Speak") },
|
||||
];
|
||||
|
||||
export const MESSAGE_STATUSES = [
|
||||
{ value: "success", label: "Success" },
|
||||
{ value: "busy", label: "Busy" },
|
||||
{ value: "warn", label: "Warning" },
|
||||
{ value: "error", label: "Error" },
|
||||
{ value: "info", label: "Info" }
|
||||
{ value: "success", label: t("Success") },
|
||||
{ value: "busy", label: t("Busy") },
|
||||
{ value: "warn", label: t("Warning") },
|
||||
{ value: "error", label: t("Error") },
|
||||
{ value: "info", label: t("Info") }
|
||||
];
|
||||
|
||||
export const MESSAGE_STATUSES_DDI = {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as React from "react";
|
||||
import { t } from "i18next";
|
||||
import { Popover, Position, PopoverInteractionKind } from "@blueprintjs/core";
|
||||
import { Xyz } from "farmbot";
|
||||
|
||||
|
@ -7,7 +8,7 @@ interface StepWarningProps {
|
|||
conflicts?: Record<Xyz, boolean>;
|
||||
}
|
||||
|
||||
const TITLE_BASE = "Hardware setting conflict";
|
||||
const TITLE_BASE = t("Hardware setting conflict");
|
||||
|
||||
export const conflictsString = (conflicts: Record<Xyz, boolean>) => {
|
||||
const conflictAxes: string[] = [];
|
||||
|
|
|
@ -27,7 +27,7 @@ export class ToolForm extends React.Component<ToolFormProps, {}> {
|
|||
}
|
||||
|
||||
emptyTool = (): TaggedTool => {
|
||||
return this.taggedTool("Tool " + (this.props.tools.length + 1));
|
||||
return this.taggedTool(t("Tool ") + (this.props.tools.length + 1));
|
||||
}
|
||||
|
||||
stockTools = (dispatch: Function) => {
|
||||
|
@ -35,12 +35,12 @@ export class ToolForm extends React.Component<ToolFormProps, {}> {
|
|||
dispatch(init(this.taggedTool(name)));
|
||||
};
|
||||
|
||||
newTool("Seeder");
|
||||
newTool("Watering Nozzle");
|
||||
newTool("Weeder");
|
||||
newTool("Soil Sensor");
|
||||
newTool("Seed Bin");
|
||||
newTool("Seed Tray");
|
||||
newTool(t("Seeder"));
|
||||
newTool(t("Watering Nozzle"));
|
||||
newTool(t("Weeder"));
|
||||
newTool(t("Soil Sensor"));
|
||||
newTool(t("Seed Bin"));
|
||||
newTool(t("Seed Tray"));
|
||||
}
|
||||
|
||||
render() {
|
||||
|
@ -69,7 +69,7 @@ export class ToolForm extends React.Component<ToolFormProps, {}> {
|
|||
className="fb-button green"
|
||||
onClick={() => { this.stockTools(dispatch); }}>
|
||||
<i className="fa fa-plus" style={{ marginRight: "0.5rem" }} />
|
||||
Stock Tools
|
||||
{t("Stock Tools")}
|
||||
</button>
|
||||
</WidgetHeader>
|
||||
<WidgetBody>
|
||||
|
|
|
@ -11,7 +11,7 @@ export class ToolList extends React.Component<ToolListProps, {}> {
|
|||
const { tools } = this.props;
|
||||
|
||||
return <Widget>
|
||||
<WidgetHeader helpText={ToolTips.TOOL_LIST} title="Tools">
|
||||
<WidgetHeader helpText={ToolTips.TOOL_LIST} title={t("Tools")}>
|
||||
<button
|
||||
className="fb-button gray"
|
||||
onClick={toggle}>
|
||||
|
@ -33,7 +33,7 @@ export class ToolList extends React.Component<ToolListProps, {}> {
|
|||
{tool.body.name || "Name not found"}
|
||||
</Col>
|
||||
<Col xs={4}>
|
||||
{this.props.isActive(tool) ? "active" : "inactive"}
|
||||
{this.props.isActive(tool) ? t("active") : t("inactive")}
|
||||
</Col>
|
||||
</Row>;
|
||||
})}
|
||||
|
|
|
@ -47,7 +47,7 @@ export class ToolBayForm extends React.Component<ToolBayFormProps, {}> {
|
|||
const toolSlotStatus = getArrayStatus(toolSlots);
|
||||
return <div className={"toolbay-widget"}>
|
||||
<Widget>
|
||||
<WidgetHeader helpText={ToolTips.TOOLBAY_LIST} title="Tool Slots">
|
||||
<WidgetHeader helpText={ToolTips.TOOLBAY_LIST} title={t("Tool Slots")}>
|
||||
<button
|
||||
className="gray fb-button"
|
||||
hidden={!!toolSlotStatus}
|
||||
|
|
|
@ -12,7 +12,7 @@ export class ToolBayList extends React.Component<ToolBayListProps, {}> {
|
|||
const { getToolSlots, getToolByToolSlotUUID } = this.props;
|
||||
|
||||
return <Widget>
|
||||
<WidgetHeader helpText={ToolTips.TOOLBAY_LIST} title={"ToolBay 1"}>
|
||||
<WidgetHeader helpText={ToolTips.TOOLBAY_LIST} title={t("ToolBay ") + "1"}>
|
||||
<button
|
||||
className="gray fb-button"
|
||||
onClick={toggle}>
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import * as React from "react";
|
||||
import { t } from "i18next";
|
||||
import { FBSelect, DropDownItem } from "../../ui/index";
|
||||
import { TaggedToolSlotPointer } from "../../resources/tagged_resources";
|
||||
import { ToolPulloutDirection } from "../../interfaces";
|
||||
|
@ -7,15 +8,15 @@ import { isNumber } from "lodash";
|
|||
|
||||
const DIRECTION_CHOICES_DDI: { [index: number]: DropDownItem } = {
|
||||
[ToolPulloutDirection.NONE]:
|
||||
{ label: "None", value: ToolPulloutDirection.NONE },
|
||||
{ label: t("None"), value: ToolPulloutDirection.NONE },
|
||||
[ToolPulloutDirection.POSITIVE_X]:
|
||||
{ label: "Positive X", value: ToolPulloutDirection.POSITIVE_X },
|
||||
{ label: t("Positive X"), value: ToolPulloutDirection.POSITIVE_X },
|
||||
[ToolPulloutDirection.NEGATIVE_X]:
|
||||
{ label: "Negative X", value: ToolPulloutDirection.NEGATIVE_X },
|
||||
{ label: t("Negative X"), value: ToolPulloutDirection.NEGATIVE_X },
|
||||
[ToolPulloutDirection.POSITIVE_Y]:
|
||||
{ label: "Positive Y", value: ToolPulloutDirection.POSITIVE_Y },
|
||||
{ label: t("Positive Y"), value: ToolPulloutDirection.POSITIVE_Y },
|
||||
[ToolPulloutDirection.NEGATIVE_Y]:
|
||||
{ label: "Negative Y", value: ToolPulloutDirection.NEGATIVE_Y },
|
||||
{ label: t("Negative Y"), value: ToolPulloutDirection.NEGATIVE_Y },
|
||||
};
|
||||
|
||||
const DIRECTION_CHOICES: DropDownItem[] = [
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
import * as React from "react";
|
||||
import { t } from "i18next";
|
||||
import { isNumber } from "lodash";
|
||||
import { BotPosition } from "../../devices/interfaces";
|
||||
import { TaggedToolSlotPointer } from "../../resources/tagged_resources";
|
||||
import { ToolPulloutDirection } from "../../interfaces";
|
||||
import { edit } from "../../api/crud";
|
||||
import { SlotDirectionSelect } from "./toolbay_slot_direction_selection";
|
||||
import { t } from "i18next";
|
||||
|
||||
const positionIsDefined = (position: BotPosition): boolean => {
|
||||
return isNumber(position.x) && isNumber(position.y) && isNumber(position.z);
|
||||
|
@ -22,7 +22,7 @@ const positionButtonTitle = (position: BotPosition): string => {
|
|||
if (positionIsDefined(position)) {
|
||||
return `(${position.x}, ${position.y}, ${position.z})`;
|
||||
} else {
|
||||
return "(unknown)";
|
||||
return t("(unknown)");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ export class FilterSearch extends React.Component<Props, Partial<State>> {
|
|||
items={this.props.items}
|
||||
itemPredicate={this.filter}
|
||||
itemRenderer={this.default}
|
||||
noResults={<MenuItem disabled text="No results." />}
|
||||
noResults={<MenuItem disabled text={t("No results.")} />}
|
||||
onItemSelect={this.handleValueChange}
|
||||
popoverProps={{ popoverClassName: minimal ? Classes.MINIMAL : "" }}>
|
||||
<Button
|
||||
|
|
|
@ -27,7 +27,7 @@ export function SaveBtn(props: SaveBtnProps) {
|
|||
};
|
||||
|
||||
const CAPTIONS: Partial<Record<SpecialStatus, string>> = {
|
||||
[SpecialStatus.DIRTY]: t((props.dirtyText || "Save ") + " *"),
|
||||
[SpecialStatus.DIRTY]: (t(props.dirtyText || "Save ") + " *"),
|
||||
[SpecialStatus.SAVING]: t(props.savingText || "Saving")
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue