Любые идеи для перевода рабочих дней и месяцев PHP на местный язык? У меня есть сценарий, который печатает будние дни следующих 5 недель, и я хочу, чтобы они были на другом языке.
$timestamp = strtotime('next Monday'); for ($i = 0; $i < 35; $i++) { echo strftime('%A', $timestamp)." "; $timestamp = strtotime('+1 day', $timestamp); }
Есть ли хорошая интеграция, например, с PHP и moment.js? Я посмотрел на использование форматов даты () PHP в моментах. Js и GitHub fightbulc / moment.php , но я не понимаю, как их использовать.
Заранее спасибо.
я думаю, что вы ищете здесь
пожалуйста, проверьте это, и если вы, пожалуйста, проверьте это также
ОБНОВИТЬ
setlocale(LC_TIME, "fi"); echo utf8_encode(strftime('%A'));
РЕЗУЛЬТАТ
perjantaina
И это в качестве подарка для вас, ребята, коды языка ISO
Видеть это
Вы можете использовать IntlDateFormatter
следующим образом:
$fmt = new IntlDateFormatter('fin', IntlDateFormatter::FULL, IntlDateFormatter::NONE, null, null, "cccc"); $timestamp = strtotime('next Monday'); echo $fmt->format($timestamp);
Вывод:
maanantai
В зависимости от грамматического контекста вам может понадобиться «eeee» в качестве последнего аргумента вместо «cccc»:
maanantaina
Я сделал следующее, чтобы действительно переводить месяцы и будни с любого языка (который установлен на сервере).
Даже подумал, что на эту тему уже давно будет дан ответ, я отправлю ее, так как она действительно может помочь некоторым людям.
Используется setlocale (), но также сбрасывается; поэтому он не может испортить остальную часть вашего кода.
Это функции, которые вы можете использовать:
weekdayToEnglish($locale,$weekday,$short)
weekdayFromEnglish($locale,$weekday,$short)
monthToEnglish( $locale,$month,$short)
monthFromEnglish($locale,$month,$short)
$ locale – это язык, который вы используете в setlocale () , зависит от вашего сервера, в основном что-то вроде fr_FR;
$ weekday или $ month, чтобы название месяца недели было переведено
(необязательно) $ short, если true дает (локализованную) короткую нотацию (например, Thu вместо четверга или Oct вместо Octobre)
Код:
function weekdayToEnglish($locale,$weekday,$short=false) { return dateElementToEnglish($locale, $weekday, $short ? "%a" : "%A", $short? "D" : "l", 'tm_wday', "Sunday +" ," days") ; } function weekdayFromEnglish($locale,$weekday,$short=false) { return dateElementFromEnglish($locale, $weekday, $short?"%a":"%A"); } function monthToEnglish( $locale,$month,$short=false) { return dateElementToEnglish($locale, $month, $short ? "%b" : "%B", $short ? "M" : "F", 'tm_mon', "January+" ," months") ; } function monthFromEnglish($locale,$month,$short=false) { return dateElementFromEnglish($locale, $month, $short ? "%b" : "%B"); } function dateElementToEnglish($locale, $text, $strfTimeformat, $dateFormat, $dateArrayIndex, $strToTimePrefix, $strToTimeSuffix) { $saveLocale = setlocale(LC_TIME,0);setlocale(LC_TIME,$locale); $translateToNr = strptime($text, $strfTimeformat)[$dateArrayIndex] ; $readDate = strtotime($strToTimePrefix . $translateToNr . $strToTimeSuffix); $translation = date($dateFormat, $readDate); setlocale(LC_TIME,$saveLocale); return $translation; } function dateElementFromEnglish($locale,$text,$strfTimeformat) { $saveLocale = setlocale(LC_TIME,0);setlocale(LC_TIME,$locale); $translation = strftime($strfTimeformat,strtotime($text)); setlocale(LC_TIME,$saveLocale); return $translation; }
Например:
echo weekdayToEnglish("nl_NL","vrijdag")."<br>"; echo weekdayFromEnglish("fi_FI","Monday")."<br>"; echo weekdayToEnglish("nl_NL","wo", true)."<br>"; echo weekdayFromEnglish("de_DE","Thu", true)."<br>"; echo weekdayFromEnglish("fr_FR",weekdayToEnglish("nl_NL","zaterdag"))."<br>"; echo monthFromEnglish("de_DE", "March")."<br>"; echo monthFromEnglish("fr_FR", "February", true)."<br>"; echo monthToEnglish("fr_FR", "avril")."<br>"; echo monthToEnglish("fi_FI", "joulukuu", true)."<br>";
Будет давать:
Friday maanantai Wed Do samedi März févr. April Dec