-package Lirama::Loc2;
+package Lirama::Loc3;
use strict;
use warnings;
-use utf8; #todo: does it even matter?
-our $VERSION = '2.00';
-
-require Exporter;
-our @ISA = qw(Exporter);
-our @EXPORT = qw(langpref);
-our @EXPORT_OK = qw(loc);
-
-our @langpref;# = qw(en eo nl sv el hu de fr ru kr);
-
-sub langpref {
- @langpref = @_ if @_; # set order of languages (prefered language first)
- return wantarray ? @langpref : $langpref[0];
-}
+our $VERSION = '3.00';
sub loc($) {
my $this = shift;
# if it isn't, we're done already:
ref $_[0] eq "HASH" or return $_[0];
# localize to most preferred language
- defined $_[0]{$_} and return $_[0]{$_} for @langpref;
-}
+ defined $_[0]{$_} and return $_[0]{$_} for @{$this->{-langpref}};
+} # loc
sub TIEHASH {
+ #todo: set -path
return bless $_[1], $_[0]; # bless the l10n hash
}
sub FETCH {
my $this = shift;
- # custom expand: get preferred language from given hash
- # return $this->loc($_[0]) if ref $_[0] eq "HASH"; # deprecated in favor of loc()
+ # get setting (denoted by leading dash)
+ return wantarray ? @{$this->{$_[0]}} : $this->{$_[0]}->[0]
+ if $_[0] eq "-langpref";
+ return $this->{$_[0]}
+ if $_[0] eq "-path";
# array ref used for passing arguments
@_ = @{$_[0]} if ref $_[0] eq "ARRAY";
# get localized string by identifier
local $_ = shift;
+ # add default path unless specified
+ $_ = $this->{-path} . '_' . $_ unless /_/;
#todo: shouldn't occur - find out where this is done, then fix and remove this check
# defined $_ or return '';
$_ = $this->loc($this->{$_}) if exists $this->{$_};
-# $_ = ref $this->{$_} eq "HASH" ? $this->loc($this->{$_}) : $this->{$_} if exists $this->{$_};
- # static output if no arguments given
- return $_ unless @_; # unnecessary but faster for common case
+ #todo: else remove path
# adaptive string (code)
$_ = $_->(@_) if ref $_ eq "CODE";
+ # static output if no arguments given
+ return $_ unless @_; # unnecessary but faster for common case
# dynamic output
return sprintf $_, @_;
-}
+} # FETCH
+
+sub STORE {
+ my ($this, $option, $val) = @_;
+ if ($option eq "-langpref") {
+ # set order of languages (prefered language first)
+ $this->{$option} = $val;
+ } # -langpref
+ else {
+ $this->{$option} = $val;
+# $_[0]->{$_[1]} = $_[2];
+ }
+} # STORE
# Same as found in Tie::StdHash
+#todo: make path-aware
sub EXISTS { exists $_[0]->{$_[1]} }
sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
sub NEXTKEY { each %{$_[0]} }
=head1 NAME
-Lirama::Loc - Localize strings
+Lirama::Loc3 - Localize strings
=head1 SYNOPSIS
- use Lirama::Loc;
-
- langpref(qw/nl en eo/); # prefer I<nl> (dutch) texts
+ use Lirama::Loc3;
- tie my %loc, "Lirama::Loc", {
- test => {
+ tie my %loc, "Lirama::Loc3", {
+ _test => {
en => "this is a test",
eo => "cxi tio estas testo",
},
};
+ $loc{-langpref} = [qw/nl en eo/]; # prefer I<nl> (dutch) texts
print $loc{test}; # "this is a test", since dutch is unavailable
=head1 DESCRIPTION
=item C<exists>
-True if identifier is localized; non-existing strings still return
-themselves, so in standard meaning everything would exist.
+True if identifier is localized;
+even though non-existing strings still return themselves.
=back
=head1 SEE ALSO
-L<Lirama::Loc::Auto|Lirama::Loc::Auto>
+L<Lirama::Loc3::Auto|Lirama::Loc3::Auto>
L<Locale::Maketext|Locale::Maketext>