Чтение из языкового файла .lng (расширение GetMsg)

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4269
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Чтение из языкового файла .lng (расширение GetMsg)

Post by buniak_a_h »

Здравствуйте!
Реализовал "расширенную" версию функции GetMsg.







Выпустил версию 5.

В связи с включением в скрипт информационных данных (истории, примеров, инструкции) он разросся, и я не стану больше помещать сам скрипт в текст поста. Только во вложении.
GetMsg.v5.lua.7z
Версия 1.5.1
(4.97 KiB) Downloaded 155 times
Last edited by buniak_a_h on Sat 28 Dec, 2019 07:25, edited 8 times in total.
User avatar
buniak_a_h
Posts: 4269
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Чтение из языкового файла .lng

Post by buniak_a_h »

Latest post of the previous page:

Выложена 5-я версия. Основные изменения:
1. Поиск файла по маске и по регэкспу (учитывается служебная строка .Language=…
2. Раньше информация из файла File.lng.custom читалась ТОЛЬКО в формате <Name>="<Value>". Однако:
changelog wrote:Такой формат также допустим в .lng.custom файлах.

Code: Select all

//[MListFileSize]
" %1 bytes in %2 files, %3 folders "
3. Расширение переменных среды.
User avatar
John Doe
Бюрократ
Posts: 13866
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Чтение из языкового файла .lng

Post by John Doe »

Из шапки не вполне ясно, как этим пользоваться.
А всё что до "Похоже, нет." стоит убрать под спойлер.
User avatar
buniak_a_h
Posts: 4269
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Чтение из языкового файла .lng

Post by buniak_a_h »

John Doe wrote: Fri 06 Dec, 2019 12:42 Из шапки не вполне ясно, как этим пользоваться.
Там примеры, доступные из ScriptsBrowser-а . Но Вы правы, допишу в шапку.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Чтение из языкового файла .lng (расширение GetMsg)

Post by citRiks »

Задумка хорошая, спасибо.
Реализацию пока не могу оценить по достоинству, у меня или лыжи не едут, или я сам е.. не такой какой-то.
Как получить фаровскую строку в теперешнем языке фара (я правильно сказал на русском "current far lang"?) для, например //[MOk].
Я грешным делом подумал что это должно быть GetMsg("//[MOk]"), ан нет.
Полез читать, смотеть примеры использования, и не нашел там искомого.
Просветите пожалуйста?
А еще лучше добавьте функцию просто берущую //[MOk] и возвращающую то что надо,
без свистопляски с файлами и параметрами
User avatar
buniak_a_h
Posts: 4269
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Чтение из языкового файла .lng (расширение GetMsg)

Post by buniak_a_h »

Первый параметр - имя языкового файла. Для стандартного укажите '%FarHome%\\far*.lng'
Собственно, в этом и главная суть - читать из другого файла. Странно, что ShowHelp даёт такую возможность, а GetMsg - нет!
Короче, lua:=require("BAX.GetMsg")('%FarHome%\\far*.lng', 'MOk') возвращает что надо.
--
P/S. В шапке есть два примера получения строки из стандартного far*.lng ;-)
--
PPS.
citRiks wrote: Sat 28 Mar, 2020 10:58 добавьте функцию просто берущую //[MOk] и возвращающую то что надо,
без свистопляски с файлами и параметрами
1. Т.е. главное (возможность чтения из файла) выбросить?
Единственно, что могу предложить - при передаче первого параметра == nil подставлять %FarHome%\\far*.lng.
2. Если в Вашем макросе часто такое нужно - переопределите

Code: Select all

local function FarMsgEx(tag) return require("BAX.GetMsg")('%FarHome%\\far*.lng', tag) end.
Я так часто делаю (только вместо '%FarHome%\\far*.lng указываю свой языковой файл, "поставляемый" со скриптом).
Last edited by buniak_a_h on Sat 28 Mar, 2020 16:47, edited 2 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Чтение из языкового файла .lng (расширение GetMsg)

Post by citRiks »

buniak_a_h, спасибо!
A eсли со звездочкой ('%FarHome%\\far*.lng', 'MOk'), то .LNG оно берет первый попавшийся или именно и строго дефолтный?
PS
проверил имея еще белорусский, по алфавиту первый.
вроде выходит все равно дефолтный, у меня инглиш.
но лучше иметь вашу на то официальную гарантию :)
Last edited by citRiks on Sat 28 Mar, 2020 19:05, edited 2 times in total.
User avatar
buniak_a_h
Posts: 4269
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Чтение из языкового файла .lng (расширение GetMsg)

Post by buniak_a_h »

citRiks wrote: Sat 28 Mar, 2020 18:59 A eсли со звездочкой ('%FarHome%\\far*.lng', 'MOk'), то .LNG оно берет первый попавшийся или именно и строго дефолтный?
Если имя файла со звёздочкой, то используется служебная информация из строки .Language= (не помню, считается ли обязательным, чтоб она была первой. Думаю, даже если и так, то это - несущественное ограничение).
На самом деле сильно не оптимизировано: напрашиваются ещё два способа вызова функции: с пустой строкой - получить имя lng-файла (чтоб потом не перебирать все по маске. А то это может быть - особенно на сети - не быстро) . с тегом "*" - получить сразу все строки, вернуть таблицу. Просто пока у меня не было необходимости оптимизировать.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Чтение из языкового файла .lng (расширение GetMsg)

Post by citRiks »

buniak_a_h,
а у вас такой вызов:
lua:=require("BAX.GetMsg")('%FarHome%\\Far*.lng', 'MOk')
.. работает?
У меня работает странно, на одном компе работает, на другом нет
* Винда 7 х64 Проф. СП1 версии ФАРа 5577 х32+х64 5577 - все Ок
* Винда 7 х32 Дом. СП1 версия ФАРа 5577 х32 - не работает

запустите у себя плиз, если не будет странных явлений, и если вам интересно,
я подробнее отпишусь об ситуации, там какая сложная бредятина ее описывать
У себя-то я как-то решил (возможно пер-анально),
и если у вас есть желание пофиксить,
и если у вас самого ничего странного не воспроизводиться,
то отпишусь завтра подробнее
User avatar
buniak_a_h
Posts: 4269
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Чтение из языкового файла .lng (расширение GetMsg)

Post by buniak_a_h »

citRiks, ну, вообще-то именно так я и проверил перед тем, как Вым посылать ответ - работает.
Я напоролся на ситуацию, что сразу после установки нет SQL-базы с настройками.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Чтение из языкового файла .lng (расширение GetMsg)

Post by citRiks »

buniak_a_h,
A, заметил, это тот же код который у вас работает и который вы мне сами и дали.
в любом случае, завтра попробую на еще одном компе, и отпишусь подробнее.
если совсем вкратце - там есть некий интересный загибон с require, - на "плохом" компе
он зачем-то, и при этом вызове, считает что ему чего-то надо в TreePanelRus.Lng сначала,
ну в общем завтра
User avatar
buniak_a_h
Posts: 4269
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Чтение из языкового файла .lng (расширение GetMsg)

Post by buniak_a_h »

Конкретно про TreePanelRus.Lng - там ошибка: в имени файла Rus, а внутри .Language=English. Видимо, имеет смысл переименовать. У меня на новеньком компе тоже вылетало. Просто на моём язык помощи русский установлен.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Чтение из языкового файла .lng (расширение GetMsg)

Post by citRiks »

DV wrote: Fri 10 Apr, 2020 11:09 У меня в FAR выбран ангийский язык для интерфейса и для справки.
Не могу подружиться с модулем GetMsg. Распаковал его в папку Profile\Macros\modules\BAX.
Перезапускаю FAR - и вижу сообщение от GetMsg: "Не найдено языковых файлов, соответствующих маске".
Какой языковой файл не найден, для какого языка - непонятно.
Сделал копию TreePanelRus.lng, дав ей имя TreePanelEng.lng, - получаю ту же ошибку...
Видимо мне все таки придется открыть тайну золотого ключика,
хотел написать какое-то умное ообЬяснение, но время ...
присоединяю файл с фиксом от @Xer0X,
можетет просто сравнить его с оригиналом
Attachments
GetMsg.Lua.fix@Xer0X.7z
(5.01 KiB) Downloaded 37 times
DV
Posts: 455
Joined: Mon 07 Aug, 2006 08:23
Has thanked: 31 times
Been thanked: 15 times

Чтение из языкового файла .lng (расширение GetMsg)

Post by DV »

И, наверное, имеет смысл сделать сообщение об ошибке более детальным: по какой маске искался файл, для какого языка.
Например (пример абстрактный, просто, чтобы проиллюстрировать подход):

Code: Select all

Не найдено языковых файлов, соответствующих маске TempPanel*.lng для языка Eng
Поскольку скрипт проверяет ещё и содержимое файла (насколько я понял), то в сообщение об ошибке можно добавить вторую строку:

Code: Select all

Ожидалось, что файл начинается строкой .Language=English
User avatar
buniak_a_h
Posts: 4269
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Реализовать дерево директорий панельным модулем на Луа

Post by buniak_a_h »

citRiks wrote: Fri 10 Apr, 2020 15:32 не думаю что дело в английском хелпе которого нет,
я думаю дело в другом, посмотрите мой ответ в теме про GetMsg
Дело именно в том, что нет языкового файла. В чём ещё может быть, если нужного файла нету? Я не смотрел то, что Вы прислали, но в любом случае, даже если "исправление" исправляет, то это - заплатка. Исправлять надо причину, а не диагностику.
User avatar
buniak_a_h
Posts: 4269
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Чтение из языкового файла .lng (расширение GetMsg)

Post by buniak_a_h »

DV, насчёт диагностики - согласен, надо. Просто опубликовано было очень давно, но никто не заинтересовался, я и решил - чего буду "красоту наводить"? Типо для моих целей и так сойдёт. Хотя на самом деле некоторые возможности (указание файла и строковые теги) очень надо добавить в стандартную GetMsg. Для единообразия (подобия с ShowHelp). Но… Убедить авторов мне не удалось.
А "фикс от XerOX-а" - это не фикс, а заплатка. Возможно, маскирующая реальную ошибку. В мой текст включён не будет!
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Реализовать дерево директорий панельным модулем на Луа

Post by citRiks »

buniak_a_h, можно и так сказать, ну я бы лучше так поступил:
"если нет желательного(дефолтного) языкового файла,
то скрипт должне молча брать тот который есть,
или у него должно быть все что нужно чтобы бежать совсем без язывого файла"
Post Reply

Return to “Обсуждение макросов”