Testing

Testing your translations with WPZylos I18n.

Unit Testing

Mock Translator

use PHPUnit\Framework\TestCase;

class TranslatorTest extends TestCase
{
    public function testTranslateReturnsOriginalWhenNoTranslation(): void
    {
        $translator = new Translator($this->createContext());

        $result = $translator->__('Hello World');

        $this->assertEquals('Hello World', $result);
    }

    public function testPluralizationReturnsCorrectForm(): void
    {
        $translator = new Translator($this->createContext());

        $single = $translator->_n('%d item', '%d items', 1);
        $plural = $translator->_n('%d item', '%d items', 5);

        $this->assertEquals('%d item', $single);
        $this->assertEquals('%d items', $plural);
    }
}

Testing Translatable Components

class SettingsPageTest extends TestCase
{
    public function testPageContainsTranslatedTitle(): void
    {
        $translator = $this->createMock(Translator::class);
        $translator->method('__')
            ->with('Plugin Settings')
            ->willReturn('Plugin Einstellungen');

        $page = new SettingsPage($translator);

        ob_start();
        $page->render();
        $output = ob_get_clean();

        $this->assertStringContainsString('Plugin Einstellungen', $output);
    }
}

POT File Generation

Generate translatable strings:

# Using WP-CLI
wp i18n make-pot . languages/your-plugin.pot

# Using makepot.php
php makepot.php wp-plugin your-plugin languages/your-plugin.pot

Running Tests

composer run test