[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Мультиязычность в скрипте (LoadTranslations Взято с world-source.ru)
Мультиязычность в скрипте
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 и индекс игрока после фразы.
 
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Мультиязычность в скрипте (LoadTranslations Взято с world-source.ru)
  • Страница 1 из 1
  • 1
Поиск: