doom2d.org

Главная база плоских морпехов
It is currently 24 May 2024, 04:29

All times are UTC + 3 hours




Post new topic Reply to topic  [ 13 posts ] 
Author Message
PostPosted: 11 Aug 2014, 01:30 
Offline
Приколист
User avatar

Joined: 17 Oct 2009, 19:54
Posts: 871
Location: Ульяновск
Сейчас в игре всего два языка, и добавить третий обычный пользователь не может. Предлагаю так:
1) Файлы локализации имеют расширение lng и располагаются либо в папке data (как сейчас), либо в отдельной.
2) Сам файл в принципе может быть устроен как и сейчас, только должен иметь параметр с названием языка для показа его в опциях, например
Code:
[LANGUAGE]
Русский
3) В файле Doom2DF.cfg в параметр Language записывается используемый файл локализации, например
Code:
[Game]
Language=russian.lng
4) Игра ищет языковые файлы в папке каждый раз при входе в опции языка или при старте, если отсутствует параметр в Doom2DF.cfg. Сохранять список этих файлов не вижу смысла.

_________________
Точность превыше всего.


Top
 Profile  
 
PostPosted: 11 Aug 2014, 02:05 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6680
Location: Владивосток
Люто, бешено плюсую.
В папке data нужна папка languages, в которой будут храниться пакеты локализации. Данные пакета упакованы в WAD, мб потом сменим на ZIP. Название WAD'а является одновременно названием языка (т.е. отображается в меню выбора языка) и должно быть на английском. Отображать его самоназванием не получится - во время выбора языка у нас банально не будут загружены шрифты для этого языка.

Внутри находятся такие ресурсы:
  • текстовый файл с локализованными строками
  • файл описания локализации в таком формате:
    Code:
    codepage = 1251  //индекс однобайтовой кодировки для данного языка
    charset = 204    //индекс таблицы символов для данного языка
    fonts = -1       //использует ли локализованные шрифты
  • собственные шрифты (если локализация их использует)

Стоит пояснить по шрифтам. В Game.wad лежат шрифты с символами 0-127, которые не меняются. Пакеты локализаций же в случае использования ими своих шрифтов содержат в себе вторую половину (т.е. национальную часть) однобайтовой кодировки для шрифтов из Game.wad, то бишь символы 128-255.

Собственно, это концепция пакетов локализации из Doom2DMP 0.65, уже отлично работающая и довольно-таки гибкая.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 12 Aug 2014, 04:04 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7535
Location: \\HULK
А если юникод?

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 12 Aug 2014, 04:13 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6680
Location: Владивосток
Jabberwock wrote:
А если юникод?
Delphi 7 его не поддерживает. Тут надо либо на более новую Delphi перекатываться, либо на FPC. Плюс кодировку или хотя бы локаль тебе всё равно понадобится знать, чтобы правильно шрифты загрузить.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 10 Mar 2015, 12:19 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6680
Location: Владивосток
Я тут правил некоторые строки в русской локализации редактора и наткнулся на любопытный баг.
Если заменять текст на компонентах с включённым AutoSize (авторазмер компонента по тексту на нём) непосредственно при активации формы с этим компонентом (т.е. в событии FormActivate), то автоподгонка до размеров окна родительских компонентов сглючит если после присвоения нового текста компонент сам изменил свой размер.
У нас так работает подгрузка языка в редакторе, поэтому я заметил этот баг когда захотел исправить надоевшее "Длина текстуры" на канонiчное "Ширина текстуры":

Image

Также стоит отметить, что баг заметен только если форма была развёрнута в FormCreate, однако я не гарантирую, что его не будет в других случаях.
При дальнейших же сменах языка в настройках такого не наблюдается.

Баг, конечно же, совершенно некритичный. Его даже можно не править, поскольку даже переписывание редактора с нуля на Lazarus кажется мне менее туманной затеей, чем введение поддержки пакетов локализации в текущий код.

Да, по поводу локализации: в редакторе много надписей, размер которых автоматически не подгоняется и рассчитан на русскую длину слова (наследие от одноязычности). Таким надписям надо либо включить AutoSize, либо, в случае невозможности это сделать, растянуть компонент на оставшееся место.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 18 Feb 2023, 11:07 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6680
Location: Владивосток
Со временем понял, что смысла в этом не так-то и много, зато вот проблем с внедрением и поддержкой создаётся немерено.
Это как минимум нужны переводчики на другие языки, игровые шрифты на юникоде или отдельных кодировках, художники для этих шрифтов и контроль качества всего этого.
В то же время английский и русский языки с лёгкостью покрывают подавляющее большинство нашей потенциальной аудитории.

Поэтому отклонено.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 18 Feb 2023, 15:50 
Offline
Приколист
User avatar

Joined: 04 Feb 2010, 14:42
Posts: 902
Location: Equestria
Внутре все равно надо сделать адекватную штуку для переводов. Две гигантских таблицы прямо в коде для русского и английского это жостко, причем в cp1251. Я часто забиваю и просто пишу на английском.
Как вариант дропнуть поддержку русского языка :P


Top
 Profile  
 
PostPosted: 18 Feb 2023, 18:15 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6680
Location: Владивосток
DeaDDooMER» причем в cp1251
Думаю, надо будет преобразовать исходники в юникод как только я подниму зеркало репозитория на GitHub.

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 18 Feb 2023, 18:55 
Offline
Приколист
User avatar

Joined: 04 Feb 2010, 14:42
Posts: 902
Location: Equestria
данные должны быть именно в cp1251, поэтому g_language.pas нельзя сходу перекодировать.


Top
 Profile  
 
PostPosted: 18 Feb 2023, 21:55 
Offline
Site Admin
User avatar

Joined: 17 Oct 2009, 23:43
Posts: 7535
Location: \\HULK
Да, русского и английского достаточно.

Отмечу, кстати, что в русском у нас также поддерживаются символы украинского и белорусского.
Так что украинец или белорус, по идее, тоже может чатиться и писать свой ник на родном языке.

Наверное, если будет запрос, можно будет по аналогии добавить во ввод английского всякие умляуты для немцев и турок.

_________________
И неважно, что нет морей на Марсе, каждый морпех носит море в сердце.


Top
 Profile  
 
PostPosted: 18 Feb 2023, 22:56 
Offline
Принципиально неуничтожаем
User avatar

Joined: 18 Oct 2009, 04:01
Posts: 6680
Location: Владивосток
DeaDDooMER wrote:
данные должны быть именно в cp1251, поэтому g_language.pas нельзя сходу перекодировать.
Ну да, всё так. Вот тебе пример получения Windows-1251 строк внутри исполняемого файла, собранного из исходника в UTF-8:
Code:
{$codepage utf8}  // instead of UTF-8 BOM which sucks

program project1;

uses
  cp1251;

type
  CP1251String = type AnsiString(1251);

const
  lit: CP1251String = 'русский';

begin
  writeln(lit);
  readln;
end.

На всякий случай сохраню здесь ссылки с описанием реализации строк во FreePascal, а то я каждый раз устаю их искать.

https://wiki.freepascal.org/FPC_Unicode_support
https://wiki.freepascal.org/Character_and_string_types
https://wiki.freepascal.org/User_Changes_3.0#AnsiStrings_are_now_codepage-aware
https://wiki.freepascal.org/$codePage
https://wiki.freepascal.org/Ansistring
https://wiki.freepascal.org/String
https://wiki.freepascal.org/PChar
https://www.freepascal.org/docs-html/rtl/cp1251/index.html

_________________
Чёрный Думер, Чёрный Думер
С монстрами сражается.
Чёрный Думер, Чёрный Думер
Рокетланчер плавится.


Top
 Profile  
 
PostPosted: 18 Feb 2023, 23:21 
Offline

Joined: 27 Apr 2020, 20:02
Posts: 220
Черный Думер wrote:
Code:
{$codepage utf8}  // instead of UTF-8 BOM which sucks

Можно хотя бы в коде сдерживаться и менее токсично выражать свои мнения по тому или иному явлению? Ей богу, в ДФ в коде куча "windoze", "winshit", "wingovno", "mac govno" и остального в этом же духе, которое отталкивает людей и засоряет восприятие кода

Мда

Image



Top
 Profile  
 
PostPosted: 19 Feb 2023, 00:11 
Offline
Приколист
User avatar

Joined: 04 Feb 2010, 14:42
Posts: 902
Location: Equestria
Черный Думер wrote:
Ну, да. Вот тебе пример получения Windows-1251 строк внутри исполняемого файла, собранного из исходника в UTF-8:
ок, коммитуй


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 13 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
doom2d.org, since 2005