Skip to main content

Grouping and i18n

This page explains two important features that make template editors easier for users:

  • Grouping fields into tabs
  • Internationalizing template titles, labels, and descriptions

These features are especially useful once a template has more than a handful of fields.

Why Group Fields​

Without grouping, every field appears in one long list.

That is fine for a very small template, but it becomes harder to use when a template includes:

  • content fields
  • appearance settings
  • animation settings
  • file pickers
  • repeated lists

Grouping lets you split those into clear sections so users can find what they need quickly.

How Grouping Works​

Grouping uses two parts:

  1. a root-level list of groups
  2. a per-field group assignment

Root Groups​

Define groups at the root with gddOptions.groups:

"gddOptions": {
"groups": [
{ "id": "content", "label": { "en": "Content" } },
{ "id": "appearance", "label": { "en": "Appearance" } },
{ "id": "timing", "label": { "en": "Timing" } }
]
}

Each group needs:

  • an id
  • a label

Field Assignment​

Assign a field to a group with gddOptions.group:

"headline": {
"type": "string",
"label": "Headline",
"gddOptions": {
"group": "content"
}
}

The field's group value must match one of the group IDs from the root.

What Users See in 7CG​

When grouping is configured correctly:

  • grouped fields appear in tabs
  • each tab shows only the fields assigned to that group
  • ungrouped fields appear in a fallback Other tab

Tabs only appear when 7CG finds real grouped fields. If groups are defined but no fields use them, the editor falls back to a normal flat list.

Good Grouping Patterns​

Pattern: Content + Appearance​

This is the best general-purpose pattern for many graphics.

  • content for text, names, titles, and body copy
  • appearance for colors, logos, backgrounds, and style choices

Pattern: Content + Style + Timing​

Useful for more advanced animated templates.

  • content for the message itself
  • style for colors and layout
  • timing for durations, delays, and animation speeds

Pattern: Main + Advanced​

Useful when most operators only need a few fields.

  • main for the common controls
  • advanced for less frequently changed options

Grouping Example​

{
"$schema": "https://superflytv.github.io/GraphicsDataDefinition/gdd-meta-schema/v1/schema.json",
"title": "Grouped Lower Third",
"type": "object",
"gddOptions": {
"groups": [
{ "id": "content", "label": { "en": "Content" } },
{ "id": "appearance", "label": { "en": "Appearance" } }
]
},
"properties": {
"line1": {
"type": "string",
"label": "Line 1",
"gddOptions": { "group": "content" }
},
"line2": {
"type": "string",
"label": "Line 2",
"gddOptions": { "group": "content" }
},
"textColor": {
"type": "string",
"label": "Text Color",
"gddType": "color-rrggbb",
"gddOptions": { "group": "appearance" }
},
"backgroundColor": {
"type": "string",
"label": "Background Color",
"gddType": "color-rrggbb",
"gddOptions": { "group": "appearance" }
}
}
}

Why i18n Matters​

7CG can show translated text in the editor instead of forcing every user to read the default language.

This improves:

  • template picker titles
  • field labels
  • field help text

It is especially useful in shared environments where operators use different UI languages.

What Can Be Translated​

7CG supports translated values for:

  • template title
  • field label
  • field description

Field-Level i18n​

Use gddOptions.i18n inside the field definition:

"speakerName": {
"type": "string",
"label": "Speaker Name",
"description": "Name shown on screen",
"gddOptions": {
"i18n": {
"label": {
"en": "Speaker Name",
"pt": "Nome do Orador",
"es": "Nombre del Ponente"
},
"description": {
"en": "Name shown on screen",
"pt": "Nome mostrado no ecrã",
"es": "Nombre mostrado en pantalla"
}
}
}
}

Template-Level i18n​

You can also translate the template title:

{
"title": "Speaker Graphic",
"gddOptions": {
"i18n": {
"title": {
"en": "Speaker Graphic",
"pt": "Gráfico do Orador",
"es": "Gráfico del Ponente"
}
}
}
}

This affects how the template appears in 7CG pickers and module dropdowns.

Fallback Behavior​

7CG resolves translated text in this order:

  1. current UI language
  2. English
  3. default field value in the schema

That means:

  • you do not need to translate every language immediately
  • English is a useful shared fallback
  • the template still works even when translations are incomplete

label vs description​

Keep these roles separate:

  • label is the visible field name
  • description is help text

Good pattern:

"speed": {
"type": "number",
"label": "Scroll Speed",
"description": "Higher values make the credits move faster"
}

This gives users a short field title plus helpful context.

Best Practices​

  • Group only when it genuinely improves navigation
  • Keep group labels short and obvious
  • Put the most commonly edited fields in the first tab
  • Use label for concise field names and description for guidance
  • Add at least English fallback values even if your main language is different
  • Keep translated wording consistent across related templates

Common Mistakes​

Group IDs Do Not Match​

If a field references a group ID that does not exist in the root group list, that field will not behave as expected.

Over-Grouping Small Templates​

If a template has only a few fields, tabs can make it feel more complex instead of simpler.

Putting Long Instructions in label​

Long labels make the editor harder to scan. Use description for extra explanation.

Missing English Fallback​

Even if your main audience is not English-speaking, English is still a helpful fallback in mixed environments.

Practical Testing Checklist​

When testing grouping and i18n in 7CG, confirm that:

  • the expected tabs appear
  • the fields are in the correct tabs
  • ungrouped fields appear under Other when grouping is active
  • template titles display in the expected language
  • field labels display in the expected language
  • help text falls back cleanly when a translation is missing

Next Steps​