Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je suis en train de refaire un site internet sous Laravel. Je suis donc en train de formater les dates aux bons formats.
Initialisation de carbon:

<?php
//AppServiceProvider
...
use Carbon\Carbon;
....
public function boot()
    {
        Carbon::setLocale(config('app.locale')); // fr
    }
?>

Ce que je veux

Je souhaiterais écrire les dates en français en toutes lettres.

Ce que j'obtiens

J'obtiens bien les dates, mais pas en français, je les ai en Anglais.

<?php
echo strtolower($dt->formatLocalized("%d %B %Y"));
// 03 august 2018
echo strtolower($dcd->formatLocalized("%d %B %Y à %Hh%M"));
// 04 september 2018 à 08h00
?>

Je suis en train de me dire de plus en plus que cela vient plutôt de mon environnement de travail et non du code source.

$ locale -a
C
fr_FR.utf8
POSIX

Si l'un de vous aurais une idée, je suis preneur.
Merci d'avance.

1 réponse


StanislasP
Réponse acceptée

Bonjour,
J'ai eu e même soucis, je les régler ainsi avec ma propre image docker :

1) Editer le fichier /etc/locale.gen
Retirer le # de la ligne # fr_FR.UTF-8 UTF-8
Enregistrer puis appliquer la commande locale-gen

Ensuite, malgré l'application de la langue Française, il faut indiquer à Laravel et Carbon la langue à utiliser :
2) Dans le .env ajoute/modifie cela

APP_TIMEZONE=Europe/Paris
APP_LOCALE=fr
APP_PHP_LOCALE=fr_FR.utf-8

3) Créer un middleware PhpSetLocale pour y mettre cela
la commande : php artisan make:middleware PhpSetLocale

  <?php

namespace App\Http\Middleware;

use Carbon\Carbon;
use Closure;

class PhpSetLocale
{
    /**
     * Handle an incoming request.
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure                 $next
     *
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        setlocale(LC_ALL, env('APP_PHP_LOCALE'));
        Carbon::setLocale(env('APP_LOCALE'));

        return $next($request);
    }
}

4) Enfin, édite le Kernel.php pour ajouter dans le $middleware

\App\Http\Middleware\PhpSetLocale::class,

Comme cela, ton environnement dispose de la langue voulu, et le middleware PhpSetLocale sera applique a chaque requete et vas paramétrer le thread et la configuration de Carbon pour utiliser la langue passer dans le .env.