Kruzya
Участник
- Сообщения
- 12,970
- Реакции
- 10,921
- Команда форума
- #1
[WIP] Translations Builder
Программа для разделения локалей на несколько разных файлов и последующей сборки для SM плагинов. Поддерживает #format оригинального файла переводов, для которого выделен отдельный файл со своей структурой.Экспериментов ради выдрал несколько фраз из последнего форка [Shop] Core.
Для тех, кто работал с JSON-файлами ранее, такая "структуризация" может показаться более удобной. Для добавления языка достаточно составить простой JSON-файл вида:
C-подобный:
{
"NoAccessToCommand": "{green}[Shop]{default} Вы не имеете доступа к этой команде!",
"TargetNotFound": "{green}[Shop]{default} Игрок {green}{1}{default} недоступен!",
"TransferSuccess": "{green}[Shop]{default} Вы успешно отправили {green}{1}{default} кредитов {green}{2}{default}!"
}
#format вынесен в отдельный файл и собирается, соответственно, тоже в отдельный файл в корне сервера. Его структура аналогична: в качестве ключа передаётся имя фразы, а значение - массив с типами переменных:
C-подобный:
{
"TargetNotFound": [
"string"
],
"TransferSuccess": [
"string",
"name"
]
}
- string -> s
- integer -> i
- decimal -> d
- binary -> x
- float -> f
- name -> N
- log -> L
- phrase -> t
Всё это чудо работает на C#, а именно на .NET Core, что позволяет запускать утилиту даже на Linux без перекомпиляции.
Системные требования
- Windows 7 (x64) и старше / Debian 8, Ubuntu 14.04 или что-то иное, поддерживающее .NET Core / MacOS 10.12 (x64) и выше
- Установленная на компьютере среда выполнения .NET Core 2.0
При разработке были использованы следующие библиотеки:
- Newtonsoft JSON.NET
- Command Line Parser Library for CLR and NetStandard
- Реализация работы с KeyValues из SteamKit2
TODO
- Добавить возможность раскидывать фразы на группы.
- Добавить подобие переменных для сборки фраз
Допустим, есть такие строки в JSON-файле:
C-подобный:{ "NoAccessToCommand": "{green}[Shop]{default} Вы не имеете доступа к этой команде!", "TargetNotFound": "{green}[Shop]{default} Игрок {green}{1}{default} недоступен!", "TransferSuccess": "{green}[Shop]{default} Вы успешно отправили {green}{1}{default} кредитов {green}{2}{default}!" }
Почему бы не вынести его в отдельную переменную {{$prefix}}?
C-подобный:{ "NoAccessToCommand": "{{$prefix}} Вы не имеете доступа к этой команде!", "TargetNotFound": "{{$prefix}} Игрок {green}{1}{default} недоступен!", "TransferSuccess": "{{$prefix}} Вы успешно отправили {green}{1}{default} кредитов {green}{2}{default}!" }
Download URLs
Исходный код доступен здесь.
Скачать бинарник можно здесь.
How To Use?
Перейти в папку с программой, ввести:
C-подобный:
dotnet "Translations Builder.dll" --input C:/Users/Kruzya/Workspace/ASH/translations_sources --output C:/Users/Kruzya/Workspace/ASH/translations --name ASH_Core
- --input - путь к папке с исходными JSON-файлами
- --output - путь к папке, где phrases.txt файлы должны быть сохранены
- --name - имя для файлов (если ввести ASH, то утилита сгенерирует файлы ASH.phrases.txt)
В прикреплённых к теме файлах есть архив с файлами из GIF-демки. Можете поиграться, проверить. Ради теста, опять же, переносилось всего три фразы из [Shop] Core.