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