Когда 1С задумалась о порабощении покорении мира, она добавила в платформу некоторые инструменты для работы с различными языками. Шаг был в верном направлении, но, к сожалению, была сделана серьезная ошибка, которая превратила простой инструмент по использованию фраз на разных языках в кошмар.
Рассказываю.
В новых релизах 1С появилась функция НСтр, вот пример ее использования:
Она позволяет пользователям, использующие разные языки, показывать сообщения на родном языке.
В нормальных программах все фразы сосредоточены в файле ресурсов или другой подобной библиотеке, где их можно массово обработать и проверить переводчику. Но в 1С фразы рассыпаны по всему коду.
Поэтому 1С пришлось создавать инструменты для поиска таких фраз и массового редактирования.
Но, увы, сама 1С не сделала переводы всех фраз типовых конфигурация на все языки. Поэтому внедренец, если хочет сделать перевод на условно международный английский, вынужден снимать конфигурацию с поддержки, т.е. разрешать менять типовой код.
Было бы неплохим решением, если бы функцию НСтр можно было заменить своей функцией МоёНСтр, тогда в одном месте можно было бы сделать все переводы. Но увы, платформа 1С нам такую возможность не предоставляет. Можно конечно заменить все вызовы НСтр на МоёНСтр, но в этом случае приходится снимать все модули, где встречаются вызовы этой функции, с поддержки.
И все же это решение более удобное, потому что я видел, как решают проблему некоторые разработчики.
Они добавляют целиком код процедуры, где встречается НСтр в расширение и там вносят правки. Хорошо, если разработчики обучены культуре использования ИзменениеИКонтроль, но я встречал и разработчиков которые всё пихают в директиву Вместо.
Для тех кто не особо разбирается в 1С, поясню на примере.
Исходный код:
Доработанный код добавляется в расширение, нужно скопировать весь код процедуры и отметить где происходит вставка, а код процедуры может быть очень длинным и если он изменится в новом релизе, придется поправить и процедуру в расширении:
По сути, одно неправильное решение по размещению фраз на разных языках привело к огромному количеству правок кода.
На мой взгляд, чтобы решить эту проблему, не меняя существенно платформу, нужно позволить сделать замену функции НСтр на свою или глобальное событие ПриВызовеНСтр.
Но думаю, фирма 1С имеет своё мнение на этот счет и из-за этого ослиного упрямства международный рынок будет всё так же ей недоступен, как и ранее.
Думаю, не последним будет и мнение — как же так, если будет одна функция НСтр, туда же будут приходить все фразы, это будет работать мееееееееееедленно. Хотя скорость перебора даже 1000 фраз там будет занимать доли секунды. Но перфекционизм, как известно губителен.
Комментарии (67)
CoffinNail
29.06.2022 11:01+4Если ты кодил на 8.2, то заметил, что 8.3 стала хуже по всем аспектам. Даже википедия пишет, что 1С тормозит всё сильнее с каждой версией. Итого: платформа - отстой, конфигурации - просто мусорная свалка. Особенно нравится корявость клиента 1С - шедевр, и ее надо помнить, ха-ха, чтоб не переписывать начатое сызнова. Там сортировки нет, там поиска нет, там есть отбор, но поиска нет, передать таблицы нельзя, а массивы можно, ха-ха, обработка таблиц клиента на сервере - чистый колхоз. Костыльное программирование. Это позор, товарищи.
fixin Автор
29.06.2022 11:02+2да, поддерживаю. Система без обратной связи деградирует. 1с не исключение.
она исключила критику практикующих программистов, слушает только подпевал из франчей.
надеюсь, 1с разорится и прекратит своё жалкое существование.
dodgev
29.06.2022 11:23+1Товарищь Разорятор, а где же альтернативы?
CoffinNail
29.06.2022 11:34+1Альтернатива кроется не в проге, а в законодательстве. Если б всё было по уму, то пиши на чем хочется, как хочется, как угодно, хоть ровно, хоть криво. На текущий момент, даже не владея конкретной инфой, я не наблюдаю в обществе такого тренда от слова "совсем".
fixin Автор
29.06.2022 11:53+1это байка, что сила 1с в том, что она поспевает за законодательством.
svboobnov
29.06.2022 12:07+1Не совсем байка. Я как-то поддерживал Дел&фин, и тогда он отставал от законодательства на 1,5..2 месяца, и это было печально.
fixin Автор
29.06.2022 12:49+1Суть в том, что изменения критичны для бухгалтерии, а не для управленческого контура, там могут быть и запаздывания.
1С хорошо справляется с бухгалтерией, но все ее попытки залезть в нишу ЕРП провальны. Там нужна четкая методология и порядок, а не шарахания. Бизнес любит тишину.
fixin Автор
29.06.2022 11:53+1нету, 1С придавила всех а конкурентов загнала в свое стойло (Мой склад)
svboobnov
29.06.2022 12:04Вот Tryton ERP https://habr.com/ru/post/222121/ , https://www.tryton.org/ ;
Или Adempiere http://www.adempiere.net/web/guest/welcome , https://github.com/adempiere/adempiere ;
Галактика https://galaktika.ru/erp
Парус https://erp.parus.com/ , https://eastsoft-su.turbopages.org/turbo/eastsoft.su/s/parus.htmlАврда ещё http://www.ansoft.ru/
Да даже убогий дел-фин (https://www.del-fin.ru/)Вопрос в популярности и в наличии внедренцев и поддерживальщиков на местах.
CrushBy
30.06.2022 14:36-1Ну куда ж без фузины, где все эти проблемы уже давно решены.
fixin Автор
01.07.2022 16:51А как в фузине реализована многоязычность? Файл ресурсов?
Ta_Da
01.07.2022 18:06Уже полтора года прошло с вашей хвалебной статьи о LS Fusion (ну та, где "отличная система, гораздо лучше чем 1С, отличное описание в маркетинговых описаниях, надо будет на днях попробовать скачать и установить"). Может настало время все-таки скачать и посмотреть? =)
StarWarrior
30.06.2022 08:18+1Мне вот кажется, что если франч попробует вякнуть в сторону 1С, то быстро распрощается со своим статусом.
Catolampius
29.06.2022 11:53+1так исторически сложилось
такова жизнь, но вам какое дело? взялись перевести 1с:розницу для новых продавцов из сопредельных стран?
fixin Автор
29.06.2022 11:55+1Ага, как-то сопровождал одно расширение, где переводы были прямо в НСтр вставлены через Вместо. Печальнее зрелища не наблюдал.
Materializator
29.06.2022 15:47Не обязательно сопредельных. В Латинской Америке не слышно про внедрения хорошего во многих отношениях софта. И приходится идти на пляж, а тут сейчас холодно.
realMaxA
29.06.2022 11:54+1Как по мне, так очень радикально.
Для перевода НСтр() править модули не обязательно, есть штатное средство: редактирование текстов интерфейса. В этом случае перевод будет храниться в ресурсах. НСтр для того и нужна, чтобы строки попадали в ресурсы для локализации, строки, не завёрнутые в НСтр, как раз, не локализуются никак. Мало того, НСтр позволяет локализовать строки на языки, изначально не предусмотренные конфигурацией.
fixin Автор
29.06.2022 11:54вы путаете тексты интерфейсов и тексты, завернутые в НСТр. Моя статья про НСтр
realMaxA
29.06.2022 12:22Не путаю. Там же локализуются и НСтр (Вкладка "Модули", галка "Искать в функциях "НСтр" ("NStr") в модулях").
fixin Автор
29.06.2022 12:50ну вот потыкайте и посмотрите что будет, она прямо в коде вам поменяет, т.е. непосредственное вмешательство в код, о чем я и писал в статье. Вы ошибаетесь.
iliabvf
29.06.2022 12:49+6Госпади, какой провал, ой все... А если серьезно, то 1С никогда не заботилась о разработчике. Работая в Java c Intellij понимаю сколько времени я потерял на эту желтую поделку.
Коллеги, разработчики 1С, еще раз повторюсь, учить современные технологии, не тратьте время на это.CoffinNail
29.06.2022 13:08-2Ты можешь перечислить конкретные профиты перехода? А то знаешь как бывает - ой, там всё сделано по уму, а по факту - турбопаскали на бейсиках в фокспрохах. Про САП вот всяко разно пишут, один хвалит, второй - убеждает "не дай бог"...
Neikist
01.07.2022 13:02Больше зарплаты, удобнее и приятнее код писать, меньше стрессов и нервотрепки. Что вам еще надо?
Tanner
29.06.2022 13:14Согласно Википедии, первый релиз gettext состоялся в 1990 году.
fixin Автор
29.06.2022 15:05это вы к чему?
svboobnov
29.06.2022 15:18Видимо, к тому, что разработчики 1С могли бы сделать интернационализацию ещё в семёрке, если б глянули на gettext.
fixin Автор
29.06.2022 19:27тогда они на такое даже не замахивались.
svboobnov
30.06.2022 07:50Почему же, СуммаПрописью в Комплексной конфе была для русского, узбекского, казахского и английского языков, т.е., зайчатки i18n были..
fixin Автор
30.06.2022 08:13О, 1С сразу пыталась завоевать мир? ;-)
Хотя нет, скорее там просто нужно было в разных странах СНГ выводить в печатные формы на нужном языке.
Tanner
29.06.2022 16:08+1К тому, что альтернативная вселенная 1С ещё не видела 1990 год на своём альтернативном календаре.
Naf2000
29.06.2022 16:23Так в итоге, что предлагает автор? Вроде бы претензии не к функции, а к ее использованию
CoffinNail
29.06.2022 16:55Чтоб 1Сники разработчики платформы и конфы узнали, что они нехорошие люди, редиски. Невежливо излагать матом, а хотелось бы.
fixin Автор
29.06.2022 19:34дык черным по белому написано, чтобы спасти ситуацию без глобальных переделок добавить ГлобальнаяНстр, функцию, которой можно переопределить все вызовы НСтр.
Naf2000
29.06.2022 23:00Какой сценарий использования, примеры?
А ещё перевод зависит от контекста
fixin Автор
30.06.2022 08:16в смысле какой сценарий.
Функция ГлобНСтр(Строка, СтандартноеПоведение) Если Строка = "ru=Привет" Тогда Строка = "ru=Привет;en=Hello"); ИначеЕсли Строка = "ru=Выпьем чаю?" Тогда Строка = "ru=Выпьем чаю?;en=Drink tea?"); ... КонецЕсли; КонецФункции
and_karpik666
29.06.2022 19:34Странная претензия, это просто один из инструментов многоязычности, вам никто не мешает сделать функцию тип Мультиязычность.Приветствие();, в которой будет размещен ваш текст, и там вы можете уже и использовать нстр, или другой способ локализации, а дальше в коде и использовать Сообщить(Мультиязычность.Приветствие()); Если же планируете переводить конфигурацию, то есть уже куча инструментов для ее перевода, например конфигурация 1С:Переводчик, и т.д..
fixin Автор
29.06.2022 19:36мне никто не мешает, но я сопровождаю типовой код. А они используют именно НСтр.
И мне приходится их фразочки искать по всему коду, чтобы переводить. И еще через пень-колоду заменять их через механизм расширений. Перечитайте статью.and_karpik666
29.06.2022 22:01Так, где статья, при всем уважении, здесь просто написано: "1С имеет неудобный механизм локализации" - это не статья, статьей бы было, если бы вы героически вышли из положения, сделали бы свой механизм локализации, что в разе сократило бы время ваших страданий, либо разобрались с теми механизмами, что 1С использует для перевода своих конфигураций.
fixin Автор
30.06.2022 08:17я описал методы, как сейчас выкручиваются программисты из такой неудобной системы локализации. Но может быть вы предложите своё решение?
И не надо смягчать. Не "неудобная", а "провал". Так сказать "это фиаско 1С, братан".
svboobnov
30.06.2022 14:20Дык тут и статьи не надо: подобно gettext , делаем нумерованные строковые ресурсы в виде СписковЗначений, например.
RU: 123-"Привет!"; 124-"Выпьем чаю?"
EN: 123-"Hello!"; 124-"Would you like a cup of tea?".
В расширение или в Глобальный модуль пихаем процедуру НатурСтр(НомРес), и эта процедура, в зависимости от выбранного языка, выводит русский, английский или квэнья там..
fixin Автор
01.07.2022 16:53можно и так, можно и гуид вместо номера, но 1с сделала по самому кривому пути.
Gvozdod
Всё ещё не понимаю что не так с нстр()
fixin Автор
в том, что она шедро рассыпана по всему коду.
Conung_ViC
так это проблема тех кто ее использует, а не проблема самой функции
fixin Автор
Ага. Но мы говорим о проблемах использования этой функции. Буквоедство мне не интересно, простите