Перевод плагинов, или изменение цвета и оформления сообщений, которые плагины пишут игрокам - это самая первая причина, по которой лезут в плагины.
Но именно перевод плагинов (нормальный перевод, с поддержкой translations-файла), для юных пионеров остается каким-то волшебством.
И не важно, что уже есть огромное количество переведенных плагинов в которых можно посмотреть как это делается.
1. в первую очередь нужно загрузить файл с переводом
в плагин, в часть где public OnPluginStart() добавляем LoadTranslations("YourFile.phrases");
например:
public OnPluginStart() { LoadTranslations("AutoDifficulty.phrases"); }
*можно чтоб там загружалось сразу несколько файлов
LoadTranslations("YourFile_1.phrases");
LoadTranslations("YourFile_2.phrases"); и т.д.
2. можно добавить цвет в PrintToChatAll и PrintToChat сообщения
\x01 - белый, \x03 - светло-зеленый, \x04 - оранжевый, \x05 - темно-зеленый
предварительно скачав Colors include (а то не скомпилируется) и добавив в начало плагина #include <colors>, можно сделать еще больше цветов:
CPrintToChatAll и CPrintToChat с новыми цветами {red} - красный и {blue} - синий
*в одном сообщении CPrintToChatAll или CPrintToChat можно использовать только 1 цвет из \x03, {red}, {blue}
3. можно перевести сообщения
Для редактирования файла с переводом нужно использовать программу notepad++ (обычным блокнотом нельзя), сохранять нужно в кодировке UTF-8 без BOM
вот пример перевода сообщения:
CPrintToChatAll("\x01[SM] {red}%N \x01включил \x04%d \x01уровень сложности.", client, i_LevelDiff);
меняем на
CPrintToChatAll("%t", "diff_on", client, i_LevelDiff);
и в файл с переводом добавляем:
"diff_on" { "#format" "{1:N},{2:d}" "en" "\x01[SM] {red}{1} \x01enabled \x04{2} \x01difficulty level." "ru" "\x01[SM] {red}{1} \x01включил \x04{2} \x01уровень сложности." }
таким же способом можно перевести PrintHintTextToAll, PrintHintText и PrintCenterText, но уже без цвета - там же нет цвета
AddMenuItem, SetPanelTitle, DrawPanelItem и DrawPanelItem нужно переводить через Format
вот пример перевода:
SetPanelTitle(menu, "Hello, %N!", client);
меняем на
decl String:sText[64]; Format(sText, 64, "%t", "Hello", client); SetPanelTitle(menu, sText);
и в файле с переводом должно быть
"Hello" { "#format" "{1:N}" "en" "Hello, {1}!" "ru" "Привет, {1}!" }
часто бывает что AddMenuItem, SetPanelTitle, DrawPanelItem и DrawPanelItem путает выбор языка
если такая проблема есть, замените %t на %T и добавьте клиента:
сразу после "Hello" должен быть индекс клиента для которого эта панелька создается
decl String:sText[64]; Format(sText, 64, "%T", "Hello", client, client); SetPanelTitle(menu, sText);
это делается только чтобы взять выбор языка напрямую с клиента и на файле с переводом не отразится
т.е. как было
"Hello" { "#format" "{1:N}" "en" "Hello, {1}!" "ru" "Привет, {1}!" }
так и останется
это небольшой туториал в первую очередь для юных пионеров и должен быть им понятен
если я что то скомкано объяснил или не точно, то нужно поправить
также можно тут писать если у вас возникли трудности с переводом плагина - мир не без добрых людей и кто нибудь обязательно поможет
Сообщение отредактировал Ren89: 11 Май 2017 - 20:15