{"id":11899,"date":"2026-09-27T16:06:06","date_gmt":"2026-09-27T08:06:06","guid":{"rendered":"https:\/\/aeosub.com\/saintlang\/"},"modified":"2026-09-27T16:06:06","modified_gmt":"2026-09-27T08:06:06","slug":"saintlang","status":"publish","type":"post","link":"https:\/\/aeosub.com\/zh\/saintlang\/","title":{"rendered":"SaintLang"},"content":{"rendered":"<div class=\"post-img\" style=\"margin-bottom: 25px\"><img decoding=\"async\" src=\"https:\/\/ps.w.org\/saintlang\/assets\/banner-1544x500.png?rev=3715127\" alt=\"SaintLang\" loading=\"lazy\" style=\"width: 100%;height: auto;border-radius: 12px\"><\/div>\n<div class=\"plugin-expert-review\" style=\"border: 1px solid #e2e8f0;border-left: 4px solid #4a3bca;border-radius: 10px;padding: 20px;margin-bottom: 25px;background: #fff;font-family: -apple-system, system-ui, sans-serif\">\n<div style=\"font-weight: bold;font-size: 1.1em;color: #4a3bca;margin-bottom: 10px\">LethaldiranMX Insight<\/div>\n<div style=\"color: #4a5568;font-size: 14px;line-height: 1.6\">\n<div>\n<p>SaintLang addresses one of the most persistent pain points in WordPress multilingual development by keeping translations bound to a single post ID, drastically reducing database bloat and simplifying content relationships. By integrating directly into the native Gutenberg and Classic editors with a unified language bar, it eliminates the jarring context switching and synchronization issues often associated with traditional translation plugins. Its robust, native support for complex Advanced Custom Fields (ACF) structures, WooCommerce, and modern page builders makes it a highly viable contender for developers looking to maintain clean database architectures while delivering a seamless editorial workflow.<\/p>\n<p><strong>Best Fit &amp; Operational Role:<\/strong> This plugin is an excellent fit for agency developers and enterprise site builders who want to avoid the architectural mess of duplicating post IDs for every language, which frequently breaks relational fields, custom database queries, and third-party integrations. It operates as a lightweight, editor-first translation layer that fits perfectly into modern WordPress stacks using Gutenberg, Elementor, or Bricks. By keeping the content lifecycle tied to a single ID, it simplifies data synchronization, REST API consumption, and WP-CLI scripting, making it ideal for high-traffic sites where database performance and relational integrity are critical operational priorities.<\/p>\n<p><strong>Potential Limitations &amp; Pitfalls:<\/strong> While the same-ID architecture prevents post-table bloat, storing translated fields within the same post record shifts the data payload to postmeta or custom tables, which could impact database query performance on massive WooCommerce catalogs if not properly indexed. Additionally, because it bypasses the standard WordPress post-duplication model, legacy plugins or custom themes that explicitly expect distinct post IDs per language for querying or routing may require custom compatibility helpers. On the privacy and security front, while the core plugin is self-contained, utilizing the optional AI translation features (DeepL, Google, or the WordPress AI Client) introduces external API dependencies and data transit that must be carefully audited in strict data-sovereignty or GDPR-compliant environments.<\/p>\n<\/div>\n<\/div><\/div>\n<div class=\"plugin-info-card\" style=\"border: 1px solid #e2e8f0;border-radius: 10px;overflow: hidden;margin-bottom: 30px;font-family: -apple-system, system-ui, sans-serif;background: #fff\">\n<div style=\"padding: 20px;border-bottom: 1px solid #edf2f7;background: #fafafa;display: flex;align-items: flex-start\">\n                <img decoding=\"async\" src=\"https:\/\/ps.w.org\/saintlang\/assets\/icon.svg?rev=3715127\" alt=\"SaintLang icon\" loading=\"lazy\" style=\"width: 45px;height: 45px;border-radius: 8px;margin-right: 15px\"> <\/p>\n<div style=\"flex: 1;line-height: 1.2\">\n<div style=\"font-weight: bold;font-size: 1.1em;color: #1a202c\">Plugin Specification<\/div>\n<p>                    <small style=\"color: #718096\">WordPress.org Official Data<\/small>\n                <\/div>\n<\/p><\/div>\n<table style=\"width: 100%;border-collapse: collapse;font-size: 14px\">\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;width: 35%;color: #4a5568;background: #fcfcfc\">Developer<\/th>\n<td style=\"padding: 12px 20px;font-weight: 500\"><a href=\"https:\/\/profiles.wordpress.org\/sainthossam\/\" target=\"_blank\" rel=\"noopener\">sainthossam<\/a><\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Version<\/th>\n<td style=\"padding: 12px 20px\">v1.0.0<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Active Installs<\/th>\n<td style=\"padding: 12px 20px\">0 +<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Requires \/ Tested<\/th>\n<td style=\"padding: 12px 20px\">6.5 \/ 7.1.2<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Last Updated<\/th>\n<td style=\"padding: 12px 20px\">2026-09-27 8:04am GMT<\/td>\n<\/tr>\n<tr>\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Official Link<\/th>\n<td style=\"padding: 12px 20px\"><a href=\"https:\/\/wordpress.org\/plugins\/saintlang\/\" target=\"_blank\" rel=\"noopener noreferrer\" style=\"text-decoration: none;color: #4a3bca;font-weight: bold\">View Details -&gt;<\/a><\/td>\n<\/tr>\n<\/table><\/div>\n<div class=\"plugin-short-desc\" style=\"margin: 20px 0;padding: 12px 15px;background: #f9fafb;border-left: 4px solid #4a3bca;border-radius: 6px;font-style: italic;color: #4a5568\">Editor-first multilingual content, same-ID translations, language URLs, string translation, SEO, glossary and optional AI providers.<\/div>\n<p>SaintLang is a multilingual translation plugin for WordPress focused on a fast editor workflow.<\/p>\n<p>Each language stays attached to the same native WordPress post, page, product, or custom post ID. SaintLang stores translated fields by language instead of creating a second WordPress post for every translation.<\/p>\n<p>Key features:<\/p>\n<ul>\n<li>One language bar in Gutenberg and the Classic Editor: pick a language and the native editor opens in it, with WordPress&#8217; own Update button saving that language.<\/li>\n<li>Translates titles, content, excerpts and Advanced Custom Fields (all field types, including repeaters and flexible content).<\/li>\n<li>Posts and Pages list language tabs without full-page reloads.<\/li>\n<li>Same WordPress content ID across all configured languages.<\/li>\n<li>Original-content fallback until a missing translation is saved.<\/li>\n<li>Explicit language catalog: only languages selected by an administrator are configured.<\/li>\n<li>Language URL modes: language directories such as \/en\/ (recommended), subdomains such as en.example.com, or a ?lang= parameter.<\/li>\n<li>hreflang and x-default output.<\/li>\n<li>String Translation for WordPress Gettext strings on the public site.<\/li>\n<li>Translation Memory and terminology glossary.<\/li>\n<li>Optional AI translation through the WordPress AI Client (WordPress 7.0+), DeepL or Google Cloud Translation.<\/li>\n<li>WooCommerce, ACF, Yoast SEO, Rank Math, Elementor and Bricks compatibility helpers.<\/li>\n<li>Header language switcher and [saintlang_switcher] shortcode.<\/li>\n<li>English and Arabic SaintLang dashboard UI with RTL support.<\/li>\n<li>REST API and WP-CLI commands.<\/li>\n<\/ul>\n<h3>Shortcode<\/h3>\n<p>Use:<\/p>\n<pre><code>[saintlang_switcher]\n<\/code><\/pre>\n<p>Optional attributes:<\/p>\n<pre><code>[saintlang_switcher flags=\"1\" names=\"1\" hide_current=\"0\" style=\"dropdown\"]\n\nstyle accepts `dropdown`, `pills` or `minimal`.&lt;h3&gt;External Services&lt;\/h3&gt;\n<\/code><\/pre>\n<p>SaintLang connects to third-party services only for the optional AI translation features described below. No request is sent unless the provider has been configured and an authorized user explicitly runs an AI translation action or job.<\/p>\n<h4>WordPress AI Client (WordPress 7.0+)<\/h4>\n<p>When the &#8220;WordPress AI&#8221; provider is selected and an authorized user runs an AI translation, SaintLang sends the text to translate and translation instructions to the WordPress AI Client. WordPress then sends it to the AI provider the site owner connected in Settings <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Connectors. SaintLang does not store AI provider credentials or contact AI providers directly; the connected provider&#8217;s own terms and privacy policy apply.<\/p>\n<h4>DeepL<\/h4>\n<p>Used to translate text with DeepL. When requested, SaintLang sends the text to translate and the source\/target language codes to api.deepl.com or api-free.deepl.com.<\/p>\n<p>DeepL Terms: https:\/\/www.deepl.com\/pro-license<br \/>\nDeepL Privacy Policy: https:\/\/www.deepl.com\/privacy<\/p>\n<h4>Google Cloud Translation<\/h4>\n<p>Used to translate text with Google Cloud Translation. When requested, SaintLang sends the text to translate and the source\/target language codes to translation.googleapis.com.<\/p>\n<p>Google Cloud Terms: https:\/\/cloud.google.com\/terms\/<br \/>\nGoogle Privacy Policy: https:\/\/policies.google.com\/privacy<\/p>\n<h3>Privacy<\/h3>\n<p>SaintLang does not include telemetry, advertising, or hidden tracking.<\/p>\n<p>When a visitor chooses a language, SaintLang stores a <code>saintlang_lang<\/code> cookie so background requests (for example AJAX cart updates) use the same language. Page URLs always decide which language a page is shown in. SaintLang stores the SaintLang dashboard-language preference in WordPress user meta for logged-in users.<\/p>\n<p>Content is sent to an external AI\/translation provider only when an authorized user has configured that provider and explicitly runs an AI translation action or job.<\/p>\n<h3>WP-CLI<\/h3>\n<pre><code>wp saintlang languages\nwp saintlang scan-strings\nwp saintlang translate 123 --to=ar\nwp saintlang seo-audit&lt;h3&gt;Developer Notes&lt;\/h3&gt;\n<\/code><\/pre>\n<p>Post types can be excluded from translation (no language bar, no translation storage) with the <code>saintlang_translatable_post_type<\/code> filter: <code>add_filter( 'saintlang_translatable_post_type', fn( $on, $type ) =&gt; 'my_form_entry' === $type ? false : $on, 10, 2 );<\/code><\/p>\n<p>SaintLang uses WordPress capabilities, permission callbacks on REST routes, native enqueue functions, the Options API, user meta, WP-Cron \/ Action Scheduler integration when available, and WordPress database APIs.<\/p>\n<p>No third-party JavaScript UI framework or CDN asset is used. The admin interface font (Cairo), icons and country flags are bundled with the plugin, so SaintLang never loads images or fonts from external servers.<\/p>\n<h3>Source Code<\/h3>\n<p>SaintLang has no build step. The JavaScript files in assets\/js\/ (admin.js, editor.js, classic-editor.js, content-list.js, language-switch.js, frontend.js) and the stylesheets in assets\/css\/ are the original, human-readable source files. They are written by hand in plain JavaScript and CSS, with no bundler, transpiler or minifier, and are shipped exactly as written. No npm, webpack or other build tooling is needed to read, modify or rebuild them.<\/p>\n<p>The inline SVG icons in the JavaScript files are copied unchanged from Lucide (https:\/\/github.com\/lucide-icons\/lucide, ISC License).<\/p>\n<h3>WordPress Admin Isolation<\/h3>\n<p>SaintLang does not reposition, restyle, translate, or change the direction of the native WordPress admin menu or toolbar.<br \/>\nDashboard Arabic\/English direction changes are scoped only to the SaintLang application area.<\/p>\n<h3>Credits<\/h3>\n<ul>\n<li>Cairo font by The Cairo Project Authors, licensed under the SIL Open Font License 1.1 (assets\/fonts\/OFL.txt).<\/li>\n<li>Interface icons from Lucide (https:\/\/lucide.dev), licensed under the ISC License.<\/li>\n<li>Country flags from flag-icons by Panayiotis Lipiridis (https:\/\/github.com\/lipis\/flag-icons), licensed under the MIT License (assets\/flags\/LICENSE.txt).<\/li>\n<\/ul>\n<div class=\"plugin-editorial-note\" style=\"margin-top: 25px;padding: 12px 15px;background: #f8fafc;border-radius: 6px;color: #64748b;font-size: 13px;line-height: 1.5\">Editorial note: This overview combines WordPress.org official plugin metadata with an AI-assisted LethaldiranMX editorial review. Plugin data should be verified on the official WordPress.org listing before installation.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Editor-first multilingual content, same-ID translations, language URLs, string translation, SEO, glossary and optional AI providers.<\/p>","protected":false},"author":1,"featured_media":11900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[252],"tags":[1478,2997,654,554,657,555],"class_list":["post-11899","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trends","tag-hreflang","tag-localization","tag-multilingual","tag-seo","tag-translation","tag-wordpress-plugin"],"_links":{"self":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/11899","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/comments?post=11899"}],"version-history":[{"count":0,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/11899\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media\/11900"}],"wp:attachment":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media?parent=11899"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/categories?post=11899"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/tags?post=11899"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}