bckp/translator-nette

bckp/translator-core 的 Nette 扩展

v1.0 2019-06-03 08:14 UTC

This package is auto-updated.

Last update: 2024-08-29 03:10:45 UTC


README

Downloads this Month Build Status Coverage Status Scrutinizer Code Quality Latest Stable Version License

简单快速的 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 的信息