Рубрики
Uncategorized

Об улучшении преобразования языка поля time ago в проекте laravel

Автор оригинала: David Wong.

В наших прошлых проектах larravel часто использовалось время. Есть много способов реализовать такие поля, как ago, и преобразовать их в знакомый нам местный язык, например, написать время. Вспомогательная функция ago преобразует его в локальный или использует carbon s diffForHumans Функция затем заменяется на местный язык.

Код, который мы написали в прошлом, выглядит так: такой

Однако, когда нам нужно заменить его китайским, традиционным китайским, японским или корейским, нам нужно написать несколько аналогичных методов, таких как:

time_ ago_ Cn // Simplified Chinese
time_ ago_ HK // traditional Chinese
time_ ago_ JP // Japanese
time_ ago_ Ko // Korean

Когда проект становится международным или нуждается в поддержке большего количества языков, это не очень удобно. Однако недавно, когда я прочитал официальные документы carbon, я обнаружил, что carbon поддерживает несколько языков, то есть carbon реализовал все вышеперечисленное… (это добавляет еще одну сумму к нашему техническому долгу)

Если мы хотим поддерживать китайский язык, мы можем добавить в модель описанные выше методы

public function createdAt($locale = 'zh')
{
    Carbon::setLocale($locale);
    return $this->created_at->diffForHumans();
}

Затем вызываются следующие методы:

//Chinese
$user > createdat(); // 9 months ago
//Simplified traditional Chinese
$user->createdAt('zh_ HK '); // 9 months ago
//Japanese
$user->createdAt('ja_ JP '); // 9 months ago

Если вы хотите сделать его более общим, рекомендуется инкапсулировать его как вспомогательную функцию

function time_ago($time, $locale = 'zh')
{
    $time = $time instanceof Carbon ? $time : Carbon::parse($time);
    Carbon::setLocale($locale);
    return $time->diffForHumans();
}

Языковая поддержка Carbon: https://carbon.nesbot.com/contribute/translate/

По умолчанию Carbon2.0 поддерживается в laravel 5.8. Если он ниже этой версии, вы можете использовать carbon2.0 следующими способами, например larave5.6

оставайтесь композитором.json Добавьте следующие параметры в

{
    "require": {
        "nesbot/carbon": "2.24.0 as 1.39.0",
        "kylekatarnls/laravel-carbon-2": "^1.0.0"
    }
}

Затем мы выполняем обновление composer, чтобы обновить наши зависимости

composer update

Наконец, мы отправим официальный адрес документа по углероду: https://carbon.nesbot.com/