| 开发者 | avakodeforge |
|---|---|
| 更新时间 | 2026年10月31日 09:00 |
| 捐献地址: | 去捐款 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
/fr/, a query parameter, a subdomain, or a separate domain per language.
Search engines and visitors find the right version. Lang Forge prints hreflang tags, including the x-default entry, for every translated URL and generates an hreflang sitemap. Visitors switch language with a widget, a shortcode or an item in the admin bar, shown as flags, native language names or both. Right-to-left languages (Arabic, Hebrew, Persian, Urdu, Kurdish) are supported.
Texts of your active theme are picked up automatically: a string that passes through WordPress translation functions appears on the String Translation screen when it is shown on the front end, so you translate it there without editing .po files. To list the texts of other plugins, add their text domains under Settings → String Auto-Registration Domains. A glossary keeps brand and product names consistent. Terms can be marked Do Not Translate, and when you save a translation Lang Forge lists the glossary terms it does not follow.
On a WooCommerce store you can translate product content, product categories and tags, and store strings such as cart and checkout labels from the same Language panel you use for posts.
Moving from another multilingual plugin
The built-in migration tool reads the data of WPML, Polylang or TranslatePress and recreates translated posts and their language links, string translations, taxonomy translations and your language URL structure. The old plugin stays installed and untouched until you confirm the result. For sites built around WPML there is also a WPML compatibility layer with icl_object_id(), icl_get_languages(), icl_get_current_language() and icl_get_default_language(), so integrations written against WPML run without edits. One difference to check: a translation that is still a draft counts as "no translation" for visitors until you publish it.
Free
langforge to /wp-content/plugins/, or install via Plugins → Add New.Install Lang Forge, go to Lang Forge → Languages and add the languages you need. Under Lang Forge → Settings → URL Settings pick how language URLs should look: subdirectories like /fr/, a query parameter, subdomains, or a separate domain per language. Every post, page and custom post type then gets a Language panel where you link or create its translations.
Yes. It 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.
Yes. The built-in migration tool imports your translated posts, the links between them, your string translations and your language URL structure, and WPML stays installed and untouched until you confirm the result. Lang Forge also provides a WPML compatibility layer (icl_object_id(), icl_get_languages() and related functions), so theme and plugin code written against WPML works without edits. One difference: 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. Check your theme after the switch.
The free plugin handles standard post content, custom post types and taxonomies, and copies the Elementor data of a page into the translation when you create one. Translating Elementor and ACF fields in a visual editor is part of the separate Lang Forge Pro add-on.
This plugin is the free version. It has no limit on the number of languages and includes URL routing, the language switcher, hreflang tags, string translation, the glossary, WooCommerce translation, migration, the REST API and WP-CLI commands. AI translation, translation memory, the visual editors, XLIFF and CSV import and export, and the other Pro features are in the separate Lang Forge Pro add-on.
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.
Yes. Arabic, Hebrew, Persian, Urdu and Kurdish are supported: text direction is switched and the admin and switcher layout adjust automatically.
Not by this plugin; AI translation is a feature of the separate Pro add-on, which lists its own requests in its readme.
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.
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.langforge_crawler_user_agents.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_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.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 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.wp langforge strings-key --yes (see the FAQ).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.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.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.[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.es, de and x-default links all resolved back to the English URL (and the same on every other language), so search engines discarded the annotation. Both the wp_head tags and the hreflang sitemap are affected.home_url() was being used as the base for detecting it./sitemap-hreflang.xml and /sitemap-hreflang-N.xml were redirected to a trailing-slash URL before the sitemap could render.