{"id":352200,"date":"2026-08-19T16:25:24","date_gmt":"2026-08-19T16:25:24","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/truelang\/"},"modified":"2026-08-29T06:49:04","modified_gmt":"2026-08-29T06:49:04","slug":"vynlang","status":"publish","type":"plugin","link":"https:\/\/pap-aw.wordpress.org\/plugins\/vynlang\/","author":23547160,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.8.13","stable_tag":"2.8.13","tested":"7.1","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"OpenLang - AI Translation","header_author":"Vynatics","header_description":"A.I-assisted WordPress language translation with persistent caching, instant language switching, language URLs, RTL, and translation management.","assets_banners_color":"fdfdfd","last_updated":"2026-08-29 06:49:04","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/vynatics.corsysltd.com","header_author_uri":"https:\/\/vynatics.corsysltd.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":230,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.8.13":{"tag":"2.8.13","author":"vynatics","date":"2026-08-29 06:49:04","revision":3671177},"2.8.3":{"tag":"2.8.3","author":"vynatics","date":"2026-08-23 07:36:21","revision":3661493},"2.8.7":{"tag":"2.8.7","author":"vynatics","date":"2026-08-27 21:50:04","revision":3669548}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3655017,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3655017,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500-rtl.jpg":{"filename":"banner-1544x500-rtl.jpg","revision":3657091,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3657352,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-rtl.jpg":{"filename":"banner-772x250-rtl.jpg","revision":3657091,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3657352,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3671177,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"siteOptions\":{\"blogname\":\"OpenLang Multilingual Demo\",\"blogdescription\":\"A multilingual WordPress website powered by OpenLang.\",\"timezone_string\":\"Asia\\\/Jakarta\",\"permalink_structure\":\"\\\/%postname%\\\/\"},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"vynlang\"},\"options\":{\"activate\":true}},{\"step\":\"installTheme\",\"themeData\":{\"resource\":\"wordpress.org\\\/themes\",\"slug\":\"twentytwentyfive\"},\"options\":{\"activate\":true}},{\"step\":\"runPHP\",\"code\":\"<?php\\n\\n\\\/*\\n * OpenLang Playground Demo Setup\\n *\\n * OpenLang has already been installed and activated at this point,\\n * so its normal activation hooks have had an opportunity to create\\n * its database tables.\\n *\\\/\\n\\n\\\/\\\/ ---------------------------------------------------------\\n\\\/\\\/ Site options\\n\\\/\\\/ ---------------------------------------------------------\\n\\nupdate_option('blogname', 'OpenLang Multilingual Demo');\\nupdate_option(\\n    'blogdescription',\\n    'Experience a multilingual WordPress website powered by OpenLang.'\\n);\\nupdate_option('show_on_front', 'page');\\nupdate_option('permalink_structure', '\\\/%postname%\\\/');\\n\\nflush_rewrite_rules(false);\\n\\n\\\/\\\/ ---------------------------------------------------------\\n\\\/\\\/ Helper: create page only once\\n\\\/\\\/ ---------------------------------------------------------\\n\\nfunction openlang_playground_page($title, $slug, $content) {\\n\\n    $existing = get_page_by_path($slug, OBJECT, 'page');\\n\\n    if ($existing) {\\n        return (int) $existing->ID;\\n    }\\n\\n    $page_id = wp_insert_post(\\n        array(\\n            'post_title'   => $title,\\n            'post_name'    => $slug,\\n            'post_content' => $content,\\n            'post_status'  => 'publish',\\n            'post_type'    => 'page',\\n            'post_author'  => 1\\n        ),\\n        true\\n    );\\n\\n    if (is_wp_error($page_id)) {\\n        return 0;\\n    }\\n\\n    return (int) $page_id;\\n}\\n\\n\\\/\\\/ ---------------------------------------------------------\\n\\\/\\\/ Home page\\n\\\/\\\/ ---------------------------------------------------------\\n\\n$home_id = openlang_playground_page(\\n    'Home',\\n    'home',\\n    '<!-- wp:group {\\\"layout\\\":{\\\"type\\\":\\\"constrained\\\"}} -->\\n<div class=\\\"wp-block-group\\\">\\n\\n<!-- wp:heading {\\\"level\\\":1} -->\\n<h1>Welcome to OpenLang<\\\/h1>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:paragraph -->\\n<p>OpenLang makes it easy to create multilingual WordPress websites.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:paragraph -->\\n<p>Switch between languages and experience how your website can serve visitors in their preferred language.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:buttons -->\\n<div class=\\\"wp-block-buttons\\\">\\n\\n<!-- wp:button -->\\n<div class=\\\"wp-block-button\\\">\\n<a class=\\\"wp-block-button__link wp-element-button\\\" href=\\\"\\\/features\\\/\\\">Explore OpenLang<\\\/a>\\n<\\\/div>\\n<!-- \\\/wp:button -->\\n\\n<\\\/div>\\n<!-- \\\/wp:buttons -->\\n\\n<\\\/div>\\n<!-- \\\/wp:group -->'\\n);\\n\\n\\\/\\\/ ---------------------------------------------------------\\n\\\/\\\/ Features page\\n\\\/\\\/ ---------------------------------------------------------\\n\\n$features_id = openlang_playground_page(\\n    'Features',\\n    'features',\\n    '<!-- wp:group {\\\"layout\\\":{\\\"type\\\":\\\"constrained\\\"}} -->\\n<div class=\\\"wp-block-group\\\">\\n\\n<!-- wp:heading -->\\n<h2>OpenLang Features<\\\/h2>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:paragraph -->\\n<p>OpenLang provides powerful tools for building multilingual WordPress websites.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:heading {\\\"level\\\":3} -->\\n<h3>Multilingual Content<\\\/h3>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:paragraph -->\\n<p>Translate your website content and manage translations from one place.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:heading {\\\"level\\\":3} -->\\n<h3>Language-Specific Logo<\\\/h3>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:paragraph -->\\n<p>Use a different logo for different languages.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:heading {\\\"level\\\":3} -->\\n<h3>Language-Specific Typography<\\\/h3>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:paragraph -->\\n<p>Apply different typography and font settings depending on the selected language.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:heading {\\\"level\\\":3} -->\\n<h3>Language-Specific CSS and JavaScript<\\\/h3>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:paragraph -->\\n<p>Customize the appearance and behavior of your website for individual languages.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:heading {\\\"level\\\":3} -->\\n<h3>Multilingual URLs<\\\/h3>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:paragraph -->\\n<p>Create language-specific URLs for your translated website content.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<\\\/div>\\n<!-- \\\/wp:group -->'\\n);\\n\\n\\\/\\\/ ---------------------------------------------------------\\n\\\/\\\/ About page\\n\\\/\\\/ ---------------------------------------------------------\\n\\n$about_id = openlang_playground_page(\\n    'About OpenLang',\\n    'about-openlang',\\n    '<!-- wp:group {\\\"layout\\\":{\\\"type\\\":\\\"constrained\\\"}} -->\\n<div class=\\\"wp-block-group\\\">\\n\\n<!-- wp:heading -->\\n<h2>About OpenLang<\\\/h2>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:paragraph -->\\n<p>OpenLang is a WordPress translation solution designed for websites that need multilingual content without rebuilding their entire website.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:paragraph -->\\n<p>This Playground demonstrates the OpenLang experience inside a real WordPress installation.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:paragraph -->\\n<p>Use the WordPress language switcher or OpenLang settings to explore the multilingual workflow.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<\\\/div>\\n<!-- \\\/wp:group -->'\\n);\\n\\n\\\/\\\/ ---------------------------------------------------------\\n\\\/\\\/ Contact page\\n\\\/\\\/ ---------------------------------------------------------\\n\\n$contact_id = openlang_playground_page(\\n    'Contact',\\n    'contact',\\n    '<!-- wp:group {\\\"layout\\\":{\\\"type\\\":\\\"constrained\\\"}} -->\\n<div class=\\\"wp-block-group\\\">\\n\\n<!-- wp:heading -->\\n<h2>Contact Us<\\\/h2>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:paragraph -->\\n<p>Thank you for trying OpenLang.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:paragraph -->\\n<p>Explore the OpenLang settings in the WordPress administration area to learn how the plugin works.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<\\\/div>\\n<!-- \\\/wp:group -->'\\n);\\n\\n\\\/\\\/ ---------------------------------------------------------\\n\\\/\\\/ Set Home as front page\\n\\\/\\\/ ---------------------------------------------------------\\n\\nif ($home_id) {\\n    update_option('show_on_front', 'page');\\n    update_option('page_on_front', $home_id);\\n}\\n\\n\\\/\\\/ ---------------------------------------------------------\\n\\\/\\\/ Demo blog post\\n\\\/\\\/ ---------------------------------------------------------\\n\\nif (!get_page_by_path('welcome-to-openlang', OBJECT, 'post')) {\\n\\n    wp_insert_post(\\n        array(\\n            'post_title'   => 'Welcome to OpenLang',\\n            'post_name'    => 'welcome-to-openlang',\\n            'post_content' => '<!-- wp:paragraph -->\\n<p>Welcome to the OpenLang Playground demo.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:paragraph -->\\n<p>This demo gives you a quick look at how OpenLang can be used to create a multilingual WordPress website.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:heading {\\\"level\\\":2} -->\\n<h2>Why multilingual websites?<\\\/h2>\\n<!-- \\\/wp:heading -->\\n\\n<!-- wp:paragraph -->\\n<p>Multilingual websites allow businesses, organizations and creators to communicate with visitors in their preferred language.<\\\/p>\\n<!-- \\\/wp:paragraph -->\\n\\n<!-- wp:paragraph -->\\n<p>OpenLang provides translation management together with language-specific website customization.<\\\/p>\\n<!-- \\\/wp:paragraph -->',\\n            'post_status'  => 'publish',\\n            'post_type'    => 'post',\\n            'post_author'  => 1\\n        )\\n    );\\n}\\n\\n\\\/\\\/ ---------------------------------------------------------\\n\\\/\\\/ Create navigation menu\\n\\\/\\\/ ---------------------------------------------------------\\n\\n$menu_name = 'OpenLang Demo Menu';\\n$menu = wp_get_nav_menu_object($menu_name);\\n\\nif (!$menu) {\\n\\n    $menu_id = wp_create_nav_menu($menu_name);\\n\\n    if (!is_wp_error($menu_id)) {\\n\\n        $items = array(\\n            $home_id,\\n            $features_id,\\n            $about_id,\\n            $contact_id\\n        );\\n\\n        foreach ($items as $page_id) {\\n\\n            if (!$page_id) {\\n                continue;\\n            }\\n\\n            $page = get_post($page_id);\\n\\n            if (!$page) {\\n                continue;\\n            }\\n\\n            wp_update_nav_menu_item(\\n                $menu_id,\\n                0,\\n                array(\\n                    'menu-item-title'     => $page->post_title,\\n                    'menu-item-object'    => 'page',\\n                    'menu-item-object-id' => $page->ID,\\n                    'menu-item-type'      => 'post_type',\\n                    'menu-item-status'    => 'publish'\\n                )\\n            );\\n        }\\n    }\\n}\\n\\n\\\/\\\/ ---------------------------------------------------------\\n\\\/\\\/ Store a marker that the Playground setup has completed.\\n\\\/\\\/ This is intentionally separate from OpenLang's own options.\\n\\\/\\\/ ---------------------------------------------------------\\n\\nupdate_option('openlang_playground_initialized', 1);\\n\\n\\\/\\\/ Flush rewrite rules after creating pages.\\nflush_rewrite_rules(false);\\n\"}]}"}},"all_blocks":[],"tagged_versions":["2.8.13","2.8.3","2.8.7"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3657091,"resolution":"1","location":"assets","locale":"","width":1488,"height":992},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3657091,"resolution":"2","location":"assets","locale":"","width":1620,"height":1080},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3657091,"resolution":"3","location":"assets","locale":"","width":1620,"height":1080}},"screenshots":{"1":"OpenLang multilingual WordPress dashboard showing translation coverage and status.","2":"Languages screen for enabling and managing website languages.","3":"WordPress translation manager for reviewing and editing detected frontend strings.","4":"Automatic AI translation settings for multilingual websites.","5":"Frontend WordPress language switcher.","6":"Per-language typography, Google Font, and uploaded webfont settings.","7":"Language-specific website logo settings.","8":"CSV translation import\/export and per-language CSS\/JavaScript tools.","9":"Translation coverage, runtime activity, analytics, and system status."}},"plugin_section":[],"plugin_tags":[220668,12519,22323,99,2333],"plugin_category":[48],"plugin_contributors":[276536],"plugin_business_model":[],"class_list":["post-352200","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-translation","plugin_tags-automatic-translation","plugin_tags-language-switcher","plugin_tags-multilingual","plugin_tags-translation","plugin_category-language-tools","plugin_contributors-vynatics","plugin_committers-vynatics"],"banners":{"banner":"https:\/\/ps.w.org\/vynlang\/assets\/banner-772x250.jpg?rev=3657352","banner_2x":"https:\/\/ps.w.org\/vynlang\/assets\/banner-1544x500.jpg?rev=3657352","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/vynlang\/assets\/icon-128x128.png?rev=3655017","icon_2x":"https:\/\/ps.w.org\/vynlang\/assets\/icon-256x256.png?rev=3655017","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/vynlang\/assets\/screenshot-1.jpg?rev=3657091","caption":"OpenLang multilingual WordPress dashboard showing translation coverage and status."},{"src":"https:\/\/ps.w.org\/vynlang\/assets\/screenshot-2.jpg?rev=3657091","caption":"Languages screen for enabling and managing website languages."},{"src":"https:\/\/ps.w.org\/vynlang\/assets\/screenshot-3.jpg?rev=3657091","caption":"WordPress translation manager for reviewing and editing detected frontend strings."}],"raw_content":"<!--section=description-->\n<p>OpenLang is a free WordPress translation plugin for creating multilingual WordPress websites with automatic AI translation and full manual translation control.<\/p>\n\n<p>Translate WordPress without manually creating a separate page for every language. OpenLang discovers visible frontend text at runtime, stores translations for reuse, and serves language-specific URLs with a frontend language switcher.<\/p>\n\n<p>Use OpenLang when you need a multilingual WordPress plugin that combines automatic translation, manual translation editing, RTL support, Elementor language switching, translation caching, per-language typography, language-specific logos, CSV import\/export, and per-language CSS and JavaScript.<\/p>\n\n<p>All features included in this WordPress.org package are free to use and do not require a license key.<\/p>\n\n<h4>Translate WordPress with AI or Manually<\/h4>\n\n<p>OpenLang supports both automatic AI translation and manual WordPress translation in one workflow.<\/p>\n\n<p>For manual translation, OpenLang discovers visible frontend strings and common translatable attributes while pages are rendered. Administrators can review detected strings and edit translations directly from WordPress admin.<\/p>\n\n<p>For automatic translation, OpenLang can translate missing strings through its hosted AI translation service and save the returned translations for reuse. Automatic AI translation is enabled by default and can be disabled at any time under OpenLang &gt; Settings.<\/p>\n\n<p>This gives site owners the speed of automatic website translation while keeping manual control over important wording, brand language, and corrections.<\/p>\n\n<h4>WordPress Translation &amp; Multilingual Features<\/h4>\n\n<ul>\n<li>Translate visible WordPress frontend text discovered at runtime.<\/li>\n<li>Manage manual translations and detected strings from WordPress admin.<\/li>\n<li>Automatically translate missing strings with hosted AI translation.<\/li>\n<li>Create a multilingual WordPress website with multiple enabled languages.<\/li>\n<li>Configure a default website language.<\/li>\n<li>Serve language-specific URLs without manually duplicating every page.<\/li>\n<li>Add a frontend language switcher with local translation caching.<\/li>\n<li>Support both RTL and LTR page direction.<\/li>\n<li>Add an Elementor language-switcher integration.<\/li>\n<li>View translation coverage, runtime activity, analytics, and system status.<\/li>\n<li>Configure typography separately for each language.<\/li>\n<li>Use Google Fonts, system fonts, or uploaded WOFF, WOFF2, TTF, and OTF webfonts.<\/li>\n<li>Set a different website logo for individual languages.<\/li>\n<li>Import and export WordPress translations with CSV.<\/li>\n<li>Add Custom CSS and Custom JavaScript for each language.<\/li>\n<li>Use all included plugin features without license activation.<\/li>\n<\/ul>\n\n<h4>Multilingual WordPress without Duplicate Pages<\/h4>\n\n<p>OpenLang does not require administrators to manually create a separate WordPress page for every translated language.<\/p>\n\n<p>Instead, the plugin detects frontend strings, stores their translations, and serves translated content through language-specific URLs. Visitors can switch languages from the frontend language switcher while OpenLang uses stored translations and local caching where available.<\/p>\n\n<p>This workflow is useful for site owners who want multilingual website translation without maintaining duplicate page structures for every language.<\/p>\n\n<h4>Automatic AI Translation for WordPress<\/h4>\n\n<p>Hosted AI translation is enabled by default. When an enabled language has missing strings, OpenLang can send those strings to the managed translation service, receive translated text, and store the translations for use on the website.<\/p>\n\n<p>Administrators can disable automatic AI translation under OpenLang &gt; Settings and use OpenLang as a manual WordPress translation plugin instead.<\/p>\n\n<p>Automatic translation requests are described in detail in the Privacy and External Services section below.<\/p>\n\n<h4>Elementor Language Switcher, RTL &amp; Language URLs<\/h4>\n\n<p>OpenLang includes a frontend language switcher and an Elementor language-switcher integration for adding language selection to Elementor layouts.<\/p>\n\n<p>Language-specific URLs are used when visitors switch languages. OpenLang also supports both RTL and LTR page direction, making it suitable for multilingual websites that need right-to-left as well as left-to-right layouts.<\/p>\n\n<h4>Per-Language Fonts, Logos, CSS &amp; JavaScript<\/h4>\n\n<p>A multilingual website may need more than translated text. OpenLang lets administrators customize the visual presentation for individual languages.<\/p>\n\n<p>Each language can use its own typography, Google Font, system font, uploaded webfont, website logo, Custom CSS, and Custom JavaScript.<\/p>\n\n<p>Generated language-specific assets are stored under <code>wp-content\/uploads\/vynlang\/assets\/<\/code>.<\/p>\n\n<h4>Translation Management &amp; CSV Import\/Export<\/h4>\n\n<p>Detected WordPress strings can be reviewed and edited from the OpenLang translation manager.<\/p>\n\n<p>Administrators can also import and export translation data with CSV, making it easier to review translations externally, move translation data, or maintain larger translation dictionaries.<\/p>\n\n<h4>Why Choose OpenLang?<\/h4>\n\n<p>OpenLang is designed for WordPress site owners who want a flexible translation workflow without locking core plugin features behind license activation.<\/p>\n\n<ul>\n<li>Free multilingual WordPress plugin with no license key required.<\/li>\n<li>Automatic AI translation for speed.<\/li>\n<li>Manual translation editing for accuracy and control.<\/li>\n<li>No need to manually duplicate every page for each language.<\/li>\n<li>Frontend language switcher and Elementor integration.<\/li>\n<li>RTL and LTR language direction support.<\/li>\n<li>Per-language typography and website branding controls.<\/li>\n<li>CSV translation import and export.<\/li>\n<li>Per-language CSS and JavaScript.<\/li>\n<li>Translation coverage and activity visibility.<\/li>\n<\/ul>\n\n<h4>Privacy and External Services<\/h4>\n\n<p>OpenLang works locally for manual translation management. Hosted automatic translation is enabled by default and can be disabled under OpenLang &gt; Settings.<\/p>\n\n<p>When enabled and missing strings need translation, OpenLang can send requests to:<\/p>\n\n<pre><code>https:\/\/vynatics.corsysltd.com\/server\/api\/translate\n<\/code><\/pre>\n\n<p>A translation request can include source and target language codes, source strings and their MD5 dictionary hashes, the site URL and an MD5 hash of the site URL, and OpenLang and WordPress version numbers.<\/p>\n\n<p>This build has no license activation system and does not require or transmit an OpenLang license key.<\/p>\n\n<p>The public OpenLang REST dictionary endpoint is read-only. It returns locally stored translations and language assets; it does not call the hosted service and does not write translations to the database.<\/p>\n\n<p>If automatic translation is enabled and a visitor requests a language whose current page still contains untranslated strings, OpenLang uses the normal language URL so translation can occur through the server-side page-rendering workflow.<\/p>\n\n<p>If an administrator selects a Google Font, the visitor's browser may load resources from <code>https:\/\/fonts.googleapis.com<\/code> and <code>https:\/\/fonts.gstatic.com<\/code>. Standard request information such as IP address, user agent, and requested font resource may therefore be sent to Google.<\/p>\n\n<p>Google Privacy Policy: https:\/\/policies.google.com\/privacy\nGoogle Terms: https:\/\/policies.google.com\/terms<\/p>\n\n<p>Service provider: Vynatics\nPrivacy policy: https:\/\/vynatics.corsysltd.com\/openlang\/privacy-policy.html\nTerms: https:\/\/vynatics.corsysltd.com\/openlang\/terms-of-service.html\nSupport: d.laeeq@corsysltd.com<\/p>\n\n<h4>Security<\/h4>\n\n<ul>\n<li>Administrative data-changing actions require WordPress capability checks and nonces.<\/li>\n<li>The public translation REST endpoint is read-only and accepts only bounded, validated MD5 hash lookups.<\/li>\n<li>Managed translation requests require HTTPS and use WordPress safe HTTP requests with redirects disabled.<\/li>\n<li>Custom webfont uploads are limited to administrators who can upload files.<\/li>\n<li>CSV import is administrator-only, nonce-protected, limited to CSV files up to 10 MB, and does not execute uploaded content.<\/li>\n<li>CSV exports neutralize leading spreadsheet-formula characters in human-entered text fields.<\/li>\n<li>Custom code changes are administrator-only and nonce-protected; unfiltered JavaScript editing respects WordPress's <code>unfiltered_html<\/code> capability.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>In WordPress, go to Plugins &gt; Add New and search for <code>OpenLang<\/code>, or upload the <code>vynlang<\/code> plugin folder \/ ZIP.<\/li>\n<li>Install and activate <code>OpenLang - AI Language Translator<\/code>.<\/li>\n<li>Open OpenLang &gt; Languages and enable the languages you want on your multilingual website.<\/li>\n<li>Open OpenLang &gt; Translations to review or manually edit detected WordPress strings.<\/li>\n<li>Automatic AI translation is enabled by default; optionally review or disable it under OpenLang &gt; Settings.<\/li>\n<li>Configure the frontend language switcher and Elementor integration as needed.<\/li>\n<li>Configure per-language Typography and Website Logo overrides if needed.<\/li>\n<li>Use OpenLang &gt; Custom CSS \/ JS for language-specific frontend code.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20is%20openlang%3F\"><h3>What is OpenLang?<\/h3><\/dt>\n<dd><p>OpenLang is a free WordPress translation and multilingual plugin that combines manual translation management with optional automatic AI translation, language-specific URLs, RTL support, caching, a frontend language switcher, Elementor integration, and per-language design controls.<\/p><\/dd>\n<dt id=\"is%20openlang%20a%20free%20wordpress%20translation%20plugin%3F\"><h3>Is OpenLang a free WordPress translation plugin?<\/h3><\/dt>\n<dd><p>Yes. All features shipped in this WordPress.org package are available without license activation.<\/p><\/dd>\n<dt id=\"how%20do%20i%20translate%20a%20wordpress%20website%20into%20multiple%20languages%3F\"><h3>How do I translate a WordPress website into multiple languages?<\/h3><\/dt>\n<dd><p>Install OpenLang, enable your languages under OpenLang &gt; Languages, then use OpenLang &gt; Translations to review or edit detected strings. When automatic AI translation is enabled, OpenLang can translate missing strings and store the translations for reuse.<\/p><\/dd>\n<dt id=\"can%20openlang%20translate%20wordpress%20automatically%20with%20ai%3F\"><h3>Can OpenLang translate WordPress automatically with AI?<\/h3><\/dt>\n<dd><p>Yes. Hosted AI translation is enabled by default so missing strings can be translated automatically. Administrators can disable automatic translation under OpenLang &gt; Settings.<\/p><\/dd>\n<dt id=\"can%20i%20translate%20wordpress%20manually%3F\"><h3>Can I translate WordPress manually?<\/h3><\/dt>\n<dd><p>Yes. OpenLang discovers visible frontend strings and lets administrators review and edit translations manually from WordPress admin.<\/p><\/dd>\n<dt id=\"can%20i%20create%20a%20multilingual%20wordpress%20site%20without%20duplicating%20every%20page%3F\"><h3>Can I create a multilingual WordPress site without duplicating every page?<\/h3><\/dt>\n<dd><p>Yes. OpenLang serves language-specific URLs and stored translations without requiring administrators to manually create a separate WordPress page for every language.<\/p><\/dd>\n<dt id=\"does%20openlang%20include%20a%20language%20switcher%3F\"><h3>Does OpenLang include a language switcher?<\/h3><\/dt>\n<dd><p>Yes. OpenLang includes frontend language switching with local translation caching where available.<\/p><\/dd>\n<dt id=\"does%20openlang%20work%20with%20elementor%3F\"><h3>Does OpenLang work with Elementor?<\/h3><\/dt>\n<dd><p>OpenLang includes an Elementor language-switcher integration for adding language selection to Elementor layouts.<\/p><\/dd>\n<dt id=\"does%20openlang%20support%20rtl%20languages%3F\"><h3>Does OpenLang support RTL languages?<\/h3><\/dt>\n<dd><p>Yes. OpenLang supports both RTL and LTR direction handling.<\/p><\/dd>\n<dt id=\"does%20openlang%20use%20language-specific%20urls%3F\"><h3>Does OpenLang use language-specific URLs?<\/h3><\/dt>\n<dd><p>Yes. OpenLang serves translated website views through language-specific URLs when users switch languages.<\/p><\/dd>\n<dt id=\"can%20each%20language%20use%20different%20fonts%20or%20logos%3F\"><h3>Can each language use different fonts or logos?<\/h3><\/dt>\n<dd><p>Yes. OpenLang supports per-language typography, Google Fonts, system fonts, uploaded webfonts, and website-logo overrides.<\/p><\/dd>\n<dt id=\"can%20i%20add%20different%20css%20or%20javascript%20for%20each%20language%3F\"><h3>Can I add different CSS or JavaScript for each language?<\/h3><\/dt>\n<dd><p>Yes. OpenLang includes per-language Custom CSS and Custom JavaScript controls and generates language-specific asset files.<\/p><\/dd>\n<dt id=\"can%20i%20import%20and%20export%20wordpress%20translations%20with%20csv%3F\"><h3>Can I import and export WordPress translations with CSV?<\/h3><\/dt>\n<dd><p>Yes. Administrators can import and export translation data using CSV files.<\/p><\/dd>\n<dt id=\"is%20automatic%20ai%20translation%20required%3F\"><h3>Is automatic AI translation required?<\/h3><\/dt>\n<dd><p>No. Automatic AI translation can be disabled under OpenLang &gt; Settings. You can continue using the plugin for manual translation management.<\/p><\/dd>\n<dt id=\"does%20openlang%20require%20a%20license%20key%3F\"><h3>Does OpenLang require a license key?<\/h3><\/dt>\n<dd><p>No. This WordPress.org build has no license activation system, and all features included in the package are available without a license key.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.8.13<\/h4>\n\n<ul>\n<li>Replaced the Languages dashboard switch-position HTML select with the same visual card selector used by the setup wizard.<\/li>\n<li>Added a prebuilt language quick-add selector to the Languages dashboard.<\/li>\n<li>Prebuilt languages automatically populate code, language name, native name, RTL direction, and enabled state while custom language entry remains available.<\/li>\n<li>Added duplicate-language detection that highlights and re-enables an existing language instead of adding a duplicate row.<\/li>\n<\/ul>\n\n<h4>2.8.12<\/h4>\n\n<ul>\n<li>Converted setup wizard Save &amp; Continue, Skip this step, and Back navigation to AJAX so steps change without reloading the WordPress admin page.<\/li>\n<li>Added AJAX-rendered step refreshes so languages saved in step 1 are immediately available to Typography and Website Logo steps.<\/li>\n<li>Added browser Back\/Forward history synchronization for setup steps.<\/li>\n<li>Reinitialize Google Font and Media Library controls after dynamic wizard step changes.<\/li>\n<li>Retained the existing admin-post flow as a no-JavaScript fallback.<\/li>\n<\/ul>\n\n<h4>2.8.11<\/h4>\n\n<ul>\n<li>Refined setup wizard layout to a single-column app grid, 950px content width, and reset active-step margin.<\/li>\n<\/ul>\n\n<h4>2.8.10<\/h4>\n\n<ul>\n<li>Removed the OpenLang dashboard header from the setup wizard so onboarding starts directly with the wizard content.<\/li>\n<li>Kept Save &amp; Continue \/ Finish Setup button text and Dashicons white across normal, hover, focus, and active states.<\/li>\n<\/ul>\n\n<h4>2.8.9<\/h4>\n\n<ul>\n<li>Fixed setup wizard access by registering onboarding as a hidden WordPress admin page without removing its access mapping.<\/li>\n<\/ul>\n\n<h4>2.8.8<\/h4>\n\n<ul>\n<li>Added a guided setup wizard that opens after plugin activation.<\/li>\n<li>Added four onboarding steps for languages, floating switcher position, per-language typography, and per-language website logos.<\/li>\n<li>Languages configured in the first step are automatically available in the Typography and Website Logo steps.<\/li>\n<li>Added per-step skip controls and a full \"Skip setup wizard\" action.<\/li>\n<li>Reused the existing OpenLang language, typography, logo, cache, and Media Library settings so wizard changes remain editable from the normal dashboard pages.<\/li>\n<\/ul>\n\n<h4>2.8.7<\/h4>\n\n<ul>\n<li>Changed Custom CSS and Custom JavaScript from site-wide code to per-language assets.<\/li>\n<li>Added per-language CSS\/JS storage, language switching in the editor, DOM-ready and document-head JavaScript options, AJAX load\/save\/reset, and unsaved-change protection.<\/li>\n<li>Generate cache-busted files under <code>wp-content\/uploads\/vynlang\/assets\/css\/{language}.css<\/code> and <code>wp-content\/uploads\/vynlang\/assets\/js\/{language}.js<\/code>.<\/li>\n<li>Enqueue generated files only for the active server-rendered language and dynamically replace them during client-side language switching.<\/li>\n<li>Preserve 2.8.6 site-wide custom code by migrating it into the default language on upgrade.<\/li>\n<li>Kept custom-code changes nonce\/capability protected and retained WordPress <code>unfiltered_html<\/code> enforcement for JavaScript editing.<\/li>\n<\/ul>","raw_excerpt":"Translate WordPress with AI or manual control. Build multilingual sites with language URLs, RTL support, Elementor switcher, fonts and logos.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/352200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=352200"}],"author":[{"embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/vynatics"}],"wp:attachment":[{"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=352200"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=352200"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=352200"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=352200"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=352200"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=352200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}