Русификатор OpenKore
Модератор: 4epT
-
- Энтузиаст
- Сообщения: 71
- Зарегистрирован: Сб ноя 03, 2007 9:55 am
Русификатор OpenKore
Здоровая конкурренция переводу от Denizka.
Выгодные отличия:
1) Перевод от первого лица (т.е. от лица бота ) с учётом контекста, попытка писать живым языком.
2) Переводится даже то, для чего не было строк в OpenKore.pot
3) Проект ещё не помер.
Инструкция по установке - в архиве.
--------------------------------
Крайняя версия перевода на 22.11.2007 достигла 31% (визуально это более 95% сообщений консоли, если конечно у вас нет гомункула ) и содержит в себе модификации ядра, направленные на исправление недоделок разработчиков в области возможностей перевода, посему крайне нежелательно пытаться ставить его на что-то помимо сборок SVN 2.0.5:6071-6073
Зы. Патчик для SVN выложен в теме. Однако, сдаётся мне, что он не последний на тему TF-образного безобразия.
Зы.Зы. Помощь приветствуется.
Выгодные отличия:
1) Перевод от первого лица (т.е. от лица бота ) с учётом контекста, попытка писать живым языком.
2) Переводится даже то, для чего не было строк в OpenKore.pot
3) Проект ещё не помер.
Инструкция по установке - в архиве.
--------------------------------
Крайняя версия перевода на 22.11.2007 достигла 31% (визуально это более 95% сообщений консоли, если конечно у вас нет гомункула ) и содержит в себе модификации ядра, направленные на исправление недоделок разработчиков в области возможностей перевода, посему крайне нежелательно пытаться ставить его на что-то помимо сборок SVN 2.0.5:6071-6073
Зы. Патчик для SVN выложен в теме. Однако, сдаётся мне, что он не последний на тему TF-образного безобразия.
Зы.Зы. Помощь приветствуется.
- Вложения
-
- OpenKoreRUS-005-alpha.rar
- Крайняя версия перевода на 22.11.2007
- (116.37 КБ) 299 скачиваний
Последний раз редактировалось barmagloth Пн дек 10, 2007 8:42 pm, всего редактировалось 14 раз.
Маньяк-мультовод с Raggame/Loki
- piroJOKE
- Модератор
- Сообщения: 8205
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Re: Русификатор OpenKore
Уже было. Кто найдет ссылку, закиньте сюда в тему!barmagloth писал(а):"Кто тут, к примеру, в цари крайний? Никого? Тогда я первый буду!"
Добавлено спустя 1 минуту 38 секунд:
barmagloth
Сразу та же проблема, что и всегда: у любителей использовать /console/ в актомакросах - наверняка что-то поломаеццо.
Добавлено спустя 8 минут 46 секунд:
Ага, это труженик DeniZka брался за русификацию...
Предварительное обсуждение было тут:
viewtopic.php?p=29970#29970
А оригинальная тема с реальной русЕФЕкацией тут:
viewtopic.php?t=2662
-
- Энтузиаст
- Сообщения: 71
- Зарегистрирован: Сб ноя 03, 2007 9:55 am
На русЕФЕкации у меня аллергия. Посему вышеозначенную не ставил и даже не пытался. Проще самому сделать заново.
Выдлядит вроде неплохо...
Выдлядит вроде неплохо...
А фразочки типа "You attack Monster" - это как раз то, что разработчики поленились вывести из кода в языковой файл.[ 87/ 21] Использую Double Strafe (ур. 10) на монстра Metaling (0) - Dmg: 776 (задержка 53.5)
[ 87/ 16] Использую Double Strafe (ур. 10) на монстра Metaling (0) - Dmg: 706 (задержка 53.5)
Получен опыт: 492/249 (0.48%/0.32%)
Появился предмет Iron Ore (1) x 1 (260, 291)
Появился предмет Jubilee (2) x 1 (261, 290)
Цель уничтожена.
Добавлено в инвентарь Iron Ore (9) x 1 - Non-usable
Добавлено в инвентарь Jubilee (7) x 1 - Non-usable
Атакую: Monster Metaling (0)
[ 87/ 7] Использую Double Strafe (ур. 10) на монстра Metaling (0) - Dmg: 710 (задержка 53.5)
[ 87/ 7] You attack Monster Metaling (0) - Dmg: 187 (delay 53.5)
Получен опыт: 492/249 (0.48%/0.32%)
Цель уничтожена.
Атакую: Monster Metaling (1)
[ 87/ 3] Использую Double Strafe (ур. 10) на монстра Metaling (1) - Dmg: 762 (задержка 53.5)
[ 87/ 3] You attack Monster Metaling (1) - Dmg: 186 (delay 53.5)
Цель уничтожена.
Получен опыт: 492/249 (0.48%/0.32%)
Сижу, отдыхаю.
Последний раз редактировалось barmagloth Пн ноя 19, 2007 9:05 pm, всего редактировалось 1 раз.
Маньяк-мультовод с Raggame/Loki
-
- Энтузиаст
- Сообщения: 71
- Зарегистрирован: Сб ноя 03, 2007 9:55 am
Неа, не проще. Я перевожу (и правлю), глядя на работающий бот.
Если на экране будет что-то вроде "Авто-генерация Пароля Администратора по-умолчанию...", то придётся долго чесать репу, думая, а что же имелось в виду?
Впрочем, если никому это не надо - прошу стереть тему. Сам в своё удовольствие попользуюсь.
Если на экране будет что-то вроде "Авто-генерация Пароля Администратора по-умолчанию...", то придётся долго чесать репу, думая, а что же имелось в виду?
Впрочем, если никому это не надо - прошу стереть тему. Сам в своё удовольствие попользуюсь.
Маньяк-мультовод с Raggame/Loki
-
- Энтузиаст
- Сообщения: 71
- Зарегистрирован: Сб ноя 03, 2007 9:55 am
Там уже 20%
Ладно, уговорил, посмотрю творчество конкуррента.
Добавлено спустя 59 минут 22 секунды:
Нашёл, что именно генерит самую противную непереводимую строчку.
Файл misc.pm, строка 2857
Осталось понять, как из этого "универсального" безобразия сделать две раздельных "return TF" для случаев "бот бьёт моба" и "моб бьёт бота".
Добавлено спустя 41 минуту 30 секунд:
Патчег. Возможно корявый, но у меня работает.
В misc.pm меняем суб attack_string к следующему виду:
Не уверен, нужны ли для работы новых строчек русификации изменения в openkore.pot, но на всякий случай - одну строчку меняем на две:
Перевод достиг 21,5%
Ладно, уговорил, посмотрю творчество конкуррента.
Добавлено спустя 59 минут 22 секунды:
Нашёл, что именно генерит самую противную непереводимую строчку.
Файл misc.pm, строка 2857
Код: Выделить всё
return TF("%s %s %s - Dmg: %s (delay %s)\n",
$source->nameString,
$source->verb('attack', 'attacks'),
$target->nameString($source),
$damage, $delay);
Добавлено спустя 41 минуту 30 секунд:
Патчег. Возможно корявый, но у меня работает.
В misc.pm меняем суб attack_string к следующему виду:
Код: Выделить всё
sub attack_string {
my ($source, $target, $damage, $delay) = @_;
assert(UNIVERSAL::isa($source, 'Actor')) if DEBUG;
assert(UNIVERSAL::isa($target, 'Actor')) if DEBUG;
if ($source->isa('Actor::You')) {
return TF("You attack %s - Dmg: %s (delay %s)\n", $target->nameString($source),
$damage, $delay);
} else {
return TF("%s attacks you - Dmg: %s (delay %s)\n", $source->nameString,
$damage, $delay);
};
}
Код: Выделить всё
#: ../Misc.pm:2858
#, perl-format
msgid "You attack %s - Dmg: %s (delay %s)\n"
msgstr ""
#: ../Misc.pm:2861
#, perl-format
msgid "%s attacks you - Dmg: %s (delay %s)\n"
msgstr ""
Последний раз редактировалось barmagloth Вт ноя 20, 2007 12:56 pm, всего редактировалось 1 раз.
Маньяк-мультовод с Raggame/Loki
-
- Энтузиаст
- Сообщения: 71
- Зарегистрирован: Сб ноя 03, 2007 9:55 am
-
- Энтузиаст
- Сообщения: 71
- Зарегистрирован: Сб ноя 03, 2007 9:55 am
Потихоньку, полегоньку, правлю недоделки разработчиков, которые заключаются в том, что им лениво написать TF("<сакраментальная фраза>") и они пишут просто "<сакраментальная фраза>".
Лог кусочка боя (перевод 23,5% ):
Лог кусочка боя (перевод 23,5% ):
Код: Выделить всё
Вижу портал - moc_fild11 -> moc_fild17 (212, 29) - (0)
Смена карты - moc_fild17.gat (218, 366)
Вижу НПЦ - Следы боя#8 (213, 358) (ID 52627) - (0)
Вижу портал - moc_fild17 -> moc_fild11 (218, 369) - (0)
Монстр Frilldora (0) кастует Cloaking на себя (время 200ms)
Монстр Frilldora (0) применяет Cloaking на себя : Ур. 65535
[dist=17.2] Monster Frilldora (0): *?*
[dist=17.2] Monster Frilldora (0): *?*
Вычисляю произвольный маршрут до Sograt Desert(moc_fild17): 270, 214
Атакую: Monster Piere (0)
Навык Steal применён неудачно (Requirement)
[ 63/ 90] Атакую Piere - Урон: 268 (задержка 41.1)
[dist=unknown] Unknown #59068: *Sob*
[dist=unknown] Unknown #59068: *Sob*
[ 63/ 90] Атакую Piere - Урон: 146 (задержка 41.1)
[ 63/ 90] Piere атакует меня - Урон: Промах! (задержка 28.8)
[ 63/ 90] Атакую Piere - Урон: 147 (задержка 41.1)
[dist=14] Monster Magnolia (3): *Sob*
[dist=14] Monster Magnolia (3): *Sob*
[ 63/ 90] Атакую Piere - Урон: 122 (задержка 41.1)
[ 63/ 90] Piere атакует меня - Урон: Промах! (задержка 28.8)
[ 63/ 90] Атакую Piere - Урон: 118 (задержка 41.1)
Цель уничтожена.
Получен опыт: 122/78 (0.23%/0.18%)
Кто-то #59090 (0) кастует Cloaking на себя (время 200ms)
Кто-то #59090 (0) применяет Cloaking на себя : Ур. 65535
Атакую: Monster Magnolia (3)
Монстр Hode (1) кастует Cloaking на себя (время 200ms)
Кто-то #58984 (0) применяет Cloaking на себя : Ур. 65535
Навык Steal применён неудачно (Requirement)
Навык Steal применён неудачно (Requirement)
[ 63/ 76] Атакую Magnolia - Урон: 98 (задержка 41.1)
[ 63/ 76] Magnolia атакует меня - Урон: 106 (задержка 36)
[ 63/ 76] Атакую Magnolia - Урон: 123 (задержка 41.1)
Использован предмет Meat (3) x 1 , осталось 79 шт.
[ 63/ 76] Атакую Magnolia - Урон: 132 (задержка 41.1)
[ 63/ 76] Magnolia атакует меня - Урон: 103 (задержка 36)
[ 63/ 76] Атакую Magnolia - Урон: 338 (задержка 41.1)
Использован предмет Meat (3) x 1 , осталось 78 шт.
[ 61/ 79] Атакую Magnolia - Урон: 284 (задержка 41.1)
[ 61/ 79] Magnolia атакует меня - Урон: 107 (задержка 36)
[ 61/ 79] Атакую Magnolia - Урон: 113 (задержка 41.1)
Использован предмет Meat (3) x 1 , осталось 77 шт.
[ 60/ 79] Атакую Magnolia - Урон: 136 (задержка 41.1)
Монстр Magnolia (3) кастует Stun Attack на площадку (201, 294) - (время 1500ms)
[ 60/ 79] Атакую Magnolia - Урон: 124 (задержка 41.1)
[ 60/ 79] Frilldora атакует меня - Урон: 174 (задержка 72)
[ 60/ 79] Атакую Magnolia - Урон: 101 (задержка 41.1)
[dist=1] Monster Magnolia (3): *$!@#*
[ 39/ 79] Монстр Magnolia (3) использует Stun Attack на меня - Урон: 103 (delay 36)
Использован предмет Meat (3) x 1 , осталось 76 шт.
[ 40/ 79] Атакую Magnolia - Урон: 234 (задержка 41.1)
Использован предмет Meat (3) x 1 , осталось 75 шт.
[ 51/ 79] Frilldora атакует меня - Урон: 179 (задержка 72)
Использован предмет Meat (3) x 1 , осталось 74 шт.
[ 63/ 79] Атакую Magnolia - Урон: 234 (задержка 41.1)
[ 41/ 79] Magnolia атакует меня - Урон: 98 (задержка 36)
Использован предмет Meat (3) x 1 , осталось 73 шт.
[ 40/ 79] Атакую Magnolia - Урон: 158 (задержка 41.1)
[ 40/ 79] Frilldora атакует меня - Урон: 174 (задержка 72)
Использован предмет Meat (3) x 1 , осталось 72 шт.
Использован предмет Meat (3) x 1 , осталось 71 шт.
[ 64/ 79] Атакую Magnolia - Урон: 128 (задержка 41.1)
Монстр Frilldora (0) кастует Cloaking на себя (время 200ms)
[ 43/ 79] Magnolia атакует меня - Урон: Промах! (задержка 36)
Монстр Frilldora (0) применяет Cloaking на себя : Ур. 65535
Использован предмет Meat (3) x 1 , осталось 70 шт.
[ 57/ 83] Атакую Magnolia - Урон: 288 (задержка 41.1)
[ 57/ 83] Монстр Frilldora (0) использует Fire Attack на меня - Урон: Промах! (delay 72)
[ 57/ 83] Атакую Magnolia - Урон: 134 (задержка 41.1)
[ 57/ 83] Magnolia атакует меня - Урон: Промах! (задержка 36)
[ 58/ 83] Атакую Magnolia - Урон: 332 (задержка 41.1)
[ 58/ 83] Frilldora атакует меня - Урон: Промах! (задержка 72)
[ 58/ 83] Magnolia атакует меня - Урон: Промах! (задержка 36)
[ 58/ 83] Атакую Magnolia - Урон: 328 (задержка 41.1)
Получен опыт: 393/248 (0.74%/0.58%)
Обнаружен предмет Old Frying Pan (0) x 1 (200, 294)
Цель уничтожена.
Добавлено в инвентарь Old Frying Pan (12) x 1 - Non-usable
Маньяк-мультовод с Raggame/Loki
- piroJOKE
- Модератор
- Сообщения: 8205
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Удовлетворительно, как на мой взгляд.
Но, скажем прямо... этот лог - чистая эстетика.
"Да вы только посмотрите - у нас тут ВСЁ по-русски!"
Однако в реалиях жизни русский как раз нужен в менюшках,
которые вылазят РЕДКО, и поэтому незнакомы игроку
(и он не знает, как их понять - когда получает незнакомую фразу на английском).
Добавлено спустя 1 минуту 1 секунду:
ЗЫ: Рекомендую оставить только один из атачей выше в теме.
Но, скажем прямо... этот лог - чистая эстетика.
"Да вы только посмотрите - у нас тут ВСЁ по-русски!"
Однако в реалиях жизни русский как раз нужен в менюшках,
которые вылазят РЕДКО, и поэтому незнакомы игроку
(и он не знает, как их понять - когда получает незнакомую фразу на английском).
Добавлено спустя 1 минуту 1 секунду:
ЗЫ: Рекомендую оставить только один из атачей выше в теме.
-
- Энтузиаст
- Сообщения: 71
- Зарегистрирован: Сб ноя 03, 2007 9:55 am
- piroJOKE
- Модератор
- Сообщения: 8205
- Зарегистрирован: Сб ноя 04, 2006 2:20 am
- Сервер RO:: localhost
- Откуда: Molvania
Меня другое смущает - а разве не эта же строчка будет вызываться, если на твоих глазах кого-то будут бить? (такое может быть в режиме отладки(?)).
Насчет misc.pm - если ты хочешь упоминать "себя", сделай на всякий 3 случая - еще один, когда ты в драке не участвуешь.
А ваще мне это не сильно нравится, изменять код ради перевода...
Насчет misc.pm - если ты хочешь упоминать "себя", сделай на всякий 3 случая - еще один, когда ты в драке не участвуешь.
А ваще мне это не сильно нравится, изменять код ради перевода...
-
- Энтузиаст
- Сообщения: 71
- Зарегистрирован: Сб ноя 03, 2007 9:55 am
Ну, извините. Проект предъявляет претензии на многоязычность и обязан соответствовать. Иначе какого фига "@A uses <skill> on @B" в файл-переводчик включено, а примитивное "@A attacks @B" нет?А ваще мне это не сильно нравится, изменять код ради перевода...
Как править код - уже знаю. Копи-пастом с аналогичного блока "uses".
Смущает только то, что поедет половина привязок на misc.pm в openkore.pot... Ну да ладно, когда закончу с переводом - поправлю и его, тогда можно будет внедрять в SVN для удобства датчан и тайцев.
Добавлено спустя 49 минут 56 секунд:
Итак, новый вариант пагчега, который даёт много переводимых строчек для всех возможных вариантов кто-кого-лупит.
Код: Выделить всё
sub attack_string {
my ($source, $target, $damage, $delay) = @_;
assert(UNIVERSAL::isa($source, 'Actor')) if DEBUG;
assert(UNIVERSAL::isa($target, 'Actor')) if DEBUG;
# You
if ($source->isa('Actor::You')) {
if ($target->isa('Actor::Player')) {
return TF("You attack player %s (%d) - Dmg: %s (delay %s)\n", $target->name, $target->{binID}, $damage, $delay);
} elsif ($target->isa('Actor::Monster')) {
return TF("You attack monster %s (%d) - Dmg: %s (delay %s)\n", $target->name, $target->{binID}, $damage, $delay);
} elsif ($target->isa('Actor::Unknown')) {
return TF("You attack Unknown #%s (%d) - Dmg: %s (delay %s)\n", $target->{nameID}, $target->{binID}, $damage, $delay);
}
# Player
} elsif ($source->isa('Actor::Player')) {
if ($target->isa('Actor::You')) {
return TF("Player %s (%d) attacks you - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $damage, $delay);
} elsif ($target->isa('Actor::Player')) {
return TF("Player %s (%d) attacks player %s (%d) - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $target->name, $target->{binID}, $damage, $delay);
} elsif ($target->isa('Actor::Monster')) {
return TF("Player %s (%d) attacks monster %s (%d) - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $target->name, $target->{binID}, $damage, $delay);
} elsif ($target->isa('Actor::Unknown')) {
return TF("Player %s (%d) attacks Unknown #%s (%d) - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $target->{nameID}, $target->{binID}, $damage, $delay);
}
# Monster
} elsif ($source->isa('Actor::Monster')) {
if ($target->isa('Actor::You')) {
return TF("Monster %s (%d) attacks you - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $damage, $delay);
} elsif ($target->isa('Actor::Player')) {
return TF("Monster %s (%d) attacks player %s (%d) - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $target->name, $target->{binID}, $damage, $delay);
}
# Not sure if monster can attack monster in RO
# elsif ($target->isa('Actor::Monster')) { return TF("Monster %s (%d) attacks monster %s (%d) - Dmg: %s (delay %s)\n", $source->name, $source->{binID}, $target->name, $target->{binID}, $damage, $delay); }
elsif ($target->isa('Actor::Unknown')) {
return TF("Monster %s (%d) attacks Unknown #%s (%d) - Dmg: %s (time %s)\n", $source->name, $source->{binID}, $target->{nameID}, $target->{binID}, $damage, $delay);
}
# Unknown
} elsif ($source->isa('Actor::Unknown')) {
if ($target->isa('Actor::You')) {
return TF("Unknown #%s (%d) attacks you - Dmg: %s (delay %s)\n", $source->{nameID}, $source->{binID}, $damage, $delay);
} elsif ($target->isa('Actor::Player')) {
return TF("Unknown #%s (%d) attacks player %s (%d) - Dmg: %s (delay %s)\n", $source->{nameID}, $source->{binID}, $target->name, $target->{binID}, $damage, $delay);
} elsif ($target->isa('Actor::Monster')) {
return TF("Unknown #%s (%d) attacks monster %s (%d) - Dmg: %s (delay %s)\n", $source->{nameID}, $source->{binID}, $target->name, $target->{binID}, $damage, $delay);
} elsif ($target->isa('Actor::Unknown')) {
return TF("Unknown #%s (%d) attacks Unknown #%s (%d) - Dmg: %s (delay %s)\n", $source->{nameID}, $source->{binID}, $target->{nameID}, $target->{binID}, $damage, $delay);
}
}
}
Зы. Может возникнуть резонный вопрос - а где же гомункул? А вот нет его. Точнее есть, но где-то в другом месте прописан - НЕ ЗДЕСЬ.
Добавлено спустя 1 час 7 минут 22 секунды:
13:33 - Найдена потерянная разработчиками строчка ТF - "Item Exists: %s (%d) x %d\n"
Маньяк-мультовод с Raggame/Loki