Автор Тема: Русификация Dwarf Fortress  (Прочитано 629554 раз)

0 Пользователей и 4 Гостей просматривают эту тему.

Оффлайн insolor

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1064
  • Adequate Reverse Engineer
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1035 : 20 Февраля 2013, 12:11:04 »
Теперь у меня есть гордая надпись "его волосы морщинистый".
Желательно посмотреть как это предложение выглядит в английской версии.

Оффлайн Askin

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1036 : 20 Февраля 2013, 16:43:49 »
Цитировать
Желательно посмотреть как это предложение выглядит в английской версии.
Не получится, ибо крепость уже удалена. Ставил её только для того, чтобы перевод посмотреть.
 Хотелось бы узнать, что там с окончаниями? Когда готовы или вообще планы есть?

Оффлайн insolor

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1064
  • Adequate Reverse Engineer
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1037 : 20 Февраля 2013, 22:51:24 »
Цитировать
Желательно посмотреть как это предложение выглядит в английской версии.
Не получится, ибо крепость уже удалена. Ставил её только для того, чтобы перевод посмотреть.
 Хотелось бы узнать, что там с окончаниями? Когда готовы или вообще планы есть?
Склонение слов в смысле? Вряд ли когда-нибудь будет, пока нет исходников. Ну или Toady вынесет наконец-то текст наружу с возможностью склонения слов.

Оффлайн Askin

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1038 : 21 Февраля 2013, 22:09:47 »
Цитировать
Склонение слов в смысле? Вряд ли когда-нибудь будет, пока нет исходников. Ну или Toady вынесет наконец-то текст наружу с возможностью склонения слов.
А если искать вначале группу слов?
She has blue eyes.

Ищем вначале "blue eyes" и даем перевод.
Только потом ищем слова отдельно друг от друга blue и Eyes.

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

Или так не получится?

Оффлайн Arex

  • Старожил
  • ****
  • Сообщений: 407
  • Ленивый дварфовод
    • Просмотр профиля
    • На викидварфии
Re: Русификация Dwarf Fortress
« Ответ #1039 : 22 Февраля 2013, 07:36:51 »
А если искать вначале группу слов?
She has blue eyes.

Ищем вначале "blue eyes" и даем перевод.
Только потом ищем слова отдельно друг от друга blue и Eyes.

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

Или так не получится?

Где искать-то? Мы переводим слова непосредственно в Dwarf Fortress.exe и в raw-файлах. Там "She has blue eyes" состоит из 4 отдельных независимых блоков текста, в каждом из которых содержится одно слово, причем последние 2 слова берутся из raw. Причем такие блоки нельзя менять местами, удалять и т.д.  Если мы сделаем как в "правильном" переводе "У нее синие глаза", то есть заменим 'she' - "у нее", 'has' - на пустое место, то во всех предложениях игры 'she' будет переводиться как "у нее", независимо от контекста. Конечно, не все блоки состоят из одного слова, бывают даже из нескольких предложений, но наиболее корявый перевод получается там, где стыкуются блоки.

Вот и получается, что для корректного перевода текущей методики недостаточно. Нужно либо доставать исходники, что на грани фантастики; либо ждать пока Toady сам добавит возможность перевода, что чуть менее фантастично, но тоже недалеко ушло от предыдущего; либо измыслить такую надстройку для DF, которая будет перехватывать уже сгенерированный текст (тот самый "She has blue eyes") и переводить его целиком. Разумеется, наиболее реален последний вариант, но здесь все упирается в техническую сторону вопроса. Если найдется кто-нибудь, кто напишет такую надстройку, тогда можно будет делать то, что ты пишешь: переводить не по блокам (как сейчас), а по произвольному сочетанию слов.
« Последнее редактирование: 22 Февраля 2013, 07:41:52 от Arex »

Оффлайн mialax

  • Постоялец
  • ***
  • Сообщений: 117
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1040 : 22 Февраля 2013, 08:46:46 »
"либо измыслить такую надстройку для DF, которая будет перехватывать уже сгенерированный текст (тот самый "She has blue eyes") и переводить его целиком."

Это как раз очень просто. Весь текст кроме "мысли и предпочтения" выводится через sdl_ttf.dll. Проблема в том, что различных сочетаний будет огромное количество и перебор всех вариантов на лету будет серьёзно тормозить. Если все-таки хочешь попробовать, то могу помочь с перехватом текста.

Оффлайн Skin36

  • Старожил
  • ****
  • Сообщений: 320
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1041 : 22 Февраля 2013, 09:15:39 »
"либо измыслить такую надстройку для DF, которая будет перехватывать уже сгенерированный текст (тот самый "She has blue eyes") и переводить его целиком."

Это как раз очень просто. Весь текст кроме "мысли и предпочтения" выводится через sdl_ttf.dll. Проблема в том, что различных сочетаний будет огромное количество и перебор всех вариантов на лету будет серьёзно тормозить. Если все-таки хочешь попробовать, то могу помочь с перехватом текста.
а зачем делать перебор всех сочетаний ? Можно же сделать небольшую внешнюю прогу, которая после перехвата будет строить фразы не путем перебора а добавлением окончаний и тп.

Оффлайн Arex

  • Старожил
  • ****
  • Сообщений: 407
  • Ленивый дварфовод
    • Просмотр профиля
    • На викидварфии
Re: Русификация Dwarf Fortress
« Ответ #1042 : 22 Февраля 2013, 09:42:51 »
"либо измыслить такую надстройку для DF, которая будет перехватывать уже сгенерированный текст (тот самый "She has blue eyes") и переводить его целиком."

Это как раз очень просто. Весь текст кроме "мысли и предпочтения" выводится через sdl_ttf.dll. Проблема в том, что различных сочетаний будет огромное количество и перебор всех вариантов на лету будет серьёзно тормозить. Если все-таки хочешь попробовать, то могу помочь с перехватом текста.

Я бы попробовал, только очень слабо представляю, как прикрутить какой-нибудь инструментарий к библиотеке. Как ты сделал отображение мыслей и предпочтений, я так и не понял.

Оффлайн insolor

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1064
  • Adequate Reverse Engineer
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1043 : 22 Февраля 2013, 10:18:49 »
Не нужно перебирать все сочетания. На входе есть текст, разделенный пробелами. Если этот кусок текста есть в словаре, переводим как есть. Иначе, разбиваем его на части, проверяем чем является каждое слово (существительное, прилагательное, глагол etc.), переводим каждое слово отдельно, при необходимости склоняем в соответствии с родом/числом/падежом, расставляем слова по правилам русской грамматики, объединяем в цельный текст, передаем оригинальной процедуре отрисовки. Всего делов-то - написать свой узкоспециализираванный переводчик :) В принципе - вполне реально.

Arex, все очень просто - исходники библиотеки SDL открыты :) Даже если бы не было исходников, можно было бы сделать библиотеку-переходник, как сделали разработчики DFhack.
« Последнее редактирование: 22 Февраля 2013, 10:30:35 от insolor »

Оффлайн mialax

  • Постоялец
  • ***
  • Сообщений: 117
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1044 : 22 Февраля 2013, 10:31:48 »
Я бы попробовал, только очень слабо представляю, как прикрутить какой-нибудь инструментарий к библиотеке. Как ты сделал отображение мыслей и предпочтений, я так и не понял.

Скачал исходники библиотек и дописал в них свой текст. :)
Возню с библиотеками могу взять на себя. От вас требуется написать функцию формата:
  Uint16* TranslRus(Uint16* text)
Текст в формате юникода.

Оффлайн Arex

  • Старожил
  • ****
  • Сообщений: 407
  • Ленивый дварфовод
    • Просмотр профиля
    • На викидварфии
Re: Русификация Dwarf Fortress
« Ответ #1045 : 22 Февраля 2013, 10:32:47 »
Не нужно перебирать все сочетания. На входе есть текст, разделенный пробелами. Если этот кусок текста есть в словаре, переводим как есть. Иначе, разбиваем его на части, проверяем чем является каждое слово (существительное, прилагательное, глагол etc.), переводим каждое слово отдельно, при необходимости склоняем в соответствии с родом/числом/падежом, расставляем слова по правилам русской грамматики, объединяем в цельный текст, передаем оригинальной процедуре отрисовки. Всего делов-то - написать свой узкоспециализираванный переводчик :)

Ага, а предварительно провести анализ на поиск имён и определение пола существ (хоть через тот же DFhack или непосредственно оперативки).

Arex, все очень просто - исходники библиотеки SDL открыты :) Даже если бы не было исходников, можно было бы сделать библиотеку-переходник, как сделали разработчики DFhack.

Поняяятненько.

Оффлайн insolor

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1064
  • Adequate Reverse Engineer
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1046 : 22 Февраля 2013, 10:34:25 »
Ага, а предварительно провести анализ на поиск имён и определение пола существ (хоть через тот же DFhack или непосредственно оперативки).
Думаю, во многих случаях было бы достаточно определения пола по местоимению "he/she", сейчас у нас даже такого нет.

Оффлайн Arex

  • Старожил
  • ****
  • Сообщений: 407
  • Ленивый дварфовод
    • Просмотр профиля
    • На викидварфии
Re: Русификация Dwarf Fortress
« Ответ #1047 : 22 Февраля 2013, 10:38:08 »
Возню с библиотеками могу взять на себя. От вас требуется написать функцию формата:
  Uint16* TranslRus(Uint16* text)
Текст в формате юникода.
Можно привести пример, как оно должно выглядеть?

Оффлайн insolor

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1064
  • Adequate Reverse Engineer
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1048 : 22 Февраля 2013, 11:16:54 »
Возню с библиотеками могу взять на себя. От вас требуется написать функцию формата:
  Uint16* TranslRus(Uint16* text)
Текст в формате юникода.
Можно привести пример, как оно должно выглядеть?
В этой функции уже в формализованном виде нужно описать все, что я описал словами несколькими постами выше :)

Оффлайн mialax

  • Постоялец
  • ***
  • Сообщений: 117
    • Просмотр профиля
Re: Русификация Dwarf Fortress
« Ответ #1049 : 22 Февраля 2013, 12:31:41 »

Можно привести пример, как оно должно выглядеть?

Ну вот вам пример. :)
Тут входной текст отправляется онлайн переводчику. Менее извращённых вариантов на работе у меня нет.

Uint16* TranslRus(Uint16* text)
{
   KeyNum = Control::IsKeyLocked( Keys::NumLock);
   if (KeyNum)
   {
      System::String ^inter = "                                                                                  ";
      System::String ^ chr = " ";
      System::String ^r;
      int leng = wcslen((wchar_t*)text);

             for ( int i =0; i < (int)wcslen((wchar_t *)text); i++)
             {
                chr = ((wchar_t)text).ToString();
                inter = inter->Insert(i, chr);
             }

            System::String ^url = "http://translate.yandex.ru/tr.json/translate?lang=en-ru&text=" + inter;
            WebRequest^ request = WebRequest::Create(url);
            request->Credentials = CredentialCache::DefaultCredentials;
            HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse());
            Stream^ dataStream = response->GetResponseStream();

            StreamReader^ reader = gcnew StreamReader( dataStream );

             r = reader->ReadToEnd();
            for ( int i =1; i< r->Length-1; i++)
               rez[i-1] = r;
            rez[r->Length-2] = 0;
            memcpy(cash_eng[h],text,sizeof(rez));
            text = rez;
            memcpy(cash_rus[h],rez,sizeof(rez));
            }
   return text;
}