devture / symfony-translation-bundle
Symfony 扩展包,允许 .json 文件在多种语言之间进行翻译。
Requires
- php: >=7.1
- symfony/framework-bundle: >=6.0,<7.0-dev
- symfony/translation: ^5.0 || ^6.0
README
用于管理实际 Web 应用程序内 Symfony 扩展包翻译文件的 Web UI。
这是与同名 Silex 扩展包的移植版本: devture/silex-translation-bundle
在给定的基础目录列表中查找所有源语言文件(例如: messages.en.json
,another-domain.en.json
),并允许这些文件翻译为所有指定的语言。
每当保存翻译时,都会为每个区域生成并保存一个 {translationDomain}.{targetLanguage}.json
文件,并将其保存在 {translationDomain}{sourceLanguage}.json
旁边。
同样,也会在同一个目录下保存一个 {translationDomain}{targetLanguage}.hash.json
文件。它包含“提示”信息,告诉翻译系统某个翻译是从哪个源翻译字符串派生出来的。这样,如果源翻译字符串发生变化,翻译可以被视为过时。在这种情况下,过时的翻译在 Web UI 中会自动标记为未翻译(也就是说,它们不会标记为“已翻译但过时”,而是简单地标记为“未翻译”)。
安装
通过 composer 安装(composer require --dev devture/symfony-translation-bundle
)。
添加到 config/bundles.php
Devture\Bundle\TranslationBundle\DevtureTranslationBundle::class => ['dev' => true],
权限
由于翻译系统需要在项目中保存翻译文件,我们需要授予 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
配置
您可能只想在开发(dev
)环境中激活此扩展包。因此,您可以在 config/packages/dev/devture_translation.yaml
中放置以下路由配置
devture_translation: source_language_locale_key: en paths_to_translate: - "%kernel.project_dir%/src" - "%kernel.project_dir%/translations" locales: - {"key": "en", "name": "English"} - {"key": "ja", "name": "Japanese"} twig_layout_path: "base.html.twig"
locales
需要包含翻译系统应激活的所有语言(包括源语言)。
在 paths_to_translate
中可以指定多个路径。每个路径都会扫描匹配以下模式的文件:*/translations/<some translation domain>.<source_language_locale_key>.json
。
twig_layout_path
是您的布局文件路径,其中将包含翻译系统。唯一的要求是它定义了一个 content
块。翻译系统将在其中渲染。
示例布局文件
<!doctype html> <html> <body> <h1>Website</h1> {% block content %}{% endblock %} </body> </html>
路由示例
您可能只想在开发(dev
)环境中激活此扩展包。因此,您可以在 config/routes/dev/DevtureTranslationBundle.yaml
中放置以下路由配置
DevtureTranslationBundleWebsite: prefix: /{_locale}/translation resource: "@DevtureTranslationBundle/Resources/config/routes/website.yaml" requirements: _locale: "en|ja"
Web UI 可在 devture_translation.manage
路由中访问。
样式
此扩展包依赖于 Bootstrap v4 进行样式。除非您安装并包含它(在您的 twig_layout_path
模板中的某个位置),否则事物看起来会很丑。
此外,您还可以通过在布局或 CSS 文件中包含每个语言的标志图标来使页面看起来更漂亮。
<style> .devture-translation-flag { border: 1px solid #dbdbdb; width: 20px; height: 13px; display: inline-block; vertical-align: text-top; } .devture-translation-flag.en { background: url('/images/flag/en_US.png') no-repeat; } .devture-translation-flag..ja { background: url('/images/flag/ja_JP.png') no-repeat; } </style>