Come posso personalizzare le impostazioni internazionali del sistema?


24

In Sistema Amministrazione Supporto lingua Testo. Posso solo scegliere le impostazioni locali standard, ma vorrei perfezionare. Ad esempio in Windows potrei personalizzare manualmente cose come il formato di data e ora, unità di misura, separatore decimale, valuta, ecc. - Come posso farlo in Ubuntu?

Risposte:


28

Questa risposta dimostrerà come personalizzare completamente una locale, usando facoltativamente una locale esistente come base. Il tipo di locale che verrà utilizzato in questa risposta è il i18ntipo; tale tipo di locale sarà implicito in ogni menzione della parola "locale" nel corpo della risposta.

Trova una guida

La prima cosa che devi personalizzare una localizzazione è conoscere il formato della localizzazione. Questo editor di impostazioni internazionali per il Web ha una descrizione completa di tutti i campi di un'impostazione internazionale, nonostante non sia utilizzabile da chiunque in modo immediato. Questa sarà la guida da usare.

Strumenti necessari

Gli unici strumenti necessari per lavorare con le localizzazioni sono

  1. Un editor di testo. Qualunque cosa accadrà, sebbene VIM eccellerà.
  2. Un convertitore da testo a Unicode. Ci si aspetterebbe che tu non ne avessi uno, quindi te ne fornirò uno semplice. Leggi la sottosezione successiva per ottenerla.

Ti consiglio di creare una directory e di salvare su di essa tutto ciò che riguarda il lavoro che farai sulla locale.

Convertitore da testo a Unicode (codifica)

NOTA: se stai usando caratteri non comuni potresti avere problemi con lo script che scrivo di seguito; ti consigliamo di dare un'occhiata agli script alternativi collegati da nass .

Salva il seguente codice in un file. Questo file verrà identificato dal tuo sistema come uno script Python, che va bene perché è uno. Questa guida presuppone che tu abbia chiamato lo script encodestr.

#!/usr/bin/python

def encode(string):
    newstring = str()
    for ch in string:
        newstring += "<U%04X>" % ord(ch)
    return newstring

if __name__ == '__main__':
    import sys
    print encode(sys.argv[1])

Dopo averlo salvato, concedere l'autorizzazione per l'esecuzione del file, questo sarà utile. È possibile farlo usando nautilus, o eseguendo da un terminale il seguente comando, nella directory in cui è stato salvato lo script: chmod +x encodestr.

A questo punto è possibile verificare questo script in esecuzione sullo stesso directory: ./encodestr hello. Dovresti ottenere un output uguale a <U0068><U0065><U006C><U006C><U006F>.

Modifica una locale esistente

La modifica di una locale esistente è il caso più semplice, poiché idealmente sceglierai una locale che si adatta alle tue esigenze quasi totalmente, nel qual caso devi apportare solo piccole modifiche. Per personalizzarlo, puoi utilizzare la guida per sapere quali delle sezioni sono quelle che vuoi modificare e come modificarle. Tutte le impostazioni locali installate risiedono /usr/share/i18n/locales, tuttavia la guida contiene praticamente tutte le impostazioni locali mai create.

Tuttavia, la prima cosa che noterai quando apri una localizzazione è che leggerai parole inglesi tanto quanto <UXXXX>codici strani . Dovrai essere in grado di creare questi codici: è qui che encodestrarriva lo script.

Quando sai quali sezioni devi modificare, devi conoscere ogni campo contenuto nella sezione.

Ad esempio, la LC_TIMEsezione contiene il campo t_fmte molti altri. Ogni campo ha la sua descrizione sulla guida .

Ora che sai quali campi modificare, usa di nuovo la guida per scoprire quali valori accetta il campo.

Ad esempio, il campo t_fmtaccetta il testo e le variabili strfmt comuni .

Proprio quando sai cosa scrivere sui campi che vuoi modificare, esegui il testo attraverso lo encodestrscript per ottenere il suo equivalente codificato.

NOTA: non tutti i campi devono essere codificati, se necessario utilizzare una locale esistente come riferimento.

Ad esempio, se si desidera avere il formato dell'ora Time: %Tnel t_fmtcampo, eseguire ./encodestr "Time: %T"; questo tornerà <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>e quindi avrai la linea t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>nella tua locale (nella sua rispettiva sezione, ovviamente).

Dopo aver modificato tutti i campi desiderati, sarà necessario procedere con l'installazione delle impostazioni internazionali sul sistema, in modo che possa essere utilizzato. Procedere alla sezione di installazione per questo.

Creare un locale da zero

Invece di modificarne uno, l'altro metodo che puoi usare per creare la tua localizzazione personalizzata ci sta lavorando da zero. Questo non è molto difficile se, di nuovo, usi la guida . Ecco un consiglio utile però: è possibile copiare sezioni da altre impostazioni locali senza i metodi di copia e incolla reali . Devi solo seguire questo formato:

LC_SECTION
copy "locale"
END LC_SECTION

Dov'è LC_SECTIONla sezione che si desidera modificare ed localeè la locale da cui si desidera copiare quella sezione.

Ad esempio, se si desidera copiare il formato dell'ora nella locale inglese, si dovrebbe avere questo testo come file locale personalizzato:

LC_TIME
copy "en_GB"
END LC_TIME

Ciò consente di risparmiare molto lavoro e garantisce che qualsiasi modifica apportata alle impostazioni internazionali di riferimento verrà rispecchiata nel tuo.

Installazione delle impostazioni internazionali personalizzate

I passaggi che sto per mostrare di seguito potrebbero non essere ottimali, ma funzionano.

  1. Compila il tuo locale. Non fatevi prendere dal panico! Questo non richiede tempo. Basta eseguire il comando sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -vdove si customtrova il nome della propria locale.

  2. Copia le impostazioni internazionali nella /usr/share/i18n/locales/directory. Avrai sicuramente bisogno dei privilegi di sudo per farlo, e puoi farlo con il comando sudo cp locale /usr/share/i18n/locales/dove si localetrova il nome file della tua localizzazione personalizzata.

  3. Specifica la tua locale in /var/lib/locales/supported.d/. Ad esempio, crea un nome file /var/lib/locales/supported.d/asde aggiungi la riga custom UTF-8, dove personalizzato è il nome della tua locale.

  4. Esegui il comando magico. In realtà non so cosa faccia esattamente questo comando, ma è cruciale. Corri sudo locale-gen. È molto probabile che generi riferimenti ai locali disponibili dove necessario.

  5. Di 'al tuo sistema di usare la localizzazione. Se si desidera che le impostazioni internazionali vengano utilizzate a livello di sistema, modificare il /etc/environmentfile. In caso contrario, è possibile modificare il ~/.profilefile o qualsiasi altro proveniente all'avvio. Se non sai cosa significa quest'ultimo, non ti preoccupare, usa il ~/.profilefile. Per sapere cosa devi scrivere, esegui prima il localecomando. Si dovrebbe emettere una lista con oggetti come LANGUAGE, LC_MESSAGES, LC_CTYPEe molti altri. Scriverai, per ciascuna delle sezioni che desideri (elencate dal comando precedente), su righe separate, SECTION="locale"dove si SECTIONtrovano la sezione e localeil nome della tua localizzazione personalizzata.

Ad esempio, se si desidera utilizzare il formato ora dai Paesi Bassi, ma la lingua inglese, scrivere:

LANGUAGE="en_GB:en"
LC_TIME="nl_NL"

NOTA: se si desidera utilizzare una locale per ogni impostazione locale, scrivere LC_ALL="locale"dove si localetrova il nome della propria locale personalizzata. Se si desidera utilizzare un'impostazione internazionale per tutto tranne che per la lingua, è possibile scrivere LANG="locale"e (su un'altra riga, ovviamente) LANGUAGE="locale":XXdove si XXtrova il codice di 2 lettere per la lingua desiderata.

Ad esempio, se si desidera utilizzare la lingua olandese e la lingua inglese, è possibile utilizzare:

LANG="nl_NL"
LANGUAGE="nl_NL:en"

Tu hai finito

Al prossimo accesso, le impostazioni internazionali dovrebbero essere in uso. È possibile verificarlo eseguendo localenuovamente il comando.

Si prega di commentare incoerenze o dichiarazioni false in questa guida!


Ciao, il codice Python che usi non funziona in tutti i casi. Per i caratteri greci πμ, viene generato <U00CF><U0080><U00CE><U00BC>, anziché i caratteri previsti <U03C0><U03BC>. Ecco un link che funziona.
nass

Grazie per il tuo contributo! Ho incluso il tuo commento nel testo in cui era dovuto :)
Severo Raz,

Ho dovuto aggiungere custom UTF-8alla /usr/share/i18n/SUPPORTEDprima che potessi correre sudo locale-gen. Altrimenti non sarebbe nell'elenco.
Wilbert,

Ho copiato il metodo di conversione delle stringhe nella mia raccolta di script della shell: github.com/budhajeewa/shell-scripts/commit/… . Grazie!
Budhajeewa,

Se qualcuno è alla ricerca di una funzione per fare il contrario del metodo in questa risposta (ne avevo bisogno per leggere i valori esadecimali esistenti nei file delle impostazioni locali), ho scritto uno script PHP per questo. github.com/budhajeewa/shell-scripts/commit/… . Se qualcuno può scriverlo in Python, fammi sapere. Vorrei aggiungerlo alla mia collezione.
Budhajeewa,

8

Non sei sicuro del tipo di personalizzazione che desideri, ma puoi impostare alcune variabili locali usando il tuo ~/.locale. Ad esempio, per ricevere messaggi in inglese ma l'ora tedesca e cose simili che uso

export LC_ALL=""
export LANG="en_GB.utf8"
export LC_CTYPE="de_DE.utf8"
export LC_NUMERIC="de_DE.utf8"
export LC_TIME="de_DE.utf8"
export LC_COLLATE="de_DE.utf8"
export LC_MONETARY="de_DE.utf8"
export LC_MESSAGES="en_GB.utf8"
export LC_PAPER="de_DE.utf8"
export LC_NAME="en_GB.utf8"
export LC_ADDRESS="de_DE.utf8"
export LC_TELEPHONE="de_DE.utf8"
export LC_MEASUREMENT="de_DE.utf8"
export LC_IDENTIFICATION="de_DE.utf8"

È anche possibile generare localizzazioni personalizzate. Vedi ad esempio questa guida per le date.


1
No, voglio una personalizzazione di livello inferiore. Ad esempio: messaggi inglesi, unità metriche, data / ora ceche modificate (GG.MM.AAAA HH: mm anziché DMYYYY H.MM), un punto come separatore decimale (esiste una virgola per questo nelle impostazioni locali ceche) e € come valuta (esiste la valuta Kč nelle impostazioni locali ceche).
Ivan

Vedo. Prendendo en_USper LC_NUMERICe de_DEper LC_MONETARYe LC_MEASUREMENTti dà altri effetti collaterali? Vedi anche il nuovo link per generare una localizzazione personale.
Carsten Thiel,

1
le istruzioni dietro il collegamento sembrano rispondere meravigliosamente alla domanda, forse potresti replicare i bit più importanti qui, nel caso in cui il collegamento non fosse raggiungibile un giorno?
Stefano Palazzo
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.