Skip to content
Advertisement

PHP setlocale has no effect

The setlocale() function doesn’t set the desired language (German).


The goal is to output month names.

This is my test code with trials so far:

<?php

date_default_timezone_set('Europe/Berlin');
setlocale(LC_ALL, 'de_DE.utf8');
// Or
setlocale(LC_ALL, 'de_DE@euro');
// Or
setlocale(LC_ALL, 'de_DE');
// Or
setlocale(LC_ALL, 'de');
// Or
setlocale(LC_ALL, 'ge');


echo strftime('%B');

Output:

June

instead of

Juni

Any suggestions?

  • I don’t have ssh or other shell access.
  • The script is running on a linux server.

PHP version 5.6

Advertisement

Answer

This solution might help if you don’t have shell access to the server.

If you have shell access, then Benjamin Seiller’s answer is the best!

As I don’t have any other possibilities (shell), I’ve found a solution with only PHP by using the IntlDateFormatter class.

<?php

// Example vars
$month = '6';
$year = '2014';

$fmt = new IntlDateFormatter('de_DE',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Berlin',
    IntlDateFormatter::GREGORIAN);

$lastMonth = mktime(0, 0, 0, $month -1, 1, $year);

$showLastMonth =  $fmt->format($lastMonth);
echo $showLastMonth;
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement