delboy1978uk/bone-i18n

Bone 框架的 I18n 包

v1.3.3 2024-08-04 11:24 UTC

README

Latest Stable Version Total Downloads Latest Unstable Version License
build status Code Coverage Scrutinizer Code Quality

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 的表单,它将翻译器作为第二个参数。