# Cultural UX Considerations

Designing for global audiences: RTL languages, color meanings, form conventions, and localization.


## Table of Contents
1. [Right-to-Left (RTL) Languages](#right-to-left-rtl-languages)
2. [Color Meanings Across Cultures](#color-meanings-across-cultures)
3. [Form Conventions](#form-conventions)
4. [Text Considerations](#text-considerations)
5. [Icons and Imagery](#icons-and-imagery)
6. [Localization Best Practices](#localization-best-practices)
7. [Quick Reference Checklist](#quick-reference-checklist)

---

## Right-to-Left (RTL) Languages

### Languages That Use RTL

- Arabic
- Hebrew
- Persian (Farsi)
- Urdu

### What to Mirror

| Element | LTR | RTL |
|---------|-----|-----|
| Text alignment | Left | Right |
| Navigation | Left side | Right side |
| Progress indicators | Left to right | Right to left |
| Icons with direction | → | ← |
| Checkmarks | ✓ on right | ✓ on left |
| Back buttons | ← | → |
| Carousels/sliders | Swipe left for next | Swipe right for next |

### What NOT to Mirror

| Element | Reason |
|---------|--------|
| Numbers | Always LTR (123, not ٣٢١) |
| Phone numbers | Universal format |
| Clocks | Universal format |
| Video player controls | Universal convention |
| Brand logos | Design integrity |
| Math equations | Universal notation |

### CSS for RTL

```css
/* Modern approach using logical properties */
.element {
  /* Instead of margin-left: 16px */
  margin-inline-start: 16px;

  /* Instead of padding-right: 8px */
  padding-inline-end: 8px;

  /* Instead of text-align: left */
  text-align: start;

  /* Instead of float: left */
  float: inline-start;
}

/* Or use dir attribute */
[dir="rtl"] .element {
  /* RTL-specific overrides */
}
```

### RTL Icons

Icons with inherent direction need mirroring:

| Icon | Mirror? | Reason |
|------|---------|--------|
| Back arrow | Yes | Directional navigation |
| Forward arrow | Yes | Directional navigation |
| Reply icon | Yes | Shows direction of response |
| Search icon | No | Magnifying glass is universal |
| Home icon | No | House has no direction |
| Settings gear | No | Symmetric |
| Play button | No | Universal media convention |

---

## Color Meanings Across Cultures

### Red

| Culture | Meaning |
|---------|---------|
| Western | Danger, stop, error, love |
| China | Good luck, prosperity, happiness |
| India | Purity, fertility |
| South Africa | Mourning |
| Japan | Life, anger |

**Design implication:** Don't use red for error states in apps targeting Chinese markets without context.

### White

| Culture | Meaning |
|---------|---------|
| Western | Purity, cleanliness, peace |
| China/Japan | Death, mourning |
| India | Unhappiness, mourning |

**Design implication:** White space may have different connotations; "clean" design may feel empty or cold.

### Green

| Culture | Meaning |
|---------|---------|
| Western | Go, success, nature, money |
| Islamic | Sacred, paradise |
| China | Infidelity (green hat = cuckold) |
| Ireland | National identity |

**Design implication:** Green success states work globally, but be careful with green accessories or hats in Chinese contexts.

### Yellow

| Culture | Meaning |
|---------|---------|
| Western | Caution, happiness |
| Japan | Courage, royalty |
| Egypt | Mourning |
| Latin America | Death, mourning |

### Blue

| Culture | Meaning |
|---------|---------|
| Most cultures | Trust, calm, professionalism |
| Iran | Mourning, spirituality |

**Design implication:** Blue is relatively safe globally; commonly used for links and primary actions.

### General Guidelines

1. **Test with local users** - Color perception varies
2. **Don't rely on color alone** - Add icons and text
3. **Provide customization** - Let users choose colors where possible
4. **Research target markets** - Specific meanings in your target regions

---

## Form Conventions

### Name Fields

| Culture | Name Structure |
|---------|----------------|
| Western | First + Last (given + family) |
| China/Japan/Korea | Family + Given |
| Iceland | Given + Patronymic |
| Spanish | Given + Father's surname + Mother's surname |
| Arabic | Given + Father's + Grandfather's + Family |

**Best practices:**
- Use single "Full Name" field when possible
- If splitting, use "Given Name" and "Family Name" (not First/Last)
- Don't assume first/last order
- Allow long names (>50 characters)

### Address Fields

| Region | Considerations |
|--------|----------------|
| US | State, ZIP code (5 or 9 digits) |
| UK | County optional, postcode format varies |
| Japan | Prefecture, address reads large→small |
| Brazil | CEP codes |
| Countries without postal codes | 50+ countries don't use them |

**Best practices:**
- Don't require postal code universally
- Use country-appropriate field labels
- Allow flexible formats
- Consider address autocomplete services

### Phone Numbers

| Consideration | Approach |
|---------------|----------|
| Country codes | Allow input or select separately |
| Length | Varies widely (7-15 digits) |
| Format | Don't enforce specific format |
| Mobile vs landline | Labels may not translate |

**Best practices:**
- Accept multiple formats
- Store in E.164 format internally (+1234567890)
- Display in local format
- Don't validate too strictly

### Dates

| Region | Format |
|--------|--------|
| US | MM/DD/YYYY |
| Most of world | DD/MM/YYYY |
| Japan, China, Korea | YYYY/MM/DD |
| ISO standard | YYYY-MM-DD |

**Best practices:**
- Use date pickers instead of text input
- Show month names (not numbers) to avoid confusion
- Store in ISO format (YYYY-MM-DD)
- Display in user's locale

### Currency

| Consideration | Examples |
|---------------|----------|
| Symbol position | $100 vs 100€ vs 100 kr |
| Decimal separator | $1,234.56 vs €1.234,56 |
| Thousands separator | 1,000 vs 1.000 vs 1 000 |
| Currency names | Dollar, Yuan, Rupee |

**Best practices:**
- Format according to user locale
- Always show currency symbol/code
- Be clear about which currency
- Handle conversion if multi-currency

---

## Text Considerations

### Text Expansion

Translated text is often longer than English:

| Language | Expansion Factor |
|----------|------------------|
| German | 1.3x |
| French | 1.2x |
| Russian | 1.2x |
| Spanish | 1.2x |
| Chinese | 0.8x |
| Japanese | 0.9x |

**Design implications:**
- Don't design to exact English text length
- Allow buttons and labels to expand
- Test layouts with longest expected translations
- Use flexible grid/flexbox layouts

### Text in Images

Avoid text in images because:
- Can't be translated easily
- Not accessible to screen readers
- Doesn't scale with user preferences
- Complicates localization workflow

**Alternative:** Use CSS text over images.

### Numbers and Units

| Element | Consideration |
|---------|---------------|
| Measurement | Metric (most world) vs Imperial (US) |
| Paper size | A4 (most world) vs Letter (US, Canada) |
| Temperature | Celsius vs Fahrenheit |
| Time | 24-hour vs 12-hour (AM/PM) |

---

## Icons and Imagery

### Potentially Problematic Icons

| Icon | Issue | Alternative |
|------|-------|-------------|
| Mailbox | US-specific design | Envelope |
| Check mark | Means "wrong" in some cultures | Consider context |
| Thumbs up | Offensive in some cultures | Hearts, stars |
| Hand gestures | Vary widely in meaning | Avoid gestures |
| Animals | Religious/cultural sensitivities | Research target market |
| Religious symbols | May exclude or offend | Use neutral symbols |

### Photography

| Consideration | Approach |
|---------------|----------|
| Diversity | Represent target audience |
| Gestures | Avoid culture-specific gestures |
| Clothing | Consider cultural norms |
| Settings | Use locally relevant contexts |
| Food | Be aware of dietary restrictions |

---

## Localization Best Practices

### Technical

```javascript
// Use internationalization libraries
const formatter = new Intl.DateTimeFormat('de-DE');
const date = formatter.format(new Date());

const currencyFormatter = new Intl.NumberFormat('ja-JP', {
  style: 'currency',
  currency: 'JPY'
});
const price = currencyFormatter.format(1000);
```

### Content

- Use simple, clear language (easier to translate)
- Avoid idioms and colloquialisms
- Don't hardcode strings (use translation keys)
- Provide context for translators
- Test with pseudo-localization during development

### Design

- Design for flexibility (expanding text)
- Use icons with text (not alone)
- Test layouts in RTL and longest languages
- Consider reading order in complex layouts

---

## Quick Reference Checklist

Before launching internationally:

**Layout:**
- [ ] Supports RTL if targeting Arabic, Hebrew, Persian
- [ ] Text can expand 30% without breaking
- [ ] No text in images
- [ ] Icons are culturally neutral

**Forms:**
- [ ] Name fields are flexible
- [ ] Addresses work without postal codes
- [ ] Phone numbers accept various formats
- [ ] Dates use pickers or clear formats

**Content:**
- [ ] Colors don't carry unintended meaning
- [ ] Images represent target audience
- [ ] No culture-specific idioms
- [ ] Units match target region

**Technical:**
- [ ] Dates, numbers, currency use locale formatting
- [ ] All strings externalized for translation
- [ ] Character encoding supports target languages
- [ ] Font supports required character sets
