NAME
    Locale::Maketext::From::Strings - Parse Apple .strings files

VERSION
    0.01

SYNOPSIS
      use Locale::Maketext::From::Strings;

      my $strings = Locale::Maketext::From::Strings->new(
                      path => '/path/to/strings',
                      namespace => 'MyApp::I18N',
                      out_dir => 'lib',
                    );

      $strings->load; # in memory
      $strings->generate; # to disk

DESCRIPTION
    This module will parse ".strings" file used in the Apple world and
    generate in memory perl-packages used by the Locale::Maketext module.

    This module can parse most of the formatting mentioned here:
    <http://blog.lingohub.com/developers/2013/03/i18n-resource-file-formats-
    ios-strings-files/>.

    *   Key-value pairs are delimited with the equal character (=), and
        terminated by a semicolon (;).

    *   Keys and values are surrounded by double quotes (").

    *   Place-holders look can be: %.2f, %d, %1$s:

          qr{\%[\d|\.]*\$*\d*[dsf]\b}

    *   Comments start at the beginning of the line and span the whole line.

    *   Multi-line comments are enclosed in /* */.

    *   Single-line comments start with double slashes (//).

    *   The specification says it expect UTF-16LE encoding by default, but
        this module expect UTF-8 instead.

        NOTE! This might change in future release. Pass "encoding" to
        constructor if you want to be sure about the value.

ATTRIBUTES
  encoding
    Holds the encoding used when reading the ".strings" files. Defaults to
    "UTF-8".

  namespace
    Package name of where to "generate" or "load" code into. Default to the
    caller namespace.

  out_dir
    Directory to where files should be written to. Defaults to "lib".

  path
    Path to ".strings" files. Defaults to "i18n".

METHODS
  new
      $self = Locale::Maketext::From::Strings->new(%attributes);
      $self = Locale::Maketext::From::Strings->new($attributes);

    Object constructor.

  generate
      Locale::Maketext::From::Strings->generate($namespace);
      $self->generate;

    This method will write the I18N code to disk. Use this when the "load"
    time goes up.

    NOTE! This method does not check for existing files - they will be
    overwritte without warning.

    Example one-liners:

      $ perl -MLocale::Maketext::From::Strings=generate -e1 MyApp::I18N
      $ perl -Ilib -E'say +(require MyApp::I18N)->get_handle(shift)->maketext(@ARGV);' en "some key" ...

  load
      Locale::Maketext::From::Strings->load($path);
      $self->load;

    Will parse "language.strings" files from "path" and generage in-memory
    packages in the given "namespace".

    Example Mojolicious app:

      package MyApp;
      use Locale::Maketext::From::Strings;
      use base 'Mojolicious';

      sub startup {
        my $self = sihft;
        my $default_lang = 'en';

        Locale::Maketext::From::Strings->load($self->home->rel_dir('i18n'));

        $self->helper(l => sub {
          my $c = shift;
          $c->stash->{i18n} ||= MyApp::I18N->get_handle($c->session('lang'), $default_lang);
          $c->stash->{i18n}->maketext(@_);
        });
      }

    See also Mojolicious::Plugin::I18N.

  parse
      $data = $self->parse($file);

    Will parse $file and store the key value pairs in $data.

  import
    See "generate" for example one-liner.

COPYRIGHT
    This program is free software, you can redistribute it and/or modify it
    under the terms of the Artistic License version 2.0.

AUTHOR
    Jan Henning Thorsen - "jhthorsen@cpan.org"

