File Coverage

lib/Petal/TranslationService/Gettext.pm
Criterion Covered Total %
statement 42 42 100.0
branch 7 8 87.5
condition 6 13 46.1
subroutine 9 9 100.0
pod 0 4 0.0
total 64 76 84.2


line stmt bran cond sub pod time code
1             package Petal::TranslationService::Gettext;
2 1     1   493 use Petal::TranslationService::MOFile;
  1         2  
  1         28  
3 1     1   5 use warnings;
  1         2  
  1         24  
4 1     1   5 use strict;
  1         2  
  1         459  
5              
6             sub new
7             {
8 3     3 0 602 my $class = shift;
9 3         11 return bless {
10             # defaults...
11             locale_dir => '/usr/share/locale',
12             target_lang => 'en',
13              
14             # optional overriding args
15             @_,
16             }, $class;
17             }
18              
19              
20             sub maketext
21             {
22 3     3 0 5 my $self = shift;
23 3         8 my $tsrv = $self->mo_file_translation_service();
24 3 100       14 ref $tsrv and return $tsrv->maketext (@_);
25 1         12 return;
26             }
27              
28              
29             sub target_lang
30             {
31 3     3 0 4 my $self = shift;
32 3         6 $self->{target_lang} =~ s/-/_/;
33 3         7 return $self->{target_lang};
34             }
35              
36              
37             sub mo_file_translation_service
38             {
39 3     3 0 5 my $self = shift;
40 3   50     8 my $domain = $Petal::I18N::Domain || 'default';
41 3   50     17 $self->{mo_file_tranlation_services} ||= {};
42 3   33     14 $self->{mo_file_tranlation_services}->{$domain} ||= $self->_mo_file_translation_service();
43 3         16 return $self->{mo_file_tranlation_services}->{$domain};
44             }
45              
46              
47             sub _mo_file_translation_service
48             {
49 3     3   4 my $self = shift;
50 3   50     7 my $target_lang = $self->target_lang() || die 'target_lang() returned undef';
51 3   50     8 my $domain = $Petal::I18N::Domain || 'default';
52 3         4 my $res = undef;
53              
54 3         8 $res = $self->_instanciate_mo_file_tranlation_service_if_file_exists ($target_lang);
55 3 100       16 $res && return $res;
56              
57 1         2 $target_lang =~ s/_.*$//;
58              
59 1         3 $res = $self->_instanciate_mo_file_tranlation_service_if_file_exists ($target_lang);
60 1 50       9 $res && return $res;
61              
62 1         4 return '__none__';
63             }
64              
65              
66             sub _instanciate_mo_file_tranlation_service_if_file_exists
67             {
68 4     4   6 my $self = shift;
69 4         6 my $target_lang = $self->{target_lang};
70 4   50     10 my $domain = $Petal::I18N::Domain || 'default';
71              
72 4         4 my $locale_dir = $self->{locale_dir};
73 4         8 $locale_dir =~ s/\/$//;
74              
75 4         9 my $mo_file_relative_path = "/$target_lang/LC_MESSAGES/$domain.mo";
76 4         8 my $mo_file_absolute_path = $locale_dir . $mo_file_relative_path;
77              
78 4 100       102 -e $mo_file_absolute_path or return;
79 2         20 return Petal::TranslationService::MOFile->new ($mo_file_absolute_path);
80             }
81              
82              
83             1;
84              
85              
86             __END__