localization.pm 1010 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. use Modern::Perl;
  2. package localization;
  3. use base 'Locale::Maketext';
  4. use Locale::Maketext::Lexicon {
  5. "i-default" => ['Auto'],
  6. _auto => 1,
  7. _decode => 1,
  8. _style => 'gettext',
  9. };
  10. sub init
  11. {
  12. my $class = shift;
  13. $class->fail_with(sub
  14. {
  15. my($lh, $key, @params) = @_;
  16. $key =~ /^_"([^"]*)"$/; #"
  17. return $lh->maketext($1||$key, @params);
  18. });
  19. }
  20. sub add
  21. {
  22. my $class = shift;
  23. my $locale = shift;
  24. my $file = shift;
  25. Locale::Maketext::Lexicon->import({
  26. $locale => [Gettext => $file],
  27. _auto => 1,
  28. _decode => 1,
  29. _style => 'gettext',
  30. });
  31. }
  32. sub add_mo
  33. {
  34. my $class = shift;
  35. my $dir = shift;
  36. my $locales = shift;
  37. my $handles = {};
  38. foreach my $lan (@$locales)
  39. {
  40. $class->add($lan, "$dir/$lan.mo");
  41. $handles->{$lan} = $class->get_handle($lan);
  42. }
  43. return $handles;
  44. }
  45. sub available_locales
  46. {
  47. my $dir = shift;
  48. return [ map { m|(\w+)\.mo$|; $1 } glob("$dir/*.mo") ];
  49. }
  50. sub fallback_languages
  51. {
  52. return ("ru","i-default");
  53. }
  54. 1;