summaryrefslogtreecommitdiff
path: root/lib/JWebmail/Plugin/I18N2/Maketext.pm
diff options
context:
space:
mode:
authorJannis M. Hoffmann <jannis@fehcom.de>2022-11-16 23:11:42 +0100
committerJannis M. Hoffmann <jannis@fehcom.de>2022-11-16 23:11:42 +0100
commita52a7d7c27440a7c2716af033a6113abcaa2bd46 (patch)
tree0b40912e689dfed35306558b3b41e6a98f169c39 /lib/JWebmail/Plugin/I18N2/Maketext.pm
parentb36eada764601355be4616fb92822ffabdcb1dc8 (diff)
split I18N2 plugin into multiple files and added translate role
Diffstat (limited to 'lib/JWebmail/Plugin/I18N2/Maketext.pm')
-rw-r--r--lib/JWebmail/Plugin/I18N2/Maketext.pm55
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/JWebmail/Plugin/I18N2/Maketext.pm b/lib/JWebmail/Plugin/I18N2/Maketext.pm
new file mode 100644
index 0000000..a38bba7
--- /dev/null
+++ b/lib/JWebmail/Plugin/I18N2/Maketext.pm
@@ -0,0 +1,55 @@
+package JWebmail::Plugin::I18N2::Maketext;
+
+use v5.22;
+use warnings;
+use utf8;
+
+use JWebmail::I18N;
+
+use File::Basename 'fileparse';
+
+use Role::Tiny::With;
+with 'JWebmail::Plugin::I18N2::Role';
+
+
+sub new {
+ my $class = shift;
+ my $conf = @_ == 1 ? shift : {@_};
+
+ my $lexica = $conf->{directory} || [fileparse(__FILE__)]->[1] . '../I18N';
+
+ my @languages = keys %{$conf->{languages} // {}};
+
+ unless (@languages) {
+ use autodie;
+
+ opendir(my $dh, $lexica);
+ my @res = grep { /\.pm$/ && -f "$lexica/$_" } readdir $dh;
+ closedir($dh);
+ @languages = map { scalar fileparse $_, '.pm' } @res;
+ @languages = map { my ($l, $c) = split '_', $_, 2; $c ? "$l-\U$c" : $l } @languages;
+ }
+
+ if (my $dl = $conf->{default_language}) { push @languages, $dl; };
+ my $self = {};
+ for (@languages) {
+ $self->{$_} = JWebmail::I18N->get_handle($_) || die "unable to load language $_";
+ }
+
+ if (my $l = $conf->{log}) {
+ $_->logger($l) for values %$self;
+ }
+
+ return bless $self, $class;
+}
+
+sub loaded_languages { grep { $_ !~ /^_/ } keys $_[0]->%* }
+
+sub translate {
+ my $self = shift;
+ my $lang = shift;
+ my $phrase = shift;
+ return $self->{$lang}->maketext($phrase, @_);
+}
+
+1