summaryrefslogtreecommitdiff
path: root/lib/VNDB/L10N.pm
blob: e03f1dcb6c842201dc79d863fa79f7517036c31c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

use strict;
use warnings;

{
  package VNDB::L10N;
  use base 'Locale::Maketext';
  use LangFile;

  sub fallback_languages { ('en') };

  # used for the language switch interface, language tags must
  # be the same as in the languages hash in global.pl
  sub languages { qw{ en } }

  sub maketext {
    my $r = eval { shift->SUPER::maketext(@_) };
    return $r if defined $r;
    warn "maketext failed for '@_': $@\n";
    return $_[0]||''; # not quite sure we want this
  }

  # can be called as either a subroutine or a method
  sub loadfile {
    my %lang = do {
      no strict 'refs';
      map {
        (my $n = $_) =~ s/-/_/g;
        ($_, \%{"VNDB::L10N::${n}::Lexicon"})
      } languages
    };
    my $r = LangFile->new(read => "$VNDB::ROOT/data/lang.txt");
    my $key;
    while(my $l = $r->read) {
      my($t, @l) = @$l;
      $key = $l[0] if $t eq 'key';
      if($t eq 'tl') {
        my($lang, undef, $text) = @l;
        next if !$text;
        die "Unknown language \"$l->[1]\"\n" if !$lang{$lang};
        die "Unknown key for translation \"$lang: $text\"\n" if !$key;
        $lang{$lang}{$key} = $text;
      }
    }
    $r->close;
  }
}



{
  package VNDB::L10N::en;
  use base 'VNDB::L10N';
  use POSIX 'strftime';
  use TUWF::XML 'xml_escape';
  require VNDB::Func;
  our %Lexicon;

  sub quant {
    return $_[1]==1 ? $_[2] : $_[3];
  }

  sub age     { VNDB::Func::fmtage($_[1]) }
  sub date    { VNDB::Func::fmtdate($_[1], $_[2]) }
  sub datestr { VNDB::Func::fmtdatestr($_[1]) }
  sub userstr { VNDB::Func::fmtuser($_[1], $_[2]) }

  # Arguments: index, @list. returns $list[index]
  sub index {
    shift;
    return $_[shift||0];
  }

  # Shortcut for <a href="arg1">arg2</a>
  sub url {
    return sprintf '<a href="%s">%s</a>', xml_escape($_[1]), xml_escape($_[2]);
  }

  # <br />
  sub br { return '<br />' }
}

1;