bckp / translator-nette
bckp/translator-core 的 Nette 扩展
v1.0
2019-06-03 08:14 UTC
Requires
- php: >=7.1.0
- bckp/translator-core: ^1.0.1
- nette/application: ^3.0
- nette/di: ^3.0
- nette/http: ^3.0
Requires (Dev)
- nette/tester: ^2.2
- phpstan/phpstan-shim: ^0.11
- tracy/tracy: ^2.6
Suggests
- tracy/tracy: For panel support
This package is auto-updated.
Last update: 2024-08-29 03:10:45 UTC
README
简单快速的 PHP 翻译器
使用方法
安装 bckp/translator-nette 的最佳方式是使用 Composer
$ composer require bckp/translator-nette
配置
在你的 nette 配置中,添加扩展并设置临时目录
extensions: translator: Bckp\Translator\Nette\Bridges\TranslatorExtension(%tempDir%/translator)
并设置翻译器本身
translator: languages: - cs #Language codes path: - %appDir%/Locale # Where to search for language file resolver: true # Use resolver to get proper language? debugger: %debugMode%
翻译器将会在路径中查找所有文件,并将它们映射到 DI。如果调试器开启,它将在每次请求时检查是否有文件被修改,并重新构建所有语言文件(仅需要的文件)。
命名约定
所有语言文件都应该使用 Neon 格式,正确的命名方式是:{module}.{langCode}.neon
翻译文件格式
翻译文件使用 NEON 格式编写。复数字符串使用 ARRAY,否则使用 STRING。
welcome: 'Vítejte' withArgs: 'Ahoj, já jsem %s, přeji krásné %s' withArgsRev: 'Krásné %2$s, já jsem %1$s' plural: zero: 'žádný člověk' one: 'jeden člověk' few: '%d lidé' other: '%d lidí' next: 'This is next translation'
翻译
翻译器将在 onStartup 部分自动注册到所有使用 TranslatorAwareTrait 的 Presenters,甚至在 onRender 部分自动注册到模板。
<?php class Presenter extends Nette\Application\UI\Presenter { use TranslatorAwarePresenter; // this comes with translator extension }
在 Presenters 中翻译
$changes = $this->model->doSomeChanges(); $this->flashMessage($this->translator->translate(['messages.flash.success', $changes], $changes)); $form->addError($this->translator->translate('messages.error.form.empty'));
如果你想使用快捷方式,可以定义自己的 translate 方法,如下所示
class Presenter extends Nette\Application\UI\Presenter { use TranslatorAwarePresenter; // this comes with translator extension public function translate($message, ...$params){ $this->translator->translate($message, ...$params); } public function renderTest(){ $message = $this->translate('messages.test'); } }
在模板中翻译
在模板中,你可以使用正常的 Latte 方法,因此翻译非常简单
<div>{_'messages.test'}</div>
你传递给 translate 的每个参数都会在 Bckp\Translator 内部传递给 sprintf,因此你可以在 neon 翻译格式中添加顺序。
查看 (https://doc.nette.org/en/3.0/localization) 了解更多有关翻译的信息
查看 (https://github.com/bckp/translator-core) 了解更多有关 Bckp\Translate-core 的信息