Когда 1С задумалась о порабощении покорении мира, она добавила в платформу некоторые инструменты для работы с различными языками. Шаг был в верном направлении, но, к сожалению, была сделана серьезная ошибка, которая превратила простой инструмент по использованию фраз на разных языках в кошмар.

Рассказываю.

В новых релизах 1С появилась функция НСтр, вот пример ее использования:

Она позволяет пользователям, использующие разные языки, показывать сообщения на родном языке.

В нормальных программах все фразы сосредоточены в файле ресурсов или другой подобной библиотеке, где их можно массово обработать и проверить переводчику. Но в 1С фразы рассыпаны по всему коду.

Поэтому 1С пришлось создавать инструменты для поиска таких фраз и массового редактирования.

Но, увы, сама 1С не сделала переводы всех фраз типовых конфигурация на все языки. Поэтому внедренец, если хочет сделать перевод на условно международный английский, вынужден снимать конфигурацию с поддержки, т.е. разрешать менять типовой код.

Было бы неплохим решением, если бы функцию НСтр можно было заменить своей функцией МоёНСтр, тогда в одном месте можно было бы сделать все переводы. Но увы, платформа 1С нам такую возможность не предоставляет. Можно конечно заменить все вызовы НСтр на МоёНСтр, но в этом случае приходится снимать все модули, где встречаются вызовы этой функции, с поддержки.

И все же это решение более удобное, потому что я видел, как решают проблему некоторые разработчики.

Они добавляют целиком код процедуры, где встречается НСтр в расширение и там вносят правки. Хорошо, если разработчики обучены культуре использования ИзменениеИКонтроль, но я встречал и разработчиков которые всё пихают в директиву Вместо.

Для тех кто не особо разбирается в 1С, поясню на примере.

Исходный код:

Доработанный код добавляется в расширение, нужно скопировать весь код процедуры и отметить где происходит вставка, а код процедуры может быть очень длинным и если он изменится в новом релизе, придется поправить и процедуру в расширении:

По сути, одно неправильное решение по размещению фраз на разных языках привело к огромному количеству правок кода.

На мой взгляд, чтобы решить эту проблему, не меняя существенно платформу, нужно позволить сделать замену функции НСтр на свою или глобальное событие ПриВызовеНСтр.

Но думаю, фирма 1С имеет своё мнение на этот счет и из-за этого ослиного упрямства международный рынок будет всё так же ей недоступен, как и ранее.

Думаю, не последним будет и мнение — как же так, если будет одна функция НСтр, туда же будут приходить все фразы, это будет работать мееееееееееедленно. Хотя скорость перебора даже 1000 фраз там будет занимать доли секунды. Но перфекционизм, как известно губителен.

Комментарии (67)


  1. Gvozdod
    29.06.2022 11:01

    Всё ещё не понимаю что не так с нстр()


    1. fixin Автор
      29.06.2022 11:01
      +1

      в том, что она шедро рассыпана по всему коду.


      1. Conung_ViC
        29.06.2022 11:48
        +2

        так это проблема тех кто ее использует, а не проблема самой функции


        1. fixin Автор
          29.06.2022 11:52
          -2

          Ага. Но мы говорим о проблемах использования этой функции. Буквоедство мне не интересно, простите


  1. CoffinNail
    29.06.2022 11:01
    +4

    Если ты кодил на 8.2, то заметил, что 8.3 стала хуже по всем аспектам. Даже википедия пишет, что 1С тормозит всё сильнее с каждой версией. Итого: платформа - отстой, конфигурации - просто мусорная свалка. Особенно нравится корявость клиента 1С - шедевр, и ее надо помнить, ха-ха, чтоб не переписывать начатое сызнова. Там сортировки нет, там поиска нет, там есть отбор, но поиска нет, передать таблицы нельзя, а массивы можно, ха-ха, обработка таблиц клиента на сервере - чистый колхоз. Костыльное программирование. Это позор, товарищи.


    1. fixin Автор
      29.06.2022 11:02
      +2

      да, поддерживаю. Система без обратной связи деградирует. 1с не исключение.

      она исключила критику практикующих программистов, слушает только подпевал из франчей.

      надеюсь, 1с разорится и прекратит своё жалкое существование.


      1. dodgev
        29.06.2022 11:23
        +1

        Товарищь Разорятор, а где же альтернативы?


        1. CoffinNail
          29.06.2022 11:34
          +1

          Альтернатива кроется не в проге, а в законодательстве. Если б всё было по уму, то пиши на чем хочется, как хочется, как угодно, хоть ровно, хоть криво. На текущий момент, даже не владея конкретной инфой, я не наблюдаю в обществе такого тренда от слова "совсем".


          1. fixin Автор
            29.06.2022 11:53
            +1

            это байка, что сила 1с в том, что она поспевает за законодательством.


            1. svboobnov
              29.06.2022 12:07
              +1

              Не совсем байка. Я как-то поддерживал Дел&фин, и тогда он отставал от законодательства на 1,5..2 месяца, и это было печально.


              1. svboobnov
                29.06.2022 12:08
                +1

                А 1С делала фиксы под законодательство за 1..5 рабочих дней.


                1. fixin Автор
                  29.06.2022 12:49
                  +1

                  Я несколько о другом.


              1. fixin Автор
                29.06.2022 12:49
                +1

                Суть в том, что изменения критичны для бухгалтерии, а не для управленческого контура, там могут быть и запаздывания.

                1С хорошо справляется с бухгалтерией, но все ее попытки залезть в нишу ЕРП провальны. Там нужна четкая методология и порядок, а не шарахания. Бизнес любит тишину.


        1. fixin Автор
          29.06.2022 11:53
          +1

          нету, 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/)

          Вопрос в популярности и в наличии внедренцев и поддерживальщиков на местах.


        1. CrushBy
          30.06.2022 14:36
          -1

          Ну куда ж без фузины, где все эти проблемы уже давно решены.


          1. fixin Автор
            01.07.2022 16:51

            А как в фузине реализована многоязычность? Файл ресурсов?


            1. CrushBy
              01.07.2022 16:55

              Да. Вот пример.


              1. Ta_Da
                01.07.2022 18:12

                Для MESSAGE expression это тоже работает, верно? Вроде бы в документации это явно не отражено.


            1. Ta_Da
              01.07.2022 18:06

              Уже полтора года прошло с вашей хвалебной статьи о LS Fusion (ну та, где "отличная система, гораздо лучше чем 1С, отличное описание в маркетинговых описаниях, надо будет на днях попробовать скачать и установить"). Может настало время все-таки скачать и посмотреть? =)


      1. StarWarrior
        30.06.2022 08:18
        +1

        Мне вот кажется, что если франч попробует вякнуть в сторону 1С, то быстро распрощается со своим статусом.


        1. fixin Автор
          30.06.2022 08:18

          все так. Оттого и гниет 1С.


  1. Catolampius
    29.06.2022 11:53
    +1

    так исторически сложилось

    такова жизнь, но вам какое дело? взялись перевести 1с:розницу для новых продавцов из сопредельных стран?


    1. fixin Автор
      29.06.2022 11:55
      +1

      Ага, как-то сопровождал одно расширение, где переводы были прямо в НСтр вставлены через Вместо. Печальнее зрелища не наблюдал.


    1. Materializator
      29.06.2022 15:47

      Не обязательно сопредельных. В Латинской Америке не слышно про внедрения хорошего во многих отношениях софта. И приходится идти на пляж, а тут сейчас холодно.


  1. realMaxA
    29.06.2022 11:54
    +1

    Как по мне, так очень радикально.

    Для перевода НСтр() править модули не обязательно, есть штатное средство: редактирование текстов интерфейса. В этом случае перевод будет храниться в ресурсах. НСтр для того и нужна, чтобы строки попадали в ресурсы для локализации, строки, не завёрнутые в НСтр, как раз, не локализуются никак. Мало того, НСтр позволяет локализовать строки на языки, изначально не предусмотренные конфигурацией.


    1. fixin Автор
      29.06.2022 11:54

      вы путаете тексты интерфейсов и тексты, завернутые в НСТр. Моя статья про НСтр


      1. realMaxA
        29.06.2022 12:22

        Не путаю. Там же локализуются и НСтр (Вкладка "Модули", галка "Искать в функциях "НСтр" ("NStr") в модулях").


        1. fixin Автор
          29.06.2022 12:50

          ну вот потыкайте и посмотрите что будет, она прямо в коде вам поменяет, т.е. непосредственное вмешательство в код, о чем я и писал в статье. Вы ошибаетесь.


          1. realMaxA
            29.06.2022 13:05

            Хм, да, действительно, происходит правка самого кода. Был не прав.


            1. fixin Автор
              29.06.2022 15:05

              вот о том и речь, у 1С всегда ... своим путем. Обычно самым кривым.


  1. iliabvf
    29.06.2022 12:49
    +6

    Госпади, какой провал, ой все... А если серьезно, то 1С никогда не заботилась о разработчике. Работая в Java c Intellij понимаю сколько времени я потерял на эту желтую поделку.
    Коллеги, разработчики 1С, еще раз повторюсь, учить современные технологии, не тратьте время на это.


    1. CoffinNail
      29.06.2022 13:08
      -2

      Ты можешь перечислить конкретные профиты перехода? А то знаешь как бывает - ой, там всё сделано по уму, а по факту - турбопаскали на бейсиках в фокспрохах. Про САП вот всяко разно пишут, один хвалит, второй - убеждает "не дай бог"...


      1. fixin Автор
        29.06.2022 15:05

        главное в переходе не поменять шило на мыло


      1. Neikist
        01.07.2022 13:02

        Больше зарплаты, удобнее и приятнее код писать, меньше стрессов и нервотрепки. Что вам еще надо?


        1. fixin Автор
          01.07.2022 16:52

          может это привлекает человеков-винтиков, но человеков-героев это скорее отпугнет. Стать рабом корпоративного мира? Да ну нафиг


          1. Neikist
            01.07.2022 16:54

            Как раз рабство корпоративного мира и бюрократии это 1с. А к этому ужасные инструменты разработки вдобавок.


    1. fixin Автор
      29.06.2022 15:06
      -1

      1С как платформа очень современная технология. Других таких аналогов быстрой разработки приложений баз данных нет. Другое дело, что конфигурации пишут условные "студенты"


      1. Naf2000
        29.06.2022 16:10
        +3

        это стёб?


        1. fixin Автор
          29.06.2022 19:26
          -1

          нет


  1. Tanner
    29.06.2022 13:14

    Согласно Википедии, первый релиз gettext состоялся в 1990 году.


    1. fixin Автор
      29.06.2022 15:05

      это вы к чему?


      1. svboobnov
        29.06.2022 15:18

        Видимо, к тому, что разработчики 1С могли бы сделать интернационализацию ещё в семёрке, если б глянули на gettext.


        1. fixin Автор
          29.06.2022 19:27

          тогда они на такое даже не замахивались.


          1. svboobnov
            30.06.2022 07:50

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


            1. fixin Автор
              30.06.2022 08:13

              О, 1С сразу пыталась завоевать мир? ;-)

              Хотя нет, скорее там просто нужно было в разных странах СНГ выводить в печатные формы на нужном языке.


      1. Tanner
        29.06.2022 16:08
        +1

        К тому, что альтернативная вселенная 1С ещё не видела 1990 год на своём альтернативном календаре.


  1. Dddn
    29.06.2022 15:06

    В новых релизах 1С появилась функция НСтр, вот пример ее использования.

    Посмотрел, уже в 2015 году уже точно была эта "новая" функция.


    1. fixin Автор
      29.06.2022 15:07

      это буквоедство или как? Новые релизы не могут быть в 2015 году?


  1. Naf2000
    29.06.2022 16:23

    Так в итоге, что предлагает автор? Вроде бы претензии не к функции, а к ее использованию


    1. CoffinNail
      29.06.2022 16:55

      Чтоб 1Сники разработчики платформы и конфы узнали, что они нехорошие люди, редиски. Невежливо излагать матом, а хотелось бы.


      1. fixin Автор
        29.06.2022 19:34

        и это тоже. Сколько можно терорризировать 1сников?


    1. fixin Автор
      29.06.2022 19:34

      дык черным по белому написано, чтобы спасти ситуацию без глобальных переделок добавить ГлобальнаяНстр, функцию, которой можно переопределить все вызовы НСтр.


      1. Naf2000
        29.06.2022 23:00

        Какой сценарий использования, примеры?

        А ещё перевод зависит от контекста


        1. fixin Автор
          30.06.2022 08:16

          в смысле какой сценарий.

          Функция ГлобНСтр(Строка, СтандартноеПоведение)
          
          Если Строка = "ru=Привет" Тогда Строка = "ru=Привет;en=Hello");
          ИначеЕсли Строка = "ru=Выпьем чаю?" Тогда Строка = "ru=Выпьем чаю?;en=Drink tea?");
          ...
          КонецЕсли;
          
          КонецФункции


          1. Neikist
            01.07.2022 13:07

            Вы бы хоть мапу использовали (не помню как в 1с называлась, соответствие? Структура?). А то у вас O(n) вместо O(1)/O(log n).


            1. fixin Автор
              01.07.2022 16:53

              ну это уже детали, ага.


  1. Scootaloo
    29.06.2022 19:34
    -1

    А где статья?...


  1. AllKnowerHou
    29.06.2022 19:34
    -1

    На превьюхе нет белого мужчины натурала - дискриминация!


  1. and_karpik666
    29.06.2022 19:34

    Странная претензия, это просто один из инструментов многоязычности, вам никто не мешает сделать функцию тип Мультиязычность.Приветствие();, в которой будет размещен ваш текст, и там вы можете уже и использовать нстр, или другой способ локализации, а дальше в коде и использовать Сообщить(Мультиязычность.Приветствие()); Если же планируете переводить конфигурацию, то есть уже куча инструментов для ее перевода, например конфигурация 1С:Переводчик, и т.д..


    1. fixin Автор
      29.06.2022 19:36

      мне никто не мешает, но я сопровождаю типовой код. А они используют именно НСтр.
      И мне приходится их фразочки искать по всему коду, чтобы переводить. И еще через пень-колоду заменять их через механизм расширений. Перечитайте статью.


      1. and_karpik666
        29.06.2022 22:01

        Так, где статья, при всем уважении, здесь просто написано: "1С имеет неудобный механизм локализации" - это не статья, статьей бы было, если бы вы героически вышли из положения, сделали бы свой механизм локализации, что в разе сократило бы время ваших страданий, либо разобрались с теми механизмами, что 1С использует для перевода своих конфигураций.


        1. fixin Автор
          30.06.2022 08:17

          я описал методы, как сейчас выкручиваются программисты из такой неудобной системы локализации. Но может быть вы предложите своё решение?

          И не надо смягчать. Не "неудобная", а "провал". Так сказать "это фиаско 1С, братан".


          1. svboobnov
            30.06.2022 14:21

            ↓↓ Тыц!


            1. fixin Автор
              01.07.2022 16:53

              чего?


        1. svboobnov
          30.06.2022 14:20

          Дык тут и статьи не надо: подобно gettext , делаем нумерованные строковые ресурсы в виде СписковЗначений, например.

          RU: 123-"Привет!"; 124-"Выпьем чаю?"

          EN: 123-"Hello!"; 124-"Would you like a cup of tea?".

          В расширение или в Глобальный модуль пихаем процедуру НатурСтр(НомРес), и эта процедура, в зависимости от выбранного языка, выводит русский, английский или квэнья там..


          1. fixin Автор
            01.07.2022 16:53

            можно и так, можно и гуид вместо номера, но 1с сделала по самому кривому пути.