Locale-Babelfish
view release on metacpan or search on metacpan
lib/Locale/Babelfish.pm view on Meta::CPAN
if ( ref($params) eq '' ) {
$flat_params = {
count => $params,
value => $params,
};
}
else {
_flat_hash_keys( $params, '', $flat_params );
}
}
return $r->( $flat_params );
}
return $r;
}
sub t {
my $self = shift;
return $self->t_or_undef( @_ ) || "[$_[0]]";
}
sub has_any_value {
my ( $self, $dictname_key, $custom_locale ) = @_;
# запÑеÑаем клÑÑи не ASCII
confess("wrong dictname_key: $dictname_key") if $dictname_key =~ m/\P{ASCII}/;
my $locale = $custom_locale ? $self->detect_locale( $custom_locale ) : $self->{locale};
return 1 if $self->{dictionaries}->{$locale}->{$dictname_key};
$self->{fallback_cache}->{$locale} //= {};
return ( ( defined $self->{fallback_cache}->{$locale}->{$dictname_key} ) ? 1 : 0 )
if exists $self->{fallback_cache}->{$locale}->{$dictname_key};
my @fallback_locales = @{ $self->{fallbacks}->{$locale} // [] };
for ( @fallback_locales ) {
return 1 if defined $self->{dictionaries}->{$_}->{$dictname_key};
}
}
sub load_dictionaries {
my $self = shift;
for my $dir ( @{$self->dirs} ) {
my $fdir = File::Spec->rel2abs( $dir );
find( {
follow => 1,
no_chdir => 1,
wanted => sub {
my $file = File::Spec->rel2abs( $File::Find::name );
return unless -f $file;
my ( $volume, $directories, $base ) = File::Spec->splitpath( $file );
my @tmp = split m/\./, $base;
my $cur_suffix = pop @tmp;
return unless $cur_suffix eq $self->suffix;
my $lang = pop @tmp;
pop @tmp if $tmp[-1] eq 'tt'; # ÑловаÑи вида formatting.tt.ru_RU.yaml - имеÑÑ Ð¸Ð¼Ñ formatting
if ( $tmp[-1] eq 'js') {
# ÑловаÑи .js пеÑекÑÑваÑÑ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÑннÑе ÑловаÑи без ÑÑÑÑикÑа
# еÑли ÑÑо нежелаÑелÑное поведение - ÑловаÑÑ Ñ ÑÑÑÑикÑом .tt пеÑекÑÐ¾ÐµÑ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÑннÑй .js, и бÑÐ´ÐµÑ Ð´Ð¾ÑÑÑпен ÑолÑко на ÑеÑвеÑе
pop @tmp; # ÑловаÑи вида formatting.js.ru_RU.yaml - имеÑÑ Ð¸Ð¼Ñ formatting
# и не загÑÑжаÑÑÑÑ, еÑли еÑÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑй tt.
return if -f File::Spec->catpath( $volume, $directories, join('.', @tmp). ".tt.$lang.$cur_suffix" );
}
my $dictname = join('.', @tmp);
my $subdir = File::Spec->catpath( $volume, $directories, '' );
if ( $subdir =~ m/\A\Q$fdir\E[\\\/](.+)\z/ ) {
$dictname = "$1$dictname";
}
$self->load_dictionary($dictname, $lang, $file);
},
}, $dir );
}
$self->prepare_to_compile;
}
sub load_dictionary {
my ( $self, $dictname, $lang, $file ) = @_;
$self->dictionaries->{$lang} //= {};
my $yaml = load_yaml( $file );
_flat_hash_keys( $yaml, "$dictname.", $self->dictionaries->{$lang} );
return unless $self->watch;
$self->watchers->{$file} = (stat($file))[MTIME_INDEX];
}
sub phrase_need_compilation {
my ( undef, $phrase, $key ) = @_;
die "L10N: $key is undef" unless defined $phrase;
return 1
&& ref($phrase) eq ''
&& $phrase =~ m/ (?: \(\( | \#\{ | \\\\ )/x
;
}
sub prepare_to_compile {
my ( $self ) = @_;
while ( my ($lang, $dic) = each(%{ $self->{dictionaries} }) ) {
while ( my ($key, $value) = each(%$dic) ) {
if ( $self->phrase_need_compilation( $value, $key ) ) {
$dic->{$key} = \$value; # оÑÐ»Ð¾Ð¶ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑиÑ
#my $ast = $parser->parse($value, $lang);
( run in 0.556 second using v1.01-cache-2.11-cpan-71847e10f99 )