Imposta le localizzazioni personalizzate in Gnome3 (su Fedora 20)


15

Ho creato le mie personalizzate localee le ho inserite in modo /etc/locale.confche abbiano effetto se accedo a una console virtuale (Ctrl + Alt + F2). Nella mia sessione di Gnome3, tuttavia, queste variabili non sono impostate. Per le applicazioni terminali potrei semplicemente inserirle nel .bashrcma ciò non mi aiuterà con applicazioni grafiche come Thunderbird e Pidgin.

Ho provato a seguire questi suggerimenti: Impostazioni locali nell'inizializzazione della shell non utilizzate dalla sessione GNOME e persino emulato il bug in Locale - ArchWiki creando un .pam_environmentfile, ma gli locales sono ancora quelli impostati da Gnome3. C'è un dialogo di configurazione nelle impostazioni di Gnome, ma consente solo di impostare un insieme molto limitato di localecombinazioni predefinite e non è possibile personalizzarle.

I file rilevanti nella mia home directory:

user@localhost:~$ ls -lah .dmrc .pam_environment .session .xsession .xsessionrc
lrwxrwxrwx. 1 user user 16 12. Jun 08:57 .dmrc -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 11. Jun 20:23 .pam_environment -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:09 .session -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:07 .xsession -> /etc/locale.conf
lrwxrwxrwx. 1 user user  9 13. Jun 11:22 .xsessionrc -> .xsession
-rw-rw-r--. 1 user user 66 13. Jun 11:13 .profile

user@localhost:~$ cat .profile 
source /etc/locale.conf

I contenuti di /etc/locale.conf:

LANG="en_US.utf8"
LC_TIME="de_MY.utf8" # NB: de_MY
LC_MONETARY="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"

Qualcuno sa come impostare messaggi personalizzati localein Gnome3?

Risposte:


9

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.conffile, che viene letto all'avvio anticipato dal demone systemd . Le impostazioni locali configurate in /etc/locale.confvengono 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_weekdaye 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_ILcon i contenuti da he_ILe 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_ILcon 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_ILcon 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_ILcon 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.conffile 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_ILcon 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.

  • Consultare la sezione "Verifica dello stato locale corrente" per verificare che la configurazione del sistema sia corretta.
  • Usa GNOME Shell e le applicazioni dipendenti dalla locale (grafica e console) e verifica che si comportino come previsto con la nuova locale. Ad esempio, se hai personalizzato LC_TIME puoi eseguire il datecomando per convalidare il formato della data:

    $ date +%x
    21/04/15
    

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.


Posso confermare che funziona su Fedora 22 con Cinnamon. Molto probabilmente funzionerà anche con GNOME.
Dee'Kej,

1
Sono sicuro che se ci provano davvero, potrebbero rendere ancora più difficile la configurazione di localizzazioni personalizzate.
5heikki,

Adoro GNOME ma questo è ridicolo. Almeno lasciare agli utenti esperti la possibilità di configurare le impostazioni internazionali come preferiscono. Voglio un locale negli Stati Uniti per la maggior parte delle cose, ma la mia stampante utilizza carta A4 ...
static_rtti
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.