Reputation: 4330
I know there is much about this, but it doesn't work, I have the language installed.
locale -a | grep es
es_ES
es_ES.ISO8859-1
es_ES.ISO8859-15
es_ES.UTF-8
I have set to utf-8
\Carbon\Carbon::setUtf8(true);
setlocale(LC_ALL, 'es_ES.UTF-8');
$game_date = $date->formatLocalized('%A %d %B %Y %H %M %p');
I have the utf-8 tag in my html
<meta charset="utf-8">
but I am still getting the wrong characters.
"sábado" - "miércoles"
Upvotes: 4
Views: 2642
Reputation: 513
I had the same problem when trying to use the sk_SK.UTF-8
locale. What helped me to solve the problem was to remove the \Carbon\Carbon::setUtf8(true);
portion of the code.
But why does it work like this? Firstly the Carbon documentation regarding the setUtf8 function says this:
Some languages require utf8 encoding to be printed (locale packages that does not ends with .UTF8 mainly). In this case you can use the static method Carbon::setUtf8() to encode the result of the formatLocalized() call to the utf8 charset.
Upon examining the source code for Carbon the formatLocalized()
function calls utf8_encode()
function from the PHP library if we previously set the variable utf8 to true with the already mentioned Carbon::setUtf8(true)
.
Carbon source on GitHub
return static::$utf8 ? utf8_encode($formatted) : $formatted;
Because your locale is already configured to use the UTF-8 standard the further php encoding messes the formatted string up.
I figured that if you want to use Carbon to format your strings to utf8 you must first get rid of the UTF-8 encoding when setting your locale with setLocale()
. However, I would just stick to removing the Carbon function and using the proper locale.
TL;DR
Use correct locale with UTF-8 encoding e.g. es_ES.UTF-8
or use try to use locale without the UTF-8 encoding and rely on \Carbon\Carbon::setUtf8(true);
and utf8_encode()
function. I suggest the first option. Hope this helped :)
Upvotes: 11