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

Хотите говорить о Far и не знаете, куда обратиться?
2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

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

Post by 2useven10 » Mon 26 Oct, 2015 09:53

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.
Last edited by 2useven10 on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлена ссылка на исходную тему

User avatar
abelenki
Posts: 405
Joined: Thu 02 Jul, 2009 07:39
Location: Perm, Russia
Has thanked: 91 times
Been thanked: 17 times
Contact:

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

Post by abelenki » Tue 27 Oct, 2015 04:12

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

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

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

Post by 2useven10 » Tue 27 Oct, 2015 11:31

Далеко не все пользователи на такое способны.

User avatar
HaRT
Moderator
Posts: 8028
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

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

Post by HaRT » Tue 27 Oct, 2015 12:26

2useven10 wrote: It'll be useful only if we'll support custom user .lng files to override required strings
Это было бы очень удобным способом подстройки.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Yegor
Posts: 844
Joined: Mon 04 Apr, 2005 13:41
Location: Kharkov, Ukraine
Has thanked: 2 times
Been thanked: 7 times

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

Post by Yegor » Tue 27 Oct, 2015 16:22

Немного не в тему, но иметь свой кастомный lng - это хорошо конечно, но есть ли гарантии, что завтра после очередного рефакторинга/удаления ф-ть (e.g. tree), стрОки в новом lng файле "не поедут"? (если бы формат был Key=Value, тогда другой разговор)
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

User avatar
abelenki
Posts: 405
Joined: Thu 02 Jul, 2009 07:39
Location: Perm, Russia
Has thanked: 91 times
Been thanked: 17 times
Contact:

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

Post by abelenki » Tue 27 Oct, 2015 16:48

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

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

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

Post by 2useven10 » Tue 27 Oct, 2015 18:37

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

Code: Select all

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

Code: Select all

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

User avatar
DrKnS
Posts: 4563
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

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

Post by DrKnS » Tue 27 Oct, 2015 20:42

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

Yegor
Posts: 844
Joined: Mon 04 Apr, 2005 13:41
Location: Kharkov, Ukraine
Has thanked: 2 times
Been thanked: 7 times

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

Post by Yegor » Tue 27 Oct, 2015 21:24

Ну если кому-то жалко 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"
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин

User avatar
NightRoman
Posts: 5849
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 8 times
Contact:

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

Post by NightRoman » Tue 27 Oct, 2015 21:44

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

User avatar
HaRT
Moderator
Posts: 8028
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

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

Post by HaRT » Tue 27 Oct, 2015 22:01

NightRoman wrote: Думается, что и в С/C++ все это тоже есть. Локализация приложений - это типовая задача.
Да, так и есть. Если надо, могу вкратце рассказать, как это сделано в Qt, а также показать, где это почитать подробнее.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
DrKnS
Posts: 4563
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

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

Post by DrKnS » Tue 27 Oct, 2015 22:07

NightRoman wrote:комприляцию их в бинарный формат
Мы тут вроде о том, как упростить жизнь любителям (и создателям) персональных переводов, а не наоборот, не?

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

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

Post by 2useven10 » Tue 27 Oct, 2015 22:54

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

User avatar
HaRT
Moderator
Posts: 8028
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

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

Post by HaRT » Tue 27 Oct, 2015 23:01

2useven10 wrote: Имена можно брать производными от языкового файла
Не лучше ли предоставить возможность прописать цепочку суффиксов имён для последовательных подстановок (машина—пользователь—профиль) в конфигурации?
Фар есть инструмент, а не нянька. © 2009 DrKnS

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

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

Post by 2useven10 » Tue 27 Oct, 2015 23:05

На мой взгляд, незачем. Простота - залог здоровья.

User avatar
HaRT
Moderator
Posts: 8028
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

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

Post by HaRT » Tue 27 Oct, 2015 23:07

2useven10 wrote: Простота - залог здоровья
Но тогда надо хотя бы, чтобы файл корректур искался в директории текущего профиля Фара.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

Return to “Обсуждение Far Manager”