devture/silex-translation-bundle

Silex 扩展包,允许.json文件在多种语言之间进行翻译。

3.0 2017-03-17 18:14 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:42:21 UTC


README

在指定的基础目录(base_path)中查找所有{sourceLanguage}.json文件(例如:en.json),并允许这些文件翻译为所有指定的语言(locales)。

每当保存对该语言的翻译时,就会生成并保存一个{targetLanguage}.json文件,并保存在与{sourceLanguage}.json相同的目录中。

同一目录下还会保存一个{targetLanguage}.json.hash文件。它包含“提示”信息,告诉翻译系统给定翻译是从哪个源翻译字符串派生出来的。这样,如果源翻译字符串发生变化,则可以认为翻译已过时。在此时刻,这样的过时翻译被视为新的且未翻译的。

安装

权限

由于翻译系统需要将翻译文件保存到项目中,我们需要授予Web服务器用户文件写入权限。

示例

$ find /srv/http/my-project/src -type d -name translations | xargs chown :http
$ find /srv/http/my-project/src -type d -name translations | xargs chmod g+w

配置

TranslationBundle 配置

"TranslationBundle": {
	"source_language_locale_key": "en",
	"base_path": "%app_base_path%",
	"locales": "%locales%"
}

TranslationBundle 配置示例

"TranslationBundle": {
	"source_language_locale_key": "en",
	"base_path": "/srv/http/my-project/src",
	"locales": {
		"en": {"key": "en", "name": "English"},
		"bg": {"key": "bg", "name": "Bulgarian"},
		"ja": {"key": "ja", "name": "Japanese"}
	}
}

初始化

仅在调试期间设置,以保护生产环境

if ($app['debug']) {
	$app->register(new \Devture\Bundle\TranslationBundle\ServicesProvider('devture_translation', $app['config']['TranslationBundle']));
	$app->mount('/admin/{locale}/translation/', $app['devture_translation.controllers_provider.management']);
	$app['devture_user.access_control']->requireRoleForRoutePrefix('devture_translation.', 'devture_translation');
}

主路由将是 devture_translation.manage(假设使用了与上面相同的 devture_translation 命名空间)。