Создаём мультиязычный проект в Quest3d. Введение в функции и ОО
Всем привет
Недавно была поставлена задача создать проект с поддержкой иностранных языков, вот я решил рассказать как это реализовать.
Создадим простую сценку с 2 кнопками переключения между Русским языком и Английским. При нажатии на них меняется язык интерфейса и любой текст в сцене.Начинаем с шаблона Simple Scene
Сверху в левом углу добавим две кнопки
Создаём в проекте новую ChannelGroup, называем Language
Добавим в интерфейс Language параметр типа Value называем Language id.
Теперь нам нужно подключить к нашему ChannelCaller (Load Recource) канал XMLDOMCommand. В списке выбрать Load XML(file). К нему подключить XMLDOMObject, в который будет подгружаться XML-документ с нашими переводами. Ко второй лапке XMLDOMCommand подключается путь к XML-документу. У нас будет 2 языка, следовательно подключим через ChannelSwitch (с базовым типом Text). Переключаться будет через параметр Language id. И подключим 2 канала типа Text в них пропишем пути к XML-документам. Текст конвертируем в абсолютный путь через канал TextOperator(выберите команду Convert releative to absolute path). Путь к файлам выглядит так:
- .\resources\russian.xml
- .\resources\english.xml
Это значит что в корневом каталоге проекта вам нужно создать папку resources и разместить там два XML-документа. Далее к ChannelCaller (Load Recource) подключим XMLDOMCommand, выберите команду GetXml. Ссылкой подключим наш XMLDOMObject и канал Text чтобы видеть результат загрузки XML.
Вот как выглядят XML-документы для нашего проекта
<?xml version="1.0"?><YourProject_strings> <item name="items_count"> <value>4</value> </item> <item name="ResourceString_0"> <value>Русский</value> </item> <item name="ResourceString_1"> <value>Английский</value> </item> <item name="ResourceString_2"> <value>Выберите язык</value> </item> <item name="ResourceString_3"> <value>Посетите сайт 3dlird.com</value> </item> </YourProject_strings>
<?xml version="1.0"?><YourProject_strings> <item name="items_count"> <value>4</value> </item> <item name="ResourceString_0"> <value>Russian</value> </item> <item name="ResourceString_1"> <value>English</value> </item> <item name="ResourceString_2"> <value>Choose Language</value> </item> <item name="ResourceString_3"> <value>Visit 3dlird.com</value> </item> </YourProject_strings>
Структура XML-документа
Далее перейдём в "Це-Ге-Рку" StartGroup и к событию OnClick наших кнопок подключим функцию Load Resource с параметрами Value 0 и 1 для Русского и Английского языка соответственно.
Теперь проверим наш проект запустив его и понажимаем на кнопки. В канале Text который вы видите на картинке ниже, должно подгружаться содержимое XML-документов.
В следующем шаге нам нужно узнать сколько у нас элементов в XML. Для этого в структуре наших ХМЛ существует строчка с этим числом. Использовать будем канал XMLDOMCommand с командой QueryXML, ссылкой к нему подключим наш XMLDOMObject. Результат преобразуем из текстового формата (Text) в числовой (Value) через канал ValueOperator командой Text to integer value.
Далее нам нужно отчищать наш заполненный (об этом позже) список. Используем канал OO InterfaceCommand команда Container -> Clear Container. К нему подключим канал OO InterfaceChannel, двойным кликом откроется окно в котором укажем место нахождения нашего списка Project -> Language -> Language -> Resource List. И подготовим цикл для следующих шагов. К каналу ForLoop к первой лапке подключим результат количества элементов в XML-документе.
Далее по очереди в цикле будем брать наши данные из XML.
Создадим новый класс Resource Item
Доработаем наш цикл и теперь полученными данными будем заполнять нашу таблицу.
Займёмся новой функцией которая будет брать данные из таблицы по индексу.
Эту функцию необходимо реализовать через канал CallOnGetChild
Теперь в любом месте нашего проекта мы может использовать нашу функцию Get Resource String. Вернемся к кнопкам и к лапкам Text подключим Get Resource String с индексами 0 и 1. К нашему объёмному тексту подключим Get Resource String с индексом 3.
Результаты перевода программы
- Сам XML документ можно пополнять новыми словами и предложениями. Главное указать количество таких элементов.
- Количество подключаемых языков не ограничено, хоть переводите на Немецкий, Французский, хоте еще на 20 других.
- Главное чтоб структура XML-документов была одинакова
Всем спасибо!
His lawyers said he would suffer a torturous and lingering death as executioners tried to find a...
https://zithromax.top - buy zithromax online without perscription De Grasse C, O Connor AM, Boulet...
lotensin meloxicam gout dosage Sometimes, at times of crisis, when diplomats fail to reach a...
https://doxycycline.world - sun exposure and doxycycline Kristensen B, Malm J, Carlberg B, et al
One should be aware that when using any herbs while undergoing ART such as IVF, interactions...