summaryrefslogtreecommitdiffstats
path: root/lib/Locale/POFileManager.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Locale/POFileManager.pm')
-rw-r--r--lib/Locale/POFileManager.pm108
1 files changed, 108 insertions, 0 deletions
diff --git a/lib/Locale/POFileManager.pm b/lib/Locale/POFileManager.pm
index b774807..5924754 100644
--- a/lib/Locale/POFileManager.pm
+++ b/lib/Locale/POFileManager.pm
@@ -1,5 +1,6 @@
package Locale::POFileManager;
use Moose;
+use MooseX::Types::Path::Class qw(Dir);
=head1 NAME
@@ -13,6 +14,113 @@ Locale::POFileManager -
=cut
+has base_dir => (
+ is => 'ro',
+ isa => Dir,
+ required => 1,
+ coerce => 1,
+);
+
+has files => (
+ traits => [qw(Array)],
+ isa => 'ArrayRef[Locale::POFileManager::File]',
+ lazy => 1,
+ builder => '_build_files',
+ init_arg => undef,
+ handles => {
+ files => 'elements',
+ first_file => 'first',
+ _add_file => 'push',
+ },
+);
+
+sub _build_files {
+ my $self = shift;
+ my $dir = $self->base_dir;
+
+ require Locale::POFileManager::File;
+
+ my @files;
+ for my $file ($dir->children) {
+ next unless $file->is_file;
+ next unless $file->stringify =~ /\.po$/;
+ push @files, Locale::POFileManager::File->new(file => $file);
+ }
+
+ return \@files;
+}
+
+has canonical_language => (
+ is => 'ro',
+ isa => 'Str',
+ required => 1, # TODO: make this not required at some point?
+);
+
+sub BUILD {
+ my $self = shift;
+
+ confess("Canonical language file must exist")
+ unless $self->has_language($self->canonical_language);
+}
+
+sub has_language {
+ my $self = shift;
+ my ($lang) = @_;
+
+ for my $file ($self->files) {
+ $file->stringify =~ m{.*/(.*)\.po};
+ return 1 if $1 eq $lang;
+ }
+
+ return;
+}
+
+sub add_language {
+ my $self = shift;
+ my ($lang) = @_;
+
+ return if $self->has_language($lang);
+
+ my $file = $self->base_dir->file("$lang.po");
+ confess("Can't overwrite existing language file for $lang")
+ if -e $file->stringify;
+
+ my $pofile = Locale::POFileManager::File->new(file => $file);
+ $pofile->save;
+
+ $self->_add_file($pofile);
+}
+
+sub canonical_language_file {
+ my $self = shift;
+ my $lang = $self->canonical_language;
+
+ return $self->first_file(sub {
+ $_->file->stringify =~ /\Q$lang\E\.po$/;
+ });
+}
+
+sub find_missing {
+ my $self = shift;
+ my $canon_file = $self->canonical_language_file;
+
+ my %ret;
+ for my $file ($self->files) {
+ $ret{$file->file->stringify} = $file->find_missing_from($canon_file);
+ }
+
+ return %ret;
+}
+
+sub add_stubs {
+ my $self = shift;
+ my $canon_file = $self->canonical_language_file;
+
+ for my $file ($self->files) {
+ $file->add_stubs_from($canon_file);
+ }
+}
+
__PACKAGE__->meta->make_immutable;
no Moose;