Skip to main content

UX Microcopy Writing Skill: Comprehensive Research Document

Production-Ready Skill: /jaan-to-ux-microcopy-write (logical: ux:microcopy-write)


1. Executive Summary

The UX microcopy writing skill generates complete microcopy packs—labels, helper text, errors, toasts, confirmations, empty states, and tone rules—across seven languages with Persian (فارسی) as the primary focus. This research establishes the frameworks, cultural norms, and technical architecture required for production-ready implementation.

Three critical findings emerged from this research. First, formality systems vary dramatically across target languages: Persian's شما/تو distinction, German's Sie/du divide, and Russian's Вы/ты system each require explicit handling. Second, text expansion rates demand flexible design—German expands 30-35% over English while Persian expands 10-25%, making rigid character limits problematic. Third, cultural tone expectations differ fundamentally: Russian favors direct, factual error messages without apologies, while Persian prefers formal apology patterns with warm professional tone.

The recommended approach combines industry-standard frameworks (Google Material Design, Apple HIG, Shopify Polaris) with language-specific tone matrices. The skill should generate microcopy organized by component type, with all five UI states (loading, empty, error, partial, success) pre-populated for each element. Native speaker validation remains essential—AI achieves only 88-92% accuracy on culturally-nuanced microcopy.

Key deliverables for implementation:

  • Structured microcopy pack schema with 11 component categories
  • Tone matrices for all 7 languages with formality selection criteria
  • ICU MessageFormat templates for pluralization (especially Russian's 3-form system)
  • RTL handling specifications for Persian and Tajik (Perso-Arabic script)
  • Quality validation checklists per language

2. Standards Reference

Industry frameworks establish consistent microcopy principles

The major design systems converge on four core principles for UX writing: concise (scannable segments, limited ideas), simple and direct (plain language, no jargon), purposeful (text complements design), and conversational (second person "you" preferred). These principles appear consistently across Google Material Design, Apple Human Interface Guidelines, Microsoft Fluent UI, IBM Carbon, and Shopify Polaris.

Google Material Design emphasizes sentence-style capitalization, numerals over words, and presenting information positively. The system explicitly states that when things break, the app takes responsibility—never blame users. Apple's Human Interface Guidelines add device-awareness requirements: writing adapts to screen size and context, with mobile favoring extreme brevity.

IBM Carbon Design System specifies sentences under 25 words and avoiding slang, jargon, sarcasm, and emoticons. The system permits contractions when they improve flow and reserves exclamation marks for positive messages only. Shopify Polaris goes further with its "weigh every word" principle—each word adds noise, so unnecessary content must be removed.

Required fields per microcopy category

Each microcopy type requires specific metadata for proper implementation:

Labels (field, button, navigation)

FieldDescription
label_textPrimary displayed text
label_typefield_label, button_label, navigation_label
character_limitMaximum characters (buttons: 1-3 words ideal)
capitalizationsentence_case (standard) or title_case
state_variationsdefault, hover, active, disabled, loading
accessibility_labelScreen reader text if different from visible

Error messages

FieldDescription
error_idUnique identifier
error_typeinline, form_level, system
triggerWhat causes error (empty, invalid_format, etc.)
message_textUser-facing message
recovery_instructionHow to fix (required)
severityerror, warning
a11y_announcementARIA live region text

Toast notifications

FieldDescription
notification_idUnique identifier
message_textPrimary message (1-2 lines maximum)
notification_typeinfo, success, warning, error
durationDisplay time in milliseconds (4000-10000 typical)
action_labelOptional action ("Undo", "View")
dismissibleCan user manually dismiss?
prioritylow, medium, high, urgent

Empty states

FieldDescription
state_typefirst_use, no_results, user_cleared, error
headlinePrimary message
descriptionExplanation and guidance
illustrationOptional visual asset reference
primary_ctaMain action to get started
secondary_ctaAlternative action

Confirmation dialogs

FieldDescription
dialog_typedestructive, informational, decision
titleClear description of action
body_textConsequences explanation
primary_actionAction verb label (not "OK")
primary_action_styledestructive/danger or standard
secondary_actionCancel/escape label
reversibilityCan this action be undone?

Professional certifications and foundational texts

UX Writing Hub offers the UX Writing Academy 2.0—an 8-week certification program covering core principles, product thinking, AI integration, and Figma workflows. UX Content Collective provides specialized certifications including Fundamentals of UX Writing, Microcopy, and Brand Voice & Tone.

The two foundational books for UX writing methodology are Torrey Podmajersky's Strategic Writing for UX (O'Reilly, 2019) and Kinneret Yifrah's Microcopy: The Complete Guide (2nd Edition, 2019). Podmajersky introduces the Content Matrix for tracking phrases consistently and the four quality criteria: purposeful, concise, conversational, and clear. Yifrah provides detailed patterns for every microcopy type with emphasis on voice/tone design methodology.


3. Methodologies & Techniques

The error message formula everyone should follow

The golden formula for error messages combines four elements: what happened + why it happened (if helpful) + how to fix it + what to do next. Write at 7-8th grade reading level, be concise AND precise, never blame the user, and frontload important content for scanning.

❌ Avoid✅ Use Instead
"Invalid input""Phone number should include area code (e.g., 555-123-4567)"
"Error: Password requirements not met""Password needs at least 8 characters with 1 number"
"Authentication failed""That password doesn't match. Try again or reset your password"
"Form not submitted. ERROR 1234""Please fill in the required Name field to submit"

Never use toast messages for form errors—users can't read and fix simultaneously. Place inline validation adjacent to the problematic field, highlight in error state, and use aria-describedby to connect the error message to the input for screen readers.

Toast duration and confirmation dialog best practices

Toast notification duration depends on content complexity:

Content TypeDurationAuto-dismiss?
Simple confirmation3 secondsYes
Longer message5 seconds maxYes
Contains link/actionPersistent until dismissedNo
Critical informationPersistentNo

Never stack toasts side-by-side—display sequentially in order of importance. Fixed width is essential; don't expand to fit content.

For confirmation dialogs, structure matters: title states action clearly ("Delete project?"), body explains consequences briefly, primary button uses action verb matching the title ("Delete"), secondary button provides safe exit ("Keep project", not generic "Cancel"). Reserve confirmation dialogs for rare or dangerous actions—overuse leads to confirmation fatigue.

Empty state formula: headline → motivation → CTA

Kinneret Yifrah's formula for empty states:

  1. Heading: What's happening ("You haven't set up any alerts yet")
  2. Motivation: Why this matters ("Alerts keep you updated so you won't miss important updates")
  3. CTA: Action to take ("Set up your first alert")

Four types require different approaches:

TypePurposeApproach
First-useOnboardingExplain purpose, show how to start, include CTA
User-clearedCompletionCelebrate ("Inbox zero!"), suggest what's next
No resultsSearch/filterExplain no results, suggest alternatives
Error stateSystem failureExplain problem, provide troubleshooting

Never leave empty states blank. Limit CTAs to 1-2 options (Hick's Law: more choices = slower decisions). Replace entire elements when empty—don't show empty tables with just headers.

Voice vs. tone: the critical distinction

Voice is your product's consistent personality—it doesn't change. Tone adapts to the user's emotional state and context. Mailchimp's style guide exemplifies this with four voice principles: plainspoken (clarity above all), genuine (warm, accessible), translators (demystify complexity), and dry humor (subtle, never condescending).

The key guideline: "Clarity over entertainment—don't sacrifice understanding for jokes." Consider the reader's emotional state before writing. Frustrated users encountering errors need empathy and solutions, not cleverness.


4. Transformation Process

From feature description to complete microcopy pack

The transformation follows six phases:

Phase 1: User Research

  • Create or review user personas for the feature
  • Map the complete user journey with all touchpoints
  • Identify emotional states at each interaction point

Phase 2: State Inventory

  • List all screens and components
  • For each, identify five states: Loading, Empty (first-use and ongoing), Error, Partial, Success
  • Document edge cases: permissions, network failures, partial data

Phase 3: Voice & Tone Calibration

  • Reference brand voice guidelines
  • Adjust tone per touchpoint based on user's likely emotional context
  • Apply language-specific formality rules

Phase 4: Draft Microcopy

  • Write 2-3 variations per state per component
  • Include: titles, body, buttons, helper text, error messages
  • Document character limits and constraints

Phase 5: Review & Test

  • Role-play interface as dialogue between user and system
  • Check if title + buttons make sense without body text (scanning test)
  • A/B test key variations where possible

Phase 6: Localization

  • Apply language-specific tone matrices
  • Account for text expansion (design for +35% minimum)
  • Native speaker review for cultural appropriateness

Component-to-microcopy mapping

ComponentMicrocopy Types Needed
ButtonsLabels, loading states ("Saving..."), disabled states
FormsField labels, placeholders, helper text, validation messages
CTAsAction labels, supporting copy ("No credit card required")
ModalsTitles, body copy, button labels
NotificationsAlert text, success/error messages
Empty statesExplanation + CTA
Loading statesProgress messaging
OnboardingWelcome messages, tutorials, guided tours

Worked Example 1: User registration feature

Input Feature Description: "Users can create an account with email and password. They receive a verification email and must confirm before accessing premium features."

State Inventory:

  • Form: default, field-focus, validation-error, submit-loading, submit-success
  • Email field: empty, valid, invalid-format, already-registered
  • Password field: empty, too-short, valid, strength-indicator
  • Submit button: default, loading, disabled (validation fails)
  • Post-submit: verification-pending, verification-success, verification-expired

Generated Microcopy Pack (English):

{
"registration": {
"page_title": "Create your account",
"form": {
"email": {
"label": "Email address",
"placeholder": "you@example.com",
"helper": "We'll send a verification link to this address",
"errors": {
"required": "Enter your email address",
"invalid_format": "Enter a valid email address (e.g., name@domain.com)",
"already_registered": "This email is already registered. Sign in instead?"
}
},
"password": {
"label": "Password",
"helper": "At least 8 characters with 1 number",
"errors": {
"required": "Create a password",
"too_short": "Password must be at least 8 characters",
"missing_number": "Include at least 1 number"
},
"strength": {
"weak": "Weak",
"fair": "Fair",
"strong": "Strong"
}
},
"submit": {
"default": "Create account",
"loading": "Creating account...",
"disabled_tooltip": "Fill in all required fields"
}
},
"success": {
"title": "Check your inbox",
"body": "We sent a verification link to {{email}}. Click the link to activate your account.",
"resend_cta": "Resend verification email"
},
"verification": {
"success": {
"title": "Email verified",
"body": "Your account is ready. Welcome aboard!",
"cta": "Go to dashboard"
},
"expired": {
"title": "Link expired",
"body": "This verification link has expired. Request a new one.",
"cta": "Send new link"
}
}
}
}

Persian (فارسی) Version:

{
"registration": {
"page_title": "ایجاد حساب کاربری",
"form": {
"email": {
"label": "آدرس ایمیل",
"placeholder": "you@example.com",
"helper": "لینک تأیید به این آدرس ارسال می‌شود",
"errors": {
"required": "آدرس ایمیل خود را وارد کنید",
"invalid_format": "یک آدرس ایمیل معتبر وارد کنید (مثلاً name@domain.com)",
"already_registered": "این ایمیل قبلاً ثبت شده است. می‌خواهید وارد شوید؟"
}
},
"password": {
"label": "رمز عبور",
"helper": "حداقل ۸ کاراکتر با ۱ عدد",
"errors": {
"required": "رمز عبور ایجاد کنید",
"too_short": "رمز عبور باید حداقل ۸ کاراکتر باشد",
"missing_number": "حداقل ۱ عدد اضافه کنید"
}
},
"submit": {
"default": "ایجاد حساب",
"loading": "در حال ایجاد حساب...",
"disabled_tooltip": "همه فیلدهای الزامی را پر کنید"
}
},
"success": {
"title": "ایمیل خود را بررسی کنید",
"body": "لینک تأیید به {{email}} ارسال شد. برای فعال‌سازی حساب، روی لینک کلیک کنید.",
"resend_cta": "ارسال مجدد ایمیل تأیید"
}
}
}

Worked Example 2: Shopping cart empty state

Input: "Display when user's cart has no items"

Generated Pack (multi-language):

LanguageHeadlineBodyCTA
EnglishYour cart is emptyFind something you'll love in our collectionStart shopping
Persianسبد خرید شما خالی استمحصولات محبوب را در مجموعه ما پیدا کنیدشروع خرید
TurkishSepetiniz boşKoleksiyonumuzda sevebileceğiniz bir şeyler bulunAlışverişe başla
GermanIhr Warenkorb ist leerEntdecken Sie unsere KollektionEinkauf starten
FrenchVotre panier est videDécouvrez notre collectionCommencer vos achats
RussianВаша корзина пустаНайдите что-нибудь интересное в нашей коллекцииНачать покупки

Worked Example 3: Payment error handling

Scenario: Credit card declined during checkout

English:

  • Title: Payment declined
  • Body: Your card was declined. Please check the card details or try a different payment method.
  • Primary CTA: Try again
  • Secondary CTA: Use different card

Persian:

  • Title: پرداخت انجام نشد
  • Body: کارت شما پذیرفته نشد. لطفاً اطلاعات کارت را بررسی کنید یا روش پرداخت دیگری امتحان کنید.
  • Primary CTA: تلاش مجدد
  • Secondary CTA: کارت دیگر

Russian (direct tone, no excessive apology):

  • Title: Платёж отклонён
  • Body: Карта отклонена. Проверьте данные карты или выберите другой способ оплаты.
  • Primary CTA: Повторить
  • Secondary CTA: Другая карта

Worked Example 4: File upload states

Complete state coverage:

StateEnglishPersian
DefaultDrag files here or browseفایل‌ها را اینجا بکشید یا انتخاب کنید
HoverDrop files to uploadفایل‌ها را رها کنید
UploadingUploading... {{progress}}%در حال آپلود... {{progress}}٪
SuccessUpload completeآپلود کامل شد
Error (size)File exceeds 10MB limitحجم فایل بیش از ۱۰ مگابایت است
Error (type)Only PDF, JPG, PNG allowedفقط فرمت‌های PDF، JPG، PNG مجاز است
Error (network)Upload failed. Check connection and try againآپلود انجام نشد. اتصال را بررسی کنید و دوباره تلاش کنید

Worked Example 5: Onboarding tooltip sequence

Feature: First-time user product tour for project management app

Step 1 - Create Project:

  • EN: "Start here! Create your first project to organize your work."
  • FA: "از اینجا شروع کنید! اولین پروژه خود را برای سازماندهی کارها ایجاد کنید."
  • CTA: "Create project" / "ایجاد پروژه"

Step 2 - Add Tasks:

  • EN: "Break your project into tasks. We'll help you track progress."
  • FA: "پروژه را به وظایف تقسیم کنید. ما به شما کمک می‌کنیم پیشرفت را پیگیری کنید."
  • CTA: "Add task" / "افزودن وظیفه"

Step 3 - Invite Team:

  • EN: "Work better together. Invite your team to collaborate."
  • FA: "بهتر با هم کار کنید. تیم خود را برای همکاری دعوت کنید."
  • CTA: "Invite team" / "دعوت تیم"

5. Template Recommendations

Proposed microcopy pack schema

interface MicrocopyPack {
metadata: {
feature_id: string;
feature_name: string;
version: string;
languages: string[]; // ["en", "fa", "tr", "de", "fr", "ru", "tg"]
last_updated: string;
author: string;
};

voice_and_tone: {
voice_profile: string; // e.g., "professional-warm"
formality_level: "formal" | "informal" | "adaptive";
language_specific_notes: Record<string, string>;
};

components: {
labels: Label[];
helper_text: HelperText[];
error_messages: ErrorMessage[];
success_messages: SuccessMessage[];
toasts: ToastNotification[];
confirmations: ConfirmationDialog[];
empty_states: EmptyState[];
loading_states: LoadingState[];
tooltips: Tooltip[];
placeholders: Placeholder[];
ctas: CallToAction[];
};

glossary: GlossaryTerm[]; // Consistent terminology
}

interface ErrorMessage {
id: string;
trigger: string; // What causes this error
type: "inline" | "form_level" | "system";
field_reference?: string;
messages: Record<Language, {
text: string;
recovery: string; // Required: how to fix
}>;
severity: "error" | "warning";
character_limit?: number;
}

interface EmptyState {
id: string;
type: "first_use" | "no_results" | "user_cleared" | "error";
context: string; // Where this appears
messages: Record<Language, {
headline: string;
body: string;
primary_cta: string;
secondary_cta?: string;
}>;
illustration_ref?: string;
}

Locale file structure for i18n

public/
└── locales/
├── en/
│ ├── common.json
│ ├── errors.json
│ ├── forms.json
│ └── notifications.json
├── fa/ (Persian - RTL)
│ ├── common.json
│ ├── errors.json
│ ├── forms.json
│ └── notifications.json
├── tr/ (Turkish)
├── de/ (German)
├── fr/ (French)
├── ru/ (Russian - Cyrillic)
└── tg/ (Tajik - Cyrillic)

Required fields summary by microcopy type

TypeRequired FieldsOptional Fields
Labelsid, text, contexticon, accessibility_label, truncation_rule
Errorsid, trigger, text, recoveryerror_code, support_link, severity
Toastsid, text, type, durationaction_label, dismissible, icon
Empty statesid, type, headline, body, primary_ctasecondary_cta, illustration
Confirmationsid, title, body, primary_action, secondary_actionreversibility, input_confirm
Helper textid, text, field_referencetiming, icon

6. Quality Checklist

Universal validation rules

Linguistic accuracy

  • Grammar and spelling correct for target language
  • Punctuation appropriate (Persian ؟ not ?, German „" not "")
  • Terminology consistent with established glossary
  • Tone matches brand voice guidelines
  • Reading level appropriate (7-8th grade equivalent)
  • No ambiguous language or multiple interpretations
  • Active voice preferred (except where passive softens tone)

Technical correctness

  • Variable interpolation works ({{name}}, {count})
  • Pluralization handled properly per language rules
  • Text fits within UI constraints after localization
  • No truncation of critical content
  • Dynamic content renders correctly
  • Links and CTAs functional

Accessibility (WCAG compliance)

  • All form fields have programmatic labels (1.3.1)
  • Minimum 4.5:1 contrast ratio for text (1.4.3)
  • Headings and labels describe topic or purpose (2.4.6)
  • Errors identified and described in text (3.3.1)
  • Error suggestions provided when known (3.3.3)
  • Button/link text meaningful out of context
  • Visible label included in accessible name (2.5.3)

Per-language validation checklist

Persian (فارسی)

  • شما pronoun used consistently (unless brand specifically targets youth)
  • Formal verb conjugations match pronoun choice
  • Persian punctuation (؟ ، ؛ « ») used correctly
  • Eastern Arabic numerals (۱۲۳) used consistently OR Western numerals—no mixing
  • Persian plurals used (سفارش‌ها not سفارشات)
  • Line-height minimum 1.8 specified for typography
  • Vazirmatn or equivalent Persian-optimized font specified
  • RTL direction handling verified
  • Bidirectional text (mixing Latin/Persian) renders correctly
  • No blame language—passive constructions for user errors
  • Warm professional tone maintained

German (Deutsch)

  • Sie/du choice consistent with brand positioning
  • "Bitte" used sparingly—only when genuinely needed
  • German quotation marks „ " used
  • Date format DD.MM.YYYY
  • Numbers use period for thousands (11.000) and comma for decimals (11,50)
  • Compound words tested in narrow UI elements
  • Text expansion (+30-35%) accommodated in UI
  • Constructive, non-blaming error messages

French (Français)

  • Vous/tu choice consistent with brand positioning
  • "Veuillez" used for formal instructions appropriately
  • Guillemets « » with spaces used for quotations
  • Spaces before : ; ! ? punctuation
  • Currency after number with space (100 €)
  • Percentage with space (40 %)
  • Days and months lowercase (lundi, janvier)
  • Text expansion (+15-25%) accommodated

Russian (Русский)

  • Вы pronoun used (formal standard for all professional UI)
  • Formal imperatives (-те endings)
  • «Guillemets» used for quotation marks
  • Direct, factual tone—no excessive apologies
  • Three-form pluralization implemented correctly
  • Cyrillic font support verified
  • Text expansion (+15-20%) accommodated

Turkish (Türkçe)

  • Siz/Sen choice consistent—never mix registers
  • "Lütfen" included for imperatives
  • SOV word order maintained
  • Special characters (Ç, Ğ, İ, ı, Ö, Ş, Ü) render correctly
  • Text expansion (+22-33%) accommodated
  • Agglutinative word length tested in UI

Tajik (Тоҷикӣ)

  • Шумо pronoun used (formal standard)
  • Cyrillic script with unique characters (ғ, ӣ, қ, ӯ, ҳ, ҷ)
  • LTR direction (Cyrillic script)
  • Russian pluralization rules applied (3 forms)

Anti-patterns to avoid

Anti-PatternProblemFix
JargonUsers don't understandPlain language
Passive voice in errorsUnclear causeActive voice
AmbiguityMultiple interpretationsBe specific
"Failed/Error/Wrong"Creates anxietyNeutral language
ALL CAPSReads as shoutingSentence/title case
Humor in errorsTrivializes problemsBe helpful first
Generic messagesUseless informationSpecific explanation
Blame language"You entered invalid...""Please enter valid..."
Placeholder as labelDisappears, inaccessibleVisible labels always

7. Tool Integration

Use CaseRecommended Tool
Copy management (Figma)Ditto or Frontitude
AI microcopy generationClaude/GPT-4 + Frontitude AI Assistant
Style guide enforcementWriter or Frontitude Guidelines
Readability checkingHemingway Editor
Grammar/toneGrammarly
Translation managementLokalise (apps), Crowdin (community), Phrase (enterprise)
Dev handoffFigma Dev Mode + Ditto/Frontitude API/CLI

Frontitude features and workflow

Frontitude provides AI-powered UX writing with business/design context awareness. Key capabilities:

  • Figma plugin for in-context writing
  • Copy component library with reusable strings
  • Content guidelines integration with design system
  • Automated content audits for style violations
  • Translation memory and AI translation
  • Developer CLI with i18next integration

Pricing: Free tier (2 editors, 3 projects), Team $160-200/mo, Growth $260-325/mo

Translation management system comparison

FeatureCrowdinPhraseLokalise
Best ForCommunity/open-sourceEnterprise CI/CDMobile apps
Figma PluginExtensiveYesBest rated
ICU SupportYes (syntax highlighting)YesYes
GitHub Integration600+ integrationsExtensive APIPopular dev tools
Free TierOpen-source onlyNoNo
Mobile SDKLimitedYesStrong (OTA updates)

Export format: JSON for react-i18next

{
"auth": {
"signup": {
"title": "Create your account",
"form": {
"email": {
"label": "Email address",
"placeholder": "you@example.com",
"errors": {
"required": "Enter your email address",
"invalid": "Enter a valid email address"
}
}
}
}
}
}

react-i18next configuration for 7 languages

i18n
.use(Backend)
.use(LanguageDetector)
.use(initReactI18next)
.init({
supportedLngs: ['en', 'fa', 'tr', 'de', 'fr', 'ru', 'tg'],
fallbackLng: {
'tg': ['ru', 'en'],
'fa': ['en'],
'default': ['en']
},
ns: ['common', 'errors', 'forms', 'notifications'],
defaultNS: 'common',
backend: {
loadPath: '/locales/{{lng}}/{{ns}}.json'
}
});

8. AI Prompt Patterns

Effective prompt structure for microcopy

Role + Task + Context + Constraints + Format

Role: "Act as a UX writer for a fintech app targeting Iranian users"
Task: "Write inline error messages for a credit card form"
Context: "User is completing checkout, may be frustrated if errors occur"
Constraints: "Persian language, شما formality, under 60 characters, warm professional tone"
Format: "Provide JSON with error triggers and messages"

Few-shot prompting for tone consistency

Few-shot examples reinforce tone more reliably than descriptions:

Write Persian error messages matching this tone:
Examples:
- "ایمیل وارد شده معتبر نیست" (neutral, no blame)
- "لطفاً رمز عبور قوی‌تری انتخاب کنید" (uses لطفاً, constructive)
- "اطلاعات کارت نادرست است. لطفاً بررسی کنید" (explains + guides)

Now write for: expired session, invalid phone number, file too large

Language-specific prompt patterns

Persian prompts

Generate microcopy in Persian (فارسی) with these requirements:
- Use شما pronoun (formal)
- Maintain professional-warm tone (حرفه‌ای-صمیمانه)
- Use Persian punctuation: ؟ for questions, ، for commas
- Include recovery instructions for all errors
- Avoid blame—use passive constructions like "اطلاعات نادرست است" not "شما اشتباه وارد کردید"

Russian prompts

Generate microcopy in Russian (Русский) with these requirements:
- Use Вы pronoun (formal)
- Direct, factual tone—minimize "пожалуйста" and apologies
- Focus on clear problem statement + solution
- Use «guillemets» for quotations
- Implement 3-form pluralization where needed

German prompts

Generate microcopy in German (Deutsch) with these requirements:
- Use Sie pronoun (formal) OR du for consumer brands—specify
- Precise, factual language—clarity valued over warmth
- Use „German quotation marks"
- Constructive error messages without excessive "bitte"
- Account for 30%+ text expansion from English

Prompts by microcopy type

Error messages

Write inline error for [scenario: email validation failure]
Language: [Persian]
Requirements:
- Explain what went wrong
- Provide specific fix instruction
- Under [50] characters
- Avoid blame language
- Use passive voice for user-caused errors

Output format: JSON with trigger, message, recovery fields

Empty states

Write empty state for [scenario: first-time user, no projects created]
Language: [Turkish]
Requirements:
- Headline explains current state
- Body motivates action with value proposition
- Single clear CTA
- Encouraging tone appropriate for Siz formality

Output: headline, body, cta_text

Common AI failure modes and mitigations

Failure ModeCauseMitigation
Overly formal/roboticDefault neutral toneMove tone instructions earlier; use few-shot examples
Culturally inappropriateLiteral translationSpecify cultural norms explicitly; native review required
Inconsistent tone in batchDrift without constraintsProcess as single prompt; reference consistent examples
Wrong formality levelGeneric language handlingExplicit pronoun and conjugation rules per language
Exceeds character limitsPrioritizes completenessStrict character counts: "Under 8 words. Do not exceed."
Missing recovery instructionsIncomplete error patternTemplate: "Always include: what happened + how to fix"

Critical: AI achieves ~88-92% accuracy—native speaker review remains essential for production microcopy. The remaining 8-12% includes cultural missteps, subtle tone errors, and occasional confabulation (~4% of outputs).


9. Multi-Language & RTL Reference

Tone matrices by language

Formality selection criteria

FactorFormalInformal
B2B products✓ All languages
Banking/finance✓ All languages
Healthcare✓ All languages
B2C young audienceGerman (du), Turkish (sen), French (tu) acceptable
Social appsConsider informal for casual brand
E-commerceContext-dependentYouth-focused brands

Language-specific formality defaults

LanguagePronounImperative"Please" Usage
PersianشماFormal (-ید)لطفاً common
TurkishSizFormal (-iniz)Lütfen common
RussianВыFormal (-те)Пожалуйста less common
GermanSieFormal (-en Sie)Bitte sparingly
FrenchVousFormal (-ez)Veuillez for formal
EnglishPlease optional
TajikШумоFormalSimilar to Persian

Error message tone by culture

LanguageTone ApproachApology Pattern
PersianWarm, formal, helpfulFormal apology preferred: "متأسفانه"
TurkishPolite, solution-focusedModerate apology acceptable
RussianDirect, factualMinimal apology—focus on fix
GermanPrecise, constructive"Entschuldigung" doesn't add empathy alone
FrenchElegant, politeApology expected, use conditional
EnglishCasual, friendlyCasual apology OK: "Oops, something went wrong"

Text expansion rates from English

LanguageExpansionNotes
German+30-35%Compound nouns can't wrap
Turkish+22-33%Agglutinative—single words very long
French+15-25%
Russian+15-20%Cyrillic may need more glyph space
Persian+10-25%RTL requires separate layout testing
Spanish+20-25%Reference for planning

Critical insight: Shorter strings expand MORE. "FAQ" → "Preguntas frecuentes" (300%+). Design for +35% padding minimum in all text containers.

English CharactersExpected Expansion
Up to 10200-300%
11-20180-200%
21-30160-180%
31-50140-160%
Over 70130%

RTL handling for Persian

CSS logical properties (required)

/* Use logical properties instead of physical */
.component {
margin-inline-start: 1rem; /* Not margin-left */
padding-inline-end: 2rem; /* Not padding-right */
text-align: start; /* Not text-align: left */
border-inline-start: 2px solid blue;
}

/* Persian-specific typography */
:lang(fa) {
font-family: 'Vazirmatn', 'Noto Sans Arabic', system-ui, sans-serif;
line-height: 1.8; /* Required for diacritics */
direction: rtl;
}

Bidirectional text handling

Persian text with embedded English (brand names, URLs, code) requires proper isolation:

.bidi-isolate {
unicode-bidi: isolate;
}

Numbers remain left-to-right even in RTL text. Use Eastern Arabic numerals (۱۲۳) for dates, prices, phone numbers in Persian context; Western numerals acceptable for technical/code contexts.

Punctuation by language

ElementEnglishPersianGermanFrenchRussian
Question mark?؟?? (space before)?
Comma,،,,,
Semicolon;؛;; (space before);
Quotation marks"..."«...»„..."« ... »«...»
Thousands separator,. or spacespacespace
Decimal separator.,,,

Pluralization rules by language

LanguageFormsRule
English2: one, otherone = 1; other = 0, 2+
German2: one, otherone = 1; other = 0, 2+
French2: one, otherone = 0, 1; other = 2+
Turkish2: one, otherone = 1; other = 0, 2+
Persian2: one, otherone = 0, 1; other = 2+
Russian4: one, few, many, otherComplex modulo rules
Tajik2: one, otherSame as Persian

Russian pluralization implementation

// ICU MessageFormat
{
"books": "{count, plural, one {# книга} few {# книги} many {# книг} other {# книги}}"
}

// Rule:
// one: ends in 1 (except 11): 1, 21, 31...
// few: ends in 2-4 (except 12-14): 2, 3, 4, 22, 23, 24...
// many: ends in 0, 5-20, 11-14: 0, 5, 6...11, 12...20
// other: decimals

BCP 47 locale codes

LanguageCodeScriptDirection
EnglishenLatinLTR
PersianfaArabic (Perso-Arabic)RTL
TurkishtrLatinLTR
GermandeLatinLTR
FrenchfrLatinLTR
RussianruCyrillicLTR
Tajiktg or tg-CyrlCyrillicLTR

10. Bibliography

Design System Documentation

Professional Certifications

Foundational Books

  • Podmajersky, Torrey. Strategic Writing for UX. O'Reilly Media, 2019.
  • Yifrah, Kinneret. Microcopy: The Complete Guide. 2nd Edition, 2019.
  • Richards, Sarah. Content Design. 2nd Edition.
  • Fenton, Nicole & Kiefer Lee, Kate. Nicely Said.

Localization Resources

i18n Tools Documentation

UX Writing Tools

Language-Specific Resources

  • German UPA Error Message Guidelines (Leitfaden Fehlermeldungen v1.00, December 2023)
  • Mailchimp Content Style Guide: https://styleguide.mailchimp.com/
  • Persian UX Writing GitHub repositories and community resources

Industry Standards Organizations


Document Version: 1.0 Last Updated: February 2026 Skill Reference: /jaan-to-ux-microcopy-write (logical: ux:microcopy-write)