File Coverage

blib/lib/Ado/I18n.pm
Criterion Covered Total %
statement 22 22 100.0
branch 2 2 100.0
condition n/a
subroutine 4 4 100.0
pod 1 1 100.0
total 29 29 100.0


line stmt bran cond sub pod time code
1             package Ado::I18n;
2 23     23   14862 use Mojo::Base 'Locale::Maketext';
  23         42  
  23         183  
3             our %Lexicon = (_AUTO => 1); ##no critic(ProhibitPackageVars)
4              
5             sub get_handle {
6 109     109 1 249 my ($class, $language, $c, $config) = @_;
7 109         189 state $loaded = {};
8              
9 109         175 my $self = $class->SUPER::get_handle($language, @{$$config{languages}});
  109         1058  
10             $self->_load_messages_from_db($c->dbix, $$config{default_language})
11 109 100       44247 unless $loaded->{$language};
12 109         312 $loaded->{$language} = 1;
13 109         505 return $self;
14             }
15              
16             sub _load_messages_from_db {
17 20     20   40332 my ($self, $dbix, $default) = @_;
18 20         58 my $SQL = <<'SQL';
19             SELECT d.msgid AS msgid,(
20             CASE
21             WHEN cl.msgstr IS NULL OR cl.msgstr=''
22             THEN d.msgstr
23             ELSE cl.msgstr
24             END) AS msgstr
25             -- default language
26             FROM (SELECT msgid, msgstr FROM i18n WHERE lang=?) d
27             -- current language
28             LEFT JOIN (SELECT msgid, msgstr FROM i18n WHERE lang=?) cl
29             ON (cl.msgid=d.msgid)
30             SQL
31              
32             #get messages from database
33 20         240 my %lex = $dbix->query($SQL, $default, $self->language_tag)->map;
34             {
35 23     23   146954 no strict 'refs'; ## no critic (ProhibitNoStrict)
  23         52  
  23         2414  
  20         8119  
36 20         2181 my $class_lex = ref($self) . '::Lexicon';
37 20         47 %{$class_lex} = (%{$class_lex}, %lex);
  20         539  
  20         311  
38             };
39 20         184 return;
40             }
41              
42             1;
43              
44             =pod
45              
46             =encoding utf8
47              
48             =head1 NAME
49              
50             Ado::I18n - Languages' lexicons and handle namespace
51              
52             =head1 DESCRIPTION
53              
54             This class is used to instantiate the language handle in L.
55              
56             =head1 METHODS
57              
58             This class inherits all methods from L and defines the
59             following ones.
60              
61             =head2 get_handle
62              
63             Constructor
64              
65             my $i18n = Ado::I18n->get_handle('bg', $c, $config);
66             $i18n->maketext('hello',$user->name); # Здравей, Красимир Беров
67              
68              
69             =head1 SEE ALSO
70              
71             L, L, L,
72              
73             =head1 SPONSORS
74              
75             The original author
76              
77             =head1 AUTHOR
78              
79             Красимир Беров (Krasimir Berov)
80              
81             =head1 COPYRIGHT AND LICENSE
82              
83             Copyright 2014 Красимир Беров (Krasimir Berov).
84              
85             This program is free software, you can redistribute it and/or
86             modify it under the terms of the
87             GNU Lesser General Public License v3 (LGPL-3.0).
88             You may copy, distribute and modify the software provided that
89             modifications are open source. However, software that includes
90             the license may release under a different license.
91              
92             See http://opensource.org/licenses/lgpl-3.0.html for more information.
93              
94             =cut
95