├── CHANGELOG.md ├── LICENSE ├── README.md ├── composer.json ├── config ├── services.php └── twig.php ├── src ├── DateTimeFormatter.php ├── DependencyInjection │ └── KnpTimeExtension.php ├── KnpTimeBundle.php └── Twig │ └── Extension │ └── TimeExtension.php └── translations ├── time.ar.xliff ├── time.bg.xliff ├── time.bs_Latn_BA.xliff ├── time.ca.xliff ├── time.cs.xliff ├── time.da.xliff ├── time.de.xliff ├── time.en.xliff ├── time.eo.xliff ├── time.es.xliff ├── time.eu.xliff ├── time.fi.xliff ├── time.fr.xliff ├── time.hr_HR.xliff ├── time.hu.xliff ├── time.id.xliff ├── time.it.xliff ├── time.ja.xliff ├── time.ky.xliff ├── time.lt.xliff ├── time.nb.xliff ├── time.nl.xliff ├── time.nn.xliff ├── time.pl.xliff ├── time.pt.xliff ├── time.pt_BR.xliff ├── time.pt_PT.xliff ├── time.ro.xliff ├── time.ru.xliff ├── time.sk.xliff ├── time.sl.xliff ├── time.sr_Latin.xliff ├── time.sv.xliff ├── time.th.xliff ├── time.tr.xliff ├── time.uk.xliff ├── time.vi.xliff ├── time.zh.xliff ├── time.zh_CN.xliff ├── time.zh_HK.xliff └── time.zh_TW.xliff /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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", 23 | "symfony/translation": "^5.4|^6.0|^7.0", 24 | "symfony/config": "^5.4|^6.0|^7.0" 25 | }, 26 | 27 | "require-dev": { 28 | "symfony/framework-bundle": "^5.4|^6.0|^7.0", 29 | "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", 30 | "symfony/twig-bundle": "^5.4|^6.0|^7.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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /config/twig.php: -------------------------------------------------------------------------------- 1 | services() 10 | ->set('.time.twig.extension.time', TimeExtension::class) 11 | ->tag('twig.extension') 12 | ; 13 | }; 14 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /src/DependencyInjection/KnpTimeExtension.php: -------------------------------------------------------------------------------- 1 | load('services.php'); 20 | 21 | if (class_exists(AbstractExtension::class)) { 22 | $loader->load('twig.php'); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/KnpTimeBundle.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 | -------------------------------------------------------------------------------- /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.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.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.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.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 | -------------------------------------------------------------------------------- /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.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.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.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.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.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.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.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.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.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.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.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.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.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.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 | 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.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.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.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.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.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 | -------------------------------------------------------------------------------- /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.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.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.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.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.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.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 | --------------------------------------------------------------------------------