Создаём мультиязычный проект в Quest3d. Введение в функции и ОО

Мы делаем лучше!
Список всех наших услуг >>

Создаём мультиязычный проект в Quest3d. Введение в функции и ОО

Подгрузка текста из внешнего файла в Quest3d

Создаём мультиязычный проект в Quest3d. Введение в функции и ОО

Всем привет smiley

Недавно была поставлена задача создать проект с поддержкой иностранных языков, вот я решил рассказать как это реализовать.

Создадим простую сценку с 2 кнопками переключения между Русским языком и Английским. При нажатии на них меняется язык интерфейса и любой текст в сцене.Начинаем с шаблона Simple Scene

Шаблон Simple Scene

Сверху в левом углу добавим две кнопки

добавим две кнопки

добавим две кнопки в квест3д

Создаём в проекте новую ChannelGroup, называем Language

добавить новый ChannelGroup

Добавим в интерфейс Language параметр типа Value называем Language id.

параметр типа 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.

Создаём мультиязычный проект в Quest3d

Вот как выглядят XML-документы для нашего проекта

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-документа

XML-документ

Далее перейдём в "Це-Ге-Рку" StartGroup и к событию OnClick наших кнопок подключим функцию Load Resource с параметрами Value 0 и 1 для Русского и Английского языка соответственно.

Функция с параметрами типа value

Теперь проверим наш проект запустив его и понажимаем на кнопки. В канале Text который вы видите на картинке ниже, должно подгружаться содержимое XML-документов.

подгрузка содержимого XML-документа

В следующем шаге нам нужно узнать сколько у нас элементов в XML. Для этого в структуре наших ХМЛ существует строчка с этим числом. Использовать будем канал XMLDOMCommand с командой QueryXML, ссылкой к нему подключим наш XMLDOMObject. Результат преобразуем из текстового формата (Text) в числовой (Value) через канал ValueOperator командой Text to integer value.

Text to integer value

Далее нам нужно отчищать наш заполненный (об этом позже) список. Используем канал OO InterfaceCommand команда Container -> Clear Container. К нему подключим канал OO InterfaceChannel, двойным кликом откроется окно в котором укажем место нахождения нашего списка Project -> Language -> Language -> Resource List. И подготовим цикл для следующих шагов. К каналу ForLoop к первой лапке подключим результат количества элементов в XML-документе.

Цикл ForLoop

Далее по очереди в цикле будем брать наши данные из XML.

по очереди в цикле будем брать наши данные из XML

Создадим новый класс Resource Item

Создадим новый класс

Создадим новый класс

Доработаем наш цикл и теперь полученными данными будем заполнять нашу таблицу.

полученными данными будем заполнять нашу таблицу

полученными данными будем заполнять нашу таблицу

Займёмся новой функцией которая будет брать данные из таблицы по индексу.

функция которая будет брать данные из таблицы по индексу

Эту функцию необходимо реализовать через канал CallOnGetChild

Создаём мультиязычный проект в Quest3d

Создаём мультиязычный проект в Quest3d

Создаём мультиязычный проект в Quest3d

Создаём мультиязычный проект в Quest3d

Теперь в любом месте нашего проекта мы может использовать нашу функцию Get Resource String. Вернемся к кнопкам и к лапкам Text подключим Get Resource String с индексами 0 и 1. К нашему объёмному тексту подключим Get Resource String с индексом 3.

Создаём мультиязычный проект в Quest3d

 

 Результаты перевода программы

Результаты перевода программы Результаты перевода программы [/important]

  • Сам XML документ можно пополнять новыми словами и предложениями. Главное указать количество таких элементов.
  • Количество подключаемых языков не ограничено, хоть переводите на Немецкий, Французский, хоте еще на 20 других.
  • Главное чтоб структура XML-документов была одинакова

Всем спасибо!