Un'immagine di server minimale spesso porta con sé solo il locale C e nient'altro. Tutto funziona finché il testo è semplice inglese: poi l'arabo diventa punti interrogativi dentro un log, un nome di file con un accento non si riesce a creare, e l'ordinamento dispone i nomi in una sequenza che nessun lettore riconosce.

Guarda che cosa è impostato

locale
locale -a | head

Se l'elenco contiene soltanto C e POSIX, sulla macchina non è stato generato nessun locale UTF-8.

Generane uno e impostalo

sudo apt-get install -y locales
sudo locale-gen en_US.UTF-8 ar_EG.UTF-8
sudo update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8

Esci e rientra. Le variabili vengono lette all'accesso, quindi la shell da cui le hai impostate non te le mostrerà.

Gli avvisi che arrivano da SSH

I messaggi su un locale che non si riesce a impostare di solito significano che il tuo portatile sta mandando il proprio locale a un server che non ce l'ha. O generi quel locale sul server, o impedisci al client di mandarlo.

# on your machine, ~/.ssh/config
Host *
    SendEnv -LANG -LC_*

Il database è una questione a parte

Il locale del server non cambia ciò che MySQL conserva. Una colonna dichiarata latin1 storpia l'arabo e le emoji comunque sia impostato il sistema operativo — se ne parla in Set di caratteri, collazione e la trappola delle emoji.

Cambiare il locale cambia il modo in cui alcuni programmi ordinano. Se uno script dipende dall'ordinamento — una rotazione dei backup, un rapporto — dopo la modifica verificalo una volta, invece di darlo per scontato.