IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

Linux Professional Institute Certificate. LPIC-1

Lpic1 large.gif
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: https://svn.projectes.lafarga.cat/svn/lpi/Materials/Examen_102/107.3
Usuari: anonymous
Paraula de pas: qualsevol paraula de pas

Objectius del tema

107.3. Localització i internacionalització
Objective.jpg
  • Objectiu: Els candidats han de ser capaços de regionalitzar un sistema en un idioma diferent a l'anglès. A més, cal saber perquè LANG=C és important quan es creen guions de bash.
  • Pes: 3
060317 Icon - Theory of Knowledge v01 pdc.jpg

Àrees Clau de Coneixement:

  • Configuració de locale
  • Configuració de la zona horària.
Icon list.jpg

La següent és una llista parcial de fitxers, termes i utilitats utilitzades:

Text-editor.svg

Apunts: LPI 107.3. Localització i internacionalització

Localització i internacionalització

  • Internacionalització: 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.

-Abreviatura: i18n on 18 són el número de lletres que hi ha entre la i i la n

  • Localització: procés d'adaptar una aplicació (o tot un sistema operatiu) a una regió específica i a un idioma específic.

-Abreviatura: i18n on 18 són el número de lletres que hi ha entre la i i la n

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).

  • Globalització (g11n)

Combinació d'internacionalització i localització. Localitzar i internacionalitzar no només és traduir, va força més enllà.

-Té compte aspectes com:

-Cada regió pot tenir diversos idiomes disponibles (i fins i tot dialectes).

-Diferents convencions culturals.

-Diferents zones horàries.

-Diferents format de les dates i hores.

-Diferent sformat de moneda.

-Diferents sistemes de pes i mesures.

-Diferents codificacions de caràcters (vegeu unicode).

-Diferents formats de números (el separador de decimals.


Datesmon JordiPujol.png

3.1 Locales

Format d'un locale:

language(_territory)(.encoding)(@modifier) [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).

-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:

  • POSIX locale o C locale: Configura un entorn Unix tradicional amb codificació ASCII, temps, dates, números, monedes i tota la resta en americà. Sistema existent abans de tenir locales.
  • 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:
$ LANG=ca_ES.UTF-8; sudo fdisk -l | grep swap
No funciona!
$ LANG=POSIX; sudo fdisk -l | grep swap
Correcte!

Els locales no defineixen només l'idioma a utilitzar En sistemes GNU/Linux es defineixen múltiples variables d'entorn que permeten concretar tots els aspectes referents a la localització del sistema:

-LC_MESSAGES: Determina quin és l'idioma i el codi de caràcters a utilitzar per als missatges i les etiquetes dels components GUI de les aplicacions (menús, missatges d'error, etiquetes de camps de formulari o altres widgets, etc...). La majoria d'aplicacions utilitzant gettext i gettext es basa en LC_MESSAGES. Altres aplicacions no utilitzen gettext i per tant pot ser que ignorin LC_MESSAGES.

-LC_COLLATE: S'utilitza per indicar com s'ordenaran els strings segons l'alfabet local. Consulteu sort i per exemple la diferència que hi ha al ordenar majúscules en ASCII o en l'idioma local o inclús entre diferents idiomes. També és molt important en bases de dades a l'hora d'utilitzar clàusules SQL com ORDER BY. També afecta a rangs de caràcters en expressions com [A-Z].

-LC_CTYPE: Defineix com es classifiquen els caràcters, és a dir coses com la relació que hi ha entre lletres majúscules i minúscules o quins caràcters es consideren alfanúmerics o numèrics. Afecta a aplicacions com grep que es poden executar ignorant o no ignorant majúscules i a qualsevol eina que utilitzi expressions regulars.

-LC_MONETARY: El tipus de moneda que s'utilitza i detalls com el format dels decimals.

-LC_NUMERIC: Per exemple indica si el caràcter decimal és el punt i el separador la coma com els americans o al revés com ho fan els alemanys.

-LC_TIME: No tots els idiomes mostren les dates igual. Per exemple els anglesos posen primer el més i després el dia i la setmana pot començar en diumenge en comptes de en dilluns.

-LC_PAPER: mides dels papers.

-LC_NAME: format en que es mostren els noms de persona complerts

-LC_ADDRESS: format de les adreces postals

-LC_TELEPHONE: format dels números de telèfon

-LC_MEASUREMENT: unitats de mesura (Kg, pounds, etc...)


Protocol

Els següent protocol estableix com es decideix quin és el locale a escollir (segons $ man 7 locale):

1. Si s'estableix la variable d'entorn LC_ALL i té un valor no null, aleshores s'utilitza aquest locale.

2. Sinó hi ha LC_ALL i existeix un locale especific per a una acció de localització específica (p. ex. LC_NUMERIC) aleshores s'utilitza aquest valor.

3. Si no hi ha cap dels valors anteriors s'utilitza la variable LANG.

Exemple de configuració en català

Comprovem el que tenim al nostre ordenador:

[email protected]:~$ locale
LANG=POSIX
LANGUAGE=ca_ES:en
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

Com veiem a la tercera línia, tenim la configuració en català.

Locales en Unix

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 fitxer es descriu a:

$ man 5 locale

L'ordre localedef permet definir "compilar" els fitxers de text:

-Els formats de text sempre són més lents que els formats binaris. És necessari generar uns fitxers binaris (compilar)

$ 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
Generating locales...
ca_AD.UTF-8... done
ca_ES.UTF-8... done
[email protected] done

Configurar els locales

Instal·lació de suport d'idioma

Paquets x-locale_name

-Suport d'idioma a Ubuntu 9.10:

$ sudo apt-get install language-pack-ca language-support-ca

-Les aplicacions grans solen tenir paquets per a cada idioma/locale

$ sudo apt-get install openoffice.org2-l10n- TABULEU DOS COPS!

Codificacions de caràcters

ASCII

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 variacions 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ó.

-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.


ASCII art

ISO-8859

Unicode

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àndards recents i programari bàsic han adoptat Unicode per a representar text.

Origen del nom: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].


Unicode jordipujol.png
[email protected]:~$ 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

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:

  • UTF-8: Codificació orientada a byte (8 bits) que té símbols de longitud variable.
  • UTF-16: Codificació de 16 bits de longitud variable optimitzada.
  • UTF-32: codificació de 32 bits de longitud fixa. Entren tot els possibles caràcters i és la més senzilla d'utilitzar.

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:

  • UTF-8 No necessita. Només 1 byte no cal indicar quin és l'ordre
  • UTF-16 Big-endian o Little-endian
  • UTF-16BE Big-endian
  • UTF-16LE Little-endian
  • UTF-32 Big-endian o Little-endian
  • UTF-32BE Big-endian
  • UTF-32LE Little-endian

UTF-8

Configuració horària

Temps Universal Coordinat (UTC): L'origen de les sigles és un compromís de la International Telecommunication Union (ITU) entre els sigles americanes "CUT" (coordinated universal time) i les sigles franceses "TUC" (temps universel coordonné) (vaja ni un ni l'altre!).

Greenwich Mean Time (GMT): El Greenwich Mean Time és una mesura del temps basada en el temps solar (mesura segons els estels) mitjà al meridià de Greenwich, meridià origen de les longituds, que travessa l'observatori de Greenwich, a prop de Londres, a Anglaterra. La mesura GMT ha servit de referència horària al món durant la major part del segle XX, abans de ser substituït pel "Temps Universal Coordinat" UTC l'any 1972. De vegades GMT es utilitzat encara com a sinònim del fus horari UTC+0. Les dues mesures, si bé semblants, no coincideixen pas, ja que el GMT es calcula sobre la rotació terrestre, i l'UTC sobre el TAI (Temps Atòmic Internacional), que basa el seu càlcul en la tècnica dels rellotges atòmics.

Temps atòmic Internacional (TAI): Creat al 1972, sistema més exacte de mesura del temps. Consulteu la wikipedia.

Fus horari: Les zones horàries o fusos horaris són cadascuna de les vint-i-quatre àrees en les que es divideix la Terra que segueixen la mateixa definició de temps. Antigament, la gent feia servir el temps solar aparent, guiant-se per la posició del sol, amb aquest sistema l'hora variava amb la distància per exemple entre ciutats. Els fusos horaris van corregir en part aquest problema al posar els rellotges d'una regió al mateix temps solar mig. Els fusos horaris generalment estan centrats en meridians d'una longitud que és múltiple de 15 °, en tot cas tal i com es pot veure en el següent mapa les formes dels fusos horaris estan força afectades per les fronteres polítiques.

Hora local: Cada fus horari té un hora diferent respecte a l'hora UTC de referència (anomenada UTC+0, abans GMT tot i que no són exactament la mateix hora). A més cal tenir en compte les polítiques d'horari d'estiu (Daylight Saving Time o DST).

Horari d'estiu: Canvi d'hora que es realitza a l'estiu per aprofitar millor la llum diürna. No s'aplica igual a tot el mon. Consulteu el mapa de l'article de la Viquipèdia.

Rellotge de maquinari (hardware clock): és el rellotge intern d'un PC que sol estar a la placa mare i que funciona de forma permanent gràcies a la pila que porta la placa mare. Aquest rellotge pot ser modificat per la BIOS, o pel sistema operatiu.

Normalment cada ordinador té dos rellotges:

  • Rellotge de maquinari gestiona la placa mare
  • Rellotge 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.

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


Com canviar la zona horària

De forma temporal per a un script o bash concreta

De forma permanent per a tot el sistema

tzconfig

Configuració de l'hora

Paquets

libc

locales

tzdata

Ordres

Configuració de la localització

/usr/bin/locale

localedef

localepurge

locale-gen

Codificacions de caràcters

iconv

recode

tofrodos

enca

file

geany

Configuració de l'hora

tzselect

hwclock

tzconfig

date

epoch

Fitxers de configuració

Configuració de la localització

/etc/locale.alias

/usr/share/i18n/locales

/usr/share/i18n/charmaps

/etc/environment

Configuració de la zona horària

/etc/timezone

/etc/localtime

/usr/share/zoneinfo

/etc/default/rcS

/usr/share/doc/tzdata/README.Debian

Variables d'entorn

LANG

LC_*

LC_ALL

TZ

Resol·lució de problemes. Troubleshooting

Conflictes de temps amb sistemes duals Windows/Linux

Programació

Gettext

C gettext

PHP gettext