#!/bin/env bash # ensure-locale.sh # Ensures a UTF-8 locale is available and exported (works safely on hosts and in containers). ensure_utf8_locale() { # If already UTF-8, nothing to do if locale | grep -qi 'utf-8'; then return 0 fi # If en_US.UTF-8 (or equivalent) exists, just use it if locale -a 2>/dev/null | grep -qi 'en_US\.utf8'; then export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 return 0 fi # Try to generate one if possible (Debian/Ubuntu) if command -v locale-gen >/dev/null 2>&1; then echo "[ensure-locale] Generating en_US.UTF-8 locale..." locale-gen en_US.UTF-8 2>/dev/null || true # If update-locale exists, register it command -v update-locale >/dev/null 2>&1 && update-locale LANG=en_US.UTF-8 || true export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 return 0 fi # Alpine / musl–based systems: locale-gen doesn't exist if [ -f /usr/lib/locale/locale-archive ] || grep -q musl /proc/self/maps 2>/dev/null; then export LANG=C.UTF-8 export LC_ALL=C.UTF-8 return 0 fi # Fallback if nothing else works export LANG=C.UTF-8 export LC_ALL=C.UTF-8 } # Call it immediately if script is sourced/run directly ensure_utf8_locale