_L = 
{
   "Following button leads to menu with most used actions and example of usage. It is good place to start if you are new to BAS." :{"ru": "Данная кнопка ведет в меню с наиболее часто используемыми действиями и примерами их использования."},
   "Open the scenario panel settings window (Ctrl + ,)": {
      "ru": "Открыть окно настроек панели сценария (Ctrl + ,)",
   },
   "Help":{
      "ru":"Помощь"
   },
   "This page contains information about most used actions and examples of their usage. Complete list of actions can be found on following":{
      "ru":"Эта страница содержит информацию о наиболее часто используемых действиях и примеры их использования. Полный список действий можно найти на данной"
   },
   "panel":{
      "ru":"панели"
   },
   "You can also check":{
      "ru":"Вы также можете посетить"
   },
   "wiki":{
      "ru":"вики"
   },
   "for more information":{
      "ru":"для получения дополнительной информации"
   },
   "Loops":{
      "ru":"Циклы"
   },
   "helps to repeat actions.":{
      "ru":"позволяют повторять действия."
   },
   "Variables":{
      "ru":"Переменные"
   },
   "are used to store data.":{
      "ru":"используются для хранения данных."
   },
   "Conditions":{
      "ru":"Условия"
   },
   "helps to execute different actions depending on condition.":{
      "ru":"выполняют разные действия в зависимости от значения условия."
   },
   "Browser":{
      "ru":"Браузер"
   },
   "interacting with browser.":{
      "ru":"взаимодействие с браузером."
   },
   "Labels":{
      "ru":"Метки"
   },
   "move execution point to arbitrary place.":{
      "ru":"перемещение точки выполнения в произвольное место."
   },
   "Functions":{
      "ru":"Функции"
   },
   "containers, which holds action list.":{
      "ru":"контейнеры, которые содержат список действий."
   },
   "Error handling":{
      "ru":"Обработка ошибок"
   },
   "react on error during execution.":{
      "ru":"позволяет реагировать на ошибки."
   },
   "Parsing data":{
      "ru":"Парсинг данных"
   },
   "csv, html, xml parsing.":{
      "ru":"парсинг csv, html, xml."
   },
   "Output data":{
      "ru":"Сохранение результатов"
   },
   "Save data to log or file.":{
      "ru":"сохранение данных в лог или файл."
   },
   "Files":{
      "ru":"Файлы"
   },
   "Reading or writing files, distribute data across threads.":{
      "ru":"чтение или запись файлов, распределение данных между потоками."
   },
   "Multithreading":{
      "ru":"Многопоточность"
   },
   "Make your application multithreaded.":{
      "ru":"сделать приложение многопоточным."
   },
   "Close":{
      "ru":"Закрыть"
   },
   "Loops helps to repeat defined list of actions specified number of times or until certain condition will be met.":{
      "ru":"Циклы помогают повторять определенный список действий указанное количество раз или пока не будет выполнено определенное условие."
   },
   "Frequently used actions:":{
      "ru":"Часто используемые действия:"
   },
   "For":{
      "ru":"For"
   },
   "Repeat actions specified number of times.":{
      "ru":"Повторять действия указанные количество раз."
   },
   "While":{
      "ru":"While"
   },
   "Repeat actions while specified condition.":{
      "ru":"Повторять действия пока условие истинно."
   },
   "Foreach":{
      "ru":"Foreach"
   },
   "Repeat actions for each element in list.":{
      "ru":"Повторять действия для каждого элемента в списке."
   },
   "Usage examples":{
      "ru":"Примеры использования"
   },
   "(some examples requires additional editing)":{
      "ru":"(некоторые примеры требуют дополнительного редактирования)"
   },
   "Repeat 10 times":{
      "ru":"Повторить 10 раз"
   },
   "Repeat infinite number of times":{
      "ru":"Повторять бесконечное количество раз"
   },
   "Repeat until certain condition":{
      "ru":"Повторять пока не будет выполнено условие"
   },
   "Repeat for each element in the list":{
      "ru":"Повторять для каждого элемента в списке"
   },
   "Repeat for each element in resource":{
      "ru":"Повторять для каждого элемента из ресурса"
   },
   "Repeat for each value in user defined list":{
      "ru":"Повторять для каждого элемента списка созданного вручную"
   },



   "Condition is met":{
      "ru":"Условие истинно"
   },
   "Condition is not met":{
      "ru":"Условие ложно"
   },
   "Current loop repetition":{
      "ru":"Текущее повторение цикла"
   },
   "Replace condition to end loop":{
      "ru":"Замените условие для завершения цикла"
   },
   "Current data":{
      "ru":"Текущие данные"
   },
   "Replace [[LIST]] with your list":{
      "ru":"Замените [[LIST]] на ваш список"
   },
   "In order to iterate over resource, set 'Run type' to 'Repeat' and user resource anywhere in a script, like ":{
      "ru":"Чтобы последовательно получать элементы ресурса, установите для параметра 'Тип запуска' значение 'Повторять' и используйте ресурс в любом месте скрипта, вот "
   },
   "You also need to use 'Run' mode because in 'Record' mode only first line will be processed,":{
      "ru":"Вам также необходимо использовать режим 'Запуска', поскольку в режиме 'Записи' будет обрабатываться только первая строка из ресурса,"
   },
   "Create new list with 3 values: a, b, c.":{
      "ru":"Создать новый список с 3 значениями: a, b, c."
   },
   "Replace [[YOUR_VARIABLE]]":{
      "ru":"Замените [[YOUR_VARIABLE]]"
   },
   "Replace [[YOUR_VARIABLE]] and \"Your value\"":{
      "ru":"Замените [[YOUR_VARIABLE]] и \"Your value\""
   },
   "Replace [[YOUR_VARIABLE]] and 5":{
      "ru":"Замените [[YOUR_VARIABLE]] и 5"
   },
   "Page content is ":{
      "ru":"Код страницы "
   },
   "Page title is ":{
      "ru":"Название страницы "
   },
   "Page title":{
      "ru":"Название страницы"
   },
   "List of links":{
      "ru":"Список ссылок"
   },
   "Current link text":{
      "ru":"Текст текущей ссылки"
   },
   "Login":{
      "ru":"Логин"
   },
   "Password":{
      "ru":"Пароль"
   },
   "Email":{
      "ru":"Почта"
   },
   "Create multiline variables":{
      "ru":"Создать многострочную переменную"
   },
   "Split string into lines":{
      "ru":"Разделить на строки"
   },
   "Iterate on list":{
      "ru":"Цикл по списку"
   },
   "Test message":{
      "ru":"Тест"
   },
   "Replace 'Result File' to actual resource name":{
      "ru":"Замените 'Result File' на нужное название ресурса"
   },
   "Back":{
      "ru":"Назад"
   },



   "Variables are used to store data between action execution. Each variable has a name and a data, which it points to. For example, variable EMAIL may point to string aaa@gmail.com and variable PASS may point string pass123. You can reference this data by filling variable name with double square brackets into any action and any parameters. For example, to input your email on site use following notation [[EMAIL]]":{
      "ru":"Переменные используются для хранения данных между выполнением действий. Каждая переменная имеет имя и данные, на которые она указывает. Например, переменная EMAIL может указывать на строку aaa@gmail.com, а переменная PASS может указывать на строку pass123. Вы можете ссылаться на эти данные, обрамив имя переменной двойными квадратными скобками в любом действии и любых параметрах. Например, чтобы ввести адрес электронной почты на сайте, используйте следующую строку [[EMAIL]]"
   },
   "Set Variable":{
      "ru":"Установить переменную"
   },
   "Create or update variable.":{
      "ru":"Создать или изменить переменную."
   },
   "Increase Variable":{
      "ru":"Увеличить переменную"
   },
   "Increase or decrease numeric variable.":{
      "ru":"Увеличить или уменьшить числовую переменную."
   },
   "Set Global Variable":{
      "ru":"Установить глобальную переменную"
   },
   "Global variables are available during whole script execution in every thread.":{
      "ru":"Глобальные переменные доступны на протяжении выполнения скрипта в каждом потоке."
   },
   "Increase Global Variable":{
      "ru":"Увеличить глобальную переменную"
   },
   "Increase or decrease numeric global variable.":{
      "ru":"Увеличение или уменьшение числовой глобальной переменной."
   },
   "Template":{
      "ru":"Шаблон"
   },
   "Create multiline variable, expand spintax.":{
      "ru":"Создать многострочную переменную."
   },
   "Conditions helps to execute actions depending if specified condition is true. For example, if certain text is present on page, save it to log, otherwise fail thread.":{
      "ru":"Условия помогают выполнять действия в зависимости от того, является ли указанное условие истинным. Например, если определенный текст присутствует на странице, сохранить его в лог, в противном случае завершить поток."
   },
   "If":{
      "ru":"If"
   },
   "executes different actions depending on condition.":{
      "ru":"выполнять различные действия в зависимости от условия."
   },
   "Execute if variable is true":{
      "ru":"Выполнить, если переменная содержит истинное значение"
   },
   "Execute if variable equals to specified value":{
      "ru":"Выполнить, если переменная равна указанному значению"
   },
   "Execute if variable is greater than":{
      "ru":"Выполнить, если переменная больше чем"
   },
   "Execute always":{
      "ru":"Выполнять всегда"
   },
   "Never execute":{
      "ru":"Никогда не выполнять"
   },
   "Execute if variable contains":{
      "ru":"Выполнить, если переменная содержит строку"
   },
   "In order to interact with browser, you need to use actions from ":{
      "ru":"Для взаимодействия с браузером вам необходимо использовать действия из модуля"
   },
   "'Browser'":{
      "ru":"'Браузер'"
   },
   "module":{
      "ru":""
   },
   "A good way to start would be to use 'Load' action, to load some url.":{
      "ru":"Простой способ начать работу - использовать действие 'Загрузить', оно позволяет загрузить заданный url."
   },
   "To interact with browser elements, you need to select it and then choose what action you want to perform from a context menu, ":{
      "ru":"Чтобы взаимодействовать с элементами на странице, вам нужно выбрать нужный элемент, а затем выбрать нужное действие из контекстного меню,"
   },
   "[[screenshot]]":{
   	  "en":"screenshot",
      "ru":"скриншот"
   },
   "There is also an alternative way to control browser, click on.":{
      "ru":"Существует также альтернативный способ управления браузером, нажмите "
   },
   "following button":{
      "ru":"эту кнопку"
   },
   "to get a direct control on browser. You can also select to record a script, which means that all your mouse click and key inputs will be converted into script, which can be repeated later.":{
      "ru":"чтобы получить прямой контроль над браузером. Вы также можете выбрать добавлять действия на панель сценария, что означает, что все клики мышью и введенные данные будут преобразованы в скрипт, который можно повторить позже."
   },
   "Load":{
      "ru":"Загрузить"
   },
   "Load URL.":{
      "ru":"Загрузить URL."
   },
   "Proxy":{
      "ru":"Прокси"
   },
   "Set browser proxy.":{
      "ru":"Установить прокси для браузера."
   },
   "Manual browser control":{
      "ru":"Ручное управление браузером"
   },
   "Control browser directly.":{
      "ru":"Управление браузером напрямую."
   },
   "Create or switch to regular profile":{
      "ru":"Создать или переключиться на постоянный профиль"
   },
   "Set folder, which will contain browser cookie, localStorage and other objects. Can be used to autologin.":{
      "ru":"Установить папку, в которой будут храниться cookie браузера, localStorage и другие объекты. Может быть использовано для автоматического входа на сайт."
   },
   "Load page and get its content":{
      "ru":"Загрузить страницу и получить ее содержимое."
   },
   "Load page and make xpath query.":{
      "ru":"Загрузить страницу и выполнить xpath запрос."
   },
   "Labels helps to transfer execution point between two arbitrary places inside script.":{
      "ru":"Метки позволяют перенести точку выполнения между двумя произвольными местами внутри скрипта."
   },
   "Easiest way to move execution point is just to drag and drop label handler, like":{
      "ru":"Самый простой способ переместить точку выполнения - перетащить специальную красную стрелку в нужное место, вот"
   },
   "[[this]]":{
   	  "en":"this",
      "ru":"так"
   },
   "You can also use labels by running 'Set label' and 'Move to label' actions.":{
      "ru":"Вы также можете использовать метки, выполняя действия 'Установить метку' и 'Перейти к метке'."
   },
   "Set label":{
      "ru":"Установить метку"
   },
   "Set label so execution point may be transfered to that label later.":{
      "ru":"Установить метку так, чтобы точка выполнения могла быть перенесена к этой метки позже."
   },
   "Move to label":{
      "ru":"Перейти к метке"
   },
   "Move execution point to label previously set with \"Set label\" action.":{
      "ru":"Переместить точку выполнения к метке ранее заданной с помощью действия 'Установить метку'."
   },
   "Create cycle using labels":{
      "ru":"Создать цикл, используя метки"
   },




   "In order to create or call functions use ":{
      "ru":"Для создания или вызова функций используйте"
   },
   "Function manager":{
      "ru":"Менеджер функций"
   },
   "Call Function":{
      "ru":"Вызов функции"
   },
   "Execute function and proceed with next action.":{
      "ru":"Выполнить функцию и перейти к следующему действию."
   },
   "Call function in several threads":{
      "ru":"Вызов функции в несколько потоков"
   },
   "Execute function specified number of times with specified number of threads.":{
      "ru":"Выполнить функцию указанное количество раз в указанном числе потоков."
   },
   "By default, if any error will happen during any action execution, thread will restart.":{
      "ru":"По умолчанию, если какая-либо ошибка произойдет во время выполнения какого-либо действия, то поток перезапустится."
   },
   "This behavior is acceptable most of times. For example, if your proxy is not working, it is good idea to restart thread and take a new proxy. However, if you want to process error differently than restarting thread, you can use 'Ignore Errors' action. This action allows to detect whenever error happens and do whatever you like by executing arbitrary code. For example, you can write report and restart thread only after that, or move to label and repeat action and don't restart thread at all.":{
      "ru":"Такое поведение приемлемо в большинстве случаев. Например, если ваш прокси не работает, рекомендуется перезапустить поток и поменять прокси. Однако, если вы хотите обработать ошибку иначе, чем перезапустить поток, вы можете использовать действие 'Игнорировать ошибки'. Это действие позволяет обнаруживать любые ошибки и выполнять произвольный код в случае их возникновения. Например, в случае ошибки, вы можете добавить сообщение в лог и перезапустить поток только после этого или перейти к метке и повторить действие и вообще не перезапускать поток."
   },
   "In order to ignore errors during execution of specific action, use ":{
      "ru":"Чтобы игнорировать ошибки при выполнении определенного действия, используйте "
   },
   "Ignore Errors":{
      "ru":"Игнорировать ошибки"
   },
   "Ignore errors":{
      "ru":"Игнорировать ошибки"
   },
   "Ignore errors and continue script execution further.":{
      "ru":"Игнорировать ошибки и продолжить выполнение скрипта дальше."
   },
   "Load page until success, ignore error during page load.":{
      "ru":"Повторять загрузку страницу до получения успешного результата."
   },




   "In order to parse data from web page, first load url with 'Load' action, next click on element that you want to extract and select 'Get element text' action,":{
      "ru":"Чтобы парсить данные со страницы, сначала загрузите url с помощью действия 'Загрузить', затем кликните на элемент, который вы хотите получить, и выберите действие 'Получить текст',"
   },
   "[[like this]]":{
   	  "en": "like this",
      "ru":"вот так"
   },
   "You can also save page source into variable('Page Html' action) and use xpath or regular expression module in order to extract data.":{
      "ru":"Вы также можете сохранить код страницы в переменную (действие 'Код страницы') и использовать xpath или модуль регулярных выражений для извлечения данных."
   },
   "Regular expressions or xpath can be also used to extract data from any other source if text is stored in the variable. For example, you can get page with http client('Get' action), save its source with 'Content' action and then use regular expressions.":{
      "ru":"Регулярные выражения или xpath также можно использовать для извлечения данных из любого другого источника, если текст хранится в переменной. Например, вы можете получить страницу с помощью http-клиента (действие 'Get запрос'), сохранить результат в переменную с помощью действия 'Содержание ответа', а затем использовать регулярные выражения для получения данных."
   },
   "If you want to split line from file, which contains several values, for example, email:password, then you need to use 'Parse Line' action.":{
      "ru":"Если вы хотите разделить строку из файла, который содержит несколько значений, например, 'email:pass', тогда вам нужно использовать действие 'Парсить строку'."
   },
   "Parse Line":{
      "ru":"Парсить строку"
   },
   "Split line, which contains several values, for example, email:password into variables.":{
      "ru":"Разделить строку, которая содержит несколько значений, например, 'email:pass' на переменные."
   },
   "Page Html":{
      "ru":"Код страницы"
   },
   "Save page html to variable.":{
      "ru":"Сохранить код страницы в переменную."
   },
   "Xpath Get Xml":{
      "ru":"Xpath получить xml"
   },
   "Execute xpath and find html.":{
      "ru":"Выполнить xpath, получить html."
   },
   "Xpath Get Text":{
      "ru":"Xpath получить текст"
   },
   "Execute xpath and find text.":{
      "ru":"Выполнить xpath, получить текст."
   },
   "First match":{
      "ru":"Первое вхождение"
   },
   "Execute regular expression, get first match.":{
      "ru":"Выполнить регулярное выражение, получить первый соответствующий ему фрагмент текста."
   },
   "Extract page title with regular expression":{
      "ru":"Извлечь название страницы с помощью регулярного выражения"
   },
   "Extract all links on page using xpath":{
      "ru":"Извлечь все ссылки на странице, используя xpath"
   },
   "Iterate all links on page":{
      "ru":"Перебрать все ссылки на странице"
   },
   "Split csv line into variables":{
      "ru":"Разделить строку на переменные"
   },
   "Split multiline data into list with lines":{
      "ru":"Разделить многострочную переменную в список со строками"
   },





   "Easiest way to output message is to use 'Log' action, it will write data into special log panel and into file. 'Log' action is more suitable for writing messages about script execution.":{
      "ru":"Самый простой способ сохранение результатов - использовать действие 'Лог', оно будет записывать данные в специальную панель 'Лог', а также в файл. Действие 'Лог' больше подходит для написания сообщений о выполнении скрипта."
   },
   "To save raw data without timestamps use 'Result' action.":{
      "ru":"Чтобы сохранить необработанные данные без дополнительной информации, такой как дата, номер потока, и т. д., используйте действие 'Результат'."
   },
   "Finally, you can write to any file with 'Write File' action. It accepts resource as input parameter, so you can write into user selected file.":{
      "ru":"Наконец, вы можете записать данные в любой файл с помощью действия 'Запись В Файл'. В качестве входного параметра можно использовать путь к файлу либо ресурс, это значит, что вы можете добавлять строки в файл выбранный пользователем."
   },
   "Log":{
      "ru":"Лог"
   },
   "Write message to log":{
      "ru":"Добавить запись в лог"
   },
   "Result":{
      "ru":"Результат"
   },
   "Output data to results tab":{
      "ru":"Вывод данных на вкладку результатов"
   },
   "Write File":{
      "ru":"Запись В Файл"
   },
   "Write data to file with specified path":{
      "ru":"Записать данные в файл с заданным путем"
   },
   "Write a test message":{
      "ru":"Вывести текстовое сообщение"
   },
   "Write line to user selected file":{
      "ru":"Добавить строку в выбранный пользователем файл"
   },


   "By default your script will run in single thread and will stop after first execution.":{
      "ru":"По умолчанию ваш скрипт будет работать в одном потоке и остановится после первого выполнения."
   },
   "In order to make your application multithreaded, you need to set thread number on ":{
      "ru":"Чтобы сделать ваше приложение многопоточным, вам нужно установить номер потока на "
   },
   "In order to repeat your application for each resource value, you need to set 'Run Type' to 'Repeat' on ":{
      "ru":"Чтобы повторять ваше приложение для каждого значения ресурса, вам нужно изменить 'Тип запуска' на 'Повторять' на  "
   },
   "following panel":{
      "ru":"этой панели"
   },
   "you also need to stop \"Record mode\" and start script in":{
      "ru":"Вам также нужно остановить \"Режим записи\" и запустить скрипт в"
   },
   "Run mode":{
      "ru":"Режим запуска"
   },
   "Resource system may help you to distribute data across multiple thread. You can create new resource by clicking on following ":{
      "ru":"Система ресурсов может помочь вам распределить данные между несколькими потоками. Вы можете создать новый ресурс, нажав на эту "
   },
   "button":{
      "ru":"кнопку"
   },
   "For example, if you have file with proxy list, create resource with name 'Proxy' and then use it in any parameter in any action, ":{
      "ru":"Например, если у вас есть файл со списком прокси, создайте ресурс с именем 'Прокси', а затем используйте его в любом параметре в любом действии,"
   },
   "like this":{
      "ru":"вот так"
   },
   "With this approach new proxy will be taken for each thread run.":{
      "ru":"При таком подходе, для каждого запуска потока будет использован новый прокси."
   },
   "Resource system also creates user interface, this means, that on each script run you or your users will be prompted to input filename which contains proxies.":{
      "ru":"Система ресурсов также создает пользовательский интерфейс, это означает, что при каждом запуске скрипта вам или вашим пользователям будет предложено ввести имя файла, содержащего прокси."
   },
   "Interacting with file can be performed in two ways. First on is very straightforward, use 'Filesystem' module and 'Read File' or 'Write File' actions in order to read or write file directly.":{
      "ru":"Взаимодействие с файлом может быть выполнено двумя способами. Первый - это действия из модуля 'Файловая система', такие как 'Читать Файл' или 'Запись В Файл'."
   },
   "First approach is very easy to use but has one disadvantage, it is hard to synchronize data across multiple threads.":{
      "ru":"Первый способ очень простой в использовании, но имеет один недостаток: с помощью него трудно синхронизировать данные между несколькими потоками."
   },
   "Resource system, the second way, may help you to do that. You can create new resource by clicking on following ":{
      "ru":"Система ресурсов, второй способ, он может помочь синхронизировать данные. Вы можете создать новый ресурс, нажав на эту "
   },



   "Read data from file with specified path":{
      "ru":"Чтение данных из файла с заданным путем"
   },
   "Read File":{
      "ru":"Читать Файл"
   },
   "Write data to file with specified path":{
      "ru":"Запись данных в файл с заданным путем"
   },
   "Write File":{
      "ru":"Запись В Файл"
   },
   "Read File To List":{
      "ru":"Читать Файл В Список"
   },
   "Read data from file to list":{
      "ru":"Читать данные из файла в список"
   },
   "Write List To File":{
      "ru":"Записать Список В Файл"
   },
   "Write data from list to file":{
      "ru":"Записать данные из списка в файл"
   },
   "Resource To List":{
      "ru":"Список В Ресурс"
   },
   "Read data from resource(user selected file) to list":{
      "ru":"Сохранить данные из ресурса(из выбранного пользователем файла) в список"
   },


   "Check specified condition, if it's true execute some action sequence, if it's false execute another action sequence. Finally proceed with next actions.":{
      "ru":"Проверить заданное условие, если оно истинно, выполнить некоторую последовательность действий, если нет, выполнить другую последовательность действий. Наконец, перейдите к следующим действиям."
   },
   "Interaction with browser.":{
      "ru":"Взаимодействие с браузером."
   },
   "Set label so execution point may be transfered to that label later. Labels helps to transfer execution point between two arbitrary places inside script.":{
      "ru":"Установить метку так, чтобы точка выполнения могла быть перенесена к этой метки позже. Метки нужны чтобы перенести точку выполнения из одного места в другое."
   },
   "You can process errors during action execution and decide how to proceed after error.":{
      "ru":"Вы можете обрабатывать ошибки во время выполнения действия и выбрать алгоритм работы после ошибки."
   },
   "There methods for parsing json, html, xml, csv and other formats.":{
      "ru":"Существуют методы для парсинга json, html, xml, csv и других форматов."
   },
   "Multithreaded means, that your activities will be executed in parallel.":{
      "ru":"Многопоточность означает, что задачи будут выполняться параллельно."
   },

   "Label can contain only letters, digits, underscore and spaces" :{"ru": "Название метки может содержать только цифры, буквы, нижнее подчеркивание и пробел"},
   "Run from C#" :{"ru": "Вызвать из C#"},
   "Run from Python" :{"ru": "Вызвать из Python"},
   "Run from Node.js" :{"ru": "Вызвать из Node.js"},
   "Call asynchronously" :{"ru": "Вызвать асинхронно"},
   "run this function from C# code, send parameters and receive result." :{"ru": "вызвать эту функцию из C#, передать входные параметры и получить результат."},
   "run this function from Python code, send parameters and receive result." :{"ru": "вызвать эту функцию из Python, передать входные параметры и получить результат."},
   "run this function from Node.js code, send parameters and receive result." :{"ru": "вызвать эту функцию из Node.js, передать входные параметры и получить результат."},
   "run this function in separate thread, wait for results or stop it if necessary." :{"ru": "начать выполнение функции в отдельном потоке, дождаться результатов или остановить его при необходимости."},
   

	"Current function name. Functions are containers, which holds action list. It helps to group several actions which does same task. For example, there can be function which logins to account, function that checks account balance, etc. It makes your code clear and well organized." :{"ru": "Текущее имя функции. Функции - это контейнеры, в которых содержится список действий. Они помогают группировать несколько действий, которые выполняют одну и ту же задачу. Например, может быть функция, которая логинится на сайте, функция, которая проверяет баланс и т. д. Использование функций делает ваш код понятным и хорошо организованным."},
	"Function list" :{"ru": "Список функций"},
	"Functions are containers, which holds action list. It helps to group several actions which does same task. For example, there can be function which logins to account, function that checks account balance, etc. It makes your code clear and well organized." :{"ru": "Функции - это контейнеры, в которых содержится список действий. Они помогают группировать несколько действий, которые выполняют одну и ту же задачу. Например, может быть функция, которая логинится на сайте, функция, которая проверяет баланс и т. д. Использование функций делает ваш код понятным и хорошо организованным."},
	"Click to show function in scenario editor" :{"ru": "Нажмите, чтобы показать функцию в редакторе сценария"},
	"Open" :{"ru": "Открыть"},
	"show function in scenario editor." :{"ru": "показать функцию в редакторе сценария."},
	"Edit" :{"ru": "Редактировать"},
	"edit function name, description, params etc." :{"ru": "редактировать название функции, описание, параметры и т. д."},
   "Call" :{"ru": "Вызвать"},
   "Run this function" :{"ru": "Запустить эту функцию"},
	"run this function." :{"ru": "запустить эту функцию."},
	"Call in several threads" :{"ru": "Вызвать в несколько потоков"},
	"run this function specified number of times with specified number of threads." :{"ru": "запустить эту функцию указанное количество раз в указанном количестве потоков."},
	"Delete" :{"ru": "Удалить"},
	"delete this function." :{"ru": "удалить эту функцию."},
	"Are you sure that you want to delete" :{"ru": "Вы уверены, что хотите удалить"},
	"param?" :{"ru": "параметр?"},
	"function and all its content?" :{"ru": "функцию и ее содержимое?"},
	"Adding new function" :{"ru": "Добавление новой функции"},
	"Editing function" :{"ru": "Редактирование функции"},
	"Function name:" :{"ru": "Имя функции:"},
	"Function description:" :{"ru": "Описание функции:"},
	"Return value:" :{"ru": "Возвращаемое значение:"},
	"yes" :{"ru": "да"},
	"no" :{"ru": "нет"},

	"Drag this arrow in order to create new label and move execution point to other place." :{"ru": "Перетащите этот элемент, чтобы создать новую метку и переместить точку выполнения в другое место."},
	"Please give a name to a new label. Labels helps to transfer execution point between two arbitrary places inside script." :{"ru": "Пожалуйста, назовите новую метку. Метки нужны чтобы перенести точку выполнения из одного места в другое."},
	"Label Name" :{"ru": "Имя метки"},
	
	
	"Run Type" :{"ru": "Тип запуска"},
	"One time" :{"ru": "Один раз"},
	"Repeat" :{"ru": "Повторять"},
	"Custom" :{"ru": "Особый"},
	"Run type determines how many time script will run. This setting doesn't affect 'Record mode', if you want to repeat script execution, you need to stop 'Record mode' and start script in 'Run mode'. Start editing this value to discover available types." :{"ru": "Тип запуска определяет, сколько раз будет запускаться скрипт. Этот параметр не влияет на 'Режим записи', если вы хотите повторять выполнение скрипта, вам нужно остановить 'Режим записи' и запустить скрипт в 'Режиме запуска'. Начните редактировать это значение, чтобы узнать больше."},
	"Run Number" :{"ru": "Количество повторов"},
	"Each script launch has a successful or failure result, for example, successful run could be when account was registered and failure may be because not working proxy. With this type you can limit successful and fail execution number. For example, by setting success number to 100 and fail number to 10, you are telling engine to stop execution after 100 successful account registration or after 10 failures during registration." :{"ru": "Каждый запуск скрипта может иметь либо успешный либо неудачный результат, например, успешным результатом может считаться регистрация аккаунта, а неудачным может быть ошибка из-за неработающего прокси-сервера. С типом запуска 'Особый' вы можете ограничить количество успешных и неудачных выполнений. Например, установив количество удачных запусков в 100, а неудачных в 10, вы указываете остановить выполнение после 100 успешных регистраций или после 10 любых ошибок во время регистрации."},
	"Run type determines how many time script will run. This setting doesn't affect \"Record mode\", if you want to repeat script execution, you need to stop \"Record mode\" and start script in" :{"ru": "Тип запуска определяет, сколько раз будет запускаться скрипт. Этот параметр не влияет на \"Режим записи\", если вы хотите повторять выполнение скрипта, вам нужно остановить \"Режим записи\" и запустить скрипт в"},
	"Script will be constantly repeated infinitely or until data for any resource will be exhausted, or until \"End Script\" will be executed. Use this mode if you want to execute script until some condition will be met, for example, if the lines in the file run out." :{"ru": "Скрипт будет повторяться бесконечно, либо до тех пор, пока не будут исчерпаны данные для какого-либо ресурса, либо, пока не будет вызвано действие \"Прервать скрипт\". Используйте этот режим, если вы хотите выполнять скрипт до тех пор, пока не произойдет какое-либо событие, например, пока строки в файле не закончатся."},
	"Run mode" :{"ru": "Режиме запуска"},
	"Script will be executed once and then will instantly finish." :{"ru": "Скрипт будет выполнен один раз, без повторений."},
	



	"Default value:" :{"ru": "Значение по умолчанию:"},
	"Default value for generated input field." :{"ru": "Значение по умолчанию для сгенерированного поля ввода."},
	"Obtaining function parameter" :{"ru": "Получаем параметр функции"},
	"Finish function and set result" :{"ru": "Завершить выполнение функции и вернуть результат"},
	
	"Return value description:" :{"ru": "Описание возвращаемого значения:"},
	"Default variable name:" :{"ru": "Имя переменной по умолчанию:"},
	"Each function can have input parameters. For example, if function logins to some site, then parameters could be account login and account password. Function also can have one output parameter which contains result of its work. Input and output params are optional." :{"ru": "Каждая функция может иметь входные параметры. Например, если функция выполняет вход на какой-либо сайт, то параметрами могут быть логин и пароль. Функция также может иметь возвращаемое значения, которое содержит результат ее работы. Входные параметры и возвращаемые значения не являются обязательными."},
	"Add" :{"ru": "Добавить"},
	"Params list is empty" :{"ru": "Список параметр пуст"},
	"More details" :{"ru": "Подробнее"},
	"Save changes" :{"ru": "Сохранить изменения"},
	"Name:" :{"ru": "Имя:"},
	"Type:" :{"ru": "Тип:"},
	"Description:" :{"ru": "Описание:"},
	"Please input function description : " :{"ru": "Пожалуйста, введите описание функции : "},
	"Please input return value description : " :{"ru": "Пожалуйста, введите описание возвращаемого значения : "},
	"Please input return variable name : " :{"ru": "Пожалуйста, введите имя возвращаемой переменной : "},
	"Can't create function with empty name" :{"ru": "Невозможно создать функцию с пустым названием"},
	"Parameter with this name already exists" :{"ru": "Параметр с таким именем уже существует"},
	"Empty, please set" :{"ru": "Пусто значение, нужно заполнить"},
	"Parameters" :{"ru": "Параметры"},
	"Has return value:" :{"ru": "Есть возвращаемое значение:"},
	"Function properties:" :{"ru": "Свойства функции:"},
	"OnApplicationStart function will run just after script starts and before any other code defined in 'Main' function. It will run in single thread and it is the perfect place to do initialization of global variables, resources, etc." :{"ru": "Функция OnApplicationStart будет запускаться самой первой сразу после запуска скрипта и перед любыми другими действиями, определенным в функции 'Main'. Она будет работать в одном потоке, выполняться один раз и это идеальное место для инициализации глобальных переменных, ресурсов и т. д."},
	"Less details" :{"ru": "Упрощенный вид"},
	"Name:" :{"ru": "Имя:"},
	"Add/Edit Parameter" :{"ru": "Добавить/Редактировать параметр"},
	"Name is for identifying parameter, it is used in \"Get Function Parameter\" action to get parameter value inside function." :{"ru": "Имя предназначено для идентификации параметра, оно используется в действии \"Получить Параметр Функции\", чтобы получить значение параметра внутри функции."},
	"Type:" :{"ru": "Тип:"},
	"String" :{"ru": "Строка"},
	"NumberParam" :{"ru": "Число","en": "Number"},
	"Boolean" :{"ru": "Истина/Ложь"},
	"Expression" :{"ru": "Выражение"},
	"String or expression" :{"ru": "Строка или выражение"},
	"Number or expression" :{"ru": "Число или выражение"},
	"Type is used to prepare input field for this parameter. It is displayed when starting function, inside \"Call Function\" action." :{"ru": "Тип используется для создания поля ввода данного параметра. Отображается при запуске функции, внутри действия \"Вызов функции\"."},
	"Description:" :{"ru": "Описание:"},
	"Description is also used to prepare input field for this parameter, same as \"Type\"." :{"ru": "Описание также используется для подготовки поля ввода этого параметра, точно так же, как и \"Тип\"."},



	"Click to process error during execution of this action.": {"ru": "Нажмите, чтобы обработать возможную ошибку во время выполнения этого действия."},
	"Move execution point to label previously set with 'Set label' action. Labels helps to transfer execution point between two arbitrary places inside script.":{"ru": "Переместить точку выполнения к метке ранее заданной с помощью действия 'Установить метку'. Метки нужны чтобы перенести точку выполнения из одного места в другое."},
	"Set label so execution point may be transfered to that label later. Labels helps to transfer execution point between two arbitrary places inside script.": {"ru": "Установить метку так, чтобы точка выполнения могла быть перенесена к этой метки позже. Метки нужны чтобы перенести точку выполнения из одного места в другое."},

	"Play. Run rest of the script starting from current action.":{"ru": "Запустить скрипт. Выполнять действия по одному начиная с текущего."},
	"Run next action. Only single action will be executed.":{"ru": "Выполните следующее действие. Будет выполнено только одно действие."},
	"Stop script and exit 'Record' mode.":{"ru": "Остановить скрипт и выйти из режима записи."},
	"Restart script. Script will be stopped and then started again in 'Record' mode.":{"ru": "Перезапустить скрипт. Скрипт будет остановлен и запущен снова в режиме записи."},
	"Maximum number of fail thread endings allowed for script. After number of failures will be reached script will end. Set this setting to a big value in order to loop script. Script can finish if this value is reached or if any resource if finished or if you call 'End script' action.":{"ru": "Максимальное количество неудачно выполненных потоков разрешеное для скрипта. После того, как будет достигнуто количество неудачных выполнений, скрипт завершится. Установите эту настройку в большое значение чтобы зациклить скрипт. Скрипт будет завершен, если это значение достигнуто, или если все строки какого-либо ресурса использованы или вы вызовете действие 'Прервать скрипт'"},
	"Maximum number of successful thread endings allowed for script. After number of successful execution will be reached script will end. Set this setting to a big value in order to loop script. Script can finish if this value is reached or if any resource if finished or if you call 'End script' action.":{"ru": "Максимальное количество успешно выполненных потоков разрешеное для скрипта. После того, как будет достигнуто количество успешных выполнений, скрипт завершится. Установите эту настройку в большое значение чтобы зациклить скрипт. Скрипт будет завершен, если это значение достигнуто, или если все строки какого-либо ресурса использованы или вы вызовете действие 'Прервать скрипт'."},
	"Number of threads. This option affects only 'Run' mode, but not 'Record' mode. To start script in multithreaded mode, change this setting, stop record and click 'Run'.":{"ru": "Количество потоков. Этот параметр влияет только на режим 'Запуска', но не на 'Запись'. Чтобы запустить скрипт в многопоточном режиме, измените этот параметр, остановите запись и нажмите на кнопку 'Запуск'."},
	"To find action, you can put here anything which is displayed inside action, like: action id, action name, variables which uses action. You can't find action by variables, which are not displayed.":{"ru": "Чтобы найти действие, вы можете поместить сюда часть текста, который отображается внутри действия, например: идентификатор действия, имя действия, переменные, которые использует действие. Вы не можете найти действие по переменным, которые не отображаются."},
	"Close search bar":{"ru": "Закрыть панель поиска"},
	"Search next match":{"ru": "Искать следующее совпадение"},
	"Search previous match":{"ru": "Искать предыдущее совпадение"},
	"Search action by specified text (Ctrl + F)":{"ru": "Поиск действия с заданным текстом (Ctrl + F)"},
	"Click to move execution point here.":{"ru": "Нажмите здесь, чтобы переместить точку выполнения."},
	"This is internal action, it is executed first on every thread start":{"ru": "Это внутреннее действие, оно выполняется самым первым при каждом запуске потока"},
	"Click to select. Drag to move it. Double click to edit and see description":{"ru": "Нажмите, чтобы выбрать. Перетащите, чтобы переместить его. Дважды щелкните, чтобы изменить и увидеть описание"},
	"Action":{"ru": "Действие"},
	"Check specified condition, if it's true execute some action sequence, if it's false execute another action sequence. Finally proceed with next actions.": {"ru": "Проверить заданное условие, если оно истинно, выполнить определенную последовательность действий, если оно ложно выполнить другую последовательность действий, наконец продолжить выполнение скрипта."},
	"A place where new action can be inserted or moved. This one is not active. Click to make it active.":{"ru": "Место, куда можно добавлять или перемещать действия. Это место не активно. Кликните по нему чтобы сделать активным."},
	"A place where new action can be inserted or moved. This one is active. New actions will be inserted here.":{"ru": "Место, куда можно добавлять или перемещать действия. Это место активно. Сюда будут добавлены новые действия."},
	"Current function name. Functions are containers, which holds action list. Each script must have at least one function - 'Main'. Thread runs 'Main' function when it starts, while script runs 'OnApplicaionStart' function(if it exists) when it starts.":{"ru": "Имя текущей функции. Функции - это контейнеры, в которых содержится список действий. Каждый скрипт должен иметь хотя бы одну функцию - 'Main'. Поток вызывает функцию 'Main', когда он запускается, а скрипт вызывает функцию 'OnApplicaionStart' (если она существует) при запуске."},
	"Run function in several threads":{"ru": "Вызвать функцию в несколько потоков"},
	"Call function":{"ru": "Вызвать функцию"},
	"Edit function name":{"ru": "Редактировать имя функции"},
	"Delete current function and all content":{"ru": "Удалить текущую функцию и все содержимое"},
	"Add new function":{"ru": "Добавить новую функцию"},
	"Show variables list (Ctrl + I)": {"ru": "Показать список переменных (Ctrl + I)"},
	"Task Description":{"ru": "Описание задания"},
	"disabled" :{"ru": "отключено"},
	"(This button will only change task description)" :{"ru": "(Эта кнопка изменит только описание задания)"},
	"Toggle selection" :{"ru": "Выбрать"},
	"Edit" :{"ru": "Редактировать"},
	"Delete this" :{"ru": "Удалить"},
	"Run until this" :{"ru": "Выполнить до этого действия"},
	"Actions" :{"ru": "Действия"},
	"Copy selected" :{"ru": "Копировать выбранные"},
	"Paste selected" :{"ru": "Вставить"},
	"Cut selected" :{"ru": "Вырезать выбранные"},
	"Delete selected" :{"ru": "Удалить выбранные"},
	"Clear selection" :{"ru": "Очистить выделение"},
	"Edit Task" :{"ru": "Редактировать задание"},
	"Task Name" :{"ru": "Имя задания"},
	"Don't run when recording" :{"ru": "Не выполнять в режиме записи"},
	"Ok" :{"ru": "Ok"},
	"Cancel" :{"ru": "Отмена"},
	"Add/Edit Function" :{"ru": "Добавить/Редактировать Функцию"},
	"OnApplicationStart" :{"ru": "OnApplicationStart"},
	"function will be run at first place." :{"ru": "функция будет выполнена первой."},
	"Don't recover after failure" :{"ru": "Не продолжать после ошибки"},
	"Function Name" :{"ru": "Имя функции"},
	"Function" :{"ru": "Функция"},
	"Thread Number" :{"ru": "Количество потоков"},
	"Success Number" :{"ru": "Успешных выполнений"},
	"Fail Number" :{"ru": "Неудачных выполнений"},
	"Selected" :{"ru": "Выбрано"},
	"Copy (Ctrl-C)" :{"ru": "Копировать (Ctrl-C)"},
	"Cut (Ctrl-X)" :{"ru": "Вырезать (Ctrl-X)"},
	"Paste (Ctrl-V)" :{"ru": "Вставить (Ctrl-V)"},
	"Check All" :{"ru": "Выделить Все"},
	"Clear Selection" :{"ru": "Очистить Выделение"},
	"Execute only this action" :{"ru": "Выполнить только это действие"},
	"Move Execution Point Here" :{"ru": "Переместить точку выполнения"},
   "Variables will be loaded on next script pause" :{"ru": "Переменные будут загружены при следующей паузе сценария"},
	"Previous" :{"ru": "Предыдущий"},
	"Next" :{"ru": "Следующий"},
	"Search" :{"ru": "Поиск"},
	" and " :{"ru": " и "},
	" more" :{"ru": " других"},
	"Enable selected":{"ru": "Включить выбранные"},
	"Disable selected":{"ru": "Отключить выбранные"},
	"Set color":{"ru": "Установить цвет"},
	"Clear color":{"ru": "Очистить цвет"},
	"for selected actions":{"ru": "для выбранных действий"},
	"Color":{"ru": "Цвет"},
	"Select all":{"ru": "Выбрать все"},
	"Unfold all":{"ru": "Развернуть все"},
	"Fold all":{"ru": "Cвернуть все"},
   "It's not possible to change the insertion places visibility because direct control with adding actions is enabled.":{"ru": "Невозможно изменить видимость мест вставки, поскольку включено прямое управление с добавлением действий."},
   "It's not possible to change the insertion places visibility because HTTP request recording is enabled.":{"ru": "Невозможно изменить видимость мест вставки, поскольку включена запись HTTP запросов."},
   "A place where new action can be inserted or moved. Click to make it active.":{"ru": "Место, куда можно добавлять или перемещать действия. Кликните по нему чтобы сделать активным."},
   "You can toggle visibility of insertion places by pressing F12.":{"ru": "Вы можете переключить видимость мест вставки, нажав клавишу F12."},
   "Selector requires confirmation":{"ru": "Селектор требует настройки"},
   "Selector (image)":{"ru": "Селектор (изображение)"},
   "toolinsert.dropzone":{"ru": "Поместите действие тут", "en": "Drag action here"},
   "toolinsert.active":{"ru": "Активное место вставки", "en": "Active insertion space"},
   "toolinsert.base":{"ru": "Место вставки", "en": "Insertion space"},
   "toast.insertion":{"ru": "Выберите место для вставки", "en": "Choose insertion place"},
   "toast.edit.error":{"ru": "Действие не может быть изменено во время выполнения задачи", "en": "Action cannot be changed during task execution"},
   "Preview is not available for code that can change variable values":{"ru": "Превью недоступно для кода, который может изменять значения переменных"},
   "history.context.toggle":{"ru": "Показать/спрятать весь текст", "en": "Show/hide whole text"},
   "history.context.removethis":{"ru": "Удалить это", "en": "Remove this"},
   "history.context.removeall":{"ru": "Очистить все", "en": "Clear all"},
   "history.context.disable":{"ru": "Отключить трассировку", "en": "Disable tracing"},
}


function tr(key)
{
	if(typeof(key) == "undefined")
	{
      {
         var all = $("*[data-placeholder]")
         //console.log("Placeholder number " + all.length)
         for(var i = 0;i< all.length;i++)
         {
            var el = $(all[i])
            el.attr("placeholder",tr(el.attr("data-placeholder")))
            el.removeAttr("data-placeholder")
         }
      }

      {
         var all = $("*[data-title]")
         //console.log("Title number " + all.length)
         for(var i = 0;i< all.length;i++)
         {
            var el = $(all[i])
            el.attr("title",tr(el.attr("data-title")))
            el.removeAttr("data-title")
         }
      }

      {
         var all = $(".tr")
         //console.log("Translate number " + all.length)

         for(var i = 0;i< all.length;i++)
         {
            var el = $(all[i])
            var key = el.html()
            el.html(tr(key))
            el.removeClass("tr")
         }
      }

		return;
   }
   
	if(key in _L)
	{

		if(_K in _L[key])
		{
			return _L[key][_K]
		}
	}

	if(typeof(_K) == "undefined" || _K == "en")
		return key;

	return key;
}

function $t(key, values) {
   if (typeof _K === 'undefined') return key;
   const res = key in _L && _K in _L[key] ? _L[key][_K] : key;

   return !values ? res : res.replace(/{(.*?)}/g, (_, k) => {
      return values[k];
   });
}
