Skip to main content
Translatable content uses a language map per field and a resource-level defaultLanguage. Responses return stored translations. FITsociety does not generate translations or select a language based on request headers.

Supported resources

Read-only resources return their stored languages. Personal names, free-form notes, client answers and financial snapshots do not use this translation contract.

Writing translations

  • Create requires defaultLanguage. Use canonical BCP-47 language codes, such as nl, en, or en-GB; the calendar restriction above still applies.
  • Each text map accepts up to 25 languages. Codes are canonicalized; duplicate codes after canonicalization are rejected.
  • Every nonempty map must include defaultLanguage. Values must be nonempty strings; surrounding whitespace is removed. Field limits apply per language.
  • A supplied map replaces all translations for that field. Omitted PATCH fields retain their translations. Include the whole map when adding a language.
  • Optional text can be cleared with {}. Required text cannot be empty. Plain strings, null, arrays, empty translation strings and the input language code und are rejected.
  • A change of defaultLanguage requires the new language in all retained nonempty maps. It also changes the source text used for assignments and notifications.
  • Habit template reminders and form structure arrays follow their documented replacement rules. Include all required elements and their complete text maps.
For example, this request creates a bilingual single-session catalog item:
cURL

Legacy records and display fallback

When the source language is unknown, defaultLanguage is null. A legacy string is returned as { "und": "Original text" }; an empty string becomes {}. Existing maps retain their language codes. GET requests never write data or guess a language from the company or coach settings. The first Public API content update of a legacy form, habit template or product requires an explicit defaultLanguage to declare the language of retained source text. If the source text of a form, habit template or product changes through the coach dashboard, previous translations for that field are no longer returned. Unchanged source text retains its translations. Consumers can choose the requested language, then the declared default language, then und. If none exists, use an explicitly chosen stored language or your application’s missing-text treatment. Missing translations are absent keys; they are not copies of another language. The API does not perform this fallback on behalf of the consumer.