Certificat | LPIC-1 |
Examen: | 102 (torneu a la resta de temes) |
Fitxers: | LPI107.3_LocalitzacioiInternacionalitzacio.pdf (LPI107.3_LocalitzacioiInternacionalitzacio.odp) |
Objectius: | http://www.lpi.org/eng/certification/the_lpic_program/lpic_1/exam_102_detailed_objectives |
Dipòsit SVN: | http://acacha.org/svn/lpi/Materials/Examen_102/107.3 |
Usuari: | anonymous |
Paraula de pas: | qualsevol paraula de pas |
107.3. Localització i internacionalització | |
---|---|
![]() |
|
![]() |
Àrees Clau de Coneixement:
|
![]() |
La següent és una llista parcial de fitxers, termes i utilitats utilitzades: |
![]() |
Apunts: LPI 107.3. Localització i internacionalització |
La internacionalització és el procés de dissenyar programari de forma que pugi adaptar-se fàcilment a diferents idiomes i regions del món sense necessitat de realitzar canvis en el codi. Com que és una paraula molt llarga s'utilitza l'abreviació i18n on 18 són el número de lletres que hi ha entre la i i la n a la paraula internacionalització.
En canvi la localització és el procés d'adaptar una aplicació (o tot un sistema operatiu) a una regió específica i a un idioma específic. Com que és una paraula molt llarga s'utilitza l'abreviació l10n on 10 són el número de lletres que hi ha entre l l i la n a la paraula localització. A la localització també de l'anomena regionalització.
NOTA: Podem dir que la localització és el procés que realitzen els usuaris per escollir en quin idioma i regió volen treballar i en canvi la internacionalització és el procés que segueixen els desenvolupadors per tal que precisament els usuaris puguin localitzar una aplicació de forma fàcil. Aquest objectiu de LPI es centra en la localització (no cal saber dissenyar aplicacions i18n)
Algunes empreses, como Microsoft o IBM, utilitzen el terme globalització (g11n) per referir-se a la combinació d'internacionalització i localització.
És molt important diferenciar una simple traducció d'una localització. La localització va molt més enllà que la simple traducció de l'aplicació, també té en compte aspectes com:
A mode d'exemple, podeu veure la següent imatge que mostra un mapa de com es formaten les dates a tot el món:
Recursos:
El format d'un locale [1] és el següent:
language(_territory)(.encoding)(@modifier)
Per exemple podria ser:
$ locale [email protected]
L'única part obligatòria és el codi d'idioma (ISO-639 de 2 lletres) (p.ex anglès). El mateix idioma es pot utilitzar de forma diferent en territoris diferents per aquesta raó es pot especificar el territori també (per exemple fr_FR és el francès a França en canvi fr_CA és el francès a Canada). També es pot especificar el codi de caràcters. Els codis de país són de l'estàndard de dos lletres ISO-3166-1.
El modifier es pot utilitzar per a indicar variants com l'Euro (p. ex. [email protected]) o dialectes.
Hi ha locales especials que no segueixen aquest format:
El POSIX locale és útil per a scripts o no volem que s'apliquin traduccions a les ordres que executem o per que ordres com sort o grep funcionin "correctament". Per exemple, imagineu-vos que volem mostrar les particions swap amb fdisk. L'ordre:
$ sudo fdisk -l | grep swap
No funcionarà si el nostre locale és :
LANG=ca_ES.UTF-8
En canvi:
$ LANG=POSIX; sudo fdisk -l | grep swap /dev/sda5 29165 30401 9936171 82 Linux swap / Solaris
o
$ LANG=C; sudo fdisk -l | grep swap /dev/sda5 29165 30401 9936171 82 Linux swap / Solaris
Funcionen correctament.
A més cal recordar que els locales no defineixen només l'idioma a utilitzar, per aquesta raó en sistemes GNU/Linux es defineixen múltiples variables d'entorn que permeten concretar tots els aspectes referents a la localització del sistema. Les variables són:
NOTA: Observeu que podeu per exemple definir que el vostre idioma és català, però en canvi utilitzar un sistema numèric anglès, ja que podeu definir les variables d'entorn de forma que siguin independents entre elles.
Els següent protocol estableix com es decideix quin és el locale a escollir (segons $ man 7 locale):
Recursos: Codis de llengua:
Codis de país:
Codis de caràcters:
Una Ubuntu 9.10 configurada correctament en català tindria la següent configuració de localització:
$ locale LANG=ca_ES.UTF-8 LC_CTYPE="ca_ES.UTF-8" LC_NUMERIC="ca_ES.UTF-8" LC_TIME="ca_ES.UTF-8" LC_COLLATE="ca_ES.UTF-8" LC_MONETARY="ca_ES.UTF-8" LC_MESSAGES="ca_ES.UTF-8" LC_PAPER="ca_ES.UTF-8" LC_NAME="ca_ES.UTF-8" LC_ADDRESS="ca_ES.UTF-8" LC_TELEPHONE="ca_ES.UTF-8" LC_MEASUREMENT="ca_ES.UTF-8" LC_IDENTIFICATION="ca_ES.UTF-8" LC_ALL=
Els locals es guarden als fitxers de la carpeta:
/usr/share/i18n/locales
Per exemple el fitxer de locales del català és un fitxer ASCII:
$ file /usr/share/i18n/locales/ca_ES ca_ES: ASCII text
A on s'indiquen tots els detalls de l'idioma (com s'ordena, quin és el caràcter monetari, etc...). El format del fitxes es descriu a:
$ man 5 locale
Ara bé, com ja sabeu els formats de text sempre són més lents que els formats binaris i es necessari generar uns fitxers binaris a partir dels fitxers de text que seran els que utilitzarà el sistema per consultar les dades de localització d'una forma més ràpida.
L'ordre localedef permet definir "compilar" els fitxers de text:
$ localedef -i zu_ZA -f ../charmaps/UTF-8 zu_ZA
Tot i que ara es més habitual utilitzar locale-gen.
En sistemes Debian però el més habitual és recompilar amb:
$ sudo dpkg-reconfigure locales [sudo] password for sergi: Generating locales... ca_AD.UTF-8... done ca_ES.UTF-8... done [email protected] done ca_FR.UTF-8... done ca_IT.UTF-8... done en_AG.UTF-8... up-to-date en_AU.UTF-8... up-to-date en_BW.UTF-8... up-to-date en_CA.UTF-8... up-to-date en_DK.UTF-8... up-to-date en_GB.UTF-8... up-to-date en_HK.UTF-8... up-to-date en_IE.UTF-8... up-to-date en_IN.UTF-8... up-to-date en_NG.UTF-8... up-to-date en_NZ.UTF-8... up-to-date en_PH.UTF-8... up-to-date en_SG.UTF-8... up-to-date en_US.UTF-8... up-to-date en_ZA.UTF-8... up-to-date en_ZW.UTF-8... up-to-date Generation complete.
NOTA: Obsolet, només per a Dapper
Es poden configurar amb el paquet localeconf:
$ sudo aptitude install localeconf $ sudo dpkg-reconfigure localeconf
Des de la línia d'ordres es pot fer amb:
$ sudo apt-get install language-pack-ca language-support-ca
Que instal·la el suport bàsic per a un idioma concret.
O des de l'entorn gràfic a Gnome es fa a Sistema > Administració > Suport d'idioma
La majoria d'aplicacions multi llengua tenen un paquet apart per cada idioma que suporten. Per exemple OpenOffice suporta els següents idiomes:
$ sudo apt-get install openoffice.org2-l10n- TABULEU DOS COPS! openoffice.org2-l10n-af openoffice.org2-l10n-el openoffice.org2-l10n-hi-in openoffice.org2-l10n-ml-in openoffice.org2-l10n-ro openoffice.org2-l10n-ti-er openoffice.org2-l10n-ar openoffice.org2-l10n-en-gb openoffice.org2-l10n-hr openoffice.org2-l10n-mn openoffice.org2-l10n-ru openoffice.org2-l10n-tn openoffice.org2-l10n-as-in openoffice.org2-l10n-en-za openoffice.org2-l10n-hu openoffice.org2-l10n-mr-in openoffice.org2-l10n-rw openoffice.org2-l10n-tr openoffice.org2-l10n-be-by openoffice.org2-l10n-eo openoffice.org2-l10n-it openoffice.org2-l10n-nb openoffice.org2-l10n-sk openoffice.org2-l10n-ts openoffice.org2-l10n-bg openoffice.org2-l10n-es openoffice.org2-l10n-ja openoffice.org2-l10n-ne openoffice.org2-l10n-sl openoffice.org2-l10n-uk openoffice.org2-l10n-bn openoffice.org2-l10n-et openoffice.org2-l10n-ka openoffice.org2-l10n-nl openoffice.org2-l10n-sr openoffice.org2-l10n-ur-in openoffice.org2-l10n-br openoffice.org2-l10n-eu openoffice.org2-l10n-km openoffice.org2-l10n-nn openoffice.org2-l10n-ss openoffice.org2-l10n-uz openoffice.org2-l10n-bs openoffice.org2-l10n-fa openoffice.org2-l10n-kn openoffice.org2-l10n-nr openoffice.org2-l10n-st openoffice.org2-l10n-ve openoffice.org2-l10n-ca openoffice.org2-l10n-fi openoffice.org2-l10n-ko openoffice.org2-l10n-ns openoffice.org2-l10n-sv openoffice.org2-l10n-vi openoffice.org2-l10n-cs openoffice.org2-l10n-fr openoffice.org2-l10n-ku openoffice.org2-l10n-or-in openoffice.org2-l10n-sw openoffice.org2-l10n-xh openoffice.org2-l10n-cy openoffice.org2-l10n-ga openoffice.org2-l10n-lo openoffice.org2-l10n-pa-in openoffice.org2-l10n-ta-in openoffice.org2-l10n-zh-cn openoffice.org2-l10n-da openoffice.org2-l10n-gl openoffice.org2-l10n-lt openoffice.org2-l10n-pl openoffice.org2-l10n-te-in openoffice.org2-l10n-zh-tw openoffice.org2-l10n-de openoffice.org2-l10n-gu-in openoffice.org2-l10n-lv openoffice.org2-l10n-pt openoffice.org2-l10n-tg openoffice.org2-l10n-zu openoffice.org2-l10n-dz openoffice.org2-l10n-he openoffice.org2-l10n-mk openoffice.org2-l10n-pt-br openoffice.org2-l10n-th
La configuració del teclat es fa de diferents formes segons la distribució. Consulteu:
http://www.howtoforge.com/changing-language-and-keyboard-layout-on-various-linux-distributions
Per a Ubuntu depèn de la versió. Vegeu:
Primer cal assegurar-se que el locale està a la llista de locales suportats:
$ sudo joe /var/lib/locales/supported.d/local
Per exemple:
en_GB ISO-8859-1
I tornar a generar els supported locales:
$ sudo dpkg-reconfigure locales
Abans es posava al /etc/environment
$ cat /etc/environment LANG="en_GB"
Ara es recomana posar-lo a /etc/default/locale. Per exemple en català a una Ubuntu 9.10:
$ cat /etc/default/locale LANG="ca_ES.UTF-8"
ASCII (de l'anglès American Standard Code for Information Interchange) és un Codi Estàndard Americà per a l'Intercanvi d'Informació.
L'ASCII és un joc de caràcters que assigna valors numèrics (del 0 al 127, 7 bits de longitud) a les lletres, xifres i signes de puntuació.
El codi ASCII utilitza 7 bits per representar els caràcters, encara que inicialment emprava un bit addicional (bit de paritat) que s'usava per detectar errors en la transmissió. Sovint es diu incorrectament ASCII a uns altres codis de caràcters de 8 bits, com l'estàndard ISO-8859-1 que és una extensió que utilitza 8 bits per proporcionar caràcters addicionals usats en idiomes diferents a l'anglès, com l'espanyol. Aquests codis de caràcters s'han anomenat codis de caràcters extensos o fins i tot ASCII-extens però no es van arribar a estandarditzar mai.
Els caràcters de la part superior (127 a 255), varien d'un estàndard a un altre, encara que el més utilitzat és el ISO Latin-1 o ISO-8859-1. Aquestes varacions sovint se'ls anomenada codis de pàgina (code pages) (sobretot Microsoft utilitzava aquest terme).
ASCII va ser publicat com a estàndard per primera vegada en 1967 i va ser actualitzat per última vegada en 1986. En l'actualitat defineix codis per 33 caràcters no imprimibles, dels quals la majoria són caràcters de control obsolets que tenen efecte sobre com es processa el text, més altres 95 caràcters imprimibles que els segueixen en la numeració (començant pel caràcter espai).
Gairebé tots els sistemes informàtics actuals utilitzen el codi ASCII o una extensió compatible per representar textos i per al control de dispositius que manegen text.
Hi ha dos tipus de caràcters:
Si instal·leu:
$ sudo apt-get install ascii
Podreu consultar la taula ascii amb:
$ ascii
Vegeu ascii.
Consulteu també:
$ man ascii
Recursos:
Consulteu ASCII art
ISO 8859-1 o ISO Latin 1 és una norma de la ISO que defineix la codificació de l'alfabet llatí incloent diacrítics (com lletres amb accents, la ñ o la ç) i lletres especials com ß i Ø. Dona suport a les següents llengües de l'Europa occidental:
afrikáans, alemán, aragonés, asturiano, catalán, danés, escocés, español, feroés, finés, francés, gaélico, gallego, inglés, islandés, italiano, neerlandés, noruego, portugués, sueco i Euskera.
Pertany al grup de jocs de caràcters de l'ISO coneguts com ISO/IEC 8859 que es caracteritzen per seu extended ASCII (els 128 primers caràcters són ASCII i la resta (128 caràcters) depenen de la codificació. Són sistemes de caràcters de 8 bits.
Els caràcters ISO-8859-1 són a més els primers 256 caràcters de l'estàndard ISO 10646 (Unicode).
La norma ISO 8859-15 consisteix en una revisió de la ISO 8859-1, incorporant el símbol de l'Euro i alguns caràcters necessaris per a donar suport complet al francès, finés i estonià.
Consulteu també:
$ man iso_8859_1
Recursos:
Unicode és un estàndard internacional de codificació de caràcters en suports informàtics. El seu objectiu és proporcionar el mitjà per a permetre emmagatzemar qualsevol text que es desitgi. Això inclou qualsevol mena de forma d'escriptura que es faci servir actualment, moltes formes d'escriptura conegudes només pels estudiosos i altra mena de símbols com ara els símbols matemàtics, lingüístics i APL.
Unicode és un projecte que pretén reemplaçar tota mena de conjunt de caràcters existent. Avui en dia, Unicode es considera el conjunt de caràcters més complet i ha esdevingut l'opció a triar en la internacionalització de programari en entorns multilingües. Molts estàndars recents i programari bàsic han adoptat Unicode per a representar text.
El nom d'Unicode ve dels tres objectius perseguits: UNIversalitat, UNIformitat i UNICITAT.
L'estàndard és mantingut per l'Unicode Technical Committee (UTC), integrat al Unicode Consortium, del que formen art múltiples empreses i institucions relacionades amb la informàtica i treballen de forma conjunta amb la ISO/IEC per desenvolupar estandards compatibles.
Unicode va ser un projecte pensat per a substituir el desgavell de codis anteriors (des de l'ASCII als ISO-8859 i altres codis internacionals) els quals estaven molt limitats en suport multilingüe, és a dir, cada regió tenia un estàndard ISO-8859 (a Catalunya el ISO-8859-1) però no existia un codi que permetes tenir textos amb codificacions mixtes.
La majoria de sistemes operatius moderns, incloent Linux l'implementen així com altres tecnologies com Java o XML].
Los punts de codi unicode tenen un identificador únic (número entre). Segons l'arquitectura un ordinador pot utilitzar 8, 16 o 32 bits per a representar aquests enters (l'arquitectura de representació de caràcters no té per que coincidir amb l'arquitectura de la CPU). Les formes de codificació de Unicode reglamenten la forma en que es transformaran les unitats tractades per l'ordinadors. Hi ha 2 possibles formes definides per unicode sota el nom Unicode Transformation Format UTF:
Les formes de codificació descriuen el mode en que l'ordinador representa el símbol i cal definir Esquemes de codificació que indiquen com es serialitza la informació codificada de forma segura, és a dir que sistemes heterogenis (per exemple un emissor en UTF-8 i un receptor amb UTF-8 o segons com s'ordenin els bytes endianess ) puguin intercanviar informació de forma correcta. Els esquemes són /:
Als repositoris de sistemes Debian teniu disponible l'ordre unicode:
Caràcter compost:
$ unicode ç U+00E7 LATIN SMALL LETTER C WITH CEDILLA UTF-8: c3 a7 UTF-16BE: 00e7 Decimal: ç ç (Ç) Uppercase: U+00C7 Category: Ll (Letter, Lowercase) Bidi: L (Left-to-Right) Decomposition: 0063 0327
$ sudo apt-get install unicode $ unicode ½ U+00BD VULGAR FRACTION ONE HALF UTF-8: c2 bd UTF-16BE: 00bd Decimal: ½ ½ Category: No (Number, Other) Numeric value: 1/2 Bidi: ON (Other Neutrals) Decomposition: <fraction> 0031 2044 0032
Consulteu també:
$ man utf8
UTF-8 (8-bit Unicode Transformation Format) és un format de codificació de caràcters unicode i ISO 10646 que utilitza símbols de longitud variable. Va ser creat per Robert C. Pike i Kenneth L. Thompson (aquest últim també va participar en la creació de C i de Unix)
És un tels tres possibles formats per representar Unicode. Característiques:
Aquestes característiques el fan ideal per a codificació de correus electrònics i pàgines web. El IETF recomana que tos els protocols d'Internet indiquin quina codificació utilitzen i que una de les contemplades sigui UTF-8.
Fixeu-vos en el cas de la lletra a minúscula:
$ ascii a ASCII 6/1 is decimal 097, hex 61, octal 141, bits 01100001: prints as `a' Official name: Miniscule a Other names: Small a, Lowercase a
$ unicode a U+0061 LATIN SMALL LETTER A UTF-8: 61 UTF-16BE: 0061 Decimal: a a (A) Uppercase: U+0041 Category: Ll (Letter, Lowercase) Bidi: L (Left-to-Right)
Els símbols ASCII solen ser de mida un 1 byte.
en canvi la "à" amb accent no té codificació ASCII:
$ unicode à U+00E0 LATIN SMALL LETTER A WITH GRAVE UTF-8: c3 a0 UTF-16BE: 00e0 Decimal: à à (À) Uppercase: U+00C0 Category: Ll (Letter, Lowercase) Bidi: L (Left-to-Right) Decomposition: 0061 0300
Però observeu que la unicode és 224 en decimal, és a dir està entre els 256 primers caràcters i és compatible amb ISO-8859-1 i es representa com un símbol de 2 bytes (és un símbol complex)
Són el mateix número enter (97 en decimal, 61 en hexadecimal)
Podeu inserir qualsevol símbol unicode prement Ctrl+Shift+u i soltem, apareix un u subratllada, ara escriviu el codi hexadecimal del caràcter.
Si no sabeu el codi hexadecimal el podeu consultar amb l'ordre charmap:
$ charmap
O fixant-vos en el text en negreta de l'ordre unicode:
$ unicode à U+00E0 LATIN SMALL LETTER A WITH GRAVE ...
El màxim en hexadecimal per tal de representar 8 bits és 2, però podeu fer:
Ctrl+Shift+U + 10380
U+10380 --> 𐎀
UTF-8 representa els code points utilitzant només 1 byte. El truc és utilitzar una codificació de longitud variable, entre 1 y 4 bytes (1 i 8 caràcters hexàdecimals) per tal de codificar els code points:
Vegeu també Unicode. De qualsevol caràcter podeu obtenir informació a la wikipedia amb:
$ unicode -w U+10380
Abans de continuar cal tenir clars els següents conceptes:
Normalment cada ordinador té dos rellotges, el de màquinari i un altre de programari que gestiona el sistema operatiu. El rellotge de maquinari normalment només s'utilitza per establir l'hora del rellotge del sistema operatiu durant l'arrencada del sistema i per guardar l'hora quan aturem o tornem a iniciar.
Bàsicament per tal de poder ajustar correctament l'hora, el que és necessita és tenir una base de dades amb tota la informació relacionada amb les zones horàries, DSTs i d'altres, i un cop es té aquesta base de dades, només cal executar un assistent que l'única pregunta que ens farà serà a quina zona horària pertanyem.
NOTA: Els canvis d'horari els durà a terme el propi sistema de forma automàtica
En sistemes GNU/Linux de la família Debian, el paquet que conté la base de dades i que permet escollir la zona horària és tzdata (Time Zone data). Normalment ja el tindreu instal·lar, però en alguns sistemes (potser un sistema muntat amb Debootstrap) haureu d'executar:
$ sudo apt-get install tzdata
Els fitxers proporcionats pel paquet són:
Binaris:
$ dpkg -L tzdata | grep bin /usr/sbin /usr/sbin/tzconfig ...
Fitxers de configuració:
No hi han proporcionats per la instal·lació:
$ dpkg -L tzdata | grep etc
Però un cop escollit el fus horari local (local time) es guarda al fitxer /etc/localtime en format binari:
$ file /etc/localtime /etc/localtime: timezone data, version 2, 8 gmt time flags, 8 std time flags, no leap seconds, 163 transition times, 8 abbreviation chars
També hi ha un enllaç simbòlic a:
$ file /usr/share/zoneinfo/localtime
/usr/share/zoneinfo/localtime: symbolic link to `/etc/localtime'
Base de dades de fusos horaris:
La trobareu a la carpeta:
/usr/share/zoneinfo
Segons la documentació del paquet ( fitxer /usr/share/doc/tzdata/README.Debian) hi han dos formes d'utilitzar tzdata:
La majoria de sistemes utilitzen UTC, però el fet que s'utilitzi un sistema o l'altre depèn de si establim les variable d'entorn TZ i TZDIR:
TZDIR=/usr/share/zoneinfo/posix TZ=Europe/Paris
Que seria un sistema UTC establer a la zona horaria de París.
Per defecte si no establim les variables d'entorn s'utilitza UTC i la configuració horària especificada a /etc/localtime (fitxer binari)
Recursos:
Consulteu tzselect i les variables d'entorn TZ i TZDIR.
Cal reconfigurar el paquet tzdata:
$ sudo dpkg-reconfigure tzdata
Current default time zone: 'Europe/Madrid' Local time is now: Fri Apr 16 06:43:21 CEST 2010. Universal Time is now: Fri Apr 16 04:43:21 UTC 2010.
NOTA: En altres sistemes operatius o en sistemes legacy s'utilitza un enllaç simbòlic a la zona horària[2]
ln -sf ../usr/share/zoneinfo/your/zone /etc/localtime
Ja no s'utilitza, cal utilitzar dpkg-reconfigure:
$ sudo /usr/sbin/tzconfig WARNING: the tzconfig command is deprecated, please use: dpkg-reconfigure tzdata
La data del sistema és pot establir de diverses maneres:
NOTA: Entenem que quan parlem d'establir l'hora i data del sistema parlem d'establir la data i hora del sistema operatiu i no pas l'hora del rellotge de maquinari
IMPORTANT: En tot cas és clau per al correcte funcionament del procés que abans escollim correctament la nostra zona horària (fus horari). Cal tenir clar que odres com NTP el que fa és establir l'hora UTC i a partir d'aquí l'hora local s'estableix segons la configuració de la xona horària local
El suport per a localització esta inclòs a la llibreria estàndard de C que proporciona ordres com la pròpia ordre locale tal i com demostren les següents comandes:
$ which locale /usr/bin/locale $ dpkg -S /usr/bin/locale libc6: /usr/bin/locale
NOTA: En versions més noves de Debian o derivats com p. ex. Ubuntu 9.10 el paquet és:
$ dpkg -S /usr/bin/locale libc-bin: /usr/bin/locale
La configuració de locale forma part de la llibreria estàndard de C.
Instal·la els fitxers necessaris per a locales:
$ dpkg -L locales | more $ dpkg -l | grep locales ii locales 2.9+cvs20090214-7 common files for locale support
Els locales es guarden a la carpeta:
/usr/share/i18n
L'única ordre que proporciona és:
/usr/sbin/locale-gen
Tornant a configurar aquest paquet es torna a configurar la zona horària. Consulteu Com canviar la zona horària i Configuració horària.
Mostra la configuració de la localització:
$ locale LANG=ca_ES.UTF-8 LC_CTYPE="ca_ES.UTF-8" LC_NUMERIC="ca_ES.UTF-8" LC_TIME="ca_ES.UTF-8" LC_COLLATE="ca_ES.UTF-8" LC_MONETARY="ca_ES.UTF-8" LC_MESSAGES="ca_ES.UTF-8" LC_PAPER="ca_ES.UTF-8" LC_NAME="ca_ES.UTF-8" LC_ADDRESS="ca_ES.UTF-8" LC_TELEPHONE="ca_ES.UTF-8" LC_MEASUREMENT="ca_ES.UTF-8" LC_IDENTIFICATION="ca_ES.UTF-8" LC_ALL=
És a dir mostra les variables d'entorn que configuren la localització del sistema que estem utilizant.
NOTA: De fet locate ens mostra la configuració de localització de la bash que estem executant. La configuració d'una bash concreta pot ser diferent de la del sistema o pot haver-hi diferències entre usuaris.
L'ordre es proporciona per libc:
$ which locale libc-bin: /usr/bin/locale
Segons el manual:
$ man locale
Les variables d'entorn tenen el següent significat:
També es pot utilitzar per consultar els locales disponibles al sistema:
$ locale -a C ca_AD.utf8 ca_ES.utf8 [email protected] ca_FR.utf8 ca_IT.utf8 en_AG en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IN en_NG en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZW.utf8 POSIX
O per mostrar tota la llista de codis de caràcters disponibles:
$ locale -m
$ cat /usr/share/i18n/SUPPORTED
Consulteu LPI_107.3._Localització_i_internacionalització#Locales_en_Unix
L'ordre es proporcionada per la llibreria estàndard de C
$ which localedef /usr/bin/localedef $ dpkg -S /usr/bin/localedef libc6: /usr/bin/localedef
$ sudo apt-get install localepurge
es pot tornar a executar en qualsevol moment amb:
$ dpkg-reconfigure localepurge
Permet afegir un locale
$ sudo locale-gen fr_FR.UTF-8 Generating locales... fr_FR.UTF-8... done Generation complete.
Consulteu iconv
Consulteu recode
consulteu tofrodos
Consulteu enca
Consulteu file
Consulteu geany.
Segons el manual:
$ man tzselect
Serveix per consultar zones horàries i el temps corresponent a altres zones horàries:
$ tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent or ocean. 1) Africa 2) Americas 3) Antarctica 4) Arctic Ocean 5) Asia 6) Atlantic Ocean 7) Australia 8) Europe 9) Indian Ocean 10) Pacific Ocean 11) none - I want to specify the time zone using the Posix TZ format. #? 10 Please select a country. 1) Chile 15) Northern Mariana Islands 2) Cook Islands 16) Palau 3) Ecuador 17) Papua New Guinea 4) Fiji 18) Pitcairn 5) French Polynesia 19) Samoa (American) 6) Guam 20) Samoa (western) 7) Kiribati 21) Solomon Islands 8) Marshall Islands 22) Tokelau 9) Micronesia 23) Tonga 10) Nauru 24) Tuvalu 11) New Caledonia 25) United States 12) New Zealand 26) US minor outlying islands 13) Niue 27) Vanuatu 14) Norfolk Island 28) Wallis & Futuna #? 12 Please select one of the following time zone regions. 1) most locations 2) Chatham Islands #? 1 The following information has been given: New Zealand most locations Therefore TZ='Pacific/Auckland' will be used. Local time is now: Sat Apr 17 18:25:02 NZST 2010. Universal Time is now: Sat Apr 17 06:25:02 UTC 2010. Is the above information OK? 1) Yes 2) No #? 1 You can make this change permanent for yourself by appending the line TZ='Pacific/Auckland'; export TZ to the file '.profile' in your home directory; then log out and log in again. Here is that TZ value again, this time on standard output so that you can use the /usr/bin/tzselect command in shell scripts: Pacific/Auckland
Observeu que al final us indica com podeu configurar els fitxer de configuració de bash (p. ex ~/.profile) per fer els canvis permanents amb la variable d'entorn TZ.
Observeu que no es fa cap canvi al sistema, tal i com indica el manual:
Note that tzselect will not actually change the timezone for you. Use 'dpkg-reconfigure tzdata' to achieve this.
I podeu comprovar-ho amb:
$ date ds abr 17 08:25:58 CEST 2010 $ echo $TZ
En canvi si executeu:
$ TZ='Pacific/Auckland'; export TZ $ date ds abr 17 18:28:14 NZST 2010
L'ordre forma part de les ordres binaries de la llibreria estàndard de C (libc):
$ dpkg -S tzselect libc-bin: /usr/share/man/man1/tzselect.1.gz manpages: /usr/share/man/man8/tzselect.8.gz libc-bin: /usr/bin/tzselect
Consulteu hwclock
Consulteu date
Consulteu epoch
Els locales poden tenir alias, que són noms alternatius o simplement noms curs dels locales complerts. Per exemple el català
$ cat /etc/locale.alias | grep catalan catalan ca_ES.ISO-8859-1
Consulteu LPI_107.3._Localització_i_internacionalització#Locales_en_Unix
Consulteu LPI_107.3._Localització_i_internacionalització#Locales_en_Unix
Es podria establir els locales de sistema a aquest fitxers igual que es fa amb la variable PATH. A una Ubuntu 9.10 no s'utilitza, el locale s'escull al entrar en una sessió gràfica
Consulteu /etc/environment.
Per exemple, a una Ubuntu 9.10 per a Espanya, el contingut del fitxer és:
$ cat /etc/timezone Europe/Madrid
Aquest fitxer no l'instal·la directament cap paquet sinó que es genera durant la configuració de l'hora i no s'acostuma a modificar directament. Consulteu Configuració de l'hora.
Es tracta d'un fitxer en format binari on es guarda l'hora local:
$ file /etc/localtime /etc/localtime: timezone data, version 2, 8 gmt time flags, 8 std time flags, no leap seconds, 163 transition times, 8 abbreviation chars
Aquest fitxer no l'instal·la directament cap paquet sinó que es genera durant la configuració de l'hora. Vegeu Com canviar l'hora local
En aquest fitxer trobeu la base de dades de zones horàries:
$ ls /usr/share/zoneinfo/ Africa Atlantic Chile Eire Factory GMT-0 Iceland Jamaica MET Navajo Portugal right Turkey WET America Australia CST6CDT EST GB GMT+0 Indian Japan Mexico NZ posix ROC UCT W-SU Antarctica Brazil Cuba EST5EDT GB-Eire Greenwich Iran Kwajalein Mideast NZ-CHAT posixrules ROK Universal zone.tab Arctic Canada EET Etc GMT Hongkong iso3166.tab Libya MST Pacific PRC Singapore US Zulu Asia CET Egypt Europe GMT0 HST Israel localtime MST7MDT Poland PST8PDT SystemV UTC
Consulteu Configuració horària
Entre d'altres coses, estableix si l'hora del sistema és UTC o no. Consulteu LPI_107.3._Localització_i_internacionalització#Conflictes_de_temps_amb_sistemes_duals_Windows.2FLinux
Documentació del paquet Debian tzdata. Consulteu Configuració horària
$ cat /usr/share/doc/tzdata/README.Debian
README for tzdata ----------------- This package contains data required for the implementation of standard local time for many representative locations around the globe. Two different versions are provided: - The "posix" version is based on the Coordinated Universal Time (UTC). - The "right" version is based on the International Atomic Time (TAI), and it includes the leap seconds. Most systems have their hardware clock set either to UTC, or to a timezone with a fixed difference with UTC. Therefore the default version provided by this package is the "posix" one. The TZDIR environment variable, when used together with the TZ one, forces the system to use one of the two versions. Examples: - TZDIR=/usr/share/zoneinfo/posix TZ=Europe/Paris on a system with hardware clock set to UTC. - TZDIR=/usr/share/zoneinfo/right TZ=Europe/Paris on a system with hardware clock set to TAI. -- Aurelien Jarno <[email protected]> Sat, 06 Sep 2008 12:27:09 +0200
Vegeu també Variables d'entorn
Permet definir una zona de temps diferent per a una bash concreta.
$ TZ='Pacific/Auckland'; export TZ $ date ds abr 17 18:28:14 NZST 2010 $ man tzselect
NOTA: Si no s'indica res s'utilitzen els valors per defecte del sistema, segons /etc/localtime
Vegeu també tzselect.
Els sistemes operatius emmagatzemen i obtenen l'hora del rellotge de maquinari (hardware clock) que normalment es troba a la placa mare de forma que fins i tot es pot mantenir l'hora quan el sistema no té energia elèctrica (el rellotge utilitza la pila de la placa mare).
La majoria de sistemes operatius (Linux/Unix/Mac) emmagatzemen el temps al rellotge de maquinari en UTC per defecte, en canvi altres sistemes operatius com Windows emmagatzema l'hora com a hora local (local time). Això causa problemes en sistemes duals.
L'avantatge d'utilitzar UTC és que aleshores no és necessari canviar l'hora del rellotge quan un es mou entre diferents zones horàries, o durant els canvis d'hora ( Daylight Savings Time o DST). L'hora universal és sempre la mateixa per totes les zones amb independència de l'època de l'any.
Per solucionar el problema hi ha dos opcions:
Fer que Linux utilitzi l'hora local és més estable i fiable que fer que Windows utilitzi UTC, per aquesta raó en sistemes duals (ho pregunta durant la instal.lació), Ubuntu des de la versió 8.10 utilitza per defecte l'hora local (posant UTC=no al fitxer /etc/default/rcS)
NOTA: En sistemes que no siguin de la família Debian, es possible que la modificació l'hàgiu de fer a /etc/sysconfig/clock
De totes maneres com a referència si voleu que Windows utilitzi UTC (tingueu en compte que no funciona per a Vista i versions posteriors) cal canviar el registre:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation] "RealTimeIsUniversal"=dword:00000001
http://acacha.org/mediawiki/index.php/Idiomes._Internacionalitzaci%C3%B3.Locales
$ sudo dpkg-reconfigure locales
Si sovint teniu errors similars a:
perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset) , LANG = "ca_ES.UTF-8" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory
La solució és:
$ sudo -i $ export LC_CTYPE=C $ export LC_MESSAGES=C $ export LC_ALL=C $ dpkg-reconfigure locales
També sovint el problema està relacionat amb no tenir els idiomes instal·lats. Per exemple per a català:
$ sudo apt-get install language-pack-ca language-support-ca
$ sudo apt-get install console-data
Consulteu gettext.
El manual de la secció 7 (convencions) us mostra informació sobre quines funcions de la llibreria estàndard de C utilitzen els locales:
$ man 7 locale LOCALE(7) Linux Programmer's Manual LOCALE(7) NAME locale - Description of multi-language support SYNOPSIS #include <locale.h> DESCRIPTION A locale is a set of language and cultural rules. These cover aspects such as language for messages, different character sets, lexicographic conventions, etc. A program needs to be able to determine its locale and act accordingly to be portable to different cultures. The header <locale.h> declares data types, functions and macros which are useful in this task. The functions it declares are setlocale(3) to set the current locale, and localeconv(3) to get information about number formatting. There are different categories for local information a program might need; they are declared as macros. Using them as the first argument to the setlocale(3) func‐ tion, it is possible to set one of these to the desired locale: LC_COLLATE This is used to change the behavior of the functions strcoll(3) and strxfrm(3), which are used to compare strings in the local alphabet. For example, the German sharp s is sorted as "ss". LC_CTYPE This changes the behavior of the character handling and classification functions, such as isupper(3) and toupper(3), and the multi-byte character functions such as mblen(3) or wctomb(3). LC_MONETARY changes the information returned by localeconv(3) which describes the way numbers are usually printed, with details such as decimal point versus decimal comma. This information is internally used by the function strfmon(3). LC_MESSAGES changes the language messages are displayed in and what an affirmative or negative answer looks like. The GNU C-library contains the gettext(3), ngettext(3), and rpmatch(3) functions to ease the use of these information. The GNU gettext family of functions also obey the environment variable LANGUAGE (containing a colon-separated list of locales) if the category is set to a valid locale other than "C". LC_NUMERIC changes the information used by the printf(3) and scanf(3) family of functions, when they are advised to use the locale-settings. This information can also be read with the localeconv(3) function. LC_TIME changes the behavior of the strftime(3) function to display the current time in a locally acceptable form; for example, most of Europe uses a 24-hour clock versus the 12-hour clock used in the United States. LC_ALL All of the above. If the second argument to setlocale(3) is empty string, "", for the default locale, it is determined using the following steps: 1. If there is a non-null environment variable LC_ALL, the value of LC_ALL is used. 2. If an environment variable with the same name as one of the categories above exists and is non-null, its value is used for that category. 3. If there is a non-null environment variable LANG, the value of LANG is used.