В первой статье про ChimbaBench я пообещал, что реализую возможность переводить моё приложение на разные языки, не то чтобы это было важно, для меня не проблема работать с интерфейсом на русском/английском языке, да и "претензии" были к Godot Engine относительно локализации проектов:
Но раз уж и пообещал, значит нужно сделать, тем более это действительно полезный функционал, который в будущем лишь поспособствует распространению моего бенчмарка, хотя и это меня не особо заботит, ведь в первую очередь я создаю для себя.
Я не буду заострять внимание на мелочах, и код может менять свой вид от скриншота к скриншоту, впрочем, это очевидно, ведь я работаю над ним...
Сейчас идет работа над интерфейсом бенчмарка в основном.
Здесь уже "тест шрифта" вынесен в отдельное окно, пока то не очень похоже на окно, но я же говорил про "зачатки".
Дальше я подумал о своих возможностях, все языки точно не смогу вывести в один лист, а значит нужно предоставить пользователю возможность самому вписать текст на любом языке, и я сделал.
Теперь у любого пользователя доступно текстовое поле, в которое можно ввести тест и посмотреть на его отображение с текущим активным шрифтом:
А еще я перенес настройки шрифта в отдельную функцию, и да, я не использую "темы" предоставленные Godot Engine для изменения шрифтов, ибо мне лучше через скрипт делать такие вещи, хотя может я просто становлюсь "красноглазым":
Далее я уже занялся своим "обещанием" и набросал пару функций, подобное я уже реализовал в Chi Calculator, потому я просто часть кода перенес из другого своего проекта, и переделал для ChimbaBench:
Вот и положено начало, теперь можно просто открыть файл конфигурации в папке "Localization", и перевести на разные языки мой бенчмарк, и не нужны никакие CSV файлы с ключами дешифровки, хотя мой проект и так с открытым исходным кодом...
Конечно, сейчас можно перевести только заголовок приложения, но всему своё время.
Далее я взялся за работу над окнами, добавил кнопки, в окне тестирования шрифта добавил строку, которая в будущем будет отображать название текущего шрифта, в общем, окна теперь стали похожи на окна, их можно открыть и закрыть:
Да, про окно с настройками я не забыл, и пока оставлю его в таком виде, ибо нужно решить одну небольшую проблему, прежде чем продолжать работу над интерфейсом.
Наверняка уже некоторые заметили, что у некоторых элементов стандартный шрифт "тонкий", так вот, я каждому элементу присваиваю шрифт вручную, прямо в середине кода, жирный такой блок с кучей зеленых штуковин:
Пришло время "оптимизировать" этот кусок кода:
Преобразование завершено, теперь мне не нужно делать "COPY/PASTE" функций, мне достаточно просто вписать путь к элементу в массив, а там уже цикл сам присвоит каждому элементу текущий шрифт, или иное свойство:
Так гораздо лучше, конечно же в комментариях набегут "эксперты" и начнут рассказывать, как всё ужасно, и чтобы я вообще бросил проект, ведь под Linux якобы полно бенчмарков... Но я скажу так, оставьте своё "очень важное" мнение на этот счёт при себе :)
Чтобы не прописывать лишний раз элементы в каждом месте где они могут быть нужны, я вынес массив в главный скрипт, и прописал полные пути до элементов, таким образом к элементам есть доступ из любого места проекта, достаточно просто взять значения из главной ноды.
Теперь можно снова поработать над локализацией, ничего сложного, просто рутина, которую возможно "оптимизирую" позже.
Как оно работает? Очень просто, присваивает текст элементам из файла конфигурации локализации, нужно только добавить настройку размера шрифта, будет полезно для разных языков, ибо сейчас интерфейс подстраивается под размер строки:
Чтобы упростить задачу я разбил массив на разные части, каждая часть будет отвечать за свою "зону", и так мне будет проще брать нужные значения, да и вдруг я захочу разные шрифты назначить разным разделам...
Теперь мне не нужно будет вручную прописывать путь к элементу при изменениях в проекте, достаточно один раз изменить строку в массиве, и всё само подтянет в коде, есть конечно и проблемы такого подхода, но тут следует напомнить всем язвительным "экспертам": Я не программист, потому делаю как мне удобно, не по нраву мой подход? Сделайте свой "идеальный исходный код", и мастурбируйте на него хоть до посинения, я делаю не ради красоты кода, а ради удобства пользователя.
Так как возня с локализацией мне немного надоела, было решено набросать окно сообщения, да, весьма грубо, да, отобразит только одно сообщение за раз, но оно работает, и наверняка будет полезно.
Изначально я хотел это окно сделать автоматическим, но что если пользователь отойдёт на минуту, а окно в этот момент появится и само исчезнет? Будет весьма неприятно...
А потом я подумал, ведь одно сообщение за раз это весьма неудобно может быть, и сделал полноценное текстовое поле, только в режиме для чтения, чтобы пользователь случайно не стёр информацию.
Хотя в итоге я отказался от того, чтобы делать поле в режиме только для чтения, и вот, теперь окно стало намного информативнее:
Со стороны программирования это не сложно, если окно не видно, то показывает окно и выводит сообщение, если окно открыто, то просто добавляет новое сообщение к предыдущему, элементарно:
И на этом я пожалуй завершу работу над текущей версией ChimbaBench.
-
--
---
Заключение
Пора бы заканчивать работу над ChimbaBench v1.2, если продолжу и дальше разработку, то это уже будет сразу версия 2.0, а мне это сейчас не нужно.
Точно, совсем забыл, окно со ссылками на блог и GitHub, только окно уведомлений нужно будет вытащить на передний плат, но это уже работа для следующих версий бенчмарка:
На этом точно хватит для версии 1.2, как и обещал, функционал для простой локализации приложения я реализовал, пока лишь частично, но уже реализовал, осталось только дорабатывать уже созданное и создавать новое.
Проверяю на всякий случай в среде Linux:
И конечно оставляю ссылку на репозиторий: ( github.com/Shedou/ChimbaBench ).
Благодарю за внимание, больше интересных статей в блоге Hard-Workshop.