vreider / zf2-smarty-gettext
Gettext 插件,用于在 Smarty 包文件中启用国际化
Requires
- php: >=5.2.1
- ext-gettext: *
- ext-pcre: *
This package is not auto-updated.
Last update: 2024-09-29 02:23:54 UTC
README
zf2-smarty-gettext 为使用 Zend Framework 2 的 PHP 模板引擎 Smarty 提供了 gettext (i18n) 支持,实现了一个 NLS (本地化语言支持) API,可用于国际化并翻译 PHP 应用程序。
本 README 假设您已经知道什么是 gettext 以及如何与 PHP 一起使用它。
如果您不熟悉,请在尝试使用此包之前访问以下网站
此包有两个部分
block.t.php- Smarty 插件。tsmarty2c.php- 一个命令行实用工具,从 smarty 源文件中提取 gettext 字符串并将其转换为.pot(PO-模板)。
安装
使用 Composer
- 将
"vbridier/zf2-smarty-gettext": "1.0.0"添加到您的composer.json文件的require部分
composer require vbridier/zf2-smarty-gettext=1.0.0
- 运行
composer install。
function.locale.php
允许您在主 smarty 模板中设置区域设置路径。
为了使用它,请在主模板的顶部放置 {locale path="相对模板目录的翻译路径" domain="您的翻译域"}。
block.t.php
Smarty 插件
使用方法
块函数的内容是要翻译的字符串。例如,翻译 Hello World,使用:{t}Hello World{/t}。
如果您有需要在字符串内部设置的动态参数,将它们传递给块函数,它们将被替换为 %n,其中 n 是第一个参数的索引为 1,以此类推。
例如,{t name="sagi"}我的名字是 %1{/t} 将 %1 替换为 sagi。
参数名称通常会被忽略,除非它是以下保留名称之一(见下文)。只有参数的顺序才是重要的。
使用多个参数的示例
{t 1='one' 2='two' 3='three'}The 1st parameter is %1, the 2nd is %2 and the 3rd %3.{/t}
注意:我决定使用数字参数而不是 sprintf(),主要是因为它的语法对翻译者来说更简单(尤其是在想要更改参数顺序时)。
您也可以通过使用 smarty_gettext_strarg() 函数在您的 PHP 代码中使用此方法。它只在包含 block.t.php 之后加载,因此您可能希望将其复制到其他地方。
我通常将此 function strarg() 的全局版本命名为,并像这样使用
echo strarg(_('hi %1'), $name [,..]);
默认情况下,所有翻译的字符串都将自动进行 HTML 转义。您可以通过设置 escape 参数来控制此操作。可能的值
html用于 HTML 转义,这是默认值。js用于 JavaScript 转义。url用于 URL 转义。no/off/0- 禁用转义。
示例
{t escape=no url="https://php.ac.cn/" name="PHP website"}
<a href="%1">%2</a>
{/t}
使用变量
有时您需要将翻译后的块作为变量传递。这可以通过 capture 块实现。
{capture assign="extra_title"}{t}Weekly report{/t}{/capture}
{include file="header.tpl.html" extra_title=$extra_title}
复数支持
此包还提供了对复数形式的支持(参见 ngettext)。
要提供复数形式
- 使用复数版本的字符串设置名为
plural的参数。 - 使用变量计数设置名为
count的参数。
复数和计数是特殊参数,因此它们不能作为数字参数使用。如果您想在字符串中使用计数值,您必须将其再次设置为一个数字参数。
示例
{t count=$files|@count 1=$files|@count plural="%1 files"}One file{/t}
修饰符支持
此包不提供Smarty修饰符支持。
我认为变量应该在应用层面进行翻译,并在翻译后提供给模板。
如果无论如何都需要它,可以简单地注册PHP gettext命令作为其中一个来创建这样的修饰符。
tsmarty2c.php - 命令行工具
此工具将扫描模板中的{t}...{/t}占位符以查找翻译字符串,并输出一个.pot文件(.po模板)。
使用方法
./tsmarty2c.php -o template.pot <filename or directory> <file2> <...>
如果参数是一个目录,将递归地解析其中的模板文件。
在输出中添加了特殊PO标签,用于告知提取翻译的位置。大多数PO编辑工具都可以尊重这些信息。
如果您还需要扫描.php或.phtml文件以查找原生的gettext调用,可以将tsmarty2c和xgettext调用的结果结合起来。
tsmarty2c -o smarty.pot ...
xgettext --add-comments=TRANSLATORS: --keyword=gettext --keyword=_ --output=code.pot ...
msgcat -o template.pot code.pot smarty.pot
rm -f code.pot smarty.pot
默认情况下,tsmarty2c扫描.tpl文件,如果您想使用其他文件,可以在Unix中使用xargs。
find templates -name '*.tpl.html' -o -name '*.tpl.text' -o -name '*.tpl.js' -o -name '*.tpl.xml' | xargs tsmarty2c.php -o smarty.pot
请参阅在Eventum项目中是如何实现的。
作者
- 此ZF2插件:Vincent BRIDIER vincent@bridier.me
- 原作者:Sagi Bashari sagi@boom.org.il,http://smarty-gettext.sourceforge.net/
- 当前维护者:Elan Ruusamäe glen@delfi.ee