风火猎 / smarty-gettext
Gettext 插件,用于在 Smarty 包文件中启用国际化
Requires
- php: >=5.2.1
- ext-gettext: *
- ext-pcre: *
This package is not auto-updated.
Last update: 2024-09-28 17:49:21 UTC
README
smarty-gettext 为流行的 PHP 模板引擎 Smarty 提供 gettext (i18n) 支持,以实现 NLS (本地语言支持) API,可用于国际化并翻译您的 PHP 应用程序。
此 README 假定您已了解 gettext 以及如何与 PHP 一起使用它。
如果您不了解这些,请在尝试使用此软件包之前访问以下网站
如果您在使用原生的 gettext 扩展时遇到问题,您可能想尝试 php-gettext 模块,该模块模拟 C 扩展的行为,但完全由 PHP 编写。
此软件包包含两部分
block.t.php
,function.locale.php
- Smarty 插件。tsmarty2c.php
- 一个命令行工具,可以从 smarty 源文件中提取 gettext 字符串,并将它们转换为.pot
(PO-模板)。
安装
使用 Composer
- 将
"fenghuilee/smarty-gettext": "dev-master"
添加到您的composer.json
文件的require
部分
composer require fenghuilee/smarty-gettext=dev-master
- 运行
composer install
。
手动
- 只需将
block.t.php
和function.locale.php
复制到您的 Smarty 插件目录。
function.locale.php
允许您在主 Smarty 模板中设置地区路径。
要使用它,请将 {locale path="PATH_TO_TRANSLATIONS_RELATIVE_TO_TEMPLATES_DIRECTORY" domain="YOUR_TRANSLATIONS_DOMAIN"}
放置在主模板的顶部。
block.t.php
Smarty 插件
用法
块函数的内容是要翻译的字符串。例如,要翻译 Hello World
,使用:{t}Hello World{/t}
。
如果您有需要在字符串内部设置的动态参数,请将它们传递给块函数,它们将被替换为 %n
,其中 n
是第一个参数的索引为 1
,依此类推。
例如,{t name="sagi"}my name is %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项目中的实现方式。
作者
- 原作者:Sagi Bashari sagi@boom.org.il,http://smarty-gettext.sourceforge.net/
- 当前维护者:Elan Ruusamäe glen@delfi.ee
版权
版权(c)2004-2005 Sagi Bashari
版权(c)2010-2015 Elan Ruusamäe
本库是免费软件;您可以在自由软件基金会发布的GNU Lesser General Public License的条款下重新分发和/或修改它;许可证版本2.1或(根据您的选择)许可证的任何后续版本。
本库的分发是希望它有用,但没有任何保证;甚至没有关于适销性或针对特定目的的适用性的暗示保证。有关详细信息,请参阅GNU Lesser General Public License。
您应该已经随本库一起收到GNU Lesser General Public License的副本;如果没有,请写信给自由软件基金会,Inc.,51 Franklin Street,第五层,波士顿,MA 02110-1301 USA。