Setsames verhalten bei Locale::Maketext

Setsames verhalten bei Locale::Maketext

am 05.07.2007 17:05:55 von Maros Kollar

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¨

Re: Setsames verhalten bei Locale::Maketext

am 05.07.2007 21:00:44 von Slaven Rezic

Maros Kollar 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 rezic de

sf-upload: make batch releases on SourceForge
http://sf-upload.sf.net

Re: Setsames verhalten bei Locale::Maketext

am 06.07.2007 10:02:32 von Maros Kollar

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š