mirror of https://github.com/kevachat/webapp.git
![localhost](/assets/img/avatar_default.png)
8 changed files with 224 additions and 17 deletions
@ -0,0 +1,15 @@ |
|||||||
|
framework: |
||||||
|
default_locale: en |
||||||
|
translator: |
||||||
|
default_path: '%kernel.project_dir%/translations' |
||||||
|
fallbacks: |
||||||
|
- en |
||||||
|
# providers: |
||||||
|
# crowdin: |
||||||
|
# dsn: '%env(CROWDIN_DSN)%' |
||||||
|
# loco: |
||||||
|
# dsn: '%env(LOCO_DSN)%' |
||||||
|
# lokalise: |
||||||
|
# dsn: '%env(LOKALISE_DSN)%' |
||||||
|
# phrase: |
||||||
|
# dsn: '%env(PHRASE_DSN)%' |
@ -0,0 +1,132 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace App\Twig; |
||||||
|
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerInterface; |
||||||
|
use Symfony\Contracts\Translation\TranslatorInterface; |
||||||
|
use Twig\Extension\AbstractExtension; |
||||||
|
use Twig\TwigFilter; |
||||||
|
|
||||||
|
class AppExtension extends AbstractExtension |
||||||
|
{ |
||||||
|
protected TranslatorInterface $translator; |
||||||
|
|
||||||
|
public function __construct( |
||||||
|
ContainerInterface $container, |
||||||
|
TranslatorInterface $translator |
||||||
|
) |
||||||
|
{ |
||||||
|
$this->container = $container; |
||||||
|
$this->translator = $translator; |
||||||
|
} |
||||||
|
|
||||||
|
public function getFilters() |
||||||
|
{ |
||||||
|
return |
||||||
|
[ |
||||||
|
new TwigFilter( |
||||||
|
'format_ago', |
||||||
|
[ |
||||||
|
$this, |
||||||
|
'formatAgo' |
||||||
|
] |
||||||
|
), |
||||||
|
new TwigFilter( |
||||||
|
'url_to_markdown', |
||||||
|
[ |
||||||
|
$this, |
||||||
|
'urlToMarkdown' |
||||||
|
] |
||||||
|
) |
||||||
|
]; |
||||||
|
} |
||||||
|
|
||||||
|
public function formatAgo( |
||||||
|
int $time, |
||||||
|
): string |
||||||
|
{ |
||||||
|
$diff = time() - $time; |
||||||
|
|
||||||
|
if ($diff < 1) |
||||||
|
{ |
||||||
|
return $this->translator->trans('now'); |
||||||
|
} |
||||||
|
|
||||||
|
$values = |
||||||
|
[ |
||||||
|
365 * 24 * 60 * 60 => |
||||||
|
[ |
||||||
|
$this->translator->trans('year ago'), |
||||||
|
$this->translator->trans('years ago'), |
||||||
|
$this->translator->trans(' years ago') |
||||||
|
], |
||||||
|
30 * 24 * 60 * 60 => |
||||||
|
[ |
||||||
|
$this->translator->trans('month ago'), |
||||||
|
$this->translator->trans('months ago'), |
||||||
|
$this->translator->trans(' months ago') |
||||||
|
], |
||||||
|
24 * 60 * 60 => |
||||||
|
[ |
||||||
|
$this->translator->trans('day ago'), |
||||||
|
$this->translator->trans('days ago'), |
||||||
|
$this->translator->trans(' days ago') |
||||||
|
], |
||||||
|
60 * 60 => |
||||||
|
[ |
||||||
|
$this->translator->trans('hour ago'), |
||||||
|
$this->translator->trans('hours ago'), |
||||||
|
$this->translator->trans(' hours ago') |
||||||
|
], |
||||||
|
60 => |
||||||
|
[ |
||||||
|
$this->translator->trans('minute ago'), |
||||||
|
$this->translator->trans('minutes ago'), |
||||||
|
$this->translator->trans(' minutes ago') |
||||||
|
], |
||||||
|
1 => |
||||||
|
[ |
||||||
|
$this->translator->trans('second ago'), |
||||||
|
$this->translator->trans('seconds ago'), |
||||||
|
$this->translator->trans(' seconds ago') |
||||||
|
] |
||||||
|
]; |
||||||
|
|
||||||
|
foreach ($values as $key => $value) |
||||||
|
{ |
||||||
|
$result = $diff / $key; |
||||||
|
|
||||||
|
if ($result >= 1) |
||||||
|
{ |
||||||
|
$round = round($result); |
||||||
|
|
||||||
|
return sprintf( |
||||||
|
'%s %s', |
||||||
|
$round, |
||||||
|
$this->plural( |
||||||
|
$round, |
||||||
|
$value |
||||||
|
) |
||||||
|
); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public function urlToMarkdown( |
||||||
|
string $text |
||||||
|
): string |
||||||
|
{ |
||||||
|
return preg_replace( |
||||||
|
'~(https?://(?:www\.)?[^\(\s\)]+)~i', |
||||||
|
'[$1]($1)', |
||||||
|
$text |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
private function plural(int $number, array $texts) |
||||||
|
{ |
||||||
|
$cases = [2, 0, 1, 1, 1, 2]; |
||||||
|
|
||||||
|
return $texts[(($number % 100) > 4 && ($number % 100) < 20) ? 2 : $cases[min($number % 10, 5)]]; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue