glen / smarty-gettext

此包已被弃用且不再维护。作者建议使用smarty-gettext/smarty-gettext包。

Gettext插件,用于启用Smarty包文件的国际化

1.5.0 2016-11-03 17:41 UTC

This package is auto-updated.

Last update: 2022-02-01 12:28:02 UTC


README

License Build Status Scrutinizer Quality Score Latest Stable Version Total Downloads Latest Unstable Version

smarty-gettext 为流行的PHP模板引擎Smarty提供了gettext(国际化)支持,以实现NLS(本地语言支持)API,该API可用于国际化并翻译您的PHP应用程序。

本README假设您已了解什么是gettext以及如何与PHP一起使用。

如果您不熟悉,请在尝试使用此包之前访问以下网站

  1. https://php.ac.cn/gettext
  2. http://www.onlamp.com/pub/a/php/2002/06/13/php.html

如果您在使用本地gettext扩展时遇到问题,您可能想尝试php-gettext模块,该模块模拟C扩展的行为,但用纯PHP编写。

此包有两部分

  1. block.t.phpfunction.locale.php - Smarty插件。
  2. tsmarty2c.php - 一个命令行实用工具,从smarty源文件中提取gettext字符串并将它们转换为.pot(PO模板)。

安装

使用Composer

  • "smarty-gettext/smarty-gettext": "~1.2.0"添加到您的composer.json文件的require部分
composer require smarty-gettext/smarty-gettext=~1.2.0
  • 运行composer install

手动

  • 只需将block.t.phpfunction.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为第一个参数的编号,依此类推。

例如,{t name="sagi"}my name is %1{/t}将用sagi替换%1

参数名称被忽略,除非它是以下保留名称之一(见下文)。只有参数顺序是重要的。

使用多个参数的示例

{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)。

提供复数形式

  1. 设置名为plural的参数,其值为字符串的复数形式。
  2. 设置名为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调用,您可以将tsmarty2cxgettext调用的结果组合起来

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项目中查看如何操作。

作者

版权

版权(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的副本;如果没有,请写信给自由软件基金会,51 Franklin Street,第五层,波士顿,MA 02110-1301 USA