diff --git a/assets/styles/admin.css b/assets/styles/admin.css
index 1f4e1c8..ced3fcb 100644
--- a/assets/styles/admin.css
+++ b/assets/styles/admin.css
@@ -4,3 +4,16 @@ p.description { max-width: 60ch; text-wrap: balance; }
#dashboard .content-top { display: none; }
#regenerate-fixtures .content-top { display: none; }
+.ea-locale-switcher {
+ padding-inline-start: var(--sidebar-menu-items-padding-left);
+ list-style: none;
+}
+
+.ea-locale-switcher .icon {
+ block-size: 16px;
+ color: var(--sidebar-menu-icon-color);
+ flex-shrink: 0;
+ inline-size: 1.25em;
+ margin-inline-end: 10px;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 837890d..e8812c1 100644
--- a/composer.json
+++ b/composer.json
@@ -46,6 +46,8 @@
"symfony/web-link": "7.2.*",
"symfony/yaml": "7.2.*",
"twig/extra-bundle": "^2.12|^3.19",
+ "twig/intl-extra": "^3.22",
+ "twig/string-extra": "^3.22",
"twig/twig": "^2.12|^3.19"
},
"config": {
diff --git a/composer.lock b/composer.lock
index 8edf4ea..4177c19 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "ecd9e89a30afb56d15aa44d902cdde2f",
+ "content-hash": "cd684490fd6c31fe94c6ca20fda76768",
"packages": [
{
"name": "composer/semver",
@@ -7827,6 +7827,137 @@
],
"time": "2024-12-29T10:29:59+00:00"
},
+ {
+ "name": "twig/intl-extra",
+ "version": "v3.22.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/intl-extra.git",
+ "reference": "7393fc911c7315db18a805d3a541ac7bb9e4fdc0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/7393fc911c7315db18a805d3a541ac7bb9e4fdc0",
+ "reference": "7393fc911c7315db18a805d3a541ac7bb9e4fdc0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1.0",
+ "symfony/intl": "^5.4|^6.4|^7.0",
+ "twig/twig": "^3.13|^4.0"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Twig\\Extra\\Intl\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "A Twig extension for Intl",
+ "homepage": "https://twig.symfony.com",
+ "keywords": [
+ "intl",
+ "twig"
+ ],
+ "support": {
+ "source": "https://github.com/twigphp/intl-extra/tree/v3.22.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-09-15T06:05:04+00:00"
+ },
+ {
+ "name": "twig/string-extra",
+ "version": "v3.22.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/twigphp/string-extra.git",
+ "reference": "4b3337544ac8f76c280def94e32b53acfaec0589"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/twigphp/string-extra/zipball/4b3337544ac8f76c280def94e32b53acfaec0589",
+ "reference": "4b3337544ac8f76c280def94e32b53acfaec0589",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1.0",
+ "symfony/string": "^5.4|^6.4|^7.0",
+ "symfony/translation-contracts": "^1.1|^2|^3",
+ "twig/twig": "^3.13|^4.0"
+ },
+ "require-dev": {
+ "symfony/phpunit-bridge": "^6.4|^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Twig\\Extra\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "A Twig extension for Symfony String",
+ "homepage": "https://twig.symfony.com",
+ "keywords": [
+ "html",
+ "string",
+ "twig",
+ "unicode"
+ ],
+ "support": {
+ "source": "https://github.com/twigphp/string-extra/tree/v3.22.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/twig/twig",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-01-31T20:45:36+00:00"
+ },
{
"name": "twig/twig",
"version": "v3.19.0",
@@ -10465,7 +10596,7 @@
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": {},
+ "stability-flags": [],
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
@@ -10473,6 +10604,6 @@
"ext-ctype": "*",
"ext-iconv": "*"
},
- "platform-dev": {},
+ "platform-dev": [],
"plugin-api-version": "2.6.0"
}
diff --git a/config/services.yaml b/config/services.yaml
index 2d6a76f..4144fb4 100644
--- a/config/services.yaml
+++ b/config/services.yaml
@@ -4,6 +4,7 @@
# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices.html#use-parameters-for-application-configuration
parameters:
+ app.supported_locales: 'en|fr'
services:
# default configuration for services in *this* file
diff --git a/src/Controller/Admin/DashboardController.php b/src/Controller/Admin/DashboardController.php
index 8c41aad..2bc90b5 100644
--- a/src/Controller/Admin/DashboardController.php
+++ b/src/Controller/Admin/DashboardController.php
@@ -15,7 +15,7 @@
use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
use Symfony\Component\HttpFoundation\Response;
-#[AdminDashboard(routePath: '/admin', routeName: 'admin')]
+#[AdminDashboard(routePath: '/{_locale<%app.supported_locales%>}/admin', routeName: 'admin')]
class DashboardController extends AbstractDashboardController
{
public function index(): Response
diff --git a/src/Controller/Admin/FixturesController.php b/src/Controller/Admin/FixturesController.php
index 889885a..be52457 100644
--- a/src/Controller/Admin/FixturesController.php
+++ b/src/Controller/Admin/FixturesController.php
@@ -15,7 +15,7 @@
class FixturesController extends AbstractController
{
- #[Route('/admin/regenerate-fixtures', name: 'admin_regenerate_fixtures', methods: ['GET', 'POST'])]
+ #[Route('/{_locale<%app.supported_locales%>}/admin/regenerate-fixtures', name: 'admin_regenerate_fixtures', methods: ['GET', 'POST'])]
public function regenerateFixtures(Request $request, KernelInterface $kernel): Response
{
if ('POST' === $request->getMethod()) {
diff --git a/src/Controller/DefaultController.php b/src/Controller/DefaultController.php
index 21ff193..fd3ca48 100644
--- a/src/Controller/DefaultController.php
+++ b/src/Controller/DefaultController.php
@@ -8,9 +8,15 @@
final class DefaultController extends AbstractController
{
- #[Route('/', name: 'homepage')]
+ #[Route('/{_locale<%app.supported_locales%>}/', name: 'homepage')]
public function index(): Response
{
return $this->redirectToRoute('admin');
}
+
+ #[Route('/')]
+ public function indexNoLocale(): Response
+ {
+ return $this->redirectToRoute('homepage', ['_locale' => 'en']);
+ }
}
diff --git a/symfony.lock b/symfony.lock
index e3e3e17..01e8743 100644
--- a/symfony.lock
+++ b/symfony.lock
@@ -1,4 +1,13 @@
{
+ "doctrine/deprecations": {
+ "version": "1.1",
+ "recipe": {
+ "repo": "github.com/symfony/recipes",
+ "branch": "main",
+ "version": "1.0",
+ "ref": "87424683adc81d7dc305eefec1fced883084aab9"
+ }
+ },
"doctrine/doctrine-bundle": {
"version": "2.13",
"recipe": {
diff --git a/templates/admin/dashboard.html.twig b/templates/admin/dashboard.html.twig
index 260112e..a8da401 100644
--- a/templates/admin/dashboard.html.twig
+++ b/templates/admin/dashboard.html.twig
@@ -3,10 +3,7 @@
{% block body_id 'dashboard' %}
{% block main %}
-
Welcome to the EasyAdmin Demo project!
+ {{ 'admin.dashboard.page_title'|trans }}
-
- This is a demo project to show you how the EasyAdmin bundle works.
- Use the sidebar links to navigate through the demo application.
-
+ {{ 'admin.dashboard.description'|trans }}
{% endblock %}
diff --git a/templates/admin/regenerate_fixtures.html.twig b/templates/admin/regenerate_fixtures.html.twig
index 3e7ccb6..47ea96c 100644
--- a/templates/admin/regenerate_fixtures.html.twig
+++ b/templates/admin/regenerate_fixtures.html.twig
@@ -3,20 +3,13 @@
{% block body_id 'regenerate-fixtures' %}
{% block main %}
- Regenerate the fixtures data used in this project
+ {{ 'admin.regenerate_fixtures.page_title'|trans }}
-
- This demo project includes some pre-generated fixtures so you can start
- using it immediately.
-
+ {{ 'admin.regenerate_fixtures.description'|trans }}
-
- We use Foundry ,
- which makes creating fixtures in Symfony applications fun again.
- If you want, you can regenerate the fixtures data by clicking the button below.
-
+ {{ 'admin.regenerate_fixtures.description_bis'|trans|raw }}
{% endblock %}
diff --git a/templates/bundles/EasyAdminBundle/layout.html.twig b/templates/bundles/EasyAdminBundle/layout.html.twig
new file mode 100644
index 0000000..3d0b18b
--- /dev/null
+++ b/templates/bundles/EasyAdminBundle/layout.html.twig
@@ -0,0 +1,419 @@
+{# @var ea \EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext #}
+{% trans_default_domain ea.i18n.translationDomain %}
+
+
+
+
+ {% block head_metas %}
+
+
+
+
+
+ {% endblock head_metas %}
+
+ {% set page_title_block_output %}{% block page_title %}{{ block('content_title') }}{% endblock %}{% endset %}
+ {{ page_title_block_output|striptags|raw }}
+
+ {% block head_stylesheets %}
+
+ {% endblock %}
+
+ {% block configured_stylesheets %}
+ {{ include('@EasyAdmin/includes/_css_assets.html.twig', { assets: ea.assets.cssAssets ?? [] }, with_context = false) }}
+ {{ include('@EasyAdmin/includes/_encore_link_tags.html.twig', { assets: ea.assets.webpackEncoreAssets ?? [] }, with_context = false) }}
+ {% endblock %}
+
+ {% block head_favicon %}
+
+ {% endblock %}
+
+ {% block head_javascript %}
+
+
+ {% block importmap %}
+ {{ include('@EasyAdmin/includes/_importmap.html.twig', { assets: ea.assets.assetMapperAssets ?? [] }, with_context = false) }}
+ {% endblock %}
+ {% endblock head_javascript %}
+
+ {% block configured_javascripts %}
+ {{ include('@EasyAdmin/includes/_js_assets.html.twig', { assets: ea.assets.jsAssets ?? [] }, with_context = false) }}
+ {{ include('@EasyAdmin/includes/_encore_script_tags.html.twig', { assets: ea.assets.webpackEncoreAssets ?? [] }, with_context = false) }}
+ {% endblock %}
+
+ {% block configured_head_contents %}
+ {% for htmlContent in ea.assets.headContents ?? [] %}
+ {{ htmlContent|raw }}
+ {% endfor %}
+ {% endblock %}
+
+
+{% block body %}
+
+ {% block javascript_page_layout %}
+
+ {% endblock javascript_page_layout %}
+ {% block javascript_page_color_scheme %}
+
+ {% endblock javascript_page_color_scheme %}
+
+ {% block wrapper_wrapper %}
+ {% block flash_messages %}
+ {{ include(ea.templatePath('flash_messages')) }}
+ {% endblock flash_messages %}
+
+ {% set user_menu_avatar %}
+ {% if null == ea.userMenu.avatarUrl %}
+
+
+
+ {% else %}
+
+ {% endif %}
+ {% endset %}
+
+ {% set user_menu %}
+ {% block user_menu %}
+ {% if ea.userMenu.items|length > 0 %}
+
+
+ {% for item in ea.userMenu.items %}
+ {% if item.isMenuSection %}
+ {% if not loop.first %}
+
+ {% endif %}
+
+
+ {% else %}
+
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ {% endblock %}
+ {% endset %}
+
+ {% set impersonator_permission = constant('Symfony\\Component\\Security\\Core\\Authorization\\Voter\\AuthenticatedVoter::IS_IMPERSONATOR') is defined ? 'IS_IMPERSONATOR' : 'ROLE_PREVIOUS_ADMIN' %}
+
+ {% set user_menu_dropdown %}
+
+
+ {{ user_menu_avatar }}
+
+ {{ 'user.logged_in_as'|trans(domain = 'EasyAdminBundle') }}
+ {{ ea.user is null ? 'user.anonymous'|trans(domain = 'EasyAdminBundle') : ea.userMenu.name }}
+
+
+
+ {{ user_menu }}
+
+ {% endset %}
+
+ {% set settings_dropdown %}
+ {% if ea.dashboardLocales or ea.dashboardHasDarkModeEnabled %}
+
+
+
+
+
+
+
+ {% if ea.dashboardLocales %}
+
+ {% endif %}
+
+ {% for localeDto in ea.dashboardLocales %}
+ {% if ea.usePrettyUrls %}
+ {% set url = ea_url().set('_locale', localeDto.locale).set('entityId', app.request.attributes.get('entityId')) %}
+ {% else %}
+ {% set url = ea_url().set('_locale', localeDto.locale) %}
+ {% endif %}
+
+ {% endfor %}
+
+ {% if ea.dashboardHasDarkModeEnabled %}
+ {% if ea.dashboardLocales %}
+
+ {% endif %}
+
+
+
+
+
+
+ {% endif %}
+
+
+
+ {% endif %}
+ {% endset %}
+
+
+ {% block wrapper %}
+
+
+
+ {% block main_content_wrapper %}
+
+ {% set has_search = ea.crud is not null and ea.crud.isSearchEnabled %}
+
+ {% block content_top_header %}
+ {% block search_wrapper %}
+
+ {% if has_search %}
+ {% block search %}
+ {% set formActionUrl = null %}
+ {% if ea.usePrettyUrls %}
+ {# even if the app uses pretty URLs, the user might be using an ugly URL, so the controller might be defined in the query string #}
+ {% set crudController = ea.request.attributes.get('crudControllerFqcn') ?? ea.request.query.get('crudControllerFqcn') %}
+ {% set formActionUrl = ea_url().setController(crudController).setAction('index').set('page', 1) %}
+ {% endif %}
+
+ {% endblock search %}
+ {% endif %}
+
+ {% endblock search_wrapper %}
+
+ {% block header_custom_menu_wrapper %}
+
+ {% endblock header_custom_menu_wrapper %}
+
+ {% block settings_dropdown_wrapper %}
+ {{ settings_dropdown }}
+ {% endblock settings_dropdown_wrapper %}
+ {% endblock content_top_header %}
+
+
+
+ {% block content %}
+
+ {% block content_header_wrapper %}
+ {% set has_help_message = (ea.crud.helpMessage ?? '') is not empty %}
+
+ {% endblock content_header_wrapper %}
+
+
+ {% block main %}{% endblock %}
+
+
+ {% block content_footer_wrapper %}
+ {% set content_footer = block('content_footer') is defined ? block('content_footer') : '' %}
+ {% if content_footer is not empty %}
+
+ {% endif %}
+ {% endblock %}
+
+ {% endblock content %}
+
+
+
+
+ {% endblock main_content_wrapper %}
+ {% endblock wrapper %}
+
+
+ {% endblock wrapper_wrapper %}
+
+ {% block body_javascript %}{% endblock body_javascript %}
+
+ {% block configured_body_contents %}
+ {% for htmlContent in ea.assets.bodyContents ?? [] %}
+ {{ htmlContent|raw }}
+ {% endfor %}
+ {% endblock %}
+
+{% endblock body %}
+
diff --git a/translations/messages.en.yaml b/translations/messages.en.yaml
new file mode 100644
index 0000000..02fd13d
--- /dev/null
+++ b/translations/messages.en.yaml
@@ -0,0 +1,77 @@
+admin:
+ dashboard:
+ description: 'This is a demo project to show you how the EasyAdmin bundle works. Use the sidebar links to navigate through the demo application.'
+ page_title: 'Welcome to the EasyAdmin Demo project!'
+ regenerate_fixtures:
+ submit_button: 'Regenerate Fixtures'
+ description: 'This demo project includes some pre-generated fixtures so you can start using it immediately.'
+ description_bis: 'We use Foundry , which makes creating fixtures in Symfony applications fun again. If you want, you can regenerate the fixtures data by clicking the button below.'
+ page_title: 'Regenerate the fixtures data used in this project'
+Array Field: 'Array Field'
+Association & Collection Fields: 'Association & Collection Fields'
+Association Field: 'Champ Association'
+Boolean Field: 'Boolean Field'
+Choice 1: 'Choice 1'
+Choice 2: 'Choice 2'
+Choice 3: 'Choice 3'
+Choice Field (autocomplete): 'Choice Field (autocomplete)'
+Choice Field (checkbox): 'Choice Field (checkbox)'
+Choice Field (radiobutton): 'Choice Field (radiobutton)'
+Choice Fields: 'Choice Fields'
+Code Editor Field: 'Code Editor Field'
+Comment: 'Comment'
+Comments: 'Comments'
+Collection Field (complex): 'Collection Field (complex)'
+Collection Field (simple): 'Collection Field (simple)'
+Blog Posts: 'Blog Posts'
+Color Field: 'Color Field'
+Country Field: 'Country Field'
+Currency Field: 'Currency Field'
+Dashboard: 'Dashboard'
+Date Field: 'Date Field'
+Date and Time Fields: 'Date and Time Fields'
+DateTime Field: 'DateTime Field'
+EasyAdmin Demo: 'EasyAdmin Demo'
+EasyAdmin Docs: 'EasyAdmin Docs'
+Email: 'Email'
+Email Field: 'Email Field'
+files: 'files'
+Fixtures data: 'Fixtures data'
+Form Field Reference: 'Form Field Reference'
+Full Name: 'Full Name'
+ID: 'ID'
+Id Field: ' Id Field'
+Image Field: "Image Field"
+Image Fields: "Image Fields"
+Integer Field: 'Integer Field'
+Internationalization Fields: 'Internationalization Fields'
+Language Field: 'Language Field'
+Links: 'Links'
+Locale Field: 'Locale Field'
+Money Field: 'Money Field'
+Name: 'Name'
+None: 'None'
+Number Field: 'Number Field'
+Numeric Fields: 'Numeric Fields'
+Other Fields: 'Other Fields'
+Percent Field: 'Percent Field'
+Post: 'Post'
+Published At: 'Published At'
+Resources: 'Resources'
+Slug Field: 'Slug Field'
+Sponsor EasyAdmin: 'Sponsor EasyAdmin'
+Summary: 'Summary'
+Tag: 'Tag'
+Tags: 'Tags'
+Telephone Field: 'Telephone Field'
+Text Editor Field: 'Text Editor Field'
+Text Field: 'Text Field'
+Text Fields: 'Text Fields'
+Textarea Field: 'Textarea Field'
+Time Field: 'Time Field'
+Timezone Field: 'Timezone Field'
+Title: 'Title'
+Url Field: 'Url Field'
+Username: "Username"
+User: 'User'
+Users: 'Users'
\ No newline at end of file
diff --git a/translations/messages.fr.yaml b/translations/messages.fr.yaml
new file mode 100644
index 0000000..e821978
--- /dev/null
+++ b/translations/messages.fr.yaml
@@ -0,0 +1,77 @@
+admin:
+ dashboard:
+ description: "Il s'agit d'un projet de démonstration visant à vous montrer comment fonctionne le bundle EasyAdmin. Utilisez les liens de la barre latérale pour naviguer dans l'application de démonstration."
+ page_title: 'Bienvenue dans le projet EasyAdmin Demo !'
+ regenerate_fixtures:
+ submit_button: "Régénérer données relatives à l'installation"
+ description: "Ce projet de démonstration comprend des éléments pré-générés afin que vous puissiez commencer à l'utiliser immédiatement."
+ description_bis: 'Nous utilisons Foundry , qui rend la création de fixtures dans les applications Symfony à nouveau agréable. Si vous le souhaitez, vous pouvez régénérer les données des fixtures en cliquant sur le bouton ci-dessous.'
+ page_title: "Régénérer les données relatives à l'installation utilisées dans ce projet"
+Array Field: 'Champ tableau'
+Association & Collection Fields: 'Champs Association et Collection'
+Association Field: 'Champ Association'
+Boolean Field: 'Champ booléen'
+Choice 1: 'Choix 1'
+Choice 2: 'Choix 2'
+Choice 3: 'Choix 3'
+Choice Field (autocomplete): 'Champ de sélection (saisie semi-automatique)'
+Choice Field (checkbox): 'Champ de sélection (case à cocher)'
+Choice Field (radiobutton): 'Champ de sélection (bouton radio)'
+Choice Fields: 'Champs de sélection'
+Code Editor Field: 'Champ Éditeur de code'
+Comment: 'Commentaire'
+Comments: 'Commentaires'
+Collection Field (complex): 'Champ de collecte (complexe)'
+Collection Field (simple): 'Champ de collecte (simple)'
+Blog Posts: 'Articles de blog'
+Color Field: 'Champ de couleur'
+Country Field: 'Champ pays'
+Currency Field: 'Champ Devise'
+Dashboard: 'Tableau de bord'
+Date Field: 'Champ Date'
+Date and Time Fields: 'Champs Date et Heure'
+DateTime Field: 'Champ Date/Heure'
+EasyAdmin Demo: 'Démonstration EasyAdmin'
+EasyAdmin Docs: 'Documentation EasyAdmin'
+Email: 'Courriel'
+Email Field: 'Champ e-mail'
+files: 'fichiers'
+Fixtures data: "Données relatives à l'installation"
+Form Field Reference: 'Référence des champs du formulaire'
+Full Name: 'Nom complet'
+ID: 'ID'
+Id Field: ' Champ Id'
+Image Field: "Champ d'image"
+Image Fields: "Champs d'image"
+Integer Field: 'Champ entier'
+Internationalization Fields: "Champs d'internationalisation"
+Language Field: 'Champ linguistique'
+Links: 'Liens'
+Locale Field: 'Champ locale'
+Money Field: "Champ d'argent"
+Name: 'Nom'
+None: 'Aucun'
+Number Field: 'Champ numérique'
+Numeric Fields: 'Champs numériques'
+Other Fields: 'Autres champs'
+Percent Field: 'Champ pourcentage'
+Post: 'Article'
+Published At: 'Publié à'
+Resources: 'Ressources'
+Slug Field: 'Champ Slug'
+Sponsor EasyAdmin: 'Sponsorisez EasyAdmin'
+Summary: 'Résumé'
+Tag: 'Tag'
+Tags: 'Tags'
+Telephone Field: 'Champ Téléphone'
+Text Editor Field: 'Champ Éditeur de texte'
+Text Field: 'Champ de texte'
+Text Fields: 'Champs de texte'
+Textarea Field: 'Champ de zone de texte'
+Time Field: 'Champ temporel'
+Timezone Field: 'Champ Fuseau horaire'
+Title: 'Titre'
+Url Field: 'Champ URL'
+Username: "Nom d'utilisateur"
+User: 'Utilisateur'
+Users: 'Utilisateurs'
\ No newline at end of file