SysOpenLang is free software for managing translated WordPress content from one installation. Core translation features work without an external account.
Stable supported features:
/en/ URLs, query fallback, language switcher, and translated redirects.hreflang, x-default, and sitemap entries.SysOpenLang does not send content to a translation service unless an administrator configures a provider and explicitly starts an automatic translation job. See External services below before enabling a provider.
SysOpenLang\register_string( 'footer_title', 'Contact us', 'theme' );
SysOpenLang\translate_string( 'footer_title', 'Contact us', 'theme' );
SysOpenLang\translate_plural( 'item', 'items', $count, 'Item', 'Items', 'theme' );
SysOpenLang\translated_post_id( get_the_ID(), 'es' );
SysOpenLang\translated_term_id( $term_id, 'es' );
SysOpenLang\set_menu_translation( 'primary', 'es', $menu_id );
Provider integrations implement SysOpenLang\Contracts\Translation_Provider and register through SysOpenLang\register_provider() or the sysopenlang_translation_providers filter.
Builder integrations implement SysOpenLang\Contracts\Content_Extractor and register on sysopenlang_register_content_extractors with SysOpenLang\Content_Extractors::register().
REST endpoints:
GET /wp-json/sysopenlang/v1/languagesGET /wp-json/sysopenlang/v1/translations/post/123GET /wp-json/sysopenlang/v1/translations/term/45POST /wp-json/sysopenlang/v1/jobs (authenticated editors)GET /wp-json/sysopenlang/v1/diagnostics (administrators)WP-CLI:
wp sysopenlang languageswp sysopenlang export > sysopenlang.jsonwp sysopenlang import --file=sysopenlang.jsonwp sysopenlang diagnosticsACF and builders are supported through metadata policies. Complex components that store remote data or proprietary serialized structures may require a small adapter using the documented filters.
WooCommerce support covers translated product content, stable linked variations, translated global attribute terms, variation descriptions, and synchronized operational product metadata. Order localization, subscriptions, and third-party WooCommerce extensions require dedicated adapters and are not claimed as supported by this release.
SysOpenLang can optionally send content selected for automatic translation to one configured provider. These integrations are disabled until an administrator adds their own API credential, selects that provider, and starts a translation job. SysOpenLang itself does not create provider accounts, collect provider payments, or receive the submitted content.
Depending on the selected provider, the plugin sends the source and target language identifiers, the human-readable content segments being translated, and an instruction to preserve structural markup. The configured API credential is sent only to that provider for authentication. Provider model-list requests send the credential but no site content. Review the applicable provider terms and privacy policy before use:
https://api.openai.com/v1/models and https://api.openai.com/v1/responses. Terms and Privacy.https://api.anthropic.com/v1/models and https://api.anthropic.com/v1/messages. Terms and Privacy.https://generativelanguage.googleapis.com/v1beta/models and its generateContent endpoint. Terms and Privacy.https://translation.googleapis.com/language/translate/v2. Terms and Privacy.API credentials are stored encrypted in the WordPress options table when OpenSSL is available. Translation jobs and error summaries are stored in the site’s database. Site owners remain responsible for obtaining any required consent and for their provider account, billing, retention settings, and data-processing obligations.
Without an enabled automatic-translation provider, SysOpenLang keeps language relationships, translated strings, settings, workflow status, and jobs in the local WordPress database. It does not include analytics or usage tracking. Administrators can copy the suggested disclosure added by SysOpenLang to WordPress’s Privacy Policy Guide and adapt it to the site’s actual configuration.
Removing the plugin preserves data by default to prevent accidental loss. Permanent cleanup can be authorized in SysOpenLang settings with an additional confirmation, or by defining SYSOPENLANG_REMOVE_DATA as true. Make a backup first.