Полный перевод кода УНФ 1.6 на английский язык с помощью обучаемой системы машинного перевода

19.10.20

Разработка - Локализация решений

"Лёгким движением руки русский код превращается..." - Новый подход к переводу конфигураций.


Зачем переводить исходники?
 

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

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

Часть вопросов можно решить правильным маркетингом и подготовкой продажи. Предположим зарубежные клиенты узнают о нас и рассматривают внедрение решений 1С в свою ИТ инфраструктуру. Один из важных вопросов, которые возникают в этот момент - вопрос поддержки. С кем заказчик сможет решать задачи, возникающие в процессе эксплуатации системы? Кто сможет выполнить кастомизацию или тюнинг приложений 1С? К кому обращаться при возникновении ошибок? И так далее. Ответ за редким исключеним всегда один - только к вендору ПО.

Для учётных бизнес-систем такое положение вещей несёт слишком много рисков для собственников бизнеса. Ведь мы как поставщик и разработчик ПО работаем на местном рынке относительно недавно, сама платформа 1С тоже малоизвестна (не сравнить с ситуацией в РФ), плюс предлагаем бизнесу купить софт, который в определённом смысле - чёрный ящик, и кроме специалистов приехавших из России никто внутрь этого "ящика" залезть не может. А что делать бизнесу, когда русские специалисты вернутся домой?

Поэтому в дальних странах важно обеспечить достаточное количество местных специалистов - и разработчиков, и консультантов. И если обучение консультантов является в принципе решаемой задачей, то с разработкой всё гораздо сложнее. Один из факторов, позволивших платформе 1С получить в России широкое распространение - простой и наглядный скриптовый язык. Из-за чего даже у человека незнакомого с разработкой ПО может возникнуть ощущение, что он понимает логику работы программы и при необходимости во всём сможет разобраться, повышается доверие к системе. Ведь русским по белому написано!

Пример кода 1С, как видит его любой человек в России:


 

 

 

 

 

 

 

 

 

 

 

 

 

Всё просто и понятно. В Канаде, Германии и во Вьетнаме люди видят этот код примерно вот так:

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

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

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

Одна из конфигураций, с которыми мы работаем - переведённая на английский код и локализованная под местную специфику УНФ 1.5. С тех пор русская УНФ получила очень активное развитие в редакции 1.6 и наша переведённая версия сильно отстала по функционалу. Хотелось бы получить новую версию УНФ на английском коде. Далее я расскажу про то, как это было сделано.
 

Трудности классического перевода
 

1. Первая проблема связанная с переводом кода - это перевод специфической терминологии.

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

Однако переводчики получают деньги за объём текста, за количество переведённых слов, и им неинтересно разбираться в контексте и терминологии платформы. Как переводит человек без знания предметной области? ОрганизацияНаименование переводит CompanyName, потому что не знает, что в платформе Наи менование переведено как Description. При этом нарушается принцип единообразия переводов: нужно всегда использовать один и тот же термин для обозначения одного и того же понятия. РасшифровкаДопРасходов он переводит DecryptionAddCosts, а ПредставлениеДокумента DocumentPerformance. И это не придуманные примеры, это переводы из реального словаря, полученного таким способом. В итоге имеем "симуляцию" перевода - слова вроде бы английские, но смысл иногда полностью потерян. Такие "переводы" никак не помогут иностранному разработчику, не знакомому с русской 1С.

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

2. Следующая сложность - выбор правильного перевода для неоднозначных случаев. 

Простые примеры для иллюстрации: как перевести Счёт? Если имеется в виду счёт плана счетов или счёт в банке, то это Account. А если имеется в виду счёт на оплату, то перевод InvoiceForPayment. Посмотрите на примеры из словаря, сможете сразу определить где переводчик выбрал удачные переводы, а где нет?

  • АнализОплатыСчета = InvoicePaymentAnalysis
  • ТипСчетаСписания =  AccountTypeWriteOff
  • ОткрытьСобытияПоСчету  = OpenEventsByBill
  • ОснованиеЗаказСчет  = BasisOrderAccounts
  • НомерСчетаОрганизации = AccountNumberOrganization
  • СтруктураСчетов = AccountsStructure

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

Обработка - это Processing или DataProcessor? Глаз разработчика безошибочно считывает контекст, которого не видит переводчик: ГрупповаяОбработка, ОбработкаПолноеИмя, ОбработкаЗавершена, ВнешняяОбработка, ОтложеннаяОбработка, ПолеОбработкаВыбора, ОбработкаОбъект.

Реальный словарь кода в большой конфигурации насчитывает многие тысячи подобных примеров. В результате трудозатраты на последующую редактуру и исправления переводов сопоставимы с трудозатратами на сам перевод и превышают его. Эх, вот если бы "загрузить" все эти связи в голову переводчика и добавить к его знанию английского языка информацию о терминологии и контекстах!

3. Некачественный перевод

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

  • НомерСчетаОрганизации = AccountNumberOrganization
  • ОткрытьСобытияПоСчету = OpenEventsByBill

Откуда взялись Organization и Bill, если соответствующие объекты переведены в конфигурации как Company и InvoiceForPayment? Нарушается принцип единообразия.

Кроме того, неверно выбран порядок слов для перевода родительного падежа. Похоже, что переводчик вообще не понял смысл написанного и просто перевёл отдельные слова. Падежные связи в английском языке (притяжательный падеж) передаются через порядок слов или предлог Of. Определение в форме существительного в притяжательном падеже ставится перед определяемым словом, а определение, выраженное существительным с предлогом, - после определяемого существительного. Правильный перевод будет такой: НомерСчетаОрганизации = CompanyAccountNumber.

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

Проиллюстрирую на нескольких примерах из словаря УНФ, с объяснением структуры имени, которая важна для правильной передачи смысла. Зелёным цветом выделен контекст, который опущен, но подразумевается:

  • ГруппаОтборД о пРеквизитыВладелецПартии
    читаем: Группа (имя группы) "Отбор". (подгруппа) "Дополнительные реквизиты". (элемент) "Владелец партии", 
    перевод: Group "Filter". "Additional attributes". "Batch owner"
    GroupFilterAdditionalAttributesBatchOwner
  • Настро ить   Вид имостьКолонокСпискаРасшифровкаДоговораОбслуживания
    читаем: Настроить (что?) видимость (чего?) колонок списка (далее имя списка) "Расшифровка договора обслуживания", 
    перевод: Configure visibility of "Service contract details" list columns
    ConfigureVisibilityOfServiceContractDetailsListColumns
  • ВидЦен  СебестоимостиОбработкаВыбораЗавершение
    читаем: Вид цен (чего?) себестоимости. (имя события) "Обработка выбора". (шаг обработки события) Завершение,
    перевод: Cost price kind. "Choice processing". Completion
    CostPriceKindChoiceProcessingCompletion
  • ДвиженияДенежныеСредстваВРезервеПередЗаписью
    читаем: Движения (по регистру) "Денежные средства в резерве". (имя события) "Перед записью",
    перевод: Register records "Cash assets in reserve". "Before write"
    RegisterRecordsCashAssetsInReserveBeforeWrite

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

 

Новый подход к переводу
 

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

Как вы знаете, современные системы машинного перевода такие как Яндекс-переводчик, Google-translate или Deepl.com построенны на механизме обучения. В этих системах применяется принцип статистического анализа: в программу загружаются огромные объёмы текстов на исходном языке и их переводы, выполненные человеком. Программа анализирует статистику межъязыковых соответствий, синтаксических конструкций и т. п., а затем опирается на неё при выборе вариантов перевода. За последние несколько лет нейросети превзошли всё, что было придумано в машинном переводе за последние 20 лет. Они даже научались согласовывать роды и падежи в разных языках.

Однако если мы попробуем выполнить перевод кода УНФ в Яндексе или Google, результат будет неудовлетворительным, т.к. эти системы ничего не знают про понятия и термины платформы 1С, а так же про переводы уже используемые в словаре конфигурации.

Необходимо выполнить обучение переводчика с помощью подготовленного "профильного" словаря. Такую возможность предоставляют, например, Microsoft - сервис Custom Translator, и Google - сервис AutoML. Я использовал систему от Microsoft, т.к. результат, который выдавал bing.com/translator для перевода кода был релевантнее чем translate.google.com. В добавок, сервис от Google значительно дороже.
 

Работа с Microsoft Custom Translator
 

Документация по работе с Custom Translator достаточно подробна и доступна на официальном сайте. Я вкратце перечислю шаги по созданию и обучению новой модели перевода.

  1. Зарегистрироваться на порталах Microsoft Azure и Custom Translator
  2. На портале Custom Translator создать новый проект. В свойствах проекта указываются языковая пара, для которой планируется выполнять перевод и категория переводов - я выбрал Technology. Ещё пробовал категорию Business, но с Technology переводы получаются точнее.

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

    Есть несколько типов файлов для обучения:
    1. Training (обязательный) - общий файл словаря, который система использует для формирования "нейронных связей". Основную часть исходного словаря нужно поместить в этот файл. При начале обучения модели Custom translator автоматически исключит из этого словаря предложения, которые присутствуют в Tuning и Testing словарях
    2. Tuning (необязательный) - "настроечный" словарь. По смыслу это такой же словарь, как и Training, но информация из него имеет больший "вес" при обучении системы и соответственно оказывает большее влияние на результат. Нужно ответственно подойти к формированию этого файла - все переводы в нём должны быть выверенные и точные. Если не подготовить tuning-словарь, то система сформирует его сама из рандомного набора переводов Training-словаря. Но в этом случае результат обучения будет подвержен случайности, т.к. для тюнинга могут быть подобраны и не самые удачные переводы.
    3. Testing (необязательный) - словарь содержащий эталонные переводы, которые Вы считаете правильными. После обучения новой модели Custom translator выполнит перевод слов из тестового словаря, сравнит результат с эталонным переводом и рассчитает показатель BLEU Score. Это коэффициент, который показывает насколько близки к желаемому результату переводы выдаваемые обученной моделью. Если не указывать данный файл, система сформирует его автоматически из случайных строк Training словаря.
    4. Phrase Dictionary (необязательный) - список фиксированных переводов. В этом словаре указаны слова, которые нужно переводить не нейросетью, а просто взять перевод из файла. Хорошо применять для имён собственных. Например наша конфигурация называется "Company management", поэтому я указал, что УправлениеНашейФирмой всегда нужно переводить CompanyManagement, а аббревиатуру УНФ - CM.


       
  4. После того как исходные данные для обучения загружены, нужно нажать кнопку "Create model". Запускается процесс обучения, а по окончании Вы увидите рассчитанный показатель Bleu Score и сможете скачать для ревизии результат перевода тестовых данных, чтобы принять решение - устраивает ли Вас качество переводов, выдаваемых машиной. Если качество перевода устраивает - обученную модель можно опубликовать и использовать для перевода произвольных текстов. 
  5. Немного о подготовке исходных данных. Системе нужны для обучения пары переведённых предложений, разбитые на два .align файла: файл предложений на русском языке и файл их переводов на английский. Поскольку мы переводим код, исходный словарь у нас выглядит так:
    ИменаДобавляемыхКолонок    AddedColumnNames
    ОбработатьДанныеДляОбновленияВПодчиненномУзле    ProcessDataToUpdateInSubordinateNode
    ПараметрыФормыПросмотраФайла    FilePreviewFormParameters
    Нужно разбить CamelCase на отдельные слова:
    Имена Добавляемых Колонок    Added Column Names
    Обработать Данные Для Обновления В Подчиненном Узле    Process Data To Update In Subordinate Node
    Параметры Формы Просмотра Файла    File Preview Form Parameters
    А затем разделить словарь на два файла. Первый файл - исходные предложения:
    Имена Добавляемых Колонок
    Обработать Данные Для Обновления В Подчиненном Узле
    Параметры Формы Просмотра Файла
    Второй файл - переводы:
    Added Column Names
    Process Data To Update In Subordinate Node
    File Preview Form Parameters

    В таком виде словари готовы к загрузке в систему.

Перевод кода с помощью обученной модели включает следующие шаги:

  1. С помощью Language Tool выгружаем из конфигурации список слов, требующих перевода - "пустой" словарь
  2. Выполняем преобразование пустого словаря из CamelCase в набор слов разделённых пробелом, как показано выше
  3. Полученный документ переводим с помощью Microsoft Document Translator, которй подключен к нашей опубликованной модели переводчика. Программа формирует файл с переводами.
  4. Соединяем пустой словарь из шага 2 с файлом переводов из шага 3
  5. Выполняем обратное преобразование к CamelCase - удаляем пробелы
  6. Получился готовый словарь кода, который можно отдать Language Tool и запустить перевод конфигурации. (Только нужно заменить в словаре разделитель с табуляции на знак '=')

Приведу несколько примеров переводов, которые выдаёт система

АвтономнаяРаботаЗарегистрироватьИзменениеДокументаПередЗаписью    StandaloneOperationRegisterDocumentChangeBeforeWrite
ВидЗака зНа рядаДляНовыхКлиентовПриИзмененииСервер    JobOrderKindForNewCustomersOnChangeServer
Выбор каИз ТабличнойЧастиЗапасы    SelectionFromTabularSectionInventory
ВыборкаСклады    SelectionWarehouses
ВыводТекстаНаДисплейПокупателяЗавершение    OutputTextToCustomerDisplayCompletion
ЗарегистрироватьЦеныНоменклатуры    RegisterProductsAndServicesPrices
Подключ  аемый_НаименованиеОбработкаВыбора    Attachable_DescriptionChoiceProcessing
ПолучитьПодписиПоУмолчаниюНаСервере    GetDefaultSignaturesAtServer
РегистрНакопленияДенежныеСредстваВРезерве    AccumulationRegisterCashAssetsInReserve
РегистрСведенийЗначенияКатегорийПользовательские    InformationRegisterCustomCategoryValues
СписокНаименований    DescriptionsList
СуммаЗаказовПоставщику    PurchaseOrdersAmount
СформироватьСпецификацию    GenerateSpecification
УстановитьУсловноеОформлениеПоЦветамСостоянийСервер    SetConditionalAppearanceByStateColorsServer
ФормаП ечати    PrintForm
ФормаПл анОбменаОбменУправлениеНебольшойФирмойСайтПерейтиВЖурналРегистрацииСобытийВыгрузки    ExchangePlanFormExchangeCompanyManagementSiteGoToExportEventLog

Как видно, корректно переведены термины платформы, названия объектов метаданных, реквизитов, контекст выполнения и имена событий.

Перевод комментариев

Итак, у нас переведён весь код и имена метаданных. Далее хотелось бы перевести комментарии к процедурам и функциям, так как это ценный источник информации для англоязычных разработчиков. Тем более что нормальной документации на английском языке пока не так много.

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

  1. Перевод комментариев выполняется по правилам перевода технической документации. По сравнению с переводом кода, это ближе к обычному литературному переводу. Поскольку нам нужно, чтобы переводы формировались по новым правилам - мы не можем использовать модель обученную для перевода кода. Создаём новую модель - в том же проекте либо в отдельном. Для обучения модели я использовал базу перевода комментариев из тех же словарей, откуда брал перевод кода.
  2. Формат документирующего комментария к методу описан на ИТС. EDT использует документирующие комментарии для расчёта типов и генерации подсказок при наборе кода. Если исходный комментарий на русском языке написан в соответствии с требованиями этого формата, перевод тоже должен ему соответствовать. Т.е. при переводе важно сохранить форматирование - отступы, табуляцию, переносы строк, служебные символы (-, *, :)
  3. В комментариях могут встречаться имена типов, объектов метаданных, модулей, процедур, функций и т.п. Всё это мы уже перевели на предыдущем этапе - при переводе кода. И сейчас необходимо использовать для этих ссылок готовые переводы, а не переводить заново. Иначе с большой вероятностью переводы будут отличаться и ссылка в комментарии "сломается".


Результат перевода конфигурации
 

Код и объекты метаданных конфигурации полностью переведены на английский язык:

Запросы:

Шаблоны СКД:

Имена параметров и областей в макетах:

Комментарии к методам:


 

Проблемы после перевода
 

Новая терминология

Обученная модель прекрасно справляется с переводом понятий и терминов, которые уже встречались в словаре использованном для обучения. Но если перевести какой-то новый термин, система будет импровизировать, и результат может быть нестабильным.

Так, например, в УНФ 1.6 появилась подсистема CRM, и в словарь добавилось множество имён, включающих понятие "Лид". Это слово до этого не встречалось у нас в конфигурации, поэтому у машинного переводчика не было соответствующих "нейронных связей". Слово "Лид" система переводила как "Lida", приняв за имя собственное.
Ещё в последних версиях УНФ появилась подсистема Биллинга и новое понятие "Договор обслуживания". Мне хотелось, чтобы ДоговорОбслуживания везде переводился как ServiceContract, но система выдавала разные переводы в зависимости от контекста.

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

Неоднозначности переводов

Выше я писал про пример со словом "Расшифровка" - иногда это Details, как в РасшифровкаПлатежа - PaymentDetails. А иногда и Decryption (в подсистеме ЭДО). Хотя это редкость. Классический пример - слово "Строка". Если речь идёт о строке текста, то перевод "String", а если о строке таблицы или дерева - "Row". Плюс в платформе свойство "НомерСтроки" переведено как "LineNumber". Какой перевод выдаст машина - String, Row или Line? Выбор перевода осуществляется на основании контекста:

УчетЗатратНомерСтроки    CostAccountingLineNumber
МассивС тр окЗапасов    InventoryRowsArray
НоваяСтрокаЗапроса    NewQueryString

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

Типизация кода

Плагин EDT Language Tool при выборе перевода опирается на типизацию кода. Если переводимый объект - платформенный, то перевод берётся из словаря платформы. Если объект пользовательский - то переводит по пользовательскому словарю. Однако в 1С код нетипизированный, и EDT рассчитывает типы динамически. Это не всегда возможно, поэтому для минимизации ошибок переводы в пользовательском словаре нужно делать такими же как в платформе. Например, если "Наименование" в платформе переведено как "Description" - не нужно в пользовательском словаре указывать перевод "Наименование=Name".

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

  1. Нас не устраивает перевод из платформы и мы сознательно указываем в пользовательском словаре другой перевод. Слово "Организация" переведено в платформе "Organization" (свойство объектов ДанныеКонтакта и ПочтовоеСообщение). Это достаточно редкие случаи по сравнению с реквизитом "Организация", который есть во всех документах и многих других объектах метаданных. Пишем в словаре английский термин, который нам нужен: "Организация=Company" и после перевода конфигурации исправляем термин "Organization" там, где он появился.
  2. Разные слова в словаре платформы имеют совпадающий перевод. "Тип" и "Вид" в платформе переводятся одинаково - "Type". Но мы не можем указать для этих слов одинаковый перевод в пользовательском словаре, поскольку это приведёт к конфликту в объектах, в которых есть оба свойства. Например, у контактной информации есть свойства "Ти п" и "Ви д" - нельзя переводить их одинаково. Для слова "Вид" указываем перевод "Kind", однако Language Tool всё равно в некоторых местах переводит "Вид" как "Type", поскольку код нетипизирован. Поэтому для таких слов нужно либо явно указывать тип в коде, либо исправлять ошибки после перевода.
    Я считаю подобное поведение плагина ошибочным, т.к. некорректно брать из словаря платформы совпадающие переводы без дополнительных проверок. Надеюсь что в будущем эта ситуация будет исправлена.

Образование дублей

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

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

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

Произвольное    Arbitrary
Произвольные    Arbitrary
Произвольный    Arbitrary

ДокументОснованиеСумма    BasisDocumentAmount
СуммаДокументаОснования    BasisDocumentAmount

ДополнительныеСвойства    AdditionalProperties
СвойстваДополнительные    AdditionalProperties

Плюс некоторые русские слова сами по себе переводятся на английский одинаково. Такие как: Кол о  нка и Ст о   лбец = Column, Заказ и Порядок = Order.

Список подобных дублей в словаре конфигурации насчитывает почти десять тысяч строк. Понадобилось бы значительное время для ручной обработки всех дублей из словаря такого размера. Чтобы сократить объём этой работы учтём, что не всякое дублирование перевода является ошибочным. В нашем примере выше ДокументОснованиеСумма - это имя реквизита на формах некоторых документов, а СуммаДокументаОснования - имя переменной, использованной в модуле документа СчетФактура. Если после перевода и там и там будет указано имя BasisDocumentAmount ничего страшного не произойдёт. Напротив, произойдёт некая унификация используемых терминов, что даже хорошо.

Необходимо исправить те дубли, которые встречаются в рамках общего пространства имён. Я называю их "опасные" дубли. Опасными дублями могут быть два элемента на одной форме, две переменных в одной процедуре, две колонки в таблице и т.д. Скажем, у справочника есть реквизиты Пок упат ел ь и Заказчик, а по словарю переводы совпадают - Customer. Такие ситуации нужно устранить, указываем перевод "Поку  патель=Buyer".

После фильтрации по совпадающеиму пространству имён список дублей уменьшился в несколько раз, и я исправил переводы найденных "опасных" дублей.
 

Сравнение стоимости перевода
 

Тарифы на использование Microsoft Custom Translator:

На сайте сейчас указано по старому курсу, в долларах цены такие: 40$ за миллион символов перевода, 10$ за миллион символов обучения и 10$ за публикацию обученной модели.

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

Оценим сколько бы стоил перевод кода УНФ силами профессиональных переводчиков.
У меня получился словарь из 48 000 строк. После преобразования CamelCase в обычный текст это 190 000 слов. Стоимость перевода 836 тысяч рублей, а срок 4-6 месяцев работы.

Добавим сюда перевод комментариев. Объём словаря составляет 356 000 слов. Стоимость перевода 1.5 миллиона рублей, а срок 8-12 месяцев. 
Итого 2 миллиона 300 тысяч рублей и полтора года работы переводчика (или полгода для команды из трёх человек).

Сравним со стоимостью машинного перевода.

Перевод кода:
Обучение модели 40$
Публикация модели 10$
Перевод текста 43$

Перевод комментариев:
Обучение модели 77$
Публикация модели 10$
Перевод текста 50$

Итого 230$ (18 000 рублей), срок 1 день (при наличии словаря, подготовленного для обучения).

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

Стоит заметить, что 230$ это конечная сумма за перевод, если бы я делал его сейчас. На самом деле я прошёл некоторый путь к этой точке, экспериментировал с обучением, делал несколько тестовых моделей. Поэтому реальная стоимость для меня получилась выше, эту разницу отнесём к расходам на НИОКР.

Для тех, кто заинтересовался темой, добавлю, что возможна бесплатная работа с Custom Translator. При бесплатном использовании нельзя опубликовать обученную модель для перевода произвольных текстов, но можно оценивать качество перевода на тестовых данных. И есть ограничение на размер словаря для обучения. Для знакомства с системой вполне подойдёт бесплатный тариф.
Плюс при первой регистрации на портале Azure Вам будет начислено 200$ бонусов, которые можно использовать в зачёт оплаты Custom translator при переходе на платное использование.


Перспективы и новые возможности
 

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

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

Обновление вместе с русской конфигурацией
Во всех известных мне прежде примерах адаптации типовых конфигураций для работы в другой стране, связь локализованной конфигурации с родительской конфигурацией безвозвратно терялась после перевода. Обновление на новый релиз конфигурации-родителя становится слишком дорогостоящим проектом и от него просто отказываются. В итоге с годами отставание от исходной конфигурации увеличивается всё больше и рано или поздно встаёт вопрос о новом проекте по локализации русской конфигурации актуального релиза.
Сегодня, используя возможности Git, Language Tool и обучаемый машинный перевод становится возможным выпускать релизы локализованной УНФ на английском коде практически синхронно с релизами русской типовой конфигурации (с отставанием в один релиз).

Локализация Перевод УНФ EDT LanguageTool

См. также

Склонение слов на казахском языке

Локализация решений Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Казахстан Абонемент ($m)

Данная обработка содержит функцию получения всех 7 падежей слова.

1 стартмани

11.05.2023    1696    1    VladimirB    0    

5

Перевод исходного текста

Инструментарий разработчика Локализация решений Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Перевод исходного текста форм конфигураций 1С.

1 стартмани

11.04.2023    2250    4    v3132    0    

5

Реализация перевода текста средствами Azure

WEB-интеграция Локализация решений Платформа 1С v8.3 Россия Бесплатно (free)

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

19.11.2021    1073    user1559835    2    

5

Нюансы создания конфигураций на нескольких языках

Локализация решений Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим на примере ERP WE различные нюансы при реализации решений на нескольких языках.

25.07.2020    2783    Flashill    4    

8

Перевод кода и метаданных конфигурации на английский язык: часть 2

EDT Локализация решений Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Практический пример подготовки словаря для перевода кода и модели конфигурации УНФ 1.6 на английский язык с использованием существующих словарей и плагина EDT Language Tool. В статье приводятся готовые скрипты и алгоритмы сборки и нормализации словаря.

1 стартмани

05.04.2020    5122    vanjushkin    0    

13

Перевод кода и метаданных конфигурации на английский язык с помощью плагина EDT: Language Tool

EDT Локализация решений Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Использование регулярных выражений для парсинга .mdo-файлов и составления русско-английского словаря метаданных. Перевод кода и метаданных конфигурации по словарю с помощью нового инструмента 1С - плагина EDT: Language Tool на примере УНФ 1.6

1 стартмани

03.04.2020    5641    vanjushkin    10    

14

Транслитерация украинского алфавита

Локализация решений Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для транслитерации украинских текстов на латиницу. ВАЖНО - для транслитерации русского алфавита не подходит!

1 стартмани

23.03.2020    4233    3    kaliuzhnyi    0    

3

Создание промышленной системы для локализации решений на базе 1С

Локализация решений Бесплатно (free)

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

28.11.2019    9093    DitriX    29    

83
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. hawk911 19.10.20 05:44 Сейчас в теме
2. tormozit 7136 19.10.20 08:45 Сейчас в теме
Опечатка
"словами выражаются а рамках самого слова"
"словами выражаются в рамках самого слова"
6. vanjushkin 88 19.10.20 11:52 Сейчас в теме
(2) спасибо, исправил
3. marmyshev 347 19.10.20 09:12 Сейчас в теме
Круто!
А используете новые возможности в 1C:Language Tool которые позволяют для перевода использовать Microsoft Custom Translator нативно, при работе в системе? Позволяет указать созданные нейронные модели и использовать их при каждом запросе в сервис...
8. vanjushkin 88 19.10.20 11:58 Сейчас в теме
(3) когда я выполнял перевод, интеграция Language Tool с Microsoft Translator не работала. А так да, можно было бы использовать, если там корректно выполняется преобразование из CamelCase в обычный текст и обратно. Я не проверял, но есть нюансы с аббревиатурами и предлогами в именах.
4. Steelvan 302 19.10.20 10:59 Сейчас в теме
Код на английском, фу, бяка.
Yashazz; Megaiff; Perfolenta; +3 4 Ответить
22. Артано 760 20.10.20 01:59 Сейчас в теме
(4) на какой операционной системе сидишь? На посконно-русской оси Китежь-ОС с кириллическими исходниками? Отчизна не оскудеет "особенными"
32. webester 26 21.10.20 05:55 Сейчас в теме
(22)Не обращай внимания, у него трамп ссыт в подъезде. Вот он и ненавидит "пендосов" но не смущается пользоваться всеми благами которые они создают.
5. Dmitryiv 161 19.10.20 11:18 Сейчас в теме
Мощно, но...
Тут есть некоторое лукавство в определении конечной цены автоматизированного перевода. Даже при использовании нейросетей никто не отменяет отладку локализованного таким способом решения. И это человеко-часы. И стоимость прямопропорциональна объёму и качеству конфигурации.
7. vanjushkin 88 19.10.20 11:53 Сейчас в теме
(5) для классического перевода (как и для машинного) цены и сроки указаны без учёта редактуры
9. Dmitryiv 161 19.10.20 13:20 Сейчас в теме
(7) Не, редактура - это вообще отдельно. Я говорю про этап когда уже всё отредактировали и визуально всё вроде бы правильно. Собрали конфигурацию и начали отлавливать баги вызванные локализацией
10. vanjushkin 88 19.10.20 13:42 Сейчас в теме
(9) при работе с Language Tool это могут быть ошибки связанные с отсутствием типизации кода, но тогда не важно как именно был получен словарь - работа по типизации / исправлению переводов будет одна и та же. Если для перевода кода используется какой-то другой инструмент, то там могут быть свои нюансы. Верно то, что перевод кода конфигурации не заканчивается на составлении словаря, просто моя статья касается именно этого этапа.
Dmitryiv; marmyshev; Fox-trot; +3 Ответить
11. temalex 19.10.20 15:38 Сейчас в теме
Александр, пробовали использовать 1С:Translator (https://releases.1c.ru/project/Translator)?
Многое о чем вы говорите там есть, в частности перевод по нескольким словарям. Словарь терминологии, ключевых слов и т.п.
16. vanjushkin 88 19.10.20 17:24 Сейчас в теме
(11) не пробовал, поделитесь опытом перевода кода с помощью Translator?
26. temalex 20.10.20 12:32 Сейчас в теме
(16) Полный перевод УНФ 1.5 занял 10 месяцев в 2015 году. В команде был 1 тех.специалист и 4 переводчика. Переводчики работали примерно 5-6 месяцев. Остальное время заняла техническая работа по сборке конфигурации.
Конфигурация УНФ выгружалась в 12к файлов и далее загружалась в 1С:Translator.
Далее, тексты проходят лексический разбор на лексемы и попадают в словари. Переводчики переводят тексты в словарях. Программные модули переводятся в т.ч. с использованием словаря ключевых слов языка. Также конфигурация умеет подключаться к сервису перевода Microsoft.

Какие были сложности:
1. Перевод переменных в текстах модулей, когда имя переменной на английском также должно быть осмысленным. Иногда приходилось догадываться что прячется за аббревиатурами в имени переменной.
2. Не все методы объектов платформы переводятся единообразно. Например русскоязычный метод Добавить() может переводиться как Add() или как Append() для разных объектов платформы. Поэтому тут требуется учет контекста и ручной просмотр кода.

Так появилась на свет конфигурация 1С:Small Business
На текущий момент вижу конфигурация 1С:Translator не развивается. Последний релиз ее вышел в 2017 году.
Student1C; vanjushkin; +2 Ответить
27. vanjushkin 88 20.10.20 13:15 Сейчас в теме
(26)
Не все методы объектов платформы переводятся единообразно. Например русскоязычный метод Добавить() может переводиться как Add() или как Append() для разных объектов платформы. Поэтому тут требуется учет контекста и ручной просмотр кода.


Это одна из задач, которые Language Tool решает сам - выбирает правильный платформенный перевод в зависимости от типа объекта.
12. morin 57 19.10.20 15:42 Сейчас в теме
После перевода конфигурации с одного языка на другой у вас две разных конфигурации, т.е. x2 затрат на сопровождение?
13. vanjushkin 88 19.10.20 16:06 Сейчас в теме
(12) мы продаём и сопровождаем только переведенную версию
14. Gegeev 19.10.20 16:19 Сейчас в теме
15. vanjushkin 88 19.10.20 16:21 Сейчас в теме
(14) ещё переведены на английский код БСП 3 и Документооборот
17. TODD22 18 19.10.20 18:20 Сейчас в теме
Раньше ходила шутка про то что "Язык 1С это visual basic переведённый promtom".
Yashazz; Артано; Dmitryiv; +3 Ответить
20. Dmitryiv 161 19.10.20 21:46 Сейчас в теме
(17) В каждой шутке есть доля шутки...
18. PerlAmutor 129 19.10.20 18:49 Сейчас в теме
А конфигурация остается рабочей после этих переводов?
19. vanjushkin 88 19.10.20 19:07 Сейчас в теме
(18) в режиме предприятия переведённая конфигурация ничем не отличается от исходной, всё должно работать так же
21. Gegeev 19.10.20 22:41 Сейчас в теме
(15)
Mozno gdeto posmotret na UNF/
Naberite to watsup +12038222636
V luboe vremya
23. CheBurator 3119 20.10.20 02:52 Сейчас в теме
24. RayCon 784 20.10.20 04:19 Сейчас в теме
А если имеется в виду счёт на оплату, то перевод InvoiceForPayment.

FYI: Счёт на оплату =/= Invoice for payment
25. vanjushkin 88 20.10.20 05:24 Сейчас в теме
(24) Дело не в конкретном переводе. Имеется в виду, что не нужно придумывать новые переводы для понятий, которые уже были переведены. У нас в конфигурации СчетНаОплату переведён как InvoiceForPayment, поэтому все новые имена содержащие этот термин должны быть переведены единообразно.
28. RayCon 784 20.10.20 15:18 Сейчас в теме
(25)
не нужно придумывать новые переводы для понятий, которые уже были переведены

Вот это и пугает: кто-то незнающий бизнес-лексики уже перевёл калькой СчетНаОплату как InvoiceForPayment, и все дружно начинают эту кальку тиражировать. К чему это я? А к тому, что терминология архиважна! В моей практике были случаи отказа от контракта только потому, что западные компании говорили русским программистам: вы не знаете анлийского языка, поэтому мы не сможем с вами работать. Коммуникация в бизнесе - всё! Как только люди не владеют терминологией, начинается недопонимание и, как следствие, непонятки и потеря денег.
Отсюда резюме: нужен ОБЩЕДОСТУПНЫЙ в облаке и выверенный НОСИТЕЛЯМИ ЯЗЫКА русско-английкий словарь, созданный вендором, который могут использовать партнёры фирмы 1С.
Irwin; Dmitryiv; fieryfist; dabu-dabu; bryalex; amiko; Артано; grumagargler; +8 Ответить
29. vanjushkin 88 20.10.20 18:16 Сейчас в теме
(28) я тоже надеюсь что постепенно придём к стандартному словарю терминов
34. amiko 21.10.20 08:58 Сейчас в теме
(28) Николай, Вы как всегда правы. К сожалению, все автоматизированные средства выдают прямой перевод, который я называю "гугл-переводом". Необходим правильный перевод согласно устоявшейся бизнес-лексики. Поэтому в составлении словаря должны участвовать носители этой самой лексики.
Кроме того, если речь идет о разовом переводе одной конфигурации под заказчика, возможно, автоматический перевод и подойдет. Но если вы собираетесь выпускать тиражные решения, совместимые с международной БСП, то названия процедур должны соответствовать БСП, иначе будут проблемы с интеграцией.
В общем, создать международную конфигурацию НЕ равно просто перевести ее на английский.
37. vanjushkin 88 21.10.20 10:40 Сейчас в теме
(34)
Но если вы собираетесь выпускать тиражные решения, совместимые с международной БСП, то названия процедур должны соответствовать БСП, иначе будут проблемы с интеграцией.

Перевод объектов БСП полностью взят из словаря БСП - я не переводил заново то, что уже переведено.То есть БСП 3 в составе УНФ переведена так же, как международная версия БСП.
42. amiko 21.10.20 12:39 Сейчас в теме
(37) Ок. Проблема только в том, что международная БСП прилично отстает от российской версии. Насколько мне известно, на сегодняшний день выпущена только 3.0.3 версия. Каким образом решается вопрос совместимости, учитывая, что УНФ развивается очень быстро и использует актуальные версии БСП?
Второй вопрос: как обрабатываются NStr? Возможно ли сохранить 2 языка, или происходит замещение?
И ремарка по поводу этого замечания:
" В нашем примере выше ДокументОснованиеСумма - это имя реквизита на формах некоторых документов, а СуммаДокументаОснования - имя переменной, использованной в модуле документа СчетФактура. Если после перевода и там и там будет указано имя BasisDocumentAmount ничего страшного не произойдёт. Напротив, произойдёт некая унификация используемых терминов, что даже хорошо."
Вот это очень даже спорно. Я с этим столкнулась еще в SB, там тоже посчитали, что ничего страшного не произойдет. Но, к сожалению, это приводит к некорректному использованию переменных, когда вместо значения СуммаДокументаОснования подставляется значение ДокументОснованиеСумма (переменные взяты в качестве примера из вашего текста). Поэтому как раз во многих местах порядок слов в переменных и процедурах имеет значение.
Артано; RayCon; +2 Ответить
43. vanjushkin 88 21.10.20 13:41 Сейчас в теме
(42)
Каким образом решается вопрос совместимости, учитывая, что УНФ развивается очень быстро и использует актуальные версии БСП?

Да, есть отставание версий, и в составе УНФ у меня сейчас переведена БСП 3.1.2. Перевод из международной БСП сохранён для тех объектов, которые присутствуют в русской БСП новой версии. То что появилось нового - переведено по новой. Для обеспечения совместимости при обновлении версии международной БСП мне нужно будет обновить свои переводы. Либо в дальнейшем мы с 1Ci как-то координируем наши усилия. По-хорошему должен быть официальный общедоступный словарь.
как обрабатываются NStr? Возможно ли сохранить 2 языка, или происходит замещение?

Перевод содержимого NStr относится к интерфейсу, на данном этапе я этим не занимался - перевёл только код. Русский интерфейс остался неизменным, включая все сообщения пользователю. Если говорить о возможностях перевода интерфейса, то существуют оба варианта: или удалить, или оставить русские части в многоязычных строках (и дабвить к ним английские переводы).
когда вместо значения СуммаДокументаОснования подставляется значение ДокументОснованиеСумма

Как это может произойти в моём примере? Одно - имя переменной в модуле, второе - имя элемента на форме, причём в разных документах. Если бы оба имени встретились в одном пространстве имён, то они попали бы в список опасных дублей. Такие я исправлял сразу, до перевода конфигурации.
44. amiko 21.10.20 14:00 Сейчас в теме
(43)
Либо в дальнейшем мы с 1Ci как-то координируем наши усилия.

У 1Сi свое решение, называется 1C:Drive. Не слышала, чтобы они планировали поддержку УНФ.
Перевод содержимого NStr относится к интерфейсу, на данном этапе я этим не занимался - перевёл только код.

Т.е. задача решена частично. Объем перевода сообщений довольно большой.
Как это может произойти в моём примере?

Ваш пример является лишь примером. В общем случае утверждение не применимо.
У меня бы не возникло замечаний, если бы вы не стали сравнивать затраты. Сравнению подлежат затраты на идентичный результат. В вашем случае оценка произведена только той части, которую можно выполнить автоматически. При этом вы абсолютно забываете о том, что написано выше: это бизнес-логика, локализация, совместимость и т.д. Плюс в вашем результате многие вещи отсутствуют (например, NStr, RLS и т.д.)
Т.е. сам по себе инструмент для перевода выгляди впечатляюще, но я бы не стала его сравнивать с реальными затратами, пока этот инструмент не выдаст конечный результат. Либо в сравнение включать стоимость вычитки кода, корректировки всех текстовых сообщений, адаптации под бизнес-логику (здесь необходимо привлекать профильных специалистов, владеющих специфической терминологией) и т.п.
46. vanjushkin 88 21.10.20 15:38 Сейчас в теме
(44)
У 1Сi свое решение, называется 1C:Drive.

Международную БСП 3 переводят они же
Т.е. задача решена частично. Объем перевода сообщений довольно большой.

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

Я сравниваю абсолютно идентичные результаты - перевод словаря указанного в статье объёма. Перевод интерфейса (в т.ч. NStr), редактура (вычитка), дальнейшая локализация - за рамками данной статьи и не входят в оценки. Это следующий этап работ.
Вы участвовали в переводе Small business?
47. amiko 21.10.20 16:16 Сейчас в теме
(46) На базе Small Business мной создана конфигурация для ОАЭ. Так же я входила в команду создания Драйва, пока он не перешел к 1Ci. Про все затраты на переводы, локализацию и прочее знаю лично, т.к. несколько лет назад это были собственные инвестиции.
56. Yashazz 4709 26.10.20 21:44 Сейчас в теме
(47) ой да прям) Вами, лично? Да ещё для ОАЭ? И где, позвольте спросить, она там используется? И вы прям в одиночку конфигурацию создали?))
60. amiko 26.10.20 23:36 Сейчас в теме
(56) Да. Мной лично. Как и написано выше, конфигурация создана на основе конфигурации SmallBusiness, которая в свое время была в общем доступе на 1c-dn. Доработана под требования местного рынка и местных законов. Успешно используется у клиентов моей компании уже 4 года.
61. Yashazz 4709 27.10.20 11:02 Сейчас в теме
(60) Так это называется не "создана", а "слегка допилена". Добавить пару справочников, документов да регистров не значит создать. Это именно доработка. И это не "для ОАЭ", а для конкретной одной компании. Что ж, могу лишь пожалеть эту компанию, т.к. SmallBusiness ведь тоже на основе БСП.

Если уж делать, да для внешнего рынка, то делать по уму, с чистого листа, свою БСП-образную механику, как уже на ИС предлагали. Но делать, естественно, грамотно и аккуратно, а не как писатели типовых клепают. А то вот давеча я в трёх разных модулях обнаружил одну и ту же, одноимённую, процедуру, причём в двух случаях её содержимое было идентично, в одном (с учётом, что модуль чисто серверный) было написано про #Если ВнешнееСоединение, в одной описание было и она торчала в области "Программный интерфейс", другие были типа служебные. Жесть. Диагноз ясен. Такое показывать стыдно, хуже индийского кода, чесслово.
63. amiko 27.10.20 12:18 Сейчас в теме
(61) Если Вам так не нравится 1С, то что Вы делаете в данном сообществе? В мире много разных технологий, займитесь чем-нибудь другим.
64. Yashazz 4709 27.10.20 13:18 Сейчас в теме
(63) Невнимательно читаете и скоропалительно делаете неверные выводы. Мне очень даже нравится платформа 1С. Мне совершенно не нравится БСП от 1С. Почувствуйте разницу)
65. amiko 27.10.20 13:22 Сейчас в теме
(64) Ну так если у Вас есть конкретные предложения по улучшению, то почему бы Вам не обратиться в 1С с этими предложениями? Критиковать необходимо, предлагая альтернативу и выбирая правильных слушателей. 1С открыта для общения, действуйте.
67. Yashazz 4709 27.10.20 13:28 Сейчас в теме
(65) Вот сейчас было смешно) Когда это в 1С писатели кода типовых слушали пожелания сторонних разработчиков? Поверьте мне, как знающему внутреннюю кухню, не слушали и вряд ли будут. Равно как писатели платформы раньше редко слушали своих же писателей конфигураций, и ещё реже - сторонних. Это в последнее время по платформе что-то забрезжило. А в группах разработки типовых - о, там даже если услышат, всё одно испорченный телефон выйдет. Так что никто ни для чего не открыт. Это вот бухгалтеров они ещё слушают порой, особенно если те на конференции им дружно наваляют)

Я, кстати, предлагал, году эдак в 2012-м, модульность вроде той, что сделана теперь расширениями. На Тимирязевке с нужными людьми общался. В итоге пошли они по пути "переопределяемых" модулей...

Ладно, это в общем оффтоп. Я всего лишь хотел сказать, что БСП показывать зарубежным коллегам мне было бы стыдно. Хоть переведённую, хоть нативную.
66. user1464234 27.10.20 13:22 Сейчас в теме
(64) изначально бсп это шаблоны программирования, своего рода букварь. Вполне логично что Лев Толстой не будет включать оригинальный букварь в качестве 3,4,5 глав своего труда.
Но программирование как то быстро превратилось в перевод с одного языка на другой, а как вы помните, даже у него были сноски с переводами с французского. Теперь БСП это французский, цитаты из которого переводятся на той же странице или в отдельном общем модуле.
69. Yashazz 4709 27.10.20 13:32 Сейчас в теме
(66) Изначально - может быть. Хотя позиционируется как библиотека, призванная экономить время на автоматизацию более-менее общих действий (файлы, доступ, интернет, печать).
Лев Толстой и его выпускающий редактор удавились бы, обнаружив такое количество логических ляпов, самоповторов и тавтологий, как в БСП.
45. RayCon 784 21.10.20 15:03 Сейчас в теме
(34)
Отзеркалю: Анна, Вы как всегда правы.
Дополню: сму БСП надо для начала перевести корректно. К сожалению, сейчас это не так.
30. TODD22 18 20.10.20 18:33 Сейчас в теме
А как вы разбирали программно имена функций и переменных?

Например "ПолучитьПараметрыДляОтчета" можно разбить по заглавным буквам, а как разбить "получитьпараметрыдляотчета" или такие обрабатывали переводчики?
31. vanjushkin 88 20.10.20 19:25 Сейчас в теме
(30) я разбирал имена регулярным выражением - по большим буквам. Если будет написано "получитьпараметрыдляотчета", то это не разобьётся конечно, так и останется одним словом. Но я такого в словаре не видел.
Самое криминальное что встречал - маленькая буква после предлога, типа такого: ПреобразоватьВструктуру. Даже это большая редкость.
По ощущениям чаще встречаются обычные опечатки в словах. Что интересно, часть опечаток нейросеть "понимает" и переводит слово корректно.
33. Артано 760 21.10.20 07:25 Сейчас в теме
(30) никак. Код должен соответствовать стандартам. В стандарте прописан верблюжий код.
35. TODD22 18 21.10.20 09:46 Сейчас в теме
(33)
никак. Код должен соответствовать стандартам. В стандарте прописан верблюжий код.

Я в курсе про стандарты.

Вопрос был в том что может они какой то библиотекой обработки языка это делали. Те же Гуглы с Яндексами опечатки на поиске исправляют и в целом понимают слова когда забудешь пробел поставить.
41. Артано 760 21.10.20 12:18 Сейчас в теме
(35) Для обеспечения правильности перевода, я бы так не делал. Мало ли что там имел ввиду кодер, забивая на оформление. Иначе робот может чего-нибудь неправильное додумать. Лучше такие слова помечать соответствующим образом и проверять уже передними манипуляторами и окулярами кожаных мешков.
36. KeyFire 21.10.20 10:36 Сейчас в теме
Подскажите, как вы перевели шаблоны RLS в БСП? Очень интересно?
38. vanjushkin 88 21.10.20 10:44 Сейчас в теме
(36) Хороший вопрос! По информации от разработчиков Language Tool, штатный перевод шаблонов RLS появится в одной из ближайших версий плагина. На текущей версии я оставил их без перевода.
39. KeyFire 21.10.20 11:08 Сейчас в теме
Понятно, тогда не ясно, получилась ли конфигурация работоспособной без перевода RLS.
40. vanjushkin 88 21.10.20 11:19 Сейчас в теме
(39) RLS сейчас не работает, жду обновления плагина для перевода шаблонов.
Мог перевести шаблоны вручную - массовой заменой по словарю, но решил не тратить время если всё равно ожидается полноценная поддержка.
48. DitriX 2091 21.10.20 17:26 Сейчас в теме
А мы вот не осилили перевод кода, реализовали только механизмы перевода интерфейса, в том числе и контекстного перевода.
А с кодом мы сдулись, так как посчитав приблизительные затраты на поддержку этого всего добра и отсутствие нормальных словарей, поняли, что скорость и стоимость таких переводов - будет заоблочная, и только очень и очень не значительная часть компаний сможет себе позволить делать нечто подобное. Причем тут даже не вопрос в наличии денег у компании, а вопрос в наличии кадров. Это должен быть полный девопс, с покрытием чуть ли не всего кода и всех сценариев и т.д. А иначе - перевод дает кота в мешке.

И самое грустное тут в том, что продав одному клиенту такую конфу, ты попал, всё, теперь ты должен поставлять каждый раз обновления на английском :)
49. vanjushkin 88 21.10.20 17:54 Сейчас в теме
(48) смотрел презентацию Вашего инструмента, Дмитрий, очень интересное решение в плане юзабилити
50. DitriX 2091 21.10.20 18:00 Сейчас в теме
(49)Спасибо. Теперь оно стало еще круче :) Теперь мы уже интегрируемся и со смарткетом и разные другие плюшки умеем. Но не об этом тут.
Как вы решаете проблему сценариев и их переводов? А то вот мы щас так раз и решаем что с этой проблемой делать. А то у нас конфа на 5 языках, а тесты только на инглише.
Вот хотел получить бы от вас фидбек на эту тему.
51. vanjushkin 88 21.10.20 18:32 Сейчас в теме
(50) мы сейчас пишем тесты для одного языка на сколько я знаю, и не переводим их
52. Артано 760 22.10.20 10:58 Сейчас в теме
(48)
А мы вот не осилили перевод кода, реализовали только механизмы перевода интерфейса, в том числе и контекстного перевода.
А с кодом мы сдулись, так как посчитав приблизительные затраты на поддержку этого всего добра и отсутствие нормальных словарей, поняли, что скорость и стоимость таких переводов - будет заоблочная, и только очень и очень не значительная часть компаний сможет себе позволить делать нечто подобное. Причем тут даже не вопрос в наличии денег у компании, а вопрос в наличии кадров. Это должен быть полный девопс, с покрытием чуть ли не всего кода и всех сценариев и т.д. А иначе - перевод дает кота в мешке.

И самое грустное тут в том, что продав одному клиенту такую конфу, ты попал, всё, теперь ты должен поставлять каждый раз обновления на английском :)


Один раз перевести и потом уже сопровождать английский код - будет сильно дешевле. Правда за тарелку супа кодера уже не найдете, наверное.
53. DitriX 2091 22.10.20 11:46 Сейчас в теме
54. comol 5051 24.10.20 22:17 Сейчас в теме
Я тоже не понял смысла сих телодвижений именно в этом направлении. Если код переведён на другой язык, при этом это делается не полностью автоматизированно и есть различия а также нет системы полной связи кода, значит это два продукта с разной кодовой базой...

Соответственно по факту речь идёт не о "переводе УНФ" а о создании форка УНФ с кодом на другом языке. Этим форком изначально был 1C:Драйв, зачем переводить сам УНФ конечно ещё так себе вопрос...
55. vanjushkin 88 25.10.20 08:22 Сейчас в теме
УНФ хорошо подходит для локализации, поскольку её функционал достаточно универсален (управленческий и оперативный учёт). Есть специфичные для РФ подсистемы, которые я удалил: ЭДО, ВЕТИС и прочие. А весь основной функционал подходит для Вьетнама почти без изменений (по сравнению с Бухгалтерией например)
Полная локализация включает перевод кода, перевод интерфейса, кастомизацию под местную специфику.

Перевод кода в свою очередь можно разбить на два этапа:
1. создание словаря
2. непосредственно перевод конфигурации по этому словарю
Моя статья о том, как радикально сократить затраты и сроки на создание словаря.

Шаг 2 - сам перевод - выполняется автоматически с помощью Language tool. Но для этого конфигурация должна быть подготовлена (типизация кода для устранения неоднозначных ситуаций)

Далее мы можем оперативно переводить новые релизы русской УНФ и получать обновления для международной конфигурации.
72. DatiniFM 20.11.21 20:50 Сейчас в теме
(55) Это давно сделано в 1с: DRIVE
76. vanjushkin 88 06.12.21 16:34 Сейчас в теме
(72)
Вы можете сами сравнить 1С Drive и УНФ последней версии. Сейчас у этих продуктов в плане возможностей больше отличий, чем общего.
57. Yashazz 4709 26.10.20 21:46 Сейчас в теме
БСП сама по себе столь чудовищное уродство, что, взглянув на неё чуть вдумчивее, нежели чем на топырящей пальцы презентации, любой грамотный архитектор и разработчик - что из западных, что из восточных - немедля откажется иметь какое-либо дело. И с самой БСП, и с любым продуктом, основанным на ней.

Если, конечно, только "экспортная" БСП кардинально отличается от "внутренней". Но верится с трудом.
58. user1464234 26.10.20 21:59 Сейчас в теме
Насколько я помню, отдельной версии бсп для экспорта не обсуждали.
59. Yashazz 4709 26.10.20 22:18 Сейчас в теме
(58) Тогда лучше не позориться и тихо сидеть там, где популярность продукта обеспечена лобби-сговорами, а не качеством) Т.е. в рамках эрефии и ближних окрестностей.
62. пользователь 27.10.20 11:12
Сообщение было скрыто модератором.
...
68. user1464234 27.10.20 13:31 Сейчас в теме
Кстати интересный вариант - в русских версиях типовых конфигураций код БСП использовать англоязычный...
А то не всегда очевидно, где французский, а где нижегородский.
70. Devi 32 15.09.21 10:02 Сейчас в теме
Локализация дело сложное, идея с переводом в статье классная - но тут по большей степени фирма 1С, заложив на начальном этапе шикарные возможности - мягко говоря не дотянула - с английским во встроенном языке фишку ещё предусмотрели, а вот с поддержкой прочих языков грусть и печалька… – хотя что мешает всё равно всё это переводится в псевдокод. В прочем забросив развитие IDE конфигуратора тоже себе подгадили. Так что прощай экспансия на внешние рынки…
71. DatiniFM 20.11.21 20:48 Сейчас в теме
НеВЕРНО следующее

"Обеспечить приток новых разработчиков и партнёров в других странах, открыть для приложений 1С путь на массовый рынок - можно только с продуктами на английском коде"

НЕ НА АНГЛИЙСКОМ КОДЕ А КОДЕ НА РОДНОМ ЯЗЫКЕ ПРОГРАММИСТА
75. vanjushkin 88 06.12.21 16:28 Сейчас в теме
(71)
Нет, именно на английском.
73. DatiniFM 06.12.21 13:49 Сейчас в теме
А вот такой вопрос - имеете ли вы право на такой перевод типовой конфигруации 1С и его использование?

согласно лицензионным правилам 1с Вы можете по индивидуальному договору доработать или модифицировать для конкретного заказчика программу. ЕЕ же полная локазизация и продажа измененного продукта без разрешения правообладателся незаконна! Как и перевод книги целиком и ее публикация без разрешения автора не разрешается.
74. vanjushkin 88 06.12.21 16:27 Сейчас в теме
(73) мы всё сделаем с разрешения, разумеется. 1С Вьетнам - дочернее предприятие ЗАО 1С
Оставьте свое сообщение