Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the best way to localise a date on Laravel?

Tags:

php

laravel

Take this example:

{{ $article->created_at->format('M') }}

It returns Nov. I need to localise this to my language, so the output should be Kas

Thought about doing the following:

{{ trans("language.{$article->created_at->format('M')}") }}

app/lang/tr/language.php -> 'nov' => 'kas'

This looks like reinventing the wheel and programmatically pretty terrible. I'm sure there are some localisation standards. Something like:

{{ $article->created_at->format('M')->localiseTo('tr_TR') }}

What's the best way to achieve this?

like image 802
Aristona Avatar asked Nov 18 '13 20:11

Aristona


People also ask

How do you do localization in Laravel?

Localization feature of Laravel supports different language to be used in application. You need to store all the strings of different language in a file and these files are stored at resources/views directory. You should create a separate directory for each supported language.

How can get today date in Laravel?

From Laravel 5.5 you can use now() function to get the current date and time. In blade file, you can write like this to print date.


4 Answers

Using a library as Laravel-Date you will just need to set the language of the app in the Laravel app config file and use its functions to format the date as you want.

Set the language in /app/config/app.php

'locale' => 'es',

I've found this library pretty useful and clean. To use it, you can write something like the example in the library readme file. I leave the results in spanish.

echo Date::now()->format('l j F Y H:i:s'); // domingo 28 abril 2013 21:58:16

echo Date::parse('-1 day')->diffForHumans(); // 1 día atrás

This is the link to the repository:

https://github.com/jenssegers/laravel-date

To install this library you can follow the instructions detailed in the following link:

https://github.com/jenssegers/laravel-date#installation

like image 97
Marco Florian Avatar answered Oct 09 '22 13:10

Marco Florian


When you retrieve a date off a model in Laravel, you get back a Carbon object: https://github.com/briannesbitt/Carbon

If you refer to the Carbon documentation, it tells you how you can get a locale formatted Date:

Unfortunately the base class DateTime does not have any localization support. To begin localization support a formatLocalized($format) method has been added. The implementation makes a call to strftime using the current instance timestamp. If you first set the current locale with setlocale() then the string returned will be formatted in the correct locale.

setlocale(LC_TIME, 'German');                     
echo $dt->formatLocalized('%A %d %B %Y');          // Donnerstag 25 Dezember 1975
setlocale(LC_TIME, '');                           
echo $dt->formatLocalized('%A %d %B %Y');          // Thursday 25 December 1975

So basically, just use formatLocalized('M') instead of format('M')

like image 25
Brian Glaz Avatar answered Oct 09 '22 15:10

Brian Glaz


As of carbon version 2.30.0, you can use the translatedFormat function

$date = Carbon::parse('2021-12-08 11:35')->locale('pt-BR');
echo $date->translatedFormat('d F Y'); //  08 dezembro 2021
like image 24
Arthur Tavares Avatar answered Oct 09 '22 15:10

Arthur Tavares


It is also a good idea to set locale globally for each request (eg. in filters.php) when using Carbon date instances.

App::before(function($request) {
    setlocale(LC_TIME, 'sk_SK.utf8');
});

and then proceed as usual

$dt->formatLocalized('%b'); // $dt is carbon instance

See format options here and list of locales here.

like image 22
zub0r Avatar answered Oct 09 '22 15:10

zub0r