preflow/i18n
Composer 安装命令:
composer require preflow/i18n
包简介
Preflow i18n — translations, locale detection, pluralization
README 文档
README
Translations, locale detection, and pluralization for Preflow applications.
Installation
composer require preflow/i18n
What it does
- Loads PHP translation files from
lang/{locale}/{group}.php - Resolves dot-notation keys with
:paramreplacement and locale fallback - ICU-style pluralization with exact, range, and simple two-form rules
- PSR-15 middleware for locale detection (URL prefix → cookie → Accept-Language)
- Twig functions for global and component-scoped translations
Configuration
config/i18n.php:
return [ 'default' => 'en', 'available' => ['en', 'de'], 'fallback' => 'en', 'url_strategy' => 'prefix', // 'prefix' | 'none' ];
Translation files
lang/en/blog.php:
return [ 'title' => 'My Blog', 'published' => 'Published on :date', 'post_count' => '{0} No posts|{1} One post|[2,*] :count posts', ];
API
Translator
$translator = new Translator( langPath: __DIR__ . '/lang', locale: 'en', fallbackLocale: 'en', ); $translator->get('blog.title'); // "My Blog" $translator->get('blog.published', ['date' => '2026-01-01']); // "Published on 2026-01-01" $translator->choice('blog.post_count', 5); // "5 posts" $translator->setLocale('de'); $translator->getLocale(); // "de"
PluralResolver
Supports three formats:
{0} No posts|{1} One post|[2,*] :count posts // exact + range
[2,10] Some|[11,*] Many // range only
One post|:count posts // simple two-form (1 = first, else second)
LocaleMiddleware
PSR-15 middleware. Detects locale in priority order: URL prefix → cookie → Accept-Language header → configured default. Strips the locale prefix from the request path and sets a locale cookie on the response.
$middleware = new LocaleMiddleware( translator: $translator, availableLocales: ['en', 'de'], defaultLocale: 'en', urlStrategy: 'prefix', // request to /de/blog strips /de, sets locale to "de" );
TranslationExtension (Twig)
Register with your Twig environment:
$twig->addExtension(new TranslationExtension($translator));
{# Simple key #} {{ t('blog.title') }} {# With parameters #} {{ t('blog.published', { date: '2026-01-01' }) }} {# Pluralization — third arg is the count #} {{ t('blog.post_count', { count: 5 }, 5) }} {# Component-scoped — resolves "my-component.label" #} {{ tc('label', 'MyComponent') }}
tc() converts the component name from PascalCase to kebab-case and uses it as the translation group.
preflow/i18n 适用场景与选型建议
preflow/i18n 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 33 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 04 月 10 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 preflow/i18n 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 preflow/i18n 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 33
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 37
- 依赖项目数: 2
- 推荐数: 1
其他信息
- 授权协议: MIT
- 更新时间: 2026-04-10