├── src
├── KnpTimeBundle.php
├── DependencyInjection
│ └── KnpTimeExtension.php
├── Twig
│ └── Extension
│ │ └── TimeExtension.php
└── DateTimeFormatter.php
├── config
├── twig.php
└── services.php
├── LICENSE
├── composer.json
├── translations
├── time.ja.xliff
├── time.zh.xliff
├── time.zh_CN.xliff
├── time.zh_HK.xliff
├── time.zh_TW.xliff
├── time.th.xliff
├── time.tr.xliff
├── time.ky.xliff
├── time.bs_Latn_BA.xliff
├── time.hr_HR.xliff
├── time.hu.xliff
├── time.nn.xliff
├── time.da.xliff
├── time.sv.xliff
├── time.ca.xliff
├── time.pt.xliff
├── time.pt_BR.xliff
├── time.pt_PT.xliff
├── time.vi.xliff
├── time.bg.xliff
├── time.eo.xliff
├── time.eu.xliff
├── time.id.xliff
├── time.fi.xliff
├── time.lt.xliff
├── time.sr_Latin.xliff
├── time.uk.xliff
├── time.ro.xliff
├── time.sl.xliff
├── time.ar.xliff
├── time.nb.xliff
├── time.nl.xliff
├── time.it.xliff
├── time.en.xliff
├── time.es.xliff
├── time.fr.xliff
├── time.pl.xliff
├── time.de.xliff
├── time.ru.xliff
├── time.sk.xliff
└── time.cs.xliff
├── README.md
└── CHANGELOG.md
/src/KnpTimeBundle.php:
--------------------------------------------------------------------------------
1 | services()
10 | ->set('.time.twig.extension.time', TimeExtension::class)
11 | ->tag('twig.extension')
12 | ;
13 | };
14 |
--------------------------------------------------------------------------------
/config/services.php:
--------------------------------------------------------------------------------
1 | services()
10 | ->set('time.datetime_formatter', DateTimeFormatter::class)
11 | ->args([service('translator')])
12 | ->tag('twig.runtime')
13 | ->alias(DateTimeFormatter::class, 'time.datetime_formatter')
14 | ;
15 | };
16 |
--------------------------------------------------------------------------------
/src/DependencyInjection/KnpTimeExtension.php:
--------------------------------------------------------------------------------
1 | load('services.php');
20 |
21 | if (class_exists(AbstractExtension::class)) {
22 | $loader->load('twig.php');
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2011 Knp Labs
2 |
3 | The MIT license
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is furnished
10 | to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/Twig/Extension/TimeExtension.php:
--------------------------------------------------------------------------------
1 |
12 | *
13 | * @internal
14 | */
15 | final class TimeExtension extends AbstractExtension
16 | {
17 | /**
18 | * Returns a list of global functions to add to the existing list.
19 | */
20 | public function getFunctions(): array
21 | {
22 | return [
23 | new TwigFunction(
24 | 'time_diff',
25 | [DateTimeFormatter::class, 'formatDiff'],
26 | ['is_safe' => ['html']]
27 | ),
28 | new TwigFunction(
29 | 'age',
30 | [DateTimeFormatter::class, 'formatAge'],
31 | ['is_safe' => ['html']]
32 | ),
33 | ];
34 | }
35 |
36 | public function getFilters(): array
37 | {
38 | return [
39 | new TwigFilter(
40 | 'ago',
41 | [DateTimeFormatter::class, 'formatDiff'],
42 | ['is_safe' => ['html']]
43 | ),
44 | new TwigFilter(
45 | 'time_diff',
46 | [DateTimeFormatter::class, 'formatDiff'],
47 | ['is_safe' => ['html']]
48 | ),
49 | new TwigFilter(
50 | 'duration',
51 | [DateTimeFormatter::class, 'formatDuration'],
52 | ['is_safe' => ['html']]
53 | ),
54 | new TwigFilter(
55 | 'age',
56 | [DateTimeFormatter::class, 'formatAge'],
57 | ['is_safe' => ['html']]
58 | ),
59 | ];
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "knplabs/knp-time-bundle",
3 | "type": "symfony-bundle",
4 | "description": "Making your dates and durations look sensible and descriptive",
5 | "keywords": ["time", "date", "descriptive time", "knplabs", "knp", "bundle", "duration"],
6 | "homepage": "https://github.com/KnpLabs/KnpTimeBundle",
7 | "license": "MIT",
8 |
9 | "authors": [
10 | {
11 | "name": "KnpLabs Team",
12 | "homepage": "https://knplabs.com"
13 | },
14 | {
15 | "name": "Symfony Community",
16 | "homepage": "https://github.com/KnpLabs/KnpTimeBundle/contributors"
17 | }
18 | ],
19 |
20 | "require": {
21 | "php": ">=8.1",
22 | "symfony/dependency-injection": "^5.4|^6.0|^7.0|^8.0",
23 | "symfony/translation": "^5.4|^6.0|^7.0|^8.0",
24 | "symfony/config": "^5.4|^6.0|^7.0|^8.0"
25 | },
26 |
27 | "require-dev": {
28 | "symfony/framework-bundle": "^5.4|^6.0|^7.0|^8.0",
29 | "symfony/phpunit-bridge": "^5.4|^6.0|^7.0|^8.0",
30 | "symfony/twig-bundle": "^5.4|^6.0|^7.0|^8.0",
31 | "phpstan/phpstan": "^1.11",
32 | "phpunit/phpunit": "^9.6"
33 | },
34 |
35 | "suggest": {
36 | "symfony/twig-bundle": "to use the Twig `time_diff()` function and `|time_diff`/`|duration` filter"
37 | },
38 |
39 | "conflict": {
40 | "phpunit/phpunit": "<8.0"
41 | },
42 |
43 | "autoload": {
44 | "psr-4": {
45 | "Knp\\Bundle\\TimeBundle\\": "src/"
46 | }
47 | },
48 | "autoload-dev": {
49 | "psr-4": {
50 | "Knp\\Bundle\\TimeBundle\\Tests\\": "tests/"
51 | }
52 | },
53 |
54 | "minimum-stability": "dev",
55 | "prefer-stable": true,
56 |
57 | "extra": {
58 | "branch-alias": {
59 | "dev-master": "2.x-dev"
60 | }
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/translations/time.ja.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count%年前
8 |
9 |
10 | diff.ago.month
11 | %count%ヶ月前
12 |
13 |
14 | diff.ago.day
15 | %count%日前
16 |
17 |
18 | diff.ago.hour
19 | %count%時間前
20 |
21 |
22 | diff.ago.minute
23 | %count%分前
24 |
25 |
26 | diff.ago.second
27 | %count%秒前
28 |
29 |
30 | diff.empty
31 | 今
32 |
33 |
34 | diff.in.second
35 | %count%秒後
36 |
37 |
38 | diff.in.hour
39 | %count%日後
40 |
41 |
42 | diff.in.minute
43 | %count%分後
44 |
45 |
46 | diff.in.day
47 | %count%日後
48 |
49 |
50 | diff.in.month
51 | %count%ヶ月後
52 |
53 |
54 | diff.in.year
55 | %count%年後
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.zh.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% 年前
8 |
9 |
10 | diff.ago.month
11 | %count% 个月前
12 |
13 |
14 | diff.ago.day
15 | %count% 天前
16 |
17 |
18 | diff.ago.hour
19 | %count% 小时前
20 |
21 |
22 | diff.ago.minute
23 | %count% 分钟前
24 |
25 |
26 | diff.ago.second
27 | %count% 秒前
28 |
29 |
30 | diff.empty
31 | 刚才
32 |
33 |
34 | diff.in.second
35 | %count% 秒后
36 |
37 |
38 | diff.in.hour
39 | %count% 小时后
40 |
41 |
42 | diff.in.minute
43 | %count% 分钟后
44 |
45 |
46 | diff.in.day
47 | %count% 天后
48 |
49 |
50 | diff.in.month
51 | %count% 个月后
52 |
53 |
54 | diff.in.year
55 | %count% 年后
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.zh_CN.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% 年前
8 |
9 |
10 | diff.ago.month
11 | %count% 个月前
12 |
13 |
14 | diff.ago.day
15 | %count% 天前
16 |
17 |
18 | diff.ago.hour
19 | %count% 小时前
20 |
21 |
22 | diff.ago.minute
23 | %count% 分钟前
24 |
25 |
26 | diff.ago.second
27 | %count% 秒前
28 |
29 |
30 | diff.empty
31 | 刚才
32 |
33 |
34 | diff.in.second
35 | %count% 秒后
36 |
37 |
38 | diff.in.hour
39 | %count% 小时后
40 |
41 |
42 | diff.in.minute
43 | %count% 分钟后
44 |
45 |
46 | diff.in.day
47 | %count% 天后
48 |
49 |
50 | diff.in.month
51 | %count% 个月后
52 |
53 |
54 | diff.in.year
55 | %count% 年后
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.zh_HK.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% 年前
8 |
9 |
10 | diff.ago.month
11 | %count% 月前
12 |
13 |
14 | diff.ago.day
15 | %count% 天前
16 |
17 |
18 | diff.ago.hour
19 | %count% 小時前
20 |
21 |
22 | diff.ago.minute
23 | %count% 分鐘前
24 |
25 |
26 | diff.ago.second
27 | %count% 秒前
28 |
29 |
30 | diff.empty
31 | 剛才
32 |
33 |
34 | diff.in.second
35 | %count% 秒後
36 |
37 |
38 | diff.in.hour
39 | %count% 小時後
40 |
41 |
42 | diff.in.minute
43 | %count% 分鐘後
44 |
45 |
46 | diff.in.day
47 | %count% 天後
48 |
49 |
50 | diff.in.month
51 | %count% 個月後
52 |
53 |
54 | diff.in.year
55 | %count% 年後
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.zh_TW.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% 年前
8 |
9 |
10 | diff.ago.month
11 | %count% 月前
12 |
13 |
14 | diff.ago.day
15 | %count% 天前
16 |
17 |
18 | diff.ago.hour
19 | %count% 小時前
20 |
21 |
22 | diff.ago.minute
23 | %count% 分鐘前
24 |
25 |
26 | diff.ago.second
27 | %count% 秒前
28 |
29 |
30 | diff.empty
31 | 剛才
32 |
33 |
34 | diff.in.second
35 | %count% 秒後
36 |
37 |
38 | diff.in.hour
39 | %count% 小時後
40 |
41 |
42 | diff.in.minute
43 | %count% 分鐘後
44 |
45 |
46 | diff.in.day
47 | %count% 天後
48 |
49 |
50 | diff.in.month
51 | %count% 個月後
52 |
53 |
54 | diff.in.year
55 | %count% 年後
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.th.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% ปีที่แล้ว
8 |
9 |
10 | diff.ago.month
11 | %count% เดือนที่แล้ว
12 |
13 |
14 | diff.ago.day
15 | %count% วันที่แล้ว
16 |
17 |
18 | diff.ago.hour
19 | %count% ชั่วโมงที่แล้ว
20 |
21 |
22 | diff.ago.minute
23 | %count% นาทีที่แล้ว
24 |
25 |
26 | diff.ago.second
27 | %count% วินาทีที่แล้ว
28 |
29 |
30 | diff.empty
31 | ณ ตอนนี้
32 |
33 |
34 | diff.in.second
35 | ใน %count% วินาที
36 |
37 |
38 | diff.in.hour
39 | ใน %count% ชั่วโมง
40 |
41 |
42 | diff.in.minute
43 | ใน %count% นาที
44 |
45 |
46 | diff.in.day
47 | ใน %count% วัน
48 |
49 |
50 | diff.in.month
51 | ใน %count% เดือน
52 |
53 |
54 | diff.in.year
55 | ใน %count% ปี
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.tr.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% yıl önce
8 |
9 |
10 | diff.ago.month
11 | %count% ay önce
12 |
13 |
14 | diff.ago.day
15 | %count% gün önce
16 |
17 |
18 | diff.ago.hour
19 | %count% saat önce
20 |
21 |
22 | diff.ago.minute
23 | %count% dakika önce
24 |
25 |
26 | diff.ago.second
27 | %count% saniye önce
28 |
29 |
30 | diff.empty
31 | şimdi
32 |
33 |
34 | diff.in.second
35 | %count% saniye içinde
36 |
37 |
38 | diff.in.hour
39 | %count% saat içinde
40 |
41 |
42 | diff.in.minute
43 | %count% dakika içinde
44 |
45 |
46 | diff.in.day
47 | %count% gün içinde
48 |
49 |
50 | diff.in.month
51 | %count% ay içinde
52 |
53 |
54 | diff.in.year
55 | %count% yıl içinde
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.ky.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% жыл мурун
8 |
9 |
10 | diff.ago.month
11 | %count% ай мурун
12 |
13 |
14 | diff.ago.day
15 | %count% күн мурун
16 |
17 |
18 | diff.ago.hour
19 | %count% саат мурун
20 |
21 |
22 | diff.ago.minute
23 | %count% минута мурун
24 |
25 |
26 | diff.ago.second
27 | %count% секунд мурун
28 |
29 |
30 | diff.empty
31 | азыр
32 |
33 |
34 | diff.in.second
35 | %count% секундадан кийин
36 |
37 |
38 | diff.in.hour
39 | %count% сааттан кийин
40 |
41 |
42 | diff.in.minute
43 | %count% минутадан кийин
44 |
45 |
46 | diff.in.day
47 | %count% күндөн кийин
48 |
49 |
50 | diff.in.month
51 | %count% айдан кийин
52 |
53 |
54 | diff.in.year
55 | %count% жылдан кийин
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.bs_Latn_BA.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | prije 1 godine|%count% godina
8 |
9 |
10 | diff.ago.month
11 | prije 1 mjeseca|%count% mjeseci
12 |
13 |
14 | diff.ago.day
15 | prije 1 dan|%count% dana
16 |
17 |
18 | diff.ago.hour
19 | prije 1 sat|%count% sati
20 |
21 |
22 | diff.ago.minute
23 | prije 1 minute|%count% minuta
24 |
25 |
26 | diff.ago.second
27 | prije 1 sekunde|%count% sekundi
28 |
29 |
30 | diff.empty
31 | trenutno
32 |
33 |
34 | diff.in.second
35 | u 1 sekundi|%count% sekundi
36 |
37 |
38 | diff.in.hour
39 | u 1 satu|%count% sati
40 |
41 |
42 | diff.in.minute
43 | u 1 minuti|%count% minuti
44 |
45 |
46 | diff.in.day
47 | u 1 danu|%count% dana
48 |
49 |
50 | diff.in.month
51 | u 1 mjesecu|%count% mjeseca
52 |
53 |
54 | diff.in.year
55 | u 1 godini|%count% godine
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.hr_HR.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | prije 1 godine|%count% godina
8 |
9 |
10 | diff.ago.month
11 | prije 1 mjeseca|%count% mjeseci
12 |
13 |
14 | diff.ago.day
15 | prije 1 dan|%count% dana
16 |
17 |
18 | diff.ago.hour
19 | prije 1 sat|%count% sati
20 |
21 |
22 | diff.ago.minute
23 | prije 1 minute|%count% minuta
24 |
25 |
26 | diff.ago.second
27 | prije 1 sekunde|%count% sekundi
28 |
29 |
30 | diff.empty
31 | trenutačno
32 |
33 |
34 | diff.in.second
35 | u 1 sekundi|%count% sekundi
36 |
37 |
38 | diff.in.hour
39 | u 1 satu|%count% sati
40 |
41 |
42 | diff.in.minute
43 | u 1 minuti|%count% minuti
44 |
45 |
46 | diff.in.day
47 | u 1 danu|%count% dana
48 |
49 |
50 | diff.in.month
51 | u 1 mjesecu|%count% mjeseca
52 |
53 |
54 | diff.in.year
55 | u 1 godini|%count% godine
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.hu.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | 1 éve|%count% éve
8 |
9 |
10 | diff.ago.month
11 | 1 hónapja|%count% hónapja
12 |
13 |
14 | diff.ago.day
15 | 1 napja|%count% napja
16 |
17 |
18 | diff.ago.hour
19 | 1 órája|%count% órája
20 |
21 |
22 | diff.ago.minute
23 | 1 perce|%count% perce
24 |
25 |
26 | diff.ago.second
27 | 1 másodperce|%count% másodperce
28 |
29 |
30 | diff.empty
31 | most
32 |
33 |
34 | diff.in.second
35 | 1 másodperc múlva|%count% másodperc múlva
36 |
37 |
38 | diff.in.hour
39 | 1 óra múlva|%count% óra múlva
40 |
41 |
42 | diff.in.minute
43 | 1 perc múlva|%count% perc múlva
44 |
45 |
46 | diff.in.day
47 | 1 nap múlva|%count% nap múlva
48 |
49 |
50 | diff.in.month
51 | 1 hónap múlva|%count% hónap múlva
52 |
53 |
54 | diff.in.year
55 | 1 év múlva|%count% év múlva
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.nn.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% år sidan
8 |
9 |
10 | diff.ago.month
11 | 1 månad sidan|%count% månader
12 |
13 |
14 | diff.ago.day
15 | 1 dag sidan|%count% dagar sidan
16 |
17 |
18 | diff.ago.hour
19 | 1 time sidan|%count% timar sidan
20 |
21 |
22 | diff.ago.minute
23 | 1 minutt sidan|%count% minutt sidan
24 |
25 |
26 | diff.ago.second
27 | 1 sekund sidan|%count% sekund sidan
28 |
29 |
30 | diff.empty
31 | no
32 |
33 |
34 | diff.in.second
35 | om 1 sekund|om %count% sekund
36 |
37 |
38 | diff.in.hour
39 | om 1 time|om %count% timar
40 |
41 |
42 | diff.in.minute
43 | om 1 minutt|om %count% minutt
44 |
45 |
46 | diff.in.day
47 | om 1 dag|om %count% dagar
48 |
49 |
50 | diff.in.month
51 | om 1 månad|om %count% månader
52 |
53 |
54 | diff.in.year
55 | om %count% år
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.da.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% år siden
8 |
9 |
10 | diff.ago.month
11 | 1 måned siden|%count% måneder
12 |
13 |
14 | diff.ago.day
15 | 1 dag siden|%count% dage siden
16 |
17 |
18 | diff.ago.hour
19 | 1 time siden|%count% timer siden
20 |
21 |
22 | diff.ago.minute
23 | 1 minut siden|%count% minutter siden
24 |
25 |
26 | diff.ago.second
27 | 1 sekund siden|%count% sekunder siden
28 |
29 |
30 | diff.empty
31 | nu
32 |
33 |
34 | diff.in.second
35 | om 1 sekund|om %count% sekunder
36 |
37 |
38 | diff.in.hour
39 | om 1 time|om %count% timer
40 |
41 |
42 | diff.in.minute
43 | om 1 minut|om %count% minutter
44 |
45 |
46 | diff.in.day
47 | om 1 dag|om %count% dage
48 |
49 |
50 | diff.in.month
51 | om 1 måned|om %count% måneder
52 |
53 |
54 | diff.in.year
55 | om %count% år
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.sv.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% år sedan
8 |
9 |
10 | diff.ago.month
11 | 1 månad sedan|%count% månader sedan
12 |
13 |
14 | diff.ago.day
15 | 1 dag sedan|%count% dagar sedan
16 |
17 |
18 | diff.ago.hour
19 | 1 timme sedan|%count% timmar sedan
20 |
21 |
22 | diff.ago.minute
23 | 1 minut sedan|%count% minuter sedan
24 |
25 |
26 | diff.ago.second
27 | 1 sekund sedan|%count% sekunder sedan
28 |
29 |
30 | diff.empty
31 | nu
32 |
33 |
34 | diff.in.second
35 | om 1 sekund|om %count% sekunder
36 |
37 |
38 | diff.in.hour
39 | om 1 timme|om %count% timmar
40 |
41 |
42 | diff.in.minute
43 | om 1 minut|om %count% minuter
44 |
45 |
46 | diff.in.day
47 | om 1 dag|om %count% dagar
48 |
49 |
50 | diff.in.month
51 | om 1 månad|om %count% månader
52 |
53 |
54 | diff.in.year
55 | om %count% år
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.ca.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | fa 1 any|fa %count% anys
8 |
9 |
10 | diff.ago.month
11 | fa 1 mes|fa %count% mesos
12 |
13 |
14 | diff.ago.day
15 | fa 1 dia|fa %count% dies
16 |
17 |
18 | diff.ago.hour
19 | fa 1 hora|fa %count% hores
20 |
21 |
22 | diff.ago.minute
23 | fa 1 minut|fa %count% minuts
24 |
25 |
26 | diff.ago.second
27 | fa 1 segon|fa %count% segons
28 |
29 |
30 | diff.empty
31 | ara
32 |
33 |
34 | diff.in.second
35 | d'aquí 1 segon|d'aquí %count% segons
36 |
37 |
38 | diff.in.hour
39 | d'aquí 1 hora|d'aquí %count% hores
40 |
41 |
42 | diff.in.minute
43 | d'aquí 1 minut|d'aquí %count% minuts
44 |
45 |
46 | diff.in.day
47 | d'aquí 1 dia|d'aquí %count% dies
48 |
49 |
50 | diff.in.month
51 | d'aquí 1 mes|d'aquí %count% mesos
52 |
53 |
54 | diff.in.year
55 | d'aquí 1 any|d'aquí %count% anys
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.pt.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | 1 ano atrás|%count% anos atrás
8 |
9 |
10 | diff.ago.month
11 | 1 mês atrás|%count% meses atrás
12 |
13 |
14 | diff.ago.day
15 | 1 dia atrás|%count% dias atrás
16 |
17 |
18 | diff.ago.hour
19 | 1 hora atrás|%count% horas atrás
20 |
21 |
22 | diff.ago.minute
23 | 1 minuto atrás|%count% minutos atrás
24 |
25 |
26 | diff.ago.second
27 | 1 segundo atrás|%count% segundos atrás
28 |
29 |
30 | diff.empty
31 | agora
32 |
33 |
34 | diff.in.second
35 | em 1 segundo|em %count% segundos
36 |
37 |
38 | diff.in.hour
39 | em 1 hora|em %count% horas
40 |
41 |
42 | diff.in.minute
43 | em 1 minuto|em %count% minutos
44 |
45 |
46 | diff.in.day
47 | em 1 dia|em %count% dias
48 |
49 |
50 | diff.in.month
51 | em 1 mês|em %count% meses
52 |
53 |
54 | diff.in.year
55 | em 1 ano|em %count% anos
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.pt_BR.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | 1 ano atrás|%count% anos atrás
8 |
9 |
10 | diff.ago.month
11 | 1 mês atrás|%count% meses atrás
12 |
13 |
14 | diff.ago.day
15 | 1 dia atrás|%count% dias atrás
16 |
17 |
18 | diff.ago.hour
19 | 1 hora atrás|%count% horas atrás
20 |
21 |
22 | diff.ago.minute
23 | 1 minuto atrás|%count% minutos atrás
24 |
25 |
26 | diff.ago.second
27 | 1 segundo atrás|%count% segundos atrás
28 |
29 |
30 | diff.empty
31 | agora
32 |
33 |
34 | diff.in.second
35 | em 1 segundo|em %count% segundos
36 |
37 |
38 | diff.in.hour
39 | em 1 hora|em %count% horas
40 |
41 |
42 | diff.in.minute
43 | em 1 minuto|em %count% minutos
44 |
45 |
46 | diff.in.day
47 | em 1 dia|em %count% dias
48 |
49 |
50 | diff.in.month
51 | em 1 mês|em %count% meses
52 |
53 |
54 | diff.in.year
55 | em 1 ano|em %count% anos
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.pt_PT.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | 1 ano atrás|%count% anos atrás
8 |
9 |
10 | diff.ago.month
11 | 1 mês atrás|%count% meses atrás
12 |
13 |
14 | diff.ago.day
15 | 1 dia atrás|%count% dias atrás
16 |
17 |
18 | diff.ago.hour
19 | 1 hora atrás|%count% horas atrás
20 |
21 |
22 | diff.ago.minute
23 | 1 minuto atrás|%count% minutos atrás
24 |
25 |
26 | diff.ago.second
27 | 1 segundo atrás|%count% segundos atrás
28 |
29 |
30 | diff.empty
31 | agora
32 |
33 |
34 | diff.in.second
35 | em 1 segundo|em %count% segundos
36 |
37 |
38 | diff.in.hour
39 | em 1 hora|em %count% horas
40 |
41 |
42 | diff.in.minute
43 | em 1 minuto|em %count% minutos
44 |
45 |
46 | diff.in.day
47 | em 1 dia|em %count% dias
48 |
49 |
50 | diff.in.month
51 | em 1 mês|em %count% meses
52 |
53 |
54 | diff.in.year
55 | em 1 ano|em %count% anos
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.vi.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | 1 năm trước|%count% năm trước
8 |
9 |
10 | diff.ago.month
11 | 1 tháng trước|%count% tháng trước
12 |
13 |
14 | diff.ago.day
15 | 1 ngày trước|%count% ngày trước
16 |
17 |
18 | diff.ago.hour
19 | 1 giờ trước|%count% giờ trước
20 |
21 |
22 | diff.ago.minute
23 | 1 phút trước|%count% phút trước
24 |
25 |
26 | diff.ago.second
27 | 1 giây trước|%count% giây trước
28 |
29 |
30 | diff.empty
31 | bây giờ
32 |
33 |
34 | diff.in.second
35 | trong 1 giây|trong %count% giây
36 |
37 |
38 | diff.in.hour
39 | trong 1 giờ|trong %count% giờ
40 |
41 |
42 | diff.in.minute
43 | trong 1 phút|trong %count% phút
44 |
45 |
46 | diff.in.day
47 | trong 1 ngày|trong %count% ngày
48 |
49 |
50 | diff.in.month
51 | trong 1 tháng|trong %count% tháng
52 |
53 |
54 | diff.in.year
55 | trong 1 năm|trong %count% năm
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.bg.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | преди 1 година|преди %count% години
8 |
9 |
10 | diff.ago.month
11 | преди 1 месец|преди %count% месеца
12 |
13 |
14 | diff.ago.day
15 | преди 1 ден|преди %count% дни
16 |
17 |
18 | diff.ago.hour
19 | преди 1 час|преди %count% часа
20 |
21 |
22 | diff.ago.minute
23 | преди 1 минута|преди %count% минути
24 |
25 |
26 | diff.ago.second
27 | преди 1 секунда|преди %count% секунди
28 |
29 |
30 | diff.empty
31 | сега
32 |
33 |
34 | diff.in.second
35 | след 1 секунда|след %count% секунди
36 |
37 |
38 | diff.in.hour
39 | след 1 час|след %count% часа
40 |
41 |
42 | diff.in.minute
43 | след 1 минута|след %count% минути
44 |
45 |
46 | diff.in.day
47 | след 1 ден|след %count% дни
48 |
49 |
50 | diff.in.month
51 | след 1 месец|след %count% месеца
52 |
53 |
54 | diff.in.year
55 | след 1 година|след %count% години
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.eo.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | antaŭ 1 jaro|antaŭ %count% jaroj
8 |
9 |
10 | diff.ago.month
11 | antaŭ 1 monato|antaŭ %count% monatoj
12 |
13 |
14 | diff.ago.day
15 | antaŭ 1 tago|antaŭ %count% tagoj
16 |
17 |
18 | diff.ago.hour
19 | antaŭ 1 horo|antaŭ %count% horoj
20 |
21 |
22 | diff.ago.minute
23 | antaŭ 1 minuto|antaŭ %count% minutoj
24 |
25 |
26 | diff.ago.second
27 | antaŭ 1 sekundo|antaŭ %count% sekundoj
28 |
29 |
30 | diff.empty
31 | nun
32 |
33 |
34 | diff.in.second
35 | post 1 sekundo|post %count% sekundoj
36 |
37 |
38 | diff.in.hour
39 | post 1 horo|post %count% horoj
40 |
41 |
42 | diff.in.minute
43 | post 1 minuto|post %count% minutoj
44 |
45 |
46 | diff.in.day
47 | post 1 tago|post %count% tagoj
48 |
49 |
50 | diff.in.month
51 | post 1 monato|post %count% monatoj
52 |
53 |
54 | diff.in.year
55 | post 1 jaro|post %count% jaroj
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.eu.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | duela urtebete|duela %count% urte
8 |
9 |
10 | diff.ago.month
11 | duela hilabete bat|duela %count% hilabete
12 |
13 |
14 | diff.ago.day
15 | duela egun bat|duela %count% egun
16 |
17 |
18 | diff.ago.hour
19 | duela ordu bat|duela %count% ordu
20 |
21 |
22 | diff.ago.minute
23 | duela minutu bat|duela %count% minutu
24 |
25 |
26 | diff.ago.second
27 | duela segundo bat|duela %count% segundo
28 |
29 |
30 | diff.empty
31 | orain
32 |
33 |
34 | diff.in.second
35 | segundo bat barru|%count% segundo barru
36 |
37 |
38 | diff.in.hour
39 | ordu bat barru|%count% ordu barru
40 |
41 |
42 | diff.in.minute
43 | minutu bat barru|%count% minutu barru
44 |
45 |
46 | diff.in.day
47 | egun bat barru|%count% egun barru
48 |
49 |
50 | diff.in.month
51 | hilabete bat barru|%count% hilabete barru
52 |
53 |
54 | diff.in.year
55 | urtebete barru|%count% urte barru
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.id.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | 1 tahun yang lalu|%count% tahun yang lalu
8 |
9 |
10 | diff.ago.month
11 | 1 bulan yang lalu|%count% bulan yang lalu
12 |
13 |
14 | diff.ago.day
15 | 1 hari yang lalu|%count% hari yang lalu
16 |
17 |
18 | diff.ago.hour
19 | 1 jam yang lalu|%count% jam yang lalu
20 |
21 |
22 | diff.ago.minute
23 | 1 menit yang lalu|%count% menit yang lalu
24 |
25 |
26 | diff.ago.second
27 | 1 detik yang lalu|%count% detik yang lalu
28 |
29 |
30 | diff.empty
31 | baru saja
32 |
33 |
34 | diff.in.second
35 | dalam 1 detik|dalam %count% detik
36 |
37 |
38 | diff.in.hour
39 | dalam 1 jam|dalam %count% jam
40 |
41 |
42 | diff.in.minute
43 | dalam 1 menit|dalam %count% menit
44 |
45 |
46 | diff.in.day
47 | dalam 1 hari|dalam %count% hari
48 |
49 |
50 | diff.in.month
51 | dalam 1 bulan|dalam %count% bulans
52 |
53 |
54 | diff.in.year
55 | dalam 1 tahun|dalam %count% tahun
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.fi.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | 1 vuosi sitten|%count% vuotta sitten
8 |
9 |
10 | diff.ago.month
11 | 1 kuukausi sitten|%count% kuukautta sitten
12 |
13 |
14 | diff.ago.day
15 | 1 päivä sitten|%count% päivää sitten
16 |
17 |
18 | diff.ago.hour
19 | 1 tunti sitten|%count% tuntia sitten
20 |
21 |
22 | diff.ago.minute
23 | 1 minuutti sitten|%count% minuuttia sitten
24 |
25 |
26 | diff.ago.second
27 | 1 sekuntti sitten|%count% sekunttia sitten
28 |
29 |
30 | diff.empty
31 | nyt
32 |
33 |
34 | diff.in.second
35 | yhden sekunnin päästä|%count% sekunnin päästä
36 |
37 |
38 | diff.in.hour
39 | yhden tunnin päästä|%count% tunnin päästä
40 |
41 |
42 | diff.in.minute
43 | yhden minuutin päästä|%count% minuutin päästä
44 |
45 |
46 | diff.in.day
47 | yhden päivän päästä|%count% päivän päästä
48 |
49 |
50 | diff.in.month
51 | yhden kuukauden päästä|%count% kuukauden päästä
52 |
53 |
54 | diff.in.year
55 | yhden vuoden päästä|%count% vuoden päästä
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.lt.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | prieš metus|prieš %count% metus|prieš %count% metų
8 |
9 |
10 | diff.ago.month
11 | prieš mėnesį|prieš %count% mėnesius|prieš %count% mėnesių
12 |
13 |
14 | diff.ago.day
15 | prieš dieną|prieš %count% dienas|prieš %count% dienų
16 |
17 |
18 | diff.ago.hour
19 | prieš valandą|prieš %count% valandas|prieš %count% valandų
20 |
21 |
22 | diff.ago.minute
23 | prieš minutę|prieš %count% minutes|prieš %count% minučių
24 |
25 |
26 | diff.ago.second
27 | prieš sekundę|prieš %count% sekundes|prieš %count% sekundžių
28 |
29 |
30 | diff.empty
31 | dabar
32 |
33 |
34 | diff.in.second
35 | po sekundės|po %count% sekundžių|po %count% sekundžių
36 |
37 |
38 | diff.in.hour
39 | po valandos|po %count% valandų|po %count% valandų
40 |
41 |
42 | diff.in.minute
43 | po minutės|po %count% minučių|po %count% minučių
44 |
45 |
46 | diff.in.day
47 | po dienos|po %count% dienų|po %count% dienų
48 |
49 |
50 | diff.in.month
51 | po mėnesio|po %count% mėnesių|po %count% mėnesių
52 |
53 |
54 | diff.in.year
55 | po metų|po %count% metų|po %count% metų
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.sr_Latin.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | {1}pre 1 godinu|[2,4]pre %count% godine|[5,Inf]pre %count% godina
8 |
9 |
10 | diff.ago.month
11 | {1}pre 1 mesec|[2,4]pre %count% meseca|[5,Inf]pre %count% meseci
12 |
13 |
14 | diff.ago.day
15 | {1}pre 1 dan|[2,Inf]pre %count% dana
16 |
17 |
18 | diff.ago.hour
19 | {1}pre 1 sat|[2,4]pre %count% sata|[5,Inf]pre %count% sati
20 |
21 |
22 | diff.ago.minute
23 | {1}pre 1 minut|[2,Inf]pre %count% minuta
24 |
25 |
26 | diff.ago.second
27 | {1}pre 1 sekundu|[2,5]pre %count% sekunde|[6,Inf]pre %count% sekundi
28 |
29 |
30 | diff.empty
31 | sada
32 |
33 |
34 | diff.in.second
35 | {1}za 1 sekundu|[2,5]za %count% sekunde|[6,Inf]za %count% sekundi
36 |
37 |
38 | diff.in.hour
39 | {1}za 1 sat|[2,5]za %count% sata|[6,Inf]za %count% sati
40 |
41 |
42 | diff.in.minute
43 | {1}za 1 minut|[2,Inf]za %count% minuta
44 |
45 |
46 | diff.in.day
47 | {1}za 1 dan|[2,Inf]za %count% dana
48 |
49 |
50 | diff.in.month
51 | {1}za 1 mesec|[2,5]za %count% meseca|[6,Inf]za %count% meseci
52 |
53 |
54 | diff.in.year
55 | {1}za 1 godinu|[2,Inf]za %count% godine
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/translations/time.uk.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% рiк тому|%count% роки тому|%count% рокiв тому
8 |
9 |
10 | diff.ago.month
11 | %count% мiсяць тому|%count% мiсяцi тому|%count% мiсяцiв тому
12 |
13 |
14 | diff.ago.day
15 | %count% день тому|%count% днi тому|%count% днiв тому
16 |
17 |
18 | diff.ago.hour
19 | %count% годину тому|%count% години тому|%count% годин тому
20 |
21 |
22 | diff.ago.minute
23 | %count% хвилину тому|%count% хвилини тому|%count% хвилин тому
24 |
25 |
26 | diff.ago.second
27 | %count% секунду тому|%count% секунди тому|%count% секунд тому
28 |
29 |
30 | diff.empty
31 | зараз
32 |
33 |
34 | diff.in.second
35 | через %count% секунду|через %count% секунди|через %count% секунд
36 |
37 |
38 | diff.in.hour
39 | через %count% годину|через %count% години|через %count% годин
40 |
41 |
42 | diff.in.minute
43 | через %count% хвилину|через %count% хвилини|через %count% хвилин
44 |
45 |
46 | diff.in.day
47 | через %count% день|через %count% днi|через %count% днiв
48 |
49 |
50 | diff.in.month
51 | через %count% мiсяць|через %count% мiсяцi|через %count% мiсяцiв
52 |
53 |
54 | diff.in.year
55 | через %count% рiк|через %count% роки|через %count% рокiв
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.ro.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% an în urmă|%count% ani în urmă|%count% de ani în urmă
8 |
9 |
10 | diff.ago.month
11 | %count% lună în urmă|%count% luni în urmă|%count% de luni în urmă
12 |
13 |
14 | diff.ago.day
15 | %count% zi în urmă|%count% zile în urmă|%count% de zile în urmă
16 |
17 |
18 | diff.ago.hour
19 | %count% oră în urmă|%count% ore în urmă|%count% de ore în urmă
20 |
21 |
22 | diff.ago.minute
23 | %count% minut în urmă|%count% minute în urmă|%count% de minute în urmă
24 |
25 |
26 | diff.ago.second
27 | %count% secundă în urmă|%count% secunde în urmă|%count% de secunde în urmă
28 |
29 |
30 | diff.empty
31 | acum
32 |
33 |
34 | diff.in.second
35 | peste %count% secundă|peste %count% secunde|peste %count% de secunde
36 |
37 |
38 | diff.in.hour
39 | peste %count% oră|peste %count% ore|peste %count% de ore
40 |
41 |
42 | diff.in.minute
43 | peste %count% minut|peste %count% minute|peste %count% de minute
44 |
45 |
46 | diff.in.day
47 | peste %count% zi|peste %count% zile|peste %count% de zile
48 |
49 |
50 | diff.in.month
51 | peste %count% lună|peste %count% luni|peste %count% de luni
52 |
53 |
54 | diff.in.year
55 | peste %count% an|peste %count% ani|peste %count% de ani
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.sl.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | {1}pred 1 letom|{2}pred %count% letoma|[3, Inf]pred %count% leti
8 |
9 |
10 | diff.ago.month
11 | {1}pred 1 mesecem|{2}pred %count% mesecema|[3, Inf]pred %count% meseci
12 |
13 |
14 | diff.ago.day
15 | {1}pred 1 dnevom|{2}pred %count% dnevoma|[3, Inf]pred %count% dnevi
16 |
17 |
18 | diff.ago.hour
19 | {1}pred 1 uro|{2}pred %count% urama|[3, Inf]pred %count% urami
20 |
21 |
22 | diff.ago.minute
23 | {1}pred 1 minuto|{2}pred %count% minutama|[3, Inf]pred %count% minutami
24 |
25 |
26 | diff.ago.second
27 | {1}pred 1 sekundo|{2}pred %count% sekundama|[3, Inf]pred %count% sekundami
28 |
29 |
30 | diff.empty
31 | pravkar
32 |
33 |
34 | diff.in.second
35 | {1}za 1 sekundo|{2}za %count% sekundi|[3, Inf]za %count% sekunde
36 |
37 |
38 | diff.in.hour
39 | {1}za 1 uro|{2}za %count% uri|[3, Inf]za %count% ure
40 |
41 |
42 | diff.in.minute
43 | {1}za 1 minuto|{2}za %count% minuti|[3, Inf]za %count% minute
44 |
45 |
46 | diff.in.day
47 | {1}za 1 dan|{2}za %count% dneva|[3, Inf]za %count% dni
48 |
49 |
50 | diff.in.month
51 | {1}za 1 mesec|{2}za %count% meseca|[3, Inf]za %count% mesece
52 |
53 |
54 | diff.in.year
55 | {1}za 1 leto|{2}za %count% leti|[3, Inf]za %count% leta
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/translations/time.ar.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | {1}منذ سنة|{2}منذ سنتين|[3,9]منذ %count% سنوات|[10,+Inf]منذ %count% سنة
8 |
9 |
10 | diff.ago.month
11 | {1}منذ شهر|{2}منذ شهرين|[2,9]منذ %count% أشهر|[10,+Inf]منذ %count% شهور
12 |
13 |
14 | diff.ago.day
15 | {1} منذ يوم|{2}منذ يومين|[2,10]منذ %count% ايام|[11,+Inf]منذ %count% يوم
16 |
17 |
18 | diff.ago.hour
19 | {1}منذ ساعة|{2}منذ ساعتين|[2,10]منذ %count% ساعات|[11,+Inf]منذ %count% ساعة
20 |
21 |
22 | diff.ago.minute
23 | {1}منذ دقيقة واحدة|{2}منذ دقيقتين|[2,10]منذ %count% دقائق|[11,+Inf]منذ %count% دقيقة
24 |
25 |
26 | diff.ago.second
27 | {1}منذ ثانية واحدة|{2}منذ ثانيتين|[2,10]منذ %count% ثواني|[11,+Inf]منذ %count% ثانية
28 |
29 |
30 | diff.empty
31 | الان
32 |
33 |
34 | diff.in.second
35 | {1}في خلال ثانية|{2}في خلال ثانيتين|[3,10]في خلال %count% ثواني|[11,+Inf]في خلال %count% ثانية
36 |
37 |
38 | diff.in.hour
39 | {1}في خلال ساعة|{2}في خلال ساعتين|[3,10]في خلال %count% ساعات|[11,+Inf]في خلال %count% ساعة
40 |
41 |
42 | diff.in.minute
43 | {1}في خلال دقيقة|{2}في خلال دقيقتين|[3,10]في خلال %count% دقائق|[11,+Inf]في خلال %count% دقيقة
44 |
45 |
46 | diff.in.day
47 | {1}في خلال يوم|{2}في خلال يومين|[3,10]في خلال %count% ايام|[11,+Inf]في خلال %count% يوم
48 |
49 |
50 | diff.in.month
51 | {1}في خلال شهر|{2}في خلال شهرين|[3,10]في خلال %count% أشهر|[11,+Inf]في خلال %count% شهر
52 |
53 |
54 | diff.in.year
55 | {1}في خلال سنة|{2}في خلال سنتين|[3,10]في خلال %count% سنوات|[11,+Inf]في خلال %count% سنة
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/translations/time.nb.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% år siden
8 |
9 |
10 | diff.ago.month
11 | 1 måned siden|%count% måneder
12 |
13 |
14 | diff.ago.day
15 | 1 dag siden|%count% dager siden
16 |
17 |
18 | diff.ago.hour
19 | 1 time siden|%count% timer siden
20 |
21 |
22 | diff.ago.minute
23 | 1 minutt siden|%count% minutter siden
24 |
25 |
26 | diff.ago.second
27 | 1 sekund siden|%count% sekunder siden
28 |
29 |
30 | diff.empty
31 | nå
32 |
33 |
34 | diff.in.second
35 | om 1 sekund|om %count% sekunder
36 |
37 |
38 | diff.in.hour
39 | om 1 time|om %count% timer
40 |
41 |
42 | diff.in.minute
43 | om 1 minutt|om %count% minutter
44 |
45 |
46 | diff.in.day
47 | om 1 dag|om %count% dager
48 |
49 |
50 | diff.in.month
51 | om 1 måned|om %count% måneder
52 |
53 |
54 | diff.in.year
55 | om %count% år
56 |
57 |
58 | duration.second
59 | 1 sekund|%count% sekunder
60 |
61 |
62 | duration.minute
63 | 1 minutt|%count% minutter
64 |
65 |
66 | duration.hour
67 | 1 time|%count% timer
68 |
69 |
70 | duration.day
71 | 1 dag|%count% dager
72 |
73 |
74 | duration.none
75 | < 1 sekund
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/translations/time.nl.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | 1 jaar geleden|%count% jaar geleden
8 |
9 |
10 | diff.ago.month
11 | 1 maand geleden|%count% maanden geleden
12 |
13 |
14 | diff.ago.day
15 | 1 dag geleden|%count% dagen geleden
16 |
17 |
18 | diff.ago.hour
19 | 1 uur geleden|%count% uur geleden
20 |
21 |
22 | diff.ago.minute
23 | 1 minuut geleden|%count% minuten geleden
24 |
25 |
26 | diff.ago.second
27 | 1 seconde geleden|%count% seconden geleden
28 |
29 |
30 | diff.empty
31 | nu
32 |
33 |
34 | diff.in.second
35 | over 1 seconde|over %count% seconden
36 |
37 |
38 | diff.in.hour
39 | over 1 uur|over %count% uur
40 |
41 |
42 | diff.in.minute
43 | over 1 minuut|over %count% minuten
44 |
45 |
46 | diff.in.day
47 | over 1 dag|over %count% dagen
48 |
49 |
50 | diff.in.month
51 | over 1 maand|over %count% maanden
52 |
53 |
54 | diff.in.year
55 | over 1 jaar|over %count% jaar
56 |
57 |
58 | duration.second
59 | 1 seconde|%count% seconden
60 |
61 |
62 | duration.minute
63 | 1 minuut|%count% minuten
64 |
65 |
66 | duration.hour
67 | 1 uur|%count% uur
68 |
69 |
70 | duration.day
71 | 1 dag|%count% dagen
72 |
73 |
74 | duration.none
75 | < 1 seconde
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/translations/time.it.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | 1 anno fa|%count% anni fa
8 |
9 |
10 | diff.ago.month
11 | 1 mese fa|%count% mesi fa
12 |
13 |
14 | diff.ago.day
15 | 1 giorno fa|%count% giorni fa
16 |
17 |
18 | diff.ago.hour
19 | 1 ora fa|%count% ore fa
20 |
21 |
22 | diff.ago.minute
23 | 1 minuto fa|%count% minuti fa
24 |
25 |
26 | diff.ago.second
27 | 1 secondo fa|%count% secondi fa
28 |
29 |
30 | diff.empty
31 | ora
32 |
33 |
34 | diff.in.second
35 | tra 1 secondo|tra %count% secondi
36 |
37 |
38 | diff.in.hour
39 | tra 1 ora|tra %count% ore
40 |
41 |
42 | diff.in.minute
43 | tra 1 minuto|tra %count% minuti
44 |
45 |
46 | diff.in.day
47 | tra 1 giorno|tra %count% giorni
48 |
49 |
50 | diff.in.month
51 | tra 1 mese|tra %count% mesi
52 |
53 |
54 | diff.in.year
55 | tra 1 anno|tra %count% anni
56 |
57 |
58 | duration.second
59 | 1 secondo|%count% secondi
60 |
61 |
62 | duration.minute
63 | 1 minuto|%count% minuti
64 |
65 |
66 | duration.hour
67 | 1 ora|%count% ore
68 |
69 |
70 | duration.day
71 | 1 giorno|%count% giorni
72 |
73 |
74 | duration.none
75 | < 1 secondo
76 |
77 |
78 | age
79 | 1 anno|%count% anni
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/translations/time.en.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | 1 year ago|%count% years ago
8 |
9 |
10 | diff.ago.month
11 | 1 month ago|%count% months ago
12 |
13 |
14 | diff.ago.day
15 | 1 day ago|%count% days ago
16 |
17 |
18 | diff.ago.hour
19 | 1 hour ago|%count% hours ago
20 |
21 |
22 | diff.ago.minute
23 | 1 minute ago|%count% minutes ago
24 |
25 |
26 | diff.ago.second
27 | 1 second ago|%count% seconds ago
28 |
29 |
30 | diff.empty
31 | now
32 |
33 |
34 | diff.in.second
35 | in 1 second|in %count% seconds
36 |
37 |
38 | diff.in.hour
39 | in 1 hour|in %count% hours
40 |
41 |
42 | diff.in.minute
43 | in 1 minute|in %count% minutes
44 |
45 |
46 | diff.in.day
47 | in 1 day|in %count% days
48 |
49 |
50 | diff.in.month
51 | in 1 month|in %count% months
52 |
53 |
54 | diff.in.year
55 | in 1 year|in %count% years
56 |
57 |
58 | duration.second
59 | 1 second|%count% seconds
60 |
61 |
62 | duration.minute
63 | 1 minute|%count% minutes
64 |
65 |
66 | duration.hour
67 | 1 hour|%count% hours
68 |
69 |
70 | duration.day
71 | 1 day|%count% days
72 |
73 |
74 | duration.none
75 | < 1 second
76 |
77 |
78 | age
79 | 1 year old|%count% years old
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/translations/time.es.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | hace 1 año|hace %count% años
8 |
9 |
10 | diff.ago.month
11 | hace 1 mes|hace %count% meses
12 |
13 |
14 | diff.ago.day
15 | hace 1 día|hace %count% días
16 |
17 |
18 | diff.ago.hour
19 | hace 1 hora|hace %count% horas
20 |
21 |
22 | diff.ago.minute
23 | hace 1 minuto|hace %count% minutos
24 |
25 |
26 | diff.ago.second
27 | hace 1 segundo|hace %count% segundos
28 |
29 |
30 | diff.empty
31 | ahora
32 |
33 |
34 | diff.in.second
35 | en 1 segundo|en %count% segundos
36 |
37 |
38 | diff.in.hour
39 | en 1 hora|en %count% horas
40 |
41 |
42 | diff.in.minute
43 | en 1 minuto|en %count% minutos
44 |
45 |
46 | diff.in.day
47 | en 1 día|en %count% días
48 |
49 |
50 | diff.in.month
51 | en 1 mes|en %count% meses
52 |
53 |
54 | diff.in.year
55 | en 1 año|en %count% años
56 |
57 |
58 | duration.second
59 | 1 segundo|%count% segundos
60 |
61 |
62 | duration.minute
63 | 1 minuto|%count% minutos
64 |
65 |
66 | duration.hour
67 | 1 hora|%count% horas
68 |
69 |
70 | duration.day
71 | 1 día|%count% días
72 |
73 |
74 | duration.none
75 | < 1 segundo
76 |
77 |
78 | age
79 | 1 año|%count% años
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/translations/time.fr.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | il y a 1 an|il y a %count% ans
8 |
9 |
10 | diff.ago.month
11 | il y a 1 mois|il y a %count% mois
12 |
13 |
14 | diff.ago.day
15 | il y a 1 jour|il y a %count% jours
16 |
17 |
18 | diff.ago.hour
19 | il y a 1 heure|il y a %count% heures
20 |
21 |
22 | diff.ago.minute
23 | il y a 1 minute|il y a %count% minutes
24 |
25 |
26 | diff.ago.second
27 | il y a 1 seconde|il y a %count% secondes
28 |
29 |
30 | diff.empty
31 | maintenant
32 |
33 |
34 | diff.in.second
35 | dans 1 seconde|dans %count% secondes
36 |
37 |
38 | diff.in.hour
39 | dans 1 heure|dans %count% heures
40 |
41 |
42 | diff.in.minute
43 | dans 1 minute|dans %count% minutes
44 |
45 |
46 | diff.in.day
47 | dans 1 jour|dans %count% jours
48 |
49 |
50 | diff.in.month
51 | dans 1 mois|dans %count% mois
52 |
53 |
54 | diff.in.year
55 | dans 1 an|dans %count% ans
56 |
57 |
58 | duration.second
59 | 1 seconde|%count% secondes
60 |
61 |
62 | duration.minute
63 | 1 minute|%count% minutes
64 |
65 |
66 | duration.hour
67 | 1 heure|%count% heures
68 |
69 |
70 | duration.day
71 | 1 jour|%count% jours
72 |
73 |
74 | duration.none
75 | < 1 seconde
76 |
77 |
78 | age
79 | 1 an|%count% ans
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/translations/time.pl.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | rok temu|%count% lata temu|%count% lat temu
8 |
9 |
10 | diff.ago.month
11 | miesiąc temu|%count% miesiące temu|%count% miesięcy temu
12 |
13 |
14 | diff.ago.day
15 | wczoraj|%count% dni temu|%count% dni temu
16 |
17 |
18 | diff.ago.hour
19 | godzinę temu|%count% godziny temu|%count% godzin temu
20 |
21 |
22 | diff.ago.minute
23 | minutę temu|%count% minuty temu|%count% minut temu
24 |
25 |
26 | diff.ago.second
27 | sekundę temu|%count% sekundy temu|%count% sekund temu
28 |
29 |
30 | diff.empty
31 | teraz
32 |
33 |
34 | diff.in.second
35 | za sekundę|za %count% sekundy|za %count% sekund
36 |
37 |
38 | diff.in.hour
39 | za godzinę|za %count% godziny|za %count% godzin
40 |
41 |
42 | diff.in.minute
43 | za minutę|za %count% minuty|za %count% minut
44 |
45 |
46 | diff.in.day
47 | jutro|za %count% dni|za %count% dni
48 |
49 |
50 | diff.in.month
51 | za miesiąc|za %count% miesiące|za %count% miesięcy
52 |
53 |
54 | diff.in.year
55 | za rok|za %count% lata|za %count% lat
56 |
57 |
58 | duration.second
59 | 1 sekunda|%count% sekundy|%count% sekund
60 |
61 |
62 | duration.minute
63 | 1 minuta|%count% minuty|%count% minut
64 |
65 |
66 | duration.hour
67 | 1 godzina|%count% godziny|%count% godzin
68 |
69 |
70 | duration.day
71 | 1 dzień|%count% dni
72 |
73 |
74 | duration.none
75 | < 1 sekunda
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/translations/time.de.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | vor einem Jahr|vor %count% Jahren
8 |
9 |
10 | diff.ago.month
11 | vor einem Monat|vor %count% Monaten
12 |
13 |
14 | diff.ago.day
15 | vor einem Tag|vor %count% Tagen
16 |
17 |
18 | diff.ago.hour
19 | vor einer Stunde|vor %count% Stunden
20 |
21 |
22 | diff.ago.minute
23 | vor einer Minute|vor %count% Minuten
24 |
25 |
26 | diff.ago.second
27 | vor einer Sekunde|vor %count% Sekunden
28 |
29 |
30 | diff.empty
31 | jetzt
32 |
33 |
34 | diff.in.second
35 | in einer Sekunde|in %count% Sekunden
36 |
37 |
38 | diff.in.hour
39 | in einer Stunde|in %count% Stunden
40 |
41 |
42 | diff.in.minute
43 | in einer Minute|in %count% Minuten
44 |
45 |
46 | diff.in.day
47 | in einem Tag|in %count% Tagen
48 |
49 |
50 | diff.in.month
51 | in einem Monat|in %count% Monaten
52 |
53 |
54 | diff.in.year
55 | in einem Jahr|in %count% Jahren
56 |
57 |
58 | duration.second
59 | 1 Sekunde|%count% Sekunden
60 |
61 |
62 | duration.minute
63 | 1 Minute|%count% Minuten
64 |
65 |
66 | duration.hour
67 | 1 Stunde|%count% Stunden
68 |
69 |
70 | duration.day
71 | 1 Tag|%count% Tage
72 |
73 |
74 | duration.none
75 | < 1 Sekunde
76 |
77 |
78 | age
79 | 1 Jahr alt|%count% Jahre alt
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/translations/time.ru.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | %count% год назад|%count% года назад|%count% лет назад
8 |
9 |
10 | diff.ago.month
11 | %count% месяц назад|%count% месяца назад|%count% месяцев назад
12 |
13 |
14 | diff.ago.day
15 | %count% день назад|%count% дня назад|%count% дней назад
16 |
17 |
18 | diff.ago.hour
19 | %count% час назад|%count% часа назад|%count% часов назад
20 |
21 |
22 | diff.ago.minute
23 | %count% минуту назад|%count% минуты назад|%count% минут назад
24 |
25 |
26 | diff.ago.second
27 | %count% секунду назад|%count% секунды назад|%count% секунд назад
28 |
29 |
30 | diff.empty
31 | сейчас
32 |
33 |
34 | diff.in.second
35 | через %count% секунду|через %count% секунды|через %count% секунд
36 |
37 |
38 | diff.in.hour
39 | через %count% час|через %count% часа|через %count% часов
40 |
41 |
42 | diff.in.minute
43 | через %count% минуту|через %count% минуты|через %count% минут
44 |
45 |
46 | diff.in.day
47 | через %count% день|через %count% дня|через %count% дней
48 |
49 |
50 | diff.in.month
51 | через %count% месяц|через %count% месяца|через %count% месяцев
52 |
53 |
54 | diff.in.year
55 | через %count% год|через %count% года|через %count% лет
56 |
57 |
58 | duration.second
59 | 1 секунда|%count% секунд
60 |
61 |
62 | duration.minute
63 | 1 минута|%count% минут
64 |
65 |
66 | duration.hour
67 | 1 час|%count% часов
68 |
69 |
70 | duration.day
71 | 1 день|%count% дней
72 |
73 |
74 | duration.none
75 | < 1 секунды
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/translations/time.sk.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | pred rokom|[2, Inf]pred %count% rokmi
8 |
9 |
10 | diff.ago.month
11 | pred mesiacom|[2, Inf]pred %count% mesiacmi
12 |
13 |
14 | diff.ago.day
15 | {1}včera|{2}predvčerom|[3, Inf]pred %count% dňami
16 |
17 |
18 | diff.ago.hour
19 | pred hodinou|[2, Inf]pred %count% hodinami
20 |
21 |
22 | diff.ago.minute
23 | pred minútou|[2, Inf]pred %count% minútami
24 |
25 |
26 | diff.ago.second
27 | pred sekundou|[2, Inf]pred %count% sekundami
28 |
29 |
30 | diff.empty
31 | teraz
32 |
33 |
34 | diff.in.second
35 | {1}za sekundu|[2, 4]za %count% sekundy|[5, Inf]za %count% sekúnd
36 |
37 |
38 | diff.in.hour
39 | {1}za hodinu|[2, 4]za %count% hodiny|[5, Inf]za %count% hodín
40 |
41 |
42 | diff.in.minute
43 | {1}za minútu|[2, 4]za %count% minúty|[5, Inf]za %count% minút
44 |
45 |
46 | diff.in.day
47 | {1}zajtra|{2}pozajtra|[3, 4]za %count% dni|[5, Inf]za %count% dní
48 |
49 |
50 | diff.in.month
51 | {1}za mesiac|[2, 4]za %count% mesiace|[5, Inf]za %count% mesiacov
52 |
53 |
54 | diff.in.year
55 | {1}za rok|[2, 4]za %count% roky|[5, Inf]za %count% rokov
56 |
57 |
58 | duration.second
59 | 1 sekunda|[2, 4]%count% sekundy|[5, Inf]%count% sekúnd
60 |
61 |
62 | duration.minute
63 | 1 minúta|[2, 4]%count% minúty|[5, Inf]%count% minút
64 |
65 |
66 | duration.hour
67 | 1 hodina|[2, 4]%count% hodiny|[5, Inf]%count% hodín
68 |
69 |
70 | duration.day
71 | 1 deň|[2, 4]%count% dni|[5, Inf]%count% dní
72 |
73 |
74 | duration.none
75 | < 1 sekunda
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # knplabs/knp-time-bundle
2 |
3 | Friendly *ago*/*until* dates ("5 minutes ago" or "in 5 minutes") and *durations* ("2 mins")!
4 |
5 | ```twig
6 | Last edited: {{ post.updatedAt|time_diff }}
7 |
8 | Event date: {{ event.date|time_diff }}
9 |
10 | Read time: {{ post.readTimeInSeconds|duration }}
11 |
12 | Age: {{ user.birthdate|age }}
13 | ```
14 |
15 | Want to see it used in a screencast 🎥? Check out SymfonyCasts: https://symfonycasts.com/screencast/symfony-doctrine/ago
16 |
17 | The formatted date/duration can be translated into any language, and many are supported out of the box.
18 |
19 | ## Installation
20 |
21 | Use Composer to install the library:
22 |
23 | ```
24 | composer require knplabs/knp-time-bundle
25 | ```
26 |
27 | Woo! You did it! Assuming your project uses Symfony Flex, the
28 | bundle should be configured and ready to go. If not, you
29 | can enable `Knp\Bundle\TimeBundle\KnpTimeBundle` manually.
30 |
31 | ## Usage
32 |
33 | ### Twig
34 |
35 | Time formatting:
36 |
37 | ```twig
38 | {{ someDateTimeVariable|time_diff }} {# 2 weeks ago #}
39 |
40 | {# |ago is an alias for |time_diff #}
41 | {{ someDateTimeVariable|ago }} {# 1 second ago #}
42 |
43 | {# ... or use the equivalent function: #}
44 | {{ time_diff(someDateTimeVariable) }} {# in 2 months #}
45 | ```
46 |
47 | > **Note**: the `time_diff` filter/function and `ago` alias works fine for dates in the future, too.
48 |
49 | Duration formatting:
50 |
51 | ```twig
52 | {{ someDurationInSeconds|duration }} {# 2 minutes #}
53 | ```
54 |
55 | Age formatting:
56 |
57 | ```twig
58 | {# with filter: #}
59 | Age: {{ user.birthdate|age }} {# Age: 30 years old #}
60 |
61 | {# ... or use the equivalent function: #}
62 | Age: {{ age(user.birthdate) }} {# Age: 30 years old #}
63 | ```
64 |
65 | ### Service
66 |
67 | You can also format dates and durations in your services/controllers by autowiring/injecting the
68 | `Knp\Bundle\TimeBundle\DateTimeFormatter` service:
69 |
70 | ```php
71 | use Knp\Bundle\TimeBundle\DateTimeFormatter;
72 | // ...
73 |
74 | public function yourAction(DateTimeFormatter $dateTimeFormatter)
75 | {
76 | $someDate = new \DateTimeImmutable('-2 years'); // or $entity->publishedDate()
77 | $toDate = new \DateTimeImmutable('now');
78 |
79 | $agoTime = $dateTimeFormatter->formatDiff($someDate, $toDate); // $toDate parameter is optional and defaults to "now"
80 |
81 | $readTime = $dateTimeFormatter->formatDuration(64); // or $entity->readTimeInSeconds()
82 |
83 | $ageTime = $dateTimeFormatter->formatAge($someDate, $toDate); // $toDate parameter is optional and defaults to "now"
84 |
85 | return $this->json([
86 | // ...
87 | 'published_at' => $agoTime, // 2 years ago
88 | 'read_time' => $readTime, // 1 minute
89 | // ...
90 | ]);
91 | }
92 | ```
93 |
94 | ## Controlling the Translation Locale
95 |
96 | The bundle will automatically use the current locale when translating
97 | the "time_diff" ("ago") and "duration" messages. However, you can override
98 | the locale:
99 |
100 | ```twig
101 | {{ someDateTimeVariable|time_diff(locale='es') }}
102 |
103 | {{ someDurationInSeconds|duration(locale='es') }}
104 |
105 | {{ someDateTimeVariable|age(locale='es') }}
106 | ```
107 |
108 | ## Tests
109 |
110 | If you want to run tests, please check that you have installed dev dependencies.
111 |
112 | ```bash
113 | ./vendor/bin/phpunit
114 | ```
115 |
116 | ## Maintainers
117 |
118 | Anyone can contribute to this repository (and it's warmly welcomed!). The following
119 | people maintain and can merge into this library:
120 |
121 | - [@akovalyov](https://github.com/akovalyov)
122 | - [@weaverryan](https://github.com/weaverryan)
123 | - [@NicolasNSSM](https://github.com/NicolasNSSM)
124 |
--------------------------------------------------------------------------------
/translations/time.cs.xliff:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | diff.ago.year
7 | před rokem|[2, Inf]před %count% roky
8 |
9 |
10 | diff.ago.month
11 | před měsícem|[2, Inf]před %count% měsíci
12 |
13 |
14 | diff.ago.day
15 | {1}včera|{2}předevčírem|[3, Inf]před %count% dny
16 |
17 |
18 | diff.ago.hour
19 | před hodinou|[2, Inf]před %count% hodinami
20 |
21 |
22 | diff.ago.minute
23 | před minutou|[2, Inf]před %count% minutami
24 |
25 |
26 | diff.ago.second
27 | před sekundou|[2, Inf]před %count% sekundami
28 |
29 |
30 | diff.empty
31 | nyní
32 |
33 |
34 | diff.in.second
35 | {1}za sekundu|[2, 4]za %count% sekundy|[5, Inf]za %count% sekund
36 |
37 |
38 | diff.in.hour
39 | {1}za hodinu|[2, 4]za %count% hodiny|[5, Inf]za %count% hodin
40 |
41 |
42 | diff.in.minute
43 | {1}za minutu|[2, 4]za %count% minuty|[5, Inf]za %count% minut
44 |
45 |
46 | diff.in.day
47 | {1}zítra|{2}pozítří|[3, 4]za %count% dny|[5, Inf]za %count% dnů
48 |
49 |
50 | diff.in.month
51 | {1}za měsíc|[2, 4]za %count% měsíce|[5, Inf]za %count% měsíců
52 |
53 |
54 | diff.in.year
55 | {1}za rok|[2, 4]za %count% roky|[5, Inf]za %count% let
56 |
57 |
58 | duration.second
59 | 1 sekunda|[2, 4]%count% sekundy|[5, Inf]%count% sekund
60 |
61 |
62 | duration.minute
63 | 1 minuta|[2, 4]%count% minuty|[5, Inf]%count% minut
64 |
65 |
66 | duration.hour
67 | 1 hodina|[2, 4]%count% hodiny|[5, Inf]%count% hodin
68 |
69 |
70 | duration.day
71 | 1 den|[2, 4]%count% dny|[5, Inf]%count% dní
72 |
73 |
74 | duration.none
75 | < 1 sekunda
76 |
77 |
78 | age
79 | 1 rok|[2, 4] roky|[5, Inf] let
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/src/DateTimeFormatter.php:
--------------------------------------------------------------------------------
1 | 'year',
29 | 'm' => 'month',
30 | 'd' => 'day',
31 | 'h' => 'hour',
32 | 'i' => 'minute',
33 | 's' => 'second',
34 | ];
35 |
36 | $diff = $to->diff($from);
37 |
38 | foreach ($units as $attribute => $unit) {
39 | $count = $diff->$attribute;
40 |
41 | if (0 !== $count) {
42 | $id = sprintf('diff.%s.%s', $diff->invert ? 'ago' : 'in', $unit);
43 |
44 | return $this->translator->trans($id, ['%count%' => $count], 'time', $locale);
45 | }
46 | }
47 |
48 | return $this->translator->trans('diff.empty', [], 'time', $locale);
49 | }
50 |
51 | /**
52 | * @author Fabien Potencier
53 | *
54 | * @source https://github.com/symfony/symfony/blob/ad72245261792c6b5d2db821fcbd141b11095215/src/Symfony/Component/Console/Helper/Helper.php#L97
55 | */
56 | public function formatDuration(float $seconds, ?string $locale = null): string
57 | {
58 | static $timeFormats = [
59 | [0, 'duration.none'],
60 | [1, 'duration.second'],
61 | [2, 'duration.second', 1],
62 | [60, 'duration.minute'],
63 | [120, 'duration.minute', 60],
64 | [3600, 'duration.hour'],
65 | [7200, 'duration.hour', 3600],
66 | [86400, 'duration.day'],
67 | [172800, 'duration.day', 86400],
68 | ];
69 |
70 | foreach ($timeFormats as $index => $format) {
71 | if ($seconds >= $format[0]) {
72 | if ((isset($timeFormats[$index + 1]) && $seconds < $timeFormats[$index + 1][0])
73 | || $index === \count($timeFormats) - 1
74 | ) {
75 | if (2 === \count($format)) {
76 | return $this->translator->trans($format[1], ['%count%' => 1], 'time', $locale);
77 | }
78 |
79 | return $this->translator->trans(
80 | $format[1],
81 | ['%count%' => floor($seconds / $format[2])],
82 | 'time',
83 | $locale
84 | );
85 | }
86 | }
87 | }
88 |
89 | return $this->translator->trans('duration.none', [], 'time', $locale);
90 | }
91 |
92 | /**
93 | * Returns a formatted age for the given from and to datetimes.
94 | */
95 | public function formatAge(
96 | int|string|\DateTimeInterface $from,
97 | int|string|\DateTimeInterface|null $to = null,
98 | ?string $locale = null,
99 | ): string {
100 | $from = self::formatDateTime($from);
101 | $to = self::formatDateTime($to);
102 |
103 | $diff = $from->diff($to);
104 |
105 | return $this->translator->trans('age', ['%count%' => $diff->y], 'time', $locale);
106 | }
107 |
108 | private static function formatDateTime(int|string|\DateTimeInterface|null $value): \DateTimeInterface
109 | {
110 | if ($value instanceof \DateTimeInterface) {
111 | return $value;
112 | }
113 |
114 | if (is_int($value)) {
115 | $value = date('Y-m-d H:i:s', $value);
116 | }
117 |
118 | if (null === $value) {
119 | $value = 'now';
120 | }
121 |
122 | return new \DateTime($value);
123 | }
124 | }
125 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # CHANGELOG
2 |
3 | *We intend to follow [Semantic Versioning 2.0.0](https://semver.org/), if you
4 | find a change that break's semver, please create an issue.*
5 |
6 | ## [v2.4.0](https://github.com/knplabs/knptimebundle/releases/tag/v2.4.0)
7 |
8 | *June 11th, 2024*
9 |
10 | ### Feature
11 |
12 | - [#215](https://github.com/KnpLabs/KnpTimeBundle/pull/215) [translations] add additional Czech time translations - *@analogic*
13 |
14 |
15 | ## [v2.3.0](https://github.com/knplabs/knptimebundle/releases/tag/v2.3.0)
16 |
17 | *June 6th, 2024*
18 |
19 | ### Feature
20 |
21 | - [#209](https://github.com/KnpLabs/KnpTimeBundle/pull/209) [translation] add additional Slovak translations - *@tito10047*
22 |
23 | ## [v2.0.0]
24 |
25 | - Modernize/simplify the code base
26 | - Require PHP 8.1+
27 | - Remove `symfony/templating` integration
28 | - Make `DateTimeFormatter` final
29 | - Remove `DateTimeFormatter::getDiffMessage()`
30 | - Remove `DateTimeFormatter::getDateTimeObject()`
31 | - Remove `DateTimeFormatter::getEmptyDiffMessage()`
32 | - Add `time_diff` Twig filter as an alias for `ago`
33 | - Add `DateTimeFormatter::formatDuration()` and `duration` Twig filter
34 |
35 | ## [v1.20.0](https://github.com/knplabs/knptimebundle/releases/tag/v1.20.0)
36 |
37 | *October 11th, 2022*
38 |
39 | ### Feature
40 |
41 | - [#172](https://github.com/knplabs/knptimebundle/pull/172) - drop symfony 4.4 support - *@jrushlow*
42 |
43 | ## [v1.19.0](https://github.com/knplabs/knptimebundle/releases/tag/v1.19.0)
44 |
45 | *May 10th, 2022*
46 |
47 | ### Feature
48 |
49 | - [#169](https://github.com/knplabs/knptimebundle/pull/169) - [DX] Make "to" argument optional - *@weaverryan*
50 |
51 | ## [v1.18.0](https://github.com/knplabs/knptimebundle/releases/tag/v1.18.0)
52 |
53 | *February 7th, 2022*
54 |
55 | ### Feature
56 |
57 | - [#164](https://github.com/knplabs/knptimebundle/pull/164) - Force DateTime constructor parameter (PHP 8.1 deprecation) - *@grosmanal*
58 |
59 | ## [1.17.0](https://github.com/knplabs/knptimebundle/releases/tag/1.17.0)
60 |
61 | *October 28th, 2021*
62 |
63 | ### Feature
64 |
65 | - [#162](https://github.com/knplabs/knptimebundle/pull/162) - add return types for symfony 6 support - *@jrushlow*
66 | - [#161](https://github.com/knplabs/knptimebundle/pull/161) - Allow Symfony 6 - *@Kocal*
67 |
68 | ## [v1.16.1](https://github.com/knplabs/knptimebundle/releases/tag/v1.16.1)
69 |
70 | *July 13th, 2021*
71 |
72 | ### Bug Fix
73 |
74 | - [#158](https://github.com/knplabs/knptimebundle/pull/158) - Fixed strange construction "za dzień" to "jutro" - *@KerbenII*
75 |
76 | ## [v1.16.0](https://github.com/knplabs/knptimebundle/releases/tag/v1.16.0)
77 |
78 | *March 2nd, 2021*
79 |
80 | ### Feature
81 |
82 | - [#156](https://github.com/knplabs/knptimebundle/pull/156) - change CI and bump supported versions - *@jrushlow*
83 |
84 | ## [v1.15.0](https://github.com/knplabs/knptimebundle/releases/tag/v1.15.0)
85 |
86 | *January 15th, 2021*
87 |
88 | ### Feature
89 |
90 | - [#150](https://github.com/knplabs/knptimebundle/pull/150) - Added Norwegian bokmål and Norwegian nynorsk translations - *@jon-harald*
91 | - [#152](https://github.com/knplabs/knptimebundle/pull/152) - added the locale parameter - *@jpgiroux*
92 | - [#153](https://github.com/knplabs/knptimebundle/pull/153) - implement PHP's type system - *@jrushlow*
93 |
94 | ## [v1.14.0](https://github.com/knplabs/knptimebundle/releases/tag/v1.14.0)
95 |
96 | *December 16th, 2020*
97 |
98 | ### Feature
99 |
100 | - [#147](https://github.com/knplabs/knptimebundle/pull/147) - Add compatibility for PHP 8.0 - *@m-vo*
101 |
102 | ## [v1.13.0](https://github.com/knplabs/knptimebundle/releases/tag/v1.13.0)
103 |
104 | *August 14th, 2020*
105 |
106 | ### Feature
107 |
108 | - [#141](https://github.com/knplabs/knptimebundle/pull/141) - Remove symfony/templating as a hard dependency - *@kbond*
109 |
110 | ## [v1.12.0](https://github.com/knplabs/knptimebundle/releases/tag/v1.12.0)
111 |
112 | *July 7th, 2020*
113 |
114 | ### Feature
115 |
116 | - [#136](https://github.com/knplabs/knptimebundle/pull/136) - Add thai translations - *@Seb33300*
117 | - [#137](https://github.com/knplabs/knptimebundle/pull/137) - Add bg translation - *@ggabrovski*
118 | - [#138](https://github.com/knplabs/knptimebundle/pull/138) - Migrate to PSR-4 - *@mhor*
119 |
120 | ### Bug Fix
121 |
122 | - [#109](https://github.com/knplabs/knptimebundle/pull/109) - Fixed Serbian translation - *@ljubar*
123 |
124 | ## [v1.11.0](https://github.com/knplabs/knptimebundle/releases/tag/v1.11.0)
125 |
126 | *December 30th, 2019*
127 |
128 | ### Feature
129 |
130 | - [#127](https://github.com/knplabs/knptimebundle/pull/127) - use namespaced twig classes - *@zaggi-iwnl*
131 | - [#129](https://github.com/knplabs/knptimebundle/pull/129) - bumping php & symfony version dependencies and making code updates - *@weaverryan*
132 |
133 | ## [v1.10.0](https://github.com/knplabs/knptimebundle/releases/tag/v1.10.0)
134 |
135 | *December 5th, 2019*
136 |
137 | ### Feature
138 |
139 | - [#123](https://github.com/knplabs/knptimebundle/pull/123) - removing support for most obsolete versions - *@weaverryan*
140 | - [#121](https://github.com/knplabs/knptimebundle/pull/121) - Allow Symfony 5 - *@tacman*
141 |
142 | ## [v1.9.1](https://github.com/knplabs/knptimebundle/releases/tag/v1.9.1)
143 |
144 | *April 19th, 2019*
145 |
146 | ### Feature
147 |
148 | - [#117](https://github.com/knplabs/knptimebundle/pull/117) - Use transChoice for Symfony <4.2 - *@cb8*
149 |
150 | ## [1.9.0](https://github.com/knplabs/knptimebundle/releases/tag/1.9.0)
151 |
152 | *December 19th, 2018*
153 |
154 | ### Bug Fix
155 |
156 | - [#111](https://github.com/knplabs/knptimebundle/pull/111) - Fix symfony 4.2 transChoice deprecation - *@dirkkredler*
157 |
158 | ## [1.8.0](https://github.com/knplabs/knptimebundle/releases/tag/1.8.0)
159 |
160 | *December 26th, 2017*
161 |
162 | ### Feature
163 |
164 | - [#103](https://github.com/knplabs/knptimebundle/pull/103) - [#SymfonyConHackday2017] SF4 compatibility update - *@michalkurzeja*
165 |
166 | ## [1.7.5](https://github.com/knplabs/knptimebundle/releases/tag/1.7.5)
167 |
168 | *October 27th, 2017*
169 |
170 | ### Bug Fix
171 |
172 | - [#101](https://github.com/knplabs/knptimebundle/pull/101) - Fix romanian translation of minute (singular) - *@sergiu-popa*
173 |
174 | ## [1.7.4](https://github.com/knplabs/knptimebundle/releases/tag/1.7.4)
175 |
176 | *July 12th, 2017*
177 |
178 | ### Feature
179 |
180 | - [#97](https://github.com/knplabs/knptimebundle/pull/97) - Add Slovak translation - *@dfridrich*
181 |
182 | ## [1.7.3](https://github.com/knplabs/knptimebundle/releases/tag/1.7.3)
183 |
184 | *March 4th, 2017*
185 |
186 | ### Feature
187 |
188 | - [#94](https://github.com/knplabs/knptimebundle/pull/94) - added Esperanto translation - *@marcu87*
189 |
190 | ## [1.7.2](https://github.com/knplabs/knptimebundle/releases/tag/1.7.2)
191 |
192 | *February 2nd, 2017*
193 |
194 | ### Bug Fix
195 |
196 | - [#92](https://github.com/knplabs/knptimebundle/pull/92) - Turkish translation bug fixed - *@shibby*
197 |
198 | ## [1.7.1](https://github.com/knplabs/knptimebundle/releases/tag/1.7.1)
199 |
200 | *January 20th, 2017*
201 |
202 | ### Feature
203 |
204 | - [#91](https://github.com/knplabs/knptimebundle/pull/91) - NewFeature: Catalan Translations - *@aleixfargas*
205 |
206 | ## [1.7.0](https://github.com/knplabs/knptimebundle/releases/tag/1.7.0)
207 |
208 | *October 22nd, 2016*
209 |
210 | ### Feature
211 |
212 | - [#87](https://github.com/knplabs/knptimebundle/pull/87) - Add DateTimeImmutable support - *@Einenlum*
213 | - [#88](https://github.com/knplabs/knptimebundle/pull/88) - Add Finnish language translations - *@nicodemuz*
214 |
215 | ### Bug Fix
216 |
217 | - [#89](https://github.com/knplabs/knptimebundle/pull/89) - Fix Polish Translations Pluralization - *@pawelabrams*
218 |
219 | ## [1.6.1](https://github.com/knplabs/knptimebundle/releases/tag/1.6.1)
220 |
221 | *May 10th, 2016*
222 |
223 | ### Feature
224 |
225 | - [#82](https://github.com/knplabs/knptimebundle/pull/82) - Added Kyrgyz translation - *@imanalopher*
226 | - [#76](https://github.com/knplabs/knptimebundle/pull/76) - add some Turkish related translations - *@behram*
227 |
228 | ## [1.6.0](https://github.com/knplabs/knptimebundle/releases/tag/1.6.0)
229 |
230 | *April 22nd, 2016*
231 |
232 | ### Feature
233 |
234 | - [#75](https://github.com/knplabs/knptimebundle/pull/75) - add translation for vietnamese - *@dchien234*
235 |
236 | ### Bug Fix
237 |
238 | - [#80](https://github.com/knplabs/knptimebundle/pull/80) - Fix the german translation - *@leofeyer*
239 | - [#81](https://github.com/knplabs/knptimebundle/pull/81) - Fix typo in time.uk.xliff - *@relo-san*
240 | - [#79](https://github.com/knplabs/knptimebundle/pull/79) - Fix czech translation - *@dfridrich*
241 |
242 | ## [1.5.3](https://github.com/knplabs/knptimebundle/releases/tag/1.5.3)
243 |
244 | *November 24th, 2015*
245 |
246 | ### Bug Fix
247 |
248 | - [#73](https://github.com/knplabs/knptimebundle/pull/73) - Bug with showing time, ending on 1. - *@relo-san*
249 |
250 | ## [1.5.2](https://github.com/knplabs/knptimebundle/releases/tag/1.5.2)
251 |
252 | *November 12th, 2015*
253 |
254 | ### Feature
255 |
256 | - [#71](https://github.com/knplabs/knptimebundle/pull/71) - Symfony 3 support - *@akovalyov*
257 |
258 | ## [1.5.1](https://github.com/knplabs/knptimebundle/releases/tag/1.5.1)
259 |
260 | *November 11th, 2015*
261 |
262 | ### Bug Fix
263 |
264 | - [#65](https://github.com/knplabs/knptimebundle/pull/65) - correcting translations sr_Latn - *@cvele*
265 |
266 | ## [1.5.0](https://github.com/knplabs/knptimebundle/releases/tag/1.5.0)
267 |
268 | *October 7th, 2015*
269 |
270 | ### Feature
271 |
272 | - [#68](https://github.com/knplabs/knptimebundle/pull/68) - Updates twig extension to work with twig 1.12-2.0 - *@bryanagee*
273 |
274 | ## [1.4.0](https://github.com/knplabs/knptimebundle/releases/tag/1.4.0)
275 |
276 | *September 17th, 2015*
277 |
278 | ### Feature
279 |
280 | - [#54](https://github.com/knplabs/knptimebundle/pull/54) - Added PT translations - *@fixe*
281 | - [#55](https://github.com/knplabs/knptimebundle/pull/55) - Added romanian translations - *@ghost*
282 | - [#61](https://github.com/knplabs/knptimebundle/pull/61) - Adding serbian latin translation - *@cvele*
283 | - [#57](https://github.com/knplabs/knptimebundle/pull/57) - Add hungarian translation - *@dhargitai*
284 | - [#62](https://github.com/knplabs/knptimebundle/pull/62) - Add Indonesian translation - *@egig*
285 | - [#58](https://github.com/knplabs/knptimebundle/pull/58) - Added Lithuanian translation - *@flarelt*
286 | - [#59](https://github.com/knplabs/knptimebundle/pull/59) - Add Arabic Localization strings - *@omarahm*
287 |
288 | ### Bug Fix
289 |
290 | - [#63](https://github.com/knplabs/knptimebundle/pull/63) - Revert "Adding serbian latin translation" - *@umpirsky*
291 |
292 | ## [v1.3](https://github.com/knplabs/knptimebundle/releases/tag/v1.3)
293 |
294 | *December 12th, 2013*
295 |
296 | ### Feature
297 |
298 | - [#46](https://github.com/knplabs/knptimebundle/pull/46) - Adding Czech translation - *@deep9*
299 | - [#43](https://github.com/knplabs/knptimebundle/pull/43) - Added Japanese translation - *@nurikabe*
300 |
301 | ### Bug Fix
302 |
303 | - [#47](https://github.com/knplabs/knptimebundle/pull/47) - Update time.ru.xliff - *@sergeylunev*
304 |
305 | ## [v1.2](https://github.com/knplabs/knptimebundle/releases/tag/v1.2)
306 |
307 | *November 15th, 2013*
308 |
309 | ### Feature
310 |
311 | - [#35](https://github.com/knplabs/knptimebundle/pull/35) - Add Ukrainian translations - *@dxops*
312 | - [#12](https://github.com/knplabs/knptimebundle/pull/12) - Twig ago filter - *@docteurklein*
313 | - [#26](https://github.com/knplabs/knptimebundle/pull/26) - Added Basque translations - *@eillarra*
314 | - [#4](https://github.com/knplabs/knptimebundle/pull/4) - Italian Translation - *@ephp*
315 | - [#13](https://github.com/knplabs/knptimebundle/pull/13) - Polish messages translation - *@canni*
316 | - [#11](https://github.com/knplabs/knptimebundle/pull/11) - fix translations with choices - *@docteurklein*
317 | - [#39](https://github.com/knplabs/knptimebundle/pull/39) - Added Swedish translations - *@JhonnyL*
318 | - [#6](https://github.com/knplabs/knptimebundle/pull/6) - Added Chinese translation - *@khepin*
319 | - [#7](https://github.com/knplabs/knptimebundle/pull/7) - Added Spanish translation - *@ejosvp*
320 | - [#9](https://github.com/knplabs/knptimebundle/pull/9) - Russian translation file - *@dr-fozzy*
321 | - [#34](https://github.com/knplabs/knptimebundle/pull/34) - Add ukrainian translations - *@dxops*
322 | - [#21](https://github.com/knplabs/knptimebundle/pull/21) - Added Danish translation. - *@phidah*
323 | - [#48](https://github.com/knplabs/knptimebundle/pull/48) - Add symfony 2.3 support - *@labs-scnm*
324 | - [#17](https://github.com/knplabs/knptimebundle/pull/17) - Added an upper bound on the composer constraint - *@stof*
325 | - [#14](https://github.com/knplabs/knptimebundle/pull/14) - Added Dutch translations - *@itavero*
326 | - [#2](https://github.com/knplabs/knptimebundle/pull/2) - Add german translation file - *@gimler*
327 | - [#33](https://github.com/knplabs/knptimebundle/pull/33) - Add symfony 2.2 support - *@pilot*
328 | - [#40](https://github.com/knplabs/knptimebundle/pull/40) - Added Brazilian Portuguese translation - *@raphox*
329 | - [#5](https://github.com/knplabs/knptimebundle/pull/5) - Add composer.json - *@stloyd*
330 |
331 | ### Bug Fix
332 |
333 | - [#36](https://github.com/knplabs/knptimebundle/pull/36) - fixed wrong translation keys - *@inmarelibero*
334 | - [#41](https://github.com/knplabs/knptimebundle/pull/41) - Fix Chinese Translation - *@luiges90*
335 | - [#3](https://github.com/knplabs/knptimebundle/pull/3) - Fix empty message translation - *@gimler*
336 | - [#37](https://github.com/knplabs/knptimebundle/pull/37) - Fix chinese translation - *@luiges90*
337 | - [#20](https://github.com/knplabs/knptimebundle/pull/20) - Fixed a typo in the Dutch translation. - *@itavero*
338 | - [#31](https://github.com/knplabs/knptimebundle/pull/31) - Update Resources/translations/time.nl.xliff - *@sstok*
339 | - [#23](https://github.com/knplabs/knptimebundle/pull/23) - Fixed plurals in Polish translation - *@kolah*
340 |
341 | ## [v0.0.0](https://github.com/knplabs/knptimebundle/releases/tag/v0.0.0)
342 |
343 | *January 1st, 1900*
344 |
345 | ### Feature
346 |
347 | - [#30](https://github.com/knplabs/knptimebundle/pull/30) - Proposal, raise Symfony dependency - *@michelsalib*
348 | - [#24](https://github.com/knplabs/knptimebundle/pull/24) - Added Danish translation - *@bmatzner*
349 |
--------------------------------------------------------------------------------