mirror of https://github.com/kevachat/webapp.git
ghost
12 months ago
8 changed files with 224 additions and 17 deletions
@ -0,0 +1,15 @@
@@ -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 @@
@@ -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