Многоязычный интерфейс

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Многоязычный интерфейс

Сообщение Maelstrom » 31 май 2007, 07:34

Sanja: Перенёс обсуждение из гостевой сюда.

Эххх, надо мне Барионикса поскорее переводить. :)

Хотя, думаю, сложностей дофига будет.
Айв кнгенгах Йог-Сотот

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Сообщение Максим Кич » 31 май 2007, 14:01

Maelstrom писал(а):Эххх, надо мне Барионикса поскорее переводить. :)

Хотя, думаю, сложностей дофига будет.
С переводом на английский сложностей не будет. Вот наоборот — это толстый пушной зверёк. Ибо падежи.

Прохождение квеста: берётся n литров пива и студент-филолог. К филологу последовательно применяется пиво и тексты для перевода. На выходе получаем пьяного студента и переведенную на английский игру.

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

Замечание: и студенты-филологи и молодые преподавательницы бывают cursed. В случае со студентом с вероятностью 1/2 игра будет переведена на албанский диалект английского, либо не переведена вовсе. В случае с преподавательницей происходит Chaotic Effect, включающий, но не ограничивающийся: телепортацию в КВД, свадьбу, встречу с отслужившим в ВДВ женихом преподавательницы, задрейненную. нервную систему и незачёт по предмету.
Dump the screen? [y/n]

Аватара пользователя
Sanja
Администратор
Сообщения: 791
Зарегистрирован: 24 ноя 2006, 12:25
Откуда: Новосибирск
Контактная информация:

Сообщение Sanja » 01 июн 2007, 00:34

А пиво/что-то покрепче и тексты для перевода могут примениться к отслужившему ВДВ жениху преподавательницы! И далее по цепочке. :)

Учи английский + смотри реализацию перевода Angband. Сложностей там нету.

P.S.: Можно кстати и Сержем Алхимиком посоветоваться. У него есть практический пример русско-англоязычного проекта в виде NorseWorld.

ADB

Сообщение ADB » 01 июн 2007, 07:57

Sanja писал(а):ADB, тем не менее от http://www.google.com/language_tools?hl=ru мурашки бегут. Действительно архи-мощная вещь.
4 example: "Guest. All the issues / suggestions / comments on the site here."
Это все объясняет :wink:
Максим Кич писал(а):Замечание: и студенты-филологи и молодые преподавательницы бывают cursed. В случае со студентом с вероятностью 1/2 игра будет переведена на албанский диалект английского, либо не переведена вовсе. В случае с преподавательницей происходит Chaotic Effect, включающий, но не ограничивающийся: телепортацию в КВД, свадьбу, встречу с отслужившим в ВДВ женихом преподавательницы, задрейненную. нервную систему и незачёт по предмету.
Жесть! :D
Sanja писал(а):P.S.: Можно кстати и Сержем Алхимиком посоветоваться. У него есть практический пример русско-англоязычного проекта в виде NorseWorld.
Кстати, очень даже правильный подход у Сергея, в его проекте. Текст сообщений хранится в отдельном файле, что упрощает подмену языка. 8)

Аватара пользователя
Sanja
Администратор
Сообщения: 791
Зарегистрирован: 24 ноя 2006, 12:25
Откуда: Новосибирск
Контактная информация:

Сообщение Sanja » 01 июн 2007, 11:08

Да уж, хошорую картошку курят в рес. Беларусь :)

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 01 июн 2007, 12:20

Текст сообщений хранится в отдельном файле, что упрощает подмену языка.
Да просто тексты - это херня. Засунул в string table и спи спокойно. Конечно, большие трактаты переводить сложно, но всё таки можно. Аллаир вот, после предложения перевести им же составленные описания монстров на английский быстренько слинял в оффлайн :)


А вот как быть, допустим, с сообщениями во время боя? У меня же они из туёвой хучи составных частей складываются, причём порядок и принцип построения в английской версии может быть вообще другой.
Последний раз редактировалось Maelstrom 01 июн 2007, 12:21, всего редактировалось 1 раз.
Айв кнгенгах Йог-Сотот

Аватара пользователя
Sanja
Администратор
Сообщения: 791
Зарегистрирован: 24 ноя 2006, 12:25
Откуда: Новосибирск
Контактная информация:

Сообщение Sanja » 01 июн 2007, 12:21

В VB есть условная компиляция?

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 01 июн 2007, 12:22

Кого?
Айв кнгенгах Йог-Сотот

Аватара пользователя
Sanja
Администратор
Сообщения: 791
Зарегистрирован: 24 ноя 2006, 12:25
Откуда: Новосибирск
Контактная информация:

Сообщение Sanja » 01 июн 2007, 12:28

Ну типа ты коде пишешь что-то вроде

Код: Выделить всё


  Вывести("Шмяк тя " + Monster.Name + " кувалдой, крикнул " + Hero.Name);

 Вывести(Hero.Name + " makes strong punch to " + Monster.Name);
Значение х, у тебя лежит в файле настроек компиляции. И в зависимости от этого значения ты можешь создать русский дистрибутив программы, либо английский. Т.е. если х = Английский, то строчка с #if х = Русский и соответсвующий ей код с выводом русского текста будет игнорироваться, а выйдет английский текст.

Ну это я разумеется несколько образно описал. Для большего просветления прочти вот эту ссылку

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 01 июн 2007, 13:14

Ё моё, спасибо! Я даже не знал о такой штуке :) Теперь большинство вопросов отпадает.
Айв кнгенгах Йог-Сотот

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Сообщение Максим Кич » 01 июн 2007, 15:49

Да вообще, тоже сомнительная вещь. Мне кажется, что текст хранить отдельно. У меня для каждого языка есть файлы вида:

Код: Выделить всё

mui_you Вы
run_into_wall На вашем пути - 
door_already_open уже открыта
he_open открыл
she_open открыла
it_open открыло
they_open открыли
you_open открыли
lock_picked Вы взломали замок
lockpick_failed Вам не удалось взломать замок
И в коде, скажем, на открытие двери уже пишется вроде:

Код: Выделить всё

 NE_PutMessage(MUI_GetFull(Sender)+' '
                      +MUI_GetFull(Gender+'_open')+' '
                      +MUI_GetFull('open_'+Name));
Вообще, хорошим тоном считается разделение кода и оформления. Хотя, предлагать свой код в качестве примера хорошего тона я бы не стал :oops:

Впрочем, и это тоже не очень хороший вариант, потому что в разных языках слова в предложении могут идти в разном порядке, поэтому надо делать поддержку шаблонов. Т.е. чтобы в файле прописывалось что-нибудь вроде:

Для английского

Код: Выделить всё

%sender %hashave[%gender] opened %door_type door
Для русского

Код: Выделить всё

%sender %open[%gender] %door_type[ablative] дверь
Тогда действительно можно будет строить красивые и грамотные фразы на любом языке, с нормальными числительными, родами, падежами и проч.[/code]

UPD:
Только сейчас заметил, что уже было:
Кстати, очень даже правильный подход у Сергея, в его проекте. Текст сообщений хранится в отдельном файле, что упрощает подмену языка.
Кстати, надо бы это перенести в отдельную тему по поводу муёвости рогаликов (интересно, как слово «муёвость» воспримет автоматический переводчик?»
Dump the screen? [y/n]

Аватара пользователя
BigBoots
Сообщения: 43
Зарегистрирован: 25 ноя 2006, 18:28
Контактная информация:

Сообщение BigBoots » 01 июн 2007, 19:59

Максим Кич писал(а): И в коде, скажем, на открытие двери уже пишется вроде:
А gettext уже не рулит?
Бедные, бедные любители Windows. :)
--
BigBoots

Аватара пользователя
Sanja
Администратор
Сообщения: 791
Зарегистрирован: 24 ноя 2006, 12:25
Откуда: Новосибирск
Контактная информация:

Сообщение Sanja » 09 июн 2007, 11:02

Так, ладно. Пожалуй выскажусь на эту тему.

1. В рогаликах нет особого смысла в разделении кода и данных для оформления интерфейса. Ибо сильный удар по читабельности кода. ("Хотя, предлагать свой код в качестве примера хорошего тона я бы не стал" (с) Кич - ну дык... :) ) Значит строки с выводом сообщений об атаках, смертях, эффектах и прочих событиях пишем прямо в соответствующих функциях.

2. Во внешних файлах хранить исключительно типизированную/табличную информацию, т.е. полные хар-ки монстров, вещей, рас, классов и т.п. Смотрим Angband/ToME.

3. Склонения при формировании сообщений в русском языке. Решайте сами :) У меня реализация следующая. В файле данных, например монстров, лежат такие строки.

Код: Выделить всё

name="Гнолл"
grammar="м1о"
А функция вывода, например, следующая

Код: Выделить всё

addMessage(hero.name + " наносит удар по "+ sklMsg(monster, padDatelnyi)
Где sklMsg - функция склоняющая слово/словосочетание/фразу в указанном падеже. В данном случае Monster.name воспримется как существительное мужского рода в единственном числе, являющееся одушевлённым. Получится "Герой наносит удар по гноллу".

Возьмём другой пример.

Код: Выделить всё

name=Меч
grammar="м2н"
Т.е. мужской род, множественное число, неодушевлённый.

Код: Выделить всё

addMessage(hero.name + " поднимает 145 " + sklMsg(item, padVinitelnyi)
Получится "Герой поднимает 145 мечей".

Итого по склонениям. Если вы делаете игру в которой часто используются табличные данные в различных ситуациях. Т.е. вам приходится часто склонять некоторые слова по падежам. Есть смысл написать/отыскать модуль реализующий подобные свойства. В другом случае лучше написать пару вариантов для родительного и винительного падежей.

Позже дам ссылку на сайт с отличнейшим склонятором в исходном коде. Лучше него пока ничего не видел.

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 09 июн 2007, 13:36

Не жадничай, покажи функцию sklMsg :)
Айв кнгенгах Йог-Сотот

ADB

Сообщение ADB » 09 июн 2007, 21:18

Склонятор - вещь занятная. :)
Но, как показывает практика, лучше все-таки не пожалеть себя и заранее просклонять нужные выражения. 8)

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 37 гостей