diff --git a/jadx-gui/src/main/java/jadx/gui/utils/NLS.java b/jadx-gui/src/main/java/jadx/gui/utils/NLS.java
index 7432b204e841d733546a438d32396f2e4e76a927..4b6762299ad3d2a6ca2a932a938fe0b430db40a1 100644
--- a/jadx-gui/src/main/java/jadx/gui/utils/NLS.java
+++ b/jadx-gui/src/main/java/jadx/gui/utils/NLS.java
@@ -38,6 +38,7 @@ public class NLS {
LANG_LOCALES.add(new LangLocale("de", "DE"));
LANG_LOCALES.add(new LangLocale("ko", "KR"));
LANG_LOCALES.add(new LangLocale("pt", "BR"));
+ LANG_LOCALES.add(new LangLocale("ru", "RU"));
LANG_LOCALES.forEach(NLS::load);
diff --git a/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties b/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties
new file mode 100644
index 0000000000000000000000000000000000000000..4847c843e1b4a72219c04923d2c789eacb8c2903
--- /dev/null
+++ b/jadx-gui/src/main/resources/i18n/Messages_ru_RU.properties
@@ -0,0 +1,343 @@
+language.name=Русский
+
+menu.file=Файл
+menu.view=Вид
+menu.recent_projects=Недавние проекты
+menu.no_recent_projects=Нет недавно открытых проектов
+menu.preferences=Параметры
+menu.sync=Синхр. файлы с редактором
+menu.flatten=Плоская структура пакетов
+menu.heapUsageBar=Использование ОЗУ
+menu.alwaysSelectOpened=Выбирать открытый файл/класс
+menu.navigation=Навигация
+menu.text_search=Поиск строк
+menu.class_search=Поиск классов
+menu.comment_search=Поиск комментариев
+menu.tools=Инструменты
+menu.deobfuscation=Деобфускация
+menu.log=Просмотр логов
+menu.help=Помощь
+menu.about=О программе
+menu.update_label=Версия %s уже доступна!
+
+file.open_action=Открыть файлы...
+file.add_files_action=Добавить файл
+file.open_title=Открыть файл
+file.open_project=Открыть проект
+file.new_project=Новый проект
+file.save_project=Сохранить проект
+file.save_project_as=Сохранить проект как...
+file.reload=Пересканировать файлы
+file.live_reload=Автосканирование
+file.live_reload_desc=Автоматически перезагружать файлы при внешних изменениях
+file.export_mappings_as=Экспортировать маппинги...
+file.save_all=Сохранить все
+file.export_gradle=Сохранить как Gradle проект
+file.save_all_msg=Выбрать папку для декомпилированных проектов
+file.exit=Выход
+
+start_page.title=Начальная страница
+start_page.start=Начать
+start_page.recent=Недавние проекты
+
+tree.sources_title=Код
+tree.resources_title=Ресурсы
+tree.loading=Загрузка...
+
+progress.load=Загрузка
+progress.export_mappings=Экспорт таблицы маппингов
+progress.decompile=Декомпиляция
+progress.canceling=Прерывание
+
+error_dialog.title=Ошибка
+
+search.previous=Назад
+search.next=Вперед
+search.mark_all=Выбрать все
+search.regex=Регулярные выражения
+search.match_case=Учитывать регистр
+search.whole_word=Поиск по словам
+search.find=Найти
+
+tabs.copy_class_name=Копировать имя
+tabs.close=Закрыть
+tabs.closeOthers=Закрыть другие
+tabs.closeAll=Закрыть все
+tabs.code=Код
+tabs.smali=Smali
+
+nav.back=Назад
+nav.forward=Вперед
+
+message.taskTimeout=Задача отменена по таймауту в %d мс.
+message.userCancelTask=Задача прервана пользователем.
+message.memoryLow=Jadx запущен с малым количеством доступной оперативной памяти. Перезапустите увеличив Heap Size
+message.taskError=Выполнение задачи закончено с ошибкой (смотрите лог для подробностей).
+message.errorTitle=Ошибка
+message.load_errors=Ошибка прогрузки.\nКоличество ошибок: %d\nНажмите OK, чтобы открыть лог.
+message.no_classes=Классы не найдены, нечего декомпилировать!
+
+message.saveIncomplete=Сохранение не завершено.
%s
%d классов или ресурсов не сохранено!
+message.indexIncomplete=Индексирование некоторых классов пропущено.
%s
%d классов не индексировано, и не будет отображаться в результатах поиска!
+message.indexingClassesSkipped=JaDX запущен с малым количеством ОЗУ. %d классов не индексировано.
Если вы хотите их индексировать, перезапустите JaDX с большим Heap Size.
+
+heapUsage.text=JADX использует: %.2f ГБ из %.2f ГБ
+
+common_dialog.ok=Ok
+common_dialog.cancel=Отмена
+common_dialog.add=Добавить
+common_dialog.update=Обновить
+common_dialog.remove=Убрать
+
+file_dialog.supported_files=Поддерж. файлы
+file_dialog.load_dir_title=Импортировать папку
+file_dialog.load_dir_confirm=Импортировать все файлы из директории?
+
+search_dialog.open=Открыть
+search_dialog.cancel=Отмена
+search_dialog.open_by_name=Поиск по тексту:
+search_dialog.search_button=Поиск
+search_dialog.search_history=История поиска
+search_dialog.auto_search=Автопоиск
+search_dialog.search_in=Поиск вхождений:
+search_dialog.class=Класс
+search_dialog.method=Метод
+search_dialog.field=Поле
+search_dialog.code=Код
+search_dialog.options=Опции поиска:
+search_dialog.ignorecase=Игнорировать регистр
+search_dialog.load_more=Загрузить еще
+search_dialog.load_all=Загрузить все
+search_dialog.stop=Стоп
+search_dialog.results_incomplete=Найдено %d+
+search_dialog.results_complete=Найдено %d (поиск завершен)
+search_dialog.col_node=Вхождения
+search_dialog.col_code=Код
+search_dialog.sort_results=Сортировка результатов
+search_dialog.regex=Регулярные выражения
+search_dialog.active_tab=Только активные вкладки
+search_dialog.comments=Комментарии
+search_dialog.resource=Ресурсы
+search_dialog.keep_open=Оставлять поиск открытым
+search_dialog.tip_searching=Поиск...
+
+usage_dialog.title=Поиск использований
+usage_dialog.label=Использования:
+
+comment_dialog.title.add=Добавить комментарий
+comment_dialog.title.update=Обновить
+comment_dialog.label=Комментарий:
+comment_dialog.usage=Используйте Shift + Enter для переноса строки
+
+log_viewer.title=Просмотр логов
+log_viewer.log_level=Уровень лога:
+
+about_dialog.title=О программе JADX
+
+preferences.title=Параметры
+preferences.deobfuscation=Деобфускация
+preferences.appearance=Внешний вид
+preferences.decompile=Декомпиляция
+preferences.plugins=Плагины
+preferences.project=Проект
+preferences.other=Прочее
+preferences.language=Язык
+preferences.lineNumbersMode=Тип переноса строк
+preferences.jumpOnDoubleClick=Переход по двойному клику
+preferences.useAlternativeFileDialog=Использовать альтернативный файлпикер
+preferences.check_for_updates=Проверять наличие новых версий
+preferences.useDx=DX/D8 для конвертации java байткода
+preferences.decompilationMode=Режим декомпиляции
+preferences.codeCacheMode=Кеширование кода
+preferences.showInconsistentCode=Показывать некорректный код
+preferences.escapeUnicode=Кодирование unicode
+preferences.replaceConsts=Замена констант
+preferences.respectBytecodeAccessModifiers=Исходные модификаторы доступа
+preferences.useImports=Использовать импорты
+preferences.useDebugInfo=Отладочная информация
+preferences.inlineAnonymous=Объединять анонимные классы
+preferences.inlineMethods=Объединять методы
+preferences.extractFinally=Вычленять finally блоки
+preferences.fsCaseSensitive=Учитывать регистр в файловой системе
+preferences.skipResourcesDecode=Не декодировать ресурсы
+preferences.useKotlinMethodsForVarNames=Kotlin методы как имена полей
+preferences.commentsLevel=Уровень лога операций
+preferences.autoSave=Автосохранение
+preferences.threads=Количество используемых потоков
+preferences.excludedPackages=Исключенные пакеты
+preferences.excludedPackages.tooltip=Список пакетов, которые не будут декомпилироваться и индексироваться (экономит ОЗУ)
+preferences.excludedPackages.button=Изменить
+preferences.excludedPackages.editDialog=Список пакетов, которые не будут декомпилироваться и индексироваться (экономит ОЗУ)
например: android.support
Разделитель - одинарный пробел
+preferences.cfg=Методы генерации графиков CFG (в "dot" формате)
+preferences.raw_cfg=Генерировать необработанные графики CFG
+preferences.font=Шрифт редактора Java
+preferences.smali_font=Шрифт редактора smali
+preferences.laf_theme=Тема приложения
+preferences.theme=Тема редактора
+preferences.start_jobs=Автоматическая декомпиляция
+preferences.select_font=Изменить
+preferences.select_smali_font=Изменить
+preferences.deobfuscation_on=Включить деобфускацию
+preferences.deobfuscation_map_file_mode=Режим обработки маппингов
+preferences.deobfuscation_min_len=Минимальная длина имени
+preferences.deobfuscation_max_len=Максимальная длина имени
+preferences.deobfuscation_source_alias=Иcпользовать атрибут SOURCE
+preferences.deobfuscation_kotlin_metadata=Использовать метаданные Kotlin
+preferences.deobfuscation_res_name_source=Расшифровка имен ресурсов
+preferences.save=Сохранить
+preferences.cancel=Отмена
+preferences.reset=Сброс
+preferences.reset_message=Сбросить настройки на значения по умолчанию?
+preferences.reset_title=Сбросить настройки
+preferences.copy=Скопировать в буфер обмена
+preferences.copy_message=Все настройки скопированы в буфер обмена
+preferences.rename=Переименовать идентификаторы
+preferences.rename_case=И исправить проблемы именования
+preferences.rename_valid=И сделать их верными
+preferences.rename_printable=И сделать их доступными для печати
+preferences.search_group_title=Поиск
+preferences.search_results_per_page=Результатов на страницу (0 - без лимита)
+preferences.res_file_ext=Расширения файлов ресурсов ('xml|html', * для всех)
+preferences.res_skip_file=Пропускать ресурсы больше чем (в МБ)
+
+msg.open_file=Пожалуйста, откройте файл
+msg.saving_sources=Сохранение ресурсов
+msg.language_changed_title=Язык изменен
+msg.language_changed=Новый язык применится при следующем запуске программы
+msg.project_error_title=Ошибка
+msg.project_error=Проект не может быть загружен
+msg.cmd_select_class_error=Ошибка выбора класса\n%s\nЭтот класс не существует.
+msg.cant_add_comment=Невозможно добавить комментарий сюда
+
+popup.bytecode_col=Показать Dalvik байткод
+popup.line_wrap=Перенос строк
+popup.undo=Отменить
+popup.redo=Вернуть
+popup.cut=Вырезать
+popup.copy=Копировать
+popup.paste=Вставить
+popup.delete=Удалить
+popup.select_all=Выбрать все
+popup.frida=Копировать как хук frida
+popup.xposed=Копировать как хук Xposed
+popup.find_usage=Найти использования
+popup.go_to_declaration=Перейти к объявлению
+popup.exclude=Исключить
+popup.exclude_packages=Исключить пакеты
+popup.add_comment=Комментарий
+popup.search_comment=Поиск комментариев
+popup.rename=Переименовать
+popup.search=Найти "%s"
+popup.search_global=Глобальный поиск "%s"
+
+exclude_dialog.title=Выбор пакетов
+exclude_dialog.ok=OK
+exclude_dialog.select_all=Выбрать все
+exclude_dialog.deselect=Убрать
+exclude_dialog.invert=Инвертировать
+
+confirm.save_as_title=Подтверджение сохранения
+confirm.save_as_message=%s уже существует.\nВы хотите его перезаписать?
+confirm.not_saved_title=Сохранить проект
+confirm.not_saved_message=Сохранить текущий проект перед выходом?
+
+certificate.cert_type=Type
+certificate.serialSigVer=Version
+certificate.serialNumber=Serial number
+certificate.cert_subject=Subject
+certificate.serialValidFrom=Valid from
+certificate.serialValidUntil=Valid until
+certificate.serialPubKeyType=Public key type
+certificate.serialPubKeyExponent=Exponent
+certificate.serialPubKeyModulus=Modulus
+certificate.serialPubKeyModulusSize=Modulus size (bits)
+certificate.serialSigType=Signature type
+certificate.serialSigOID=Signature OID
+certificate.serialMD5=MD5 Fingerprint
+certificate.serialSHA1=SHA-1 Fingerprint
+certificate.serialSHA256=SHA-256 Fingerprint
+certificate.serialPubKeyY=Y
+
+apkSignature.signer=Signer
+apkSignature.verificationSuccess=Signature verification succeeded
+apkSignature.verificationFailed=Signature verification failed
+apkSignature.signatureSuccess=Valid APK signature v%d found
+apkSignature.signatureFailed=Invalid APK signature v%d found
+apkSignature.errors=Errors
+apkSignature.warnings=Warnings
+apkSignature.exception=APK verification failed
+apkSignature.unprotectedEntry=Files that are not protected by APK signature v1. Unauthorized modifications to these entries can only be detected by APK signature v2 and higher.
+
+issues_panel.label=Проблемы:
+issues_panel.errors=%d ошибок
+issues_panel.warnings=%d предупреждений
+issues_panel.tooltip=Открыть просмотр логов
+
+debugger.process_selector=Выбрать процесс для отладки
+debugger.step_into=Перейти (F7)
+debugger.step_over=Прыжок (F8)
+debugger.step_out=Выйти (Shift + F8)
+debugger.run=Запустить (F9)
+debugger.stop=Остановить
+debugger.pause=Пауза
+debugger.rerun=Повторить
+debugger.cfm_dialog_title=Выйти во время отладки
+debugger.cfm_dialog_msg=Вы действительно хотите остановить дебаггер?
+
+debugger.popup_set_value=Задать значение
+debugger.popup_change_to_zero=Изменить на 0
+debugger.popup_change_to_one=Изменить на 1
+debugger.popup_copy_value=Копировать значение
+
+logcat.pause=Остановить
+logcat.start=Возобновить
+logcat.clear=Очистить
+
+logcat.error_fail_start=Ошибка запуска логгера
+logcat.process=Процесс
+logcat.level=Уровень лога
+logcat.default=По умолчанию
+logcat.verbose=Verbose
+logcat.debug=Debug
+logcat.info=Info
+logcat.warn=Warn
+logcat.error=Error
+logcat.fatal=Fatal
+logcat.silent=Silent
+logcat.logcat=Лог
+logcat.select_attached=Прикрепленный процесс
+logcat.select_all=Выделить все
+logcat.unselect_all=Отменить выделение
+
+set_value_dialog.label_value=Значение
+set_value_dialog.btn_set=Присвоить
+set_value_dialog.title=Присвоить значение
+set_value_dialog.neg_msg=Невозможно присвоить значение
+set_value_dialog.sel_type=Выберите тип значения
+
+adb_dialog.addr=Адрес
+adb_dialog.port=Порт
+adb_dialog.path=Путь к ADB
+adb_dialog.launch_app=Запустить приложение
+adb_dialog.start_server=Запустить ADB сервер
+adb_dialog.refresh=Обновить
+adb_dialog.tip_devices=%d устройств
+adb_dialog.device_node=Устройство
+adb_dialog.missing_path=Вы должны указать путь к ADB, для того чтобы запустить сервер
+adb_dialog.waiting=Ожидание подключения к ADB...
+adb_dialog.connecting=Подключение к ADB серверу %s на порту %s...
+adb_dialog.connect_okay=Подключено к серверу, адрес: %s:%s
+adb_dialog.connect_fail=Невозможно подключиться к ADB
+adb_dialog.disconnected=ADB сервер отключен
+adb_dialog.start_okay=ADB запущен на порту: %s.
+adb_dialog.start_fail=Ошибка запуска ADB сервера на порту: %s!
+adb_dialog.forward_fail=Не удалось перейти из-за неизвестной ошибки
+adb_dialog.being_debugged_msg=Похоже что к этому процессу уже подключен отладчик. Вы хотите продолжить?
+adb_dialog.unknown_android_ver=Ошибка парсинга версии Android. Использовать Android 8 по умолчанию?
+adb_dialog.being_debugged_title=Этот процесс уже занят
+adb_dialog.init_dbg_fail=Ошибка инициализации отладчика
+adb_dialog.msg_read_mani_fail=Ошибка парсинга AndroidManifest.xml
+adb_dialog.no_devices=Нет устройств для запуска приложения
+adb_dialog.restart_while_debugging_title=Перезапустить отладчик
+adb_dialog.restart_while_debugging_msg=Запущен процесс отдадки приложения. Вы действительно хотите перезапустить сессию?
+adb_dialog.starting_debugger=Запуск отладки...