Key Takeaways
- Localizing SMS on a phone-as-gateway is encoding and segment math — not only swapping a JSON string.
- One non-GSM character can flip a 160-character OTP into a 70-character UCS-2 message (and a second segment).
- Keep OTP digits in ASCII even when the surrounding sentence is translated.
- Link the hub cornerstone; do not rewrite the phone-as-gateway overview here.
- Operator airtime is per segment. Platform pricing is devices plus send volume.
Language on a phone modem
Hub B how-tos sit under using an Android phone as an SMS gateway. Localizing message language is the moment a second market goes live and English OTP starts looking rude. The instinct is to paste a translation. The radio cares whether the alphabet fits GSM-7.
Cornerstone: Android phone as SMS gateway. This spoke does not rewrite that overview. Your backend picks locale and template; the SIM sends the bytes. Platform fee is devices plus SMS volume. Operator credit is yours. Free is 300 SMS lifetime.
Locale swap demo
GSM-7 vs UCS-2
Classic SMS is GSM-7. English OTP usually fits one 160-character segment. Arabic, Devanagari, CJK, or a single emoji flips the encoder to UCS-2 at ~70 characters. Concatenation headers steal more. Your panel may show one job; the carrier bills two.
“Translate the sentence, not the digits. A user who cannot read English can still type 482917. Full-width digits will fail the form.”
Alphabet tables live in 3GPP; overview index: 3GPP specifications. Put a real encoder in CI.
Segment cost by script
| Message style | Alphabet | Chars / segment | Typical OTP envelope |
|---|---|---|---|
| English, digits only | GSM-7 | 160 | 1 segment |
| English + one emoji | UCS-2 | 70 | 2 segments common |
| Bengali / Hindi + ASCII code | UCS-2 | 70 | 2 unless you cut copy |
| Arabic / Urdu RTL + ASCII code | UCS-2 | 70 | 2; test RTL rendering |
| Code-only body | GSM-7 | 160 | 1; weaker phishing context |
OTP copy that survives
For login OTP, lead with the code. Hold one template per locale with placeholders. Do not auto-ship LLM translations without a native speaker pass — spammy wording gets filtered by carriers.
RTL and concat
Store UTF-8. Keep the code in the first segment so a lost part 2 does not hide it. STOP handling via auto-reply and STOP while the device is online. Still treat English STOP as sacred on mixed lists.
Hub B vs app UI
Operators care about pairing and battery UI language. Recipients never see it. Do not promise “the phone sends in the user’s language” as if the APK contained every template. Samples: PHP, C#.
Canary every locale
- Staff handset per major script you ship.
- Send exact production templates after every copy change.
- Fail CI if OTP exceeds one segment without an explicit flag.
- Device readiness: setup.
Template set
Ship four OTP envelopes, not forty: English short, English with brand, Unicode short (code first), Unicode with legal minimum if required. Drop Unicode first names from SMS if segment cost matters. Use numeric expiry units, not “before noon.”
Next steps
Back to phone-as-gateway hub, pricing, Developer Center.
Related product pages
Jump to the live product docs for this topic—not another long-form article.
- SMS API documentationLive endpoint reference
- device and SMS volume pricingPlans and allowances
- Android SMS gateway product guideDefinition, product, and how to buy
- download the Android gateway appGet the APK





