Page 1 of 2

Настройка под себя текстовых строк из LNG-файла

Posted: Mon 26 Oct, 2015 09:53
by 2useven10
DrKnS wrote: Starting from 4446 you can amend or reorder those as you wish in lng files.
It'll be useful only if we'll support custom user .lng files to override required strings.

Настройка под себя текстовых строк из LNG-файла

Posted: Tue 27 Oct, 2015 04:12
by abelenki
2useven10 wrote:It'll be useful only if we'll support custom user .lng files to override required strings.
у меня при установке Far через скрипт, штатный FarEng.lng заменяется на исправленный. вполне удобно.

Число папок в текущей панели

Posted: Tue 27 Oct, 2015 11:31
by 2useven10
Далеко не все пользователи на такое способны.

Число папок в текущей панели

Posted: Tue 27 Oct, 2015 12:26
by HaRT
2useven10 wrote: It'll be useful only if we'll support custom user .lng files to override required strings
Это было бы очень удобным способом подстройки.

Число папок в текущей панели

Posted: Tue 27 Oct, 2015 16:22
by Yegor
Немного не в тему, но иметь свой кастомный lng - это хорошо конечно, но есть ли гарантии, что завтра после очередного рефакторинга/удаления ф-ть (e.g. tree), стрОки в новом lng файле "не поедут"? (если бы формат был Key=Value, тогда другой разговор)

Число папок в текущей панели

Posted: Tue 27 Oct, 2015 16:48
by abelenki
Yegor wrote: но есть ли гарантии, что завтра после очередного рефакторинга/удаления ф-ть (e.g. tree), стрОки в новом lng файле "не поедут"?
как "поедут", copy из кастомного .lng две строки и paste в новый. ;)

Число папок в текущей панели

Posted: Tue 27 Oct, 2015 18:37
by 2useven10
Yegor wrote:Немного не в тему, но иметь свой кастомный lng - это хорошо конечно, но есть ли гарантии, что завтра после очередного рефакторинга/удаления ф-ть (e.g. tree), стрОки в новом lng файле "не поедут"? (если бы формат был Key=Value, тогда другой разговор)
Без изменений в работе с .lng файлами проблему не решить.
Но, например, вполне можно хранить в них информацию об исходных идентификаторах строк (немного увелив размер языковых файлов):

Code: Select all

//[MYes]
"Да"
//[MNo]
"Нет"
//[MOk]
"OK"
В кастомных файлах тогда можно будет указывать только изменяемые строки:

Code: Select all

//[MYes]
"Несомненно"

Настройка под себя текстовых строк из LNG-файла

Posted: Tue 27 Oct, 2015 20:42
by DrKnS
Вступление, если кто вдруг не в курсе.
Сейчас lng-файл это тупо список строк. Строки берутся тупо по номеру. Т.е. из кода обращение идёт по индексу, замаскированному именованными константами.
Это просто, быстро и компактно. Для 1996 года - очень уместное решение.
Однако, у него есть фатальный недостаток: при любом изменении индексов (разработчики добавили или удалили строки) ваш личный lng превращается в тыкву.
Возможные альтернативы:
  • список пар строковый_ключ=значение, например ID_OK="OK". Так у очень-очень многих.
    Плюсы:
    • не превращается в тыкву вообще никогда: новые строки останутся непереведёнными, удаленные тоже ничего не сломают, разве что осядут мусором.
    • Можно создавать производные lng, указав какой-то в качестве базового и переопределив только некоторые строки
    Минусы:
    • Более жирные lng (раза в полтора).
    • Более жирный far (килобайт на 100), как на диске, так и в памяти.
    • Более медленное получение строк (не мерял, возможно раз в тысячу, но следует понимать, что это значит микросекунды вместо наносекунд).
      С моей точки зрения всё это мелочи, но пуристы могут не согласиться.
  • список пар индекс=значение, например 42="ОК". С гарантией со стороны разработчиков, что отныне и до тепловой смерти вселенной новые индексы добавляются только в конец списка, удалённые повторно не используются.
    Плюсы: те же, что и в предыдущем случае.
    Минусы:
    • Требует админресурса и контроля.
    • При добавлении только в конец о группировке родственных строк можно забыть, если, конечно, сразу не резервировать индексы блоками с большим запасом.
При любых изменениях поддержка старого формата останется, как минимум, для плагинов.

Настройка под себя текстовых строк из LNG-файла

Posted: Tue 27 Oct, 2015 21:24
by Yegor
Ну если кому-то жалко 100 кил для Фара в памяти, то можно гибридный вариант, держать два файла:

keys.lng - строковые ключи. Ключи берутся по номеру. Порядок важен.
FarEng.lng - список пар ключ=значение в любом порядке.

keys.lng

Code: Select all

ID_OK
ID_CANCEL
...
FarEng.lng

Code: Select all

ID_CANCEL="Cancel"
...
ID_OK="OK"

Настройка под себя текстовых строк из LNG-файла

Posted: Tue 27 Oct, 2015 21:44
by NightRoman
Пока не изучал предметную область, но вроде уже изобрели ресурсные текстовые файлы и комприляцию их в бинарный формат. Может, стоит в этом направлении подумать? В Фарнет, скажем, я так и сделал. Там .NET подход со своими методами в .NET по доступу к ресурсам. Думается, что и в С/C++ все это тоже есть. Локализация приложений - это типовая задача. Но еще раз оговорюсь, для С++ не изучал, могу ошибаться.

Настройка под себя текстовых строк из LNG-файла

Posted: Tue 27 Oct, 2015 22:01
by HaRT
NightRoman wrote: Думается, что и в С/C++ все это тоже есть. Локализация приложений - это типовая задача.
Да, так и есть. Если надо, могу вкратце рассказать, как это сделано в Qt, а также показать, где это почитать подробнее.

Настройка под себя текстовых строк из LNG-файла

Posted: Tue 27 Oct, 2015 22:07
by DrKnS
NightRoman wrote:комприляцию их в бинарный формат
Мы тут вроде о том, как упростить жизнь любителям (и создателям) персональных переводов, а не наоборот, не?

Настройка под себя текстовых строк из LNG-файла

Posted: Tue 27 Oct, 2015 22:54
by 2useven10
Работу фар с локализацией можно вообще оставить почти без изменений.
Загрузка .lng и использование языковых сообщений остаётся без изменений.
Надо чуть допилить lng транслятор, чтобы делал не только enum, но и массив строк идентификаторов.
Эти идентификаторы нужны только на момент загрузки 'модификаторов', память - не больше 20к, скорость не изменится.
Базовые языковые файлы без изменений. Надо только дописать загрузку модификаций (если они есть).
Для них естественный формат ID="Text". Имена можно брать производными от языкового файла - FarRus.lng.mod

Настройка под себя текстовых строк из LNG-файла

Posted: Tue 27 Oct, 2015 23:01
by HaRT
2useven10 wrote: Имена можно брать производными от языкового файла
Не лучше ли предоставить возможность прописать цепочку суффиксов имён для последовательных подстановок (машина—пользователь—профиль) в конфигурации?

Настройка под себя текстовых строк из LNG-файла

Posted: Tue 27 Oct, 2015 23:05
by 2useven10
На мой взгляд, незачем. Простота - залог здоровья.