diff --git a/lib/Alchemy/Phrasea/Application.php b/lib/Alchemy/Phrasea/Application.php
index e7013aa764..33273d415f 100644
--- a/lib/Alchemy/Phrasea/Application.php
+++ b/lib/Alchemy/Phrasea/Application.php
@@ -128,11 +128,14 @@ use Silex\Application\UrlGeneratorTrait;
use Silex\Provider\FormServiceProvider;
use Silex\Provider\MonologServiceProvider;
use Silex\Provider\SessionServiceProvider;
+use Silex\Provider\TranslationServiceProvider;
use Silex\Provider\TwigServiceProvider;
use Silex\Provider\SwiftmailerServiceProvider;
use Silex\Provider\UrlGeneratorServiceProvider;
use Silex\Provider\ValidatorServiceProvider;
use Silex\Provider\ServiceControllerServiceProvider;
+use Symfony\Bridge\Twig\Extension\TranslationExtension;
+use Symfony\Component\Translation\Loader\MoFileLoader;
use Unoconv\UnoconvServiceProvider;
use XPDF\PdfToText;
use XPDF\XPDFServiceProvider;
@@ -299,8 +302,22 @@ class Application extends SilexApplication
'twig.options' => [
'cache' => $this['root.path'] . '/tmp/cache_twig/',
],
- 'twig.form.templates' => ['login/common/form_div_layout.html.twig']
]);
+
+ $this->register(new TranslationServiceProvider(), [
+ 'locale_fallbacks' => ['fr_FR'],
+ ]);
+
+ $this['translator'] = $this->share($this->extend('translator', function($translator, $app) {
+ $translator->addLoader('mo', new MoFileLoader());
+ $translator->addResource('mo', __DIR__.'/../../../locale/fr_FR/LC_MESSAGES/phraseanet.mo', 'fr_FR');
+ $translator->addResource('mo', __DIR__.'/../../../locale/en_GB/LC_MESSAGES/phraseanet.mo', 'en_GB');
+ $translator->addResource('mo', __DIR__.'/../../../locale/de_DE/LC_MESSAGES/phraseanet.mo', 'de_DE');
+ $translator->addResource('mo', __DIR__.'/../../../locale/nl_NL/LC_MESSAGES/phraseanet.mo', 'nl_NL');
+
+ return $translator;
+ }));
+
$this->register(new FormServiceProvider());
$this->setupTwig();
@@ -575,7 +592,7 @@ class Application extends SilexApplication
$twig->addExtension(new \Twig_Extension_Escaper());
// add filter trans
- $twig->addExtension(new \Twig_Extensions_Extension_I18n());
+ $twig->addExtension(new TranslationExtension($app['translator']));
// add filter localizeddate
$twig->addExtension(new \Twig_Extensions_Extension_Intl());
// add filters truncate, wordwrap, nl2br
diff --git a/lib/Alchemy/Phrasea/Core/Event/Subscriber/PhraseaLocaleSubscriber.php b/lib/Alchemy/Phrasea/Core/Event/Subscriber/PhraseaLocaleSubscriber.php
index 8ffa88edca..7a6ad110fe 100644
--- a/lib/Alchemy/Phrasea/Core/Event/Subscriber/PhraseaLocaleSubscriber.php
+++ b/lib/Alchemy/Phrasea/Core/Event/Subscriber/PhraseaLocaleSubscriber.php
@@ -108,7 +108,6 @@ class PhraseaLocaleSubscriber implements EventSubscriberInterface
});
$this->locale = $this->app['locale'];
- \phrasea::use_i18n($this->locale);
}
public function addLocaleCookie(FilterResponseEvent $event)
diff --git a/lib/classes/phrasea.php b/lib/classes/phrasea.php
index ed00b54ade..0a8c3f2e64 100644
--- a/lib/classes/phrasea.php
+++ b/lib/classes/phrasea.php
@@ -69,23 +69,6 @@ class phrasea
return self::$_sbas_params;
}
- public static function use_i18n($locale, $textdomain = 'phraseanet')
- {
- $codeset = "UTF-8";
-
- putenv('LANG=' . $locale . '.' . $codeset);
- putenv('LANGUAGE=' . $locale . '.' . $codeset);
- bind_textdomain_codeset($textdomain, 'UTF-8');
-
- bindtextdomain($textdomain, __DIR__ . '/../../locale/');
- setlocale(LC_ALL
- , $locale . '.UTF-8'
- , $locale . '.UTF8'
- , $locale . '.utf-8'
- , $locale . '.utf8');
- textdomain($textdomain);
- }
-
public static function modulesName($array_modules)
{
$array = [];
diff --git a/templates/web/account/base.html.twig b/templates/web/account/base.html.twig
index a825f58482..cfdc8f765c 100644
--- a/templates/web/account/base.html.twig
+++ b/templates/web/account/base.html.twig
@@ -1,3 +1,5 @@
+{% form_theme form 'web/login/common/fields.html.twig' %}
+
{% set jquery_theme = 'dark-hive' %}
{% set module = '' %}
diff --git a/templates/web/login/common/form_div_layout.html.twig b/templates/web/login/common/form_div_layout.html.twig
deleted file mode 100644
index ddbbbe5eef..0000000000
--- a/templates/web/login/common/form_div_layout.html.twig
+++ /dev/null
@@ -1,334 +0,0 @@
-{# Widgets #}
-
-{% block form_widget %}
-{% spaceless %}
- {% if compound %}
- {{ block('form_widget_compound') }}
- {% else %}
- {{ block('form_widget_simple') }}
- {% endif %}
-{% endspaceless %}
-{% endblock form_widget %}
-
-{% block form_widget_simple %}
-{% spaceless %}
- {% set type = type|default('text') %}
-
-{% endspaceless %}
-{% endblock form_widget_simple %}
-
-{% block form_widget_compound %}
-{% spaceless %}
-
- {% if form.parent is empty %}
- {{ form_errors(form) }}
- {% endif %}
- {{ block('form_rows') }}
- {{ form_rest(form) }}
-
-{% endspaceless %}
-{% endblock form_widget_compound %}
-
-{% block collection_widget %}
-{% spaceless %}
- {% if prototype is defined %}
- {% set attr = attr|merge({'data-prototype': form_row(prototype) }) %}
- {% endif %}
- {{ block('form_widget') }}
-{% endspaceless %}
-{% endblock collection_widget %}
-
-{% block textarea_widget %}
-{% spaceless %}
-
-{% endspaceless %}
-{% endblock textarea_widget %}
-
-{% block choice_widget %}
-{% spaceless %}
- {% if expanded %}
- {{ block('choice_widget_expanded') }}
- {% else %}
- {{ block('choice_widget_collapsed') }}
- {% endif %}
-{% endspaceless %}
-{% endblock choice_widget %}
-
-{% block choice_widget_expanded %}
-{% spaceless %}
-
- {% for child in form %}
- {{ form_widget(child) }}
- {{ form_label(child) }}
- {% endfor %}
-
-{% endspaceless %}
-{% endblock choice_widget_expanded %}
-
-{% block choice_widget_collapsed %}
-{% spaceless %}
-
-{% endspaceless %}
-{% endblock choice_widget_collapsed %}
-
-{% block choice_widget_options %}
-{% spaceless %}
- {% for group_label, choice in options %}
- {% if choice is iterable %}
-
- {% else %}
-
- {% endif %}
- {% endfor %}
-{% endspaceless %}
-{% endblock choice_widget_options %}
-
-{% block checkbox_widget %}
-{% spaceless %}
-
-{% endspaceless %}
-{% endblock checkbox_widget %}
-
-{% block radio_widget %}
-{% spaceless %}
-
-{% endspaceless %}
-{% endblock radio_widget %}
-
-{% block datetime_widget %}
-{% spaceless %}
- {% if widget == 'single_text' %}
- {{ block('form_widget_simple') }}
- {% else %}
-
- {{ form_errors(form.date) }}
- {{ form_errors(form.time) }}
- {{ form_widget(form.date) }}
- {{ form_widget(form.time) }}
-
- {% endif %}
-{% endspaceless %}
-{% endblock datetime_widget %}
-
-{% block date_widget %}
-{% spaceless %}
- {% if widget == 'single_text' %}
- {{ block('form_widget_simple') }}
- {% else %}
-
- {{ date_pattern|replace({
- '{{ year }}': form_widget(form.year),
- '{{ month }}': form_widget(form.month),
- '{{ day }}': form_widget(form.day),
- })|raw }}
-
- {% endif %}
-{% endspaceless %}
-{% endblock date_widget %}
-
-{% block time_widget %}
-{% spaceless %}
- {% if widget == 'single_text' %}
- {{ block('form_widget_simple') }}
- {% else %}
- {% set vars = widget == 'text' ? { 'attr': { 'size': 1 }} : {} %}
-
- {{ form_widget(form.hour, vars) }}:{{ form_widget(form.minute, vars) }}{% if with_seconds %}:{{ form_widget(form.second, vars) }}{% endif %}
-
- {% endif %}
-{% endspaceless %}
-{% endblock time_widget %}
-
-{% block number_widget %}
-{% spaceless %}
- {# type="number" doesn't work with floats #}
- {% set type = type|default('text') %}
- {{ block('form_widget_simple') }}
-{% endspaceless %}
-{% endblock number_widget %}
-
-{% block integer_widget %}
-{% spaceless %}
- {% set type = type|default('number') %}
- {{ block('form_widget_simple') }}
-{% endspaceless %}
-{% endblock integer_widget %}
-
-{% block money_widget %}
-{% spaceless %}
- {{ money_pattern|replace({ '{{ widget }}': block('form_widget_simple') })|raw }}
-{% endspaceless %}
-{% endblock money_widget %}
-
-{% block url_widget %}
-{% spaceless %}
- {% set type = type|default('url') %}
- {{ block('form_widget_simple') }}
-{% endspaceless %}
-{% endblock url_widget %}
-
-{% block search_widget %}
-{% spaceless %}
- {% set type = type|default('search') %}
- {{ block('form_widget_simple') }}
-{% endspaceless %}
-{% endblock search_widget %}
-
-{% block percent_widget %}
-{% spaceless %}
- {% set type = type|default('text') %}
- {{ block('form_widget_simple') }} %
-{% endspaceless %}
-{% endblock percent_widget %}
-
-{% block password_widget %}
-{% spaceless %}
- {% set type = type|default('password') %}
- {{ block('form_widget_simple') }}
-{% endspaceless %}
-{% endblock password_widget %}
-
-{% block hidden_widget %}
-{% spaceless %}
- {% set type = type|default('hidden') %}
- {{ block('form_widget_simple') }}
-{% endspaceless %}
-{% endblock hidden_widget %}
-
-{% block email_widget %}
-{% spaceless %}
- {% set type = type|default('email') %}
- {{ block('form_widget_simple') }}
-{% endspaceless %}
-{% endblock email_widget %}
-
-{# Labels #}
-
-{% block form_label %}
-{% spaceless %}
- {% if label is not sameas(false) %}
- {% if not compound %}
- {% set label_attr = label_attr|merge({'for': id}) %}
- {% endif %}
- {% if required %}
- {% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required')|trim}) %}
- {% endif %}
- {% if label is empty %}
- {% set label = name|humanize %}
- {% endif %}
-
- {% endif %}
-{% endspaceless %}
-{% endblock form_label %}
-
-{# Rows #}
-
-{% block repeated_row %}
-{% spaceless %}
- {#
- No need to render the errors here, as all errors are mapped
- to the first child (see RepeatedTypeValidatorExtension).
- #}
- {{ block('form_rows') }}
-{% endspaceless %}
-{% endblock repeated_row %}
-
-{% block form_row %}
-{% spaceless %}
-
- {{ form_label(form) }}
- {{ form_errors(form) }}
- {{ form_widget(form) }}
-
-{% endspaceless %}
-{% endblock form_row %}
-
-{% block hidden_row %}
- {{ form_widget(form) }}
-{% endblock hidden_row %}
-
-{# Misc #}
-
-{% block form_enctype %}
-{% spaceless %}
- {% if multipart %}enctype="multipart/form-data"{% endif %}
-{% endspaceless %}
-{% endblock form_enctype %}
-
-{% block form_errors %}
-{% import "login/common/macros.html.twig" as auth_macro %}
-{% spaceless %}
- {% if errors|length > 0 %}
- {{ auth_macro.fieldError(errors) }}
- {% endif %}
-{% endspaceless %}
-{% endblock form_errors %}
-
-{% block form_rest %}
-{% spaceless %}
- {% for child in form %}
- {% if not child.rendered %}
- {{ form_row(child) }}
- {% endif %}
- {% endfor %}
-{% endspaceless %}
-{% endblock form_rest %}
-
-{# Support #}
-
-{% block form_rows %}
-{% spaceless %}
- {% for child in form %}
- {{ form_row(child) }}
- {% endfor %}
-{% endspaceless %}
-{% endblock form_rows %}
-
-{% block widget_attributes %}
-{% spaceless %}
- id="{{ id }}" name="{{ full_name }}"{% if read_only %} readonly="readonly"{% endif %}{% if disabled %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
- {% for attrname, attrvalue in attr %}{% if attrname in ['placeholder', 'title'] %}{{ attrname }}="{{ attrvalue|trans }}" {% else %}{{ attrname }}="{{ attrvalue }}" {% endif %}{% endfor %}
-{% endspaceless %}
-{% endblock widget_attributes %}
-
-{% block widget_container_attributes %}
-{% spaceless %}
- {% if id is not empty %}id="{{ id }}" {% endif %}
- {% for attrname, attrvalue in attr %}{{ attrname }}="{{ attrvalue }}" {% endfor %}
-{% endspaceless %}
-{% endblock widget_container_attributes %}
-
-{# Deprecated in Symfony 2.1, to be removed in 2.3 #}
-
-{% block generic_label %}{{ block('form_label') }}{% endblock %}
-{% block widget_choice_options %}{{ block('choice_widget_options') }}{% endblock %}
-{% block field_widget %}{{ block('form_widget_simple') }}{% endblock %}
-{% block field_label %}{{ block('form_label') }}{% endblock %}
-{% block field_row %}{{ block('form_row') }}{% endblock %}
-{% block field_enctype %}{{ block('form_enctype') }}{% endblock %}
-{% block field_errors %}{{ block('form_errors') }}{% endblock %}
-{% block field_rest %}{{ block('form_rest') }}{% endblock %}
-{% block field_rows %}{{ block('form_rows') }}{% endblock %}
-
-
-{% block geoname_widget %}
- {{ block('form_widget_simple') }}
-
- {# add custom code here #}
-{% endblock %}
diff --git a/templates/web/login/layout/base-layout.html.twig b/templates/web/login/layout/base-layout.html.twig
index 3ddbb923eb..57fab42647 100644
--- a/templates/web/login/layout/base-layout.html.twig
+++ b/templates/web/login/layout/base-layout.html.twig
@@ -1,3 +1,5 @@
+{% form_theme form 'login/common/fields.html.twig' %}
+