futureRockStars/gettext-latte

Latte 模板 Gettext 翻译器

dev-master 2023-07-02 15:31 UTC

This package is not auto-updated.

Last update: 2024-09-20 12:43:34 UTC


README

GettextLatte

Build Status Latest stable

是 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/latteapp,然后点击 "更新目录",更新目录后不需要 重新启动 apache

如果您使用具有三个变位级别的语言(例如捷克语)编写应用程序,而不是两个变位级别,您必须有一个包含对复数进行翻译的捷克语到捷克语的目录。

可下载目录

为您的翻译者提供可下载的目录。

$this->translator->download('cs'); //Offers catalog download

运行测试

必须安装 composer。然后您只需执行脚本即可。

./tests/run-tests.sh