SAPUI5 i18n Manager and Inline Viewer
Work with SAPUI5 i18n resource bundles without leaving your view or
controller. The extension reads your .properties files and shows the actual
translated text right where the keys are used, warns about keys that don't
exist yet, and adds them for you with a single click.
Features
- Inline translations — the resolved text is rendered next to every
{i18n>key} binding and getText("key") lookup via inlay hints. getText
is detected on any receiver, so calls through a controller reference in a
plain helper module (e.g. parentController.getText("key")) are covered too.
- Hover popovers — hover an i18n key to see its translation and which
bundle file it came from.
- Go to definition — Ctrl/Cmd+click an i18n key to jump to where it is
defined in the resolved bundle (target language preferred, base as fall-back).
- Diagnostics
- In source files: keys that are used but missing from every bundle.
- In
.properties files: unused keys (defined but never referenced),
empty values (a forgotten translation, reported per language file),
duplicate keys within a file, and — when a target language is set —
keys not translated in that language (reported in the base bundle).
- Quick Fixes — “Add '
<key>' to i18n properties” on a missing key, and
“Remove unused/duplicate i18n key” in bundles.
- i18n Keys side bar — a dedicated view listing every key with its value per
language, usage locations, and warning badges for keys that need attention.
- Configurable language — pick which translation is displayed
(
i18n_de.properties, i18n_fr.properties, …) with base-bundle fall-back.
- Status bar — a
🌐 i18n: N indicator (click to reload); a SAPUI5 i18n
output channel logs what was discovered.
Supported files: .xml (including .view.xml and .fragment.xml), .js,
.ts (including .controller.ts), .mjs, and .cjs.
Settings
| Setting |
Default |
Description |
sapui5-i18n.targetLanguage |
"" |
Language suffix to display, e.g. de loads i18n_de.properties. Empty uses i18n.properties. |
sapui5-i18n.propertiesGlob |
**/i18n*.properties |
Glob used to discover the resource bundles. |
sapui5-i18n.sourceGlob |
**/*.{xml,js,ts,mjs,cjs} |
Glob for source files that reference keys (drives unused detection & the tree). |
sapui5-i18n.enableInlayHints |
true |
Show the resolved translation inline. |
sapui5-i18n.enableDiagnostics |
true |
Master switch for all diagnostics. |
sapui5-i18n.checkUnusedKeys |
true |
Warn about keys defined but never referenced. |
sapui5-i18n.checkEmptyValues |
true |
Warn about keys with an empty value. |
sapui5-i18n.checkDuplicateKeys |
true |
Warn about keys defined twice in one file. |
sapui5-i18n.checkMissingTranslations |
true |
Warn (in the base bundle) about keys not translated in the target language. |
sapui5-i18n.maxHintLength |
40 |
Truncate inline hints after this many characters (0 disables). |
Commands
- SAPUI5 i18n: Reload translation files — re-scan the workspace bundles.
Development
This project uses Bun exclusively for package management and
scripts.
bun install # install dependencies
bun run check-types # tsc --noEmit
bun run lint # eslint
bun run compile # type-check, lint and bundle with esbuild
bun run test # compile + run the VS Code test suite
bun run vsce:package # build a .vsix (bundled, --no-dependencies)
bun run vsce:publish # publish to the VS Code Marketplace
bun run ovsx:publish # publish to Open VSX
Press F5 in VS Code to launch the extension in an Extension
Development Host.
Architecture
src/core/* — pure, vscode-free logic (properties parsing, key scanning,
language resolution); unit tested in isolation.
src/i18nModel.ts — aggregates every relevant bundle into one lookup with
target-language precedence and base-bundle fall-back.
src/providers/* — the hover, inlay-hint, diagnostics and quick-fix
providers.
src/extension.ts — activation and wiring (providers, commands, file
watchers).
Tests
- Unit tests cover the pure parsing/scanning core.
- Integration / E2E tests run inside a real Extension Host against the
sample app in
test-fixtures/sample-workspace
and exercise diagnostics, hovers, inlay hints, the quick fix, and language
switching.
Continuous integration (type-check, lint, bun audit, headless tests) runs via
.github/workflows/ci.yml.
| |