Этот сайт создан как клуб русификаторщиков. Для нас существуют три основных правила.
1. Мы никому и ничего не должны!
2.Один пришедший на сайт толковый русификаторщик дороже всех пользователей.
3. Мы делаем русификаторы для своего сайта, но в оригинале ими могут пользоваться все в интернете.
Перевод делаю на основе немецкого. Английский интерфейс хочу оставить
MortenO410, переводить можно с английского языкового файла, он никуда не денется. В проекте Radialix укажите создавать новый файл с именем SeoSpider_ru.properties и все. После перевода полученный файл нужно просто поместить в папку к остальным языковым файлам.
В настройках программы язык интерфейса выбрать по языку системы (System). На системах с русской локалью интерфейс программы автоматом будет на русском языке.
Все языки, в том числе и английский, останутся доступными в любой момент, по желанию пользователя.
Конечно же, если у пользователя установлена ось отличная от русского, то интерфейса на русском у него не будет. В этом случае можно вручную в файлах конфигурации программы ScreamingFrogSEOSpider.l4j.ini и ScreamingFrogSEOSpiderCli.l4j.ini, которые находятся в папке приложения по месту его установки, убрать признак комментария у параметра -Duser.language и указать для него значение ru, т.е. получится вот так -Duser.language=ru. Об этом, кстати, написано в самих файлах конфигурации.
Да, еще момент! В программе есть ещё одно место с языковыми файлами, в которых находятся строки интерфейса (диалоги настроек, отладка и прочее), отсутствующие в основном языковом файле. Это файл utils-1.0-SNAPSHOT.jar из папки "lib" в каталоге с установленной программой.
Таким образом необходимо сделать ещё языковой файл Utils_ru.properties.
Подводя итог вышесказанному. Чтобы интерфейс программы стал на русском достаточно сделать и добавить языковые файлы: 1) SeoSpider_ru.properties для файла ScreamingFrogSEOSpider.jar (подпапка "translations"); 2) Utils_ru.properties для файла utils-1.0-SNAPSHOT.jar (подпапка "translations"); 3) В ScreamingFrogSEOSpider.l4j.ini и ScreamingFrogSEOSpiderCli.l4j.ini указать параметр -Duser.language=ru.
В настройках программы язык интерфейса выбрать по языку системы (System). На системах с русской локалью интерфейс программы автоматом будет на русском языке.
А можно добавить в соответствующее меню Russian чтобы выбиралось не через (System)?
Чтобы интерфейс программы стал на русском достаточно сделать и добавить языковые файлы: 1) SeoSpider_ru.properties для файла ScreamingFrogSEOSpider.jar (подпапка "translations"); 2) Utils_ru.properties для файла utils-1.0-SNAPSHOT.jar (подпапка "translations"); 3) В ScreamingFrogSEOSpider.l4j.ini и ScreamingFrogSEOSpiderCli.l4j.ini указать параметр -Duser.language=ru.
Еще есть и третий ресурс в котором находятся строки для перевода, это файл: controls_de.properties
который находится в javafx-controls-17.0.9-ea+c36-win.jar
А можно добавить в соответствующее меню Russian чтобы выбиралось не через (System)?
Да, можно. Для этого нужно отредактировать SupportedLanguage.class в файле utils-1.0-SNAPSHOT.jar по пути "ukcoscreamingfrogutilslanguagemanager".
Этот файл можно найти по одному из имён языков, которые отображаются в списке выбора. К примеру я использовал для поиска имя "English (UK)" - строка нашлась только в файле SupportedLanguage.class.
Самый простой вариант создания возможности выбора Русского языка интерфейса - это замена одного из языков (кроме Английского) в списке на Русский.
ВАЖНО! Перед началом каких-либо модификаций с любыми файлами приложения обязательно сделайте их резервную копию.
Вариант I
Используем инструмент InJarTranslator. Он работает с файлами JAR напрямую, поэтому извлекать их них ничего не нужно. Запускаем инструмент, открываем файл utils-1.0-SNAPSHOT.jar, идём по пути "ukcoscreamingfrogutilslanguagemanagerSupportedLanguage", пролистывая список (или используем инструмент поиска), и изменяем значения выбранного языка, например, Итальянского, на Русский. Замену нужно сделать для идентификатора языка, его названия и аббревиатуры.
ITALIAN -> RUSSIAN Italiano (Italia) -> Russian (Russia) it -> ru
После редактирования получится вот так:
Нажимаем кнопку "Сохранить JAR". Инструмент сообщит об успешном выполнении операции. После этого Русский будет в списке доступных языков вместо Итальянского.
Вместо инструмента InJarTranslator можно использовать древний инструмент InClassTranslator. На удивление он без проблем справился с файлом SupportedLanguage.class:
Но в отличие от InJarTranslator, придётся извлечь файл SupportedLanguage.class из utils-1.0-SNAPSHOT.jar, а после редактирования вставить обратно, заменив исходный.
Вот и все. Работы на полминуты.
Теперь вы знаете, как можно сделать возможность выбора Русского языка в настройках программы, хотя для этого пришлось пожертвовать другим языком.
Если же хочется сделать все по "фэн-шую", а именно добавить, то необходимо потратить немного больше времени.
Теперь собственно добавление Русского языка в существующий список выбора. Для этого необходимо декомпилировать файл SupportedLanguage.class в исходник SupportedLanguage.java, отредактировать его, добавив запись о русском языке, и скомпилировать обратно в файл формата .class.
Итак, извлекаем файл SupportedLanguage.class из utils-1.0-SNAPSHOT.jar. Для декомпиляции в исходный код можно воспользоваться как специализированными инструментами, например, Bytecode Viewer, или используя специализированные онлайн службы, например, Java Decompiler Online (коротко - JDec).
Для примера возьмем онлайн сервис - JDec. На главной странице загружаем файл SupportedLanguage.class и получаем исходник.
Справа вверху щелкаем по строке SupportedLanguage.java и загружаем полученный исходник к себе на ПК.
Открываем его текстовом редакторе, например, Notepad++. Будем редактировать. Исходная кодировка файла UTF-8, а формат конца строк - Unix. Не трогаем и не изменяем их! Вам потребуются минимальные знания по программированию Java. Нужно просто добавить языковой идентификатор, имя и название языка, действуя так, как это сделано для уже имеющихся языков.
В начале кода сценария идет объявление массива с данными поддерживаемых языков:
По аналогии с этим списком, после строки ITALIAN("Italiano (Italia)", "it") и перед знаком точки с запятой, ставим запятую и с новой строки вводим строку RUSSIAN("Русский (Россия)", "ru"):
На этом редактирование завершено, сохраняем сделанные изменения.
Теперь самое интересное. Компилировать обратно в class-файл нужно в той же версии Java, которую использовали для сборки исходной версии SupportedLanguage.class. Для этого изучаем спецификацию формата .class.
Первые четыре байта (u4 - magic) - это магическое число, которые определяют формат файла .class. Оно никогда не изменяется и равно CAFEBABE. Следующие 2 байта (u2 - minor_version) - младшая версия. Еще следующие 2 байта (u2 - major_version) - старшая версия.
Остальные данные нам не нужны, главное - версия. Открываем исходный файл SupportedLanguage.class в шестнадцатеричном редакторе и смотрим версию class-файла:
Младшая версия - 0. Старшая версия - 3D, в десятичном формате 61. Теперь ищем в инете, какой выпуск компилятора Java соответствует версии 61 class-файла. Например здесь можно узнать, что это Java 17.
Идем на страницу загрузок Java и загружаем пакет JDK 17 для разработчиков на платформе Windows. Если у вас другая платформа, то выбираете соответствующую.
Устанавливаем, перегружаем ПК. Я делал все это на виртуальном ПК.
Перед компиляцией необходимо воссоздать исходные условия, при которых была выполнена сборка оригинальных файлов программы, и подготовить зависимости.
Под исходными условиями имеется в виду структура каталогов, где находится файл, который необходимо собрать. В данном случае мы знаем, что файл SupportedLanguage.class находится в файле utils-1.0-SNAPSHOT.jar по пути "ukcoscreamingfrogutilslanguagemanager".
Зависимости - это другие файлы (или библиотеки), без которых сборка исходного файла будет невозможной. В любых исходниках эти зависимости указываются в самом начале кода. В данном случае в файле SupportedLanguage.java указаны следующие зависимости (смотрите в директивах import):
uk.co.screamingfrog.utils.i18n.UtilsKeys - это файл UtilsKeys.class по пути "ukcoscreamingfrogutilsi18n"; uk.co.screamingfrog.utils.utils.Translatable - это файл Translatable.class по пути "ukcoscreamingfrogutilsutils".
На системную библиотеку java.util.Optional не обращаем внимание - она уже имеется после установки Java.
В свою очередь у этих файлов могут быть свои зависимости и т.д. Таким образом, чтобы не морочить себе голову выискиванием всех зависимостей, проще при компиляции нашего файла использовать все содержимое подкаталога "uk" из файла utils-1.0-SNAPSHOT.jar.
Итак, поехали.
1) Создайте на диске С: папку с коротким именем, например, "LANG", C:LANG - этот каталог будет корневым для компиляции файла.
2) Распакуйте в папку "LANG" папку "uk" из файла utils-1.0-SNAPSHOT.jar со всем содержимым (C:LANGuk).
3) Скопируйте в папку "languagemanager" наш модифицированный файл SupportedLanguage.java. Полный путь к нему будет выглядеть так:
4) В папке "LANG" (C:LANG) создайте каталог с именем файл JAR, из которого мы извлекали файл SupportedLanguage.class, т.е. с именем "utils-1.0-SNAPSHOT" без расширения jar. В эту папку компилятор выведет собранный исходный файл.
По итогу у вас должно получиться так:
Компиляцию нужно выполнять из начального каталога (см. пункт 1), т.е. C:LANG. Открываем в этом каталоге окно командной строки (с правами администратора) и вводим следующую строку:
здесь javac - компилятор командной строки java; -encoding UTF-8 - параметр кодировки файла - UTF-8; -d utils-1.0-SNAPSHOT - параметр вывода скомпилированного файла - папка "utils-1.0-SNAPSHOT"; ukcoscreamingfrogutilslanguagemanagerSupportedLanguage.java - относительный путь и имя исходного файла для компиляции.
... и нажимаем клавишу "Ввод". Будет выполнена компиляция.
Компилятор выдал 1 предупреждение о небезопасной операции. Чтобы узнать в каком месте кода это произошло, необходимо выполнить перекомпиляцию файла с параметром -Xlint:unchecked. Но если вы не программист на языке Java, то этот вам ни о чём не скажет. Поэтому в данном случае игнорируем это предупреждение. Главное, чтобы не было ошибок.
Идём в папку "utils-1.0-SNAPSHOT" и берём там новый файл SupportedLanguage.class (не пугайтесь - компилятор воссоздал структуру каталогов для этого файла, т.е. так, как это действительно в оригинальном файле utils-1.0-SNAPSHOT.jar).
Теперь копируем этот файл в utils-1.0-SNAPSHOT.jar по месту установки программы, подтверждая его замену.
Теперь запускаем программу и идем в настройки языка. Русский язык появился в списке выбора наряду с другими языками.
Таким образом мы успешно добавили Русский в список доступных языков и предоставили пользователю возможность его выбора.
Еще есть и третий ресурс в котором находятся строки для перевода, это файл: controls_de.properties, который находится в javafx-controls-17.0.9-ea+c36-win.jar
Это компонент JavaFX, который использовался при создании программы. Не уверен, что из него читаются строки. Хотя все возможно. Если добавите языковой файл русского (controls_ru.properties), то лишним он, думаю, не будет.
Вместо инструмента InJarTranslator можно использовать древний инструмент InClassTranslator
При редактировании данным инструментом файла *.class как преобразовать обратно полученный файл с расширением в *.class?
Потому что я при использовании MobiTrans после редактирования файла *.class получив 3 файла на выходе (GA4ColumnHeaderType.class.rus, GA4ColumnHeaderType.class.txt, GA4ColumnHeaderType.class.loc) и просто в файле GA4ColumnHeaderType.class.rus корректирую расширение на GA4ColumnHeaderType.class. В результате получается файл с переводом