Skip to main content

Translations

Every user-facing string supports unlimited languages via I18nString.

I18nString Type

type I18nString = Record<string, string>;

// Example
{
  en: "Full Name",
  es: "Nombre Completo",
  zh: "全名"
}

Translation Workflow

  1. Create form in English — Primary language
  2. Add languages — In form settings
  3. Translate — Auto or manual
  4. Review — Check translations

DeepL Auto-Translation

Click the sparkle button to auto-translate:
async function translateField(
  text: string,
  from: string,
  to: string
): Promise<string> {
  const response = await deepl.translateText(text, from, to);
  return response.text;
}
Supported languages: English, Spanish, Chinese, French, German, Portuguese, Russian, Japanese, Korean, Arabic, and 20+ more.

Manual Translation

For unsupported languages or custom translations:
  1. Export to CSV
  2. Translate externally
  3. Import updated CSV

Language Switcher

Forms include a language dropdown:
{
  type: "language_preference",
  id: "lang-pref",
  label: { en: "Preferred Language" },
  showNativeNames: true,  // "Español" not "Spanish"
  showFlags: true
}

Runtime Switching

Applicants can switch languages mid-form. All labels, placeholders, and error messages update instantly.