functions.php

PHP

Path: src/I18n/functions.php

<?php

/**
 * I18n Feature - Public API Functions
 *
 * Only commonly-used developer-facing functions in mini\ namespace.
 * Internal framework functions are in mini\I18n\ namespace.
 */

namespace mini;

use mini\I18n\Fmt;
use mini\I18n\Translatable;

/**
 * Translation function - creates a Translatable instance
 *
 * This is the primary function developers use for translations.
 *
 * @param string $text The text to translate
 * @param array $vars Variables for interpolation (e.g., ['name' => 'John'])
 * @return Translatable
 */
function t(string $text, array $vars = []): Translatable {
    return new Translatable($text, $vars);
}

/**
 * Get a formatter instance for convenience
 *
 * Provides shortcuts for common formatting tasks.
 * Note: Fmt methods are static, so you can also call Fmt::currency() directly
 *
 * @return Fmt Stateless formatter instance (singleton)
 */
function fmt(): Fmt {
    return Mini::$mini->get(Fmt::class);
}

/**
 * ============================================================================
 * I18n Service Registration
 * ============================================================================
 */

namespace mini\I18n;

use mini\Mini;
use mini\Lifetime;
use mini\Util\PathsRegistry;

// Register translations path registry
$primaryTranslationsPath = $_ENV['MINI_TRANSLATIONS_ROOT'] ?? (Mini::$mini->root . '/_translations');
Mini::$mini->paths->translations = new PathsRegistry($primaryTranslationsPath);
$frameworkTranslationsPath = \dirname((new \ReflectionClass(Mini::class))->getFileName(), 2) . '/translations';
Mini::$mini->paths->translations->addPath($frameworkTranslationsPath);

// Register I18n services
// Register interface (loads from config, allows custom implementations)
Mini::$mini->addService(TranslatorInterface::class, Lifetime::Singleton, fn() => Mini::$mini->loadServiceConfig(TranslatorInterface::class));
// Register concrete class as alias to interface (for backward compatibility)
Mini::$mini->addService(Translator::class, Lifetime::Singleton, fn() => Mini::$mini->get(TranslatorInterface::class));
Mini::$mini->addService(Fmt::class, Lifetime::Singleton, fn() => Mini::$mini->loadServiceConfig(Fmt::class));