Skip to content
This repository has been archived by the owner on Aug 17, 2023. It is now read-only.

swissspidy/wp-php-translation-files

Repository files navigation

WP PHP Translation Files

Commit activity Code Coverage License

Use plain PHP files for WordPress translations instead of .mo files.

The WordPress i18n system uses gettext, which operates with source .po (Portable Object) files and binary .mo (Machine Object) files for storing and loading translations. is not trivial. With this solution, translations will instead be stored in plain .php files returning an associate array of translation strings. Whenever a .php file is available, it will be preferred over the .mo file, which is still used as a fallback.

Ideally, the .php files will be served directly from translate.wordpress.org. For this proof of concept, the .php files are created automatically after translation updates and also on demand when loading .mo files.

Format

<?php
return [
	'translation-revision-date' => '+0000',
	'generator' => 'WordPress/6.3-alpha-55629',
	'messages' => [
		'Foo' => ['Bar'],
		'Bar' => ['Baz'],
		'1 Dragon' => ['1 Dragon', '2 Dragons'],
	]
];

Performance

Nothing is faster in PHP than loading and executing another PHP file. JSON, INI, or XML would all be much slower.

Some initial measurements taken for a typical frontend request:

  English   MO   PHP  
  Load (s) Memory (B) Load (s) Memory (B) Load (s) Memory (B)
Median 0.31 14,639,624 0.40 24,442,272 0.36 22,852,584
Difference     29.58% 66.96% 17.35% 56.10%
Difference to MO          -9.44% -6.50%

In short, this reduces load time by ~10% and memory usage by ~7% for localized WordPress sites.

About

Proof-of-concept plugin that uses plain PHP files for WordPress translations

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published