In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/dccfc75d21f1ac6a97926d5bac2e89d3cd22eafa?hp=ed897e29a200fd3c758cb7ab8c0d953347a98056>
- Log ----------------------------------------------------------------- commit dccfc75d21f1ac6a97926d5bac2e89d3cd22eafa Author: Father Chrysostomos <spr...@cpan.org> Date: Sun Sep 26 18:29:57 2010 -0700 Add new Locale::Maketext files to MANIFEST M MANIFEST commit f7d5028f37dc929f22edd81023311830eb658487 Author: Todd Rinaldo <to...@cpan.org> Date: Tue Sep 28 12:28:50 2010 -0500 Locale::Maketext - Import dev changes from CPAN This patch imports the changes which are on CPAN but not already pulled into blead for Locale::Maketext. 1. New test file t/70_fail_auto.t - Test for CPAN RT #25877 2. Fix for RT25877 (Logic fix tested in 70_fail_auto.t) 3. Convert t/30_local.t to Test::More (the other files were already done in blead. This one was missed. 4. Add a cookbook pod file. 5. Changelog entries which were on CPAN but not in blead. M dist/Locale-Maketext/ChangeLog M dist/Locale-Maketext/lib/Locale/Maketext.pm A dist/Locale-Maketext/lib/Locale/Maketext/Cookbook.pod M dist/Locale-Maketext/t/30_local.t A dist/Locale-Maketext/t/70_fail_auto.t ----------------------------------------------------------------------- Summary of changes: MANIFEST | 2 + dist/Locale-Maketext/ChangeLog | 19 +++ dist/Locale-Maketext/lib/Locale/Maketext.pm | 3 +- .../lib/Locale/Maketext/Cookbook.pod | 150 ++++++++++++++++++++ dist/Locale-Maketext/t/30_local.t | 15 +-- dist/Locale-Maketext/t/70_fail_auto.t | 32 ++++ 6 files changed, 208 insertions(+), 13 deletions(-) create mode 100644 dist/Locale-Maketext/lib/Locale/Maketext/Cookbook.pod create mode 100644 dist/Locale-Maketext/t/70_fail_auto.t diff --git a/MANIFEST b/MANIFEST index c551152..eb544b4 100644 --- a/MANIFEST +++ b/MANIFEST @@ -2745,6 +2745,7 @@ dist/lib/lib_pm.PL For "use lib", produces lib/lib.pm dist/lib/Makefile.PL dist/lib/t/01lib.t For "use lib" testing dist/Locale-Maketext/ChangeLog Locale::Maketext +dist/Locale-Maketext/lib/Locale/Maketext/Cookbook.pod Locale::Maketext dist/Locale-Maketext/lib/Locale/Maketext/GutsLoader.pm Locale::Maketext dist/Locale-Maketext/lib/Locale/Maketext/Guts.pm Locale::Maketext dist/Locale-Maketext/lib/Locale/Maketext.pm Locale::Maketext @@ -2760,6 +2761,7 @@ dist/Locale-Maketext/t/30_local.t See if Locale::Maketext works dist/Locale-Maketext/t/40_super.t See if Locale::Maketext works dist/Locale-Maketext/t/50_super.t See if Locale::Maketext works dist/Locale-Maketext/t/60_super.t See if Locale::Maketext works +dist/Locale-Maketext/t/70_fail_auto.t See if Locale::Maketext works dist/Locale-Maketext/t/90_utf8.t See if Locale::Maketext works dist/Math-BigInt-FastCalc/FastCalc.pm Math::BigInt::FastCalc extension dist/Math-BigInt-FastCalc/FastCalc.xs Math::BigInt::FastCalc extension diff --git a/dist/Locale-Maketext/ChangeLog b/dist/Locale-Maketext/ChangeLog index 2398704..16891a1 100644 --- a/dist/Locale-Maketext/ChangeLog +++ b/dist/Locale-Maketext/ChangeLog @@ -20,6 +20,25 @@ Revision history for Perl suite Locale::Maketext Convert the odd Locale::Maketext test out from Test to Test::More. +2009-06-23 Adriano Ferreira + * Development release 1.13_82 + + One more recipe: on [numf,...] with decimal precision + +2009-06-23 Adriano Ferreira + * Development release 1.13_81 + + Change a few straggling 'DEBUG and print' to 'DEBUG and warn' (thanks Dan Muey) + + A start of a cookbook. + +2009-06-23 Adriano Ferreira + * Development release 1.13_80 + + Fixes CPAN RT #25877 (thanks imacat) + + Add a test for failure_handler_auto() + 2008-05-28 Adriano Ferreira * Release 1.13 diff --git a/dist/Locale-Maketext/lib/Locale/Maketext.pm b/dist/Locale-Maketext/lib/Locale/Maketext.pm index 4436be1..5479a60 100644 --- a/dist/Locale-Maketext/lib/Locale/Maketext.pm +++ b/dist/Locale-Maketext/lib/Locale/Maketext.pm @@ -148,8 +148,7 @@ sub failure_handler_auto { $handle->{'failure_lex'} ||= {}; my $lex = $handle->{'failure_lex'}; - my $value; - $lex->{$phrase} ||= ($value = $handle->_compile($phrase)); + my $value ||= ($lex->{$phrase} ||= $handle->_compile($phrase)); # Dumbly copied from sub maketext: return ${$value} if ref($value) eq 'SCALAR'; diff --git a/dist/Locale-Maketext/lib/Locale/Maketext/Cookbook.pod b/dist/Locale-Maketext/lib/Locale/Maketext/Cookbook.pod new file mode 100644 index 0000000..6063b0f --- /dev/null +++ b/dist/Locale-Maketext/lib/Locale/Maketext/Cookbook.pod @@ -0,0 +1,150 @@ +# This document contains text in Perl "POD" format. +# Use a POD viewer like perldoc or perlman to render it. + +=encoding utf-8 + +=head1 NAME + +Locale::Maketext::Cookbook - recipes for using Locale::Maketext + +=head1 INTRODUCTION + +This is a work in progress. Not much progress by now :-) + +=head1 ONESIDED LEXICONS + +I<Adapted from a suggestion by Dan Muey> + +It may be common (for example at your main lexicon) that +the hash keys and values coincide. Like that + + q{Hello, tell me your name} + => q{Hello, tell me your name} + +It would be nice to just write: + + q{Hello, tell me your name} => '' + +and have this magically inflated to the first form. +Among the advantages of such representation, that would +lead to +smaller files, less prone to mistyping or mispasting, +and handy to someone translating it which can simply +copy the main lexicon and enter the translation +instead of having to remove the value first. + +That can be achieved by overriding C<init> +in your class and working on the main lexicon +with code like that: + + package My::I18N; + ... + + sub init { + my $lh = shift; # a newborn handle + $lh->SUPER::init(); + inflate_lexicon(\%My::I18N::en::Lexicon); + return; + } + + sub inflate_lexicon { + my $lex = shift; + while (my ($k, $v) = each %$lex) { + $v = $k if !defined $v || $v eq ''; + } + } + +Here we are assuming C<My::I18N::en> to own the +main lexicon. + +There are some downsides here: the size economy +will not stand at runtime after this C<init()> +runs. But it should not be that critical, since +if you don't have space for that, you won't have +space for any other language besides the main one +as well. You could do that too with ties, +expanding the value at lookup time which +should be more time expensive as an option. + +=head1 DECIMAL PLACES IN NUMBER FORMATTING + +I<After CPAN RT #36136 (https://rt.cpan.org/Ticket/Display.html?id=36136)> + +The documentation of L<Locale::Maketext> advises that +the standard bracket method C<numf> is limited and that +you must override that for better results. It even +suggests the use of L<Number::Format>. + +One such defect of standard C<numf> is to not be +able to use a certain decimal precision. +For example, + + $lh->maketext('pi is [numf,_1]', 355/113); + +outputs + + pi is 3.14159292035398 + +Since pi â 355/116 is only accurate +to 6 decimal places, you would want to say: + + $lh->maketext('pi is [numf,_1,6]', 355/113); + +and get "pi is 3.141592". + +One solution for that could use C<Number::Format> +like that: + + package Wuu; + + use base qw(Locale::Maketext); + + use Number::Format; + + # can be overriden according to language conventions + sub _numf_params { + return ( + -thousands_sep => '.', + -decimal_point => ',', + -decimal_digits => 2, + ); + } + + # builds a Number::Format + sub _numf_formatter { + my ($lh, $scale) = @_; + my @params = $lh->_numf_params; + if ($scale) { # use explicit scale rather than default + push @params, (-decimal_digits => $scale); + } + return Number::Format->new(@params); + } + + sub numf { + my ($lh, $n, $scale) = @_; + # get the (cached) formatter + my $nf = $lh->{__nf}{$scale} ||= $lh->_numf_formatter($scale); + # format the number itself + return $nf->format_number($n); + } + + package Wuu::pt; + + use base qw(Wuu); + +and then + + my $lh = Wuu->get_handle('pt'); + $lh->maketext('A [numf,_1,3] km de distância', 1550.2222); + +would return "A 1.550,222 km de distância". + +Notice that the standard utility methods of +C<Locale::Maketext> are irremediably limited +because they could not aim to do everything +that could be expected from them in different languages, +cultures and applications. So extending C<numf>, +C<quant>, and C<sprintf> is natural as soon +as your needs exceed what the standard ones do. + + diff --git a/dist/Locale-Maketext/t/30_local.t b/dist/Locale-Maketext/t/30_local.t index 8b89777..23fa2ac 100644 --- a/dist/Locale-Maketext/t/30_local.t +++ b/dist/Locale-Maketext/t/30_local.t @@ -2,12 +2,8 @@ use strict; -use Test::More tests => 4; +use Test::More tests => 3; use Locale::Maketext; -print "# Hi there...\n"; -pass(); - -print "# --- Making sure that Perl globals are localized ---\n"; # declare a class... { @@ -20,11 +16,8 @@ print "# --- Making sure that Perl globals are localized ---\n"; } my $lh = Woozle->new(); -ok(ref $lh, 'Basic sanity'); +isa_ok($lh, 'Woozle'); $@ = 'foo'; -is($lh->maketext('Eval error: [_1]', $@), 'Eval error: foo', - 'Make sure $@ is localized'); - -print "# Byebye!\n"; -pass(); +is($lh->maketext('Eval error: [_1]', $@), 'Eval error: foo', "Make sure \$@ is localized when passed to maketext"); +is($@, 'foo', "\$@ wasn't modified during call"); diff --git a/dist/Locale-Maketext/t/70_fail_auto.t b/dist/Locale-Maketext/t/70_fail_auto.t new file mode 100644 index 0000000..44fe54d --- /dev/null +++ b/dist/Locale-Maketext/t/70_fail_auto.t @@ -0,0 +1,32 @@ +#!/usr/bin/perl -Tw + +use strict; +use Test::More tests => 5; + +BEGIN { + use_ok( 'Locale::Maketext' ); +} + +{ + package Whunk::L10N; + use vars qw(@ISA); + @ISA = 'Locale::Maketext'; +} + +{ + package Whunk::L10N::en; + use vars qw(@ISA); + @ISA = 'Whunk::L10N'; +} + +my $lh = Whunk::L10N->get_handle('en'); +$lh->fail_with('failure_handler_auto'); + +is($lh->maketext('abcd'), 'abcd', "simple missing keys are handled"); +is($lh->maketext('abcd'), 'abcd', "even in repeated calls"); +# CPAN RT #25877 - $value Not Set After Second Call to failure_handler_auto() + +is($lh->maketext('Hey, [_1]', 'you'), 'Hey, you', "keys with bracket notation ok"); + +is($lh->maketext('_key'), '_key', "keys which start with _ ok"); + -- Perl5 Master Repository