sitegeist/translatelabels

此扩展通过允许后端用户编辑的翻译记录扩展了TYPO3的翻译处理。这样,后端用户可以在不访问语言文件的情况下翻译标签。

安装: 27,959

依赖: 0

建议: 0

安全: 0

星标: 3

关注者: 5

分支: 8

开放问题: 12

类型:typo3-cms-extension


README

目的

此扩展通过允许后端用户编辑的翻译记录扩展了TYPO3的翻译处理。这样,后端用户可以在不访问语言文件的情况下翻译标签。

此扩展还可以用于翻译使用表单编辑器创建的表单。

在前端,标签下面有红色下划线。鼠标悬停时显示一个包含其名称的工具提示。单击标签名称将在管理面板中打开新的翻译模块以编辑标签的翻译。

此外,您还可以在管理面板的新模块中找到一个第二个选项卡,它显示了当前页面上找到的所有标签,并列出了相应的语言文件,以及最终存在的覆盖或翻译记录。

这个视图对开发者特别有趣。

作者与赞助商

此包的开发和公共发布得到了我的雇主https://www.sitegeist.de的大力赞助。

屏幕截图

前端视图

Frontend view

管理面板中的翻译模块,支持行内编辑

Translation module in admin panel

管理面板中的翻译模块,显示标签继承视图

Translation module in admin panel

支持的TYPO3版本

  • 此扩展的1.x版本支持TYPO3 9.5。
  • 此扩展的2.0版本支持TYPO3 10。
  • 此扩展的2.1版本支持TYPO3 11。

如何安装

  • 安装扩展并在扩展管理器或通过composer激活它

    • 对于TYPO3 9.5
      composer require sitegeist/translatelabels:^1
      
    • 从TYPO3 10.0开始
      composer require sitegeist/translatelabels
      
  • 然后转到管理面板扩展管理器,并在“已安装扩展”中加载扩展。

  • 使用BE模块“维护/分析数据库结构”更新您的数据库。

  • 在TYPO3后端创建一个sysfolder来存储翻译的标签。

  • 为您的网站每个网站语言创建此sysfolder的本地化。

  • 将扩展模板translate_labels包含到您的根TYPOSCRIPT模板中。

如何配置

将以下TYPOSCRIPT添加到您的模板中

plugin.tx_translatelabels.settings.storagePid = 4711

4711替换为您为翻译标签创建的sysfolder的uid。

请注意,此设置必须为使用此扩展的所有页面以及包含翻译记录的所有sysfolder定义。

TYPO3版本9.5和10.1所需的TYPO3补丁

由于尚未修复的TYPO3 9.5.9和TYPO3 10.1中的错误https://forge.typo3.org/issues/87038,您目前必须对您的TYPO3源代码应用补丁。

使用问题附件中附带的您TYPO3版本的最新补丁集。

或者,您可以使用此扩展中包含的补丁以方便起见。

应用补丁的快速指南

应用补丁到TYPO3源代码的说明(德语)

没有此补丁,TYPO3无法创建与默认语言中相关记录相同的键的标签记录的翻译。

变更日志

如何激活BE用户

  1. 启用BE用户的admin面板。 1.1 在User TSconfig中设置admPanel.enable.all = 1admPanel.enable.translatelabels = 1 1.2 在TypoScript模板中设置config.admPanel = 1
  2. 登录BE,然后打开FE。
  3. 点击管理面板右下角的“设置”。
  4. 在设置中激活“显示翻译标签”,然后点击“更新设置”。
  5. 之后,您将在前端看到所有标签下方带有红色虚线,并显示包含语言文件链接和标签键的工具提示。
  6. 此外,您将在“翻译标签”选项卡中看到当前页面在管理面板中使用的所有标签列表。

翻译标签的访问权限

允许创建和编辑翻译的后端用户需要具备...

  • 读取和写入翻译sys文件夹中记录的访问权限(在BE模块访问中设置)
  • BE用户或组对表Translation的列表和修改记录的权限(在BE模块Backend-User中设置)
  • 访问默认语言以及他们要翻译标签的所有语言的权限。(在BE模块Backend-User中设置)

内部实现

该扩展覆盖了f:translate fluid视图助手,并为每个标签渲染一个标签LLL:("<translation>","<key>")(只有当您以BE用户身份登录时,否则标签将按常规渲染)。

在完成前端渲染的所有处理后,LLL:标签将转换为HTML标记,以在每个标签下方显示红色虚线,并显示包含语言文件和标签键的工具提示。这也仅在以BE用户身份登录时发生。

表单框架

此扩展可用于翻译使用表单编辑器创建的表单,包括验证消息、标签、占位符、描述等。因此,此扩展覆盖了表单框架的以下两个视图助手

  • formvh:translateElementProperty
  • formvh:translateElementError

表单框架使用特殊链式翻译来处理元素。有关更多信息,请参阅:https://docs.typo3.org/c/typo3/cms-form/9.5/en-us/Concepts/FrontendRendering/Index.html#translation

此扩展实现了一种简化的覆盖这些翻译的方法:您只能使用路径<formDefinitionIdentifier>.element.<elementIdentifier>.properties.<propertyName>覆盖元素的特定翻译。

示例

  • 表单字段的标签翻译
    • registerForm.element.first-name.properties.label
  • 表单字段描述的翻译
    • registerForm.element.first-name.properties.description
  • 单选按钮中值value1的选项翻译
    • registerForm.element.radiobutton-1.properties.options.value1
  • 多选复选框中值Second的选项翻译
    • register.element.multicheckbox-1.properties.options.Second
  • 占位符属性的翻译
    • registerForm.element.text-1.properties.fluidAdditionalAttributes.placeholder

如果数据库中定义了元素的翻译,则此翻译将始终优先于在语言文件中定义的其他翻译,无论表单框架中定义的链式优先级如何。

此行为在未来可能会改变。

表单框架中的验证消息

如果表单编辑器中定义了自定义错误消息,则仅使用这些消息进行所有语言的翻译,不会发生翻译链。这是表单框架的默认行为。

使用此扩展可以覆盖这些静态值。

示例

  • registerForm.validation.error.text-2.1428504122

缓存

此扩展完全兼容TYPO3缓存机制。

如果管理面板中激活了翻译标签,则禁用缓存。这是因为否则显示翻译标签的标记将被缓存,并以内容的形式提供给所有前端用户,而不仅仅是登录为后端用户的前端用户。

旧的pi_base插件

由于API限制,无法扩展基于AbstractPlugin(即pi_base插件)的旧语言处理插件。相反,每个继承类都必须通过xclass直接扩展。这种扩展在插件fe_login的Classes/Plugin/FrontendLoginController.php中提供了一个示例。

您可以使用以下代码在ext_localconf.php中覆盖其他pi_base插件:

$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\\CMS\\Felogin\\Controller\\FrontendLoginController'] = array(
    'className' => 'Sitegeist\\Translatelabels\\Plugin\\FrontendLoginController'
);

覆盖语言文件的示例

ext_localconf.php

// Examples for overriding language files

$overrideLanguageFiles = [
    'default' => [
        'EXT:felogin/Resources/Private/Language/locallang.xlf' => 'felogin/felogin.xlf'
    ],
    'de' => [
        'EXT:felogin/Resources/Private/Language/locallang.xlf' => 'felogin/de.felogin.xlf'
    ]
];

foreach ($overrideLanguageFiles as $language => $languageFiles) {
    foreach ($languageFiles as $originalLanguageFile => $overrideLanguageFile) {
        $GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'][$language][$originalLanguageFile][] =
            'EXT:my_extension/Resources/Private/Language/Overrides/' . $overrideLanguageFile;
    }
}

请注意,应将my_extension替换为您的扩展密钥。

运行单元测试

$ cd typo3conf/ext/translatelabels
$ composer install
$ vendor/bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/UnitTests.xml Tests/Unit/Renderer/FrontendRendererTest.php