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š