Translate your app with an LLM in Business Central
Eric shows how to translate a Business Central app's labels with Claude through his open-source AL Build tool. The workflow uses XLIFF translation files, a context system prompt, a local database of cached and Microsoft translations, and developer comments on labels. The demo covers Danish and German. Feature status is not stated.
- Introduction and motivation for LLM-based translation
- Setting up translation with labels in Hello World app
- AL Build tool and translation workflow overview
- Claude configuration and caching with Microsoft translations
- Demonstrating translations in Danish and German
- Using developer comments for context-aware translations
- Conclusion and call to action
Overview
Erik Hougaard explains why he used an LLM to translate Business Central apps and walks through the setup in a Hello World app. Translatable text must be defined as labels, and the “translate file” feature must be turned on in app.json so that XLIFF files are generated with source text and empty target entries.
Key points
- Only text defined as labels, not plain strings, gets translated.
- Turn on the ‘translate file’ feature in app.json to generate XLIFF files with source text and target placeholders.
- The Python-based AL Build tool runs a task list that updates the app version, compiles the app, translates the .g.xliff file with a system prompt, then compiles again.
- The demo uses Claude Opus 5; Sonnet and cheaper models can also be used.
- The system prompt describes the app, its purpose and target users (for example a finance controller) to guide translation quality.
- A local database stores Microsoft translations for recognized labels, such as customer number, and translations the tool has already produced, which avoids repeated LLM calls.
- Comments on labels are now passed to the LLM as extra context or instructions, such as tone or domain guidance.
Features
Every feature below: status not stated, demoed.
| Feature | At |
|---|---|
| LLM-based app translation using Claude | 1:21 |
| Translation file (XLIFF) support in app.json | 2:23 |
| AL Build with translation task | 3:34 |
| Context injection through system prompts | 4:55 |
| Microsoft translation database integration | 5:59 |
| Developer comments for translation guidance | 9:30 |
AL objects mentioned
As heard in the captions. A name that matches one object page by exact type and name links to it; the others stay as named.
Quotes
- 1:21 “maybe I can I can get an LLM. Maybe I can get Claude or ChatGPT. Because they’re pretty good at translations.”
- 2:23 “for stuff to actually get translated we need to turn on a feature in the app json called translate file”
- 4:55 “this is an app for Business Central. It’s adding extended functionality to common finance areas. The target user is finance controller that speaks fluent”
- 5:22 “it’s using Claude Opus 5 right now. You can also use Sonnet and some of the cheaper ones.”
- 5:59 “and stored them in my database so if if if we have customer number that’s a microsoft label”
Disclaimers in the video
- 11:14 not-in-this-release: I was working on a version that would just translate 10 uh 15 uh translations in in parallel, but uh …
Presenters (as heard): Eric.
