Title: Lang Forge – Multilingual, Translation &amp; hreflang SEO
Author: avakodeforge
Published: <strong>30 Luulyo, 2026</strong>
Last modified: 25 Oktoobar, 2026

---

Raadi kaabayaal

![](https://ps.w.org/langforge/assets/banner-772x250.png?rev=3748973)

![](https://ps.w.org/langforge/assets/icon-256x256.png?rev=3748973)

# Lang Forge – Multilingual, Translation & hreflang SEO

 Qore [avakodeforge](https://profiles.wordpress.org/avakodeforge/)

[Soo Rog](https://downloads.wordpress.org/plugin/langforge.1.3.0.zip)

 * [Faahfaahin](https://so.wordpress.org/plugins/langforge/#description)
 * [Dibu-eegisyo](https://so.wordpress.org/plugins/langforge/#reviews)
 *  [Rakibaad](https://so.wordpress.org/plugins/langforge/#installation)
 * [Horumarinta](https://so.wordpress.org/plugins/langforge/#developers)

 [Taageero](https://wordpress.org/support/plugin/langforge/)

## Sharraxaad

**Lang Forge** is a modern multilingual plugin that handles multilingual URL routing(
4 URL formats), manual post and string translation, a language switcher, hreflang
SEO, RTL layouts, a glossary, WooCommerce, unlimited languages, and one-click migration
from WPML / Polylang / TranslatePress. It ships a REST API and WP-CLI commands and
is a drop-in WPML compatibility layer. AI translation is available as the **Lang
Forge Pro** add-on.

#### Switching from WPML, Polylang or TranslatePress?

Lang Forge imports your existing setup instead of making you start over. The migration
tool reads your current plugin’s data and recreates it: translated posts and their
language links, string translations, taxonomy translations, and your language URL
structure.

The migration is non-destructive. Your current plugin stays installed and untouched
until you confirm the result, so you can compare both side by side and roll back
if anything looks wrong.

If you are coming from WPML, you can also keep your existing theme and plugin code.
Lang Forge ships a WPML compatibility layer that implements the functions third-
party code expects — `icl_object_id()`, `icl_get_languages()`, `icl_get_current_language()`
and `icl_get_default_language()` — so integrations built against WPML call the same
functions without edits. One difference to check: unlike WPML, a translation that
is still a draft counts as “no translation” for visitors, so `icl_object_id()` gives
back the original page (or nothing) until you publish the translation.

#### Free

 * Unlimited languages
 * Multilingual URL routing — 4 formats (directory `/fr/`, query `?lang=fr`, subdomain,
   domain mapping)
 * Manual post / page / CPT translation linking
 * Manual string translation (auto-registered via gettext)
 * Language switcher (widget / shortcode / admin bar)
 * hreflang tags with x-default, plus an hreflang sitemap
 * Glossary
 * WooCommerce product and store string translation
 * WPML compatibility layer (`icl_object_id()`, `icl_get_languages()`, etc.)
 * REST API + WP-CLI commands
 * One-click migration from WPML / Polylang / TranslatePress
 * RTL support (ar/he/fa/ur/ku)

#### Pro

 * AI translation with translation memory
 * Visual editor (side-by-side WYSIWYG translation)
 * Frontend translation
 * Elementor + ACF integration
 * Content diff + Translation QA
 * Analytics dashboard
 * Import / export XLIFF + CSV
 * Bulk AI translation, translator roles, media/comment translation, live preview
 * Priority email support with an active Pro licence

Part of the **Forge Suite**: twelve WordPress and WooCommerce plugins by Avakode,
including Rank Forge, Form Forge and Field Forge.

### External services

Every outbound request this plugin makes is listed below. Activating it, and opening
its screens, contacts nobody.

This plugin contacts no external service. Translation, the language switcher, string
translation, hreflang and migration run on your own site, and the plugin has no 
analytics, no telemetry and no licensing calls of its own. AI translation and quality
checks belong to the separate Lang Forge Pro add-on, which describes the services
it uses in its own documentation.

## Sawir-shaashado

[⌊Multilingual setup — add unlimited languages, set language codes, display labels,
switcher visibility and the default language.⌉⌊Multilingual setup — add unlimited
languages, set language codes, display labels, switcher visibility and the default
language.⌉[

Multilingual setup — add unlimited languages, set language codes, display labels,
switcher visibility and the default language.

[⌊Post translation — the Language panel lists every linked translation and creates
missing ones in one click.⌉⌊Post translation — the Language panel lists every linked
translation and creates missing ones in one click.⌉[

Post translation — the Language panel lists every linked translation and creates
missing ones in one click.

[⌊Translation management — a language column on the posts list with per-language
filters, counts and translation shortcuts.⌉⌊Translation management — a language 
column on the posts list with per-language filters, counts and translation shortcuts
.⌉[

Translation management — a language column on the posts list with per-language filters,
counts and translation shortcuts.

[⌊Multilingual URL structure — choose subdirectory, query parameter, subdomain or
domain mapping, and set the language fallback chain.⌉⌊Multilingual URL structure—
choose subdirectory, query parameter, subdomain or domain mapping, and set the language
fallback chain.⌉[

Multilingual URL structure — choose subdirectory, query parameter, subdomain or 
domain mapping, and set the language fallback chain.

[⌊Language switcher — the front-end switcher with flags and native language names.⌉⌊
Language switcher — the front-end switcher with flags and native language names.⌉[

Language switcher — the front-end switcher with flags and native language names.

[⌊Migration — Lang Forge detects an existing WPML, Polylang or TranslatePress install
and imports it without touching the original data.⌉⌊Migration — Lang Forge detects
an existing WPML, Polylang or TranslatePress install and imports it without touching
the original data.⌉[

Migration — Lang Forge detects an existing WPML, Polylang or TranslatePress install
and imports it without touching the original data.

## Rakibaad

 1. Upload `langforge` to `/wp-content/plugins/`, or install via Plugins  Add New.
 2. Activate the plugin.
 3. Go to **Lang Forge  Settings** and enable your target languages.
 4. (Optional) AI translation comes with the separate Lang Forge Pro add-on; the add-
    on adds its own Connect screen.

## SBI

### How do I make my WordPress site multilingual?

Install Lang Forge, go to Lang Forge  Settings and add the languages you need. Pick
how language URLs should look — subdirectories like /fr/, a query parameter, subdomains,
or a separate domain per language. From there every post, page and custom post type
gets a Language panel where you link or create its translations.

### How do I translate WooCommerce products and categories?

Lang Forge translates WooCommerce product content, product categories and tags, 
and store strings such as cart and checkout labels. Open any product in the editor
and use the Language panel the same way you would for a post.

### How do I add hreflang tags to WordPress?

Lang Forge outputs hreflang tags automatically in `wp_head` for every translated
URL, including the x-default entry, and generates an hreflang sitemap. No manual
markup and no separate SEO plugin configuration needed.

### Can I use a separate domain for each language?

Yes. Domain mapping is one of the four supported URL formats, alongside subdirectories,
subdomains and query parameters. You can point example.fr and example.de at the 
same WordPress install and Lang Forge will serve the correct language on each.

### How do I migrate from Polylang without losing translations?

Run the built-in migration tool. It imports your translated posts, the links between
them, your string translations and your language URL structure. Polylang stays installed
and untouched until you confirm the migration, so nothing is lost if you change 
your mind.

### Can I migrate from WPML?

Yes, and your existing code can keep calling the same functions. Beyond importing
your content, Lang Forge provides a WPML compatibility layer implementing `icl_object_id()`,`
icl_get_languages()` and related functions, so themes and plugins written against
WPML work without modification. One difference: unlike WPML, a translation that 
is still a draft counts as “no translation” for visitors, so these functions return
the original page (or nothing) until the translation is published; editors previewing
the draft still see it.

### Will my URLs change if I switch from TranslatePress?

Only if you want them to. The migration tool reads your current language URL format
and reproduces it, so existing links and search rankings stay intact. You can change
the format later from Settings if you decide to.

### Does it support right-to-left languages like Arabic and Hebrew?

Yes. Lang Forge includes RTL support for Arabic, Hebrew, Persian, Urdu and Kurdish,
switching text direction and adjusting the admin and switcher layout automatically.

### How do I add a language switcher to my menu?

The switcher is available three ways: as a widget, as a shortcode you can drop anywhere,
and in the admin bar. It can display flags, native language names, or both.

### How do I translate strings from my theme or another plugin?

Any string passed through WordPress translation functions is registered automatically
via gettext and appears in the String Translation screen, where you can translate
it per language. No .po file editing required.

### Can I translate my site from the command line?

Yes. Lang Forge ships WP-CLI commands for listing languages, linking and unlinking
translations, importing and exporting translation data, and running bulk operations—
useful for staging deployments and scripted workflows.

### My site has a very large String Translation table. How do I update its key?

After an update Lang Forge rebuilds the key of its strings table once, when an admin
page is opened, so that names that differ only in case or accent (“Size” and “size”,“
Resume” and “Résumé”) are separate strings. On a site whose strings table has more
than 500,000 rows it does not change the table when the admin is opened, because
a web request must not hold such a table for minutes, and the admin shows no notice
about it. Run `wp langforge strings-key` to see the state and `wp langforge strings-
key --yes` to rebuild the key, whatever the number of rows. Until then the site 
works as before.

### Is there a way to export translations to XLIFF or CSV?

Import and export of XLIFF and CSV files is available in Lang Forge Pro, for sending
content to external translators or translation agencies.

### How many languages can I use on the free version?

Unlimited. There is no plan-based cap on the number of languages in the free version.

### Does Lang Forge work with my theme?

Yes. Lang Forge uses standard WordPress hooks — `the_content`, `get_the_title`, 
hreflang via `wp_head` — so no theme-specific integration is needed.

### Does it work with Elementor and ACF?

Elementor and ACF field translation is available in Lang Forge Pro. The free version
handles standard post content, custom post types and taxonomies.

### Does it slow down my site?

Basic translation, the language switcher, string translation and hreflang all run
locally with no external requests.
 This plugin sends nothing anywhere. The separate
Pro add-on, if you add it, lists its own requests in its readme.

### Is AI translation included in the free version?

No. The free version covers manual translation of posts, strings, taxonomies and
WooCommerce content. AI translation, translation memory and bulk AI translation 
are part of the Lang Forge Pro add-on.

### How much does AI translation cost?

AI translations consume Forge Credits (separate from the subscription). One credit
≈ one short paragraph. Credits don’t expire.

### Is my content sent to OpenAI?

Not by this plugin; AI translation is a feature of the separate Pro add-on, which
lists its own requests in its readme.

### What is a glossary and when do I need one?

A glossary is your list of terms and the translation each one must have in another
language: brand names, product names, industry terminology. A term can also be marked
Do Not Translate, to stay as written. Terms are kept per language pair on the Glossary
screen; you add them one by one or import a CSV file, and matching ignores letter
case unless you switch on Case Sensitive.

The glossary does not change a translation and never stops you from saving one. 
When you save a translation of a post or page, or translations on the String Translation
screen, Lang Forge compares them with the original and lists the glossary terms 
the translation does not follow, so you can correct them: in the Language box of
the editor and in a notice after the save. The comparison looks for the term as 
it is written, so a term in another grammatical form (another case or plural ending)
may be listed as missing.

AI translation (the Lang Forge Pro add-on) sends the glossary of the language pair
with its requests, and the AI is told to use your translations and to keep Do Not
Translate terms as written. Adding or changing a term also drops the Translation
Memory entries that contain it, so the next AI translation uses the new term.

You need a glossary when names and terms must read the same on every translated 
page: a product name that must stay in English, or a term your industry translates
one particular way.

## Dibu-eegisyo

Ma jiraan wax dibu-eegis ah oo ku saabsan kaabahan.

## Ka-qaybgalayaasha & Horumariyayaasha

“Lang Forge – Multilingual, Translation & hreflang SEO” waa softiweer il furan. 
Dadka soo socda ayaa wax ku biiriyay kaabahan.

Ka-qaybgalayaasha

 *   [ avakodeforge ](https://profiles.wordpress.org/avakodeforge/)

“Lang Forge – Multilingual, Translation & hreflang SEO” waxaa lagu tarjumay 7 luqadood.
Way ku mahadsan yihiin [turjumaannada](https://translate.wordpress.org/projects/wp-plugins/langforge/contributors)
ka-qaybqaadashadooda.

[Ku tarjun “Lang Forge – Multilingual, Translation & hreflang SEO” luqaddaada.](https://translate.wordpress.org/projects/wp-plugins/langforge)

### Ma xiisaynaysaa horumarinta?

[Baadh koodka](https://plugins.trac.wordpress.org/browser/langforge/), fiiri [bakhaarka SVN](https://plugins.svn.wordpress.org/langforge/),
ama iska qor [diiwaanka horumarinta](https://plugins.trac.wordpress.org/log/langforge/)
adigoo adeegsanaya [RSS](https://plugins.trac.wordpress.org/log/langforge/?limit=100&mode=stop_on_copy&format=rss).

## Isbeddellada

#### 1.3.0

 * Migration from WPML and Polylang now brings over the translations of categories,
   tags and other taxonomies: each translated pair becomes one linked group, as 
   the posts do, and a second run does not double the rows. WPML’s own bookkeeping
   taxonomy (translation priority) and taxonomies the site does not register are
   left out. Migration from Polylang no longer reads Polylang’s “sync” list in a
   translation group as a post.
 * The glossary now checks translations typed by hand. When you save a post or page,
   or translations on the String Translation screen, Lang Forge compares them with
   the original and lists the glossary terms the translation does not follow: in
   the Language box of the editor (the block editor shows it right after the save)
   and in a notice after the save. It only warns: nothing is blocked or changed.
   The check reads HTML entities such as & as the characters they stand for. The
   REST API gives the same list in the read-only field `langforge_glossary_warnings`
   of a post, for people who can edit it. The comparison looks for the term as written,
   so a term in another grammatical form can be listed by mistake.
 * Glossary CSV: importing a file you exported gives the terms back as they were.
   A term, translation or description that starts with “=”, “+”, “-” or “@” no longer
   gets a stray apostrophe in front of it.
 * Fixed: a post with the same number as a translated category or tag no longer 
   picks up that category’s translations in the hreflang tags, the language switcher
   and the hreflang sitemap. Deleting a post no longer erases the translations of
   a category or tag with the same number, the migration from WPML, Polylang and
   TranslatePress no longer deletes term translations, and the counts and the list
   of outdated translations on the Translation Status screen count posts only.
 * Fixed: with a static front page, the front page of another language declared 
   the English home page and x-default at /home/ in the hreflang tags; it now declares
   the address of the site. A category, tag or other taxonomy archive names in hreflang
   only the languages it is translated into, with the address of the translated 
   archive; date, author and post type archives name only their own language. The
   hreflang address of an archive, an author page, a date page or a later page ends
   with the same slash as its canonical address, and on a site whose permalinks 
   end without a slash the home of a language (/es/) keeps its slash in canonical
   and hreflang.
 * Language addresses on sites that give each language a subdomain or a domain: 
   one rule now builds the address of a language in permalinks, hreflang, canonical,
   the language switcher and localized links, and a redirect to the host of a language
   is let through. A post opened by its slug follows the same language rule as a
   page: with no fallback language, or with fallbacks off, it is not shown under
   another language’s address. The fallback for a page that is not found takes the
   language from the same reading of the request as the check that allows it, the
   language cookie included.
 * The short address of a translation (/?p=, the one of the “shortlink” tag) now
   opens that translation in its own language instead of redirecting to the post
   in the default language.
 * The redirect to the browser language skips search engine crawlers (Googlebot,
   Bingbot and others; Sogou crawlers are recognized by their robot names, the Sogou
   mobile browser is a visitor). The list can be changed with the filter `langforge_crawler_user_agents`.
 * The language switcher in the admin bar, on the pages of the site, now links to
   the translation of the page you are on. Before, it linked to the home page of
   the language.
 * The Shop page of a language (for example /es/tienda/) now lists the products 
   of that language.
 * The Language box now runs the action `langforge_meta_box_after_translations` 
   after the list of translations. Before, nothing ran it, so the WooCommerce hint
   of a product and the Live Preview buttons of Lang Forge Pro, which wait for it,
   were never shown.
 * WPML compatibility: `wpml_object_id()` and `icl_object_id()` find the translation
   of a category, tag or other term. Where WPML is not installed, `ICL_LANGUAGE_CODE`,`
   ICL_LANGUAGE_NAME` and `ICL_LANGUAGE_NAME_EN` are defined with the current language;
   before, WP Recipe Maker stopped the post edit screen with an undefined constant.
 * A notice warns when Polylang or TranslatePress is active next to Lang Forge, 
   as it already did for WPML. It has the same screens and a link to the Migration
   screen.
 * REST: the `langforge_translations` field of a post lists the published translations
   for a visitor who is not signed in, so a headless front end can build its language
   switcher; drafts and private translations stay hidden. It lists only the translations
   of the type of the post asked about.
 * WP-CLI: `wp langforge link` refuses a post that does not exist (“Post N not found.”)
   and writes nothing; linking two posts that are already translations of each other
   changes nothing. `wp langforge unlink` says “Post N not found.” for a post that
   does not exist instead of reporting Success. `wp langforge set-language`, `translate`
   and `export --lang=xx` refuse a language the site does not have and list the 
   languages it has.
 * Fixed: the cross that unlinks a translation of a category or tag works on the
   edit screen of a single term, not only in the list of terms. Updating a translated
   post through the REST API, XML-RPC, WP-CLI or an app (for example only its title)
   no longer moves it to “Uncategorized”: the categories and tags the post already
   has are no longer hidden from the request that saves it. Category and tag lists
   on the site pages are still shown in the language of the page.
 * Elementor: when a page is copied into another language, only the elements get
   new IDs; the IDs inside the settings of an element (a picture, a gallery) stay
   as they are. Lang Forge also remembers which element of the copy belongs to which
   element of the original, which the Visual Editor of Lang Forge Pro 1.4.0 uses
   to save Elementor text into the right element.
 * Messages with a number take the plural form of that number in every language,
   also in languages with more than two forms, such as Russian, Polish and Arabic:
   the count of imported glossary terms, of the posts of a removed language and 
   of the other counted messages.
 * The Forge Suite dashboard names Form Forge as Fillin Forge, Clearway Forge links
   open the pages Clearway registers, an installed plugin is taken for a product
   only by its known main file or text domain, and the Results CSV download holds
   the rows only, with no page of text at its end.
 * The Forge Suite dashboard no longer carries prices or a purchase link in this
   package.
 * The texts added or changed in this release (the glossary warnings, the Polylang
   and TranslatePress notice, the plural forms) are translated into the 15 shipped
   languages.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.12

 * The Forge Suite dashboard lists Cascade Forge and Inclusive Forge as available
   on wordpress.org. The plugin logo and icon use the new mark.
 * The shared e-mail template carries a note for the wordpress.org code check; the
   e-mails it sends are unchanged.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.11

 * Alt text and caption of a picture can be translated. The Media Translations box
   on the full Edit Media screen of a picture (pictures only, not PDF or video files)
   now saves what you type for each language; before, the fields were shown and 
   nothing was kept. A page in that language shows them: pictures in posts and pages,
   the WooCommerce product gallery in a classic theme (main picture, thumbnails,
   lightbox, the picture of a chosen variation) and the Product Gallery block of
   a block theme (alt text of the main picture, thumbnails and lightbox). A language
   left empty shows the text of the main language. The alt text and the caption 
   of the media library and of the original language stay as they are.
 * Fixed: the text WooCommerce saves with a variation (for example “Color: Red” 
   or “Color: Rojo”) could take the attribute value in the wrong language when a
   plugin or the theme works on a copy of the value while it is read. It keeps the
   language of the product now.
 * Fixed: on a site where a language has its own subdomain or its own domain, the
   summary of a translated variation showed the original name (“Red”, or “Crimson”
   after you renamed the value) instead of “Rojo” when you saved the variation or
   renamed an attribute value in the admin of that language. It stays in the language
   of the variation.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.10

 * Strings that differ only in letter case or accent (“Size” and “size”, “Resume”
   and “Résumé”) are now separate strings on the String Translation screen, each
   with its own translation on the translated page. Before, the second one was never
   listed and the page showed the translation of the first. The first admin page
   you open after the update changes the strings table; your strings and translations
   are kept. On a store with more than 500,000 strings run `wp langforge strings-
   key --yes` (see the FAQ).
 * The “Find WooCommerce strings” button goes on from where it stopped after you
   close the tab or the connection drops, says “Continuing the last search from 
   where it stopped.” and does not count a string twice. A new “Start over” link
   searches from the beginning.
 * WooCommerce refund emails go out in the language of the order, with the subject,
   heading and text you saved or translated, also when two refunds are sent in one
   request. Fixed: the second email of such a request could go out with the default
   WooCommerce text.
 * Fixed: saving the WooCommerce email settings from a page in a translated language,
   or through the REST API, could store the translated texts as the texts of the
   original.
 * The summary WooCommerce saves with a variation of a translated product (for example“
   Color: Red”) is written in the language of that product, whichever language the
   page is in when the variation is saved. The variation of the original product
   keeps the original language.
 * The hint above the values of an attribute without Enable archives? now says that
   each value you save is listed on the String Translation screen and that “Find
   WooCommerce strings” lists the values saved before. Before, it sent you to Add
   New String.
 * New WP-CLI command `wp langforge strings-key`: it shows the state of the strings
   table and, with –yes, rebuilds its key on a store with a very large strings table.
 * `wp langforge import` now lists, one line each, the rows of the file that the
   import did not take as written (a row the page has no place for, tags that were
   mended, a block that was rebuilt), the same notes the import screen shows. It
   needs Lang Forge Pro 1.3.5, which reports them; with an older Pro the command
   prints only the count.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.9

 * The String Translation screen now lists the texts of your WooCommerce emails (
   subject, heading, additional content and the footer), and a new “Find WooCommerce
   strings” button looks through the shop in small steps and adds the texts, attribute
   names and attribute values that were saved before. A translation typed there 
   is used in the email sent in the language of the order, the partial refund email
   included; a text without a translation stays as you wrote it. Links in a translated
   email text are kept, scripts are removed.
 * Translated posts now open under the language folder with every permalink structure,
   for example “Month and name”, “Numeric”, with a category, an author or a /blog/
   base, and so do custom post types under a base such as /blog/. The next pages
   of a post or a page (/es/my-post/2/) and its comment pages open too, and the 
   links of “Pages: 1 2 3” keep the language folder. Fixed: with these structures
   the address of a translated post led to the language home page.
 * The names of the values of a variable product’s attributes on a translated page
   are in the language of the page also on a store with a persistent object cache(
   Redis, Memcached). Fixed: they could come out in the language of the visitor 
   who opened the product first.
 * The screen of the values of an attribute without Enable archives? now explains
   how to translate its values.
 * After you remove a language, the “Orphaned translations” notice (Leave published,
   Move to Draft, Delete permanently) shows also on a store with a persistent object
   cache, and its buttons work on every admin screen. Fixed: the notice could be
   lost, and on screens such as the Dashboard its buttons did nothing.
 * The new post addresses start to work with the first page view after the update:
   you do not need to save Permalinks again.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.8

 * Feeds under a language folder now work: the feed of the site (/es/feed/), of 
   a category, tag, author or search, the comments feed of a post, and the comments
   feed of the language (/es/comments/feed/), which lists only the comments on posts
   in that language. The feed links in the head of a translated page point at them.
   Fixed: these addresses led to a page or to the feed of the default language.
 * Archive pages under a language folder (category, tag, date, author, search results,
   the shop and a product category) now list their posts and products on a site 
   with a static front page, and their page 2, author, search and date addresses
   open. Fixed: such a page could come out as the front page without posts, and 
   some addresses sent the visitor to the language home page.
 * A variable WooCommerce product on a translated page now shows the values of its
   attributes: a global attribute (for example Color) shows the name of its translated
   term, a custom attribute its translated values, and the name of the variation
   in the cart, the order and the emails is in the language of the product. A value
   that is not translated yet is shown in the language of the original. Fixed: the
   choices of a variable product could come out empty.
 * The language of the page is kept by the login, registration, lost password and
   password reset forms (for example wp-login.php?lang=es): the screen after you
   send the form, the email and the link in it stay in that language when its language
   pack is installed.
 * WordPress emails to the admin address in Settings, General (new user, password
   changed, comment waiting for moderation) are written in the language of the site
   also when no user has that address. Before, they followed the language of the
   page.
 * The new feed and archive addresses start to work with the first page view after
   the update: you do not need to save Permalinks again.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.7

 * Variations of a variable WooCommerce product are now created for each translation
   and follow the product in the default language: price, SKU, GTIN, image, attributes
   and shipping class. Translations made before get their variations the next time
   the original or the translation is saved.
 * Stock changes (orders, refunds, edits) on a product or variation in any language
   now update the same product in the other languages, also a stock status set by
   hand (for example Out of stock) on a product that does not track its quantity.
 * The price, SKU and stock of a product in the default language are copied to its
   translations by the save that changed them. Before, the translations received
   the values of the save before, and a price changed through the REST API, an import
   or another plugin could miss them.
 * A translated product may share its SKU or GTIN with the original without blocking
   the original’s save.
 * Saving a translated product no longer overwrites the original’s price or stock
   status.
 * The AI Translate button also translates variation descriptions.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.6

 * WooCommerce and WordPress texts on a translated page (cart, checkout, My account,
   login, field labels) are now shown in the language of that page when its language
   pack is installed. Before, they were in the language of the site.
 * WooCommerce emails to the shop staff stay in the language of the site, also when
   they are sent from a translated page.
 * WordPress emails to the site staff who have no language of their own in their
   profile (password changed, comment waiting for moderation, new user) are written
   in the language of the site; emails to customers in the language of the page.
 * The texts of Lang Forge Pro on a translated page are now in the language of that
   page too.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.5

 * WooCommerce emails to the customer about an order (order confirmation, status
   changes, customer notes, refunds, invoices) are now written in the language the
   order was placed in, also when they are sent from wp-admin, in bulk, by a scheduled
   task or through the REST API: subject, heading and text. A subject, heading or
   additional text saved in the email settings is sent as saved. Emails to the shop
   staff stay in the language of the site. Before, customer emails went out in the
   language of the screen or task that sent them. With WPML active, for a language
   that is not enabled in Lang Forge, or for a language whose WordPress language
   pack is not installed, emails go out as before.
 * Orders placed through the Checkout block are saved in the language of the cart
   or checkout page the customer saw last. Before, on a site that uses language 
   folders or ?lang= in the address, such an order could be saved in the default
   language.
 * With the Checkout block on a translated page, the customer is now sent to the
   thank-you page in the language of the order. Before, the address had no language
   folder.
 * WooCommerce pages under a language folder (for example /es/my-account/orders/
   and the thank-you page /es/checkout/order-received/123/) now open. Before, the
   visitor saw “page not found”, or was sent to the language home page when “Use
   fallback languages” is on. The same applied to pages of other plugins that add
   their own page endpoint.
 * Translated Cart, Checkout and My account pages now tell page caches not to store
   them, the same way the original pages do.
 * The Plain language switcher now shows the language name (for example “Deutsch”)
   instead of the language code (“de”) when the Display field of a language in Languages
   is empty or holds just the code. Before, saving the Languages form put the code
   into an empty Display field, and Plain printed it. A label you typed yourself(
   for example “eng” or “DE”) is kept as it is.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.4

 * Custom fields are now copied to a new translation exactly as they are stored.
   Before, a custom field with several values kept only the last one, and a field
   that holds a list of settings or text with backslashes (page builder data, custom
   CSS) could come out changed in the translation.
 * The copies made for Divi, Elementor, Yoast SEO and WooCommerce no longer drop
   the backslashes of a value, for example in custom CSS.
 * The TranslatePress migration copies custom fields the same way. Before, it removed
   backslashes from page builder data and could stop with an error on a field that
   holds an object.
 * Translations that were made before this update are not changed.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.3

 * The “Link” button next to a translation now refuses a post that is the original
   itself, that does not exist, that is of another type (a page for a post, for 
   example) or that is in the Trash, and it says why. Before, it accepted the original
   itself, a post of another type and a post in the Trash, and a missing post got
   only the word “Forbidden”.
 * After a failed “Link” attempt the button keeps its own label. Before, it changed
   to “Link existing”.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.2

 * The dropdown language switcher can now be opened without a mouse. It opens when
   you reach it with the keyboard or tap it on a touch screen, and the language 
   you are on shows a visible outline. Before, the list opened only on mouse hover,
   so keyboard and touch users could not pick a language.
 * The Language Switcher box on the settings page no longer suggests a menu item
   as a placement. It names the placements that exist: widget, shortcode and template
   function.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.1

 * Fixed a fatal error on sites that run WooCommerce. The 1.2.0 package from WordPress.
   org called a function that was not in the package, so a page with an Add to cart
   button, a product attribute label or WooCommerce breadcrumbs could stop with 
   an error. If you run WooCommerce, update now.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.2.0

 * With Lang Forge Pro 1.3.0 or newer, AI translation no longer fills a part that
   did not come back with the source text: the whole request fails with its own 
   message and nothing is written. The parts that did come back are kept for an 
   hour, so a second try pays only for the parts that failed, and a post with no
   content (or no title and excerpt) sends no empty request.
 * With Lang Forge Pro 1.3.0 or newer, a kept draft with a failure record has a 
   Retry AI translation button on its language row (post box and posts column), 
   and a second click on an AI button while its request is out does nothing.
 * The record of a failed translation is kept per language, so two jobs of one post
   can no longer drop each other’s record. A record written by an older version 
   is still read and moved.
 * WP-CLI export: –output must be a plain file name with one dot and an export extension(
   csv, xliff or xlf) and –lang a plain language code; a refused call stops before
   any query is run or any folder is made.
 * Deleting the last Forge plugin or add-on on a site now removes everything Forge
   stored on the site, on every site of a network: the statistics settings and the
   install ID, the shared job queue with its scheduled events, and the other settings
   and caches the Forge plugins share. While another Forge product stays, only this
   plugin’s own share goes.
 * Needs Lang Forge Pro 1.1.4 or newer if you run the add-on, as before.

#### 1.1.0

 * The functions that WPML-style theme code calls — `icl_object_id()`, the `wpml_object_id`
   filter and `langforge_get_translation()` (and `langforge_get_post_translations()`)—
   treat a translation that is not published (a draft, pending, scheduled or private
   one) as “no translation” when a visitor loads the page: they return the original
   page when your code asks for it, or nothing, so the address of an unpublished
   page never reaches the theme. This differs from WPML, which does not hold a draft
   translation back. In WP-CLI, for a signed-in user who can edit that translation(
   in the admin, over REST or AJAX) and for an editor previewing the draft they 
   answer as before; a signed-in user who cannot edit it, such as a subscriber, 
   gets the visitor’s answer there too.
 * The hreflang sitemap now gives each language the same code as the page head, 
   written the way hreflang wants it: `de` instead of `de-de`, `en-US` instead of`
   en-us`, and `es-MX` instead of `es-mx` for a language with a region of its own;
   the page head now says `es-MX` for such a language too, where it said `es_mx`.
 * With Rank Math, Yoast SEO, All in One SEO, SEOPress or The SEO Framework active,
   a page has one canonical link instead of two, and the SEO plugin’s own og:locale
   tag alone instead of two (none where it prints none, as with its Open Graph switched
   off). The canonical is the page’s own language address unless one was typed into
   the SEO plugin for that page, and the og:locale:alternate tags are printed only
   where the SEO plugin prints its og:locale.
 * A new translation no longer takes over the canonical URL typed in for its source
   page, and a translation that already holds the same canonical as its source is
   treated as having none (Rank Math, Yoast SEO, All in One SEO, SEOPress, The SEO
   Framework, and Rank Forge in a version that asks Lang Forge about it), so its
   canonical link names its own address. With The SEO Framework this needs version
   5.0 or later, and with SEOPress its current versions: an older release does not
   offer the hook Lang Forge uses for the link, and there the translation keeps 
   the canonical it holds.
 * With Yoast SEO, such a translation also names its own address in og:url and in
   the schema data (the page’s url and the ids built on it), where it used to name
   the source page there.
 * A new translation no longer takes over the redirect SEOPress holds for its source
   page.
 * With Lang Forge Pro 1.2.0 or newer, AI translation keeps the shortcodes of your
   content whole. Before a text goes to the AI, the tag of every shortcode on your
   site (`[contact-form-7 id="12"]`, `[gallery ids="1,2"]`, `[button]…[/button]`)
   is swapped for a placeholder, and the answer gets the tags back exactly as they
   were. If the AI changes or drops one, the translation is not saved and you are
   told so, instead of a broken form or gallery going into the translated page. 
   Text inside a shortcode’s attributes, such as the label of `[button text="Buy"]`,
   is not translated and stays in the source language; the words between an opening
   and a closing tag are translated. A shortcode that a plugin registers only on
   the front end is not known during an AI translation in the admin: add its name
   with the `langforge_ai_shortcode_tags` filter to protect it too. The AI translation
   itself is part of Lang Forge Pro; without it, or with an older version, nothing
   changes.
 * “Create + AI Translate” (Lang Forge Pro): when the AI does not translate the 
   page it has just created, the edit screen of that page now says so, and why (
   out of credits, or another failure; with Lang Forge Pro 1.2.0 or newer also a
   shortcode the AI could not keep), where the message used to vanish with the screen
   you left.

#### 1.0.41

 * Deleting the plugin leaves the job queue the Forge plugins share in place while
   another Forge plugin or add-on is still on the site. The check used to miss add-
   ons, and Rank Forge installed from wordpress.org, so the queue could be dropped
   while a neighbour still had jobs in it.
 * Settings no longer shows the Translation Model card: this package has no AI translation,
   so the card had nothing to describe.

#### 1.0.40

 * **This release needs Lang Forge Pro 1.1.4 or newer if you run the add-on.** The
   licence screen, the upgrade prompt and the upgrade banner moved into the separate
   Lang Forge Pro add-on; this plugin only notes which features the add-on provides,
   with a link to its product page. An older add-on stays switched off until it 
   is updated, and an admin notice names both versions and where to download the
   add-on. Translations already saved are untouched.
 * String Translation shows no AI Translate button unless the add-on runs AI translation—
   no locked button. One line says where AI translation comes from.
 * Settings and Tools no longer link to an upgrade: AI translation, Translation 
   Memory and one-click site duplication say that they come with the add-on.
 * The screens the add-on provides (Visual Editor, Analytics, Translation Memory,
   Import / Export) name it, with a link, instead of showing a locked page.

#### 1.0.39

 * Glossary opens with no licence check. It has always been part of this plugin,
   and the menu no longer puts it behind a gate that could only answer yes.
 * The PRO badge in the menu and in the section tabs marks a screen the Lang Forge
   Pro add-on provides and this site does not have. It follows whether the add-on
   is installed, not the licence.
 * The String Translation help shows the [langforge_string] shortcode. The old [
   lf_string] form keeps working in existing content.

#### 1.0.38

 * Fixed: on a site without WPML or Polylang, the first activation made Russian 
   the default language and added …

## Meta

 *  Version **1.3.0**
 *  Last updated **21 saac kahor**
 *  Active installations **10+**
 *  WordPress version ** 6.5 ama ka sareeya **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 ama ka sareeya **
 *  Languages
 * [Chinese (China)](https://cn.wordpress.org/plugins/langforge/), [Dutch](https://nl.wordpress.org/plugins/langforge/),
   [English (US)](https://wordpress.org/plugins/langforge/), [Korean](https://ko.wordpress.org/plugins/langforge/),
   [Russian](https://ru.wordpress.org/plugins/langforge/), [Spanish (Chile)](https://cl.wordpress.org/plugins/langforge/),
   [Spanish (Spain)](https://es.wordpress.org/plugins/langforge/), and [Ukrainian](https://uk.wordpress.org/plugins/langforge/).
 *  [Ku tarjun luqaddaada](https://translate.wordpress.org/projects/wp-plugins/langforge)
 * Tags
 * [hreflang](https://so.wordpress.org/plugins/tags/hreflang/)[language switcher](https://so.wordpress.org/plugins/tags/language-switcher/)
   [multilingual](https://so.wordpress.org/plugins/tags/multilingual/)[translation](https://so.wordpress.org/plugins/tags/translation/)
   [woocommerce](https://so.wordpress.org/plugins/tags/woocommerce/)
 *  [Aragti Sare](https://so.wordpress.org/plugins/langforge/advanced/)

## Qiimeynta

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/langforge/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/langforge/reviews/)

## Ka-qaybgalayaasha

 *   [ avakodeforge ](https://profiles.wordpress.org/avakodeforge/)

## Taageero

Ma heysaa waxaad dhahdo? Caawimaad ma u baahan tahay?

 [Eeg madasha taageerada](https://wordpress.org/support/plugin/langforge/)

## Ku deeq

Ma jeclaan lahayd inaad taageerto horumarinta kaabahan?

 [ Ugu deeq kaabahan ](https://avakode.com/?utm_source=wporg&utm_medium=readme&utm_campaign=langforge&utm_content=donate)