Wake of Gods Forum | Форум Во Имя Богов

Full Version: Создание скриптов с поддержкой мультиязычности
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5
daemon_n, файлы грузятся в порядке приоритетов модов. Русский загрузится раньше английского всегда и первым займёт нужные ключи.

Пример:
rus.json
hero_name = оррин
mage_power = превращение в козла

eng.json
hero_name = Zan'Zarrak
mage_power = turns into goat
welcome_message = Greetings, @hero@

Итоговый словарь в памяти игры:
hero_name = оррин
mage_power = превращение в козла
welcome_message = Greetings, @hero@
(01.12.2017 23:26)Berserker Wrote: [ -> ]   я пишу так:
Попутно создаю Lang\test.json с содержимым:
Code:
{
  "hero_is_x_age": "@hero@ достиг @age@ лет"
}

Выводится: «Berserer достиг 27 лет» Ab

Из каких элементов состоит локализация:
1) Автоматическая подгрузка языковых json-файлов формата { "глобальный уникальный ключ": "перевод", ... }
2) Совпадающие строки из разных модов подчиняются приоритетам модов (последний установленный весомее)
3) Перевод по ключу можно загрузить из ЕРМ или плагина.
4) В перевод можно передать до 7 именованных параметров (плагинам — неограниченно), которые будут подставлены в перевод при необходимости.
@имя параметра@
5) SN:T(ключ)/?(z-переменная)/(параметр 1)/(значение 1)/(параметр N)/(значение N);
Команда получает перевод строки или возвращает сам ключ, если перевод не найден.

Berserker, в последствии ограничение в 7 параметров осталось для ERA2 ?
Bes, осталось ограничение на 16 параметров для ЕРМ команд. Как ты понимаешь, 2 + 7 * 2 = 16. То есть да.
(05.06.2021 01:20)Elmore Wrote: [ -> ]Как вы делаете переводы своих модов? Вопрос к тем, кто не пишет перевод самостоятельно, а пользуется переводчиком.

Можно сделать такую схему:
- Все тексты выносить в отдельный файл и оформлять по единому шаблону. Например в ini с минимум лишнего или типа того.
- В программе указать файл для перевода и файл для сохранения текста. Подходит для любых языков.
- Программой автоматом пройтись по файлу, по очереди брать каждую строку, кидать в браузере на translate.google.com и записывать в новый файл с таким же шаблоном.

google api бесплатное не в счет, там нет ИИ алгоритмов при переводе. Только в платной версии.

Berserker, увидел json из ACM. Ну суть та же. Если все будут использовать единый метод, прога возьмет весь текст и прогонит через переводчик (в ней как раз используется js и nodejs).
Я себе для другой задачи сделал, может смогу и для героев сделать. Сложно сказать, т.к. вижу код вместе с текстом используется и он не всегда даже выделен какими-то спец символами, но вроде гугл такое не переводит. Только вот там распространяемый архив будет небольшой, а для запуска автоматически скачает полноценный браузер ~700мб.
Либо же должно "что-то" еще произойти, чтобы все новые моды хранили тексты только в json (а еще лучше в специальной папке "languages/lang_name" и менять язык где-то в файле-конфиге). Это даст возможность, хоть и не идеально, но получить мультиязычность модов.
Естественно нужно экранировать параметры. @...@ — имя параметра, его нужно до перевода заменить на что-либо, что переводчики оставляют нетронутыми, например [1], а затем вернуть назад. Кода в json нет.
{~%Z6}%Z5%Z-7 Fire Shield{~}
Вот с таким сложнее. Там может еще что-то быть, кроме {}, @@, % ?
Точно, цветные тексты.
-) {~.....}, включая {~}
-) %что-то, где %% — просто процент.
-) @...@
-) {текст} — это выделенный текст. При желании можно открывающую и закрывающую скобки рискнуть тоже обернуть. Зависит от того, портит ли их переводчик.
Это старый код, в новых проектах подставление ЕРМ 1 переменных через %... не рекомендуется категорически, но АСМ был написан до Эры 3.

{~%Z6}%Z5%Z-7 Fire Shield{~}
=>
[1][2][3] Fire Shield[4]
=>
[1][2][3] Огненный щит[4]
Сложность в определении нужного. В данном случае текст из 2х слов и получается:
[{~%Z6}][%Z5%Z-7] [Fire Shield][{~}]
от % до пробела, если не %%
Но пока думаю, как определять процент в середине слова и как обрабатывать... остальное легко.
Такая ситуация "{}%что-то" или "%что-то{}" слитно может быть где-то, кроме начала и конца строки?
Это регулярные выражения или разбор на лету по токенам, как удобнее. Может быть что угодно.
По процентам регулярка вида: /(%[A-Za-z]\-?\d*+)/
Там латинская буква + опциональное число.
Berserker, в json возможна ситуация кроме key.key.value ?
Elmore, в переводных json могут быть объекты любой вложенности, которые заканчиваются парой ключ: строка

{ "a": { "b": { "c": "value"

Они преобразуются в плоскую карту вида "a.b.c.d": "value" самой Эрой. Ключи вида "a.b.c.d" тоже поддерживаются.
Понял, значит будет проверять чуть больше.
I have a bit of difficulty working on non-ascii characters (») with JSON, it doesn't seem to have any way to be shown in the game correctlyy.

Screenshot:
Image: fCY0Mmj.png

The » symbol is both in my ert and json. The one from ert was displayed correctly (blue), while the one from json was just displayed as ? (red).

json:
Code:
{
    "es":{
        "747":{
            "basicDesc": "\n{»} {10%} of unused movement points convert to experience points.  ",
            "advancedDesc": "\n{»} {20%} of unused movement points convert to experience points.    ",
            "expertDesc": "\n{»} {30%} of unused movement points convert to experience points."
        }
    }
}

erm:

I wonder if there is a way to solve it for json, otherwise I may have to do a mix of json +ert. Sorry
No way. Json data is in UTF-8. It's transformed into ANSI (system code page) on load. Most unicode characters are lost during such transformation, except those, which are present in system ANSI encoding. Afterwards those ANSI characters (single byte for Russian/English/Polish and multi-byte for Chinese) are displayed using fnt font.
Berserker, thanks for the answer! 132
Pages: 1 2 3 4 5
Reference URL's