Internationalization & Character Transcoding Guide¶
Note
Liferay Docker Manager (LDM) is engineered to provide seamless, native-language support for software engineering teams across all nations. This document details how LDM handles non-ASCII folder names, German umlauts, European accents/diacritics, and non-Latin scripts (CJK, Cyrillic, Arabic, Greek).
🌐 Philosophy & Overview¶
Developers frequently work with local folder names, workspace paths, or project titles written in their native languages (e.g. /projects/München-Portal, ~/dev/Liferay-Köln, or /repos/东京-Liferay).
However, Linux kernel networking, Docker Engine container specifications, volume naming contracts, and DNS hostnames strictly require RFC-1123 compliant ASCII alphanumeric characters.
To bridge this boundary, LDM enforces a Dual Identity Model:
- Raw Native Identity: Preserved on your local host filesystem, metadata records, and visual Web Dashboard UI (
ldm dashboard). - Transcoded RFC-1123 Identity: Generated dynamically via
sanitize_id()for Docker container names, Docker volumes, Traefik proxy routes, and DNS subdomains.
🔤 Transcoding & Normalization Rules¶
LDM applies zero-dependency string transcoding in ldm_core/utils.py (sanitize_id()):
1. German Umlauts & Eszett¶
German characters are transcoded into standard Latin digraph replacements:
| Original Character | Transcoded Replacement |
|---|---|
ä |
ae |
Ä |
AE |
ö |
oe |
Ö |
OE |
ü |
ue |
Ü |
UE |
ß |
ss |
2. European Accents & Diacritics¶
Unicode NFKD decomposition strips accents while preserving base Latin characters across Spanish, French, Portuguese, Scandinavian, and Italian languages:
| Sample Character | Transcoded Replacement |
|---|---|
é / è / ê |
e |
ñ |
n |
ç |
c |
å / á / à |
a |
ø |
o |
3. Non-Latin Scripts (CJK, Cyrillic, Arabic, Greek)¶
When a project identifier consists exclusively of non-Latin scripts (such as Chinese 東京, Cyrillic Москва, or Arabic دبي), LDM generates a deterministic, safe SHA-256 hash prefix (project-a1b2c3d4). This guarantees 100% valid Docker container initialization without crashing the Docker daemon.
📊 Component Mapping Breakdown¶
The table below illustrates how a workspace named München-Portal is represented across the LDM ecosystem:
| Component / Layer | Format Rendered | Actual Value | Reason & Context |
|---|---|---|---|
| Host Filesystem Path | Raw Native | /Users/dev/repos/München-Portal |
Folder name on disk remains untouched. |
Web Dashboard UI (ldm dashboard) |
Raw Native | München-Portal |
Developer UI renders human-readable workspace title. |
CLI Status (ldm list / ldm info) |
Raw Native | /Users/dev/repos/München-Portal |
Terminal lists preserve actual disk locations. |
| Docker Container Name | Transcoded | liferay-muenchen-portal |
Enforces Docker Engine daemon naming compliance. |
| Docker Volume Name | Transcoded | muenchen-portal_osgi_state |
Enforces POSIX Docker volume naming rules. |
| Traefik Proxy Hostname | Transcoded | muenchen-portal.local |
Enforces DNS domain label specifications. |
Cloud Subdomain (--share) |
Transcoded | muenchen-portal.lfr-demo.online |
Enforces public URL domain specifications. |
🖥️ Terminal Display Options (--no-unicode)¶
For developers working in legacy SSH terminals, Windows Command Prompt (cmd.exe), or ASCII-only CI build logs, LDM supports output character safe-replacements:
Last Updated: 2026-08-18 | Last Reviewed: 2026-08-18