Laravel strftime с Homestead не работает

У меня было много проблем с форматированием даты с моей локализацией с использованием Laravel и Homestead (я не знаю, есть ли у homestead какие-либо конфигурации сервера, из-за которых он не работает, но это мое). Я думаю, что любой в Интернете боролся с той же проблемой. Я искал ответ часами, так и не приблизившись к решению. Это мой код.

public function formated_start()
{
    setlocale(LC_ALL, 'sv_SE');
    return strftime('%A %H:%M', strtotime($this->start));
}

Я также пробовал с laravel

public function formated_start()
{
    App::setLocale('sv_SE')
    return strftime('%A %H:%M', strtotime($this->start));
}

Тем не менее с тем же результатом ничего не изменилось, и %A, который должен быть днем ​​недели на моем языке, в этом случае шведский, все еще на английском языке.


person murum    schedule 08.07.2014    source источник


Ответы (3)


Homestead предоставляет систему Ubuntu. Поэтому сначала проверьте, какие локали доступны в вашей системе с помощью locale -a. Возможно, шведская локаль называется sv_SE.iso88591 или sv_SE.utf8. Если он не установлен, вы можете установить его с помощью:

sudo locale-gen sv_SE sv_SE.utf8

После установки ваше первое решение с setlocale(); должно работать. Это будет способ PHP для генерации дат.

Не забудьте перезапустить сервер после того, как вы установили описанную локаль.

sudo nginx restart

Путь Laravel

Для Laravel-way вам нужно сгенерировать локальные переменные самостоятельно. Начните с добавления файла локали в /app/lang/sv/days.php с помощью:

<?php

return array(
    'Monday' => 'måndag',
    'Tuesday' => 'tisdag',
    'Wednesday' => '..',
    'Thursday' => '..',
    'Friday' => '..',
    'Saturday' => 'lördag',
    'Sunday' => '..',
);

Теперь вы можете использовать App::setLocale() с Lang::get():

App::setLocale('sv');
echo Lang::get(sprintf('days.%s', date('l')));

Это намного сложнее, но если вы размещаете Laravel в среде общего хостинга, где вы не можете генерировать локали, это может быть возможным способом.

person maxwilms    schedule 08.07.2014
comment
Я попробую это, большое спасибо за ваше время. Просто комментарий, это не 100% ответ на мой вопрос, так как это не решает проблему с strftime, это какой-то хитрый способ обхода strftime. Итак, с этим решением мне нужно добавить час и минуту в строку, прежде чем я верну значение, не могли бы вы отредактировать свой ответ на ответ strftime, и я, вероятно, отмечу ваш ответ как принятый, когда я попробовал это. - person murum; 09.07.2014
comment
Этот код (laravel.io/bin/wG1O0) делает правильный вывод, но все еще не с strftime, и я Лично я думаю, что strftime — лучшая функция для работы, если бы я мог заставить работать эти чертовы локали. У вас есть идеи, почему это не работает? - person murum; 09.07.2014
comment
Я видел, что мне не хватает локалей, как вы сказали мне добавить. Но все еще не работает с PHP-способом, так сказать - person murum; 09.07.2014
comment
После использования sudo locale-gen sv_SE что говорит вам вывод locale -a? - person maxwilms; 10.07.2014
comment
После того, как я это сделал, были добавлены: sv_SE sv_SE.iso88591 sv_SE.utf8 - person murum; 10.07.2014
comment
Ok. Пожалуйста, перезапустите веб-сервер: sudo nginx restart. - person maxwilms; 10.07.2014
comment
Святые макароны, которые сделали это. Большое спасибо! - person murum; 11.07.2014

Кажется, это работает для меня, по крайней мере, в Windows.

setlocale(LC_ALL, 'sv_SE', 'Swedish', 'swedish');
person user1669496    schedule 08.07.2014

Если ваша проблема в целом, вместо конкретного использования strftime вы можете попробовать Laravel4- lang, он устанавливается через composer. Добавьте в файл composer.json:

"require": { "laravel/framework": "4.2.*", "caouecs/laravel4-lang": "dev-master" },

Затем обновите пакет:

composer update caouecs/laravel4-lang

Обновить

Это тоже сработало очень хорошо: https://github.com/jenssegers/laravel-date

person Cristian    schedule 15.10.2014