Моддинг в Bannerlord: Локализация


Моддинг в Bannerlord: Локализация 

Оригинал статьи - https://docs.bannerlordmodding.com/_csharp-api/localization/

Сопутствующие статьи:
TextObject
MBTextManager

Разработка локализуемого модуля

Любой игровой текст можно реализовать таким образом, чтобы его можно было локализовать. Для этого при разработке модуля следует придерживаться трех основных правил:

  1. Строки, которые могут быть видны в интерфейсе, должны храниться в объектах класса TextObject.
  2. Каждая такая строка должна иметь уникальный идентификатор (ID).
  3. Каждая локализуемая строка должна быть включена в файл std_module_strings_xml.xml в папке ...\Mount & Blade II Bannerlord\Modules\YourModName\ModuleData\Languages\
Примечания по использованию TextObjects

Пожалуйста, рассмотрите возможность использования дополнительных свойств при настройке информации о сложных объектах в TextObject. Это может облегчить вашу жизнь и стать настоящей палочкой-выручалочкой для людей, которые будут переводить мод. Например, если вам нужно упомянуть персонажа в какой-либо строке, вы можете просто сохранить его имя в результате TextObject, и это поможет, но перевод строки на другие языки может стать сложнее. В качестве альтернативы вы можете сохранить в TextObject несколько свойств персонажа, включая Name и Gender. Тогда, даже если вам не нужен пол в этой конкретной строке на английском языке, его можно использовать в качестве условного фактора при переводе.

     

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


Примечания к идентификаторам строк

String ID - это строковый ключ произвольной длины и содержания без пробелов и специальных символов. Не рекомендуется использовать длинные строковые идентификаторы, поскольку это сказывается на производительности. Кроме того, идентификаторы строк являются глобальными, поэтому даже если две разные строки с одинаковым идентификатором строки будут созданы и использованы в разных игровых модулях, они все равно будут конфликтовать (и тогда могут произойти некоторые довольно неприятные вещи). Следовательно, не рекомендуется регулярно использовать семантически значимые ключи в качестве строковых идентификаторов. Вместо этого используйте для этого буквенно-цифровые строковые коды, которые выглядят следующим образом: {=zmR6sT03}. На данный момент TaleWords и большинство разработчиков игр используют 8-значные буквенно-цифровые строковые коды с помощью генерации случайных строковых идентификаторов. Вы можете использовать этот сервис для генерации случайных ключей: https://www.random.org/strings/. Это, однако, основа для дальнейшего размышления над этим вопросом для сообщества моддеров.

Любая локализуемая строка должна начинаться с идентификатора строки:

private const string exampleString = "{=stringID}Some text";
public static readonly TextObject exampleTextObject = new TextObject (exampleString);

Примечания к std_module_strings_xml 

Каждая локализуемая строка должна быть включена в файл std_module_strings_xml.xml в папке ..\Mount & Blade II Bannerlord\Modules\YourModName\ModuleData\Languages\. Язык игры по умолчанию - английский, и текстовый процессор ожидает, что каждая строка, которую вы определите в коде, будет английской. Поэтому создание std_module_strings_xml.xml с <tag language="English" /> будет просто для справки - из него не будут загружаться тексты игр, но он может быть использован переводчиками модулей для создания их языковых версий (переводов).

Вот пример std_module_strings_xml.xml для вышеприведенного exampleString и conditionalString:

<?xml version="1.0" encoding="utf-8"?>
<base xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" type="string">
    <tags>
        <tag language="English" />
    </tags>
    <strings>
        <string id="stringID" text="Some text" />
        <string id="conditionalStringID" text="This proposal is on cooldown for {NUMBER_OF_DAYS} {?NUMBER_OF_DAYS.PLURAL_FORM}days{?}day{\?}." />      
    </strings>
</base>

Перевод игрового модуля 

Для перевода игрового модуля вам необходимо создать копию каждого XML-файла в папке ..\Mount & Blade II Bannerlord\Modules\ModName\ModuleData\Languages\

и поместить их в папку ..\Mount & Blade II Bannerlord\Modules\ModName\ModuleData\Languages\LanguageTagShort\ 

Тогда вам придется вручную изменить "English" в <tag language="English" /> на язык перевода.

*Начиная с версии e.1.4.2, игра автоматически определяет идентификатор каждого языка из каждого файла каждого модуля и добавляет его в меню игры. В более ранних версиях, изменение языка в игре на новый могло привести к сбою, если этот идентификатор языка также не был добавлен в ...\Mount & Blade II Bannerlord\GUI\Fonts\Languages.xml.

Будьте осторожны с тем, что каждый идентификатор языка является отдельным объектом для игры, даже если они семантически означают один и тот же язык, поэтому, например, если у вас есть некоторые файлы xml, которые используют <tag language="Russian" />, они будут несовместимы с файлами xml, которые используют <tag language="Русский" /> и только один из них будет использоваться (выбранный в настоящее время в настройках), в то время как каждая строка из другого набора вернется к языку по умолчанию.

После определения идентификатора языка каждая текстовая строка должна быть переведена с исходными идентификаторами строк и сохранением всех переменных. В приведенном выше примере:

<?xml version="1.0" encoding="utf-8"?>
<base xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" type="string">
    <tags>
        <tag language="Русский" />
    </tags>
    <strings>
        <string id="stringID" text="Какой-то текст" />
        <string id="conditionalStringID" text="Это предложение может быть внесено через {NUMBER_OF_DAYS} {?NUMBER_OF_DAYS.PLURAL_FORM}дней{?}день{\?}." />      
    </strings>
</base>

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





- используйте эту кнопку если вы обнаружили ошибку/искажение содержимого/отсутствие контента в новости или если хотите сообщить администрации о выходе новой версии мода и т.п.

Комментариев 2

Толмач
vasul
Офлайн 26 августа 2020 19:47 поделиться
Лучше бы оставили как Варбанде.


Толмач
Тур
Офлайн 2 октября 2020 22:17 поделиться
Цитата: vasul
Лучше бы оставили как Варбанде.
Мне кажется эта система гибче, похоже на то, как сделано в Сталкере. Просто очень много файлов и разбросано всё, и это затрудняет поиск.


Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Онлайн

Сейчас на сайте: 86
Гостей: 83

Пользователи: 

Последние комментарии

MOD 108 heroes
iskanderzp, Вчера, 09:16
Цитата: epilectпридет добрый дядька тот который iskanderzp,) и все тебе объяснит...Ну, спасибо на...
MOD 108 heroes
epilect, Вчера, 02:25
Dobrynya, Терпение и труд все перетрут).А если серьезно,то мод один из лучших и играется не так...
MOD 108 heroes
Dobrynya, Вчера, 01:11
До войны с лордами нормально дожить не могу. Сильные очень. Из профессий брал: пастуха - здоровье...
MOD 108 heroes
Dobrynya, Вчера, 00:38
Как в это играть? Играю за Чжао, воюют против Ша. Нашел лорда, у него по числу и качеству армия...
Как русифицировать моды?
Xan Kreagor, 25 июля 2024 00:57
Kmyeh, ... но раз queine переводят как королеву ... Скорее уж тогда царёк и королевна (в...
Как русифицировать моды?
Kmyeh, 24 июля 2024 09:41
Xan Kreagor, Не знаю что за fulcher, но раз queine переводят как королеву, то fulcher видимо...
Как русифицировать моды?
Xan Kreagor, 23 июля 2024 21:54
Доброго времени суток. Простите, если вопрос покажется вам не совсем по теме, но если тут есть...
MOD NOLDORION WORLDS
Dimar Leh, 20 июля 2024 11:17
Кстати советую один онлайн переводчик, неплохая помощь по...
MOD 1429 : la Guerre de Cent Ans - Steel Edition
Влад Сагайдачний, 19 июля 2024 22:55
Здравствуйте,  возникла проблема, пролистал всё обсуждение и так и не нашёл идентичную проблему....