root | Дата: Воскресенье, 03.02.2013, 01:42 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 561
Статус: Offline
| Использовать мультиязычность разумно, так как на сервере могут играть люди из самых разных стран. Такие файлы расположены в addons/sourcemod/translations/ и имеют расширение .phrases.txt. Само имя файла (перед расширением) вы придумываете любое, но удобнее, чтобы оно соответствовало названию вашего скрипта.
Файл имеет такую структуру и кодировку UTF-8 без BOM:
Код "Phrases" { "ваша_фраза" { "ru" "Привет" "en" "Hello" } "welcome" { "#format" "{1:s}" "ru" "Добро пожаловать, {1}" "en" "Welcome, {1}" } }
Если имя файла xz.phrases.txt, то пробуем скрипт:
Код #include <sourcemod>
public OnPluginStart() { LoadTranslations("xz.phrases"); }
public OnClientPutInServer(i) { decl String:Name[MAX_NAME_LENGTH]; GetClientName(i, Name, MAX_NAME_LENGTH); PrintToChat(i, "%t", "welcome", Name); }
Чтобы проверить работает ли мультиязычность, меняйте cl_language в консоле игры на нужный вам язык, например russian, english, и перезаходите на сервер. Если в вашем файле нет языка игрока, то он будет видеть тот язык, который используется сервером по умолчанию, а это вы можете настроить в addons/sourcemod/configs/core.cfg("ServerLang" "en" - стоит английский).
Все языки прописаны в addons/sourcemod/configs/languages.cfg. Если какого-то языка нет в списке, то вы не сможете его использовать для перевода. Если вы изменили файл перевода (Phrases), то нужно сменить карту чтобы изменения вступили в силу, вроде даже перезапуск скрипта не поможет, а только смена карты.
#format - это значит, что в строке будут использованы переменные. s - стока, d/i - целое число, f - число с точкой и тд. Если их несколько, то перечисляйте через запятую.
Код "#format" "{1:s},{2:d},{3:f}" "ru" "А тут пишете в нужных местах {1} {2} и {3}"
В скрипте вы должны передавать переменные в соответствующем порядке:
Цитата PrintToChatAll("%t", "fraza", "stroka", 5, 2.0);
stroka = {1:s} 5 = {2:d} 2.0 = {3:f}
%t - используйте лишь тогда, когда сообщение отправляется для игрока, такое как PrintToChat, PrintHintText и т.д. Но если, например, вы добавляете строку в меню, то там уже надо использовать символ %T и после фразы указать индекс игрока, для определения языка. Если использовать пример выше и у нас есть индекс клиента i, то это будет выглядеть так:
Код decl String:StR[100]; Format(StR, sizeof(StR), "%T", "fraza", i, "stroka", 5, 2.0); AddMenuItem(Handle:menu, StR);
Т.е. все то же самое, только символ %T и индекс игрока после фразы.
|
|
| |