summaryrefslogtreecommitdiff
path: root/dist/Locale-Maketext
diff options
context:
space:
mode:
authorFather Chrysostomos <sprout@cpan.org>2010-09-26 18:27:03 -0700
committerFather Chrysostomos <sprout@cpan.org>2010-09-26 18:27:03 -0700
commit213a5d2cb3aa3b5c246b024e7e9c9903eba9decf (patch)
tree26478456db974317f1f40310eb96f05402cf7d6f /dist/Locale-Maketext
parentd4a59e542ce03bfe18bcffde552ee3abd4322b89 (diff)
downloadperl-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/ChangeLog19
-rw-r--r--dist/Locale-Maketext/lib/Locale/Maketext/Cookbook.pod150
-rw-r--r--dist/Locale-Maketext/t/30_local.t15
-rw-r--r--dist/Locale-Maketext/t/70_fail_auto.t32
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");
+