Языковые файлы / X3 Terran Conflict (Земной конфликт)
X3 Terran Conflict / X3 Земной конфликт
 
X3 Terran conflict / Скрипты. Что это и с чем их едят. / Языковые файлы  
 

На сайте онлайн (человек): 129



 



Языковые файлы

Автор: Макс aka Malstrime

Скрипты. Что это и с чем их едят.

Языковые файлы.



Часть 1. Немного слов

Абсолютно все тексты, используемые игрой хранятся в языковом файле, начиная с окна запуска игры, заканчивая различными названиями кораблей, станций и т.п. Сделано это для удобства локализации - можно перевести игру на любой язык самому, а можно подредактировать уже существующий перевод. Впрочем, обо всем попорядку.

Что же представляет из себя языковой файл? Это обычный файл формата XML, который можно создать и/или редактировать блокнотом (рекомендуется все же для удобства использовать специальные программы, наподобие XML Notepad или Microsoft Visual Studio).

Часть 2. Структура языкового файла

Вот как выглядит "скелет" языкового файла:
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <language id="7">
  3.   <page id="число-номер_страницы" title="название_страницы(необязательно)" descr="описание_страницы(необязательно)">
  4.    <t id="число-номер_текста">Текст</t>
  5.   </page>
  6. </language>


<?xml version="1.0" encoding="UTF-8" ?> - сообщает о версии XML и кодировки текста. Это не надо трогать. Вообще.

<language id="7"/> - говорит нам о том, к какому языку идут заключенные в этот тег страницы. В зависимости от языка вместо 7 может идти номер региона (44 - английский, 33 - французский, 49 - немецкий, 48 - польский, 39 - итальянский).

<page id="число-номер_страницы"/> - говорит нам о том, на какой странице находятся заключенные в тег тексты.

<t id="число-номер_текста">Текст</t> - содержит номер текста на странице, и, собственно, сам текст.

На любой странице может быть сколько угодно текстов. Главное - уникальный номер текста, причем уникальность номера текста важна только лишь в пределах одной страницы.

Есть еще такая замечательная вещь, как ссылка на другой текст. Ссылка имеет вид {XX,YY}, где XX - номер страницы, а YY - номер текста.

  1. <page id="9001">
  2.   <t id="1901">Подвержен атаке</t>
  3.   <t id="1902">Корабль</t>
  4.   <t id="1324">Ваш {9001,1902} был {9001,1901}.</t> 
  5. </page>

При попытке вывести текст, содержащийся на странице 9001 с номером 1324, мы получим строку вида
Ваш Корабль был Подвержен атаке.


Часть 3. Имя языкового файла

Все языковые файлы имеют имя формата L0XX-YYYY.xml, где XX - номер региона (см. выше), а YYYY - номер текстового файла.

Изначально игра подгружает в игру только файл с номером 0001. Остальные файлы могут быть подгружены скриптами, для этого служит команда load text: id=XXXX. Стоит отметить, что сам по себе языковой файл никак не связан с собственным содержанием. То есть у нас есть "база" (id 0001) - основные тексты игры, подгружаемые автоматически, и некоторые "кусочки" (все остальные id), которые можно добавить в эту базу командой load text.
Что это значит? Пусть у нас есть 3 пронумерованных стакана (id 1001, 1052, 1395), в каждом из которых налита вода, и большая бездонная миска, в которой уже имеется некоторое кол-во воды (id 0001). Нам сказали вылить 1 (id 1001) и 2 (id 1052) стаканы в эту миску. Эта миска "пополнилась" на содержимое этих двух стаканов, а вода в третьем (id 1395) стакане, возможно, будет вылита позже. В качестве воды в данном случае выступает совокупность страниц и текстовых строк.

Хочется заметить, что содержимое страниц с одинаковыми номерами объединяется, и, если будут конфликты в номерах текстов, то текст останется тот, который подгрузится позже.

Часть 5. Форматирование текста внутри языкового файла

Как Вы уже могли заметить, не весь текст в игре представлен в белом цвете. В некоторых местах текст центрирован, в некоторых прижат к правому краю. За все операции с текстом отвечают форматирующие спецсимволы и теги. Что же они из себя представляют?

Форматирующие цвет спецсимволы представлены в виде \033<буква, обозначающая цвет> и могут быть использованы в любом месте текста. Цвет текста, находящегося справа от такого спецсимвола, будет изменен соответствующим образом до следующего подобного спецсимвола или перевода строки.
Спецсимвол, форматирующий не цвет текста только один - \n. Он служит для перевода строки.
Небольшая памятка:
СпецсимволЦвет
\033BСиний
\033CГолубой
\033GЗеленый
\033MМалиновый
\033RКрасный
\033WБелый
\033XЯрко-белый (стандарт для меню)
\033YЖелтый
\033ZСерый
\nПеревод строки (форматирующий, не для цвета!)


Помимо спецсимволов для изменения цвета текста (и не только) можно использовать теги.
Тег должен открываться и закрываться. Например, [b]<= открытие тега | А еще текст внутри данного тега должен быть желтым | закрытие тега =>[/b]. Помимо изменения цвета, как я уже говорил, теги могут менять его расположение, а также выполнять роль неких функций.

Также небольшая памятка:
ТегОписание
[b][/b]Текст отражается ярко-желтым цветом
[blue][/blue]То же голубым цветом
[red][/red]То же красным цветом
[green][/green]То же зеленым цветом
[justify][/justify]Текст выравнивается по краям
[center][/center]Текст центрируется
[left][/left]Текст выравнивается по левому краю
[right][/right]Текст выравнивается по правому краю
[title][/title]Текст отражается в виде заголовка по центру, подчеркнутый, весь остальной текст будет иметь отступ от него одну пустую стоку.


Теперь о тегах, выполняющих роль "неких функций".
ТегОписание
[author][/author]Текст, заключенный внутри, будет высвечен в графе "От кого" во входящем сообщении. Если этот тег присутствует, то он должен идти в самом начале сообщения.
[text cols='число колонок' colwidth='ширина колонки' colspacing='расстояние  между колонками']текст[/text]Тег использовался ранее, когда были доски объявлений. Ныне не актуален, впрочем...
Если этот тэг присутствует, он должен идти сразу за тэгом [author] (если тэг [author] также присутствует) или в самом начале тела сообщения. Закрывающий тэг [/text] безусловно обрывает текст сообщения. Параметры cols, colwidth и colspacing могут присутствовать или отсутствовать независимо друг от друга. В чем задается ширина колонки и расстояние между колонками - неясно. В режиме экрана 640x480 эти числа, похоже, совпадают с пикселями экрана. Для других режимов пропорции нужно высчитывать.
[select value='smt'][/select]Используется в команде send incoming question.


Иногда возникает потребность использовать непостоянные значения внутри текста. Нам на помощь приходит символ %s, а также такие команды, как:

1. <RetVar> = sprintf: fmt=<Var/String>, <Value>, <Value>, <Value>, <Value>, <Value> - форматирует строку <Var/String>
2. <RetVar> = sprintf: pageid=<Var/Number1> textid=<Var/Number2>, <Value>, <Value>, <Value>, <Value>, <Value> - форматирует текст с номером <Var/Number2> на странице <Var/Number1>.
3. write to player logbook: printf: fmt=<Var/String>, <Value>, <Value>, <Value>, <Value>, <Value> - аналог 1, только результат сразу записывает в бортовой журнал.
4. write to player logbook: printf: pageid=<Var/Number> textid=<Var/Number>, <Value>, <Value>, <Value>, <Value>, <Value> - аналог 2, только результат сразу записывает в бортовой журнал.
5. write to log file <Var/Number> append=<Var/Number> printf: fmt=<Var/String>, <Value>, <Value>, <Value>, <Value>, <Value> - аналог 1, только результат сразу записывает в лог-файл.
6. write to log file <Var/Number> append=<Var/Number> printf: pageid=<Var/Number> textid=<Var/Number>, <Value>, <Value>, <Value>, <Value>, <Value> - аналог 2, только результат сразу записывает в лог-файл.

Пригодится нам все это, например, в брифинге миссий... хотя нет, это уже MD. Пусть это будет сообщение бортового компьютера об установке того или иного оружия.
<t id="1000">%s установлено.</t>

Допустим, мы установили Импульсную пушку
  1. $item = Импульсная пушка
  2. $text = sprintf: pageid=13 textid=1000, $item, null, null, null, null

Результатом станет содержание в переменной $text строки "Импульсная пушка установлено".

То есть вся суть работы в том, что вместо %s подставляются значения <Value>. Каждый %s соответствует своему <Value> (первый %s первому <Value> и так далее).

Встречаются различные вариации %s (таблица-копипаст):
СпецсимволОписание
%d(Decimal) вставить десятичное значение, в отличии от %s строкового. То есть при попытке напечатать 0 - получается "пусто" или "null".
%!<n>sВставить значение не в общем порядке, а указанное в <n>. Например: Если в n указано 3, то будет вставлено значение Value3.
%<n>sВ этом месте строка раздвигается на количество символов указанное в <n>, на освободившиеся место записывается столько символов параметра, сколько поместится. Если параметр короче чем строка формируемая параметром, то выравнивание будет производится по правому краю отведенного места.
% - <n>sДействует также, как и спецсимвол %<n>s, с тем отличием, что выравнивание будет производится по левому краю отведенного места.



В качестве примера использования текстовых файлов, пожалуйста, ознакомьтесь с данным постом.



Скрипты. Что это и с чем их едят.

Автор: Макс aka Malstrime
Добавил(а): Макс aka Malstrime
Создано: 01.09.2011
Изменено: 23.09.2011
Количество изменений: 3
Просмотров: 4900

Оценка: 5
Голосов: 5

Ссылка на эту страницу:
<a href="https://x3tc.net/yazykovye-fajly_121.html">Языковые файлы</a>

BBCode:
[url=https://x3tc.net/yazykovye-fajly_121.html]Языковые файлы[/url]

Список игр