[WIP] Translations Builder

Kruzya

Участник
Сообщения
12,970
Реакции
10,921
  • Команда форума
  • #1
[WIP] Translations Builder
Программа для разделения локалей на несколько разных файлов и последующей сборки для SM плагинов. Поддерживает #format оригинального файла переводов, для которого выделен отдельный файл со своей структурой.
Экспериментов ради выдрал несколько фраз из последнего форка [Shop] Core.
2018-07-09_18-42-21.gif

Для тех, кто работал с 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

При разработке были использованы следующие библиотеки:

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)
Возможны проблемы с выводом русских букв на ОС Windows в консоль (это видно даже на гифке сверху). Тем не менее, это никак не скажется на файлах.

В прикреплённых к теме файлах есть архив с файлами из GIF-демки. Можете поиграться, проверить. Ради теста, опять же, переносилось всего три фразы из [Shop] Core.
 

Вложения

  • shop.7z
    752 байт · Просмотры: 3
Сверху Снизу