# 7. Localization Pitfalls and VR Part of [[Localization]]. Previous: [[6. Localizing Game Data Dialogue and Pseudo-Localization]]. > [!note] Verification status > Items 1, 4 and 5 are stated in the 1.5 docs (Smart flag, `WaitForCompletion` not on WebGL, StringChanged semantics). VR guidance is general practice, not from Unity docs. **Code not compiled in Unity.** ## Pitfalls 1. **Placeholders print literally.** Entry not marked **Smart**. 2. **Sentences built in code.** `"You have " + n + " keys"` can't be translated. Whole sentence in the table, values as variables. 3. **Same key reused for different meanings.** Translators need separate entries ("Close" door vs "Close" distance). 4. **Blocking loads.** `GetLocalizedString()` uses `WaitForCompletion`; it stalls on first load and isn't supported on WebGL. Prefer bindings, `StringChanged`, or async. 5. **Lapsed listeners.** Subscribing to `StringChanged` / `SelectedLocaleChanged` without unsubscribing keeps dead objects alive and throws on destroyed UI. 6. **Shared LocalizedString on a ScriptableObject.** Adding runtime variables to an asset's field affects every user of that asset - create per-instance copies (part 6). 7. **Missing tables in builds.** Addressables weren't built with the player. 8. **Boxes instead of glyphs.** Font lacks the script; set up per-script fonts or fallbacks (part 4). 9. **Clipped German, overflowing Finnish.** Design for 30-40% expansion; test with the Pseudo-Locale. 10. **Language list localized.** Show native names; a player stuck in a language they can't read must still find theirs. 11. **Hard-coded strings in prefabs.** Pseudo-locale brackets reveal them. 12. **Date/number formatting by hand.** Use Smart formats (`{value:N0}`, date formats) so the locale's culture applies. 13. **Input prompts.** "Press E" is wrong on gamepad and on AZERTY keyboards. Use global variables driven by the active device and binding display strings from [[Input System]]. ## VR (Quest) notes VR work in this vault targets **Unity 6.3 LTS (6000.3.27f2+)** ([[0.Choosing a Unity Version]]); Localization 1.5.x runs on Unity 6.x. - **Legibility first.** World-space text needs larger sizes than screen text; CJK glyphs need even more pixels to stay readable through Quest 2 lenses. Test every locale on device. - **Expansion in world space** is worse than on screens: a diegetic terminal ([[6.Diegetic Terminal and Wrist Display]]) has fixed physical size. Prefer icons and short labels; allow scrolling. - **Font atlas memory.** A full CJK font atlas is large; generate only needed characters (static atlas from your tables) or use dynamic atlases with care on Quest's memory budget. - **Subtitles in VR** should follow the head loosely (lazy-follow) and sit below the horizon line; see [[8.UI Toolkit for VR]]. - **System language on Quest.** The System Locale Selector reads the Android device language on Android; keep the Player Pref selector first so the in-game choice wins.