Aprenda Linux, 302 (Entornos mixtos): Internacionalización

Configuración básica y conceptos de nombres en entornos que no están en inglés

Si trabaja en un entorno mixto en el cual sean usados caracteres que no son del idioma inglés, necesita entender códigos de caracteres y páginas de código y la forma en que se relacionan con su entorno local. También necesita entender las diferencias entre los entornos de Linux y Windows al interpretar espacios de nombres. Aunque Samba soporta la internacionalización, si trabaja con clientes de Windows más antiguos, versiones de Samba 2.x o necesita usar un conjunto de caracteres específico distinto a Unicode, necesitará realizar algunos ajustes de configuración. Dependiendo del entorno local en uso, construir y parchar bibliotecas de conversión también puede ser necesario. En este artículo, aprenda cómo manejar la internacionalización en su entorno de Linux.

Tracy Bost, Consultant and Trainer, Freelance

Author photo - Tracy BostTracy Bost es un desarrollador de software e ingeniero en sistemas experto. También es profesor y entrenador para el sistema operativo de Linux. Tracy ha sido certificado como Red Hat Certified Engineer (RHCE) y Microsoft Certified Systems Engineer (MCSE), además de ser un miembro activo de Linux Foundation. Ha trabajado en varias industrias, incluyendo hipotecas, bienes raíces y el sector sin fines de lucro.



02-04-2012

Sobre esta serie

Esta serie de artículos le ayuda a aprender las tareas de administración de sistemas Linux. También puede usar el material en estos artículos para prepararse para los exámenes de Linux Professional Institute Certification nivel 3 (LPIC-3).

Vea nuestro roadmap de developerWorks para LPIC-3 para obtener una descripción y un enlace de cada artículo en esta serie. El roadmap está en progreso y refleja los objetivos actuales (noviembre de 2010) para los exámenes de LPIC-3. A medida que cada artículo es completado, es añadido al roadmap.

Visión General

En este artículo, aprenda sobre estos conceptos:

  • Códigos de caracteres y páginas de código
  • Cómo funcionan los conjuntos de caracteres con clientes de Windows
  • Bibliotecas de código de conversión
  • Configurando Samba para internacionalización

Este artículo le ayuda a prepararse para el Objetivo 312.6 en el Tema 312 del examen de Especialidad en Entorno Mixto de Linux Professional Institute (302). Este objetivo tiene un peso de 1.


Prerrequisitos

Sobre el examen optativo LPI-302

Linux Professional Institute Certification (LPIC) es como muchas otras certificaciones en las que se ofrecen distintos niveles, con cada nivel requiriendo más conocimiento y experiencia que el anterior. El examen LPI-302 es un examen de especialidad optativo en el tercer nivel de la jerarquía de LPIC y requiere un nivel avanzado de conocimiento de administración de sistemas Linux.

Para obtener su certificación de LPIC-3, debe pasar los dos exámenes de primer nivel (101 y 102), los dos exámenes de segundo nivel (201 y 202) y el examen principal de LPIC-3 (301). Después de que haya obtenido este nivel, puede tomar los exámenes de especialidad optativos, tales como LPI-302.

Para obtener el máximo de los artículos en esta serie, debe tener un conocimiento avanzado de Linux y un sistema Linux funcional en el cual pueda practicar los comandos cubiertos en este artículo. En particular, este artículo asume que tiene un conocimiento práctico de las funciones de línea de comandos de Linux y al menos un entendimiento general del propósito de Samba de acuerdo con lo cubierto en Aprenda Linux, 302 (Entornos mixtos): Conceptos. Para realizar las acciones descritas en este artículo, debe tener el software de Samba instalado. Además, debe tener las bibliotecas GNU Compiler Collection instaladas junto con acceso a la red y a Internet. Un cliente de Windows en la red será útil para probar nombres que no estén en inglés.


Entendiendo la internacionalización

Si está en un entorno mixto, es probable que sus usuarios prefieran trabajar con archivos y directorios en su propio entorno local. Un entorno local es simplemente un conjunto de parámetros que define el lenguaje de un usuario, su país y cualquier otra preferencia que el usuario pueda usar y ver en el entorno informático. Cuando el software puede usarse en el entorno local de un usuario, normalmente es conocido como internacionalización o i18n.

Construya su propio feed

Puede construir un feed personalizado de RSS, Atom o HTML, de forma que sea notificado a medida que añadimos nuevos artículos o actualizamos el contenido. Vaya a los developerWorks RSS feeds. Seleccione Linux para la zona y Articles para el tipo, y escriba Linux Professional Institute para las palabras clave. Después, elija su tipo de feed preferido.

Códigos de carácter

Digamos que está explorando directorios en su computadora usando Nautilus en Linux o Windows Explorer en Windows y se encuentra con un directorio llamado 01100001 01110000 01110000 01101100 01101001 01100011 01100001 01110100 01101001 01101111 01101110 01110011. O quizá la computadora muestre el directorio como 97 112 112 108 105 99 97 116 105 111 110 115 o 61 70 70 6C 69 63 61 74 69 6F 6E 73. A menos que sepa leer código binario, decimal o hexadecimal o tenga un traductor a la mano, nunca sabrá que ese directorio es un directorio compartido con el nombre de applications. Sin embargo, su computadora entiende números. De hecho, los números son todo lo que entiende su computadora.

Para nuestra suerte, no tiene que aprender código binario, hexadecimal, decimal o ningún otro sistema numérico sólo para usar la computadora, ya que los traductores muestran caracteres de lenguaje legibles. En la base de esta traducción está el código de caracteres. Un código de caracteres es la representación en forma numérica de una correlación de caracteres particular de numérico a un carácter particular. La Tabla 1 muestra los códigos de caracteres de American Standard Code for Information Interchange (ASCII) para un directorio dado.

Tabla 1. Códigos de caracteres de ASCII para un directorio llamado "applications"
BinarioDecimalHexadecimalCarácter representado
011000019761a
0111000011270p
0111000011270p
011011001086Cl
0110100110569i
011000119963c
011000019761a
0111010011674t
0110100110569i
011011111116Fo
011011101106En
0111001111573s

Este ejemplo es útil si su entorno local funciona con ASCII. Sin embargo, con la globalización de las redes informáticas, más usuarios desean trabajar en su entorno local.

Unicode

Si usa un sistema operativo y un software modernos, probablemente ha usado Unicode, aún si no está familiarizado con él. Actualmente, es raro encontrarse un artículo sobre internacionalización sin leer sobre Unicode. Unicode es la codificación moderna de facto para internacionalización. Su meta es sustituir diversas páginas de código en todos los niveles al proporcionar codificación de carácter abstracta para todos los lenguajes conocidos:

  • La mayoría de las distribuciones de Linux actualmente usan Unicode de forma predeterminada.
  • Samba versión 3.x usa Unicode de forma predeterminada.
  • Desde finales de la década de 1990, los computadores de Windows usan Unicode (UTF-16) de forma predeterminada.

UTF-8 es la codificación de Unicode más popular utilizada. Esta codificación usa un solo byte para caracteres de ASCII, lo que le permite tener los mismos valores de código que los códigos de caracteres definidos por ASCII. Sin embargo, para mantener la compatibilidad mutua, es esencial que un administrador de sistemas Linux pueda entender y funcionar con diversas páginas de código, ya que Unicode tal vez no siempre sea una opción o la mejor solución para un entorno que no esté en inglés particular.

Regrese en el tiempo por un momento hacia los primeros días de las redes informáticas. La mayoría del software fue desarrollado con el idioma inglés en mente. Por lo tanto, los computadores usaron una representación de caracteres en inglés del ASCII estándar sin problemas. El ASCII estándar asigna un carácter de un solo byte en el idioma inglés a un valor numérico, tal como de 0 a 127 en formato decimal. A medida que la necesidad se expandió para incluir más caracteres y símbolos, tal como aquellos encontrados en el francés, español y ecuaciones matemáticas, una extensión para ASCII fue incluida. Esta extensión da un bit adicional para incluir 128 caracteres más, con valores en el rango de 128 a 255 en formato decimal. Algunas de estas extensiones comunes para ASCII estándar incluyen ISO Latin I, Extended Binary-Coded Decimal Interchange Code (EBCDIC, el cual usa IBM) y ASCII Extendido (usado por Microsoft y el sistema operativo de DOS).

¿Pero qué pasa si un entorno de usuario particular prefiere el chino, japonés, húngaro, eslovaco u otro idioma para el cual los caracteres de ASCII son insuficientes? Al trabajar con estos tipos de entornos locales que no están en inglés es donde diversas páginas de código pueden ayudar.

Páginas de código

Una página de código es una correlación de números para caracteres específicos de acuerdo con lo definido por un conjunto de caracteres (repertorio) diseñado para usarse en uno o varios entornos locales particulares. Una página de código ha sido tradicionalmente conocida como codepage, codificación, charset, conjunto de caracteres, y conjunto de caracteres codificados. Aunque técnicamente los diversos nombres pueden tener significados ligeramente distintos, este artículo usa los términos página de código, conjunto de caracteres, codificación y charset en forma intercambiable.

Los idiomas tales como chino, japonés, eslovaco y muchos más tienen páginas de código. La Tabla 2 presenta una parte de las páginas de código comúnmente usadas.

Tabla 2. Páginas de código comunes
Página de códigoRepresentación
850MS-DOS Latin 1 (Europa Occidental)
437DOS-US, OEM-US
932MS-DOS Japanese Shift-JIS
852Idiomas de Europa Central que usan el script latino
1252Windows Western European Language
950MS-DOS Traditional Chinese
65001UTF-8 (Unicode)
28591ISO-8859-1

Trabajando con espacios de nombres en un entorno que no está en inglés

Ya que Samba versión 2.x no tiene soporte para Unicode, el soporte de conjunto de caracteres de todos los idiomas en nombres de archivo usa una página de código de entorno local particular. Los clientes anteriores de Windows usan páginas de código de un solo byte (lo contrario a multi-bytes). Sin embargo, no hay soporte en el protocolo de Server Message Block (SMB)/Linux Common Internet File System (CIFS) para conversión de código. Por lo tanto, debe usar el mismo conjunto de caracteres cuando Samba se comunica con un cliente de Windows anterior.

Si su entorno dicta el uso de una página de código específica, necesita conocer el significado básico de algunos términos específicos de Samba:

  • Conjunto de caracteres de UNIX. El conjunto de caracteres que Linux usa internamente
  • Conjunto de caracteres de DOS. El conjunto de caracteres que usa Samba al comunicarse con clientes de Windows anteriores
  • Conjunto de caracteres de visualización. El conjunto de caracteres usado para visualización de pantalla

Si el iconv está instalado en su computadora de Linux (y muy probablemente lo está), puede determinar las páginas de código disponibles al usar el comando iconv -l , como se muestra en el Listado 1.

Listado 1. Listado parcial de páginas de código disponibles

Haga clic para ver la lista de códigos

Listado 1. Listado parcial de páginas de código disponibles

[tbost@samba ~]# iconv -l
La siguiente lista contiene todos los conjuntos de caracteres codificados conocidos.  Esto no necesariamente significa que todas las combinaciones de estos nombres puedan ser usadas para los parámetros de línea de comandos FROM y TO.  Un conjunto de caracteres codificado puede ser listado con varios nombres (alias) distintos.
  437, 500, 500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865,
  866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3, 8859_4,
  8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993, 10646-1:1993/UCS4,
  ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4, ANSI_X3.110-1983, ANSI_X3.110,
  ARABIC, ARABIC7, ARMSCII-8, ASCII, ASMO-708, ASMO_449, BALTIC, BIG-5,
  BIG-FIVE, BIG5-HKSCS, BIG5, BIG5HKSCS, BIGFIVE, BRF, BS_4730, CA, CN-BIG5,
  CN-GB, CN, CP-AR, CP-GR, CP-HU, CP037, CP038, CP273, CP274, CP275, CP278,
  CP280, CP281, CP282, CP284, CP285, CP290, CP297, CP367, CP420, CP423, CP424,
  CP437, CP500, CP737, CP775, CP803, CP813, CP819, CP850, CP851, CP852, CP855,
  CP856, CP857, CP860, CP861, CP862, CP863, CP864, CP865, CP866, CP866NAV,
  CP868, CP869, CP870, CP871, CP874, CP875, CP880, CP891, CP901, CP902, CP903,
  CP904, CP905, CP912, CP915, CP916, CP918, CP920, CP921, CP922, CP930, CP932,

Puede usar el comando locale para mostrar el entorno local actual de la computadora. Si necesita cambiar su entorno local, verifique la documentación de su distribución para encontrar la ubicación del archivo del entorno local. Si cambia su entorno local, requiere volver a cargar después del cambio. El Listado 2 muestra un entorno local predeterminado de ejemplo para una computadora ejecutando Linux.

Listado 2. Entorno local predeterminado (Unicode UTF-8) de una computadora de Linux
[tbost@samba ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

En el Listado 2, note que los entornos locales son representados como nombres que son fáciles de entender (a diferencia de muchas de las convenciones de nombres de página de código).

Trabajando con conjuntos de caracteres

Los métodos anteriores de página de código de DOS que Windows versión 9x y Samba 2.x usan pueden soportar conjuntos de caracteres extendidos, pero no en múltiples combinaciones. Por ejemplo, el español, inglés y francés no pueden ser usados juntos. Tenga esta restricción en mente si se enfrenta al reto de soportar múltiples entornos locales dentro de estos entornos.

Si se actualiza de Samba 2.x a Samba 3.x o cambia el entorno local predeterminado de Samba después de usar previamente un entorno local que no esté en inglés, puede encontrar que muchos archivos que tienen caracteres especiales en el nombre de archivo ahora son irreconocibles. Normalmente, estos nombres se manifestarán como una secuencia ilegible de caracteres. Esto normalmente sucede con diéresis y acentos, ya que estos caracteres fueron particulares para la página de código que estaba previamente en uso.

Si pretende nombrar su servidor de Samba usando caracteres que no sean del idioma inglés, asegúrese de que el Samba del entorno local que está usando es el mismo que el entorno local en la computadora de Linux. Aquí es donde la directiva del conjunto de caracteres de UNIX tiene un rol importante en la configuración apropiada para Samba.


Usando bibliotecas de conversión de código

iconv (libiconv) es un programa licenciado de GNU que se convierte de una codificación a otra. Samba depende de que iconv sea instalado en e la computadora de Linux y de tener las rutinas necesarias de conversión de conjunto de caracteres. Aunque estas conversiones no siempre son perfectas, la herramienta hace su trabajo bastante bien.

Si hay una discordancia en el conjunto de caracteres, muy probablemente resultará en una visualización de secuencias aleatorias de caracteres ilegibles. Sin embargo, un carácter específico que no esté soportado entre las mismas páginas de código para una computadora de Linux o Windows probablemente dará como salida un signo de interrogación (?) para el código de caracteres no soportado. En estos escenarios, los errores son normalmente registrados en el archivo de registro de Samba, el cual puede proporcionar información adicional para la raíz del problema. En dichas instancias, necesita profundizar un poco más en cómo los códigos de caracteres son convertidos usando páginas de código específicas en el servidor de Samba.

También puede ser necesario compilar la biblioteca libiconv para soportar una página de código específica o aplicar un parche cuando se usen caracteres multi-byte complejos, tales como aquellos en el idioma japonés. Si su entorno local es para el idioma japonés, tal vez tenga trabajo adicional para compilar la biblioteca libiconv y después aplicar un parche disponible. CP932 (también conocido como shift_jis y Windows-31J) es la página de código de Microsoft usada para el japonés. La biblioteca libiconv contiene un convertidor CP932 que convierte páginas de código 932 de Windows a Unicode. Sin embargo, es necesario un parche para hacer las conversiones correctas. El Listado 3 muestra el código para usar una biblioteca.

Listado 3. Parchado, compilado e instalación de la biblioteca libiconv para CP932
[tbost@samba ~]# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.tar.gz
[tbost@samba ~]#
 wget http://www2d.biglobe.ne.jp/~msyk/software/libiconv/libiconv-1.13-cp932.patch.gz
[tbost@samba ~]# tar -xvzf libiconv-1.13.tar.gz
[tbost@samba ~]# cd libiconv-1.13
[tbost@samba ~]# gzip -dc ../libiconv-1.13-cp932.patch.gz | patch -p1
[tbost@samba libiconv-1.13]# ./configure --prefix=/usr/local/lib/libiconv
[tbost@samba libiconv-1.13]# make
[tbost@samba libiconv-1.13]# sudo make install
[tbost@samba libiconv-1.13]# /usr/local/lib/libiconv/bin/iconv  -l | egrep -i '(-31j|-ms)'
EUC-JP-MS EUCJP-MS EUCJP-WIN EUCJPMS

La secuencia de etapas en el Listado 3 es la siguiente:

  1. Descargue el código de origen de libiconv .
  2. Descargue el parche para CP932.
  3. Descomprima y desempaquete el tar del código de origen de libiconv .
  4. Cambie el directorio al directorio libiconv-1.13 recién creado.
  5. Configure el directorio usando el directorio /usr/local/lib/libiconv como la ubicación en la cual instalar los archivos.
  6. Compile el código de origen y después instale la herramienta usando permisos de sudo.
  7. Verifique que el parche haya sido aplicado.

Convirtiendo archivos y directorios existentes

Para mantener la consistencia con los nombres, tal vez quiera convertir los nombres de un conjunto de caracteres en otro si los directorios y archivos ya han sido nombrados usando un conjunto de caracteres anterior. La herramienta convmv , escrita en Perl, hace un buen trabajo convirtiendo de un conjunto de caracteres a otro.

El código en el Listado 4 descarga el tarball comprimido y después extrae su contenido. Ya que convmv es un script Perl, no es necesaria ninguna compilación. El comando final instruye a convmv para que convierta recursivamente todos los archivos en iso-8859-8 (Latin/Hebrew) a Unicode UTF-8.

Listado 4. Convirtiendo nombres de archivo con convmv
[tbost@samba /]# wget http://www.j3e.de/linux/convmv/convmv-1.14.tar.gz
[tbost@samba /]# tar -xzvf convmv-1.14.tar.gz
[tbost@samba /]# cd convmv-1.14
[tbost@samba convmv-1.14]# sudo ./convmv -f iso-8859-8 -t utf8 
-r --notest --replace /applications

Configurando Samba para internacionalización

Comenzando con Samba versión 3, Unicode es la codificación predeterminada, la cual habilita el soporte de internacionalización sin cambios de configuración—suponiendo que todos los clientes pueden negociar Unicode con éxito. Sin embargo, si usa Samba 2.x o cuando Samba tenga clientes anteriores de Windows en la red, debe ajustar el archivo de configuración de Samba, instruyéndolo para que use su entorno local.

Cuando las bibliotecas apropiadas de conversión de caracteres son instaladas, configurar Samba para internacionalización es sencillo. Tenga en mente que el protocolo de CIFS soporta conjuntos de caracteres que no están en inglés en toda la conexión y no debe requerir cambios.

Habilitando los conjuntos de caracteres

Suponga que desea configurar Samba 3 para soporte de cliente de Windows en español. Si desea configurar un entorno local de idioma distinto, use las opciones apropiadas de parámetro de conjunto de caracteres de DOS y UNIX. De otra manera, la configuración debe ser la misma.

Para habilitar conjuntos de caracteres, complete estas etapas:

  1. Como una buena práctica, cree una copia de seguridad del archivo smb.conf.
  2. Abra smb.conf en su editor de texto favorito.
  3. En los valores globales, añada las siguientes directivas:

      #======================= Global Settings =======================
    
    [global]
    
    dos charset = CP850
    
    unix charset = ISO8859-1

    Los valores de configuración anteriores proporcionan un ejemplo para usar la página de código 850 en los clientes de Windows, mientras que el entorno local del servidor de Samba está establecido para IS08859-1. Su configuración muy probablemente usará una página de código y entorno local distintos.

  4. Pruebe la nueva configuración para cualquier error de sintaxis o conjunto de caracteres no soportado:

    [tbost@samba /]# testparm -v
    Load smb config files from /etc/samba/smb.conf
    rlimit_max: rlimit_max (1024) below minimum Windows limit (16384)
    Processing section "[homes]"
    Processing section "[printers]"
    Loaded services file OK.
    Server role: ROLE_STANDALONE
    Press enter to see a dump of your service definitions

    Un mensaje que diga Loaded services file OK debe ser retornado. Si aparece cualquier advertencia o error que se relacione con la conversión de conjunto de caracteres, asegúrese de que libiconv soporte el conjunto de caracteres deseado.

  5. Reinicie Samba o vuelva a cargar el archivo de configuración.

Ahora, intente conectarse a un cliente de Windows y explore directorios que contengan un acento u otro carácter que no sea del idioma inglés:

[tbost@samba /]# smbclient -U tbost  //windowsclientname/applications
Enter tbost's password:

Aquí, windowslcientname es el nombre de NetBIOS del cliente de Windows en su red, mientras que applications es el directorio compartido en el cliente de Windows. Una vez que esté conectado al intercambio, navegue hacia un listado de directorios que contenga caracteres que no sean del idioma inglés y verifique que se muestran correctamente.

Recursos

Aprender

Comentar

  • Participe en la Comunidad My developerWorks. Conéctese con otros usuarios developerWorks mientras explora los blogs, foros, grupos y wikis dirigidos a desarrolladores.

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Linux
ArticleID=807252
ArticleTitle=Aprenda Linux, 302 (Entornos mixtos): Internacionalización
publish-date=04022012