Personalizing Storyblok content that already has multiple locales
We run a retail site out of Singapore with en, zh, and ms locales in Storyblok. I am scoping personalization and my first assumption was that every variant would need to exist three times, once per locale, which would triple the content work and probably kill the idea internally.
Before I write this up, how do locale and personalization actually interact in the slot model? Is a variant locale-aware, or am I really looking at one experience per locale?
2 answers
Your assumption is the common first guess and it is more pessimistic than reality. Locale and personalization are separate axes in the model, not multiplied experiences.
Content fetches accept a preferredLocale, so the same experience serves the right language variant based on what your frontend requests. Multi-language works without extra development, you do not create one experience per locale. One experience, localized content inside it.
Two things to know for planning:
- Per-locale default content, meaning localization on the Croct side, is an add-on, so mention that in your scoping conversation.
- Your existing Storyblok block per locale stays the default fallback for that locale. A zh visitor who matches no audience gets the regular zh block, exactly as today.
So the incremental content work is writing the variant copy per language, which you would have to do with any tool since the words genuinely differ. The structural overhead of managing three parallel experiments is what you avoid.
Running a similar setup with de and en. One practical tip: pass the preferredLocale explicitly from the same locale detection your Storyblok frontend already uses, so the two systems never disagree about which language a visitor is in. We derive it from the route prefix and feed the same value to both fetches. Zero drift since.