Current time: 27.11.2024, 02:48 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Создание скриптов с поддержкой мультиязычности
» SN:T + json
Author Message
Berserker Offline
Administrators

Posts: 16657
Post: #31

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@


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
15.09.2020 01:35
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #32

(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 ?
06.11.2020 00:41
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #33

Bes, осталось ограничение на 16 параметров для ЕРМ команд. Как ты понимаешь, 2 + 7 * 2 = 16. То есть да.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
06.11.2020 01:24
Find all posts by this user Quote this message in a reply
Elmore Offline

Posts: 608
Post: #34

(05.06.2021 01:20)Elmore Wrote:  Как вы делаете переводы своих модов? Вопрос к тем, кто не пишет перевод самостоятельно, а пользуется переводчиком.

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

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

Berserker, увидел json из ACM. Ну суть та же. Если все будут использовать единый метод, прога возьмет весь текст и прогонит через переводчик (в ней как раз используется js и nodejs).
Я себе для другой задачи сделал, может смогу и для героев сделать. Сложно сказать, т.к. вижу код вместе с текстом используется и он не всегда даже выделен какими-то спец символами, но вроде гугл такое не переводит. Только вот там распространяемый архив будет небольшой, а для запуска автоматически скачает полноценный браузер ~700мб.
Либо же должно "что-то" еще произойти, чтобы все новые моды хранили тексты только в json (а еще лучше в специальной папке "languages/lang_name" и менять язык где-то в файле-конфиге). Это даст возможность, хоть и не идеально, но получить мультиязычность модов.


Image: widget.png?style=banner2
(This post was last modified: 05.06.2021 23:28 by Elmore.)
05.06.2021 23:21
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #35

Естественно нужно экранировать параметры. @...@ — имя параметра, его нужно до перевода заменить на что-либо, что переводчики оставляют нетронутыми, например [1], а затем вернуть назад. Кода в json нет.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
06.06.2021 00:29
Find all posts by this user Quote this message in a reply
Elmore Offline

Posts: 608
Post: #36

{~%Z6}%Z5%Z-7 Fire Shield{~}
Вот с таким сложнее. Там может еще что-то быть, кроме {}, @@, % ?


Image: widget.png?style=banner2
06.06.2021 01:07
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #37

Точно, цветные тексты.
-) {~.....}, включая {~}
-) %что-то, где %% — просто процент.
-) @...@
-) {текст} — это выделенный текст. При желании можно открывающую и закрывающую скобки рискнуть тоже обернуть. Зависит от того, портит ли их переводчик.
Это старый код, в новых проектах подставление ЕРМ 1 переменных через %... не рекомендуется категорически, но АСМ был написан до Эры 3.

{~%Z6}%Z5%Z-7 Fire Shield{~}
=>
[1][2][3] Fire Shield[4]
=>
[1][2][3] Огненный щит[4]


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
06.06.2021 01:57
Find all posts by this user Quote this message in a reply
Elmore Offline

Posts: 608
Post: #38

Сложность в определении нужного. В данном случае текст из 2х слов и получается:
[{~%Z6}][%Z5%Z-7] [Fire Shield][{~}]
от % до пробела, если не %%
Но пока думаю, как определять процент в середине слова и как обрабатывать... остальное легко.
Такая ситуация "{}%что-то" или "%что-то{}" слитно может быть где-то, кроме начала и конца строки?


Image: widget.png?style=banner2
(This post was last modified: 06.06.2021 02:20 by Elmore.)
06.06.2021 02:17
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #39

Это регулярные выражения или разбор на лету по токенам, как удобнее. Может быть что угодно.
По процентам регулярка вида: /(%[A-Za-z]\-?\d*+)/
Там латинская буква + опциональное число.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
06.06.2021 02:53
Find all posts by this user Quote this message in a reply
Elmore Offline

Posts: 608
Post: #40

Berserker, в json возможна ситуация кроме key.key.value ?


Image: widget.png?style=banner2
(This post was last modified: 11.06.2021 15:14 by Elmore.)
11.06.2021 15:11
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #41

Elmore, в переводных json могут быть объекты любой вложенности, которые заканчиваются парой ключ: строка

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

Они преобразуются в плоскую карту вида "a.b.c.d": "value" самой Эрой. Ключи вида "a.b.c.d" тоже поддерживаются.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
11.06.2021 16:25
Find all posts by this user Quote this message in a reply
Elmore Offline

Posts: 608
Post: #42

Понял, значит будет проверять чуть больше.


Image: widget.png?style=banner2
(This post was last modified: 11.06.2021 17:34 by Elmore.)
11.06.2021 17:33
Find all posts by this user Quote this message in a reply
Archer30 Offline
Moderators

Posts: 1175
Post: #43

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


Latest ERA mods and scripts in development - My GitHub
(This post was last modified: 03.04.2022 17:52 by Archer30.)
03.04.2022 13:33
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #44

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.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
03.04.2022 17:48
Find all posts by this user Quote this message in a reply
Archer30 Offline
Moderators

Posts: 1175
Post: #45

Berserker, thanks for the answer! 132


Latest ERA mods and scripts in development - My GitHub
03.04.2022 17:51
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group