Jyavani separates the dashboard interface language from the underlying content locale. This separation allows the editor to use an Indonesian UI while the base site uses another language.
Two settings
site_languagefill in the locale dashboard viaadmin_ui_locale().content_default_languagepopulate locale frontend viadefault_locale()/content_default_locale().
If the default content is empty or invalid, Core falls back to site language; The invalid site language value falls to English. Seed UI provides English sources as well as Indonesian and German translations. English does not require a database lookup.
Bootstrap and HTML
Bootstrap reads both settings, activates content locale for the frontend, then dashboard reactivates site language. Attribute lang passes through the filter so the integration can adjust the value. Seed UI is imported idempotent: new strings are added without overwriting already edited translations.
What is not a Core feature
Core does not create translated copies of articles/pages, translator workflows, language switcher data, translation routes, hreflang, or automatic content fallback. Core only provides locale helpers, UI seeds, content lifecycle hooks, localized route tables, and extension points.
Translation plugin responsibilities
Plugins define translation models, supported locales, editor access, and fallbacks. Use a hook admin_post_after_*/admin_page_after_* for synchronization after mutation. Create canonical routes and aliases for each locale without collisions; The default locale is usually without a prefix, other locales use a prefix.
Menus and categories are only translated if the plugin explicitly supports those records and the theme uses the integration results. Don't assume that changing the default content automatically translates old slugs, menus, categories, metadata, or other content. Test UI en/id/de, default URL/translation, redirect, canonical, sitemap, and plugin disabled conditions.