Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jhthorsen/locale-maketext-from-strings

Parse Apple .strings files
https://github.com/jhthorsen/locale-maketext-from-strings

Last synced: 27 days ago
JSON representation

Parse Apple .strings files

Awesome Lists containing this project

README

        

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:
.

* 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 - "[email protected]"