Первая РусЕфикация бота

Разработка новых функций.

Модератор: 4epT

manticora
Грамотный
Сообщения: 436
Зарегистрирован: Ср авг 29, 2007 12:45 pm

Re: Первая РусЕфикация бота

Сообщение manticora »

Пусть это будет так:

The instance windows has been removed, possibly due to party/guild leave.
Окно Усыпальницы было закрыто, возможно из-за выхода из пати или гильдии.
# Гурнин: Неплохо! Пришло время научить вас умению 'Скидка', но мы займемся этим позже.
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
Аватара пользователя
AndreyLun
Грамотный
Сообщения: 280
Зарегистрирован: Пн фев 05, 2007 5:55 pm

Re: Первая РусЕфикация бота

Сообщение AndreyLun »

manticora писал(а):Пусть это будет так:

The instance windows has been removed, possibly due to party/guild leave.
Окно Усыпальницы было закрыто, возможно из-за выхода из пати или гильдии.
А где это сообщение вообще всплывает?
manticora
Грамотный
Сообщения: 436
Зарегистрирован: Ср авг 29, 2007 12:45 pm

Re: Первая РусЕфикация бота

Сообщение manticora »

4epT писал(а):Нету перевода фраз:
Player Димулька (5) uses Blessing по Player Unknown #2000765 (17) (лвл: 10)

видимо не вставлены T
Вот такое чудовище предлагается локализовать, куча хитросплетённых мелких фразок, которые, ко всему прочему, встречаются и в других контекстах тоже:

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

sub skillUse_string {
	my ($source, $target, $skillName, $damage, $level, $delay) = @_;
	assert(UNIVERSAL::isa($source, 'Actor')) if DEBUG;
	assert(UNIVERSAL::isa($target, 'Actor')) if DEBUG;

	return sprintf("%s %s %s%s %s %s%s%sn",
		$source->nameString(),
		$source->verb(T('use'), T('uses')),
		$skillName,
		($level != 65535) ? ' ' . TF("(Lv: %s)", $level) : '',
		T('on'),
		$target->nameString($source),
		($damage != -30000) ? ' ' . TF("(Dmg: %s)", $damage || T('Miss')) : '',
		($delay) ? ' ' . TF("(delay: %s)", $delay) : '');
}
T('...') проставлены, только от этого мало толку. А на данный момент локализация выглядит так:
Player Mokona (0) использует Increase Agility на вас (лвл: 10)
Player Mokona (0) кастует умение Increase Agility на Player manti (1) (задержка: 586мс)
За безобразие вида "Player Mokona (0)" отвечает вот этот кусок кода из файла Actor.pm:

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

sub nameString {
	my ($self, $otherActor) = @_;

	return $self->selfString if $self->{ID} eq $otherActor->{ID};

	my $nameString = "$self->{actorType} " . $self->name;
	$nameString .= " ($self->{binID})" if defined $self->{binID};
	return $nameString;
}
точнее говоря - "$self->{actorType}", который пока фиг локализуешь.

----

Подскажите, пожалуйста, перевод для двух строк:
"A manner point has been successfully aligned.n"
"You got a good point.n"
Они взяты из кода:

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

sub manner_message {
	my ($self, $args) = @_;
	if ($args->{flag} == 0) {
		message T("A manner point has been successfully aligned.n"), "info";
		#
	} elsif ($args->{flag} == 3) {
		message T("Chat Block has been applied by GM due to your ill-mannerous action.n"), "info";
		#Ваш чат был заблокирован игровым мастером.n - это ру-оф перевод из msgstringtable.txt
	} elsif ($args->{flag} == 4) {
		message T("Automated Chat Block has been applied due to Anti-Spam System.n"), "info";
		#Ваш чат был автоматически заблокирован системой анти-спама.n - это ру-оф перевод из msgstringtable.txt
	} elsif ($args->{flag} == 5) {
		message T("You got a good point.n"), "info";
		#
	} else {
		warning TF("flag: %s gave unknown results in: %sn", $args->{flag}, $self->{packet_list}{$args->{switch}}->[0]);
	}
}
Добавлено спустя 4 минуты 18 секунд:
AndreyLun писал(а):
manticora писал(а):Пусть это будет так:

The instance windows has been removed, possibly due to party/guild leave.
Окно Усыпальницы было закрыто, возможно из-за выхода из пати или гильдии.
А где это сообщение вообще всплывает?
Почитать про усыпальницу можно на http://irowiki.org/wiki/Instance. Оно всплывает в коде serverType0.pm:

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

# 02CE
#1 = The Memorial Dungeon expired; it has been destroyed
#2 = The Memorial Dungeon's entry time limit expired; it has been destroyed
#3 = The Memorial Dungeon has been removed.
#4 = Just remove the window, maybe party/guild leave
# TODO: test if correct message displays, no type == 0 ?
sub instance_window_leave {
	my ($self, $args) = @_;
	if($args->{type} == 1) {
		message T("The Memorial Dungeon expired it has been destroyed.n"), "info";
	} elsif($args->{type} == 2) {
		message T("The Memorial Dungeon's entry time limit expired it has been destroyed.n"), "info";
	} elsif($args->{type} == 3) {
		message T("The Memorial Dungeon has been removed.n"), "info";
	} elsif ($args->{type} == 4) {
		message T("The instance windows has been removed, possibly due to party/guild leave.n"), "info";
	} else {
		warning TF("flag: %s gave unknown results in: %sn", $args->{flag}, $self->{packet_list}{$args->{switch}}->[0]);
	}
}
Добавлено спустя 8 минут 55 секунд:
Расправился с фразами типа:
%s %s in %s state.n
%s %s out of %s state.n
%s %s ailment: %s.n
%s %s out of ailment: %s.n
%s %s look: %s.n
%s %s out of look: %s.n
проблема заключалась в том, что под второй %s подразумевалось "are" или "is", которое подставлялось в зависимости от действующего лица. И вот эти два слова по отдельности фиг переведешь. Пришлось разбить все эти сообщения на пары вида:
%s are in %s state.n
%s is in %s state.n
и уже только тогда можно их было перевести.

Добавлено спустя 12 минут 40 секунд:
В локализации изменился перевод некоторых фраз, используются оригинальные фразы из ру-оф клиента.
Подправлены заголовки всяких списков типа "------ Варианты ответа -------", между минусами и словами расставлены пробелы, общая длина заголовка совпадает теперь с "ногами". Иногда это было не так, ибо из-за перевода заголовки поплыли.

Добавлено спустя 11 минут 7 секунд:
Новая локализация опубликована в ревизии 7247.
# Гурнин: Неплохо! Пришло время научить вас умению 'Скидка', но мы займемся этим позже.
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Первая РусЕфикация бота

Сообщение EternalHarvest »

manticora писал(а): Расправился с фразами типа:
%s %s in %s state.n
%s %s out of %s state.n
%s %s ailment: %s.n
%s %s out of ailment: %s.n
%s %s look: %s.n
%s %s out of look: %s.n
проблема заключалась в том, что под второй %s подразумевалось "are" или "is", которое подставлялось в зависимости от действующего лица. И вот эти два слова по отдельности фиг переведешь. Пришлось разбить все эти сообщения на пары вида:
%s are in %s state.n
%s is in %s state.n
и уже только тогда можно их было перевести.
Непонятно, зачем инлайнить Actor->verb, да и я писал же:
%s %s in %s state.\n
- сообщение, что объект "%s" получил состояние "%3$s"
а перевод для каждой пары фраз в итоге одинаковый вышел всё равно.
manticora
Грамотный
Сообщения: 436
Зарегистрирован: Ср авг 29, 2007 12:45 pm

Re: Первая РусЕфикация бота

Сообщение manticora »

Ты не понял, посмотри исходники в этом же самом месте, но в предыдущей ревизии. И скажи, как это можно было бы перевести?

Добавлено спустя 4 минуты 15 секунд:
Вот как это было в предыдущей ревизии для фразы "%s %s in %s state.":

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

sub setStatus {
	my ($actor, $opt1, $opt2, $option) = @_;
	assert(defined $actor) if DEBUG;
	assert(UNIVERSAL::isa($actor, 'Actor')) if DEBUG;
	my $verbosity = $actor->{ID} eq $accountID ? 1 : 2;
	my $are = $actor->verb('are', 'is');
	my $have = $actor->verb('have', 'has');
	my $changed = 0;

	foreach (keys %skillsState) {
		if ($opt1 == $_) {
			if (!$actor->{statuses}{$skillsState{$_}}) {
				$actor->{statuses}{$skillsState{$_}} = 1;
				message TF("%s %s in %s state.n", $actor->nameString(), $are, $skillsState{$_}), "parseMsg_statuslook", $verbosity;
				$changed = 1;
			}
		} elsif ($actor->{statuses}{$skillsState{$_}}) {
			delete $actor->{statuses}{$skillsState{$_}};
			message TF("%s %s out of %s state.n", $actor->nameString(), $are, $skillsState{$_}), "parseMsg_statuslook", $verbosity;
			$changed = 1;
		}
	}
...
Добавлено спустя 4 минуты 43 секунды:
Причем вторая подстановка в "%s %s in %s state." - это переменная $are, которая была определена как

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

my $are = $actor->verb('are', 'is');
Я, если честно, затрудняюсь перевести такую заточенную под английский язык мешанину. Ситуация осложняется тем, что там дальше есть ещё места, где используются 'are', 'is' - если как-то подогнать перевод этих слов в одном месте, то в другом месте оно выйдет боком.

Добавлено спустя 13 минут 16 секунд:
Хм, а что значит:
%s %s in %s state.\n
- сообщение, что объект "%s" получил состояние "%3$s"
я не знаю, что такое "%3$s".
# Гурнин: Неплохо! Пришло время научить вас умению 'Скидка', но мы займемся этим позже.
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
Аватара пользователя
4epT
macro-маньячина
Сообщения: 2792
Зарегистрирован: Чт дек 21, 2006 1:23 pm
Сервер RO:: 4game
Discord: ya4ept#8494
Контактная информация:

Re: Первая РусЕфикация бота

Сообщение 4epT »

#: ../Network/Receive/ServerType0.pm:3261
msgid "Can't loot item...wait...n"
msgstr "Невозможно слутить предмет...ждем...n"
не уверен что смысл правильный

Добавлено спустя 5 минут 9 секунд:
#: ../Network/XKore.pm:275
msgid "You can login with the Ragnarok Online client now.\n"
msgstr "Уже сейчас вы можете войти в игру, с клиента Ragnarok Online.\n"
может:
Войдите в игру через клиент Ragnarok Online.
Быстро и качественно напишу конфиг (макрос)! Стучи!
¤ Свежий бот ¤ Config checker ¤ Manual ¤
Изображение
Изображение
manticora
Грамотный
Сообщения: 436
Зарегистрирован: Ср авг 29, 2007 12:45 pm

Re: Первая РусЕфикация бота

Сообщение manticora »

#: ../Network/Receive/ServerType0.pm:3261
msgid "Can't loot item...wait...n"
msgstr "Невозможно слутить предмет...ждем...n"
Может быть так: "Не могу поднять предмет... жду..."
Войдите в игру через клиент Ragnarok Online.
Я согласен, так лучше звучит.
# Гурнин: Неплохо! Пришло время научить вас умению 'Скидка', но мы займемся этим позже.
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Первая РусЕфикация бота

Сообщение EternalHarvest »

Yin and Yan писал(а):###### Localization settings ######locale ru###### Localization compatibility #######
Notepad не может правильно открыть эти файлы в том формате, в котором они изначально.
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Первая РусЕфикация бота

Сообщение EternalHarvest »

msgid "%s have look: %s.\n"
msgstr "%s выглядите как: %s.\n"

msgid "%s are out of look: %s.\n"
msgstr "%s перестали выглядеть как: %s.\n"
Если это ещё более-менее имеет смысл, то вот это:
msgid "%s have ailment: %s.\n"
msgstr "%s заболели: %s.\n"

msgid "%s are out of ailment: %s.\n"
msgstr "%s выздоровели от: %s.\n"
— совсем не в тему.
manticora
Грамотный
Сообщения: 436
Зарегистрирован: Ср авг 29, 2007 12:45 pm

Re: Первая РусЕфикация бота

Сообщение manticora »

И как бы ты это перевел?
# Гурнин: Неплохо! Пришло время научить вас умению 'Скидка', но мы займемся этим позже.
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Первая РусЕфикация бота

Сообщение EternalHarvest »

Я бы объединил это всё в одно сообщение, которое "You are now / again / no longer". По-русски будет "Вы получили статус..."
manticora
Грамотный
Сообщения: 436
Зарегистрирован: Ср авг 29, 2007 12:45 pm

Re: Первая РусЕфикация бота

Сообщение manticora »

Я видел, что ты сделал. Классно. Ты вместо T('are') и T('is'), которые на русский фиг переведёшь, учитывая что оно там постоянно повторяется в разных констах, сделал T('are casting') и T('is casting').
Простое и изящное решение, и это наконец-то можно перевести по человечески и выглядит в коде оно красиво. Спасибо.

Также спасибо за исправления в собственно переводе. Я уже настолько туда насмотрелся, что не вижу даже очевидных казалось бы опечаток и неточностей.
# Гурнин: Неплохо! Пришло время научить вас умению 'Скидка', но мы займемся этим позже.
русская вики по OpenKore, редактор макросов с подсветкой и справкой по Ctrl+F1
openkore.collectskin.com - всегда свежая svn-версия OpenKore!
Видео-гайд по установке и настройке OpenKore
Аватара пользователя
ProTuningBot
Энтузиаст
Сообщения: 108
Зарегистрирован: Пн авг 18, 2008 2:03 pm

Re: Первая РусЕфикация бота

Сообщение ProTuningBot »

При вендинге командой al пишется одна из строчек "Максимум заработано". По-моему правильнее было бы исправить на "Максимум еще заработать" или "Максимум заработать" или что-то вроде того, так как это ОК пишет максимум, который вы можете заработать от оставшихся товаров у вас в телеге.

(\n" "Maximum earned:)
(s\n" "Максимум заработано:)

Перевод то правильный.. Но вот по смысловой нагрузке правильнее было бы так, как я написал выше. Имхо.
EternalHarvest
Разработчик
Сообщения: 819
Зарегистрирован: Пн окт 27, 2008 9:49 pm

Re: Первая РусЕфикация бота

Сообщение EternalHarvest »

"Максимальная выручка"?
Ответить