diff options
Diffstat (limited to 'perllib/FixMyStreet/Roles/Translatable.pm')
-rw-r--r-- | perllib/FixMyStreet/Roles/Translatable.pm | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/Roles/Translatable.pm b/perllib/FixMyStreet/Roles/Translatable.pm new file mode 100644 index 000000000..43cb063d1 --- /dev/null +++ b/perllib/FixMyStreet/Roles/Translatable.pm @@ -0,0 +1,39 @@ +package FixMyStreet::Roles::Translatable; + +use Moo::Role; + +sub translate_around { + my ($orig, $self) = (shift, shift); + my $fallback = $self->$orig(@_); + (my $col = (caller(2))[3]) =~ s/.*:://; + $self->_translate($col, $fallback); +} + +sub translate { + my ($self, $col) = (shift, shift); + my $fallback = $self->$col(@_); + $self->_translate($col, $fallback); +} + +sub _translate { + my ($self, $col, $fallback) = @_; + + my $schema = $self->result_source->schema; + my $table = lc $self->result_source->source_name; + my $id = $self->id; + + if (ref $schema) { + my $translation = $schema->resultset('Translation')->find({ + lang => $schema->lang, + tbl => $table, + object_id => $id, + col => $col + }); + return $translation->msgstr if $translation; + } else { + warn "Can't use translation on this call to $table.$col"; + } + return $fallback; +}; + +1; |