futureRockStars/gettext-latte
Latte 模板 Gettext 翻译器
Requires
- php: >=7.4.0 <8.0.0
- h4kuna/latte-php-tokenizer: ^1.0.0
- latte/latte: ^2.7.4
- nette/application: ^3.1.11
- nette/caching: ^3.1.4
- nette/di: ^3.0.16
- nette/finder: ^2.6.0|^3.0.0
- nette/http: ^3.2.2
- nette/utils: ^3.2.9|^4.0.0
Requires (Dev)
- nette/bootstrap: ^3.1.4
- nette/tester: ^2.4.3
- orisai/coding-standard: ^3.7.0
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-deprecation-rules: ^1.1.0
- phpstan/phpstan-nette: ^1.2.0
- phpstan/phpstan-strict-rules: ^1.5.0
- staabm/annotate-pull-request-from-checkstyle: ^1.8.0
- tracy/tracy: ^2.6.8
This package is not auto-updated.
Last update: 2024-09-20 12:43:34 UTC
README
GettextLatte
是 Nette 框架 2.3 的本地化插件,该框架原生支持 gettext。
启动条件
- 启用 gettext 扩展
- 服务器上安装了语言,您可以使用命令 $ locale -a 检查
- 您的应用程序使用 UTF-8 编码编写
在仓库中有一个名为 locale 的目录,其中包含为您的项目准备的目录结构。在 example 文件夹中有文件,这些文件可以帮助您设置此翻译器。您可以用您的母语编写应用程序,这里是一个英语示例,但也可以是捷克语、斯洛伐克语、德语等...
启动
克隆此存储库或使用 composer。
composer require h4kuna/gettext-latte
路由器保留语言。
/** * @return Nette\Application\IRouter */ public static function createRouter(\h4kuna\Gettext\GettextSetup $translator) { $router = new RouteList(); $router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY); $router[] = new Route('[<lang ' . $translator->routerAccept() . '>/]<presenter>/<action>/[<id>/]', array( 'presenter' => 'Homepage', 'action' => 'default', 'lang' => $translator->getDefault() )); return $router; }
examples/config.neon
在 Mac 上,编码始终表示为 'en_US.UTF-8',而 dojo 格式为 'en_US.utf8'。
extensions:
gettextLatteExtension: h4kuna\Gettext\DI\GettextLatteExtension
gettextLatteExtension:
langs:
cs: cs_CZ.utf8
sk: sk_SK.utf8
en: en_US.utf8
使用别名 {_'' /, .../} 和 {_n'', '', '' /, .../} 安装新的 latte 引擎宏,新的是 {_d'catalog', 'message'} 和复数 {_dn'catalog', 'message' /, .../}。
运行服务并支持自动检测语言
尽快加载语言。
<?php use Nette\Application\UI\Presenter; abstract class BasePresenter extends Presenter { /** @persistent */ public $lang; /** @var \h4kuna\Gettext\GettextSetup */ protected $translator; /** * Inject translator * @param \h4kuna\Gettext\GettextSetup */ public function injectTranslator(\h4kuna\Gettext\GettextSetup $translator) { $this->translator = $translator; } protected function startup() { parent::startup(); $this->lang = $this->translator->setLanguage($this->lang); } /** * Or PHP 5.4+ **************************************************************** * ************************************************************************* */ use \h4kuna\Gettext\InjectTranslator; }
安装翻译器后,请清空临时目录,否则您可能会遇到 "Call to undefined method Nette\Templating\FileTemplate::translate()" 的错误。
如何在 PHP 文件中编写文本
在模板外部使用 gettext。
<?php echo gettext('Hi'); //or alias _ echo _('Hi'); echo ngettext('dog', 'dogs', 2); echo sprintf(_('%s possible %s %s'), 'another', 'optional', 'params');
在模板中使用宏。参数数量不受限制。自动添加 sprintf 函数。请参阅 examples/example.latte 示例。
* 这是因为,对于有超过 2 个级别的变位法语的语言,变位法在目录中每次都定义。
让我们开始翻译
下载 PoEdit。在每次运行 Poedit 之前,您必须将所有模板编译到 temp 目录下的 php 中,为此可以使用类似于 examples/latte-compiler 的脚本。
打开 .po 文件。设置目录搜索 - 默认为 temp/cache/latte 和 app,然后点击 "更新目录",更新目录后不需要 重新启动 apache。
如果您使用具有三个变位级别的语言(例如捷克语)编写应用程序,而不是两个变位级别,您必须有一个包含对复数进行翻译的捷克语到捷克语的目录。
可下载目录
为您的翻译者提供可下载的目录。
$this->translator->download('cs'); //Offers catalog download
运行测试
必须安装 composer。然后您只需执行脚本即可。
./tests/run-tests.sh