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

VERSION
    0.03

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.

  Formatting rules
    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.

  Example file
    This could be the content of "i18n/en.strings":

      /* comments in .strings files
      can be multi line,
      single line */
      // or combination of the two
      "hello_user" = "Hello %1$s";

      "Sample data" = "sample %s %d %.3f data";

      // keys and values can be spread to multiple lines
      "welcome_message" = "Welcome back,
      we have missed you";

    TIP! Adding the default value on the left side (instead of hello_user
    and welcome_message) works better with Locale::Maketext since it will
    use that as fallback if translation is missing.

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"