ntruchsess 3e5ae083a9 update perl-firmata to upstream version
git-svn-id: https://svn.fhem.de/fhem/trunk@4064 2b470e98-0d58-463d-a4d8-8e2adae1ed80
2013-10-18 12:08:22 +00:00

107 lines
2.2 KiB
Perl

package Device::Firmata::Language;
# ==================================================================
=head1 NAME
Device::Firmata::Language - Localization
=cut
use strict;
use vars qw/
$FIRMATA_LOCALE
$FIRMATA_LOCALE_PATH
$FIRMATA_LOCALE_MESSAGES
/;
use Device::Firmata::Base
ISA => 'Device::Firmata::Base',
FIRMATA_ATTRIBS => {
messages => {},
};
$FIRMATA_LOCALE_MESSAGES = {
};
$FIRMATA_LOCALE = 'en';
$FIRMATA_LOCALE_PATH = '.';
=head2 numbers
=cut
sub numbers {
# --------------------------------------------------
}
=head2 date
=cut
sub date {
# --------------------------------------------------
}
=head2 language
=cut
sub language {
# --------------------------------------------------
my $self = shift;
my $messages = $FIRMATA_LOCALE_MESSAGES->{$FIRMATA_LOCALE} ||= do {
my $target_fpath = "$FIRMATA_LOCALE_PATH/$FIRMATA_LOCALE.txt";
my $m;
require Symbol;
my $fh = Symbol::gensym();
if ( -f $target_fpath ) {
open $fh, "<$target_fpath" or die $!;
}
else {
$fh = \*DATA;
}
while ( my $l = <$fh> ) {
next if $l =~ /^\s*$/;
$l =~ /([^\s]*)\s+(.*)/;
( $m ||= {} )->{$1} = $2;
}
close $fh;
$m;
};
# This will parse messages coming through such that it will
# be possible to encode a language string with a code in the
# following formats:
#
# ->language( "CODE", $parametrs ... )
# ->language( "CODE:Default Message %s", $parametrs ... )
#
my $message = shift or return;
$message =~ s/^([\w_]+)\s*:?\s*//;
my $key = $1;
my $message_template;
# Get the message template in the following order:
# 1. The local object if available
# 2. The global message object
# 3. The provided default message
#
ref $self and $message_template = $self->{messages}{$key};
$message_template ||= $messages->{$key} || $message;
return sprintf( $message_template, @_ );
}
1;
__DATA__
FIRMATA__unhandled Unhandled attribute '%s' called
FIRMATA__unknown Unknown/Unhandled error encountered: %s
FIRMATA__separator ,