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)

Objectius

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ó

La internacionalització (i18n) consisteix en programar una aplicació pensant en què es pigui adaptar en diferents idiomes i regions del món sense necessitat de canviar el codi (sense haver de reprogramar-la).

La localització (l10n) consisteix en adaptar una aplicació a una regió i idioma específics.

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.

La globalització (g11n) és la combinació entre la internacionalització i la localització.

Aspectes que té en compte la globalització:

  • 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 format de moneda.
  • Diferents sistemes de pes i mesures.
  • Diferents codificacions de caràcters.
  • Diferents formats de números (el separador de decimals...).

Format de les dates arreu del món:

Dates mon joel1.png


3.1 Locales

Format d'una locale:

language(_territory)(.encoding)(@modifier)
[email protected]

L'única part obligatòria és el codi d'idioma (ISO-639 de 2 lletres).

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 com per exemple el C, que se salta qualsevol tipus de localització i utilitza l'americà. També es pot indicar POSIX.

Hi ha altres variables a més de les del llenguatge:

  • 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.
  • LC_COLLATE: S'utilitza per indicar com s'ordenaran els strings segons l'alfabet local.
  • LC_CTYPE: Defineix com es classifiquen els caràcters, és a dir, aspectes com la relació que hi ha entre lletres majúscules i minúscules o quins caràcters es consideren alfanúmerics o numèrics.
  • 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.
  • 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.

Protocol:

  • Si s'estableix la variable d'entorn LC_ALL i té un valor no null, aleshores s'utilitza aquest locale.
  • Si no 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.
  • Si no hi ha cap dels valors anteriors s'utilitza la variable LANG.


Exemple de configuració en català

Per veure la locale del nostre sistema:

$ locale
LANG=ca_ES.UTF-8
LANGUAGE=ca:en
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=

Podem comprovar que la nostra locale és català d'Espanya (ca_ES).

Per establir la nostra locale utilitzem:

$ LANG=ca_ES.UTF-8

Locales en Unix

Directori on es desen les locales:

/usr/share/i18n/locales

Els fitxers de la locale en català estan en ASCII:

$ file /usr/share/i18n/locales/ca_ES
/usr/share/i18n/locales/ca_ES: ASCII text

L'ordre localedef permet definir "compilar" els fitxers de text, 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

Configurar els locales

Instal·lació de suport d'idioma

Suport d'idioma a Uubuntu:

$ 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- (tabular dos cops)

Codificacions de caràcters

ASCII

És un dels codis més antics de la informàtica. Un codi de caràcters és la traducció entre un sistema de caràcters i el llenguatge dels ordinadors (bits).

L'ASCII assigna valors numèrics del 0 al 127, de 7 bits de longitud, a les lletres, xifres i signes de puntuació bàsics americans.

Erròniament s'anomena ASCII al ISO-8859-1, ja que aquest s'assembla a l'ASCII però utilitza 8 bits en lloc de 7.

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.

Es pot consultar la taula ASCII instal·lant el paquet:

$ sudo apt-get install ascii

i executant:

$ ascii

Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex  
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL

ASCII art

Hi ha aplicacions que permeten fer dibuixos utilitzant caràcters ASCII.

$ figlet Hola!
 _   _       _       _ 
| | | | ___ | | __ _| |
| |_| |/ _ \| |/ _` | |
|  _  | (_) | | (_| |_|
|_| |_|\___/|_|\__,_(_)
$ cowthink -f koala Hola!
 _______
( Hola! )
 -------
  o
   o
       ___  
     {~._.~}
      ( Y )
     ()~*~()   
     (_)-(_)

ISO-8859

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

Pertany al grup de jocs de caràcters de l'ISO coneguts com ISO/IEC 8859 que es caracteritzen pel seu extended ASCII. Són sistemes decarà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 revisió de la ISO 8859-1, incorporant el símbol de l'Euro

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.

L'origen del nom és: 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 permetés tenir textos amb codificacions mixtes.

La majoria de sistemes operatius moderns, incloent Linux l'implementen així com altres tecnologies com Java o XML.

Els 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

É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 dels tres possibles formats per representar Unicode. Té aquestes característiques:

  • Pot representar qualsevol caràcter unicode.
  • La mida dels símbols pot estar entre 1 o 4 bytes (per cada caràcter unicode).
  • Inclou ASCII de 7 bits i per tant és compatible endarrere amb ASCII.

Aquestes característiques el fan ideal per a codificació de correus electrònics i pàgines web. El IETF recomana que tots els protocols d'Internet indiquin quina codificació utilitzen i que una de les contemplades sigui UTF-8.

Configuració horària

Definicions:

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

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.

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.

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

Com canviar la zona horària

Instal·lem el següent paquet:

$ sudo apt-get install tzdata

Ara l'executem:

$ 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.
#? 8
Please select a country.
 1) Aaland Islands	  18) Greece		    35) Norway
 2) Albania		  19) Guernsey		    36) Poland
 3) Andorra		  20) Hungary		    37) Portugal
 4) Austria		  21) Ireland		    38) Romania
 5) Belarus		  22) Isle of Man	    39) Russia
 6) Belgium		  23) Italy		    40) San Marino
 7) Bosnia & Herzegovina  24) Jersey		    41) Serbia
 8) Britain (UK)	  25) Latvia		    42) Slovakia
 9) Bulgaria		  26) Liechtenstein	    43) Slovenia
10) Croatia		  27) Lithuania		    44) Spain
11) Czech Republic	  28) Luxembourg	    45) Sweden
12) Denmark		  29) Macedonia		    46) Switzerland
13) Estonia		  30) Malta		    47) Turkey
14) Finland		  31) Moldova		    48) Ukraine
15) France		  32) Monaco		    49) Vatican City
16) Germany		  33) Montenegro
17) Gibraltar		  34) Netherlands
#? 44
Please select one of the following time zone regions.
1) mainland
2) Ceuta & Melilla
3) Canary Islands
#? 1
The following information has been given:

	Spain
	mainland

Therefore TZ='Europe/Madrid' will be used.
Local time is now:	Wed May 30 13:03:13 CEST 2012.
Universal Time is now:	Wed May 30 11:03:13 UTC 2012.
Is the above information OK?
1) Yes
2) No
#? 1
You can make this change permanent for yourself by appending the line
	TZ='Europe/Madrid'; 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:
Europe/Madrid

També podem usar:

$ sudo dpkg-reconfigure tzdata

Zonahorairajoel1.png

Zonahorairajoel2.png

Current default time zone: 'Europe/Madrid'
Local time is now:      Wed May 30 13:06:18 CEST 2012.
Universal Time is now:  Wed May 30 11:06:18 UTC 2012.

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