atk4 / i18n
Atk4 的 Symfony 翻译组件接口
Requires
- php: >=7.3.0
- symfony/config: ^4.0|^5.0
- symfony/translation: ^4.0|^5.0
This package is not auto-updated.
Last update: 2024-09-18 00:51:48 UTC
README
敏捷工具包 UI 的 Symfony\Translation 组件接口
安装
composer require atk4/i18n
使用
初始化
翻译器需要初始化。
use Atk4\I18n\Service;
Service::init($locale, $formatter, $cachePath, $cacheOptions, $clearCache);
string $locale
Symfony 翻译器使用的默认语言区域。
MessageFormatterInterface $formatter
[可选] - 您可以提供自己的符合 Symfony 的 MessageFormatterInterface 的格式化程序。如果为 null,则 symfony 翻译组件将默认创建一个。
string $cachePath
[可选] - 这将在指定位置缓存翻译资源文件。在生产环境中推荐使用,因为它将加快资源加载速度。
$cahePath = 'dir/to/caches'
array $cacheOptions
[可选] - 将根据此选项生成缓存文件。一个好的用法是为翻译版本指定缓存。
$caheOptions = ['version' => '1.0.0']
bool $clearCache
[可选] - 将清除缓存文件并重新生成资源文件。用于开发。
添加资源文件
一旦翻译器已初始化,请将其添加到您的翻译资源文件中。
Service::addResource($path, $locale, $format);
string $path
您的资源文件所在的目录路径。为了正确加载,此目录必须按照语言区域组织。
├── languages
│ ├── en
│ │ ├── messages.en.php
│ │ └── messages+intl-icu.en.php
│ ├── en_US
│ │ ├── messages.en_US.php
│ │ └── messages+intl-icu.en_US.php
│ ├── fr
│ │ ├── messages.fr.php
│ │ └── messages+intl-icu.fr.php
│ ├── fr_FR
│ │ ├── messages.fr_FR.php
│ │ └── messages+intl-icu.fr_FR.php
通过指定语言路径,服务将自动加载指定语言区域目录和文件类型格式内的所有资源。
重要
资源文件名必须遵循以下约定
- 默认消息:[domain].[locale].[format]
- ICU 消息:[domain]+intl-icu.[locale].[format]
string $locale
从该语言区域目录加载文件的目录。
string $format
位于指定语言区域目录中的文件格式。
服务支持以下类型的文件:php, yaml, po, csv, json, xlf, ini, mo, qt。
The shortcut function _t().
服务提供了一个快捷函数,以便直接翻译消息。
use function Atk4\I18n\Resource\_t;
echo _t($id, $param, $domain, $locale)
string $id
要翻译的资源 ID。
array $param
[可选] - 翻译资源所需的参数。通常用于 ICU 消息格式。
string $domain
[可选] - 域名。默认为 'messages'。
string $locale
[可选] - 语言区域名称。默认为服务初始化方法中使用的语言区域。
可翻译的消息 T::class。
您可以使用可翻译消息 T::class
在稍后阶段定义某些要翻译的消息。
use Atk4\I18n\T;
// create translatable msg instance.
$msg = T::from($id, $param, $domain)
//...
// output $msg in specified locale when need.
echo $msg->in('fr_FR');
备用语言区域
symfony\translation 组件支持不可用语言区域资源的回退策略。
Service::addFallbackLocales(array $locales)