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

Здесь обсуждается всё, что касается макросов.
2useven10
Posts: 3620
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 3 times
Been thanked: 143 times

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

Post by 2useven10 » Tue 06 Nov, 2018 18:38

Latest post of the previous page:

buniak_a_h, Насколько я понял...
Вы читаете .lng файл,
если BOM у него в середине - файл 'плохой',
если для себя вы BOM убрали - ваш скрипт отработает,
но файл останется плохим и это может вылезти где-то ещё (если файл читается другими средствами).
Если ваш скритп покажет ошибку - файл может быть исправлен раньше, т.е. ваш скрипт будет 'спец. средством' обнаружившим ошибку.

buniak_a_h
Posts: 582
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 57 times
Been thanked: 13 times
Contact:

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

Post by buniak_a_h » Tue 06 Nov, 2018 19:11

2useven10 wrote:
Tue 06 Nov, 2018 18:38
Если ваш скритп покажет ошибку - файл может быть исправлен раньше, т.е. ваш скрипт будет 'спец. средством' обнаружившим ошибку.
Понятно, спасибо. Легко, сделаю диагностику. Но Ignore всё же оставлю...

buniak_a_h
Posts: 582
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 57 times
Been thanked: 13 times
Contact:

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

Post by buniak_a_h » Tue 06 Nov, 2018 19:19

Кстати!
Wikipedia
Если же символ U+FEFF встречается в середине потока данных, он должен интерпретироваться как «нулевой ширины неразрывный пробел» (по существу, неотображаемый и ничего не меняющий символ)
Т.е. по стандарту BOM-сигнатуру надо просто игнорировать...
Т.е. вроде как файл-то вполне валидный. А если другой софт будет "валиться" BOM-ом внутри, то это - проблема другого софта...

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

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

Post by HaRT » Tue 06 Nov, 2018 19:55

buniak_a_h wrote:
Tue 06 Nov, 2018 19:19
Wikipedia wrote: Если же символ U+FEFF встречается в середине потока данных, он должен интерпретироваться как «нулевой ширины неразрывный пробел» (по существу, неотображаемый и ничего не меняющий символ)
Однако не стоит забывать, что это относится только к маркеру для UTF-16, но не для UTF-8.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
DrKnS
Posts: 5002
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 166 times

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

Post by DrKnS » Tue 06 Nov, 2018 20:21

Я так понимаю, что служебная информация в начале lng никого не напрягает, все упирается в противный бом?

2useven10
Posts: 3620
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 3 times
Been thanked: 143 times

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

Post by 2useven10 » Tue 06 Nov, 2018 20:59

Как я понимаю, служебная информация скриптом благополучно игнорируется с BOM или без него.
Проблемы могут быть при склеивании 'самодельных' .lng файлов в которых никакой служебной информации нет.

buniak_a_h
Posts: 582
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 57 times
Been thanked: 13 times
Contact:

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

Post by buniak_a_h » Tue 06 Nov, 2018 22:00

HaRT wrote:
Tue 06 Nov, 2018 19:55
Однако не стоит забывать, что это относится только к маркеру для UTF-16, но не для UTF-8.
На сайтеW3Cнаписано:
Potential issues with the UTF-8 BOM
<...>
This is because the BOM is not stripped before inclusion into the page, and acts like a character occupying a line of text.
По стандарту BOM в любом месте, кроме начала, надо заменять на \n. Но тогда переделывать проверку, искать тег ДО и ПОСЛЕ BOM ... В этом как раз есть сермяга: при склеивании первый файл может не оканчиваться пусто строкой. Но вот это - точно может сильно замедлить получение локализованной строки (поиск)... Проще, действительно, удалять в начале всех строк. Компромисс...
DrKnS wrote:
Tue 06 Nov, 2018 20:21
Я так понимаю, что служебная информация в начале lng никого не напрягает, все упирается в противный бом?
Я не знаю, на что может повлиять эта служебная информация в плане получения строки по тегу. Её я в скрипте просто игнорирую.
2useven10 wrote:
Tue 06 Nov, 2018 20:59
Проблемы могут быть при склеивании 'самодельных' .lng файлов в которых никакой служебной информации нет.
Совершенно верно. Просто представил, что группа товарищей "локализовала" нечто, разделив работу, а потом администратор просто слил файлы *.lng.custom, полученные от сотрудников. Ситуация гипотетическая, но "оправдывающая" мою лень (нежелание проверять, начало ли файла).

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

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

Post by HaRT » Tue 06 Nov, 2018 22:05

buniak_a_h wrote:
Tue 06 Nov, 2018 22:00
По стандарту BOM в любом месте, кроме начала, надо заменять на \n.
Это по какому такому стандарту?! На странице по ссылке написано, что нежелательное поведение наблюдается (из-за неправильного софта), а не то, что наблюдаемое нежелательное поведение является стандартным.
Фар есть инструмент, а не нянька. © 2009 DrKnS

buniak_a_h
Posts: 582
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 57 times
Been thanked: 13 times
Contact:

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

Post by buniak_a_h » Tue 06 Nov, 2018 22:28

HaRT wrote:
Tue 06 Nov, 2018 22:05
buniak_a_h wrote:
Tue 06 Nov, 2018 22:00
По стандарту BOM в любом месте, кроме начала, надо заменять на \n.
Это по какому такому стандарту?! На странице по ссылке написано, что нежелательное поведение наблюдается (из-за неправильного софта), а не то, что наблюдаемое нежелательное поведение является стандартным.
Извините, неточно выразился.
Имеется софт, который интерпретирует BOM как \n . И этот софт упомянут в официальных документах. Значит, такое поведение не считается криминалом, а некоей "особенностью", которую надо учитывать.
По стандарту же BOM надо просто игнорировать.
Короче, тема не стоит времени, потраченного на обсуждение. Ну, игнорирую - и игнорирую. Хуже от этого никому не станет (если кто-нить станет использовать скрипт), а вот помочь может.

User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 133 times

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

Post by John Doe » Wed 07 Nov, 2018 08:28

buniak_a_h wrote:
Tue 06 Nov, 2018 22:28
Ну, игнорирую - и игнорирую
Непоследовательно игнорируете. Если уж у вас бом может встретится в любом месте, то недостаточно его ингнорировать в начале строк.

buniak_a_h
Posts: 582
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 57 times
Been thanked: 13 times
Contact:

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

Post by buniak_a_h » Wed 07 Nov, 2018 08:41

John Doe wrote:
Wed 07 Nov, 2018 08:28
buniak_a_h wrote:
Tue 06 Nov, 2018 22:28
Ну, игнорирую - и игнорирую
Непоследовательно игнорируете. Если уж у вас бом может встретится в любом месте, то недостаточно его ингнорировать в начале строк.
Я в курсе. Я же писал - разумный компромисс. С одной стороны, намного эффективнее, чем поиск в любом месте каждой строки (и разбивание строки на две); другой - BOM в начале строки объясним, а в середине - ну, это экзотика какая-то...
И давайте уже закончим обсуждение BOM. Не стоит тема того. Меня вполне устраивает то, что написано. Я бы и этим не заморачивался бы, если б не напоролся на трудно распознаваемую ошибку. Исходники скрипта - открытые. Живите кто хотите ©Успенский .

User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 133 times

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

Post by John Doe » Wed 07 Nov, 2018 08:54

buniak_a_h wrote:
Wed 07 Nov, 2018 08:41
BOM в начале строки объясним, а в середине - ну, это экзотика какая-то...
Вы предположили что бом может появиться в результате слияния 2х файлов.
Если последняя строка первого файла не завершалась переводом строки, то ваш бом и будет как раз в середине строки.

P.S.
Мне всё равно что там вы делаете в скрипте, уточняю исключительно для ясности.

buniak_a_h
Posts: 582
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 57 times
Been thanked: 13 times
Contact:

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

Post by buniak_a_h » Wed 07 Nov, 2018 09:17

John Doe wrote:
Wed 07 Nov, 2018 08:54
Вы предположили что бом может появиться в результате слияния 2х файлов.
Если последняя строка первого файла не завершалась переводом строки, то ваш бом и будет как раз в середине строки.
Снова.
buniak_a_h wrote:
Tue 06 Nov, 2018 22:00
<...> при склеивании первый файл может не оканчиваться пустой строкой. Но вот это - точно может сильно замедлить получение локализованной строки (поиск)... Проще, действительно, удалять в начале всех строк. Компромисс...
Ну и ещё; в этом случае две строки из разных файлов "склеятся" в одну, м это БУДЕТ ВИДНО в редакторе; в гипотетической ситуации сливания админ, который это будет делать, сможет увидеть и разбить такую строку. После разбивания BOM оказывается в конце строки (проверил - так делает встроенный редактор ФАРа). Поиску это не помешает.
А вот BOM в начале строки не виден совсем никак, а поиск делает невозможным. Именно поэтому имеет смысл его оставить, а остальное - от лукавого.

Post Reply

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