

Guided onboarding: the "Get started" screen walks through the whole workflow after activation, in English, Spanish or Portuguese.
Parly is a lightweight alternative to heavy multilingual plugins. Instead of intercepting your HTML or forcing a translation interface on you, it uses the simplest model possible: each translation is a normal WordPress page, duplicated from the original and edited with the editor you already use — Gutenberg, Classic, or any page builder.
[parly_switcher] shortcode.<html lang> attribute per page.parly_t(), parly_get_current_lang(), parly_get_original_id() and parly_is_translation() for themes that render content in custom templates.Parly keeps things simple on purpose, and that comes with honest trade-offs:
/about-us/ instead of /en/sobre/). If your SEO strategy requires /en/-style URL structures, Parly is not the right tool.header.php, a footer credit, a button label inside a custom template) is outside the database. Parly offers two workarounds — the Theme texts scanner, which replaces registered strings in the rendered HTML of translated pages, and the parly_t() helper for developers who can edit the theme — but both require identifying each string. Themes that build entire layouts in PHP (custom front pages, heavily hardcoded designs) will need developer work with the helpers below, and in extreme cases a plugin with an automatic, external-service approach (such as Weglot) may fit better despite its subscription cost.All helpers are safe to call from any theme or plugin (guard with function_exists() if your theme may run without Parly):
parly_t( array $translations ) — returns the string matching the language of the page being viewed. Example: echo parly_t( array( 'en' => 'About us', 'pt-br' => 'Sobre nós' ) );. Ideal for hardcoded template text a developer controls.parly_get_current_lang() — returns the language code of the page being viewed (e.g. 'en', 'pt-br').parly_get_original_id( int $post_id = 0 ) — returns the ID of the original (default-language) post of the translation group. Essential for custom templates: lets a theme render the same template parts for every language variant of a page (see the FAQ on homepages that render empty).parly_is_translation( int $post_id = 0 ) — whether the current (or given) post is a translation rather than the original.parly_duplicate_skip_meta — lets developers exclude additional meta keys from duplication when a translation is created.[parly_switcher] — renders the inline language switcher anywhere shortcodes are supported.