Can you replace Polylang, WPML or TranslatePress?
They do not translate automatically, at least not at an acceptable level, and you still have to maintain all languages separately.
They do not save any web space, because all pages and posts will still be copied.
They slow down your website because all complex plugins do that.
They are error-prone. At the very least, their structure and functionality always confuses me anew and I end up having to do it all over again. If it's not applied 100% correctly, you'll find strings of words in the wrong language scattered all over the page after every little edit.
I admit that there is a right way and then everything really works flawlessly. But when I got the order to create a website with 5 languages, the question came to my mind: "Can I actually create a multilingual website completely without a language plugin and save myself the frustrations?
The answer to this question is not only yes, but with Oxygenbuilder it is amazingly easy to do. All I needed was 2 custom fields, 2 conditions, 1 dynamic date and 1 main template.
Suppose you want to develop a website with pages and a custom post type called Sights. This post type needs a header. Next, add categories named "sights en", "sights de", and "sights it" for English, German, Italian, and so on. One for each language on the site.
Set up language selection and language switching with ACF
Now create 2 custom fields using the free version of ACF.
The first field we call "language picker". Make it a radio button. Add a picker for each language, e.g. 'main en', 'main de' and 'main it'. Set as rule 'Post type is equal to Page'.
The second custom field is the language switch. Make it a URL field. Then duplicate the field until you have 1 per language. You can call it 'language switch en', 'language switch de' etc. The first rule is the same as above 'Post type is equal to Page'.
Then click on "Set Conditions" and make sure it says "Show Element if ANY of these conditions are true".
To set the first condition, click on the left field and select "Dynamic Data".
Then click on 'Advanced Custom Field'.
Then click on 'language picker'. This is the first of the two custom fields we created earlier.
Leave the == as it is.
In the field on the right, enter one of the 5 defined values, in our example 'main en'.
For the second condition, select post_category in the field on the left. Leave the == unchanged. Click on the right field and select 'sights en'.
Do this for all pages and posts that need a headline like "Places of interest". If you need to rename the slug for SEO purposes, you can do that later with a plugin called Better Search Replace. (You can also use the correct slug right away, it's just a bit more confusing).
Now go back to the Main Template in Oxygen. Let's assume that you are displaying flags to navigate between languages. Click the link wrapper for the English flag. Now go to the URL field on the left side of Oxygen and click Data. Select "language switch en". Repeat this process for the link wrapper with the German flag, but select "language switch de". And so on.