Skip to content

[Feature Request] Add translation/i18n tools for multilingual ABAP development #40

@Prolls

Description

@Prolls

Summary

SAP systems are inherently multilingual — message classes, data elements, text pools, and many other objects carry translations in multiple languages. LLMs are uniquely suited to assist with translation workflows: reading source texts, generating translations, and writing them back.

Adding i18n/translation tools to vibing-steampunk would unlock AI-assisted translation of ABAP artifacts, language coverage analysis, and bulk translation workflows.

Proposed tools (7)

# Tool name Method Endpoint Description
1 GetObjectTextsInLanguage GET {objectSourceUrl}?sap-language={lang} Read any ADT object's source in a specific language
2 GetDataElementLabels GET /sap/bc/adt/ddic/dataelements/{name}?sap-language={lang} Read data element labels (short/medium/long/heading) in a specific language
3 GetMessageClassTexts GET /sap/bc/adt/messageclass/{name}/source/main?sap-language={lang} Read all messages of a message class in a specific language
4 WriteMessageClassTexts PUT /sap/bc/adt/messageclass/{name}/source/main?sap-language={lang} Write/update message class texts in a target language (with lock/unlock)
5 WriteDataElementLabels PUT /sap/bc/adt/ddic/dataelements/{name}?sap-language={lang} Write/update data element labels in a target language (with lock/unlock)
6 GetTextPoolInLanguage GET /sap/bc/adt/programs/programs/{name}/textelements?sap-language={lang} Read text elements (text pool) of an ABAP program in a specific language
7 CompareObjectLanguages (composite: reads object in 2 languages) Compare an object in two languages side-by-side, flagging missing translations

Key technical details

sap-language query parameter

All ADT endpoints accept ?sap-language={lang} (ISO 639-1 code: EN, FR, DE, ES, etc.) to read/write objects in a specific language. This is the core mechanism for all translation tools.

Lock/unlock pattern for write operations

Write operations require the standard ADT lock/unlock sequence:

  1. Lock: POST {objectUrl}?_action=LOCK → returns a lock handle
  2. Write: PUT {objectUrl}?sap-language={lang}&lockHandle={handle} with updated content
  3. Unlock: POST {objectUrl}?_action=UNLOCK&lockHandle={handle}

XML parsing

Message classes use mc:message elements:

<mc:messages xmlns:mc="http://www.sap.com/adt/MessageClass">
  <mc:message mc:index="000" mc:text="Original text in source language"/>
  <mc:message mc:index="001" mc:text="Another message"/>
</mc:messages>

Data elements have multiple label fields in their XML:

<ddic:ShortDescription>Short label</ddic:ShortDescription>
<ddic:MediumDescription>Medium label</ddic:MediumDescription>
<ddic:LongDescription>Long label</ddic:LongDescription>
<ddic:HeadingDescription>Heading</ddic:HeadingDescription>

Typical workflow

  1. Compare source language (e.g., EN) with target language (e.g., FR) using CompareObjectLanguages
  2. Identify missing or outdated translations
  3. Read source texts with GetMessageClassTexts / GetDataElementLabels / GetTextPoolInLanguage
  4. Translate using the LLM (context-aware, consistent terminology)
  5. Write translations back with WriteMessageClassTexts / WriteDataElementLabels
  6. Activate the object to make translations effective

Use cases

  • Bulk translation: Translate all message classes of a package from EN to FR/DE/ES
  • Translation coverage audit: Scan objects for missing translations across languages
  • Terminology consistency: LLM can maintain consistent translations across related objects
  • Translation review: Compare existing translations against source for accuracy

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions