External HubSpot form: localized consent language and DACH DOI handling across Umbraco pages

We are embedding a HubSpot consent form on external Umbraco pages.

Our setup: - 8 brand websites + one global website, 19 localized Umbraco page routes, OneTremco Updates as a shared HubSpot subscription type, One canonical consent model, our CRM supplier manages the Umbraco integration. They currently injects brand, country, and language into hidden fields on 19 existing general contact forms in 8 brand websites using JavaScript (country, brand, language).

We need the embedded HubSpot form to display the correct language for: - processing-consent text; - consent-to-communicate text; - OneTremco Updates subscription text; - Marketing Information subscription text; and - double opt-in communications only for the DACH region.

Please confirm:

1. How does an embedded HubSpot form on an external page determine its language?

2. Can the Umbraco page language be passed to the embedded form through supported embed-code configuration, URL parameters, or another supported method?

3. Can one form dynamically display the correct localized consent and subscription text on external pages?

4. If not, should our CRM supplier select a separate HubSpot form variant for each language?

5. Can the same subscription type be used across all language-specific form variants?

6. Can DACH forms require DOI while non-DACH forms do not?

7. Does DOI apply to the form globally wherever it is embedded, or can it be controlled per external page/form instance?

8. What is the supported implementation pattern for an external Umbraco site rather than HubSpot-hosted pages?

Please focus on the supported HubSpot embed behavior. We understand that Umbraco page routing and Quba JavaScript implementation are custom development questions.

Hi @SyN-Thmn and Happy Friday!

Great questions, thanks for asking the HubSpot Community!

Here’s how the supported HubSpot embed behavior applies:

1. How does an embedded form determine language?
It doesn’t auto-detect the page’s language. The embed code accepts a locale parameter that sets the language for built-in validation messages, date pickers, and field labels, not the form’s own content (consent text, subscription text, submit button). Here is the documentation about it: Form embed configuration

2. Can Umbraco page language be passed to the embed?
Yes, for the technical embed pieces: locale (built-in translations) and translations (custom overrides for labels/messages) can be set dynamically in the hbspt.forms.create() call, e.g. populated by your CRM supplier’s existing JS that already injects brand/country/language. However, this only affects field labels, validation, and submit text, not consent/subscription checkbox text, which lives in the form’s legal consent configuration itself.

3. Can one form dynamically display correct localized consent/subscription text per page?
Not via documented embed parameters. Consent text (consentToProcessText, communicationConsentText, checkbox labels/subscription text) is configured as static content on the form definition itself, not passed or overridden through embed code, locale, or URL parameters.

4. Should your supplier use a separate form per language?
Given #3, yes, since consent text is static per form, you need one form variant per language (matching your existing pattern of 19 localized page routes → 19 form instances), each with its own consent/subscription text authored in that language.

5. Can the same subscription type be reused across language variants?
Yes, subscription types (like OneTremco Updates) are account-level definitions referenced by subscriptionTypeId/subscriptionId in a form’s legalConsentOptions.communicationsCheckboxes. Multiple forms (one per language) can reference the same subscription type ID while displaying different translated checkbox text.

6. Can DACH forms require DOI while others don’t?
Double opt-in is configured against subscription types/definitions (LANGUAGE_NOT_CONFIGURED errors reference language settings per subscription type), not against individual forms. Let me double check on the per-form DOI override, in the documentation I didn’t find a reference about a per-form-instance DOI flag.

7. Does DOI apply globally or per instance?
The DOI/confirmation behavior is tied to the subscription type/definition, which is account-wide, I could not find a documented mechanism to scope DOI to specific external pages or specific form instances only. If DACH needs different DOI behavior than non-DACH while sharing “OneTremco Updates,” your supplier would likely need a separate DACH-specific subscription type (or separate form-to-subscription mapping) rather than relying on per-instance control, but let me double check on this.

8. Supported implementation pattern for external Umbraco pages:
You can use the documented external/raw-HTML embed pattern: load //js.hsforms.net/forms/embed/v2.js, then call hbspt.forms.create({ portalId, formId, region, target, locale, translations, ... }) per page, one formId per language/consent variant, with your supplier’s existing JS populating hidden fields and setting locale/target dynamically. Self-hosting or copying the embed HTML outside this pattern isn’t supported. Here is more information on this: Form embed configuration

Now, let’s also consult our Top Experts: Hi @Anton, @evaldas and @SteveHTM do you have additional insights or helpful tips to share with @SyN-Thmn, please?

Thanks so much and have a wonderful weekend!
Bérangère

This post was created with the assistance of AI tools

Hi @SyN-Thmn, I wanted to get back to you on this, thanks for your patience!

Regarding the points 6 and 7, yes, DACH forms can require double opt-in while non-DACH forms do not. HubSpot lets you enable double opt-in on a per-form basis.

However, double opt-in applies at the form level, not per embed instance. If you embed the same form on both DACH and non-DACH pages, the DOI setting travels with the form. You’ll need at least two separate forms, one with DOI enabled for DACH pages, one without for other regions.

I hope this helps!

Have a fantastice day!
Bérangère