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 - "jhthorsen@cpan.org"