Использование strftime()
в сочетании с setlocale()
является опцией.
Однако вы должны знать, что на многопоточных установках php setlocale()
может вести себя неожиданно, поскольку информация о локали поддерживается для каждого процесса, а не для каждого потока. Поэтому важно каждый раз вызывать setlocale()
перед каждым вызовом strftime()
, чтобы гарантировать, что он использует правильную локаль.
Кроме того, для систем Windows вам нужно использовать несколько необычные строки для параметра $locale
для setlocale()
.
См. Документы для получения дополнительной информации по обоим этим вопросам.
Примерно так должно работать:
// define the locales for setlocale() for which we need the daynames
$locales = array(
'en_EN',
'de_DE',
'nl_NL'
// etc...
);
// be aware that setlocale() needs different values on Windows machines
// see the docs on setlocale() for more information
$locales = array(
'english',
'german',
'dutch'
// etc...
);
// let's remember the current local setting
$oldLocale = setlocale( LC_TIME, '0' );
// initialize out result array
$localizedWeekdays = array();
// loop each locale
foreach( $locales as $locale )
{
// create sub result array for this locale
$localizedWeekdays[ $locale ] = array();
// 7 days in a week
for( $i = 0; $i < 7; $i++ )
{
// set the locale on each iteration again
setlocale( LC_TIME, $locale );
// combine strftime() with the nifty strtotime()
$localizedWeekdays[ $locale ][] = strftime( '%A', strtotime( 'next Monday +' . $i . ' days' ) );
// reset the locale for other threads, as a courtesy
setlocale( LC_TIME, $oldLocale );
}
}
// there is your result in a multi-dimensional array
var_dump( $localizedWeekdays );