/bubble-tutorials

How to build a multilingual site in Bubble

Learn how to build a multilingual website in Bubble with simple steps, translation best practices, and tools to reach global audiences.

Matt Graham, CEO of Rapid Developers

Book a call with an Expert

Starting a new venture? Need to upgrade your web or mobile app? RapidDev builds Bubble apps with your growth in mind.

Book a Free Consultation

How to build a multilingual site in Bubble

To build a multilingual site in Bubble, the simplest valid approach is to store all your text in a “dictionary” (a data type with translations for each language) and display the correct translation based on a current language field stored in a custom state or in the Current User. Every text element pulls the proper translation dynamically. This avoids Bubble’s old “App Text” limitations and gives you full control.

 

Core Idea

 

You create a data type (for example “TextKey”) that contains one field per language. Each visible text element on the page doesn’t contain hardcoded text — instead it does a Search for TextKey and displays the proper field (English, Spanish, etc.) depending on the selected language. You switch languages by changing a custom state or the user’s language field.

 

Step-by-step Structure

 

  • Create a data type TextKey with fields like key (text), en (text), es (text), fr (text). The key is just an internal name such as “header\_welcome”.
  • Add a custom state on the page called current\_language (text). Default value could be “en”.
  • For each text element, set its content as: Search for TextKeys:first item’s (dynamic field). Use a conditional to pick the right field.
  • Create buttons/flags to change language by setting the custom state current\_language to “en”, “es”, etc.
  • If user is logged in, you can save language preference to Current User’s language and load it on page load.

 

Conditional Setup Example

 

// Example inside a text element:
// "Search for TextKeys:first item's en"
// Change dynamically using conditionals:

When Page's current_language is "en"
  → This text = Search for TextKeys:first item's en

When Page's current_language is "es"
  → This text = Search for TextKeys:first item's es

 

Practical Tips

 

  • Always use the key field to find the right dictionary entry: Search for TextKeys where key = "header\_welcome".
  • If performance matters, load all TextKeys into a repeating group or custom state on page load and reference from there.
  • Keep translations in the database so non-technical teammates can edit them easily.

Explore More Valuable No-Code Resources

How to integrate Bubble.io with Git?

Learn how to seamlessly integrate Bubble.io with Git through our comprehensive step-by-step guide. Perfect for beginners and professionals.

Explore

How to integrate Bubble.io with Reddit Ads?

Learn how to seamlessly integrate Bubble.io with Reddit Ads using our easy step-by-step guide. Boost your ad management today!

Explore

How to integrate Bubble.io with AWS S3?

Explore our step-by-step guide on integrating Bubble.io with AWS S3, making your app development process more efficient and secure.

Explore

How to integrate Bubble.io with Lucidchart?

Follow our step-by-step guide to seamlessly integrate Bubble.io with Lucidchart, enhancing your workflow & productivity.

Explore

How to integrate Bubble.io with Kentico?

Learn how to seamlessly integrate Bubble.io and Kentico with our comprehensive, easy to follow step-by-step guide.

Explore

How to integrate Bubble.io with Box?

Discover easy-to-follow steps for integrating Bubble.io with Box. Boost your workflow and secure your files seamlessly today.

Explore

Stuck in Bubble.io? We’re here to help!

Fix broken workflows | Optimize logic | Boost performance | Scale with confidence

4.9
Clutch rating 🌟
600+
Happy partners
17+
Countries served
190+
Team members

By clicking “Accept”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. View our Privacy Policy for more information.

Cookie preferences