Render every member's numbers in their language.
SocialHub resolves each member's declared language to one of ten supported locales, and exposes formatting helpers you drop straight into an email template — so prices, quantities and dates come out in that member's regional format automatically. This localizes formatting, not your copy: SocialHub never machine-translates the words you write, and amounts are never currency-converted.
Ten locales, with sensible resolution
A member's language is set in their portal preference center (or imported), then resolved to one supported locale. An exact code wins; region variants collapse to their base; an unknown or empty language falls back to English rather than guessing.
| Locale code | Resolution notes |
|---|---|
| en | English (default / fallback) |
| fr | French — fr-CA, fr-BE, etc. collapse to fr |
| es | Spanish — es-MX, es-419, etc. collapse to es |
| de | German — de-AT, de-CH collapse to de |
| zh-CN | Simplified Chinese — bare zh, zh-Hans, zh-SG resolve here |
| zh-TW | Traditional Chinese (Taiwan) — zh-Hant resolves here |
| zh-HK | Traditional Chinese (Hong Kong) |
| ja | Japanese |
| ko | Korean — ko-KR collapses to ko |
| th | Thai — th-TH collapses to th |
Drop them into any template
Campaign emails compile with these helpers available. The recipient's locale is injected for you at send time from their declared language — you don't pass it. Write the template once; each member reads their own format.
{{! Any campaign email block. The recipient's locale is injected }}
{{! automatically from their declared language — you just use the helpers. }}
<p>Hi {{first_name}},</p>
<p>Your balance is {{formatCurrency points_value "USD"}}
({{formatNumber points 0}} points).</p>
<p>This offer ends {{formatDate expires_at "long"}}.</p>
{{! A French member sees: 1 234,50 € · 1 234 · 5 janvier 2026 }}
{{! A German member sees: 1.234,50 € · 1.234 · 5. Januar 2026 }}
{{! A US member sees: $1,234.50 · 1,234 · January 5, 2026 }}| Helper | Usage | Notes |
|---|---|---|
| formatCurrency | {{formatCurrency amount "USD"}} | Amount in the given ISO-4217 currency, grouped and symbol-placed for the member's locale. Amount stays in that currency — no FX conversion. |
| formatNumber | {{formatNumber value 0}} | Number with locale grouping; the second arg is the fixed decimal count (default 0). |
| formatDate | {{formatDate date "long"}} | Locale date. Format arg is "short" (default), "long", or "iso" (YYYY-MM-DD, locale-independent). |
Language is a segmentable attribute
Preferred Language tag
A member's declared language surfaces as the preset "Preferred Language" tag, so you can include or exclude a language cohort in any segment.
First-party, not inferred
The value comes from what the member chose, not a guess from IP or headers — members who never chose one stay untagged.
Same across surfaces
The resolved language drives both the segment tag and the send-time formatting, so targeting and rendering agree.
What localization does — precisely
Formatting, not translation
The helpers localize number, date and currency FORMAT. Your written copy is sent exactly as authored — SocialHub does not machine-translate content.
Display currency, no FX
formatCurrency changes how an amount reads, never its value — the amount stays in the currency you pass. There is no exchange-rate conversion.
Safe fallback
Unknown, empty or unsupported languages resolve to en-US formatting — byte-for-byte the prior behavior, so nothing changes for members without a declared language.
A ten-language foundation
Beyond formatting, each locale carries its own tone and compliance conventions (consent model, unsubscribe wording, market rules), the base localized experiences build on.
Localize the send, not just the list
Capture the language, target by it, and let every email format itself for the member reading it.