【问题标题】:How do you translate EXT:Form forms in TYPO3 CMS 8.7 LTS?您如何在 TYPO3 CMS 8.7 LTS 中翻译 EXT:Form 表单?
【发布时间】:2025-12-12 04:50:01
【问题描述】:

我是 TYPO3 的新手,从 8.7 LTS 开始。我创建了几个带有默认“表单”扩展名的表单。我的网站要求将其中一些表格翻译成最多 5 种其他语言。到目前为止,我找到的唯一解决方案是复制表格,然后为每个翻译设置一个单独的表格,但这似乎不是最好的解决方案,因为从长远来看它会导致表格分歧。

是否可以直接在 YAML 文件中添加替代翻译或指向应使用的翻译文件?

【问题讨论】:

    标签: forms typo3 translation typo3-extensions


    【解决方案1】:

    这是一个例子,就像我在页面上使用的那样:

    对于前端翻译,将此添加到您的排版设置中:

    plugin.tx_form {
      settings {
        yamlConfigurations {
            100 = EXT:my_site_package/Configuration/Yaml/CustomFormSetup.yaml
        }
      }
    }
    

    “my_site_package”必须是现有且已激活的 TYPO3 扩展程序

    然后在my_site_package/Configuration/Yaml/CustomFormSetup.yaml下制作一个yaml文件

    TYPO3:
      CMS:
        Form:
          prototypes:
            standard:
              formElementsDefinition:
                Form:
                  renderingOptions:
                    translation:
                      translationFile:
                        # default translation files for the frontend
                        10: 'EXT:form/Resources/Private/Language/locallang.xlf'
                        20: 'EXT:my_site_package/Resources/Private/Language/locallang.xlf'
    

    并且在 my_site_package/Resources/Private/Language 中有一些翻译文件

    默认(英文):my_site_package/Resources/Private/Language/locallang.xlf

    <?xml version="1.0" encoding="UTF-8"?>
    <xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
        <file source-language="en" datatype="plaintext" original="messages" product-name="tamods">
            <header/>
            <body>
                <trans-unit id="ticketbestellung.element.objekt.properties.label" xml:space="preserve">
                    <source>Object</source>
                </trans-unit>
            </body>
        </file>
    </xliff>
    

    德语(de):my_site_package/Resources/Private/Language/de.locallang.xlf

    <?xml version="1.0" encoding="UTF-8"?>
    <xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
        <file source-language="en" target-language="de" datatype="plaintext" original="messages" product-name="tamods">
            <header/>
            <body>
                <trans-unit id="ticketbestellung.element.objekt.properties.label" xml:space="preserve">
                    <target>Objekt</target>
                </trans-unit>
            </body>
        </file>
    </xliff>
    

    德语(fr):my_site_package/Resources/Private/Language/fr.locallang.xlf

    <?xml version="1.0" encoding="UTF-8"?>
    <xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
        <file source-language="en" target-language="fr" datatype="plaintext" original="messages" product-name="tamods">
            <header/>
            <body>
                <trans-unit id="ticketbestellung.element.objekt.properties.label" xml:space="preserve">
                    <target>Objet</target>
                </trans-unit>
            </body>
        </file>
    </xliff>
    

    这是我使用的表单中的 yaml:

    renderingOptions:
      submitButtonLabel: Senden
    type: Form
    identifier: ticketbestellung
    label: Ticketbestellung
    prototypeName: standard
    renderables:
      -
        renderingOptions:
          previousButtonLabel: 'previous Step'
          nextButtonLabel: 'next Step'
        type: Page
        identifier: page-1
        label: Page
        renderables:
          -
            defaultValue: ''
            type: Text
            identifier: objekt
            label: Objekt
            properties:
              fluidAdditionalAttributes:
                placeholder: Objekt
                required: required
            validators:
              -
                identifier: NotEmpty
    

    一些翻译键,很难找到:

    提交按钮

    element.Form.renderingOptions.submitButtonLabel element.ticketbestellung.renderingOptions.submitButtonLabel

    用于电子邮件整理器中的主题

    finisher.Email.subject(解决方法,在版本 8.7.5 之前也可以使用)

    finisher.EmailToReceiver.subject(应该是解决方案was buggy till Version 8.7.5

    如果没有 TYPO3 Slack 中 manuel-selbach 的帮助,这个答案是不可能的。

    【讨论】:

    • 太棒了:我努力寻找 submitButton 和 Finisher!
    【解决方案2】:

    TYPO3 CMS 8 LTS 引入的新表单框架有一个(正在进行的工作)文档。

    您可以在此处找到翻译文档: https://docs.typo3.org/typo3cms/drafts/code.tritum.de/TYPO3.CMS/Form_Documentation/Concepts/FrontendRendering/Index.html#translation

    以下是注册此文件的方法: https://docs.typo3.org/typo3cms/drafts/code.tritum.de/TYPO3.CMS/Form_Documentation/Concepts/Configuration/Index.html#yaml-registration

    您可以在此处找到有关“什么是站点包”的信息: https://de.slideshare.net/benjaminkott/typo3-the-anatomy-of-sitepackages

    您可以在此处找到有关扩展架构的更多信息: https://docs.typo3.org/typo3cms/CoreApiReference/ExtensionArchitecture/Index.html

    大部分表单文档(第一个和第二个链接)已经翻译成英文,但有些部分仍然是德文。

    我知道要读的东西很多,但是读完之后你就会对“如何用 TYPO3 建立网站(并翻译表格)有一个基本的了解。

    【讨论】:

    • 谢谢。与 TYPO3 的大部分文档一样,本文档似乎是由已经非常熟悉该系统的人编写的,并且是为那些已经非常熟悉该系统的人编写的。它提到添加一个指向您自己的翻译文件的密钥: 20: 'EXT:my_site_package/Resources/Private/Language/locallang.xlf' 但是该文档没有提到包含密钥的配置文件在文件系统中的位置或位置XLF 将被定位。似乎也缺少对 XLF 文件的描述或链接,让读者尝试找到此版本 TYPO3 的正确文档。
    • 我添加了更多包含背景信息的链接。希望这会对您有所帮助。
    【解决方案3】:
    <?xml version="1.0" encoding="UTF-8"?>
    <xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
        <file source-language="en" target-language="fr" datatype="plaintext" original="messages" product-name="tamods">
            <header/>
            <body>
                <trans-unit id="ticketbestellung.element.objekt.properties.label" xml:space="preserve">
                    <source>Object</source>
                    <target>Objet</target>
                </trans-unit>
            </body>
        </file>
    </xliff>
    

    【讨论】:

    • 标签是必需的 ... ObjectObjet ...
    • 请不要发布仅代码的答案。相反,解释它为什么有帮助,并提供一个指向上下文来源的链接。我们正在努力进行教育,而不仅仅是解决眼前的问题。
    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center