phpfui/translation

最小化和快速的PHP面向对象翻译系统

V1.0.1 2023-11-23 15:18 UTC

This package is auto-updated.

Last update: 2024-09-10 10:32:42 UTC


README

一个简单、快速且内存高效的PHP翻译系统。

为什么还需要另一个翻译系统?仅仅是为了速度和降低内存使用。包括注释在内,这段代码不到500行,这个翻译系统没有像其他现有系统那样高的开销。由于PHP是一种解释型脚本语言,速度和内存使用都很重要。这个库试图解决这两个问题。

支持的功能

  • 将翻译存储在原生的PHP数组中,作为键=>值对。
  • 分块翻译,所以只有需要的翻译会被加载到内存中。
  • 支持第三方键值存储系统,如memcached。
  • 支持缺失翻译记录,用于记录未翻译的文本。
  • 使用冒号名称语法(:name)和关联数组进行参数替换。
  • 支持复数化,包括范围支持。
  • 无限多语言。
  • 不可见、TRANS和RAW多语言用于调试支持。

分块翻译支持

分块允许您将翻译分解,这样所有的翻译就不会同时加载到内存中。这对于大型项目特别有用。

分块由任何以点号(.)开头的翻译定义。这些是分块翻译

.save
.cancel
.messages.notFound
.messages.saved
.titles.firstName
.titles.lastName
.person.address.city
.person.address.state
.person.address.postalcode

前两个例子称为基本块,存储在本地根目录中的baseChunks.php文件中。所有基本块总是会被加载,即使没有被请求,因此它们应该只包含通常会被加载的常用翻译。第三到第六个块允许您在需要时仅加载这些块。如果你的页面不需要标题,那么.titles块将不会被加载。整个块级别将在同一时间加载。所以在前三个例子中,当访问.person.address.city(或州、或邮编)时,.person.address块将被加载。

不以点号(.)开头的任何翻译都被视为本地语言翻译,并存储在本地根目录中的native.php文件中。当加载任何本地块时,都会加载所有本地块,除了基本区域设置,它们作为优化从不加载。这意味着基本区域设置的本地翻译永远不会被列为缺失。

文件结构

您必须指定一个翻译目录。您支持的每个区域都将具有您翻译目录内的自己的目录。请参考 Tests/translations 目录中的示例。

语言支持

语言可以命名为您的文件系统支持的任何名称。语言是基本翻译目录中目录的名称。

通常您设置基本语言,这是您的本地翻译语言(如果您在使用它们)。然后您设置用户的语言。这些可以是相同的。

保留语言用于调试

  • invisible - 所有翻译返回空字符串。
  • TRANS - 所有翻译返回字符串“TRANS”。
  • RAW - 返回传递给翻译的实际文本。对此文本不执行其他处理。
  • '' 或空字符串语言 - 不进行翻译,但完全处理变量替换和复数化。

备用语言支持

为了使事情尽可能简单,这个库不支持在翻译缺失时回退到基本区域。这可以通过预处理每个区域来实现。任何缺失的翻译都可以用另一个区域的翻译来填补。此库不提供管理翻译文件的支持,因为这最好由开发者决定,如果需要自定义的话。使用 var_export 函数来自动化过程以写入翻译文件。这将确保您的翻译可以被 PHP 解析。

使用方法

namespace PHPFUI\Translation;
// specify where the translations are located
Translator::setTranslationDirectory(__DIR__ . '/trans');
// set the base locale, ie. the language of any native translations (unchunked)
Translator::setBaseLocale('EN-us');
// set the user's locale
Translator::setLocale('ES-us');
// get the ES-us version of 'red'
$translated = Translator::trans('red');
// get chunked version of colors.
$translated = Translator::trans('.colors.red');

参数

您可以通过传递关联数组作为第二个参数来传递参数以替换翻译。

// translate with parameters and pluralized
$translated = Translator::trans('.messages.recordsFound', ['count' => $found]);

翻译中的参数应以冒号开头(:)。这里使用简单的 str_replace 来翻译变量,所以 :name 和 :names 可能不会按您期望的方式替换。最好尽可能使用唯一名称。

复数

此库支持通过垂直线(|)字符分隔的不同部分来实现复数。如果您需要在文本中使用 '|',请使用 HTML 实体 |

变量 count(在翻译文本中的 :count)用于确定要复数的项目数量。在翻译中不一定需要使用 :count,但您可以如果需要的话。

  • 0 或更少的计数将选择第一个部分。
  • 比最后一个部分更高的计数将返回最后一个部分。
  • 其他计数将选择相应的部分,因此 1 会返回字符串 'zero|one|two' 中的 'one' 部分。
  • 您可以在一个部分的开始使用 [first,last] 符号来指定该部分的匹配范围。
  • 星号 (*) 是匹配任何计数的通配符。例如 "[0]没有品牌|[1,9]有不到十个品牌|[10,99]有不到100个品牌|[*]有数百个品牌"。
  • count 参数结合使用 - "没有记录|一条记录|:count 条记录"。

完整类文档

PHPFUI/InstaDoc

许可协议

PHPFUI/Translation 在 MIT 许可协议下分发。

PHP 版本

此库仅支持 现代 的 PHP 版本,这些版本仍然接收安全更新。虽然我们愿意支持明朝晚期的 PHP,但现代 PHP 版本的优势远大于向后兼容的陈旧观念。是时候升级了。