悦音/i18n

一种简单但天真的基于标记的国际化的方法。

v1.x-dev 2024-02-17 07:56 UTC

This package is auto-updated.

Last update: 2024-09-17 09:06:14 UTC


README

Packagist Downloads GitHub Stars Issues
License Community Built

悦音/i18n 提供了一种易于使用但有限的基于标记的国际化方法。

悦音/i18n 是一个 PHP 库,允许定义和检索翻译的消息,称为标记。它提供了一个通用接口来从不同的后端获取标记;其明确的目标是提供一个天真的方法来处理不同的语法规则,这比 GNU gettext 这样的更完整的系统要简单。

感兴趣? 从这里开始。

入门

安装

悦音/i18n 作为 Packagist 软件包发布,可以通过 Composer 简单安装

composer require "eufony/i18n:v1.x-dev"

警告:此包 尚未有任何稳定版本发布(甚至没有 v0.x 预发布版)并且目前 是不稳定的。请预期会有频繁的破坏性更改和不稳定性!

基本用法

悦音/i18n 提供了两个主要类来提供翻译功能:StoresTranslatorStores 提供了实际包含翻译消息的 标记Translator 类充当对存储库的前端。要开始使用,请选择一个存储库实现并将其传递给一个新翻译器,如下所示

$store = /* ... */;
$translator = new Translator($store);

默认情况下,悦音/i18n 提供了两种不同的存储库实现

// Fetch tokens from PHP arrays
// You could also for example parse this array from a JSON string
$store = new ArrayStore(["greetings.weather.good" => ["en" => "...", "de" => "...", "ru" => "..."]]);
$store = ArrayStore::fromJSON(File::read("extras/i18n/tokens.json"));  // `File` requires `eufony/filesystem`

// Fetch tokens from an SQL database using the `eufony/dbal` abstraction layer
$connection = new Connection(/* ... */);  // a `Connection` instance from `eufony/dbal`
$store = new SQLStore($connection);

翻译器初始化后,您可以开始使用它来翻译消息或获取标记。标记是预先翻译的消息,已被输入到存储库中,而翻译可能根据存储库实现而即时发生。

$greeting = $translator->translate("Hello, {user}.", ["en" => "de"]);  // if we only need a single target language
$greeting = $translator->translate("Hello, {user}.", ["en" => ["de", "ru"]]);  // for multiple target languages
$weather = $translator->token("greetings.weather.good");

// Once we have our tokens, we can use `get()` to extract the messages in the target languages
echo $greeting->interpolate(["user" => "Euphie"])->get("de");
echo $weather->get("de");

Translator 类的构造函数还可以接受一个选项 preferredLanguage 参数,它将指定默认的翻译语言。您可以使用它来简化一些调用,如果您事先知道目标语言。

$translator = new Translator($store, preferredLanguage: "de");

// Now, we can assume the target language to be the preferred language by default
// But we can still override it for specific situations like above
$greeting = $translator->translate("Hello, {user}.", "en");
$weather = $translator->token("greetings.weather.good");

// If the preferred language is set, tokens can be converted to strings automatically
// No more need to call `get()` every time
echo $greeting->interpolate(["user" => "Euphie"]);
echo $weather;

贡献

发现了错误或缺失的功能?您可以在 问题跟踪器 上报告。

许可

本程序是免费软件:您可以在自由软件基金会发布的 GNU 较小通用公共许可证的条款下重新分配它和/或修改它,许可证版本 3 或(根据您的选择)任何后续版本。

本程序以希望它将是有用的方式分发,但没有任何保证;甚至没有对适销性或特定目的适用性的暗示保证。有关详细信息,请参阅 GNU 较小通用公共许可证。

您应已收到一份 GNU 较小通用公共许可证副本。如果没有,请参阅 https://gnu.ac.cn/licenses/