PHPackages                             hirasso/acf-multilingual - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Localization &amp; i18n](/categories/localization)
4. /
5. hirasso/acf-multilingual

ActiveWordpress-plugin[Localization &amp; i18n](/categories/localization)

hirasso/acf-multilingual
========================

An experimental plugin for building multilingual websites using WordPress and Advanced Custom Fields 🌀

v3.2.4(2mo ago)26[1 issues](https://github.com/hirasso/acf-multilingual/issues)GPL-2.0-or-laterPHPPHP ~8.2 || ~8.3 || ~8.4 || ~8.5CI passing

Since Mar 25Pushed 2mo ago1 watchersCompare

[ Source](https://github.com/hirasso/acf-multilingual)[ Packagist](https://packagist.org/packages/hirasso/acf-multilingual)[ GitHub Sponsors](https://github.com/hirasso)[ RSS](/packages/hirasso-acf-multilingual/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (23)Versions (18)Used By (0)

ACF Multilingual
================

[](#acf-multilingual)

[![Latest Version on Packagist](https://camo.githubusercontent.com/b548e714fb830f2f204b99c11332b13357adebdb8603ade98cf49615a48c1cf4/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6869726173736f2f6163662d6d756c74696c696e6775616c2e737667)](https://packagist.org/packages/hirasso/acf-multilingual)[![Test Status](https://camo.githubusercontent.com/d478701976d86af78146cbae98b8340572d6f8d7e07b8c5a6c686089b0218a52/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6869726173736f2f6163662d6d756c74696c696e6775616c2f63692e796d6c3f6c6162656c3d7465737473)](https://github.com/hirasso/acf-multilingual/actions/workflows/ci.yml)

An experimental plugin for building multilingual websites using [WordPress](https://github.com/WordPress/WordPress) and [Advanced Custom Fields](https://github.com/AdvancedCustomFields/acf) 🌀

Limitations
-----------

[](#limitations)

Does NOT integrate with plugins that add additional fields to the WordPress Admin, like e.g. Yoast SEO. Works best with fully customized pure WordPress/ACF setups.

Why did I make this public?
---------------------------

[](#why-did-i-make-this-public)

I made this public in the hopes to make it more sustainable and fail-proof. You will probably not want to use this plugin in big corporate projects, just yet (or ever). Use it for a personal website or the likes and report bugs and problems.

Usage
=====

[](#usage)

Installation
------------

[](#installation)

### Via Composer (recommended):

[](#via-composer-recommended)

1. Install the plugin:

```
composer require hirasso/acf-multilingual
```

1. Activate the plugin manually or using WP CLI:

```
wp plugin activate acf-multilingual
```

### Manually:

[](#manually)

1. Download and extract the plugin from the latest release
2. Copy the `acf-multilingual` folder into your `wp-content/plugins` folder
3. Activate the plugin via the plugins admin page – Done!
4. Handle updates via [afragen/git-updater](https://github.com/afragen/git-updater)

Setup
-----

[](#setup)

Add as many languages as you like. The languages will be injected into the URL, like this:

```
https://yoursite.tld/your-post/ < default language
https://yoursite.tld/de/dein-eintrag/ < german translation
https://yoursite.tld/es/tu-entrada/ < spanish translation

```

Put a file `acfml.config.json` in your theme root, for example with these contents:

```
{
  "languages": {
    "en": {
      "locale": "en_US",
      "name": "English"
    },
    "de": {
      "locale": "de_DE",
      "name": "Deutsch"
    }
  },
  "post_types": {
    "page": true,
    "project": {
      "de": {
        "rewrite_slug": "projekt",
        "archive_slug": "projekte"
      }
    }
  },
  "taxonomies": {
    "filter": true
  }
}
```

This config will make:

- English the default language
- Deutsch the second language
- The post type "page" translatable
- The post type "project" translatable, with custom rewrite slugs for german
- The custom taxonomy "filter" translatable

API
---

[](#api)

To get an idea about what the plugin can do, it's probably quickest to have a look at [the API](https://github.com/hirasso/acf-multilingual/blob/main/api.php).

Make ACF fields multilingual
----------------------------

[](#make-acf-fields-multilingual)

Set ACF fields to be `multilingual`, so that they can be translated for every language. like e.g. `Text`, `Textarea`, `WYSIWYG`, ... (for the full list see `$multilingual_field_types` in the class `FieldsController`):

[![CleanShot 2025-11-13 at 09 36 58@2x](https://private-user-images.githubusercontent.com/869813/513764474-39654f89-693e-4cf9-9e05-8590f6c33a27.jpg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODI4OTY1MzAsIm5iZiI6MTc4Mjg5NjIzMCwicGF0aCI6Ii84Njk4MTMvNTEzNzY0NDc0LTM5NjU0Zjg5LTY5M2UtNGNmOS05ZTA1LTg1OTBmNmMzM2EyNy5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNzAxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDcwMVQwODU3MTBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kZTZjMzQzNjJjNjZiNjhiZjIyZjQ3YjA3NDQzZWNlY2MxMmQwMThkYTA1NmM3ZGFjYTNiOGJhMTJmYTNmMTU1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZqcGVnIn0.z72_rJmjgQ-jVGW8moJpk8njI342VmX3elbOmDeW5wE)](https://private-user-images.githubusercontent.com/869813/513764474-39654f89-693e-4cf9-9e05-8590f6c33a27.jpg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODI4OTY1MzAsIm5iZiI6MTc4Mjg5NjIzMCwicGF0aCI6Ii84Njk4MTMvNTEzNzY0NDc0LTM5NjU0Zjg5LTY5M2UtNGNmOS05ZTA1LTg1OTBmNmMzM2EyNy5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNzAxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDcwMVQwODU3MTBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kZTZjMzQzNjJjNjZiNjhiZjIyZjQ3YjA3NDQzZWNlY2MxMmQwMThkYTA1NmM3ZGFjYTNiOGJhMTJmYTNmMTU1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZqcGVnIn0.z72_rJmjgQ-jVGW8moJpk8njI342VmX3elbOmDeW5wE)

Now the field can be translated!

[![CleanShot 2025-11-13 at 09 38 21@2x](https://private-user-images.githubusercontent.com/869813/513764866-ab3ac4e8-3581-4d7b-8e05-4bd70b585517.jpg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODI4OTY1MzAsIm5iZiI6MTc4Mjg5NjIzMCwicGF0aCI6Ii84Njk4MTMvNTEzNzY0ODY2LWFiM2FjNGU4LTM1ODEtNGQ3Yi04ZTA1LTRiZDcwYjU4NTUxNy5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNzAxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDcwMVQwODU3MTBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zODgyYTljMzNiODRmNmIxY2E4YTg4YWNjMDllNDUwNDhkMDFhOGMxZjE4ZmZmNDcwMzI2MzEwMWIzMGE3NGUwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZqcGVnIn0.hRZnILGPyoATSl60g0s6gFq5lYfCQj5do2BqJwHSCZA)](https://private-user-images.githubusercontent.com/869813/513764866-ab3ac4e8-3581-4d7b-8e05-4bd70b585517.jpg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODI4OTY1MzAsIm5iZiI6MTc4Mjg5NjIzMCwicGF0aCI6Ii84Njk4MTMvNTEzNzY0ODY2LWFiM2FjNGU4LTM1ODEtNGQ3Yi04ZTA1LTRiZDcwYjU4NTUxNy5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwNzAxJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDcwMVQwODU3MTBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zODgyYTljMzNiODRmNmIxY2E4YTg4YWNjMDllNDUwNDhkMDFhOGMxZjE4ZmZmNDcwMzI2MzEwMWIzMGE3NGUwJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZyZXNwb25zZS1jb250ZW50LXR5cGU9aW1hZ2UlMkZqcGVnIn0.hRZnILGPyoATSl60g0s6gFq5lYfCQj5do2BqJwHSCZA)

If you use `vinkla/extended-acf`, you can make fields multilingual like so:

```
\Extended\ACF\Fields\Text::make('Text')
    ->withSettings(['acfml_multilingual' => true]);
```

If a field is not marked multilingual, it will display the same value in both languages.

###  Health Score

42

—

FairBetter than 88% of packages

Maintenance73

Regular maintenance activity

Popularity7

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor1

Top contributor holds 95% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~53 days

Recently: every ~36 days

Total

15

Last Release

86d ago

Major Versions

1.3.1 → 2.0.02025-10-29

v2.0.2 → v3.0.02025-11-05

### Community

Maintainers

![](https://www.gravatar.com/avatar/be24778ed8b5f77f16e6e0f984b51d209f5a4588f6673ea4bc3b8b1a6e1083b2?d=identicon)[hirasso](/maintainers/hirasso)

---

Top Contributors

[![hirasso](https://avatars.githubusercontent.com/u/869813?v=4)](https://github.com/hirasso "hirasso (454 commits)")[![ovenum](https://avatars.githubusercontent.com/u/47149622?v=4)](https://github.com/ovenum "ovenum (13 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (11 commits)")

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/hirasso-acf-multilingual/health.svg)

```
[![Health](https://phpackages.com/badges/hirasso-acf-multilingual/health.svg)](https://phpackages.com/packages/hirasso-acf-multilingual)
```

###  Alternatives

[smmoosavi/php-gettext

Wrapper for php-gettext by danilo segan. This library provides PHP functions to read MO files even when gettext is not compiled in or when appropriate locale is not present on the system.

1927.0k1](/packages/smmoosavi-php-gettext)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
