diff options
author | Father Chrysostomos <sprout@cpan.org> | 2010-09-26 18:27:03 -0700 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2010-09-26 18:27:03 -0700 |
commit | 213a5d2cb3aa3b5c246b024e7e9c9903eba9decf (patch) | |
tree | 26478456db974317f1f40310eb96f05402cf7d6f /dist/Locale-Maketext | |
parent | d4a59e542ce03bfe18bcffde552ee3abd4322b89 (diff) | |
download | perl-213a5d2cb3aa3b5c246b024e7e9c9903eba9decf.tar.gz |
From: Todd Rinaldo <toddr@cpanel.net>
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. Convert t/30_local.t to Test::More (the other files were already
done in blead. This one was missed.
3. Add a cookbook pod file.
4. Changelog entries which were on CPAN but not in blead.
Diffstat (limited to 'dist/Locale-Maketext')
-rw-r--r-- | dist/Locale-Maketext/ChangeLog | 19 | ||||
-rw-r--r-- | dist/Locale-Maketext/lib/Locale/Maketext/Cookbook.pod | 150 | ||||
-rw-r--r-- | dist/Locale-Maketext/t/30_local.t | 15 | ||||
-rw-r--r-- | dist/Locale-Maketext/t/70_fail_auto.t | 32 |
4 files changed, 205 insertions, 11 deletions
diff --git a/dist/Locale-Maketext/ChangeLog b/dist/Locale-Maketext/ChangeLog index 239870410d..16891a1fb4 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/Cookbook.pod b/dist/Locale-Maketext/lib/Locale/Maketext/Cookbook.pod new file mode 100644 index 0000000000..6063b0faa1 --- /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 8b89777e20..23fa2ac551 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 0000000000..44fe54d1b5 --- /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"); + |