phpfui / translation
最小化和快速的PHP面向对象翻译系统
Requires
- php: >=7.4 <8.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpfui/phpunit-syntax-coverage: ^1.0
- phpstan/phpstan: ^1.8
- phpunit/phpunit: <11.0
- roave/security-advisories: dev-latest
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/Translation 在 MIT 许可协议下分发。
PHP 版本
此库仅支持 现代 的 PHP 版本,这些版本仍然接收安全更新。虽然我们愿意支持明朝晚期的 PHP,但现代 PHP 版本的优势远大于向后兼容的陈旧观念。是时候升级了。