experius / module-missingtranslations

experius/module-missingtranslations

Collect missing translations in specified folder or the entire Magento 2 Root. Adds database editing and management of translations.

  • Mage2Gen
  • Mr. Lewis
  • Ruben Panis
  • +2 more
magento2-module 2.4.6-2.4.9 Compatible Based on composer requirements only QA: failed proprietary

Mage2 Module Experius MissingTranslations

Add a CLI command to Collect missing translations in specified folder or the entire Magento 2 Root and add an Admin Grid to display and update or add database/inline translations (Stores > Translations > Database/Inline Translations)

experius/module-missingtranslations


Main Functionalities

  • Recommended Minimum Usage
  • Missing Translations
  • Translations to database (Existing and Missing)

Recommended Minimum Usage

  • Use the command to generate the CSV File with Missing Translations for your Locales
    • CSV File for Missing Translations
  • Use the command to manually collect and import Existing & Missing Translations for your Locales
    • Manually - Collect and Import
  • Optional Enable the Cronjobs in the configuration so the Database Translations will be up to date with New Modules
    • Cronjob - Collect and Import and Configuration

Missing Translations

CSV File for Missing Translations

It is possible to generate a CSV file which contains the original string and an empty string.

Command

This CSV file can be generated through the following command:

php bin/magento experius_missingtranslations:collect [-m|--magento] [-l|--locale="..."] [-s|--store="..."] [directory]

Use the command like this:

php bin/magento experius_missingtranslations:collect --magento --locale nl_NL

Usage 1 - Transform Fully Translated File to Language Pack

This file can be used by a Translation Agency to complete the translations for the webshop.

After the Translation Agency has fully translated the csv file it is possible to transform it to a language pack.

This can be done by removing the suffix missing and eventually transform it to a language pack by adding a language.xml and a registration.php

Usage 2 - Translate Missing Strings Through the Admin with the CSV File

Besides transforming the file to a language pack it is possible to add new translations through the admin interface, which can be found under Stores > Translations > Database / Inline

only if you generated it to a file with the following filename a file in app/i18n/Vendor/missing/locale_code.csv. (Example: app/i18n/Vendor/missing/nl_NL.csv.)

Usage 3 - Import the Missing Translations into the Database*

For this functionality see Translations to database (Existing and Missing)

Translations to database (Existing and Missing)

In addition to gathering missing translations this module also supports database translation (formerly known as inline translate)

This makes it possible for merchants to edit any translation in the Magento Admin Panel.

Cronjob - Collect and Import

Collecting and importing the translations happens nightly when it is enabled by default this functionality is disabled
This is done on global scope for all locales that are used in at least one storeview (based on the configured locales).

Existing CSV Translations

03:13 AM server time, all existing csv translations are added to the database.

This functionality Imports the Existing CSV Translations into the Database then the Original String will differ from the Translated String.

Missing Translations

03:23 AM server time, all missing translations found are added to the database.

This functionality Imports the Missing Translations into the Database then the Original String will be equal to the Translated String.

Manually - Collect and Import

Manually gathering the translations (and adding them to the database) is possible.
This can be done by one of the following two Console commands:

php bin/magento experius_missingtranslations:existing-translations-to-database --global --locale nl_NL
php bin/magento experius_missingtranslations:missing-translations-to-database --global --locale nl_NL

Herein --global is defined to save the translations for any storeview with the specified locale

To specify a specific store_id add the store ID parameter (--store [store_id])
WARNING: This is not recommended unless translations differ for the same language in separate storeviews
Example:

php bin/magento experius_missingtranslations:addtodatabase --store 1 --locale nl_NL

Configuration

  • Define Vendor which is used for generating the Missing Translations CSV Files
    • (Stores > Settings > Configuration > General > General > Locale Options > Language vendor for missing translations)
  • Enable the Collect and Import for Existing Translations
    • (Stores > Settings > Configuration > General > General > Locale Options > Existing translations cron enabled)
  • Enable the Collect and Import for Missing Translations
    • (Stores > Settings > Configuration > General > General > Locale Options > Missing translations cron enabled)

TODO

For database translations

  • Add flag to translation table database (user_defined); if user edit's a translation, user_defined is flagged as true.
  • Add --force update for every entry that is not flagged as user_defined; to update csv changes into database.

4.0.3 (2023-08-29)

View Release

  • [FEATURE][RM-811] reintroduced set area code for console commands (Dylan Maurits)

4.0.2 (2023-03-07)

View Release

  • [FEATURE][PPC-863] Fixed console commands (Quinn Stadens)

4.0.1 (2022-09-22)

View Release

  • [HOTFIX][NEND-609] PHP compatibility is not up-to-date in composer.json. Add 8.0 and 8.1. (Boris van Katwijk)

4.0.0 (2022-09-19)

View Release

  • [SOLUI-101] Removed option to update to JS-Translations.json (florisschreuder)
  • [FEATURE][SOLUI-101] Removed reference to updating JS-Translation.json (florisschreuder)
  • [FEATURE][SOLUI-101] Removed reference to updating JS-Translation.json (florisschreuder)
  • [FEATURE][SOLUI-101] Added a notice for JS translations (florisschreuder)
  • [FEATURE][SOLUI-101] Added a notice for JS Translations (florisschreuder)
  • Update Phrase.php (pierre-denissen)
  • [FEATURE][BACI-66] Refactor module for php 7.4+ compatibility (Matthijs Breed)
  • [FEATURE][BACI-66] (Matthijs Breed)
  • [FEATURE][BACI-66] Code cleanup from tests (Matthijs Breed)
  • [BUGFIX][BACI-66] Experius\MissingTranslations\Model\TranslationCollector::updateTranslationDatabase(): Argument #1 ($storeId) must be of type int, string given (Boris van Katwijk)
  • [FEATURE][BACI-66] Add "success" parameter if Console commands complete succesfully. (Boris van Katwijk)

3.2.3 (2021-09-27)

View Release

  • Remove use of warning suppression with @ symbol (Martijn van den Kerkhof)

3.2.2 (2021-08-09)

View Release

  • [BUGFIX][HELV-93] Cast community translations to strings to prevent type error on string specific functions (matthijs-breed-experius)

3.2.1 (2021-04-07)

View Release

  • [BUGFIX] Removed module security from filters (Hexmage)

3.2.0 (2021-01-27)

View Release

  • [BUGFIX][BACI-391] - Fix error "Cannot open file for write dictionary" when locale file is non-existent (Ruben Panis)
  • [FEATURE][S-323] Added fallback for e.g., Magento Cloud, where /app directory has no write access (Bas van der Louw)

3.1.2 (2020-11-16)

View Release

  • [BUGFIX] Solved Uncaught TypeError: preg_match_all() expects parameter 2 to be string, bool given (Mr. Lewis)

3.1.1 (2020-11-05)

View Release

  • [BUGFIX] Solved empty $fileRow variable (Mr. Lewis)
  • [BUGFIX] Solved Uncaught TypeError: strpos() expects parameter 1 to be string, object given (Mr. Lewis)

3.1.0 (2020-10-22)

View Release

  • [FEATURE] [BACI-154] Added strict_types=1 and added License (Lewis Voncken)

3.0.1 (2020-10-21)

View Release

  • [REFACTOR] [BACI-157] Removed setup_version from module.xml (Lewis Voncken)

3.0.0 (2020-10-21)

View Release

  • [FEATURE] [BACI-157] Converted Schema Setup Scripts to db_schema.xml (Lewis Voncken)

2.1.13 (2020-10-15)

View Release

  • [REFACTOR] [BACI-123] solved errors based on php code sniffer (Lewis Voncken)

2.1.12 (2020-10-15)

View Release

  • [REFACTOR] Removed unused code or added suppression when unused code is allowed and applied phpcs fixes (Lewis Voncken)

2.1.11 (2020-03-18)

View Release

  • [BUGFIX] - Check file exists before processing (Ruben Panis)

2.1.10 (2019-11-26)

View Release

  • Make sure JS translations keep working after import (Arnoud Beekman)

2.1.9 (2019-10-07)

View Release

  • [BUGFIX] "context" argument breaks adminhtml page in Magento 2.3.3. (Boris van Katwijk)

2.1.8 (2019-05-27)

View Release

  • [BUGFIX] Fixed module not working on adminurl's other than 'storemanager' (Rens Wolters)

2.1.7 (2019-01-11)

View Release

  • [TASK] Added additional Filters and added a getter so a Plugin can be written (Lewis Voncken)
  • [TASK] Refine Filter (Lewis Voncken)
  • [TASK] Added custom admin url support (Lewis Voncken)

2.1.6 (2018-12-05)

View Release

  • [BUGFIX] Fixed acl not being properly defined for controllers (René Schep)

2.1.5 (2018-11-29)

View Release

  • Added check function createPhrase (thokiller)
  • added instance check Phrase (thokiller)
  • Fixed indent on file Factory.php (thokiller)
  • fixed indent on generator.php (thokiller)

2.1.4 (2018-06-18)

View Release

  • [TASK] added dependency sequence for Magento_Translation in module.xml (Jeroen Coppelmans)
  • [TASK] added Experius_Core to module.xml sequence as well (Jeroen Coppelmans)
  • [TASK] removed Experius Core from sequence in module.xml (Jeroen Coppelmans)

2.1.3 (2018-05-15)

View Release

  • [TASK] Applied CodeQuality fixes (Lewis Voncken)
  • [BUGFIX] Solved incorrect dependency injection (Lewis Voncken)

2.1.2 (2018-05-02)

View Release

  • [DOCS] Updated the README.md with clear information (Lewis Voncken)

2.1.1 (2018-04-09)

View Release

  • [TASK] [issue-3] Now the folder is automatically created (Lewis Voncken)

2.1.0 (2018-02-26)

View Release

  • [FEATURE] Added system xml (configuration) to enable nightly translation gathering cronjobs. Default is off, must be enabled to gather new translations on global scope every night. (Boris van Katwijk)
  • [FEATURE] Added update function of all js-translation.json files. This function is triggered for all themes with a specific locale, on saving a translation in the missing translations section. This enables real-time updates of javascript translations for each locale active in a Magento 2 installation. (Boris van Katwijk)
  • [BUGFIX] If file exists was not being checked in putting js-translation.json file on translation save. Deployed version number was not being updated resulting in translations not coming through in the frontend with all cache one (full_page). (Boris van Katwijk)

2.0.0 (2018-02-21)

View Release

  • [FEATURE] - Added command to add all csv translated strings to database for easy editing. Including option to include previously collected missing translations (Ruben Panis)
  • [FEATURE] - Enabled translation grid inline editing for faster translating (Ruben Panis)
  • [FEATURE] - Added column to check if translation differs from original string (Ruben Panis)
  • [FEATURE] Added "different" as database column in the translation table to add filtering / sorting in adminhtml. Added minor messaging for clear console script progression. (Boris van Katwijk)
  • [TASK] Syntax / licence only commit. (Boris van Katwijk)
  • [FEATURE] Cronjob added and small restructure (Boris van Katwijk)
  • [TASK] Updated readme. (Boris van Katwijk)
  • [FEATURE] Second pass for database style translations for merchant (Boris van Katwijk)
  • [BUGFIX] Removed not in use observers. (Boris van Katwijk)
  • [BUGFIX] Locale was changed on translation save, resolved this issue. (Boris van Katwijk)

1.6.0 (2018-01-30)

View Release

  • [TASK] Disabled the Translate String Button (Lewis Voncken)

1.5.0 (2018-01-30)

View Release

  • [TASK] Updated labels and added notices (Lewis Voncken)

1.4.0 (2018-01-30)

View Release

  • [FEATURE] Only Display Available Languages (Lewis Voncken)
  • [TASK] Removed console.log (Lewis Voncken)
  • [TASK] Updated the README.md (Lewis Voncken)

1.3.10 (2017-10-06)

View Release

  • Update README.md (Mr. Lewis)

1.3.9 (2017-06-12)

View Release

  • [BUGFIX] Solved problem with new string without missing strings file (Lewis Voncken)

1.3.8 (2017-06-06)

View Release

  • [TASK] README.md update (Lewis Voncken)

1.3.7 (2017-06-06)

View Release

  • [BUGFIX] Solved problem with empty translations in frontend and added option to translate string which is already translated (Lewis Voncken)

1.3.6 (2017-03-23)

View Release

  • [TASK] Added custom delimiter for console command (Lewis Voncken)

1.3.5 (2017-03-14)

View Release

  • [TASK] Updated README.md and change vendor to lower case (Lewis Voncken)

1.3.4 (2017-03-14)

View Release

  • [TASK] changed the missing translations csv file (Lewis Voncken)

1.3.3 (2017-03-07)

View Release

  • [TASK] Exclude UnitTests and magento2-base/dev (Lewis Voncken)

1.3.2 (2017-03-07)

View Release

  • [BUGFIX] Solved compile error Extra parameters passed to parent construct: $coreRegistry. (Lewis Voncken)

1.3.1 (2017-02-28)

View Release

  • [TASK] Columns update and Bugfix Edit Save (Lewis Voncken)

1.3.0 (2017-02-28)

View Release

  • [FEATURE] Add Missing Translation (Lewis Voncken)
  • [FEATURE] Translate a Missing Translation (Lewis Voncken)
  • [TASK] Updated the README.md for the new feature (Lewis Voncken)

1.2.0 (2017-02-17)

View Release

  • [FEATURE] Added Database translations UI compnonent (Lewis Voncken)
  • [TASK] Updated the setActiveMenu item (Lewis Voncken)
  • [TASK] setActiveMenu item for grid overview (Lewis Voncken)
  • [TASK] Updated README.md (Lewis Voncken)

1.1.2 (2017-02-17)

View Release

  • [TASK] Added extra todo to the readme (Lewis Voncken)

1.1.1 (2017-02-17)

View Release

  • [TASK] Updated the README.md for correct uses with packs (Lewis Voncken)

1.1.0 (2017-02-16)

View Release

  • [TASK] Changed the License (Lewis Voncken)
  • [TASK] Changed logic to search by locale code and store id is optional for specific inline translations (Lewis Voncken)
  • [TASK] Updated the README with updated CLI command (Lewis Voncken)
  • [TASK] Reset if statement of foundTranslation check (Lewis Voncken)

1.0.0 (2017-02-16)

View Release

  • [TASK] Initial Commit (Lewis Voncken)
  • [TASK] Refactor - removed Objectmanager uses from the Console Command (Lewis Voncken)
Versions
Version Stability QA Status Released
4.0.6 stable Fail 2025-12-04 07:48:43
4.0.5 stable Not tested 2025-10-17 13:11:25
4.0.4 stable Not tested 2023-12-21 09:17:41
4.0.3 stable Not tested 2023-08-29 11:40:05
4.0.2 stable Not tested 2023-03-07 09:20:53
4.0.1 stable Not tested 2022-09-22 10:19:46
4.0.0 stable Not tested 2022-09-19 15:07:38
3.2.3 stable Not tested 2021-09-27 11:34:29
3.2.2 stable Not tested 2021-08-09 11:38:56
3.2.1 stable Not tested 2021-04-07 07:39:51
3.2.0 stable Not tested 2021-01-27 15:00:10
3.1.2 stable Not tested 2020-11-16 10:06:19
3.1.1 stable Not tested 2020-11-05 15:48:40
3.1.0 stable Not tested 2020-10-22 09:04:40
3.0.1 stable Not tested 2020-10-21 19:41:30
3.0.0 stable Not tested 2020-10-21 19:29:09
2.1.13 stable Not tested 2020-10-15 21:52:42
2.1.12 stable Not tested 2020-10-15 21:22:38
2.1.11 stable Not tested 2020-03-18 09:35:46
2.1.10 stable Not tested 2019-11-26 17:01:35
2.1.9 stable Not tested 2019-10-07 09:54:21
2.1.8 stable Not tested 2019-05-27 12:03:45
2.1.7 stable Not tested 2019-01-11 10:47:37
2.1.6 stable Not tested 2018-12-05 10:05:09
2.1.5 stable Not tested 2018-11-29 14:37:17
2.1.4 stable Not tested 2018-06-18 07:25:43
2.1.3 stable Not tested 2018-05-15 10:39:11
2.1.2 stable Not tested 2018-05-02 10:06:10
2.1.1 stable Not tested 2018-04-09 08:49:06
2.1.0 stable Not tested 2018-02-26 10:48:40
2.0.0 stable Not tested 2018-02-21 09:57:20
1.6.0 stable Not tested 2018-01-30 16:09:12
1.5.0 stable Not tested 2018-01-30 16:06:36
1.4.0 stable Not tested 2018-01-30 15:31:45
1.3.10 stable Not tested 2017-10-06 10:22:54
1.3.9 stable Not tested 2017-06-12 12:48:18
1.3.8 stable Not tested 2017-06-06 15:43:49
1.3.7 stable Not tested 2017-06-06 15:41:20
1.3.6 stable Not tested 2017-03-23 11:06:34
1.3.5 stable Not tested 2017-03-14 13:44:05
1.3.4 stable Not tested 2017-03-14 13:26:29
1.3.3 stable Not tested 2017-03-07 16:53:52
1.3.2 stable Not tested 2017-03-07 15:27:02
1.3.1 stable Not tested 2017-02-28 18:41:17
1.3.0 stable Not tested 2017-02-28 17:46:06
1.2.0 stable Not tested 2017-02-17 00:06:54
1.1.2 stable Not tested 2017-02-17 00:02:50
1.1.1 stable Not tested 2017-02-17 00:00:38
1.1.0 stable Not tested 2017-02-16 13:58:31
1.0.0 stable Not tested 2017-02-16 10:33:21

Requires 2

Package Constraint
experius/module-formselectchosen 1.0.*
php ^7.4 || ^8.0 || ^8.1
QA results
Tool Status Findings Summary
PHPCS Pass 0
PHPStan Fail 39 39 errors (level 4, ruleset: phpstan + bitexpert/phpstan-magento)
Cpd Fail 2 2 duplicated chunks spanning 123 total lines (min-lines=5, min-tokens=70)
Security Pass 0
License
proprietary
Authors
Make it pay

Turn an existing module into recurring revenue.

If you already maintain a Magento 2 module on GitHub or GitLab, listing it on Packagento takes about five minutes. We mirror your tags, handle distribution signing, and route paid licenses through Stripe Connect, so you can keep shipping the way you already do.