comparison Lib/IMPL/Resources/StringMap.pm @ 377:a0d342ac9a36

sync
author cin
date Tue, 14 Jan 2014 20:06:36 +0400
parents a54a2faf2f7e
children 2eed076cb944
comparison
equal deleted inserted replaced
376:a54a2faf2f7e 377:a0d342ac9a36
19 19
20 die ArgException->new( data => 'A hash reference is required' ) 20 die ArgException->new( data => 'A hash reference is required' )
21 unless ref($data) eq 'HASH'; 21 unless ref($data) eq 'HASH';
22 22
23 die ArgException->new( data => 'A hash must contain either scalars or subs') 23 die ArgException->new( data => 'A hash must contain either scalars or subs')
24 if grep not($_) || (ref($_) and ref($_) ne 'CODE'), values %$data; 24 if ref($_) && ref($_) ne 'CODE', values %$data;
25 25
26 $this->_data($data); 26 $this->_data($data);
27 $this->_parent($parent); 27 $this->_parent($parent);
28 } 28 }
29 29
31 my ($this,$id,$args) = @_; 31 my ($this,$id,$args) = @_;
32 32
33 if(my $format = $this->_data->{$id}) { 33 if(my $format = $this->_data->{$id}) {
34 return $this->FormatString($format,$args); 34 return $this->FormatString($format,$args);
35 } else { 35 } else {
36 return $this->_parent? $this->_parent->GetString($id,$args) : "[$id]"; 36 return $this->_parent? $this->_parent->GetString($id,$args) : "[ $id ]";
37 } 37 }
38 38
39 }
40
41 sub AddFormat {
42 my ($this,$id,$format) = @_;
43
44 die ArgException->new( id => 'A format id is required' )
45 unless $id;
46
47 die ArgException->new( format => 'A format must be a scalar or a sub' )
48 if ref($format) and ref($format) ne 'CODE';
49
50 $this->_data->{$id} = $format;
39 } 51 }
40 52
41 sub FormatString { 53 sub FormatString {
42 my ($self,$text,$args) = @_; 54 my ($self,$text,$args) = @_;
43 55
93 105
94 C<IMPL::Web::Resources::StringMap> 106 C<IMPL::Web::Resources::StringMap>
95 107
96 =head1 SYNOPSIS 108 =head1 SYNOPSIS
97 109
98 My/App/locale/default/Search.labels
99
100 My/App/locale/en/Search.map
101
102 =begin code 110 =begin code
103 111
104 { 112 use IMPL::require {
113 StringMap => 'IMPL::Resources::StringMap'
114 };
115
116 my $data = {
105 TitleLabel => 'Search results', 117 TitleLabel => 'Search results',
106 ViewLabel => 'View %name%', # same as sub { $_[0]->Format('View %name%',$_[1]) } 118 ViewLabel => 'View %name%', # same as sub { $_[0]->Format('View %name%',$_[1]) }
107 ResultsCountLabel => sub { 119 ResultsCountLabel => sub {
108 my ($self,$args) = @_; 120 my ($self,$args) = @_;
109 121
112 if (not $args->{count}) { 124 if (not $args->{count}) {
113 return "No items found"; 125 return "No items found";
114 } elsif($args->{count} == 1) { 126 } elsif($args->{count} == 1) {
115 return "Found one item"; 127 return "Found one item";
116 } else { 128 } else {
117 return $self->Format("Found %count% items", $args); 129 return $self->Format('Found %count% items', $args);
118 } 130 }
119 } 131 }
120 } 132 }
133
134 my $def = StringMap->new({
135 ResultsCountLabel => 'Found %count% items'
136 });
137
138 my $map = StringMap->new($data, $def);
139
140 print $map->GetString('TitleLabel');
141 print $map->GetString(ResultsCountLabel => { count => 0 }); # will print "No items found"
142
121 143
122 =end code 144 =end code
123 145
124 =head1 DESCRIPTION 146 =head1 DESCRIPTION
125 147
126 =head 148 =head1 MEMBERS
127 149
128 =cut 150 =cut