Skip to content

Commit e351979

Browse files
committed
přidání rumunské lokalizace
1 parent 976da85 commit e351979

File tree

7 files changed

+116
-7
lines changed

7 files changed

+116
-7
lines changed

.github/workflows/php-package-ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
runs-on: ubuntu-latest
1010
strategy:
1111
matrix:
12-
php: [ 7.4, 8.0, 8.1 ]
12+
php: [ 8.0, 8.1 ]
1313
steps:
1414
- uses: actions/checkout@v2
1515
- uses: shivammathur/setup-php@v2

composer.json

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
}
1010
],
1111
"require": {
12-
"php": "7.4.* || 8.0.* || 8.1.*",
12+
"php": "8.0.* || 8.1.*",
1313
"ext-mbstring": "*",
14+
"ext-calendar": "*",
1415
"nette/utils": "~2.5.4|~3.0.0|~3.1.0|~3.2.0",
15-
"nette/di": "~2.4.14|~3.0.0",
16+
"nette/di": "~3.0.0",
1617
"nette/neon": "~2.4.3|~3.0"
1718
},
1819
"require-dev": {
@@ -29,6 +30,10 @@
2930
"psr-4": {
3031
"PdTests\\Holidays\\": "tests"
3132
}
33+
},
34+
"config": {
35+
"allow-plugins": {
36+
"dealerdirect/phpcodesniffer-composer-installer": true
37+
}
3238
}
33-
3439
}

src/DI/Extension.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,34 @@ public function loadConfiguration()
1111

1212
$builder = $this->getContainerBuilder();
1313

14+
/** @var \Nette\DI\Definitions\ServiceDefinition $holidayFacade */
1415
$holidayFacade = $builder
1516
->addDefinition($this->prefix('holidayFacade'))
1617
->setFactory(\Pd\Holidays\HolidayFacade::class)
1718
;
1819

1920
$this->addLocalization($holidayFacade, \Pd\Holidays\Localizations\Czech::class, \Pd\Holidays\Localizations\ICzech::COUNTRY_CODE_CZECH);
2021
$this->addLocalization($holidayFacade, \Pd\Holidays\Localizations\Slovak::class, \Pd\Holidays\Localizations\ISlovak::COUNTRY_CODE_SLOVAK);
22+
$this->addLocalization($holidayFacade, \Pd\Holidays\Localizations\Romania::class, \Pd\Holidays\Localizations\IRomania::COUNTRY_CODE_ROMANIA);
2123
}
2224

2325

24-
private function addLocalization(\Nette\DI\ServiceDefinition $holidayFacade, string $localizationClass, string $countryCode): void
26+
private function addLocalization(\Nette\DI\Definitions\ServiceDefinition $holidayFacade, string $localizationClass, string $countryCode): void
2527
{
2628
$builder = $this->getContainerBuilder();
2729
$countryCodePrefix = \Nette\Utils\Strings::lower($countryCode);
2830

2931
$translations = \Nette\Neon\Neon::decode((string) \file_get_contents(__DIR__ . '/../Localizations/' . \Nette\Utils\Strings::lower(\Nette\Utils\Strings::substring($localizationClass, \strrpos($localizationClass, '\\') + 1)) . '.neon'));
3032

31-
$czechHolidayFactory = $builder
33+
$holidayFactory = $builder
3234
->addDefinition($this->prefix($countryCodePrefix . 'HolidayFactory'))
3335
->setFactory(\Pd\Holidays\HolidayFactory::class, [$translations])
3436
->setAutowired(FALSE)
3537
;
3638

3739
$localization = $builder
3840
->addDefinition($this->prefix($countryCodePrefix))
39-
->setFactory($localizationClass, [$czechHolidayFactory])
41+
->setFactory($localizationClass, [$holidayFactory])
4042
->setAutowired(FALSE)
4143
;
4244

src/Localizations/IRomania.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Pd\Holidays\Localizations;
4+
5+
interface IRomania
6+
{
7+
8+
public const COUNTRY_CODE_ROMANIA = 'RO';
9+
10+
}

src/Localizations/Romania.php

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Pd\Holidays\Localizations;
4+
5+
class Romania implements \Pd\Holidays\ILocalization
6+
{
7+
8+
/** @var array<int, \Pd\Holidays\Year> */
9+
private array $years;
10+
11+
private \Pd\Holidays\HolidayFactory $holidayFactory;
12+
13+
14+
public function __construct(
15+
\Pd\Holidays\HolidayFactory $holidayFactory
16+
) {
17+
$this->holidayFactory = $holidayFactory;
18+
}
19+
20+
21+
public function getHolidays(int $year): \Pd\Holidays\IYear
22+
{
23+
if (isset($this->years[$year])) {
24+
return $this->years[$year];
25+
}
26+
27+
$holidays[] = $this->holidayFactory->create(1, 1, '_label_holiday_01_01');
28+
$holidays[] = $this->holidayFactory->create(1, 2, '_label_holiday_01_02');
29+
$holidays[] = $this->holidayFactory->create(1, 24, '_label_holiday_01_24');
30+
$holidays[] = $this->holidayFactory->create(5, 1, '_label_holiday_05_01');
31+
$holidays[] = $this->holidayFactory->create(6, 1, '_label_holiday_06_01');
32+
$holidays[] = $this->holidayFactory->create(8, 15, '_label_holiday_08_15');
33+
$holidays[] = $this->holidayFactory->create(11, 30, '_label_holiday_11_30');
34+
$holidays[] = $this->holidayFactory->create(12, 1, '_label_holiday_12_01');
35+
$holidays[] = $this->holidayFactory->create(12, 25, '_label_holiday_12_25');
36+
$holidays[] = $this->holidayFactory->create(12, 26, '_label_holiday_12_26');
37+
38+
// velikonoční neděle
39+
$easterDateInJulianCalendar = \DateTimeImmutable::createFromFormat('U', (string) \easter_date($year, \CAL_EASTER_ALWAYS_JULIAN));
40+
if ($easterDateInJulianCalendar === FALSE) {
41+
throw new \Exception('Invalid easter date');
42+
}
43+
$julianDays = \cal_to_jd(
44+
\CAL_JULIAN,
45+
(int) $easterDateInJulianCalendar->format('m'),
46+
(int) $easterDateInJulianCalendar->format('d'),
47+
(int) $easterDateInJulianCalendar->format('Y')
48+
);
49+
$easterDateInGregorianCalendar = \DateTimeImmutable::createFromFormat('U', (string) \jdtounix($julianDays));
50+
if ($easterDateInGregorianCalendar === FALSE) {
51+
throw new \Exception('Invalid easter date');
52+
}
53+
54+
// velikonoce
55+
$holidays[] = $this->createHoliday($easterDateInGregorianCalendar->modify('-2 day'), '_label_holiday_eastern_friday');
56+
$holidays[] = $this->createHoliday($easterDateInGregorianCalendar, '_label_holiday_eastern_sunday');
57+
$holidays[] = $this->createHoliday($easterDateInGregorianCalendar->modify('+1 day'), '_label_holiday_eastern_monday');
58+
59+
// letnice
60+
$holidays[] = $this->createHoliday($easterDateInGregorianCalendar->modify('+49 day'), '_label_holiday_pentecost');
61+
$holidays[] = $this->createHoliday($easterDateInGregorianCalendar->modify('+50 day'), '_label_holiday_pentecost2');
62+
63+
$this->years[$year] = new \Pd\Holidays\Year($holidays);
64+
65+
return $this->years[$year];
66+
}
67+
68+
69+
private function createHoliday(\DateTimeInterface $dateTime, string $name): \Pd\Holidays\Holiday
70+
{
71+
return $this->holidayFactory->create((int) $dateTime->format('n'), (int) $dateTime->format('j'), $name);
72+
}
73+
74+
}

src/Localizations/romania.neon

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
_label_holiday_01_01: Anul Nou
2+
_label_holiday_01_02: Anul Nou
3+
_label_holiday_01_24: Ziua Unirii Principatelor Române
4+
_label_holiday_05_01: Ziua Internațională a Muncii
5+
_label_holiday_06_01: Ziua Copilului
6+
_label_holiday_08_15: Adormirea Maicii Domnului
7+
_label_holiday_11_30: Sfântul Andrei
8+
_label_holiday_12_01: Ziua Națională a României
9+
_label_holiday_12_25: Crăciunul
10+
_label_holiday_12_26: Crăciunul
11+
_label_holiday_eastern_friday: Vinerea Mare
12+
_label_holiday_eastern_sunday: Duminica Paștelui
13+
_label_holiday_eastern_monday: Lunea Luminată
14+
_label_holiday_pentecost: Rusaliile
15+
_label_holiday_pentecost2: Rusaliile
16+

tests/Localizations/LocalizationTest.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ class LocalizationTest extends Tester\TestCase
2828
[new Pd\Holidays\Localizations\Slovak($holidayFactory), 2016, 15],
2929
[new Pd\Holidays\Localizations\Slovak($holidayFactory), 2017, 15],
3030
[new Pd\Holidays\Localizations\Slovak($holidayFactory), 2018, 15],
31+
[new Pd\Holidays\Localizations\Slovak($holidayFactory), 2023, 15],
32+
[new Pd\Holidays\Localizations\Slovak($holidayFactory), 2025, 15],
3133
];
3234

3335
return $data;

0 commit comments

Comments
 (0)