• Publicidad

Usar Locale::PO

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Usar Locale::PO

Notapor allan » 2006-11-02 17:44 @780

Saludos a todos, soy nuevo en Perl :)
He estado revisando el módulo Locale::po para usarlo, pero no se cómo acceder a los objetos del hash que me genera la función load_file_ashash

La prueba es muy sencilla, tengo un archivo test con lo siguiente:
Código: Seleccionar todo
msgid "Failed"
msgstr "Fallo"

msgid "Hello"
msgstr "Hola"

luego, con el siguiente código (si, si; que soy nuevo y no se hasta dónde explicarme xD )

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use Locale::PO;
use strict;
use Data::VarPrint;

my $href = Locale::PO->load_file_ashash("test.pot");
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


cargo en $href un hash; hasta aquí todo bien. Para ver que tiene hago lo siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
for my $msgid (keys %$href) {
        my $myst0 = $href->{$msgid}->msgid();
        print "$myst0 \n";
        my $myst = $href->{$msgid}->msgstr();
        print "$myst \n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Veo que todo esta en orden.

Ahora lo que quiero es poder hacerlo de esta manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $mistring = $href->{Failed}->msgstr();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


para tener en mistring la traducción, pero falla.
¿Qué estoy haciendo mal?


La función VarPrintAsString($href); me da este resultado, veo que Failed es un objeto de la clase Locale::po, pero sigo sin comprender cómo llegar hasta él de manera individual xD

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
{
  '"Failed"' => Object of class Locale::PO,
  '"Hello"' => Object of class Locale::PO
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Gracias por su atención.

Saludos
allan
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2006-11-02 17:34 @773

Publicidad

Notapor explorer » 2006-11-02 19:09 @839

Bienvenido a los foros de Perl En Español, allan.

Es curioso lo que hace este módulo y no entiendo porqué.

Al leer el fichero con load_file_ashash(), primero quita las comillas a las cadenas de texto tanto de msgstr como de msgid. Pero, a la hora de almacenar el resultado en el hash, les vuelve a poner las comillas.

Por lo tanto, la forma de acceder a los objetos es, obligatoriamente, poniendo las comillas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l

use Locale::PO;
use strict;
use Data::Dumper;

my $href = Locale::PO->load_file_ashash("kk.po");

print Dumper $href;

print $href->{'"Failed"'}->msgstr();
print $href->{'"Failed"'}->msgid();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Salida:
Código: Seleccionar todo
$VAR1 = {
          '"Hello"' => bless( {
                                'msgid' => '"Hello"',
                                'msgstr' => '"Hola"'
                              }, 'Locale::PO' ),
          '"Failed"' => bless( {
                                 'msgid' => '"Failed"',
                                 'msgstr' => '"Fallo"'
                               }, 'Locale::PO' )
        };

"Fallo"
"Failed"
pero claro... ¿qué pasa si queremos usar variables como claves del hash?. Pues que se nos complica un poco el manejo.

Una forma de facilitar la programación es usando la función quote():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $po = Locale::PO->new();
my $x = 'Failed';
print $href->{ $po->quote( $x ) }->msgstr();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
O poner las comillas como parte de la cadena a traducir
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $x = '"Failed"';
print $href->{ $x }->msgstr();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Gracias

Notapor allan » 2006-11-02 23:14 @010

Gracias explorer, me has ayudado muchísimo, llevaba dos dí­as quebrándome la cabeza porque no podía llamarlo directamente. Vengo del mundo de FoxPro, y las cosas se hacen un poco diferentes :)
Gracias de nuevo

Saludos
allan
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2006-11-02 17:34 @773


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron