trying to add multilanguage support

pull/683/head
DDDIM 2018-02-27 20:49:37 +03:00
parent 5133fdf8f4
commit b0afb3d7cb
32 changed files with 633 additions and 535 deletions

View File

@ -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}}"
}

View File

@ -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" />

View File

@ -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}

View File

@ -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) };

View File

@ -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}

View File

@ -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"}

View File

@ -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)}

View File

@ -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} />

View File

@ -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}>

View File

@ -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
},
};

View File

@ -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>

View File

@ -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())}>

View File

@ -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
};

View File

@ -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}

View File

@ -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: []
}

View File

@ -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: {} },

View File

@ -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"
}
}}

View File

@ -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 => ({

View File

@ -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>;
})}

View File

@ -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>

View File

@ -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");
}

View File

@ -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 };
}

View File

@ -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 = {

View File

@ -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[] = [];

View File

@ -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>

View File

@ -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>;
})}

View File

@ -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}

View File

@ -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}>

View File

@ -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[] = [

View File

@ -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)");
}
};

View File

@ -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

View File

@ -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")
};