From 573e68cc026cddd6e52d2f2027da388054a128d1 Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Thu, 30 Jan 2014 13:16:14 -0800 Subject: [PATCH] localize CDR column headings, #27276 --- FS/FS/Locales.pm | 8 ++++++- FS/FS/detail_format.pm | 34 ++++++++++++++++++++++++++---- FS/FS/detail_format/accountcode_default.pm | 5 ++--- FS/FS/detail_format/accountcode_simple.pm | 5 ++--- FS/FS/detail_format/basic.pm | 3 +-- FS/FS/detail_format/default.pm | 5 ++--- FS/FS/detail_format/description_default.pm | 5 ++--- FS/FS/detail_format/simple.pm | 5 ++--- FS/FS/detail_format/simple2.pm | 5 ++--- FS/FS/detail_format/source_default.pm | 5 ++--- FS/FS/part_pkg/voip_cdr.pm | 5 ++++- FS/FS/part_pkg/voip_inbound.pm | 6 +++++- 12 files changed, 61 insertions(+), 30 deletions(-) diff --git a/FS/FS/Locales.pm b/FS/FS/Locales.pm index bf10990a9..6dd7c5a08 100644 --- a/FS/FS/Locales.pm +++ b/FS/FS/Locales.pm @@ -52,7 +52,13 @@ Returns a hash of information about a locale. sub locale_info { my($class, $locale) = @_; - %{ $locales{$locale} }; + if (!$locale) { + return (); + } elsif (exists $locales{$locale}) { + return %{ $locales{$locale} }; + } else { + die "unsupported locale '$locale'\n"; + } } =item description LOCALE diff --git a/FS/FS/detail_format.pm b/FS/FS/detail_format.pm index 88cc02f83..665afdb7a 100644 --- a/FS/FS/detail_format.pm +++ b/FS/FS/detail_format.pm @@ -5,7 +5,8 @@ use vars qw( $DEBUG ); use FS::Conf; use FS::cdr; use FS::cust_bill_pkg_detail; -use Date::Format qw(time2str); +use FS::L10N; +use Date::Language; use Text::CSV_XS; my $me = '[FS::detail_format]'; @@ -44,6 +45,9 @@ OPTIONS may contain: rated_price, rated_seconds, rated_minutes, and svcnum. This can be changed with the C method. +- locale: a locale string to use for static text and date formats. This + is optional. + =cut sub new { @@ -58,11 +62,21 @@ sub new { die "$me error loading $class: $@" if $@; my %opt = @_; - my $self = { conf => FS::Conf->new, + my $locale = $opt{'locale'} || ''; + my $conf = FS::Conf->new(locale => $locale); + $locale ||= $conf->config('locale') || 'en_US'; + + my %locale_info = FS::Locales->locale_info($locale); + my $language_name = $locale_info{'name'}; + + my $self = { conf => FS::Conf->new(locale => $locale), csv => Text::CSV_XS->new, inbound => ($opt{'inbound'} ? 1 : 0), buffer => ($opt{'buffer'} || []), - }; + _lh => FS::L10N->get_handle($locale), + _dh => eval { Date::Language->new($language_name) } || + Date::Language->new() + }; bless $self, $class; } @@ -139,7 +153,7 @@ sub header { my $self = shift; FS::cust_bill_pkg_detail->new( - { 'format' => 'C', 'detail' => $self->header_detail } + { 'format' => 'C', 'detail' => $self->mt($self->header_detail) } ) } @@ -228,6 +242,18 @@ sub money_char { $self->{money_char} ||= ($self->conf->config('money_char') || '$'); } +# localization methods + +sub time2str_local { + my $self = shift; + $self->{_dh}->time2str(@_); +} + +sub mt { + my $self = shift; + $self->{_lh}->maketext(@_); +} + #imitate previous behavior for now sub duration { diff --git a/FS/FS/detail_format/accountcode_default.pm b/FS/FS/detail_format/accountcode_default.pm index f76c9d5c0..562a8a921 100644 --- a/FS/FS/detail_format/accountcode_default.pm +++ b/FS/FS/detail_format/accountcode_default.pm @@ -2,7 +2,6 @@ package FS::detail_format::accountcode_default; use strict; use base qw(FS::detail_format); -use Date::Format qw(time2str); sub name { 'Default with accountcode' } @@ -12,8 +11,8 @@ sub columns { my $self = shift; my $cdr = shift; ( - time2str($self->date_format, $cdr->startdate), - time2str('%r', $cdr->startdate), + $self->time2str_local($self->date_format, $cdr->startdate), + $self->time2str_local('%r', $cdr->startdate), $cdr->accountcode, ($cdr->rated_pretty_dst || $cdr->dst), $cdr->rated_regionname, diff --git a/FS/FS/detail_format/accountcode_simple.pm b/FS/FS/detail_format/accountcode_simple.pm index 10a28db10..5a1931068 100644 --- a/FS/FS/detail_format/accountcode_simple.pm +++ b/FS/FS/detail_format/accountcode_simple.pm @@ -2,7 +2,6 @@ package FS::detail_format::accountcode_simple; use strict; use base qw(FS::detail_format); -use Date::Format qw(time2str); sub name { 'Simple with source' } @@ -12,8 +11,8 @@ sub columns { my $self = shift; my $cdr = shift; ( - time2str($self->date_format, $cdr->startdate), - time2str('%r', $cdr->startdate), + $self->time2str_local($self->date_format, $cdr->startdate), + $self->time2str_local('%r', $cdr->startdate), $cdr->src, $cdr->accountcode, $self->duration($cdr), diff --git a/FS/FS/detail_format/basic.pm b/FS/FS/detail_format/basic.pm index 811cf403b..c45e92680 100644 --- a/FS/FS/detail_format/basic.pm +++ b/FS/FS/detail_format/basic.pm @@ -2,7 +2,6 @@ package FS::detail_format::basic; use strict; use base qw(FS::detail_format); -use Date::Format qw(time2str); sub name { 'Basic' } @@ -12,7 +11,7 @@ sub columns { my $self = shift; my $cdr = shift; ( - time2str('%d %b - %I:%M %p', $cdr->startdate), + $self->time2str_local('%d %b - %I:%M %p', $cdr->startdate), $cdr->dst, $self->duration($cdr), $self->price($cdr), diff --git a/FS/FS/detail_format/default.pm b/FS/FS/detail_format/default.pm index 6c73d0869..44abc83c7 100644 --- a/FS/FS/detail_format/default.pm +++ b/FS/FS/detail_format/default.pm @@ -2,7 +2,6 @@ package FS::detail_format::default; use strict; use base qw(FS::detail_format); -use Date::Format qw(time2str); sub name { 'Default' } @@ -12,8 +11,8 @@ sub columns { my $self = shift; my $cdr = shift; ( - time2str($self->date_format, $cdr->startdate), - time2str('%r', $cdr->startdate), + $self->time2str_local($self->date_format, $cdr->startdate), + $self->time2str_local('%r', $cdr->startdate), ($cdr->rated_pretty_dst || $cdr->dst), $cdr->rated_regionname, $self->duration($cdr), diff --git a/FS/FS/detail_format/description_default.pm b/FS/FS/detail_format/description_default.pm index 42e1725a1..7bc3ee292 100644 --- a/FS/FS/detail_format/description_default.pm +++ b/FS/FS/detail_format/description_default.pm @@ -2,7 +2,6 @@ package FS::detail_format::description_default; use strict; use base qw(FS::detail_format); -use Date::Format qw(time2str); sub name { 'Default with description field as destination' } @@ -13,8 +12,8 @@ sub columns { my $cdr = shift; ( $cdr->src, - time2str($self->date_format, $cdr->startdate), - time2str('%r', $cdr->startdate), + $self->time2str_local($self->date_format, $cdr->startdate), + $self->time2str_local('%r', $cdr->startdate), ($cdr->rated_pretty_dst || $cdr->dst), $cdr->description, $self->duration($cdr), diff --git a/FS/FS/detail_format/simple.pm b/FS/FS/detail_format/simple.pm index ef927062c..9622e32ba 100644 --- a/FS/FS/detail_format/simple.pm +++ b/FS/FS/detail_format/simple.pm @@ -2,7 +2,6 @@ package FS::detail_format::simple; use strict; use base qw(FS::detail_format); -use Date::Format qw(time2str); sub name { 'Simple' } @@ -12,8 +11,8 @@ sub columns { my $self = shift; my $cdr = shift; ( - time2str($self->date_format, $cdr->startdate), - time2str('%r', $cdr->startdate), + $self->time2str_local($self->date_format, $cdr->startdate), + $self->time2str_local('%r', $cdr->startdate), $cdr->userfield, $cdr->dst, $self->duration($cdr), diff --git a/FS/FS/detail_format/simple2.pm b/FS/FS/detail_format/simple2.pm index 82773d28c..d57114171 100644 --- a/FS/FS/detail_format/simple2.pm +++ b/FS/FS/detail_format/simple2.pm @@ -2,7 +2,6 @@ package FS::detail_format::simple2; use strict; use base qw(FS::detail_format); -use Date::Format qw(time2str); sub name { 'Simple with source' } @@ -12,8 +11,8 @@ sub columns { my $self = shift; my $cdr = shift; ( - time2str($self->date_format, $cdr->startdate), - time2str('%r', $cdr->startdate), + $self->time2str_local($self->date_format, $cdr->startdate), + $self->time2str_local('%r', $cdr->startdate), $cdr->userfield, $cdr->src, $cdr->dst, diff --git a/FS/FS/detail_format/source_default.pm b/FS/FS/detail_format/source_default.pm index 1f46cd225..592fd3c23 100644 --- a/FS/FS/detail_format/source_default.pm +++ b/FS/FS/detail_format/source_default.pm @@ -2,7 +2,6 @@ package FS::detail_format::source_default; use strict; use base qw(FS::detail_format); -use Date::Format qw(time2str); sub name { 'Default with source' } @@ -13,8 +12,8 @@ sub columns { my $cdr = shift; ( $cdr->src, - time2str($self->date_format, $cdr->startdate), - time2str('%r', $cdr->startdate), + $self->time2str_local($self->date_format, $cdr->startdate), + $self->time2str_local('%r', $cdr->startdate), ($cdr->rated_pretty_dst || $cdr->dst), $cdr->rated_regionname, $self->duration($cdr), diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm index a55832d69..229d4f66c 100644 --- a/FS/FS/part_pkg/voip_cdr.pm +++ b/FS/FS/part_pkg/voip_cdr.pm @@ -418,7 +418,10 @@ sub calc_usage { my $usage_showzero = $self->option('usage_showzero', 1); - my $formatter = FS::detail_format->new($output_format, buffer => $details); + my $formatter = FS::detail_format->new($output_format, + buffer => $details, + locale => $cust_pkg->cust_main->locale + ); my $use_duration = $self->option('use_duration'); diff --git a/FS/FS/part_pkg/voip_inbound.pm b/FS/FS/part_pkg/voip_inbound.pm index 1566c18fe..052bb7f9f 100644 --- a/FS/FS/part_pkg/voip_inbound.pm +++ b/FS/FS/part_pkg/voip_inbound.pm @@ -218,7 +218,11 @@ sub calc_usage { my $output_format = $self->option('output_format', 1) || 'default'; my $formatter = - FS::detail_format->new($output_format, buffer => $details, inbound => 1); + FS::detail_format->new($output_format, + buffer => $details, + inbound => 1, + locale => $cust_pkg->cust_main->locale + ); my $granularity = length($self->option('sec_granularity')) ? $self->option('sec_granularity') -- 2.11.0