Здравствуйте, меня зовут Дмитрий. Я занимаюсь созданием компьютерных игр на Unreal Engine в качестве хобби. Пару дней назад я написал статью о редакторе квестов и диалогов. Ну раз вы написали диалоги для игры то наверно вы захотите их перевести на другие языки. В этой статье я опишу как работает модуль предназначены для локализации текста в Unreal engine.
Итак сначала надо включить его Editor Preferens > Experemental > Localization Dasbord. К сожалению модуль до сих пор является экспериментальным.
После этого надо перезагрузить Unreal engin. Как только вы это сделаете в меню Windows появится пункт Localization Dasbord. Заходим в него и видим вот что.
Здесь надо добавить новую культуру (Add new culture) и выбрать Native язык, это язык на котором написан ваш текст в моем случае это английски у вас наверно будет Русский.
Теперь надо определить откуда Unreal engine будет извлекать текст.
Во первых нужно сказать что Unreal engine будет извлекать текст из всех переменных тип которых FText (собственно это главное отличие этого типа от FString). Если у вас есть переменная FText но вы не хотите чтобы Unreal engine переводил этот текст, то это можно отключить:
Включив переключатель Gather from text files мы сможем извлечь текст из с++ файлов. По умолчанию текст будет извлекаться из ".h", ".cpp", ".ini" Естественно переменные в этих файлах должны быть определены как FText в с++ это делается так:
/* Top of File */
#define LOCTEXT_NAMESPACE "Your Namespace"
...
FText TestHUDText = LOCTEXT( "Your Key", "Your Text" )
...
#undef LOCTEXT_NAMESPACE
/* Bottom of File */
или так
FText TestHUDText = NSLOCTEXT( "Your Namespace", "Your Key", "Your Text" )
Включив переключатель Gather from Packages, Unreal engine будет извлекать текст из ассетов. По умолчанию стоит ".uasset" и ".umap".
У меня все выглядело так:
Теперь можно нажать кнопку «Gather text» и Unreal engine создаст файлы локализации. Переводить можно или прямо в Unreal engine или импортировать файл перевода и использовать редактор ".po" файлов. Я использовал Poedit.
Важно: После того как вы завершите перевод не забудьте нажать кнопку «Compile Text». А то перевод не появится в игре.
Для переключения текста в игре можно использовать функцию:
void AHUD_StoryGraph::ChangeLocalization(FString target)
{
FInternationalization::Get().SetCurrentCulture(target);
}
В качестве target нужно подставлять сокращения en — Английски, ru — Русский и так далее.
Важно: Чтобы увидеть перевод, игру надо запускать в Standalon Game режиме, если запустить во вьпорте то перевод вы не уведите.
При упаковке игры нужно зайти в Project setting > Packing и выбрать Include prerequisites, выбрать языки которые вы включите в игру и изменить параметр Intarnacialization support с English only на All.
Собственно все, теперь вы сможете локализовать вашу игру на все языки мира.
Вот пример
Поделиться с друзьями