NAME
Locale::Babelfish - wrapper between Locale::Maketext::Lexicon and
github://nodeca/babelfish format
VERSION
version 0.05
SYNOPSIS
package Foo;
use Locale::Babelfish;
my $bf = Locale::Babelfish->new( { dirs => [ '/path/to/dictionaries' ] } );
print $bf->t('dictionary.firstkey.nextkey', { foo => 'bar' } );
More sophisticated example:
package Foo::Bar;
use Locale::Babelfish;
my $bf = Locale::Babelfish->new(
# configuration
{
dirs => [ '/path/to/dictionaries' ],
default_lang => [ 'ru_RU' ], # By default en_US
langs => [
{ 'uk_UA' => 'Foo::Bar::Lang::uk_UA' },
'de_DE',
], # for custom languages specify they are plural forms
},
# logger, for example Log::Log4Perl (not required parameter)
$logger
);
# use default language
print $bf->t('dictionary.firstkey.nextkey', { foo => 'bar' } );
# switch language
$bf->set_context_lang('en_US');
print $bf->t('dictionary.firstkey.nextkey', { foo => 'bar' } );
DESCRIPTION
Internationalisation with easy syntax. Simple wrapper between
Locale::Maketext and <
https://github.com/nodeca/babelfish> format.
Created for using same dictionaries on backend and frontend.
METHODS
new
Constructor
my $bf = Locale::Babelfish->new( {
dirs => [ '/path/to/dictionaries' ], # is required
suffix => 'yaml', # dictionaries extension
default_lang => 'ru_RU', # by default en_US
langs => [ 'de_DE', 'fr_FR', 'uk_UA' => 'Foo::Bar::Lang::uk_UA' ]
}, $logger );
set_context_lang
Setting current context.
$self->set_context_lang( 'ru_RU' );
check_dictionaries
Check what changed at dictionaries. And renew dictionary content without
restart.
$self->check_dictionaries();
t
Get internationalized value for key from dictionary.
$self->t( 'main.key.subkey' , { param1 => 1 , param2 => { next_level => 'test' } } );
Where "main" - is dictionary, "key.subkey" - key at dictionary.
has_any_value
Check exist or not key in dictionary.
$self->has_any_value( 'main.key.subkey' );
Where "main" - is dictionary, "key.subkey" - key at dictionary.
maketext
same as t, but parameters for substitute are sequential
$self->maketext( 'dict', 'key.subkey ' , $param1, ... $paramN );
Where "dict" - is dictionary, "key.subkey" - key at dictionary.
DICTIONARIES
Phrases Syntax
#{varname} Echoes value of variable ((Singular|Plural1|Plural2)):count
Plural form
Example:
I have #{count} ((nail|nails)):count
or short form
I have #{count} ((nail|nails))
Dictionary file example
Module support only YAML format. Create dictionary file like:
dictionary.en_US.yaml where "dictionary" is name of dictionary and
"en_US" - its locale.
profile: Profiel
apps:
forums:
new_topic: New topic
last_post:
title : Last message
demo:
apples: I have #{count} ((apple|apples))
Custom plural forms
By default locale will be inherited from "en_US". If you would like
specify own, create module like this and implement quant_word function.
package Locale::Babelfish::Lang::uk_UA;
use strict;
use parent 'Locale::Babelfish::Maketext';
sub quant_word {
my ($self, $num, $single, $plural1, $plural2) = @_;
my $num_s = $num % 10;
my $num_dec = $num % 100;
my $ret;
if ($num_dec >= 10 and $num_dec <= 20) { $ret = $plural2 || $plural1 || $single }
elsif ($num_s == 1) { $ret = $single }
elsif ($num_s >= 2 and $num_s <= 4) { $ret = $plural1 || $single }
else { $ret = $plural2 || $plural1 || $single }
return $ret;
}
Encoding
Use any convinient encoding. But better use utf8 with BOM.
SEE ALSO
Locale::Maketext::Lexicon
<
https://github.com/nodeca/babelfish>
AUTHORS
* Igor Mironov <
[email protected]>
* Crazy Panda LLC
* REG.RU LLC
COPYRIGHT AND LICENSE
This software is Copyright (c) 2014 by Igor Mironov.
This is free software, licensed under:
The MIT (X11) License