├── src
├── lang
│ ├── .gitkeep
│ ├── tr
│ │ ├── units.php
│ │ └── months.php
│ ├── ja
│ │ ├── units.php
│ │ └── months.php
│ ├── fa
│ │ ├── units.php
│ │ └── months.php
│ ├── bn
│ │ ├── units.php
│ │ └── months.php
│ ├── af
│ │ ├── units.php
│ │ └── months.php
│ ├── da
│ │ ├── units.php
│ │ └── months.php
│ ├── sv
│ │ ├── units.php
│ │ └── months.php
│ ├── en
│ │ ├── units.php
│ │ └── months.php
│ ├── es
│ │ ├── units.php
│ │ └── months.php
│ ├── it
│ │ ├── units.php
│ │ └── months.php
│ ├── pt
│ │ └── units.php
│ ├── bg
│ │ ├── units.php
│ │ └── months.php
│ ├── de
│ │ ├── units.php
│ │ └── months.php
│ ├── fr
│ │ ├── units.php
│ │ └── months.php
│ ├── el
│ │ ├── units.php
│ │ └── months.php
│ ├── ro
│ │ ├── units.php
│ │ └── months.php
│ ├── nl
│ │ ├── units.php
│ │ └── months.php
│ ├── ru
│ │ ├── units.php
│ │ └── months.php
│ ├── uk
│ │ ├── units.php
│ │ └── months.php
│ ├── sk
│ │ ├── months.php
│ │ └── units.php
│ └── ar
│ │ ├── months.php
│ │ └── units.php
└── Laravelrus
│ └── LocalizedCarbon
│ ├── DiffFormatters
│ ├── DiffFormatterInterface.php
│ ├── FaDiffFotmatter.php
│ ├── AfDiffFormatter.php
│ ├── ElDiffFormatter.php
│ ├── EnDiffFormatter.php
│ ├── TrDiffFormatter.php
│ ├── NlDiffFormatter.php
│ ├── JaDiffFormatter.php
│ ├── EsDiffFormatter.php
│ ├── ArDiffFormatter.php
│ ├── SvDiffFormatter.php
│ ├── FrDiffFormatter.php
│ ├── BgDiffFormatter.php
│ ├── PtDiffFormatter.php
│ ├── RuDiffFormatter.php
│ ├── ItDiffFormatter.php
│ ├── SkDiffFormatter.php
│ ├── UkDiffFormatter.php
│ ├── RoDiffFormatter.php
│ ├── DeDiffFormatter.php
│ └── BnDiffFormatter.php
│ ├── DiffFactoryFacade.php
│ ├── LocalizedCarbonServiceProvider.php
│ ├── Models
│ └── Eloquent.php
│ ├── Traits
│ └── LocalizedEloquentTrait.php
│ ├── DiffFormatterFactory.php
│ └── LocalizedCarbon.php
├── tests
├── .gitkeep
└── RoLocalizedCarbonTest.php
├── .gitignore
├── .travis.yml
├── phpunit.xml
├── composer.json
├── docs
└── README-ru.md
└── README.md
/src/lang/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tests/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | /vendor
3 | composer.phar
4 | composer.lock
5 | .DS_Store
6 |
--------------------------------------------------------------------------------
/src/lang/tr/units.php:
--------------------------------------------------------------------------------
1 | "saniye",
4 | "minute" => "dakika",
5 | "hour" => "saat",
6 | "day" => "gün",
7 | "week" => "hafta",
8 | "month" => "ay",
9 | "year" => "yıl",
10 | );
11 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/DiffFormatters/DiffFormatterInterface.php:
--------------------------------------------------------------------------------
1 | "秒",
5 | "minute" => "分",
6 | "hour" => "時間",
7 | "day" => "日",
8 | "week" => "週間|",
9 | "month" => "ヶ月",
10 | "year" => "年",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/fa/units.php:
--------------------------------------------------------------------------------
1 | "ثانیه",
4 | "minute" => "دقیقه",
5 | "hour" => "ساعت",
6 | "day" => "روز",
7 | "week" => "هفته",
8 | "month" => "ماه",
9 | "year" => "سال",
10 | );
11 |
--------------------------------------------------------------------------------
/src/lang/bn/units.php:
--------------------------------------------------------------------------------
1 | "সেকেন্ড",
4 | "minute" => "মিনিট",
5 | "hour" => "ঘন্টা",
6 | "day" => "দিন ",
7 | "week" => "সপ্তাহ",
8 | "month" => "মাস",
9 | "year" => "বছর",
10 | ];
11 |
--------------------------------------------------------------------------------
/src/lang/af/units.php:
--------------------------------------------------------------------------------
1 | "sekonde|sekondes",
4 | "minute" => "minuut|minute",
5 | "hour" => "uur|ure",
6 | "day" => "dag|dae",
7 | "week" => "week|weke",
8 | "month" => "maand|maande",
9 | "year" => "jaar|jare",
10 | );
11 |
--------------------------------------------------------------------------------
/src/lang/da/units.php:
--------------------------------------------------------------------------------
1 | "sekund|sekunder",
5 | "minute" => "minut|minutter",
6 | "hour" => "time|timer",
7 | "day" => "dag|dage",
8 | "week" => "uge|uger",
9 | "month" => "måned|måneder",
10 | "year" => "år|år",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/sv/units.php:
--------------------------------------------------------------------------------
1 | "sekund|sekunder",
5 | "minute" => "minut|minuter",
6 | "hour" => "timme|timmar",
7 | "day" => "dag|dagar",
8 | "week" => "vecka|veckor",
9 | "month" => "månad|månader",
10 | "year" => "år",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/en/units.php:
--------------------------------------------------------------------------------
1 | "second|seconds",
5 | "minute" => "minute|minutes",
6 | "hour" => "hour|hours",
7 | "day" => "day|days",
8 | "week" => "week|weeks",
9 | "month" => "month|months",
10 | "year" => "year|years",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/es/units.php:
--------------------------------------------------------------------------------
1 | "segundo|segundos",
5 | "minute" => "minuto|minutos",
6 | "hour" => "hora|horas",
7 | "day" => "día|días",
8 | "week" => "semana|semanas",
9 | "month" => "mes|meses",
10 | "year" => "año|años",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/it/units.php:
--------------------------------------------------------------------------------
1 | "secondo|secondi",
4 | "minute" => "minuto|minuti",
5 | "hour" => "ora|ore",
6 | "day" => "giorno|giorni",
7 | "week" => "settimana|settimane",
8 | "month" => "mese|mesi",
9 | "year" => "anno|anni",
10 | );
11 |
--------------------------------------------------------------------------------
/src/lang/pt/units.php:
--------------------------------------------------------------------------------
1 | "segundo|segundos",
5 | "minute" => "minuto|minutos",
6 | "hour" => "hora|horas",
7 | "day" => "dia|dias",
8 | "week" => "semana|semanas",
9 | "month" => "mês|meses",
10 | "year" => "ano|anos",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/bg/units.php:
--------------------------------------------------------------------------------
1 | "секунда|секунди",
5 | "minute" => "минута|минути",
6 | "hour" => "час|часа",
7 | "day" => "ден|дни",
8 | "week" => "седмица|седмици",
9 | "month" => "месец|месеца",
10 | "year" => "година|години",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/de/units.php:
--------------------------------------------------------------------------------
1 | "Sekunde|Sekunden",
5 | "minute" => "Minute|Minuten",
6 | "hour" => "Stunde|Stunden",
7 | "day" => "Tag|Tage",
8 | "week" => "Woche|Wochen",
9 | "month" => "Monat|Monate",
10 | "year" => "Jahr|Jahre",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/fr/units.php:
--------------------------------------------------------------------------------
1 | "seconde|secondes",
5 | "minute" => "minute|minutes",
6 | "hour" => "heure|heures",
7 | "day" => "jour|jours",
8 | "week" => "semaine|semaines",
9 | "month" => "mois|mois",
10 | "year" => "an|ans",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/el/units.php:
--------------------------------------------------------------------------------
1 | "δευτερόλεπτο|δευτερόλεπτα",
4 | "minute" => "λεπτά|λεπτό",
5 | "hour" => "ώρα|ώρες",
6 | "day" => "ημέρα|ημέρες",
7 | "week" => "εβδομάδα|εβδομάδες",
8 | "month" => "μήνας|μήνες",
9 | "year" => "χρόνος|χρόνια",
10 | );
11 |
--------------------------------------------------------------------------------
/src/lang/ro/units.php:
--------------------------------------------------------------------------------
1 | "secundă|secunde|secunde",
5 | "minute" => "minut|minute|minute",
6 | "hour" => "oră|ore|ore",
7 | "day" => "zi|zile|zile",
8 | "week" => "săptămână|săptămâni|săptămâni",
9 | "month" => "lună|luni|luni",
10 | "year" => "an|ani|ani",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/nl/units.php:
--------------------------------------------------------------------------------
1 | "seconde|seconden|seconden",
5 | "minute" => "minuut|minuten|minuten",
6 | "hour" => "uur|uur|uur",
7 | "day" => "dag|dagen|dagen",
8 | "week" => "week|weken|weken",
9 | "month" => "maand|maanden|maanden",
10 | "year" => "jaar|jaren|jaren",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/ru/units.php:
--------------------------------------------------------------------------------
1 | "секунду|секунды|секунд",
5 | "minute" => "минуту|минуты|минут",
6 | "hour" => "час|часа|часов",
7 | "day" => "день|дня|дней",
8 | "week" => "неделю|недели|недель",
9 | "month" => "месяц|месяца|месяцев",
10 | "year" => "год|года|лет",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/uk/units.php:
--------------------------------------------------------------------------------
1 | "секунду|секунди|секунд",
5 | "minute" => "хвилину|хвилини|хвилин",
6 | "hour" => "годину|години|годин",
7 | "day" => "день|дні|днів",
8 | "week" => "тиждень|тижня|тижнів",
9 | "month" => "місяць|місяця|місяців",
10 | "year" => "рік|роки|років",
11 | );
12 |
--------------------------------------------------------------------------------
/src/lang/ja/months.php:
--------------------------------------------------------------------------------
1 | "1月",
5 | "february" => "2月",
6 | "march" => "3月",
7 | "april" => "4月",
8 | "may" => "5月",
9 | "june" => "6月",
10 | "july" => "7月",
11 | "august" => "8月",
12 | "september" => "9月",
13 | "october" => "10月",
14 | "november" => "11月",
15 | "december" => "12月",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/fa/months.php:
--------------------------------------------------------------------------------
1 | "ژانویه",
4 | "february" => "فوریه",
5 | "march" => "مارچ",
6 | "april" => "آپریل",
7 | "may" => "می",
8 | "june" => "جون",
9 | "july" => "جولای",
10 | "august" => "آگوست",
11 | "september" => "سپتامبر",
12 | "october" => "اکتبر",
13 | "november" => "نوامبر",
14 | "december" => "دسامبر",
15 | );
16 |
--------------------------------------------------------------------------------
/src/lang/tr/months.php:
--------------------------------------------------------------------------------
1 | "Ocak",
5 | "february" => "Şubat",
6 | "march" => "Mart",
7 | "april" => "Nisan",
8 | "may" => "Mayıs",
9 | "june" => "Haziran",
10 | "july" => "Temmuz",
11 | "august" => "Ağustos",
12 | "september" => "Eylül",
13 | "october" => "Ekim",
14 | "november" => "Kasım",
15 | "december" => "Aralık",
16 | );
17 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/DiffFactoryFacade.php:
--------------------------------------------------------------------------------
1 | "Януари",
5 | "february" => "Февруари",
6 | "march" => "Март",
7 | "april" => "Април",
8 | "may" => "Май",
9 | "june" => "Юни",
10 | "july" => "Юли",
11 | "august" => "Август",
12 | "september" => "Септември",
13 | "october" => "Октомври",
14 | "november" => "Ноември",
15 | "december" => "Декември",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/da/months.php:
--------------------------------------------------------------------------------
1 | "Januar",
5 | "february" => "Febryar",
6 | "march" => "Marts",
7 | "april" => "April",
8 | "may" => "Maj",
9 | "june" => "Juni",
10 | "july" => "Juli",
11 | "august" => "August",
12 | "september" => "September",
13 | "october" => "Oktober",
14 | "november" => "November",
15 | "december" => "December",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/de/months.php:
--------------------------------------------------------------------------------
1 | "Januar",
5 | "february" => "Februar",
6 | "march" => "März",
7 | "april" => "April",
8 | "may" => "Mai",
9 | "june" => "Juni",
10 | "july" => "Juli",
11 | "august" => "August",
12 | "september" => "September",
13 | "october" => "Oktober",
14 | "november" => "November",
15 | "december" => "Dezember",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/fr/months.php:
--------------------------------------------------------------------------------
1 | 'Janvier',
4 | 'february' => 'Février',
5 | 'march' => 'Mars',
6 | 'april' => 'Avril',
7 | 'may' => 'Mai',
8 | 'june' => 'Juin',
9 | 'july' => 'Juillet',
10 | 'august' => 'Août',
11 | 'september' => 'Septembre',
12 | 'october' => 'Octobre',
13 | 'november' => 'Novembre',
14 | 'december' => 'Décembre'
15 | );
16 | ?>
17 |
--------------------------------------------------------------------------------
/src/lang/bn/months.php:
--------------------------------------------------------------------------------
1 | "জানুয়ারি",
5 | "february" => "ফেব্রুয়ারী",
6 | "march" => "মার্চ",
7 | "april" => "এপ্রিল",
8 | "may" => "মে",
9 | "june" => "জুন",
10 | "july" => "জুলাই",
11 | "august" => "আগস্ট",
12 | "september" => "সেপ্টেম্বর ",
13 | "october" => "অক্টোবর",
14 | "november" => "নভেম্বর",
15 | "december" => "ডিসেম্বর",
16 | ];
--------------------------------------------------------------------------------
/src/lang/it/months.php:
--------------------------------------------------------------------------------
1 | "Gennaio",
4 | "february" => "Febbraio",
5 | "march" => "Marzo",
6 | "april" => "Aprile",
7 | "may" => "Maggio",
8 | "june" => "Giugno",
9 | "july" => "Luglio",
10 | "august" => "Agosto",
11 | "september" => "Settembre",
12 | "october" => "Ottobre",
13 | "november" => "Novembre",
14 | "december" => "Dicembre",
15 | );
16 |
--------------------------------------------------------------------------------
/src/lang/nl/months.php:
--------------------------------------------------------------------------------
1 | "januari",
5 | "february" => "februari",
6 | "march" => "maart",
7 | "april" => "april",
8 | "may" => "mei",
9 | "june" => "juni",
10 | "july" => "juli",
11 | "august" => "augustus",
12 | "september" => "september",
13 | "october" => "oktober",
14 | "november" => "november",
15 | "december" => "december",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/af/months.php:
--------------------------------------------------------------------------------
1 | "Januarie",
4 | "februarie" => "Februarie",
5 | "maart" => "Maart",
6 | "april" => "April",
7 | "mei" => "Mei",
8 | "junie" => "Junie",
9 | "julie" => "Julie",
10 | "augustus" => "Augustus",
11 | "september" => "September",
12 | "oktober" => "Oktober",
13 | "november" => "November",
14 | "december" => "December",
15 | );
16 |
--------------------------------------------------------------------------------
/src/lang/ru/months.php:
--------------------------------------------------------------------------------
1 | "января",
5 | "february" => "февраля",
6 | "march" => "марта",
7 | "april" => "апреля",
8 | "may" => "мая",
9 | "june" => "июня",
10 | "july" => "июля",
11 | "august" => "августа",
12 | "september" => "сентября",
13 | "october" => "октября",
14 | "november" => "ноября",
15 | "december" => "декабря",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/sk/months.php:
--------------------------------------------------------------------------------
1 | "január",
5 | "february" => "február",
6 | "march" => "marec",
7 | "april" => "apríl",
8 | "may" => "máj",
9 | "june" => "jún",
10 | "july" => "júl",
11 | "august" => "august",
12 | "september" => "september",
13 | "october" => "október",
14 | "november" => "november",
15 | "december" => "december",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/en/months.php:
--------------------------------------------------------------------------------
1 | "January",
5 | "february" => "February",
6 | "march" => "March",
7 | "april" => "April",
8 | "may" => "May",
9 | "june" => "June",
10 | "july" => "July",
11 | "august" => "August",
12 | "september" => "September",
13 | "october" => "October",
14 | "november" => "November",
15 | "december" => "December",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/es/months.php:
--------------------------------------------------------------------------------
1 | "Enero",
5 | "february" => "Febrero",
6 | "march" => "Marzo",
7 | "april" => "Abril",
8 | "may" => "Mayo",
9 | "june" => "Junio",
10 | "july" => "Julio",
11 | "august" => "Agosto",
12 | "september" => "Septiembre",
13 | "october" => "Octubre",
14 | "november" => "Noviembre",
15 | "december" => "Diciembre",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/sv/months.php:
--------------------------------------------------------------------------------
1 | "Januari",
5 | "february" => "Februari",
6 | "march" => "Mars",
7 | "april" => "April",
8 | "may" => "Maj",
9 | "june" => "Juni",
10 | "july" => "Juli",
11 | "august" => "Augusti",
12 | "september" => "September",
13 | "october" => "Oktober",
14 | "november" => "November",
15 | "december" => "December",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/uk/months.php:
--------------------------------------------------------------------------------
1 | "січня",
5 | "february" => "лютого",
6 | "march" => "березня",
7 | "april" => "квітня",
8 | "may" => "травня",
9 | "june" => "червня",
10 | "july" => "липня",
11 | "august" => "серпня",
12 | "september" => "вересня",
13 | "october" => "жовтня",
14 | "november" => "листопада",
15 | "december" => "грудня",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/el/months.php:
--------------------------------------------------------------------------------
1 | "Ιανουάριος",
4 | "february" => "Φεβρουάριος",
5 | "march" => "Μάρτιος",
6 | "april" => "Απρίλιος",
7 | "may" => "Μάιος",
8 | "june" => "Ιούνιος",
9 | "july" => "Ιούλιος",
10 | "august" => "Αύγουστος",
11 | "september" => "Σεπτέμβριος",
12 | "october" => "Οκτώβριος",
13 | "november" => "Νοέμβριος",
14 | "december" => "Δεκέμβριος",
15 | );
16 |
--------------------------------------------------------------------------------
/src/lang/ro/months.php:
--------------------------------------------------------------------------------
1 | "Ianuarie",
5 | "february" => "Februarie",
6 | "march" => "Martie",
7 | "april" => "Aprilie",
8 | "may" => "Mai",
9 | "june" => "Iunie",
10 | "july" => "Iulie",
11 | "august" => "August",
12 | "september" => "Septembrie",
13 | "october" => "Octombrie",
14 | "november" => "Noiembrie",
15 | "december" => "Decembrie",
16 | );
17 |
--------------------------------------------------------------------------------
/src/lang/ar/months.php:
--------------------------------------------------------------------------------
1 | https://github.com/chadidi
3 | return array(
4 | "january" => "يناير",
5 | "february" => "فبراير",
6 | "march" => "مارس",
7 | "april" => "أبريل",
8 | "may" => "مايو",
9 | "june" => "يونيو",
10 | "july" => "يوليو",
11 | "august" => "أغسطس",
12 | "september" => "سبتمبر",
13 | "october" => "أكتوبر",
14 | "november" => "نوفمبر",
15 | "december" => "ديسمبر",
16 | );
17 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/DiffFormatters/FaDiffFotmatter.php:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 | ./tests/
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/DiffFormatters/ArDiffFormatter.php:
--------------------------------------------------------------------------------
1 | "sekundou|[2,Inf]sekundami",
5 | "minute" => "minútou|[2,Inf]minútami",
6 | "hour" => "hodinou|[2,Inf]hodinami",
7 | "day" => "dňom|[2,Inf]dňami",
8 | "week" => "týždňom|[2,Inf]týždňami",
9 | "month" => "mesiacom|[2,Inf]mesiacmi",
10 | "year" => "rokom|[2,Inf]rokmi",
11 |
12 | "_second" => "sekundu|sekundy|sekúnd",
13 | "_minute" => "minútu|minúty|minút",
14 | "_hour" => "hodinu|hodiny|hodín",
15 | "_day" => "deň|dni|dní",
16 | "_week" => "týždeň|týždne|týždňov",
17 | "_month" => "mesiac|mesiace|mesiacov",
18 | "_year" => "rok|roky|rokov",
19 | );
20 |
--------------------------------------------------------------------------------
/src/lang/ar/units.php:
--------------------------------------------------------------------------------
1 | https://github.com/chadidi
3 | return array(
4 | "second" => "[0,1] ثَانِيَة|{2} ثَانِيَتَيْن|[3,10]:count ثَوَان|[11,Inf]:count ثَانِيَة",
5 | "minute" => "[0,1] دَقِيقَة|{2} دَقِيقَتَيْن|[3,10]:count دَقَائِق|[11,Inf]:count دَقِيقَة",
6 | "hour" => "[0,1] سَاعَة|{2} سَاعَتَيْن|[3,10]:count سَاعَات|[11,Inf]:count سَاعَة",
7 | "day" => "[0,1] يَوْم|{2} يَوْمَيْن|[3,10]:count أَيَّام|[11,Inf] يَوْم",
8 | "week" => "[0,1] أُسْبُوع|{2} أُسْبُوعَيْن|[3,10]:count أَسَابِيع|[11,Inf]:count أُسْبُوع",
9 | "month" => "[0,1] شَهْرَ|{2} شَهْرَيْن|[3,10]:count أَشْهُر|[11,Inf]:count شَهْرَ",
10 | "year" => "[0,1] سَنَة|{2} سَنَتَيْن|[3,10]:count سَنَوَات|[11,Inf]:count سَنَة",
11 | );
12 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/DiffFormatters/RuDiffFormatter.php:
--------------------------------------------------------------------------------
1 | =5.3.0",
14 | "illuminate/support": ">=5.5.0",
15 | "nesbot/carbon": "^1.24"
16 | },
17 | "autoload": {
18 | "psr-0": {
19 | "Laravelrus\\LocalizedCarbon\\": "src/"
20 | }
21 | },
22 | "extra": {
23 | "laravel": {
24 | "providers": [
25 | "Laravelrus\\LocalizedCarbon\\LocalizedCarbonServiceProvider"
26 | ],
27 | "aliases": {
28 | "LocalizedCarbon": "Laravelrus\\LocalizedCarbon\\LocalizedCarbon",
29 | "DiffFormatter": "Laravelrus\\LocalizedCarbon\\DiffFactoryFacade"
30 | }
31 | }
32 | },
33 | "minimum-stability": "stable"
34 | }
35 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/DiffFormatters/ItDiffFormatter.php:
--------------------------------------------------------------------------------
1 | app->singleton('difffactory', function() {
22 | return new DiffFormatterFactory();
23 | });
24 | }
25 |
26 | /**
27 | * Bootstrap the application events.
28 | *
29 | * @return void
30 | */
31 | public function boot()
32 | {
33 | $this->loadTranslationsFrom(__DIR__.'/../../lang', 'localized-carbon');
34 |
35 | $this->publishes([
36 | __DIR__.'/../../lang' => base_path('resources/lang'),
37 | ]);
38 | }
39 |
40 | /**
41 | * Get the services provided by the provider.
42 | *
43 | * @return array
44 | */
45 | public function provides()
46 | {
47 | return array('difffactory');
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/DiffFormatters/SkDiffFormatter.php:
--------------------------------------------------------------------------------
1 | 1 ? $delta . ' ' : '') . $unitStr;
18 | }
19 | } else {
20 | if ($unit == 'second' && $delta < 10) {
21 | $txt = 'pred chvíľou';
22 | } else if ($unit == 'day' && $delta == 1) {
23 | $txt = 'včera';
24 | } else {
25 | $txt = 'pred ' . ($delta > 1 ? $delta . ' ' : '') . $unitStr;
26 | }
27 | }
28 | } else {
29 | $txt = ($delta > 1 ? $delta . ' ' : '') . $unitStr;
30 | $txt .= ($isFuture) ? ' potom' : ' predtým';
31 | }
32 | return $txt;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/DiffFormatters/UkDiffFormatter.php:
--------------------------------------------------------------------------------
1 | startOfDay();
30 | }
31 |
32 | // Finally, we will just assume this date is in the format used by default on
33 | // the database connection and use that format to create the Carbon object
34 | // that is returned back out to the developers after we convert it here.
35 | elseif ( ! $value instanceof \DateTime)
36 | {
37 | $format = $this->getDateFormat();
38 |
39 | return LocalizedCarbon::createFromFormat($format, $value);
40 | }
41 |
42 | return LocalizedCarbon::instance($value);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/DiffFormatters/DeDiffFormatter.php:
--------------------------------------------------------------------------------
1 | translateNumber($delta) . ' ' . $unit;
8 |
9 | if ($isNow) {
10 | $txt .= ($isFuture) ? ' এখন থেকে' : ' আগে';
11 | return $txt;
12 | }
13 |
14 | $txt .= ($isFuture) ? ' ' : ' আগে';
15 | return $txt;
16 | }
17 |
18 | public static function translateNumber($number) {
19 | if(is_numeric($number)) {
20 | $arrNumber = str_split($number);
21 | }
22 | else {
23 | return $number;
24 | }
25 | $transNumber = [];
26 | foreach($arrNumber as $number) {
27 | switch($number) {
28 | case '.':
29 | array_push($transNumber, '. ');
30 | break;
31 | case 0:
32 | array_push($transNumber, '০');
33 | break;
34 | case 1:
35 | array_push($transNumber, '১');
36 | break;
37 | case 2:
38 | array_push($transNumber, '২');
39 | break;
40 | case 3:
41 | array_push($transNumber, '৩');
42 | break;
43 | case 4:
44 | array_push($transNumber, '৪');
45 | break;
46 | case 5:
47 | array_push($transNumber, '৫');
48 | break;
49 | case 6:
50 | array_push($transNumber, '৬');
51 | break;
52 | case 7:
53 | array_push($transNumber, '৭');
54 | break;
55 | case 8:
56 | array_push($transNumber, '৮');
57 | break;
58 | case 9:
59 | array_push($transNumber, '৯');
60 | break;
61 | default:
62 | $number;
63 | break;
64 | }
65 | }
66 | return implode('', $transNumber);
67 | }
68 | }
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/Traits/LocalizedEloquentTrait.php:
--------------------------------------------------------------------------------
1 | startOfDay();
42 | }
43 |
44 | // Finally, we will just assume this date is in the format used by default on
45 | // the database connection and use that format to create the Carbon object
46 | // that is returned back out to the developers after we convert it here.
47 | return LocalizedCarbon::createFromFormat($this->getDateFormat(), $value);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/DiffFormatterFactory.php:
--------------------------------------------------------------------------------
1 | formatters[$language] = $formatter;
12 | }
13 |
14 | public function alias($alias, $language) {
15 | $language = strtolower($language);
16 | $this->aliases[$alias] = $language;
17 | }
18 |
19 | public function get($language) {
20 | $language = strtolower($language);
21 |
22 | if (isset($this->aliases[$language])) {
23 | $language = $this->aliases[$language];
24 | }
25 |
26 | if (isset($this->formatters[$language])) {
27 | $formatter = $this->formatters[$language];
28 |
29 | if (is_string($formatter)) {
30 | $formatter = \App::make($formatter);
31 | }
32 | } else {
33 | $formatterClass = $this->getFormatterClassName($language);
34 | try {
35 | $formatter = \App::make($formatterClass);
36 | } catch (\Exception $e) {
37 | // In case desired formatter could not be loaded
38 | // load a formatter for application's fallback locale
39 | $language = $this->getFallbackLanguage();
40 | $formatterClass = $this->getFormatterClassName($language);
41 | $formatter = \App::make($formatterClass);
42 | }
43 | }
44 |
45 | if (!$formatter instanceof \Closure && !$formatter instanceof DiffFormatterInterface) {
46 | throw new \Exception('Formatter for language ' . $language . ' should implement DiffFormatterInterface or must be a Closure.');
47 | }
48 |
49 | // Remember instance for further use
50 | $this->extend($language, $formatter);
51 |
52 | return $formatter;
53 | }
54 |
55 | protected function getFormatterClassName($language) {
56 | $name = ucfirst(strtolower($language));
57 | $name = 'Laravelrus\\LocalizedCarbon\\DiffFormatters\\' . $name . 'DiffFormatter';
58 |
59 | return $name;
60 | }
61 |
62 | protected function getFallbackLanguage() {
63 | return \Config::get('app.fallback_locale');
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/tests/RoLocalizedCarbonTest.php:
--------------------------------------------------------------------------------
1 | subSecond(1);
16 | $this->assertEquals('acum o secundă', LocalizedCarbon::instance($oneSecondAgo)->diffForHumans());
17 |
18 | $inOneSecond = Carbon::now()->addSecond(1);
19 | $this->assertEquals('peste o secundă', LocalizedCarbon::instance($inOneSecond)->diffForHumans());
20 |
21 | $fiveSeconsAgo = Carbon::now()->subSecond(5);
22 | $this->assertEquals('acum 5 secunde', LocalizedCarbon::instance($fiveSeconsAgo)->diffForHumans());
23 |
24 | $inFiveSeconds = Carbon::now()->addSecond(5);
25 | $this->assertEquals('peste 5 secunde', LocalizedCarbon::instance($inFiveSeconds)->diffForHumans());
26 |
27 | $moreSeconsAgo = Carbon::now()->subSecond(59);
28 | $this->assertEquals('acum 59 secunde', LocalizedCarbon::instance($moreSeconsAgo)->diffForHumans());
29 |
30 | $inMoreSeconds = Carbon::now()->addSecond(59);
31 | $this->assertEquals('peste 59 secunde', LocalizedCarbon::instance($inMoreSeconds)->diffForHumans());
32 |
33 | $oneMinuteAgo = Carbon::now()->subMinute(1);
34 | $this->assertEquals('acum un minut', LocalizedCarbon::instance($oneMinuteAgo)->diffForHumans());
35 |
36 | $inOneMinute = Carbon::now()->addMinute(1);
37 | $this->assertEquals('peste un minut', LocalizedCarbon::instance($inOneMinute)->diffForHumans());
38 |
39 | $fiveMinutesAgo = Carbon::now()->subMinute(5);
40 | $this->assertEquals('acum 5 minute', LocalizedCarbon::instance($fiveMinutesAgo)->diffForHumans());
41 |
42 | $twentyfourMinutesAgo = Carbon::now()->subMinute(24);
43 | $this->assertEquals('acum 24 minute', LocalizedCarbon::instance($twentyfourMinutesAgo)->diffForHumans());
44 |
45 | $inTwentyfourMinutes = Carbon::now()->addMinute(24);
46 | $this->assertEquals('peste 24 minute', LocalizedCarbon::instance($inTwentyfourMinutes)->diffForHumans());
47 |
48 | $oneYearAgo = Carbon::now()->subMonth(13);
49 | $this->assertEquals('acum un an', LocalizedCarbon::instance($oneYearAgo)->diffForHumans());
50 | $twoYearsAgo = Carbon::now()->subMonth(25);
51 | $this->assertEquals('acum 2 ani', LocalizedCarbon::instance($twoYearsAgo)->diffForHumans());
52 |
53 | $fourWeeksAgo = Carbon::now()->subDays(32);
54 | $this->assertEquals('acum 4 săptămâni', LocalizedCarbon::instance($fourWeeksAgo)->diffForHumans());
55 |
56 | $oneMonthAgo = Carbon::now()->subWeek(7);
57 | $this->assertEquals('acum o lună', LocalizedCarbon::instance($oneMonthAgo)->diffForHumans());
58 | }
59 |
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/src/Laravelrus/LocalizedCarbon/LocalizedCarbon.php:
--------------------------------------------------------------------------------
1 | tz);
27 | }
28 |
29 | $isFuture = $this->gt($other);
30 |
31 | $delta = $other->diffInSeconds($this);
32 |
33 | // 4.35 weeks per year. 365 days in a year, 12 months, 7 days in a week:
34 | // 365/12/7 = 4.345238095238095 4.35 is good enough for big time calculations!
35 | $divs = array(
36 | 'second' => self::SECONDS_PER_MINUTE,
37 | 'minute' => self::MINUTES_PER_HOUR,
38 | 'hour' => self::HOURS_PER_DAY,
39 | 'day' => self::DAYS_PER_WEEK,
40 | 'week' => 4.35,
41 | 'month' => self::MONTHS_PER_YEAR
42 | );
43 |
44 | $unit = 'year';
45 |
46 | foreach ($divs as $divUnit => $divValue) {
47 | if ($delta < $divValue) {
48 | $unit = $divUnit;
49 | break;
50 | }
51 |
52 | $delta = floor($delta / $divValue);
53 | }
54 |
55 | if ($delta == 0) {
56 | $delta = 1;
57 | }
58 |
59 | // Format and return
60 | $result = null;
61 | if ($formatter instanceof DiffFormatterInterface) {
62 | $result = $formatter->format($isNow, $isFuture, $delta, $unit);
63 | } elseif ($formatter instanceof \Closure) {
64 | $result = $formatter($isNow, $isFuture, $delta, $unit);
65 | }
66 |
67 | return $result;
68 | }
69 |
70 | public function formatLocalized($format = self::COOKIE) {
71 | if (strpos($format, '%f') !== false) {
72 | $langKey = strtolower(parent::format("F"));
73 | $replace = \Lang::get("localized-carbon::months." . $langKey);
74 | $result = str_replace('%f', $replace, $format);
75 | } else {
76 | $result = $format;
77 | }
78 |
79 | $result = parent::formatLocalized($result);
80 |
81 | return $result;
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/docs/README-ru.md:
--------------------------------------------------------------------------------
1 | # Localized Carbon
2 |
3 | + [Вступление](#intro)
4 | + [Использование](#usage)
5 | + [Поддерживаемые языки](#languages)
6 | + [Установка](#installation)
7 | + [Расширение пакета](#extending)
8 | + [Вклад в развитие пакета](#contributing)
9 |
10 |
11 | ## Вступление
12 |
13 | `Localized Carbon` - это расширение популярного пакета `Carbon`. Оно предназначено для использования исключительно во фреймворке Laravel. Под локализацией подразумевается локализация функции `diffForHumans` оригинального Carbon'а, предназначенная для вывода удобочитамой разницы в датах.
14 |
15 |
16 | ## Использование
17 |
18 | Этот пакет предоставляет класс `LocalizedCarbon`, который наследует оригинальный `Carbon`, поэтому его использование ничем не отличается от оригинального Carbon'а.
19 |
20 | Но представте, что у вас есть модель `Comment` (комментарий), в которой имеются временные поля по умолчанию (`created_at` и `updated_at`). И вам требуется вывести информацию о том, сколько времени прошло с момента создания комментария (поле `created_at`), в удобочитаемом формате. Это можно сделать несколькими способами, например так (в Blade-шаблоне):
21 |
22 | ```
23 | {{ LocalizedCarbon::instance($comment->created_at)->diffForHumans() }}
24 | ```
25 |
26 | В этом случае класс выведет что-то вроде "5 минут назад" для русского языка.
27 |
28 | Но есть и другой способ. Вы можете подменить имеющийся в Laravel класс Eloquent\Model при помощи поставляемого с пакетом классаа модели, чтобы временные поля, наподобие `created_at` и т.д., конвертировались в `LocalizedCarbon`, вместо `Carbon`. Таким образом, использование `LocalizedCarbon` ничем не будет отличаться от привычного:
29 |
30 | ```
31 | {{ $comment->created_at->diffForHumans() }}
32 | ```
33 |
34 | Как и в исходном Carbon'е, метод `diffForHumans` имеет первый необязательный аргумент (который является другим экземпляром класса `Carbon`). Он указывает время, относительно которого вычислять разницу. По умолчанию (если этот параметр не задан, или равен `null`) используется текущее время.
35 |
36 | В методе классе `LocalizedCarbon` имеется и второе необязательный аргумент, в котором вы можете указать желаемый язык, или напрямую класс-форматтер, используемый для формирования строки-разницы между временами (см. [расширение](#extending)). По умолчанию будет использоваться текущий язык приложения. Также, в качестве второго аргумента можно передавать замыкание, которое будет форматировать строку. Параметры этого замыкания аналогичные метода `format` интерфейса `DiffFormatterInterface` (см. раздел [Расширение Localzied Carbon](#extending)).
37 |
38 |
39 | ## Поддерживаемые языки
40 |
41 | Текущая версия Localized Carbon поставляетс со следующими локализациями:
42 |
43 | + Английский (en)
44 | + Русский (ru)
45 | + Украинский (uk)
46 | + Голландский (nl)
47 | + Испанский (es)
48 | + Португальский (pt)
49 | + Французский (fr)
50 | + Болгарский (bg)
51 | + Словацкий (sk)
52 | + Турецкий (tr)
53 | + Арабский (ar)
54 | + Японский (ja)
55 |
56 | Но пакет расширяем, то есть вы можете написать и использовать свою собственную локализацию, не трогая само содержимое пакета. См. [расширение пакета](#extending).
57 |
58 |
59 | ## Установка
60 |
61 | Добавьте следующее определение в секцию `require` файла `composer.json` вашего проекта: `"laravelrus/localized-carbon": "1.*"`, после чего выполните команду `composer update`.
62 |
63 | Далее нужно добавить сервис провайдер (Service Provider), поставляемый с пакетом, в раздел `providers` файла `app/config/app.php`:
64 |
65 | ```
66 | 'Laravelrus\LocalizedCarbon\LocalizedCarbonServiceProvider',
67 | ```
68 |
69 | После этого рекомендуется добавить следующие алиасы (секция `aliases` того же конфига):
70 |
71 | ```
72 | 'LocalizedCarbon' => 'Laravelrus\LocalizedCarbon\LocalizedCarbon',
73 | 'DiffFormatter' => 'Laravelrus\LocalizedCarbon\DiffFactoryFacade',
74 | ```
75 |
76 | Стоит отметить, что класс `DiffFormatter` будет использоваться только для расширения пакета дополнительными локализациями. См. [расширение пакета](#extending).
77 |
78 | Если вы хотите использовать `LocalizedCarbon` привычным способом в ваших моделях, то можете воспользоваться поставляемым трейтом:
79 |
80 | ```
81 | use \Laravelrus\LocalizedCarbon\Traits\LocalizedEloquentTrait;
82 | ```
83 |
84 | В этом случае для всех дат в вашей ELoquent-модели будет использоваться `LocalizedCarbon` вместо исходного `Carbon`.
85 |
86 | Но этот способ годится только если Вы используете PHP версии 5.4 или выше.
87 |
88 | Если же Вы по-прежнему используете PHP версии 5.3.7, вы можете подменить имеющийся в Laravel класс Eloquent поставляемым классом `Laravelrus\LocalizedCarbon\Models\Eloquent`. Для этого вы можете как наследовать свои модели как напрямую от этого класса, так и заменить алиас к Eloquent на него в файле 'app\config\app.php'.
89 |
90 |
91 | ## Расширение пакета
92 |
93 | Если требуемая локализация не поствляется с пакетом, вы можете написать свою собственную и расширить пакет, не трогая его содержимое.
94 |
95 | Существует несеколько способов расширить класс Localized Carbon.
96 |
97 | Во-первых, вы можете написать свой класс `DiffFormatter` для этого, который реализует интерфейс `Laravelrus\LocalizedCarbon\DiffFormatters\DiffFormatterInterface`. Этот интерфейс требует от класса реализовать единственный метод `format`, который имеет следующий вид:
98 |
99 | ```
100 | public function format($isNow, $isFuture, $delta, $unit);
101 | ```
102 |
103 | + `$isNow` - это флаг, который равен `true`, если разница во времени вычисляется относительно текущего времени.
104 | + `$isFuture` - это флаг, который равен `true`, если время находится в будущем относительно проверяемого времени.
105 | + `$delta` - это число, содержащее разницу во времени в единицах, указанных в `$unit`.
106 | + `$unit` - это единица измерения параметра `$delta`. Может принимать одно из следующих значений: `second` (секунды), `minute` (минуты), `hour` (часы), `day` (дни), `week` (недели), `month` (месяцы) или `year` (года).
107 |
108 | Таким образом, ваш метод `format` должен возвращать строку, сформированную на основе этих аргументов. Для примера смотрите существующие форматтеры в директории `vendor\laravelrus\localized-carbon\src\Laravelrus\LocalizedCarbon\DiffFormatters`. Вы также можете например ссылаться на языковые файлы, посредством `Lang::choice`, как это сделано, например, в русской локализации.
109 |
110 | Как только ваш класс будет готов, нужно зарегистрировать его в пакете. Для этого нужно вызвать `DiffFormatter::extend` из любого файла, который подключается фреймворком. Например, это можно сделать где-нибудь в файле `app/start/global.php`.
111 |
112 | Метод `extend` принимает два аргумента. Первый - это язык, для которого написан этот форматтер (чаще всего это будет `App::getLocale()`, если вы пишете локализацию для текущего языка приложения). Следующий аргумент - это экземпляр вашего класса, ЛИБО просто полное имя вашего класса, принимая во внимание то, что он должен быть доступен для автозагрузки. Взгляните на примеры:
113 |
114 | ```
115 | $formatter = new Acme\DiffFormatters\FrDiffFormatter;
116 | DiffFormatter::extend('fr', $formatter);
117 |
118 | // ИЛИ
119 |
120 | DiffFormatter::extend('fr', 'Acme\\DiffFormatters\\FrDiffFormatter');
121 | ```
122 |
123 | В последнем случае форматтер будет автоматически загружен, как только в нем будет необходимость (посредством IoC). Имейте также ввиду, что форматтер будет загружен только однажды за весь цикл приложениия из соображений оптимизации.
124 |
125 | Второй способ - это передать замыкание в качестве второго аргумента `extend`. Параметры замыкания должны быть такими же, как и у метода `format` интерфейса `DiffFormatterInterface`. Например:
126 |
127 | ```
128 | DiffFormatter::extend('fr', function($isNow, $isFuture, $delta, $unit) {
129 | return 'Сформированная строка!';
130 | });
131 | ```
132 |
133 | Также возможно добавлять "алиасы" к существующим языкам. Например, Localized Carbon поставляется с Украинской локализацией, которая распознается по языковому ключу `uk`. Но что, если в вашем приложении для украинского языка используется ключ `ua`, или `ukr`? В это случае вы можете зарегистрировать алиас для языка `uk` таким образом:
134 |
135 | ```
136 | DiffFormatter::alias('ukr', 'uk');
137 | ```
138 |
139 |
140 | ## Вклад в развитие пакета
141 |
142 | Если вы написали локализацию для языка, которые не поставляется с текущей версией пакета, будет здорово, если вы сделаете pull request с ним в текущую ветку пакета (1.3), убедившись только, что вы "настроили" его для использования внутри пакета.
143 |
144 | Форматтер должен находиться в директории `src/Laravelrus/LocalizedCarbon/DiffFormatters` и следовать следующим соглашениям: имя класса должно начинаться с языка, для которого он написан, в нижнем регистре, но первый символ - в верхнем. Осальная часть имени должна заканчиваться на `DiffFormatter`. Имя файла должно соответствовать имени класса.
145 |
146 | Например, форматтер для языка `fr` (французский) будет находится в файле `src/Laravelrus/LocalizedCarbon/DiffFormatters/FrDiffFormatter.php`, а имя класса будет соответственно `FrDiffFormatter`.
147 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Maintainers needed
2 | Sorry, I have not much time supporting this repo. Also I rarely work with Laravel now, so new maintainers are needed.
3 |
4 | # Localized Carbon
5 |
6 | for **L4** use **1.4** branch
7 | for **L5.4** use **2.2**
8 | for **>=L5.5** use **2.3**
9 |
10 | See also [localized documentation](docs)
11 |
12 | + [Introduction](#intro)
13 | + [Installation](#installation)
14 | + [Usage](#usage)
15 | + [Supported languages](#languages)
16 | + [Extending](#extending)
17 | + [Contributing](#contributing)
18 |
19 |
20 | ## Introduction
21 |
22 | Localized Carbon is an extension of a popular Carbon package, designed specially for Laravel framework. By localization I mean its `diffForHumans` function, which returns a human-readable string of time interval. This package also supports genitive months by introducing the "%f" key in `formatLocalized` method.
23 |
24 |
25 |
26 | ## Installation
27 |
28 | Add the following requirement to your `composer.json`: `"laravelrus/localized-carbon": "1.*"` and then run `composer update`.
29 |
30 | Next, add package's Service Provider to `app/config/app.php` in `providers` section:
31 |
32 | ```
33 | 'Laravelrus\LocalizedCarbon\LocalizedCarbonServiceProvider',
34 | ```
35 |
36 | After that you may want to add some Aliases (`aliases` section of the same config):
37 |
38 | ```
39 | 'LocalizedCarbon' => Laravelrus\LocalizedCarbon\LocalizedCarbon::class,
40 | 'DiffFormatter' => Laravelrus\LocalizedCarbon\DiffFactoryFacade::class,
41 | ```
42 |
43 | Note that `DiffFormatter` will only be used for extending default localizations. See [extending Localized Carbon](#extending).
44 |
45 | If you want to use the power of `LocalizedCarbon` the same way as you did with original `Carbon` in your models, you may want to use supplied trait for this in your models:
46 |
47 | ```
48 | use \Laravelrus\LocalizedCarbon\Traits\LocalizedEloquentTrait;
49 | ```
50 |
51 | In this case `LocalizedCarbon` will be used for all dates in your Eloquent model instead of original `Carbon`.
52 |
53 | Note that this method is actual for PHP versions 5.4 and higher.
54 |
55 | If you are still using PHP 5.3.7 you can substitute Laravel's Eloquent class by `Laravelrus\LocalizedCarbon\Models\Eloquent` supplied with this package. To do this you can either inherit this class directly, or make an alias to it instead of originial Eloquent in `app\config\app.php`.
56 |
57 |
58 |
59 | ## Usage
60 |
61 | This package provides a `LocalizedCarbon` class which inherits original Carbon, so its usage is absolutely the same as original Carbon's.
62 |
63 | But imagine you have a `Comment` model for example, which has default timestamp fields (`created_at` and `updated_at`). You want to display, how much time has gone since its `created_at` in a human-readable format. One way to achieve may be such (in your Blade template):
64 |
65 | ```
66 | {{ LocalizedCarbon::instance($comment->created_at)->diffForHumans() }}
67 | ```
68 |
69 | In this case the class will output something like "5 minutes ago". Note that for just an English version of the string original Carbon would be enough. This `LocalizedCarbon` is used to display the message in the current application language. For example, for Russian language it will display "5 минут назад".
70 |
71 | But also, you may substitute Laravel's Eloquent model, so the timestamps would be converted to `LocalizedCarbon` instead of original `Carbon`. So the usage could be as if your were using original Carbon:
72 |
73 | ```
74 | {{ $comment->created_at->diffForHumans() }}
75 | ```
76 |
77 | As in original Carbon, `diffForHumans` functions has an optional first argument (which is another Carbon instance). It specified the time to which difference should be calculated. By default (a missing or `null` value) current time is used.
78 |
79 | Also `LocalizedCarbon` adds an optional second argument, in which you may specify the desired language, or directly a `formatter` class which is used to format the difference-string (see [extending Localized Carbon](#extending)). By default current application language is used. Also you may specify a Closure in the second parameter which will do formatting. For its signature refer to [extending Localized Carbon](#extending) section.
80 |
81 |
82 | ## Supported languages
83 |
84 | Current version of Localized Carbon ships with these localizations:
85 |
86 | + English (en) (full)
87 | + Russian (ru) (full)
88 | + Ukrainian (uk) (full)
89 | + Dutch (nl) (no genitive)
90 | + Spanish (es) (full)
91 | + Portuguese (pt) (no genitive)
92 | + French (fr) (no genitive)
93 | + Bulgarian (bg) (no genitive)
94 | + Slovakian (sk) (no genitive)
95 | + Turkish (tr) (no genitive)
96 | + Arabic (ar) (no genitive)
97 | + Japanese (ja) (full)
98 | + Bengali (bn) (full)
99 | + Persian (fa) (full)
100 |
101 |
102 | But it is extendable, so you may write and use your own localization without altering the contents of the package. See [extending Localized Carbon](#extending).
103 |
104 |
105 |
106 |
107 | ## Extending Localized Carbon
108 |
109 | If needed localization is not shipped with this package, you may write your own and extend Localized Carbon with it, not even touching the vendor folder itself.
110 |
111 | There are a couple of ways to extend Localized Carbon.
112 |
113 | First, you may write your own `DiffFormatter` class for this, implementing `Laravelrus\LocalizedCarbon\DiffFormatters\DiffFormatterInterface`. This interface forces the class to have a single `format` method which looks like this:
114 |
115 | ```
116 | public function format($isNow, $isFuture, $delta, $unit);
117 | ```
118 |
119 | `$isNow` is a boolean, which is `true` when the time difference is calculated relevant to current time.
120 | `$isFuture` is boolean, which is `true` if the DateTime object is in the future relevant to comparable time.
121 | `$delta` is an integer, equals to number of units of difference.
122 | `$unit` is a time-"unit". It can be either: `second`, `minute`, `hour`, `day`, `week`, `month` or `year`.
123 |
124 | So, your `format` method should return a string based on this arguments. As an example see an existing DiffFormatters in `vendor\laravelrus\localized-carbon\src\Laravelrus\LocalizedCarbon\DiffFormatters` directory. You can also reference a lang-files, using `Lang::choice` as it is done in Russian localization for example.
125 |
126 | When your class is ready, you must register it within the Localized Carbon. For this you must call `DiffFormatter::extend` method from within any file which is loaded by the framework. For example, you can do it somewhere in `app/start/global.php`.
127 |
128 | The `extend` method expects two parameters: first is the language you want to be supported (most often it would be `App::getLocale()` if you want just to use application's language). Next is the instance of your formatter, OR just a name of the class if it can be autoloaded. Consider these examples:
129 |
130 | ```
131 | $formatter = new Acme\DiffFormatters\FrDiffFormatter;
132 | DiffFormatter::extend('fr', $formatter);
133 |
134 | // OR
135 |
136 | DiffFormatter::extend('fr', 'Acme\\DiffFormatters\\FrDiffFormatter');
137 | ```
138 |
139 | In the latter case the formatter will be autoloaded when it is needed using IoC. Also note that formatter is loaded only once during application life-cycle due to optimization considerations.
140 |
141 | The second way to extend is to pass a Closure as the second parameter. It must have the same signature as the `format` method of `DiffFormatterInterface` interface. For example:
142 |
143 | ```
144 | DiffFormatter::extend('fr', function($isNow, $isFuture, $delta, $unit) {
145 | return 'Some formatter diff string!';
146 | });
147 | ```
148 |
149 | Also, there is a possibility to add an alias for an existing language. For example, Localized Carbon is shipped with Ukranian localization, which is recognized by `uk` language key. But what if your application uses `ua` or `ukr` language, which still means it is Ukranian? In this case you may add an alias for `uk` language in this way:
150 |
151 | ```
152 | DiffFormatter::alias('ukr', 'uk');
153 | ```
154 |
155 |
156 | ## Contributing
157 |
158 | If you've written a formatter for the language which is not supported by current version of Localized Carbon out of the box - feel free to make a pull request with it in the current version branch (1.3), but be sure to adjust your formatter for been used by the package.
159 |
160 | The formatter should lie in `src/Laravelrus/LocalizedCarbon/DiffFormatters` directory, following a simple naming convention: the class name should start with the desired language in lower-case, but the first letter in upper-case. The rest part of the name should be "DiffFormatter". The file name should correspond to the class name.
161 |
162 | For example, the formatter for `fr` language would lie in `src/Laravelrus/LocalizedCarbon/DiffFormatters/FrDiffFormatter.php`, and the class name would be `FrDiffFormatter`.
163 |
164 | Also I need the help of the community to complete the list of genitives for all supported languages. If you know a language and it uses genitives in dates, feel free to contribute. See an example of Russian or Ukranian `lang\XX\months.php` files.
165 |
--------------------------------------------------------------------------------