- Автор
-
Islingiton_G (aka Glaster)
- Требования
Описание:
Утилита анализирует исходный код плагина, заменяет хардкод на ссылки на словарь там, где это необходимо, создает файл словаря и переводи полученные строки на другие языки.
Утилита обрабатывает строки, содержащие следующие функции:
Список поддерживаемых языков их сокращения:
Как использовать?
Утилита поддерживает 2 режима работы:
1) Стандартный режим: на вход подаются только путь до плагина и язык хардкода (например en). В таком случае утилита переведёт плагин на все доступные на данный момент 26 языков. Запуск будет выглядеть следующим образом
2) Режим с выбором языков перевода: на вход подаются только путь к плагину и список языков, на которые он будет переведён, в формате "ru, en, de, ua". Запуск выглядит следующим образом:
Модифицированный плагин и словарь к нему мы найдём в папке с исходным плагином.
Пример работы утилиты:
Плагин до обработки:
Плагин после обработки
Сгенерированный словарь
Скриншоты из игры
Утилита анализирует исходный код плагина, заменяет хардкод на ссылки на словарь там, где это необходимо, создает файл словаря и переводи полученные строки на другие языки.
Утилита обрабатывает строки, содержащие следующие функции:
Код:
client_print
client_print_color
console_print
engclient_print
server_print
show_hudmessage
show_dhudmessage
log_message
log_amx
log_to_file
menu_create
menu_additem
Как использовать?
Утилита поддерживает 2 режима работы:
1) Стандартный режим: на вход подаются только путь до плагина и язык хардкода (например en). В таком случае утилита переведёт плагин на все доступные на данный момент 26 языков. Запуск будет выглядеть следующим образом
Код:
AMX-Plugins-Translator.exe myplugin.sma en
Код:
AMX-Plugins-Translator.exe myplugin.sma en "ru, de, fr"
Пример работы утилиты:
Плагин до обработки:
Код:
#include <amxmodx>
#define PLUGIN "Plugin for Translator Test"
#define VERSION "1.0"
#define AUTHOR "Glaster"
public plugin_init() {
register_clcmd("say /menu", "NewMenu");
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say /test_prints", "print_stuff");
}
public print_stuff(id) {
new name[32];
//client_print example
get_user_name(id, name, 32);
client_print(id, print_chat, "Hello Player with Name: %s", name);
client_print(id, print_center, "Hello Dude!");
client_print(id, print_console, "Test Value");
//Hud example. Is valid also for dhud
set_hudmessage(64, 0, 128, -1.0, 0.0, 0, 6.0, 6.0, 0.1, 0.2, -1)
show_hudmessage(0, "Hello Player!")
}
//Menu exaple
public NewMenu(id) {
new i_Menu = menu_create("\wOur Server Menu", "NewMenu_handler");
menu_additem(i_Menu, "\wItem 1", "1", 0);
menu_additem(i_Menu, "\wItem 2", "2", 0);
menu_additem(i_Menu, "\wItem 3", "3", 0);
menu_setprop(i_Menu, MPROP_NEXTNAME, "\rNext!");
menu_setprop(i_Menu, MPROP_BACKNAME, "\rBack");
menu_setprop(i_Menu, MPROP_EXITNAME, "\rExit");
menu_display(id, i_Menu, 0)
}
public NewMenu_handler(id, menu, item) {
if (item < 0) return PLUGIN_CONTINUE;
new cmd[3], access, callback;
menu_item_getinfo(menu, item, access, cmd, 2, _, _, callback);
return PLUGIN_HANDLED;
}
Код:
//Plugins was translated with AMX Plugin Translator: https://github.com/mrglaster/AMX-Plugin-Translator
#include <amxmodx>
#define PLUGIN "Plugin for Translator Test"
#define VERSION "1.0"
#define AUTHOR "Glaster"
public plugin_init() {
register_dictionary("test_plugin.txt");
register_clcmd("say /menu", "NewMenu");
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say /test_prints", "print_stuff");
}
public print_stuff(id) {
new name[32];
//client_print example
get_user_name(id, name, 32);
client_print(id, print_chat, "%L", LANG_PLAYER, "HELLO_PLAYER_WITH_NAME", name);
client_print(id, print_center, "%L", LANG_PLAYER, "HELLO_DUDE");
client_print(id, print_console, "%L", LANG_PLAYER, "TEST_VALUE");
//Hud example. Is valid also for dhud
set_hudmessage(64, 0, 128, -1.0, 0.0, 0, 6.0, 6.0, 0.1, 0.2, -1)
show_hudmessage(0, "%L", LANG_PLAYER, "HELLO_PLAYER")
}
//Menu exaple
public NewMenu(id) {
new szStringBuf[64]
formatex(szStringBuf, charsmax(szStringBuf), "%L", LANG_PLAYER, "WOUR_SERVER_MENU");
new i_Menu = menu_create(szStringBuf, "NewMenu_handler");
formatex(szStringBuf, charsmax(szStringBuf), "%L", LANG_PLAYER, "WITEM_1");
menu_additem(i_Menu, szStringBuf, "1", 0);
formatex(szStringBuf, charsmax(szStringBuf), "%L", LANG_PLAYER, "WITEM_2");
menu_additem(i_Menu, szStringBuf, "2", 0);
formatex(szStringBuf, charsmax(szStringBuf), "%L", LANG_PLAYER, "WITEM_3");
menu_additem(i_Menu, szStringBuf, "3", 0);
menu_setprop(i_Menu, MPROP_NEXTNAME, "\rNext!");
menu_setprop(i_Menu, MPROP_BACKNAME, "\rBack");
menu_setprop(i_Menu, MPROP_EXITNAME, "\rExit");
menu_display(id, i_Menu, 0)
}
public NewMenu_handler(id, menu, item) {
if (item < 0) return PLUGIN_CONTINUE;
new cmd[3], access, callback;
menu_item_getinfo(menu, item, access, cmd, 2, _, _, callback);
return PLUGIN_HANDLED;
}
Код:
[en]
HELLO_PLAYER_WITH_NAME = Hello Player with Name: %s
HELLO_DUDE = Hello Dude!
TEST_VALUE = Test Value
HELLO_PLAYER = Hello Player!
WOUR_SERVER_MENU = Our Server Menu
WITEM_1 = Item 1
WITEM_2 = Item 2
WITEM_3 = Item 3
[ru]
HELLO_PLAYER_WITH_NAME = Привет, игрок с именем: %s
HELLO_DUDE = Привет, чувак!
TEST_VALUE = Тестовое значение
HELLO_PLAYER = Привет Игрок!
WOUR_SERVER_MENU = Меню нашего сервера
WITEM_1 = Пункт 1
WITEM_2 = Пункт 2
WITEM_3 = Пункт 3
[de]
HELLO_PLAYER_WITH_NAME = Hallo Spieler mit Namen: %s
HELLO_DUDE = Hallo Alter!
TEST_VALUE = Testwert
HELLO_PLAYER = Hallo Spieler!
WOUR_SERVER_MENU = Unser Servermenü
WITEM_1 = Punkt 1
WITEM_2 = Punkt 2
WITEM_3 = Punkt 3