Переводы тегов, сгенерированные ИИ, работают неидеально

При просмотре переводов тегов на немецкий я заметил ряд проблем, которые, похоже, вызваны отсутствием контекста у ИИ: он воспринимает теги как изолированные слова, а не как ссылки на конкретные функции Discourse, плагины или компоненты.

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

Сначала самое интересное

Прежде чем перейти к практическим проблемам, некоторые переводы просто забавны:

  • composer → «Komponist» — это человек, сочиняющий музыку.
  • auto-bump → «automatische-erhöhung» — «автоматическое повышение».
  • fully-theme → «vollständig-thematisiert» — «полностью рассмотренный».
  • raspberry-pi → «Himbeere-pi» («малина» как фрукт).
  • post-voting → «nach-der-Abstimmung» — «после голосования» («post» прочитано как латинский префикс, а не как пост на форуме).
  • tablet → «Tablette» — «таблетка» (лекарство, а не устройство).

Один и тот же перевод для разных тегов

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

  • year-in-review и yearly-review → «Jahresrückblick» — В настоящее время название плагина, похоже, не переводится (я вижу английское название в боковой панели администратора и в списке установленных плагинов), поэтому, вероятно, для обозначения названия плагина следует использовать английский термин. Хотя я надеюсь, что когда-нибудь все плагины будут иметь переведенные названия, поэтому, думаю, я добавлю «Metas» к тому, который группирует темы ежегодного обзора здесь, чтобы разделить их, так что получится «Metas-Jahresrückblick» (ежегодный обзор Meta).
  • surveys и polls → «Umfragen» — Мне кажется, переводы обоих плагинов тоже одинаковы, и пока никто этого не заметил. Мне нужно еще подумать над хорошим решением для этого случая, так как это также может легко конфликтовать с «voting» (голосованием) :exploding_head:
  • docs и documentation → «Dokumentation» — Как и в случае с yearly-review, docs не был переведен на немецкий, поэтому я бы не переводил тег (в данном случае перевод в будущем кажется крайне маловероятным).
  • how-to и tutorial → «Anleitung» — Эта проблема уже исправлена. Я нашел этот перевод https://diataxis.fr/ и предложил термин[1], используемый там.

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

Некоторые теги относятся к конкретным инструментам, фреймворкам или продуктам. Их перевод делает функцию неузнаваемой.

  • raspberry-pi → «Himbeere-pi» («малина» как фрукт).
  • mermaid → «Meerjungfrau» («русалка» как мифологическое существо, а не инструмент для создания диаграмм).
  • ember → «Glut» (раскаленные угли от огня).
  • vanilla → «Vanille» (вкус).
  • onebox → «einzige-box» — «единственная коробка».
  • intercom → «Gegensprechanlage» (домофон, как дверной звонок — хотя intercom-widget переведен правильно).
  • passkey → «Passwort» — «пароль» (ключ доступа — это именно не пароль).
  • perspective-api → «Perspektiven-api».
  • backups → «Sicherungen».
  • design-experiment → «Experimententwurf» — может означать и «дизайн-эксперимент», и «черновик эксперимента». Я склоняюсь к последнему, так как для первого я бы оставил слово «design», а обсуждение черновиков в Discourse довольно распространено.

Переводы слова «Discourse»

Большинство тегов, относящихся к «Discourse», были переведены так, что в них больше не содержится название программного обеспечения. Исключение составляет discourse-hub.

«Theme» последовательно ошибочно переводится как «Thema» (тема обсуждения)

Это системная проблема во всех тегах, связанных с темами оформления. В немецком языке и «theme» (тема оформления), и «topic» (тема обсуждения) переводятся как «Thema», но в контексте Discourse это совершенно разные вещи. Из-за этого теги тем оформления выглядят так, будто речь идет о конкретных темах обсуждения.

  • theme-welcome → «Willkommens-Thema» (читается как «приветственная тема», как в закрепленном приветственном треде по умолчанию).
  • theme-creator → «Themenersteller» — «создатель темы».
  • horizon-theme → «Horizont-Thema».
  • meta-theme-feedback → «Meta-Themen-Feedback».
  • foundation-theme — тот же паттерн.
  • fully-theme → «vollständig-thematisiert» — «полностью рассмотренный».

Это затрагивает все теги в группе Official Themes.

Переводы, в которых отсутствовал контекст

  • composer → «Komponist» — это человек, сочиняющий музыку, по сравнению с полем ввода, которое мы обычно называем «Editor» (Редактор) на немецком.
  • tablet → «Tablette» — «таблетка» или «планшет».
  • copy-post → «kopierbeitrag» — «плата за копирование» (Проблема в сочетании слов. «Beitrag» для поста верно, но так как copy не было переведено как глагол, создается впечатление, что Beitrag используется здесь в значении «плата»).

Существительное или глагол

Некоторые функции были переведены как глаголы вместо существительных:

  • chat → «plaudern» — «болтать».
  • search → «suchen» — «искать».

«post» прочитано как латинский префикс, а не как пост на форуме

  • post-voting → «nach-der-Abstimmung» — «после голосования».
  • post-badges → «nach-Abzeichen» — «после значков».

Результаты не совсем понятных английских тегов

  • hosted-support → «gehosteter-support» (Звучит так, будто хостится поддержка, а не поддержка для клиентов на хостинге).

Сокращения

  • pm-dropdown (то же самое на немецком) — без контекста m (message) не было заменено на n (Nachricht).

Переводы, не соответствующие собственной терминологии интерфейса Discourse

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

  • impersonate → «nachahmen» — «подражать» (но в интерфейсе используется Nutzersicht или Nutzerrolle).
  • staged-users → «Staging-Benutzer» (но в интерфейсе сказано vorbereitete Benutzer).
  • advertising → «Werbung» (но в интерфейсе речь идет об Anzeigen).
  • assign → «zuweisen» (но перевод плагина использует zuordnen).
  • hot-topics → «Top-Themen» (это было переведено как «топ-темы», что на самом деле является другим списком в Discourse).
  • read-only → «nur lesbar».
  • bootstrap-mode → «Bootstrap-Modus» (но переводчики изначально выбрали Starthilfemodus).
  • post-notices → «Nachrichten» — «сообщения/новости» (может вводить в заблуждение, так как сообщения — это другая функция, «официальное уведомление» в интерфейсе использует Mitteilung).
  • about-page → «über-Seite» (Это дословный перевод. Но обычно немецкий перевод звучит как «страница о нас». Über означает не только «о», но и «над».)
  • auto-bump → «automatische-erhöhung» — «автоматическое повышение».
  • tags → «Etiketten» (но tag-groups и большинство тегов, содержащих tag, используют «tag», термин, используемый в Crowdin — Schlagwort).

Обрезанные переводы

Это другой вид проблемы — не ошибка перевода, а следствие того, что немецкие составные существительные значительно длиннее своих английских аналогов, в сочетании с лимитом символов в тегах.

  • content-security-policy → «inhalts-sicherheitsrichtl» (обрезано, должно быть inhalts-sicherheitsrichtlinie).
  • ai-custom-prompt → «ai-benutzerdefinierte-auf» (обрезано посередине слова, должно быть ai-benutzerdefinierte-aufforderung).
  • custom-category-boxes → «benutzerdefinierte-katego» (обрезано посередине слова, должно быть benutzerdefinierte-kategorie-boxen, в этом случае слово box полностью отсутствует в переводе).

Теги, содержащие слово «custom», легко становятся слишком длинными, потому что «benutzerdefiniert» — довольно длинное слово.

больше примеров
  • pause-notifications → «benachrichtigungen-anhalt» (en).
  • theme-site-settings → «thema-website-einstellung» (en).
  • staff-action-log → «mitarbeiter-aktionsprotok» (le).
  • lazy-load-categories → «kategorien-verzögert-lade» (n).
  • unsupported-install → «nicht-unterstützte-instal» (lation).
  • categories-navbar → «kategorien-navigationslei» (ste).
  • remove-name-suppression → «namenunterdrückung-entfer» (nen).
  • right-sidebar-blocks → «rechte-seitenleiste-blöck» (e).
  • user-field-prompt → «benutzerfeld-eingabeauffo» (rderung).
  • top-contributors-sidebar → «seitenleiste-der-top-beit» (ragenden).
  • hide-users-column → «benutzer-spalte-ausblende» (n).
  • topic-footer-buttons → «thema-fußzeilen-schaltflä» (chen).
  • scrollable-post-content → «scrollbarer-beitrag-inhal» (t).
  • custom-inline-codeblocks → «benutzerdefinierte-inline» (-codeblöcke).
  • hide-muted-categories → «stummgeschaltete-kategori» (en-verstecken).
  • custom-header-icons → «benutzerdefinierte-kopfze» (ilen-symbole).
  • custom-header-links → «benutzerdefinierte-kopfze» (lein-links) (ПРИМЕЧАНИЕ: Это то же самое, что и предыдущий, так как они были обрезаны).
  • new-topic-header-button → «neuer-themen-header-butto» (n) (Хотя обычно мы используем «Schaltfläche» для кнопки).
  • sidebar-theme-toggle → «seitenleisten-themenumsch» (alter) (конечно, в этом случае тоже следует использовать «theme» вместо «topic», так что «n» не нужно).
  • custom-profile-link → «benutzerdefiniertes-profi» (l-link), грамматика кажется такой, будто «link» потерялся довольно рано, так как custom не соответствует link, а profile. Я думаю, что должно быть «benutzerdefinierter-profil-link».
  • easy-responsive-footer → «einfacher-responsiver-fuß» Похоже на предыдущий: easy и responsive, кажется, относятся к foot, где тег был обрезан, а не к footer. Должно быть «einfache-responsive-fußzeile».

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


@nat (по личной просьбе)


  1. Lernunterlagen ↩︎

7 лайков

Спасибо @Moin, я разберусь с этим и улучшу наши промпты :smiling_face:

Также LOL

Спасибо за смех :hugs:

5 лайков

@nat what if we gave the agent access to the read tool, so it could gather context by itself?

Would be too costly for posts, but rather cheap and increase the quality across all models for once offs like tags and categories.

4 лайка

Хм, это хорошая идея, @falco.

Ещё один вариант, который я рассматривал, — передавать описание тега в качестве дополнительного контекста при переводе названия тега. Возможно, так будет более предсказуемо. Что вы думаете?

4 лайка

Доступ к глоссарию в Crowdin мог бы быть очень полезен для бота, выполняющего перевод (не для всех сайтов, но особенно для Meta). Если там указано, что мы переводим «composer» как «Редактор», и ИИ это знает, он мог бы использовать это в тегах, а также в заголовках тем и сообщениях.

Я однажды исправил «composer» в Introducing our new composer, making writing on Discourse easier than ever, что привело к моему отзыву о редактировании переводов здесь: Feedback on the composer when translating a post to German. Однако тема была отредактирована после этого, и, похоже, предыдущий перевод не используется как контекст, поэтому в сообщении снова указано «composer». (Автор музыки обычно не упоминается в сообщениях; встречаются только короткие тексты, такие как заголовки тем и теги.)

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

Отличная идея, сделаем оба варианта!

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

Достичь идеального перевода на Meta было бы очень просто: достаточно использовать самую дорогую LLM и предоставить ей доступ к таким инструментам, как доступ к исходному коду и веб-поиск.

Я не думаю, что какая-либо модель выберет те же переводы для Meta, что и немецкие переводчики для интерфейса Discourse. «Mitarbeiter» — это идеальный перевод для «staff». Тот факт, что некоторые переводчики много лет назад решили, что это слово не подходит для небольших хобби-форумов, где «staff» подразумевает оплачиваемых сотрудников, и поэтому выбрали «Team», — это то, что ни один ИИ не угадает, потому что это просто не правильный перевод. Именно здесь могла бы помочь глоссарий Crowdin: без него сгенерированные ИИ термины никогда не будут совпадать с тем, что администраторы видят в интерфейсе — не потому, что ИИ не умеет переводить, а потому, что он не принимает те же решения по локализации, что и человеческие переводчики. Это разница между переводом и локализацией.
То же самое касается и других терминов, таких как «bootstrap mode» или «impersonation».

Это касается не только тегов, но и всего, что локализовано здесь. Будь то руководство или тег, использование терминов, которые пользователи действительно видят в своём интерфейсе, полезнее, чем лингвистически безупречный перевод, который не совпадает с тем, что показывает программное обеспечение.

Выбрала бы, так как у неё был бы доступ к тем же самым вариантам в файлах config/locales/**/*.yml для справки.

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

Мы не можем сделать это для постов, так как стоимость была бы слишком высока, но это вариант для небольших сайтов или клиентов с большими бюджетами на перевод.

Тогда, возможно, вам стоит отключить AI-перевод для Documentation и News and Events > Announcements :wink: Я не думаю, что можно гарантировать полезность таких переводов, особенно поскольку предложенные правки не обновляют тему, поэтому нет простого способа заметить, что тема была обновлена.

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

Это не так работает; агент может искать в коде фрагменты с совпадениями и никогда не загружает всё целиком в контекст.

Это немного похоже на то, как вылить ребёнка вместе с водой, не так ли?

Я только что проверил Calendar subscription URLs for external calendar apps на PT-BR, и перевод выглядит отличным, намного лучше, чем отсутствие перевода вообще.

Всегда будут возможности для улучшения в рабочем процессе машинного перевода без контроля, и @nat уже улучшил его сегодня благодаря вашим отзывам!

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