Мультиязычность
|
|
xMoonGuarDx | Дата: Пятница, 06 Марта 2015, 09:44 | Сообщение # 1 |
участник
Сейчас нет на сайте
| Собственно интересует вопрос и советы создателей игр, как реализуется мультиязычность обычно? Мне пришло в голову только два самых простых варианта. Первый - это где-то в одном месте в коде инициализируются все текстовые переменные. В зависимости от выбранного языка, им присваиваются нужные значения, потом уже все элементы к ним обращаются. Плюсы - относительная простота реализации. Минусы - вшивание переводов непосредственно в код. Второй вариант, это каждая переменная, которая содержит текст, читает его с файла в определенном формате и месте. В зависимости от языка, определяется нужный файл. Плюсы - легко поддерживать множество языков, даже для неофициального перевода. Т.е. переводчик просто взял и перевел обычный текстовый файл или несколько, и может играть. Перекомпиляция не нужна. Минусы - во-первых, могут возникнуть проблемы с размерами. Во-вторых, если переводчик что-то сделает не так, что-то пропустит, то игра выдаст ошибку в конкретном месте и скорее всего не сразу. В-третьих, думаю, что могут возникнуть проблемы с тем, что слишком много элементов обратятся к одному файлу. Мне кажется, что такие решения приходили в голову людям ещё в 90-е, и сейчас возможно существуют более хитрые механизмы. Может кто-то что-то сказать на эту тему?
Сообщение отредактировал xMoonGuarDx - Пятница, 06 Марта 2015, 09:46 |
|
| |
Ordan | Дата: Пятница, 06 Марта 2015, 09:57 | Сообщение # 2 |
Главный зомби
Сейчас нет на сайте
| xMoonGuarDx, второй вариант используется в большей части игр.
Цитата недели: Из-за леса, из-за гор, кишки, месиво, хардкор. (Берсерк ТВ-2)
Мои проекты ТЫК Мои видяхи на ютубэ ТЫК
Если ты споришь с идиотом, вероятно тоже самое делает и он.
|
|
| |
MrFiring | Дата: Пятница, 06 Марта 2015, 22:18 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Цитата xMoonGuarDx ( ) В-третьих, думаю, что могут возникнуть проблемы с тем, что слишком много элементов обратятся к одному файлу. А как насчет при запуске игры считать весь файл локализации и раскидать всё это дело по переменным.
|
|
| |
xMoonGuarDx | Дата: Пятница, 06 Марта 2015, 22:31 | Сообщение # 4 |
участник
Сейчас нет на сайте
| MrFiring, по моим прикидкам не имеет смысла. Получается, я добавляю ещё один уровень обмена данными, а никаких преимуществ видимых мне это не дает, даже наоборот лишнее неудобство из-за лишних действий. Так, например, мой код на шарпе будет выглядеть как-то так: Код linkLabelMenuLoad.Text = FileHelp.GetText("MenuLoad"); , и все, вся логика переключения и получения инфы скрыта в классе FileHelp. В случае же смешанном, мне придеться все равно делать этот класс, который сможет правильно считать данные, но так же и породить кучу текстовых переменных. Но я не избавляюсь от проблемы некорректного заполнения текстового файла. Очередной вопрос, который я не знаю, как решить, это переключения языка в игре. У меня в движке все основано на контроллах, они отображают ту или иную информацию. Первое, что приходит в голову, это некий метод, который вызывает при переключении языка в игре. Он как-то переопределяет текстовое значение, считывая его заново и перерисовывает элемент.
Сообщение отредактировал xMoonGuarDx - Суббота, 07 Марта 2015, 08:06 |
|
| |
goldsphere | Дата: Вторник, 10 Марта 2015, 17:32 | Сообщение # 5 |
заслуженный участник
Сейчас нет на сайте
| Я делал это так. Были файлы содержащие переменные c присвоенными им фразами и словами на разных языках, каждый файл - отдельный язык, и в коде я вставлял не текст, а брал значение нужных переменных
FinderX - Android Аркада
|
|
| |
Aevien | Дата: Вторник, 10 Марта 2015, 18:02 | Сообщение # 6 |
почти ветеран
Сейчас нет на сайте
| xMoonGuarDx, например в Cryengine это простой XML файл, который можно открыть в экселе и редактировать.
|
|
| |