TT#36404 restructure form-translation

translate forms in NGCP::Panel::Form (the caching module) instead of in the
templates. This gives us better control to avoid translating cached forms
multiple times. Multiple translations lead to errors due to escaping of
special symbols and simply fails from one (non-english) language to another.

Change-Id: I234b22cb70dc068530e4a9f241cb9bb5653e1959
changes/78/21178/4
Gerhard Jungwirth 7 years ago committed by Kirill Solomko
parent a122f65da7
commit 2b89431cca

@ -10,6 +10,7 @@ use Scalar::Util qw(blessed);
use NGCP::Panel::Utils::DateTime qw();
use NGCP::Panel::Utils::Statistics qw();
use NGCP::Panel::Utils::Admin;
use NGCP::Panel::Form qw();
use DateTime qw();
use Time::HiRes qw();
use DateTime::Format::RFC3339 qw();
@ -38,6 +39,8 @@ sub auto :Private {
$c->response->cookies->{ngcp_panel_lang} = { value => $c->request->params->{lang}, expires => '+3M', };
$c->log->debug("Setting language to ". $c->request->params->{lang});
}
# clear form cache (they need to be properly re-translated)
NGCP::Panel::Form::clear_form_cache();
}
if (defined $c->session->{lang}) {
$c->languages([$c->session->{lang}, "i-default"]);

@ -4,6 +4,7 @@ use warnings;
use strict;
use Module::Load::Conditional qw/can_load/;
use NGCP::Panel::Utils::I18N qw//;
my %forms = ();
@ -22,8 +23,15 @@ sub get {
return;
}
$form = $forms{$name} = $name->new(ctx => $c);
# translate form here to prevent multiple translations which leads to errors and doesn't work since the
# source IDs (english) are no longer present
NGCP::Panel::Utils::I18N->translate_form($c, $form);
}
return $form;
}
sub clear_form_cache {
%forms = ();
}
1;

@ -58,7 +58,7 @@ has_field 'source.source' => (
wrapper_class => [qw/hfh-rep-field/],
element_attr => {
rel => ['tooltip'],
title => ['The calling party number in E164 format to match. Shell patterns like 431* or 49123~~~[1-5~~~]67 are possible. ' .
title => ['The calling party number in E164 format to match. Shell patterns like 431* or 49123~[1-5~]67 are possible. ' .
'Use "anonymous" to match suppressed numbers.'],
},
);

@ -5,6 +5,7 @@ use Sipwise::Base;
use Data::Validate::IP qw/is_ipv4 is_ipv6/;
use NGCP::Panel::Form::Preferences;
use NGCP::Panel::Utils::Generic qw(:all);
use NGCP::Panel::Utils::I18N qw//;
use NGCP::Panel::Utils::Sems;
use constant _DYNAMIC_PREFERENCE_PREFIX => '__';
@ -354,6 +355,10 @@ sub create_preference_form {
}],
});
$form->create_structure([$c->stash->{preference_meta}->attribute]);
# we have to translate this form separately since it bypasses caching in NGCP::Panel::Form
if ( $c->stash->{preference_meta}->attribute !~ '(ncos|sound_set|emergency_mapping_container)$' ) {
NGCP::Panel::Utils::I18N->translate_form($c, $form);
}
my $posted = ($c->request->method eq 'POST');
$form->process(

@ -17,14 +17,8 @@ __PACKAGE__->config(
URI::Escape::uri_unescape(@_);
},
},
expose_methods => [qw/translate_form/],
);
sub translate_form {
my $self = shift;
NGCP::Panel::Utils::I18N->translate_form(@_);
}
=head1 NAME
NGCP::Panel::View::HTML - TT View for NGCP::Panel

@ -35,7 +35,7 @@
IF api_modal_flag;
PROCESS "helpers/modal.tt";
modal_header(m.name = "API key");
translate_form(helper.form_object).render;
helper.form_object.render;
modal_footer();
modal_script(m.close_target = helper.close_target);
END;

@ -82,7 +82,6 @@
[%
PROCESS "helpers/modal.tt";
modal_header(m.name = weekday.name);
form = translate_form(form);
-%]
<div class="modal-body">

@ -23,9 +23,7 @@ $(document).ready(function() {
});
</script>
[% site_config.title = c.loc('Call Routing Verification');
form = translate_form(form);
-%]
[% site_config.title = c.loc('Call Routing Verification'); -%]
<div class="row">
<span>

@ -771,7 +771,7 @@ $(function() {
PROCESS "helpers/modal.tt";
modal_header(m.create_flag = create_flag,
m.name = description.defined ? description : c.loc("Subscriber"));
translate_form(form).render;
form.render;
modal_footer();
modal_script(m.close_target = close_target);
-%]
@ -784,7 +784,7 @@ $(function() {
PROCESS "helpers/modal.tt";
modal_header(m.create_flag=0,
m.name = c.loc("Settings"));
translate_form(form).render;
form.render;
modal_footer();
modal_script(m.close_target = close_target);
-%]
@ -793,7 +793,7 @@ $(function() {
PROCESS "helpers/modal.tt";
modal_header(m.create_flag=0, m.edit_flag=0,
m.name = c.loc("Deployed Device"));
translate_form(form).render;
form.render;
modal_footer();
modal_script(m.close_target = close_target);
-%]

@ -1,6 +1,6 @@
[%PROCESS 'helpers/modal.tt'-%]
[%#USE Dumper%]
[%form=translate_form(form)%]
[%#form=translate_form(form)%]
[%modal_header()%]
[%#Dumper.dump_html(form)%]
[%form.render()%]

@ -314,7 +314,6 @@ $(document).ready(function() {
m.duplicate_flag=helper.duplicate_flag,
m.edit_flag=helper.edit_flag,
m.name = helper.name);
helper.form_object = translate_form( helper.form_object );
helper.form_object.render;
modal_footer();
modal_script(m.close_target = helper.close_target);

@ -172,9 +172,6 @@
PROCESS "helpers/modal.tt";
modal_header(m.create_flag=0,
m.name = c.loc("Preference '") _ c.loc(helper.preference_meta.label) _"'");
IF ! helper.preference_meta.attribute.match('(ncos|sound_set|emergency_mapping_container)$');
helper.form = translate_form(helper.form);
END;
-%]
[% IF helper.preference_meta.attribute == "allowed_ips" %]

@ -13,7 +13,7 @@
<div class="content clearfix">
<h1>[% c.loc('[_1] Sign In', realm.ucfirst) %]</h1>
<p>[% c.loc('Sign in using your [_1] credentials:', realm.ucfirst) %]</p>
[% translate_form(form).render %]
[% form.render %]
</div>
</div>
<div class="login-extra">

@ -9,7 +9,7 @@
helper.close_target = close_target;
helper.create_flag = create_flag;
helper.edit_flag = edit_flag;
helper.form_object = form.defined ? translate_form(form) : undef;
helper.form_object = form;
helper.ajax_uri = c.uri_for_action( "/ncos/ajax" );
UNLESS c.user.read_only;

@ -33,7 +33,7 @@ $(document).ready(function() {
modal_header(m.create_flag=0,
m.name = c.loc("Peering Overview Columns"));
helper.form = translate_form(form);
helper.form = form;
-%]

@ -66,7 +66,7 @@
PROCESS "helpers/modal.tt";
modal_header(m.edit_flag = branding_edit_flag,
m.name = "Reseller Branding");
translate_form(branding_form).render;
branding_form.render;
modal_footer();
modal_script(m.close_target = close_target);
-%]

@ -454,7 +454,7 @@
PROCESS "helpers/modal.tt";
modal_header(m.edit_flag = branding_edit_flag,
m.name = "Reseller Branding");
translate_form(branding_form).render;
branding_form.render;
modal_footer();
modal_script(m.close_target = close_target);
-%]

@ -141,7 +141,7 @@
PROCESS "helpers/modal.tt";
modal_header(m.name = c.loc('Rule'),
m.create_flag = create_flag);
translate_form(form).render();
form.render();
modal_footer();
modal_script(m.close_target = rules_uri);
-%]

@ -81,7 +81,7 @@
PROCESS "helpers/modal.tt";
modal_header(m.create_flag=0,
m.name = edit_default_flag ? c.loc('Default Files') : file_result.handle.name );
translate_form(form).render;
form.render;
modal_footer();
END;
-%]

@ -27,7 +27,7 @@
<div class="ngcp-separator"></div>
<div class="row-fluid">
[% translate_form(form).render %]
[% form.render %]
</div>
<div class="ngcp-separator"></div>

@ -73,7 +73,7 @@
PROCESS "helpers/modal.tt";
modal_header(m.create_flag=0,
m.name = description);
translate_form(form).render;
form.render;
modal_footer();
modal_script(m.close_target = close_target);
-%]

@ -379,7 +379,7 @@ function process_pbx_items(moveId,direction){
PROCESS "helpers/modal.tt";
modal_header(m.create_flag=0,
m.name = description);
translate_form(form).render;
form.render;
modal_footer();
modal_script(m.close_target = close_target);
-%]

@ -866,7 +866,7 @@ $( document ).ready(function() {
[% IF cf_form.has_for_js -%]
[% cf_form.render_repeatable_js %]
[% END -%]
[% translate_form(cf_form).render %]
[% cf_form.render %]
[%
modal_footer();
@ -1033,7 +1033,7 @@ $( document ).ready(function() {
[% IF ccmap_form.has_for_js -%]
[% ccmap_form.render_repeatable_js %]
[% END -%]
[% translate_form(ccmap_form).render %]
[% ccmap_form.render %]
[%
modal_footer();

@ -4,7 +4,7 @@
PROCESS "helpers/modal.tt";
modal_header(m.name = c.loc('Web Password'),
m.create_flag = create_flag);
translate_form(form).render();
form.render;
modal_footer();
modal_script(m.close_target = close_target);
-%]

Loading…
Cancel
Save