X-Git-Url: http://git.shiar.nl/perl/loc/.git/blobdiff_plain/0fc15cae405d8c2af2c9dc53eed4e03e2f5433da:/Lirama/Loc2.pm..7c9dced1e223d99ca5284554a9c93edbd0f8054a:/Lirama/Loc3.pm diff --git a/Lirama/Loc2.pm b/Lirama/Loc3.pm similarity index 63% rename from Lirama/Loc2.pm rename to Lirama/Loc3.pm index 0ea0410..2a89689 100644 --- a/Lirama/Loc2.pm +++ b/Lirama/Loc3.pm @@ -1,22 +1,9 @@ -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; @@ -24,35 +11,54 @@ sub loc($) { # 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]} } @@ -64,21 +70,20 @@ __END__ =head1 NAME -Lirama::Loc - Localize strings +Lirama::Loc3 - Localize strings =head1 SYNOPSIS - use Lirama::Loc; - - langpref(qw/nl en eo/); # prefer I (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 (dutch) texts print $loc{test}; # "this is a test", since dutch is unavailable =head1 DESCRIPTION @@ -99,14 +104,14 @@ may yet be a very bad idea (does it work correctly in modperl?) =item C -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 +L L