Setsames verhalten bei Locale::Maketext

Hallo!
ich habe beim Modul Locale::Maketext Modul ein seltsames Verhalten, dass
mich an meinem Verständnis vom diesem Modul zugrundeliegenen Konzept
zweifeln lässt:


######### MyApp/L10N.po

package MyApp::L10N;
use strict;
use warnings;
use utf8;

use base qw(Locale::Maketext);
use Locale::Maketext::Lexicon {
de => [Gettext => 'l10n/de.po'],
en => [Gettext => 'l10n/en.po'],
_decode => 1,
_auto => 1,
};

######### l10n/en.po

"Project-Id-Version: MyApp 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"

msgid "test01 [_1]"
msgstr "Das ist test01 [_1]"

msgid "test02"
msgstr "Das ist test02 [_1]"

msgid "test03 %1"
msgstr "Das ist test03 %1"

msgid "test04"
msgstr "Das ist test04 %1"

######### Irgendwo im Code

$lh->maketext('test01 [_1]','xxx');
$lh->maketext('test02','yyy');
$lh->maketext('test03 %1','zzz');
$lh->maketext('test04','qqq');

######### Erwarteter Output

Das ist test01 xxx
Das ist test02 yyy
Das ist test03 zzz
Das ist test04 qqq

######### Tatsächlicher Output
test01 xxx <-- da wird nur die msgid interpoliert
Das ist test02 [_1] <-- geladen aber nicht interpoliert
test03 %1 <-- nur msgid und nicht interpoliert
Das ist test04 qqq <-- Wie erwartet

Wenn ich die _auto Option auskommentiere bekomme ich einen Fehler
"maketext doesn't know how to say: test01 [_1] as needed"

Was muss ich tun damit ich die Platzhalter auch in der msgid einsetzen
kann bzw. soll ich die Notation mit dem Prozentzeichen, oder mit den
eckigen Klammern benutzen?

Beste Grüße
Maro¨
Maros Kollar [ Do, 05 Juli 2007 17:05 ] [ ID #1761059 ]

Re: Setsames verhalten bei Locale::Maketext

Maros Kollar <kol.nospam.lar [at] zsi.at> writes:

> Hallo!
> ich habe beim Modul Locale::Maketext Modul ein seltsames Verhalten, dass
> mich an meinem Verständnis vom diesem Modul zugrundeliegenen Konzept
> zweifeln lässt:
>
>
> ######### MyApp/L10N.po
>
> package MyApp::L10N;
> use strict;
> use warnings;
> use utf8;
>
> use base qw(Locale::Maketext);
> use Locale::Maketext::Lexicon {
> de => [Gettext => 'l10n/de.po'],
> en => [Gettext => 'l10n/en.po'],
> _decode => 1,
> _auto => 1,
> };
>
> ######### l10n/en.po
>
> "Project-Id-Version: MyApp 1.0\n"
> "Content-Type: text/plain; charset=utf-8\n"
> "MIME-Version: 1.0\n"
> "Content-Transfer-Encoding: 8bit\n"
> "Plural-Forms: nplurals=2; plural=n != 1;\n"
>
> msgid "test01 [_1]"
> msgstr "Das ist test01 [_1]"
>
> msgid "test02"
> msgstr "Das ist test02 [_1]"
>
> msgid "test03 %1"
> msgstr "Das ist test03 %1"
>
> msgid "test04"
> msgstr "Das ist test04 %1"
>
> ######### Irgendwo im Code
>
> $lh->maketext('test01 [_1]','xxx');
> $lh->maketext('test02','yyy');
> $lh->maketext('test03 %1','zzz');
> $lh->maketext('test04','qqq');
>
> ######### Erwarteter Output
>
> Das ist test01 xxx
> Das ist test02 yyy
> Das ist test03 zzz
> Das ist test04 qqq
>
> ######### Tatsächlicher Output
> test01 xxx <-- da wird nur die msgid interpoliert
> Das ist test02 [_1] <-- geladen aber nicht interpoliert
> test03 %1 <-- nur msgid und nicht interpoliert
> Das ist test04 qqq <-- Wie erwartet
>
> Wenn ich die _auto Option auskommentiere bekomme ich einen Fehler
> "maketext doesn't know how to say: test01 [_1] as needed"
>
> Was muss ich tun damit ich die Platzhalter auch in der msgid einsetzen
> kann bzw. soll ich die Notation mit dem Prozentzeichen, oder mit den
> eckigen Klammern benutzen?

Das Problem kommt mir bekannt vor und scheint ein echter Bug zu sein:
http://rt.cpan.org/Public/Bug/Display.html?id=22921

Gruß,
Slaven

--
Slaven Rezic - slaven <at> rezic <dot> de

sf-upload: make batch releases on SourceForge
http://sf-upload.sf.net
Slaven Rezic [ Do, 05 Juli 2007 21:00 ] [ ID #1761065 ]

Re: Setsames verhalten bei Locale::Maketext

Slaven Rezic schrieb:
> Das Problem kommt mir bekannt vor und scheint ein echter Bug zu sein:
> http://rt.cpan.org/Public/Bug/Display.html?id=22921

Das habe ich auch vermutet, aber nicht gewagt es auszusprechen ;-)

Inzwischen habe ich eine Lösung gefunden:

##### mein L10N Modul

use base qw(Locale::Maketext);
use Locale::Maketext::Lexicon {
de => [Gettext => 'l10n/de.po'],
en => [Gettext => 'l10n/en.po'],
_decode => 1,
_auto => 1,
_style => 'gettext', <---- Neu
};

##### In den Po Dateien und im Code

Umstellung auf von maketext auf gettext Notation:

msgid "test01 %1"
msgstr "Das ist test01 %1"

msgid "test02"
msgstr "Das ist test02 %1"

....

Beste Grüße
Maroš
Maros Kollar [ Fr, 06 Juli 2007 10:02 ] [ ID #1761943 ]
Perl » de.comp.lang.perl.misc » Setsames verhalten bei Locale::Maketext

Vorheriges Thema: ist nichts ein Ergebnis?
Nächstes Thema: reverse umount