Informazioni di base
Ho testato la soluzione su Fedora 21 con GNOME Shell 3.14.4, ma credo che possa essere applicata anche ad altre versioni.
La prima cosa da capire è che l'ambiente desktop GNOME sovrascrive le definizioni locali a livello di sistema e quindi non è interessato da /etc/locale.conf
. Inoltre, potrebbero esserci applicazioni con una propria configurazione locale e che non utilizzano affatto le impostazioni di sistema o GNOME. In questa guida descriverò un modo per personalizzare le impostazioni della locale in base alle tue esigenze e GNOME e il sistema sarà coerente dal punto di vista della locale.
Verifica dello stato delle impostazioni internazionali correnti
Impostazioni a livello di sistema
Dalla guida dell'amministratore di sistema di Fedora 21 :
Le impostazioni locali a livello di sistema sono memorizzate nel /etc/locale.conf
file, che viene letto all'avvio anticipato dal demone systemd . Le impostazioni locali configurate in /etc/locale.conf
vengono ereditate da ogni servizio o utente, a meno che singoli programmi o singoli utenti non li sovrascrivano.
Per vedere lo stato corrente della localizzazione possiamo eseguire:
$ localectl status
System Locale: LANG=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
VC Keymap: us
X11 Layout: us
Impostazioni GNOME
$ gsettings get org.gnome.system.locale region
'en_US.UTF-8'
GNOME ha solo un'impostazione. Dando una rapida occhiata al codice sorgente di gnome-control-center sembra che quando set_localed_locale()
viene chiamata la funzione, imposta tutte le seguenti categorie (LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT, LC_PAPER) sulla stessa locale definita in org.gnome.system.locale region
.
Mescolare diverse impostazioni locali sembra impossibile senza creare una locale personalizzata, ma fortunatamente non è un compito molto complesso.
Creazione di impostazioni internazionali personalizzate
Penso che il modo più semplice di spiegare sia l'esempio. Nel mio caso specifico volevo avere un locale personalizzato, basato principalmente sull'ebraico ( he_IL ) ma con LC_NAME, LC_MESSAGES da en_US e LC_TIME (con modificato first_weekday
e first_workday
) da en_GB .
Acquisizione di file di definizione locale
Dovresti avere un'idea di quali locali vuoi mescolare. Innanzitutto dobbiamo individuare i file di definizione correlati, che possono essere trovati in /usr/share/i18n/locales/
. Tornando al mio esempio, avevo bisogno di quanto segue: he_IL , en_US e en_GB . Ho impostato una cartella di lavoro a casa mia e ho copiato i file richiesti in essa:
$ cd /usr/share/i18n/locales
$ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/
Creazione di un nuovo file di definizione
Ho deciso di chiamare il mio locale hc_IL e ho preso he_IL come base. Le seguenti righe creano un nuovo file hc_IL
con i contenuti da he_IL
e lungo la strada sostituiscono tutte le occorrenze di una stringa he_IL all'interno del file con hc_IL .
$ cd ~/custom-locale/
$ sed 's/he_IL/hc_IL/g' he_IL > hc_IL
Modifica del nuovo file di definizione
Ora possiamo personalizzare le nuove impostazioni locali in base alle nostre esigenze. Apri il file appena creato ~/custom-locale/hc_IL
con il tuo editor di testo preferito. Uso vim (ha l'evidenziazione della sintassi corretta per i file di definizione delle impostazioni locali):
$ vim ~/custom-locale/hc_IL
Per coloro che non hanno ancora scelto il loro editor preferito e vim non è la loro tazza di tè, possono usare gedit :)
$ gedit ~/custom-locale/hc_IL
La struttura dei file non è molto complicata. Essenzialmente, è costruito da sezioni. Dalle pagine man locali (5) :
La definizione della locale ha una parte per ogni categoria di locale. Ogni parte può essere copiata da un'altra locale esistente o può essere definita da zero. Se la categoria deve essere copiata, l'unica parola chiave valida nella definizione è copia seguita dal nome della locale che deve essere copiato.
La nozione di copia è molto utile. Risparmia tempo e il file risultante è chiaro e conciso. Ad esempio, invece di copiare intere sezioni in giro, puoi avere:
LC_MESSAGES
copy "en_US"
END LC_MESSAGES
La documentazione completa su un file di definizione delle impostazioni internazionali è accessibile tramite:
$ man 5 locale
Tuttavia, se vuoi solo creare un locale personalizzato, che è un mix di quelli esistenti, non è necessario comprendere ogni dettaglio.
Nel mio caso ho modificato le seguenti categorie e parole chiave:
LC_IDENTIFICATION
title "Custom Hebrew locale"
source "mydomain.ws"
address "http:////www.mydomain.ws"
contact ""
email "admin@mydomain.ws"
tel ""
fax ""
language "Hebrew"
territory "Israel"
revision "1.0"
date "2015-04-21"
Nota: tutte le righe " categoria .. " nella sezione LC_IDENTIFICATION sono state modificate durante la creazione del file utilizzando sed
. Quindi non abbiamo più bisogno di toccarli.
LC_TIME
Ho copiato la sezione completa da en_GB e modificato solo le righe che indicano il primo giorno della settimana e il primo giorno lavorativo:
first_weekday 1
first_workday 1
Il resto delle categorie che ho lasciato così come sono o ha sostituito il loro contenuto con la direttiva copia come in:
LC_NAME
copy "en_US"
END LC_NAME
Ecco fatto, il file di definizione è pronto. Non dimenticare di salvare il file :)
Compila e copia le nuove impostazioni internazionali
La compilazione della nuova locale viene eseguita usando il seguente comando come root o usando sudo . Sostituisci hc_IL
con la tua locale:
$ sudo localedef -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8
Se la compilazione ha esito positivo, i dati locali compilati vengono aggiunti al file di archivio /usr/lib/locale/locale-archive
.
Copia il nuovo file di definizione della locale nella directory delle definizioni della locale. Sostituisci hc_IL
con la tua locale:
$ sudo cp -v hc_IL /usr/share/i18n/locales/
Attivazione della nuova locale
In questo passaggio vogliamo configurare il sistema e GNOME per usare la nuova locale.
Impostazioni a livello di sistema
Modifica il /etc/locale.conf
file come root e imposta ogni riga che inizia con la LC_
tua nuova locale. Per esempio:
LANG=en_US.UTF-8
LC_NUMERIC=hc_IL.utf8
LC_TIME=hc_IL.utf8
LC_MONETARY=hc_IL.utf8
LC_PAPER=hc_IL.utf8
LC_MEASUREMENT=hc_IL.utf8
Impostazioni GNOME
Per attivare la nuova locale in GNOME, eseguire il comando seguente. Sostituisci hc_IL
con la tua locale:
$ gsettings set org.gnome.system.locale region "hc_IL.utf8"
Convalida delle nuove impostazioni
L'ultimo passo è convalidare che tutto funzioni come previsto. Per ricaricare tutte le impostazioni il più semplice per me è stato il riavvio.
Nota: tutto è stato testato su Fedora 21 con GNOME 3.14. Altre distribuzioni Linux potrebbero richiedere passaggi aggiuntivi o diversi.
Si prega di commentare se si riscontrano problemi con le istruzioni.