Skip to content

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:

  1. Raw Native Identity: Preserved on your local host filesystem, metadata records, and visual Web Dashboard UI (ldm dashboard).
  2. 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:

# Force ASCII safe-replacements for terminal UI icons and color codes
ldm status --no-unicode

Last Updated: 2026-08-18 | Last Reviewed: 2026-08-18