4
0

TranslateTest.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. <?php
  2. declare(strict_types=1);
  3. use PHPUnit\Framework\Attributes\DataProvider;
  4. final class TranslateTest extends \PHPUnit\Framework\TestCase {
  5. /**
  6. * @return list<array{string,int,string}>
  7. */
  8. public static function providePluralTranslations(): array {
  9. return [
  10. ['en', 1, '1 day ago'],
  11. ['en', 2, '2 days ago'],
  12. ['fr', 0, 'il y a 0 jour'],
  13. ['fr', 2, 'il y a 2 jours'],
  14. ['id', 5, '5 hari yang lalu'],
  15. ['lv', 0, 'pirms 0 dienu'],
  16. ['lv', 1, 'pirms 1 diena'],
  17. ['lv', 2, 'pirms 2 dienas'],
  18. ['he', 2, 'לפני 2 ימים'],
  19. ['ru', 5, '5 дней назад'],
  20. ['zh-CN', 3, '3天前'],
  21. ];
  22. }
  23. #[DataProvider('providePluralTranslations')]
  24. public function testPluralUsesLocalePluralForms(string $language, int $value, string $expected): void {
  25. Minz_Translate::init($language);
  26. self::assertSame($expected, Minz_Translate::plural('gen.interval.day', $value));
  27. }
  28. public function testTimeagoUsesPluralCatalogues(): void {
  29. Minz_Translate::init('ru');
  30. self::assertSame('5 минут назад', timeago(0, 5 * 60));
  31. Minz_Translate::reset('fr');
  32. self::assertSame('il y a 2 jours', timeago(0, 2 * 86400));
  33. }
  34. public function testCompiledPluralFileProvidesRuntimeCallable(): void {
  35. $pluralData = include APP_PATH . '/i18n/cs/plurals.php';
  36. self::assertIsArray($pluralData);
  37. self::assertSame(3, $pluralData['nplurals']);
  38. self::assertInstanceOf(Closure::class, $pluralData['plural']);
  39. self::assertSame(1, $pluralData['plural'](3));
  40. }
  41. }