repli2dev/gettexttranslator

Nette (PHP 框架) 的翻译器。

v1.2.2 2016-12-09 14:55 UTC

This package is not auto-updated.

Last update: 2024-09-23 15:51:27 UTC


README

Gettext Translator 是一个工具,它通过调试栏面板实现文本的简单易用的翻译。无需编辑或操作 .po/.mo 文件。

与 nette 2.1> 测试,请将任何错误报告到问题

安装和使用

通过 composer 安装

{
  "require":{
    "salamek/gettexttranslator"
  }
}

使用方法

设置 config.neon 配置文件

common:
  gettextTranslator:
    lang: cs #default language
    files:
      front: %appDir%/lang # for module Front and other non-specified modules
      admin: %appDir%/lang-admin # for module Admin
    # optional with defaults
    layout: horizontal # or: vertical
    height: 450

extensions:
  gettextTranslator: GettextTranslator\DI\Extension

在 BasePresenter.php 中进行设置

class BasePresenter extends Nette\Application\UI\Presenter
{
  /** @persistent */
  public $lang;

  /** @var \GettextTranslator\Gettext */
  protected $translator;


  /**
   * @param \GettextTranslator\Gettext
   */
  public function injectTranslator(GettextTranslator\Gettext $translator)
  {
    $this->translator = $translator;
  }


  public function createTemplate($class = NULL)
  {
    $template = parent::createTemplate($class);

    // if not set, the default language will be used
    if (!isset($this->lang)) 
    {
      $this->lang = $this->translator->getLang();
    } 
    else 
    {
       $this->translator->setLang($this->lang);
    }

    $template->setTranslator($this->translator);

    return $template;
  }
}

更改语言,例如在 @template.latte 中

Choose language:
<a n:href="this, lang => en">English</a>
<a n:href="this, lang => cs">Česky</a>

如何翻译字符串

在模板中

{_"Login"}

{_"piece", $number}
1 piece <!-- $number = 1; -->
2 pieces <!-- $number = 2; -->
5 pieces <!-- $number = 5; -->

在表单中

protected function createComponentMyForm()
{
  $form = new Form;
  $form->setTranslator($this->translator);

  // ...

  return $form;
}

在组件中

public function createTemplate($class = NULL)
{
  $template = parent::createTemplate($class);
  $template->setTranslator($this->parent->translator); // $translator in presenter has to be public
  // or $this->translator via construct/inject

  return $template;
}

在闪存消息中

<div n:foreach="$flashes AS $flash" class="alert {$flash->type} fade in">
  <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
  {!_$flash->message}
</div>

作者

积极开发中

  • Adam Schubert

之前由

New BSD 许可证