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