The End Is Near...
Russian Roulette
- Сообщения
- 874
- Реакции
- 691
Введение
Система SourceMod ML базируется на следующих терминах:
Формат файла
Многоязычный формат файлов перевода содержится в стандартной конфигурационной форме от Valve. Она состоит из одного главного раздела, "Phrases", который содержит любое число имен подразделов. Каждый подраздел определяется одним именем Фразы, и не могут иметь в себе подразделы. Они обладают следующими свойствами:
Пример:
В приведенном выше примере, два перевода определяется по имени фразы "Welcome" - одна для английского, и одна для русского языка. Вместе с тем, рассмотрим фразу, которая может вставлять определенные слова, как в этом примере:
В приведенном Выше примере, порядок слов изменился. Фраза на английском вставляет объект первым, а фраза на русском предписывает объект вторым. На русском языке фраза должна выглядеть следующим образом: Трусы Frenzzy горят!. Это создает проблему для скриптов, которые всегда просматривают формат параметров в одном порядке. Чтобы решить эту проблему, было введено свойство #format. Оно предопределяет порядок формата параметров.
Пример:
Формат строки состоит из разделов которые разделяются запятыми, а каждый раздел заключен в скобках. Каждый раздел имеет индекс и спецификатор формата, которые разделяются двоеточиями. Спецификаторы формата следуют общим правилам форматирования, однако в настоящее время, они поддерживаются только в следующих видах:
Использование в плагине
Плагины должны вызывать функцию LoadTranslations на каждый файл с переводом, который они хотят использовать. Если это не будет сделано, то никакие переводы работать не будут, даже если другой плагин загрузил те же самые файлы. Это поможет предотвратить конфликты фраз между плагинами.
Примечание: Языковые файлы загружаться после каждой смены карты (mapchange).
Даже если плагин будет перезагружен, кэшированный перевод файлов остается до следующей карты.
Встроенный перевод работает в любых формат-классовых функциях. Вводится новый спецификатор формата '%T', который указывает формат вставки определенного перевода фразы. В отличие от всех других спецификаторов формата, он требует как минимум двух параметров:
Пример:
Формат параметров в отдельности:
Пример:
Как видно из этого примера, Мы не должны указывать индекс клиента больше, чем один раз. Таким образом, как правило, более удобны для использования ограниченные версии '%t' в функциях, таких как PrintToChat. Однако, в функциях, которые не "управляют игроком", таких, как Format или PrintToServer, может быть использован только '%T'.
Оригинал
Система SourceMod ML базируется на следующих терминах:
- Языки: Предварительно заданные языки перевода устанавливаются в configs\languages.cfg. Если язык перевода отсутствует в этом файле, он не может быть переведен до тех пор, пока не будет добавлен в этот файл и обновлена кэш-память переводов.
- Фразы/Ключи перевода: Короткие, общие ключевые фразы, используемые для определения набора переводов. Они находятся в конфигурационных файлах в папке translations. Они называются файлы перевода.
- Переводы: Содержат фразы текста перевода для данного языка. Они находятся в файлах перевода.
Формат файла
Многоязычный формат файлов перевода содержится в стандартной конфигурационной форме от Valve. Она состоит из одного главного раздела, "Phrases", который содержит любое число имен подразделов. Каждый подраздел определяется одним именем Фразы, и не могут иметь в себе подразделы. Они обладают следующими свойствами:
- Ключ: "#format"
- Значение: Разделенные запятыми, пары индексов и форматов
- Ключ: Двух символьный код языка.
- Значение: Языковой перевод строки.
Пример:
PHP:
"Phrases"
{
"Welcome"
{
"en" "Welcome to SourceMod"
"ru" "Добро пожаловать в SourceMod"
}
}
В приведенном выше примере, два перевода определяется по имени фразы "Welcome" - одна для английского, и одна для русского языка. Вместе с тем, рассмотрим фразу, которая может вставлять определенные слова, как в этом примере:
PHP:
"Phrases"
{
"Pants"
{
"en" "pants"
"ru" "трусы"
}
//НЕПРАВИЛЬНЫЙ ПРИМЕР: "Frenzzy трусы горят!"
"OnFire_plural"
{
"en" "%s's %s are on fire!"
"ru" "%s %s горят!"
}
}
Пример:
PHP:
"Phrases"
{
//Пример: "Трусы Frenzzy горят!"
"OnFire_plural"
{
"#format" "{1:s},{2:s}"
"en" "{1}'s {2} are on fire!"
"ru" "{2} {1} горят!"
}
//Пример: "Привет, Frenzzy!"
"Hello"
{
"#format" "{1:s}"
"en" "Hello, {1}"
"ru" "Привет, {1}"
}
}
- d/i: Отображение десятичных/целых значений
- x: Отображение шестнадцатеричных значений
- f: Отображение числа с плавающей точкой
- s: Отображение строки
- c: Отображение символов (поддерживается UTF-8)
Использование в плагине
Плагины должны вызывать функцию LoadTranslations на каждый файл с переводом, который они хотят использовать. Если это не будет сделано, то никакие переводы работать не будут, даже если другой плагин загрузил те же самые файлы. Это поможет предотвратить конфликты фраз между плагинами.
Примечание: Языковые файлы загружаться после каждой смены карты (mapchange).
Даже если плагин будет перезагружен, кэшированный перевод файлов остается до следующей карты.
Встроенный перевод работает в любых формат-классовых функциях. Вводится новый спецификатор формата '%T', который указывает формат вставки определенного перевода фразы. В отличие от всех других спецификаторов формата, он требует как минимум двух параметров:
- 1-ый параметр: Строка, содержащая фразу для перевода.
- 2-ой параметр: Одно из следующих:
- Постоянная LANG_SERVER, которая определяет язык перевода по умолчанию.
- Константа player ID, которая определяет язык перевода установленный игроком.
- 3-ий параметр и больше: Вывод во фразе спецификаторов формата, если это необходимо.
Пример:
PHP:
new String:name[32], String:buffer[128];
GetClientName(client, name, sizeof(name));
PrintToChat(client, "[SourceMod] %T", "Hello", client, name);
Format(buffer, sizeof(buffer), "[SourceMod] %T", "Hello", LANG_SERVER, name);
- "Hello": Фраза для перевода.
- client/LANG_SERVER: Кто получит перевод фразы.
- name: Имя игрока
Пример:
PHP:
PrintToChat(client, "[SourceMod] %t", "Hello", name);
Оригинал