Страница 1 из 1

"Проскальзывание" сторонних языков

Добавлено: 18 июл 2013, 01:35
Gorlum
По поводу появления сообщений на "неродных" языках - английском, казахском

Кратко:
Глюк с неродными языками известен, понятен, но очень трудоемок в устранении. Разработчик - знает об этом и думает о вас всё то время, когда не думает о чем-то другом.

Многобукав:
Дело в том, что изначально при всей своей пыжестости на мультиязычность, xnova совершенно не приспособленна под мультиязычность. Парадоксально - но факт. Фактически, локализован только пользовательский интерфейс - всё это отображение на страничках, которое видет средний пользователь. Но при этом xnova по умолчанию считает, что весь язык на сервере - один и тот же. Т.е. когда кто-то в Немеччине ставит Немецкую локализацию и играют только Немцы - всё ОК. Все игроки видят сообщения на Немецком языке, все довольны, все смеются, аки идиоты. Но стоит на сервере появится Ингличанину - как начинаются проблемы...
Дело в том. что в нормальном движке должно быть деление на типы языков. В частности нужно различать контекст языка. А он бывает разный: системный контекст (для системных сообщений), контекст активного пользователя (то, что видет в интерфейсе активный пользователь) и контекст обрабатываемого пользователя (то, что должен увидеть тот пользователь, запросы которого сейчас обрабатываются). Один язык для всех более-менее работает на всяких CMS (поскольку там "активный" и "обрабатываемый" пользоатель суть одно лицо), но совершенно не пригодно для MMO-игр, таких как xnova.
Поясню на примере. Пусть у нас дефолтный язык для сервера - русский (основной язык сервера, АКА "системный контекст"), играет пользователь с украинским языком (т.е. "активный контекст" - то, что видит пользователь на экране - украинский), а обрабатывается пользователь с английским языком (например - атакуют пользователя, у который "обрабатываемый контекст" - английский).
Что должно произойти в идеальном случае? В системные логи должно быть записано сообщение на русском языке (например, если в результате атаки активный игрок получил ТМ), активный пользователь должен получить в почту сообщение об атаке на украинском языке, а его атакуемый сосерверник - на английском языке.
Как же происходит дело в ублюдочной реальности xnova? В системные логи идет хардкодед сообщение на том языке, которое жестко прописано в исходниках; активный и обрабатываемый пользователь получает сообщение на украинском языке - языке, который является "контекстным" для активного пользователя. На языке активного пользователя (украинский) получаются и боевые отчеты. ЖОПА!
Еще большая жопа видится при рассмотрении всего происходящего на сервере. Например - ВСЕ сообщения, которые отправлены в контексте активного пользователя (не важно - атакует пользователь игрока или нет) будут отправлены в контексте языка активного пользователя! ЖОПА В КВАДРАТЕ!

Я знаю об этой проблеме и по мере переписывания частей движка, пытаюсь от неё уйте. Например, боевой отчет уже является контексто-независимым в том смысле, что каждый участник боя увидит боевой отчет на своем родном языке.

Увы, дальнейшие работы по внедрению нескольких контекстов языка в сообщения сервера являются достаточно трудоемкими. Они есть в планах. Но вот когда они будут реализованы - сие есть загадко. ДАЙТЕ ДЕНЕГ! Э... О чём это я? Ах, да - по традиции ускорить внедрение каких-либо изменений в движок можно просто дав денег Разработчику. Т.е. мне.