Использовать мультиязычность разумно, так как на сервере могут играть люди из самых разных стран. Такие файлы расположены в addons/sourcemod/translations/ и имеют расширение .phrases.txt. Само имя файла (перед расширением) вы придумываете любое, но удобнее, чтобы оно соответствовало названию вашего скрипта.
Файл имеет такую структуру и кодировку UTF-8 без BOM:
Чтобы проверить работает ли мультиязычность, меняйте 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, то это будет выглядеть так:
%t Мы используем только когда отправляем сообщение функцией, которая имеет индекс игрока. Например PrintToChat, hint и т.д. Но это относиться и к PrintToChatAll, т.к. это тот же PrintToChat но в цикле. Почему так? Есть ф-я https://sm.alliedmods.net/api/index.php?fastload=show&id=151& Она устаналивает для какого игрока сейчас будет идти форматирование. В PrintToChat сделано так:
Код
SetGlobalTransTarget(i); VFormat(buffer, sizeof(buffer), format, 2); PrintToChat(i, buffer);
(Конечно же это написано на c++ но дабы было понятней пишу на павне) В PrintToChatAll так же но в цикле. Синтаксис: PrintToChat(client, const String:format[], any:...); Тоесть он понимает что текст выводится игроку client и форматировать текст нужно под него.
%T Используется когда нужно форматировать текст для ф-и нет имеющей доступа к индексу игрока. Например в меню Поэтому при использовании %T необходимо 2-м аргументом передавать индекс игрока (1-й нас фраза в переводе) Например
Добавлено (05.08.2016, 01:17:50) --------------------------------------------- Как в файле перевода правильно поставить знак процента ? Поставил 1-2 знака они не отображаются.