package Locale::TextDomain::OO::Plugin::Language::LanguageOfLanguages; ## no critic (Tidy Code)
use strict;
use warnings;
use Locale::TextDomain::OO::Singleton::Lexicon;
use Locale::TextDomain::OO::Util::JoinSplitLexiconKeys;
use Moo::Role;
use MooX::Types::MooseLike::Base qw(Str ArrayRef);
use namespace::autoclean;
our $VERSION = '1.014';
with qw(
Locale::TextDomain::OO::Role::Logger
);
requires qw(
language
category
domain
project
);
has languages => (
is => 'rw',
isa => ArrayRef[Str],
trigger => 1,
lazy => 1,
default => sub { [] },
);
sub _trigger_languages { ## no critic (UnusedPrivateSubroutines)
my ($self, $languages) = @_;
my $lexicon = Locale::TextDomain::OO::Singleton::Lexicon->instance->data;
for my $language ( @{$languages} ) {
for my $key ( keys %{$lexicon} ) {
my $lexicon_key = Locale::TextDomain::OO::Util::JoinSplitLexiconKeys
->instance
->join_lexicon_key({
language => lc $language,
category => $self->category,
domain => $self->domain,
project => $self->project,
});
if ( $key eq $lexicon_key ) {
$self->language( lc $language );
return;
}
}
}
$self->language('i-default');
$self->logger
and $self->logger->(
'Fallback language "i-default" selected.',
{
object => $self,
type => 'warn',
event => 'language,selection,fallback',
},
);
return;
}
1;
__END__
=head1 NAME
Locale::TextDomain::OO::Plugin::Language::LanguageOfLanguages - Select a language of a list
$Id: LanguageOfLanguages.pm 603 2015-08-09 16:46:25Z steffenw $
$HeadURL: svn+ssh://steffenw@svn.code.sf.net/p/perl-gettext-oo/code/module/trunk/lib/Locale/TextDomain/OO/Plugin/Language/LanguageOfLanguages.pm $
=head1 VERSION
1.014
=head1 DESCRIPTION
This plugin provides the languages method.
After set of languages it will find and set the first language match in lexicon.
Otherwise language is set to i-default.
=head1 SYNOPSIS
$loc = Locale::TextDomain::OO->new(
plugins => [ qw (
Language::LanguageOfLanguages
...
) ],
...
);
=head1 SUBROUTINES/METHODS
=head2 method languages
E.g. if exists no lexicon for "de-de" but one for "de"
the language is set to "de";
$loc->languages([ qw( de-de de en ) ]);
And read back what languages are set.
$languages_ref = $loc->languages;
=head1 EXAMPLE
Inside of this distribution is a directory named example.
Run this *.pl files.
=head1 DIAGNOSTICS
none
=head1 CONFIGURATION AND ENVIRONMENT
none
=head1 DEPENDENCIES
L<Locale::TextDomain::OO::Singleton::Lexicon|Locale::TextDomain::OO::Singleton::Lexicon>
L<Locale::TextDomain::OO::Util::JoinSplitLexiconKeys|Locale::TextDomain::OO::Util::JoinSplitLexiconKeys>
L<Moo::Role|Moo::Role>
L<MooX::Types::MooseLike::Base|MooX::Types::MooseLike::Base>
L<namespace::autoclean|namespace::autoclean>
=head1 INCOMPATIBILITIES
not known
=head1 BUGS AND LIMITATIONS
none
=head1 SEE ALSO
L<Locale::TextDoamin::OO|Locale::TextDoamin::OO>
=head1 AUTHOR
Steffen Winkler
=head1 LICENSE AND COPYRIGHT
Copyright (c) 2013 - 2014,
Steffen Winkler
C<< <steffenw at cpan.org> >>.
All rights reserved.
This module is free software;
you can redistribute it and/or modify it
under the same terms as Perl itself.