The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Locale::TextDomain::OO::Plugin::Expand::Gettext - Additional gettext methods, prefixed with __

$Id: Gettext.pm 651 2017-05-31 18:10:43Z steffenw $

$HeadURL: svn+ssh://steffenw@svn.code.sf.net/p/perl-gettext-oo/code/module/trunk/lib/Locale/TextDomain/OO/Plugin/Expand/Gettext.pm $

VERSION

1.027

DESCRIPTION

This module provides an additional getext methods for static domain and category handling.

SYNOPSIS

    my $loc = Locale::Text::TextDomain::OO->new(
        plugins => [ qw (
            Expand::Gettext
            ...
        )],
        ...
    );

Optional type formatting or grammar stuff see Locale::Utils::PlaceholderNamed for possible methods.

    $loc->expand_gettext->modifier_code($code_ref);

SUBROUTINES/METHODS

method expand_gettext

Returns the Locale::Utils::PlaceholderNamed object to be able to set some options.

    my $expander_object = $self->expand_gettext;

e.g.

    $self->expand_gettext->modifier_code(
        sub {
            my ( $value, $attribute ) = @_;
            if ( $attribute eq 'numf' ) {
                # modify that numeric $value
                # e.g. change 1234.56 to 1.234,56 or 1,234.56
                ...
            }
            elsif ( $attribute eq 'accusative' ) {
                # modify the string with that grammar rule
                # e.g. needed for East-European languages
                # write grammar rules only on msgstr/msgstr_plural[n]
                # and not on msgid
                ...
            }
            ...
            return $value;
        },
    );

translation methods

How to build the method name?

Use __ and append this with "n", "p" and/or "x" in alphabetic order.

 .------------------------------------------------------------------------.
 | Snippet | Description                                                  |
 |---------+--------------------------------------------------------------|
 | __      | Special marked for extraction.                               |
 | n       | Using plural forms.                                          |
 | p       | Context is the first parameter.                              |
 | x       | Last parameters as hash/hash_ref are for named placeholders. |
 '------------------------------------------------------------------------'

method __

Translate only

    print $loc->__(
        'Hello World!',
    );

method __x

Expand named placeholders

    print $loc->__x(
        'Hello {name}!',
        # hash or hash_ref
        name => 'Steffen',
    );

method __n

Plural

    print $loc->__n(
        'one file read',       # Singular
        'a lot of files read', # Plural
        $file_count,           # number to select the right plural form
    );

method __nx

Plural and expand named placeholders

    print $loc->__nx(
        '{count:num} file read',
        '{count:num} files read',
        $file_count,
        # hash or hash_ref
        count => $file_count,
    );

What is the meaning of {count:num} or alternative {count :num}?

That is a attribute. If there is such an attribute like :num and the modifier_code is set, the placeholder value will be modified before replacement.

Think about the attribute names. Too technical names are able to destroy the translation process by translation office stuff.

For better automatic translation use the reserved attribute :num and tag all numeric placeholders.

You are allowed to set multiple attributes like {count :num :numf} The resulting attribute string is then num :numf.

method __p

Context

    print $loc->__p(
        'time', # Context
        'to',
    );

    print $loc->__p(
        'destination', # Context
        'to',
    );

method __px

Context and expand named placeholders

    print $loc->__px(
        'destination',
        'from {town_from} to {town_to}',
        # hash or hash_ref
        town_from => 'Chemnitz',
        town_to   => 'Erlangen',
    );

method __np

Context and plural

    print $loc->__np(
        'maskulin',
        'Dear friend',
        'Dear friends',
        $friends,
    );

method __npx

Context, plural and expand named placeholders

    print $loc->__npx(
        'maskulin',
        'Mr. {name} has {count:num} book.',
        'Mr. {name} has {count:num} books.',
        $book_count,
        # hash or hash_ref
        name  => $name,
        count => $book_count,
    );

Methods to mark the translation for extraction only

How to build the method name?

Use N__ and append this with "n", "p" and/or "x" in alphabetic order.

 .------------------------------------------------------------------------.
 | Snippet | Description                                                  |
 |---------+--------------------------------------------------------------|
 | __      | Special marked for extraction.                               |
 | n       | Using plural forms.                                          |
 | p       | Context is the first parameter.                              |
 | x       | Last parameters as hash/hash_ref are for named placeholders. |
 '------------------------------------------------------------------------'

methods N__, N__x, N__n, N__nx, N__p, N__px, N__np, N__npx

The extractor looks for __('... and has no problem with $loc->N__('....

This is the idea of the N-Methods.

    $loc->N__('...');
    $loc->N__x('...', ...);
    ...

EXAMPLE

Inside of this distribution is a directory named example. Run this *.pl files.

DIAGNOSTICS

confess

CONFIGURATION AND ENVIRONMENT

none

DEPENDENCIES

Locale::Utils::PlaceholderNamed

Moo::Role

INCOMPATIBILITIES

not known

BUGS AND LIMITATIONS

none

SEE ALSO

Locale::TextDoamin::OO

AUTHOR

Steffen Winkler

LICENSE AND COPYRIGHT

Copyright (c) 2009 - 2017, Steffen Winkler <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.