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