Bump ImapEngine from 1.25.1 to 1.25.2

This commit is contained in:
johnnyq
2026-07-18 11:17:53 -04:00
parent 9cc7e5ff3c
commit 1a3d7a1e0d
32 changed files with 2375 additions and 269 deletions

View File

@@ -134,9 +134,9 @@ Support this project by becoming a sponsor. Your logo will show up here with a l
<td><a title="Non GamStop Bookies UK" href="https://netto.co.uk/betting-sites-not-on-gamstop/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Non GamStop Bookies UK" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/51bfaa05-02b3-4cd9-b1a4-9d0d8f34cbae/%D0%97%D0%BD%D1%96%D0%BC%D0%BE%D0%BA%20%D0%B5%D0%BA%D1%80%D0%B0%D0%BD%D0%B0%202025-07-04%20%D0%BE%2015.21.16%20(1)%20(1)%20(1).jpg" width="126" height="96"></a></td>
<td><a title="Trusted last mile route planning and route optimization" href="https://route4me.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Route4Me Route Planner" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/237386c3-48a2-47c6-97ac-5f888cdb4cda/Route4MeIconLogo.png" width="96" height="96"></a></td>
<td><a title="Bei Releaf erhalten Sie schnell und diskret Ihr Cannabis Rezept online. Unsere Ärzte prüfen Ihre Angaben und stellen bei Eignung das Rezept aus. Anschließend können Sie legal und sicher medizinisches Cannabis über unsere Partnerapotheken kaufen." href="https://releaf.com/de?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Releaf Medizinischer Cannabis Shop" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/b686d646-5029-4b4c-8cab-9645ab2679de/9da596d1-f48a-41ec-947d-a64dd8e7529c.png" width="96" height="96"></a></td>
<td><a title="We specialize in the online gambling industry, helping players access reliable and verified information about the best online casinos and pokies in Australia. Our team tests casinos and games, collects user reviews from Trustpilot, and organizes them in o" href="https://au.trustpilot.com/review/bestpayidpokies.net?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="PayID Pokies" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/985a0ae7-54c3-4680-8816-bc8d656f7562/payidpokies.png" width="96" height="96"></a></td>
<td><a title="Best non Gamstop sites in the UK" href="https://www.pieria.co.uk/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Best non Gamstop sites in the UK" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/34e340b8-e1de-4932-8a76-1b3ce2ec7ee8/logo_white%20bg%20(8).png" width="96" height="96"></a></td>
<td><a title="#1 Guide To Online Gambling In Canada" href="https://casinohex.org/canada/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="CasinoHex Canada" src="https://opencollective-production.s3.us-west-1.amazonaws.com/79fdbcc0-a997-11eb-abbc-25e48b63c6dc.jpg" width="127.5" height="96"></a></td>
<td><a title="We specialize in the online gambling industry, helping players access reliable and verified information about the best online casinos and pokies in Australia. Our team tests casinos and games, collects user reviews from Trustpilot, and organizes them in o" href="https://au.trustpilot.com/review/bestpayidpokies.net?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="PayID Pokies" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/985a0ae7-54c3-4680-8816-bc8d656f7562/payidpokies.png" width="64" height="64"></a></td>
</tr>
<tr>
<td><a title="Mi misión es la educación y transparencia en el mundo de los casinos online" href="https://www.educatransparencia.cl/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Transparencia en Casinos Online" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/c034fdcb-1d17-4c83-8105-f3cfa4f874d6/educalogocito.png" width="128" height="64"></a></td>
@@ -157,69 +157,69 @@ Support this project by becoming a sponsor. Your logo will show up here with a l
<td><a title="We test dozens of casinos every month and select the coolest ones for Australian players." href="https://au.trustpilot.com/review/payid-casino.net?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="PayID Pokies Sites" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/ecd8a5f4-fd86-4903-a512-cbfaff35e7ef/payidpokiessites.png" width="69" height="64"></a></td>
<td><a title="We collect all reviews about the best online pokies." href="https://au.trustpilot.com/review/aussiepokies.net?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Online Pokies in Australia" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/44d84116-8762-4167-9433-a9e5da542e29/pokies.png" width="64" height="64"></a></td>
<td><a title="Plinko Game" href="https://www.trustpilot.com/review/plinkoplay.top?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Plinko Game" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/5e953df9-1876-45b6-9ffc-f2009804935b/plinkoo.png" width="64" height="64"></a></td>
<td><a title="Casinomithandyrechnung" href="https://at.trustpilot.com/review/casinomithandyrechnung.net?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casinomithandyrechnung" src="https://images.opencollective.com/casinomithandyrechnung/avatar/256.png" width="64" height="64"></a></td>
<td><a title="lolajack" href="https://nl.trustpilot.com/review/lolajack-casino-nl.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="lolajack" src="https://images.opencollective.com/lolajack/avatar/256.png" width="64" height="64"></a></td>
<td><a title="marketing in germany" href="https://de.trustpilot.com/review/paysafecardcasinos.org?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Paysafecard Casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/1b2f45ea-02bc-4a78-a84a-355f68c8a293/paysafe.png" width="64" height="64"></a></td>
<td><a title="Games" href="https://au.trustpilot.com/review/bestaustraliaonlinepokies.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Australian Online Pokies" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/7ca6ca2e-6542-4736-8952-b9adb7f4c9cf/39aac4bc53ff11f198d9ce36ed903bf5_1.jpg" width="64" height="64"></a></td>
<td><a title="Top 10 Online Casino Australia Eu Com" href="https://au.trustpilot.com/review/top-10-online-casino-australia.eu.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Top 10 Online Casino Australia Eu Com" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/c87ba708-3f1c-4062-82a8-797c713646b2/trustpilot_logo%20(4).png" width="64" height="64"></a></td>
<td><a title="Buitenlandse Online Casino" href="https://nl.trustpilot.com/review/buitenlandsecasino.vip?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Buitenlandse Online Casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/9465308a-8e44-4606-af5d-5a81a3c6567b/ChatGPT%20Image%20Nov%2015%2C%202025%2C%2002_53_25%20PM.png" width="64" height="64"></a></td>
<td><a title="Betwinner is an online bookmaker offering sports betting, casino games, and more." href="https://guidebook.betwinner.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Guidebook.BetWinner" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/82cab29a-7002-4924-83bf-2eecb03d07c4/0x0.png" width="64" height="64"></a></td>
<td><a title="Porównanie kasyn online w Polsce. Darmowe automaty online." href="https://onlinekasyno-polis.pl/" target="_blank"><img alt="Online Kasyno Polis" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/12fe53d4-b2e4-4601-b9ea-7b652c414a38/274px%20274px-2.png" width="64" height="64"></a></td>
<td><a title="Betwinner is an online bookmaker offering sports betting, casino games, and more." href="https://guidebook.betwinner.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Guidebook.BetWinner" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/82cab29a-7002-4924-83bf-2eecb03d07c4/0x0.png" width="64" height="64"></a></td>
<td><a title="Casinomithandyrechnung" href="https://at.trustpilot.com/review/casinomithandyrechnung.net?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casinomithandyrechnung" src="https://images.opencollective.com/casinomithandyrechnung/avatar/256.png" width="64" height="64"></a></td>
</tr>
<tr>
<td><a title="Online Casino Zonder Registratie" href="https://nl.trustpilot.com/review/zonderregistratiecasinos.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Online Casino Zonder Registratie" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/cf382ddc-627b-4bd9-8870-43ee28d2a628/casino-zonder-registratie.png" width="85" height="64"></a></td>
<td><a title="lolajack" href="https://nl.trustpilot.com/review/lolajack-casino-nl.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="lolajack" src="https://images.opencollective.com/lolajack/avatar/256.png" width="64" height="64"></a></td>
<td><a title="TopRating.casino ➢ Гід по онлайн-казино в Україні" href="https://toprating.casino/ua/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Top Rating casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/fec14fc4-85b1-4fdc-971e-e8aabfc60926/toprating%20logo.jpg" width="64" height="64"></a></td>
<td><a title="iDealeCasinos" href="https://idealecasinos.nl/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="iDealeCasinos" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/907841d3-435e-44b4-9684-c33fd8635ece/ideale-casinos-square-white-logo-300.png" width="64" height="64"></a></td>
<td><a title="Uudet Nettikasinot" href="https://fi.parhaatuudetkasinot.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="parhaatuudetkasinot.com" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/09e109d6-8ad2-4ade-ab24-4427028c8e38/260bfa9d-6a5c-494d-9ec0-a624327429ae.png" width="64" height="64"></a></td>
<td><a title="New Casino Bonuses" href="https://newcasinobonuses.gb.net/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="New Casino Bonuses" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/38e356d8-3597-406a-a263-1c348723aa17/new_casino_bonuses_logo.png" width="64" height="64"></a></td>
<td><a title="Best online sports betting and casino company." href="https://global.fun88.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Fun88" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/1688ebca-4984-4b9b-a24d-8fdd1233892f/fun88-logo.png" width="64" height="64"></a></td>
<td><a title="Top 50 Online Casinos UK" href="https://eastvillafc.co.uk?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="East Villa FC" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/2560f1b5-20d6-4cf4-83cd-2457bf111fc3/trophy-fav-blue.png" width="64" height="64"></a></td>
<td><a title="บริษัทรับแทงบอลออนไลน์ที่ดีที่สุดในประเทศไทย" href="https://www.fun88thf.com/th/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Fun88" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/bbf7174c-fc01-4ce6-86b5-f621e350969d/fun88-logo.png" width="64" height="64"></a></td>
<td><a title="Nhà cái cá cược thể thao trực tuyến tốt nhất tại Việt Nam" href="https://www.fun88fp.com/vn/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Fun88" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/ed704e1d-3894-48bb-83e3-6094b2c68a5c/fun88-logo.png" width="64" height="64"></a></td>
<td><a title="Nhà cái cá cược thể thao trực tuyến tốt nhất tại Việt Nam" href="https://www.fun88vnt.com/vn/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Fun88" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/ed704e1d-3894-48bb-83e3-6094b2c68a5c/fun88-logo.png" width="64" height="64"></a></td>
<td><a title="Casino ohne oasis" href="https://de.trustpilot.com/review/onlinecasinoohneoasis.me?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino ohne oasis" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/f59e1e3a-6378-4aa7-91f5-6934a58bc21d/oasis.png" width="64" height="64"></a></td>
<td><a title="Najlepsi Bukmacherzy" href="https://najlepsibukmacherzy.pl/ranking-legalnych-bukmacherow/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Najlepsi Bukmacherzy" src="https://opencollective-production.s3.us-west-1.amazonaws.com/81588eb0-608a-11eb-ad1c-b119533ac7bb.png" width="64" height="64"></a></td>
<td><a title="Paysafecard Casino" href="https://de.trustpilot.com/review/onlinecasinospaysafecard.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Paysafecard Casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/641d34bb-f65f-4df5-a6ec-ad5ab35df1e0/paysafe.png" width="64" height="64"></a></td>
</tr>
<tr>
<td><a title="WNB Casino Bewertung" href="https://wnb-casino.de/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="WNB Casino Bewertung" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/1adcf96c-dba5-40c0-aa5f-cc352e98b376/WNB%20Casino%20Bewertung.png" width="64" height="64"></a></td>
<td><a title="Casino mit Schneller Auszahlung" href="https://de.trustpilot.com/review/casinoschnellauszahlung.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino mit Schneller Auszahlung" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/031e76f8-0041-4c7c-a942-2d8f21b5a54b/casinoschnellauszahlung.com%202.png" width="64" height="64"></a></td>
<td><a title="Casinos ohne OASIS" href="https://de.trustpilot.com/review/ohneoasis.de?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casinos ohne OASIS" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/49904abe-0786-4b30-a9c8-6c508441f7c7/ohneoasis.de.png" width="65" height="64"></a></td>
<td><a title="Wettanbieter ohne OASIS" href="https://de.trustpilot.com/review/wettanbieterohneoasis.io?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Wettanbieter ohne OASIS" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/44468112-6a16-4cc7-aa0a-d30020fa78a5/wettenoasis2.png" width="62" height="64"></a></td>
<td><a title="Casino ohne Lizenz" href="https://de.trustpilot.com/review/casinoohnelizenz.org?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino ohne Lizenz" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/f89d7bf4-c7d9-4ad1-a9e5-a904ba63126f/casinoohnelizenz.org.png" width="64" height="64"></a></td>
<td><a title="Casino ohne Limit" href="https://de.trustpilot.com/review/limitfreicasino.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino ohne Limit" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/4525f686-fc19-47c6-9087-d5f41ecd6cfd/limitfreicasino.com.png" width="64" height="64"></a></td>
<td><a title="Casino ohne Verifizierung" href="https://de.trustpilot.com/review/ohneverifizierungcasino.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino ohne Verifizierung" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/2255004a-1c42-4399-83bc-32c21a65b66a/ohneverifizierungcasino.com.png" width="64" height="64"></a></td>
<td><a title="Casino ohne Anmeldung" href="https://de.trustpilot.com/review/ohneanmeldungcasino.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino ohne Anmeldung" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/0be23739-2dd0-4f3f-85a3-8d1d67164681/ohneanmeldungcasino.com.png" width="64" height="64"></a></td>
<td><a title="Crypto Casino" href="https://de.trustpilot.com/review/cryptocasinozone.net?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Crypto Casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/a5a37da5-46ad-4940-8d58-7cf4326bd53d/cryptocasinozone.net.png" width="64" height="64"></a></td>
<td><a title="Paypal Casino" href="https://de.trustpilot.com/review/paypalcasinosite.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Paypal Casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/2c3c6c04-e009-4f93-a080-4f5f83b875b9/paypalcasinosite.com.png" width="64" height="64"></a></td>
<td><a title="Онлайн казино casino.ua" href="https://casino.ua/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Онлайн казино casino.ua" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/32790ee6-245b-45bd-acf7-7a661fe2cf9f/logo.png" width="64" height="64"></a></td>
<td><a title="Real Money Pokies" href="https://onlinecasinoskiwi.co.nz/real-money-pokies/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Real Money Pokies" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/d0f7382e-32ea-4425-a8c4-3019f9ed501c/NZ_logo%20(6)%20(2).jpg" width="42" height="42"></a></td>
</tr>
<tr>
<td><a title="Casinos ohne OASIS" href="https://de.trustpilot.com/review/ohneoasis.de?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casinos ohne OASIS" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/49904abe-0786-4b30-a9c8-6c508441f7c7/ohneoasis.de.png" width="65" height="64"></a></td>
<td><a title="Casino mit Schneller Auszahlung" href="https://de.trustpilot.com/review/casinoschnellauszahlung.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino mit Schneller Auszahlung" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/031e76f8-0041-4c7c-a942-2d8f21b5a54b/casinoschnellauszahlung.com%202.png" width="64" height="64"></a></td>
<td><a title="casino en ligne avec Girandières" href="https://www.girandieres.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="casino en ligne avec Girandières" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/62161b95-62bd-4feb-af7e-48a807508286/girandieres_logo_5.png" width="64" height="64"></a></td>
<td><a title="Online Casino Zonder Registratie" href="https://nl.trustpilot.com/review/zonderregistratiecasinos.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Online Casino Zonder Registratie" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/cf382ddc-627b-4bd9-8870-43ee28d2a628/casino-zonder-registratie.png" width="85" height="64"></a></td>
<td><a title="Real Money Pokies" href="https://onlinecasinoskiwi.co.nz/real-money-pokies/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Real Money Pokies" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/d0f7382e-32ea-4425-a8c4-3019f9ed501c/NZ_logo%20(6)%20(2).jpg" width="42" height="42"></a></td>
<td><a title="Онлайн казино casino.ua" href="https://casino.ua/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Онлайн казино casino.ua" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/32790ee6-245b-45bd-acf7-7a661fe2cf9f/logo.png" width="42" height="42"></a></td>
<td><a title="Get professional support for Carbon" href="https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&amp;utm_medium=referral&amp;utm_campaign=docs" target="_blank"><img alt="Tidelift" src="https://carbonphp.github.io/carbon/sponsors/tidelift-brand.png" width="84" height="42"></a></td>
<td><a title="Find the best Interac online casinos in Canada with secure payments, exclusive bonuses, and fast withdrawals." href="https://interac-casino.com/en-ca/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Interac-casino.com - Canada" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/865d9613-74db-45b6-9f33-3ba992682259/2025-09-10%2019.33.08.jpg" width="42" height="42"></a></td>
<td><a title="Discover the Top 10 Online Casino Australia sites for fast payouts, big bonuses, and top real money pokies" href="https://au.trustpilot.com/review/top-10-online-casino-australia.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Top 10 Casino Australia" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/cd3f2230-ca38-41e1-9f31-f3069b910be3/top-10-online-casino-aus.jpg" width="42" height="42"></a></td>
<td><a title="iDealeCasinos" href="https://idealecasinos.nl/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="iDealeCasinos" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/907841d3-435e-44b4-9684-c33fd8635ece/ideale-casinos-square-white-logo-300.png" width="42" height="42"></a></td>
<td><a title="Offshore bookmakers review site." href="https://www.sportsbookreviewsonline.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Sportsbook Reviews Online" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/6d499f24-d669-4fc6-bb5f-b87184aa7963/sportsbookreviewsonline_com.png" width="42" height="42"></a></td>
<td><a title="Wildflower" href="https://www.trustpilot.com/review/wildflower.uno?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Wildflower" src="https://images.opencollective.com/wildflower_cases/avatar/256.png" width="42" height="42"></a></td>
<td><a title="Discover the Top 10 Online Casino Australia sites for fast payouts, big bonuses, and top real money pokies" href="https://au.trustpilot.com/review/top-10-online-casino-australia.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Top 10 Casino Australia" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/cd3f2230-ca38-41e1-9f31-f3069b910be3/top-10-online-casino-aus.jpg" width="42" height="42"></a></td>
<td><a title="Find the best Interac online casinos in Canada with secure payments, exclusive bonuses, and fast withdrawals." href="https://interac-casino.com/en-ca/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Interac-casino.com - Canada" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/865d9613-74db-45b6-9f33-3ba992682259/2025-09-10%2019.33.08.jpg" width="42" height="42"></a></td>
<td><a title="Casino-portugal.pt" href="https://casino-portugal.pt/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino-portugal.pt" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/870b4bd0-b6aa-4129-9827-e8ac02cfde56/167bdc1d-0a19-414d-a288-cfc3278b388f.png" width="42" height="42"></a></td>
</tr>
<tr>
<td><a title="Wildflower" href="https://www.trustpilot.com/review/wildflower.uno?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Wildflower" src="https://images.opencollective.com/wildflower_cases/avatar/256.png" width="42" height="42"></a></td>
<td><a title="Ставки на спорт Favbet" href="https://www.favbet.ua/uk/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Ставки на спорт Favbet" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/d86d313e-7b17-42fa-8b76-3f17fbf681a2/favbet-logo.jpg" width="42" height="42"></a></td>
<td><a title="Znajdź najlepsze zakłady bukmacherskie w Polsce w 2023 roku. Probukmacher.pl to Twoje kompendium wiedzy na temat bukmacherów!" href="https://www.probukmacher.pl?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Probukmacher" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/caf50271-4560-4ffe-a434-ea15239168db/Screenshot_1.png" width="58" height="42"></a></td>
<td><a title="Instant withdrawal casino" href="https://au.trustpilot.com/review/quickcashoutcasinos.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Instant withdrawal casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/e4be26b6-a57a-4758-ad56-bd31c759465e/quickcashoutcasinos2.png" width="49" height="42"></a></td>
<td><a title="Best Casinos not on Gamstop in the UK 2025" href="https://www.vso.org.uk/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="best non Gamstop casinos" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/3f48874e-f2f6-4062-a2a2-1500677ee3d9/125%D1%85125%20(1).jpg" width="42" height="42"></a></td>
<td><a title="inkedin" href="https://inkedin.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="inkedin" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/6cb31863-b725-49c5-820c-2c2be7d54adf/cc930e12-04de-4574-9cca-171e07d277c3.png" width="42" height="42"></a></td>
<td><a title="Онлайн казино та БК (ставки на спорт) в Україні" href="https://betking.com.ua/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="betking онлайн казино" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/08587758-582c-4136-aba5-2519230960d3/betking.jpg" width="42" height="42"></a></td>
</tr>
<tr>
<td><a title="Instant withdrawal casino" href="https://au.trustpilot.com/review/quickcashoutcasinos.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Instant withdrawal casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/e4be26b6-a57a-4758-ad56-bd31c759465e/quickcashoutcasinos2.png" width="49" height="42"></a></td>
<td><a title="Post-production resource scheduling app" href="https://freispace.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="freispace" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/7d553b00-78ff-4442-91dd-33c220e82ac4/freispace-icon-inverted.png" width="42" height="42"></a></td>
<td><a title="bestecasinozondercruks" href="https://nl.trustpilot.com/review/bestecasinozondercruks.online?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="bestecasinozondercruks" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/4948eca9-abd5-49ea-bb70-1ea6053f8663/ChatGPT%20Image%20Dec%2027%2C%202025%2C%2010_22_47%20PM-min.png" width="42" height="42"></a></td>
<td><a title="Онлайн казино та БК (ставки на спорт) в Україні" href="https://betking.com.ua/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="betking онлайн казино" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/08587758-582c-4136-aba5-2519230960d3/betking.jpg" width="42" height="42"></a></td>
<td><a title="Run Weekly" href="https://www.runweekly.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Run Weekly" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/4d7e1fad-f160-4b64-ab41-d493023f9369/2de8e56c-e9fa-497c-8882-3736ec946664.png" width="42" height="42"></a></td>
<td><a title="Are you looking for the latest online casino sites to play in the UK? How about ones that actually deliver on their promises? Every year new online casinos pops up, but are they worth your time? Check out https://helpdirect.org.uk" href="https://helpdirect.org.uk/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="New Casino Sites UK (2025) Help Direct" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/d5e8c98f-7df3-40e8-bfe1-3c1583222eab/help-direct-logo-white-trans.png" width="42" height="42"></a></td>
<td><a title="UnAIMyText" href="https://unaimytext.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="UnAIMyText" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/fa5b36d5-69e6-44a4-bbdf-b5d264399365/icon_resized.png" width="42" height="42"></a></td>
</tr>
<tr>
<td><a title="TopKasynoOnline PL" href="https://pl.topkasynoonline.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="TopKasynoOnline PL" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/6cdee969-d731-44d6-b8ff-fc4f6d4dab9c/TKOlogo.png" width="42" height="42"></a></td>
<td><a title="seguidores en instagram gratis" href="https://buylikesservices.com/es/free-instagram-followers/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="seguidores en instagram gratis" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/f743a9fa-9d13-4e08-be43-8735fa2b3b6e/buylikesservices-favicon.png" width="42" height="42"></a></td>
<td><a title="Wettanbieter ohne OASIS" href="https://de.trustpilot.com/review/wettanbieterohneoasis.io?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Wettanbieter ohne OASIS" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/44468112-6a16-4cc7-aa0a-d30020fa78a5/wettenoasis2.png" width="40" height="42"></a></td>
<td><a title="Casino ohne Lizenz" href="https://de.trustpilot.com/review/casinoohnelizenz.org?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino ohne Lizenz" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/f89d7bf4-c7d9-4ad1-a9e5-a904ba63126f/casinoohnelizenz.org.png" width="42" height="42"></a></td>
<td><a title="Casino ohne Limit" href="https://de.trustpilot.com/review/limitfreicasino.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino ohne Limit" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/4525f686-fc19-47c6-9087-d5f41ecd6cfd/limitfreicasino.com.png" width="42" height="42"></a></td>
<td><a title="Casino ohne Verifizierung" href="https://de.trustpilot.com/review/ohneverifizierungcasino.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino ohne Verifizierung" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/2255004a-1c42-4399-83bc-32c21a65b66a/ohneverifizierungcasino.com.png" width="42" height="42"></a></td>
<td><a title="Casino ohne Anmeldung" href="https://de.trustpilot.com/review/ohneanmeldungcasino.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Casino ohne Anmeldung" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/0be23739-2dd0-4f3f-85a3-8d1d67164681/ohneanmeldungcasino.com.png" width="42" height="42"></a></td>
<td><a title="Crypto Casino" href="https://de.trustpilot.com/review/cryptocasinozone.net?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Crypto Casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/a5a37da5-46ad-4940-8d58-7cf4326bd53d/cryptocasinozone.net.png" width="42" height="42"></a></td>
<td><a title="Paypal Casino" href="https://de.trustpilot.com/review/paypalcasinosite.com?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Paypal Casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/2c3c6c04-e009-4f93-a080-4f5f83b875b9/paypalcasinosite.com.png" width="42" height="42"></a></td>
<td><a title="FairGo Casino Australia" href="https://fairgocasinoaus.com/?utm_source=opencollective&amp;utm_medium=github&amp;utm_campaign=Carbon" target="_blank"><img alt="Fair Go Casino" src="https://opencollective-production.s3.us-west-1.amazonaws.com/account-avatar/df75ec48-972e-4d57-ad30-c73be2460a83/fair-go-casino.png" width="42" height="42"></a></td>
<td><a title="ssddanbrown" href="https://github.com/ssddanbrown" target="_blank"><img alt="ssddanbrown" src="https://avatars.githubusercontent.com/u/8343178?s=128&v=4" width="42" height="42"></a></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</details><!-- </open-collective-sponsors> -->

View File

@@ -434,38 +434,36 @@ class CarbonPeriod extends DatePeriodBase implements Countable, JsonSerializable
OverflowMode $mode = OverflowMode::AnchorDay,
?int $options = null,
): static {
if ($anchorDay !== null && $mode !== OverflowMode::AnchorDay) {
throw new InvalidArgumentException(
'$anchorDay parameter must not be set for $mode OverflowMode::'.$mode->name,
);
}
if ($end !== null && $recurrences !== null) {
throw new InvalidArgumentException(
'You must specify $end or $recurrences but not both',
);
}
if (\is_int($start)) {
$start = CarbonImmutable::createFromTimestamp($start);
} elseif (\is_string($start)) {
$start = CarbonImmutable::parse($start);
}
$start ??= CarbonImmutable::now();
if (\is_int($end)) {
$end = CarbonImmutable::createFromTimestamp($end);
}
[$start, $end] = self::getStartAndEndForCyclePeriod($start, $end, $recurrences, $anchorDay, $mode);
return (new static(
$start,
match ($mode) {
OverflowMode::AnchorDay => CarbonInterval::monthWithAnchorDay(
$anchorDay ?? $start->day,
),
OverflowMode::NoOverflow => CarbonInterval::monthNoOverflow(),
OverflowMode::Overflow => CarbonInterval::month(),
self::getMonthInterval($start, $anchorDay, $mode),
$end ?? $recurrences,
))->setOptions($options ?? self::IMMUTABLE);
}
public static function quarterly(
DateTimeInterface|string|int|null $start = null,
DateTimeInterface|string|int|null $end = null,
?int $recurrences = null,
?int $anchorDay = null,
OverflowMode $mode = OverflowMode::AnchorDay,
?int $options = null,
): static {
[$start, $end] = self::getStartAndEndForCyclePeriod($start, $end, $recurrences, $anchorDay, $mode);
$interval = self::getMonthInterval($start, $anchorDay, $mode);
return (new static(
$start,
static function (CarbonInterface $date, bool $negated) use ($interval): CarbonInterface {
for ($i = 0; $i < CarbonInterface::MONTHS_PER_QUARTER; $i++) {
$date = $negated
? $date->sub($interval)
: $date->add($interval);
}
return $date;
},
$end ?? $recurrences,
))->setOptions($options ?? self::IMMUTABLE);
@@ -479,29 +477,7 @@ class CarbonPeriod extends DatePeriodBase implements Countable, JsonSerializable
OverflowMode $mode = OverflowMode::AnchorDay,
?int $options = null,
): static {
if ($anchorDay !== null && $mode !== OverflowMode::AnchorDay) {
throw new InvalidArgumentException(
'$anchorDay parameter must not be set for $mode OverflowMode::'.$mode->name,
);
}
if ($end !== null && $recurrences !== null) {
throw new InvalidArgumentException(
'You must specify $end or $recurrences but not both',
);
}
if (\is_int($start)) {
$start = CarbonImmutable::createFromTimestamp($start);
} elseif (\is_string($start)) {
$start = CarbonImmutable::parse($start);
}
$start ??= CarbonImmutable::now();
if (\is_int($end)) {
$end = CarbonImmutable::createFromTimestamp($end);
}
[$start, $end] = self::getStartAndEndForCyclePeriod($start, $end, $recurrences, $anchorDay, $mode);
return (new static(
$start,
@@ -589,6 +565,54 @@ class CarbonPeriod extends DatePeriodBase implements Countable, JsonSerializable
return $count ? $result : $target;
}
private static function getStartAndEndForCyclePeriod(
DateTimeInterface|string|int|null $start = null,
DateTimeInterface|string|int|null $end = null,
?int $recurrences = null,
?int $anchorDay = null,
OverflowMode $mode = OverflowMode::AnchorDay,
): array {
if ($anchorDay !== null && $mode !== OverflowMode::AnchorDay) {
throw new InvalidArgumentException(
'$anchorDay parameter must not be set for $mode OverflowMode::'.$mode->name,
);
}
if ($end !== null && $recurrences !== null) {
throw new InvalidArgumentException(
'You must specify $end or $recurrences but not both',
);
}
if (\is_int($start)) {
$start = CarbonImmutable::createFromTimestamp($start);
} elseif (\is_string($start)) {
$start = CarbonImmutable::parse($start);
}
$start ??= CarbonImmutable::now();
if (\is_int($end)) {
$end = CarbonImmutable::createFromTimestamp($end);
}
return [$start, $end];
}
private static function getMonthInterval(
DateTimeInterface|string|int|null $start = null,
?int $anchorDay = null,
OverflowMode $mode = OverflowMode::AnchorDay,
): CarbonInterval {
return match ($mode) {
OverflowMode::AnchorDay => CarbonInterval::monthWithAnchorDay(
$anchorDay ?? $start->day,
),
OverflowMode::NoOverflow => CarbonInterval::monthNoOverflow(),
OverflowMode::Overflow => CarbonInterval::month(),
};
}
private static function makeInterval(mixed $input): ?CarbonInterval
{
try {

View File

@@ -269,7 +269,17 @@ trait Localization
);
}
$processList = static fn (array $list): array => $list;
if ($key === 'from') {
$processList = static fn (array $list): array => array_map(
static fn (string $words): string => implode('|', array_map(
static fn (string $word): string => preg_quote($word, '/'),
explode('|', $words),
)),
$list,
);
foreach (['months', 'weekdays'] as $variable) {
$list = $messages[$variable.'_standalone'] ?? null;
@@ -282,10 +292,18 @@ trait Localization
}
$$translationKey = array_merge(
$mode & CarbonInterface::TRANSLATE_MONTHS ? self::getTranslationArray($months, static::MONTHS_PER_YEAR, $timeString) : [],
$mode & CarbonInterface::TRANSLATE_MONTHS ? self::getTranslationArray($messages['months_short'] ?? [], static::MONTHS_PER_YEAR, $timeString) : [],
$mode & CarbonInterface::TRANSLATE_DAYS ? self::getTranslationArray($weekdays, static::DAYS_PER_WEEK, $timeString) : [],
$mode & CarbonInterface::TRANSLATE_DAYS ? self::getTranslationArray($messages['weekdays_short'] ?? [], static::DAYS_PER_WEEK, $timeString) : [],
$mode & CarbonInterface::TRANSLATE_MONTHS
? $processList(self::getTranslationArray($months, static::MONTHS_PER_YEAR, $timeString))
: [],
$mode & CarbonInterface::TRANSLATE_MONTHS
? $processList(self::getTranslationArray($messages['months_short'] ?? [], static::MONTHS_PER_YEAR, $timeString))
: [],
$mode & CarbonInterface::TRANSLATE_DAYS
? $processList(self::getTranslationArray($weekdays, static::DAYS_PER_WEEK, $timeString))
: [],
$mode & CarbonInterface::TRANSLATE_DAYS
? $processList(self::getTranslationArray($messages['weekdays_short'] ?? [], static::DAYS_PER_WEEK, $timeString))
: [],
$mode & CarbonInterface::TRANSLATE_DIFF ? self::translateWordsByKeys([
'diff_now',
'diff_today',
@@ -303,19 +321,33 @@ trait Localization
'minute',
'second',
], $messages, $key) : [],
$mode & CarbonInterface::TRANSLATE_MERIDIEM ? array_map(function ($hour) use ($meridiem) {
$mode & CarbonInterface::TRANSLATE_MERIDIEM ? $processList(array_map(function ($hour) use ($meridiem) {
if (\is_array($meridiem)) {
return $meridiem[$hour < static::HOURS_PER_DAY / 2 ? 0 : 1];
}
return $meridiem($hour, 0, false);
}, range(0, 23)) : [],
}, range(0, 23))) : [],
);
}
// Make all dots optional
$fromTranslations = array_map(
static fn (string $word): string => strtr($word, [
'\\.' => '\\.?',
]),
$fromTranslations,
);
return substr(preg_replace_callback('/(?<=[\d\s+.\/,_-])('.implode('|', $fromTranslations).')(?=[\d\s+.\/,_-])/iu', function ($match) use ($fromTranslations, $toTranslations) {
[$chunk] = $match;
$index = array_search($chunk, $fromTranslations);
if ($index !== false) {
return $toTranslations[$index] ?? '';
}
foreach ($fromTranslations as $index => $word) {
if (preg_match("/^$word\$/iu", $chunk)) {
return $toTranslations[$index] ?? '';
@@ -474,7 +506,7 @@ trait Localization
static::setLocale($locale);
$newLocale = static::getLocale();
$result = $func(
$newLocale === 'en' && strtolower(substr((string) $locale, 0, 2)) !== 'en'
$newLocale === 'en' && strtolower(substr($locale, 0, 2)) !== 'en'
? false
: $newLocale,
static::getTranslator(),
@@ -703,7 +735,7 @@ trait Localization
*/
private static function translateWordsByKeys($keys, $messages, $key): array
{
return array_map(function ($wordKey) use ($messages, $key) {
return array_map(static function ($wordKey) use ($messages, $key) {
$message = $key === 'from' && isset($messages[$wordKey.'_regexp'])
? $messages[$wordKey.'_regexp']
: ($messages[$wordKey] ?? null);
@@ -714,7 +746,7 @@ trait Localization
$parts = explode('|', $message);
return $key === 'to'
return $key === 'to' || \count($parts) === 1
? self::cleanWordFromTranslationString(end($parts))
: '(?:'.implode('|', array_map(static::cleanWordFromTranslationString(...), $parts)).')';
}, $keys);