delboy1978uk / bone-i18n
Bone 框架的 I18n 包
Requires
- php: ^8.2
- delboy1978uk/barnacle: ^2.3
- delboy1978uk/bone-http: ^2.3
- delboy1978uk/bone-view: ^v1.7
- delboy1978uk/form: ^2.4
- laminas/laminas-i18n: ^2.26
- laminas/laminas-servicemanager: ^3.3
- psr/http-message: ^2.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- codeception/codeception: ^5.0
- codeception/module-asserts: ^3.0
- delboy1978uk/bone-router: ^1.4
- laminas/laminas-diactoros: ^3.3
- roave/security-advisories: dev-latest
README
Bone 框架的 I18n 包
安装
bone-i18n 是 delboy1978uk/bone
的核心依赖项,因此默认安装。
设置
骨架应用程序有一个翻译目录(通常是 data/translations
,但你可以将其设置为任何内容),其中将包含如 en_US
等区域文件夹。
将 .mo
和 .po
文件放入其中。打开 config/bone-i18n.php
并进行修改以适应需求。
<?php use Laminas\I18n\Translator\Loader\Gettext; return [ 'i18n' => [ 'enabled' => true, 'translations_dir' => 'data/translations', 'type' => Gettext::class, 'default_locale' => 'en_PI', 'supported_locales' => ['en_PI', 'en_GB', 'nl_BE', 'fr_BE'], 'date_format' => 'd/m/Y', ] ];
对于包含翻译文件的任何包,编辑你的包类并使其实现 Bone\I18n\I18nRegistrationInterface
。创建一个返回翻译目录路径的方法 public function getTranslationsDirectory(): string
。
使用
区域视图辅助函数
你可以通过调用
<?= $this->locale() ?>
或者更方便地
<?= $this->l() ?>
在你的视图文件中。一个如 /user
的链接将变成 /en_US/user
。Bone 框架使用 i18n 中间件来获取区域,并且它会从 URL 中移除区域并将其设置为请求属性,因此你不需要定义带有区域参数的路线。
控制器
在控制器操作中,如果你需要区域,可以说
$locale = $request->getAttribute('locale');
要将翻译器实例化到你的控制器中,使其实现 Bone\I18n\I18nAwareInterface
并使用 Bone\I18n\Traits\HasTranslatorTrait
。如果你的包的 Package 类在没有通过 Bone\Mvc\Controller\Init
类的情况下返回控制器,现在将其更改为
return Init::controller(new YourController(), $c);
你现在可以调用 $this->getTranslator()
,它将返回翻译器实例。
翻译视图辅助函数
要翻译视图中的文本,调用以下
<?= $this->translate('whatever.key.to.translate') ;?>
或者再次,更方便地
<?= $this->t('whatever.key.to.translate') ;?>
国际化表单
Bone 框架使用 delboy1978uk/form
用于其表单功能。然而,你不仅可以扩展 Del\Form
,还可以创建一个扩展 Bone\I18n\Form
的表单,它将翻译器作为第二个参数。