WordPress: Caching MO-files … Does it make any sense!

4. January 2025
.SHARE

Table of Contents

First a bit of context 🙂

What is Gettext?

Translation within WordPress is based of Gettext. Gettext is a software internationalization and localization (i18n) framework used in many programming languages to facilitate the translation of software applications into different languages. It provides a set of tools and libraries for managing multilingual strings and translating them into various languages.

The primary goal of Gettext is to separate the text displayed in an application from the code that generates it. It allows developers to mark strings in their code that need to be translated and provides mechanisms for extracting those strings into a separate file known as a “message catalog” or “translation template.”

The translation template file contains the original strings and serves as a basis for translators to provide translations for different languages. Translators use specialized tools, such as poedit or Lokalize, to work with the message catalog files. These tools help them associate translated strings with their corresponding original strings, making the translation process more manageable.

At runtime, Gettext libraries are used to retrieve the appropriate translated strings based on the user’s language preferences and the available translations in the message catalog. It allows applications to display the user interface, messages, and other text elements in the language preferred by the user.

Gettext is widely used in various programming languages, including C, C++, Python, Ruby, PHP, and many others. It has become a de facto standard for internationalization and localization in the software development community due to its flexibility and extensive support in different programming environments.

What are WordPress language files?

WordPress uses dedicated language files to store translations of your strings of text in other languages. Two formats are used:

  1. Portable Object (PO) files: They serve as the message catalog, containing the original strings that need to be translated and placeholders for the translations. Each entry in a PO file consists of several fields:
    • msgid: This field represents the original string that needs to be translated.
    • msgstr: This field holds the translated string corresponding to the msgid field.
    • Comments: PO files may include comments that provide context or instructions for translators. These comments start with a “#” symbol.
  2. Machine Object (MO) files: MO files are generated from PO files using a compilation process. The compilation process converts the human-readable PO file, which contains the original strings and their translations, into a more compact and efficient binary format suitable for runtime use.

    The purpose of MO files is to provide a faster and more efficient way of accessing translations during the execution of a software application. Instead of parsing and processing the text-based PO files at runtime, the Gettext libraries directly read the pre-compiled MO files.

Caching Language Files!

There has been a discussion for years, if it makes sense to cache mo-files, to speedup WordPress when multiple languages are in use. Discussion of the WordPress Core team.

There have been a couple of plugins trying to fix this and prevent reloading of language files on every pageload.

Most of these use transients in your database and object caches if active.

Does it really make any sense?

Well it all depends on the amount of language files and your infrastructure. This load/parse operation is quite CPU-intensive and does spend quite a significant amount of time.

I have decided, not to bother with it in the past 🙂 But I am always looking for ways to speed up multi-lingual websites, as that is my daily bread & butter 😉 Checkout Index WP MySQL For Speed & Index WP Users For Speed, which optimizes the MySQL Indexes for optimal speed. That change, really does make a bit difference!

Native Gettext for WordPress

One thing that can help to speed up things, is to use the native gettext extension and not the WordPress integration of it. This will indeed help speedup translation processing and help big multilingual websites.

Native Gettext for WordPress by Colin Leroy-Mira, provides just that.

Disable Gettext, when only using English!

Create a must use plugin and add this:

This will prevent any .mo file from loading.

Use the gettext filter to change any translatable string.

Please consider the performance impact. Read about it at the main documentation.

Enjoy ….

Let’s Talk!

Looking for a reliable partner to bring your project to the next level? Whether it’s development, design, security, or ongoing support—I’d love to chat and see how I can help.

Get in touch,
and let’s create something amazing together!

RELATED POSTS

Pushing the Boundaries – My Journey Through Early CMS and PHP Development

Back in the early 2000s, content management systems (CMS) were still in their infancy. Websites were mostly static, and managing content dynamically required custom scripts or early blogging tools. My journey into CMS development started with Greymatter, took me through PHP-Nuke, PostNuke, and XOOPS, and ultimately shaped my understanding of PHP and modular web development. […]

Enhancing WordPress Development with the Timber Template System

WordPress has long been the go-to CMS for developers and designers, but its traditional PHP-based templating system can sometimes feel outdated and cumbersome. Enter Timber, a powerful templating framework that brings the flexibility and clarity of the Twig templating language to WordPress. With Timber, developers can separate logic from presentation, leading to cleaner, more maintainable code. All my […]

Day 4: Kimai Time Tracking – 7 Days of Docker

Kimai is a powerful open-source time-tracking application that helps businesses and freelancers efficiently manage work hours and billing. It supports multi-user environments, customizable reporting, and integrations with various tools. In this guide, we’ll walk through setting up Kimai using Docker and explore how to use it effectively. Why Use Kimai with Docker? Running Kimai with […]

Alexander

I am a full-stack developer. My expertise include:

  • Server, Network and Hosting Environments
  • Data Modeling / Import / Export
  • Business Logic
  • API Layer / Action layer / MVC
  • User Interfaces
  • User Experience
  • Understand what the customer and the business needs


I have a deep passion for programming, design, and server architecture—each of these fuels my creativity, and I wouldn’t feel complete without them.

With a broad range of interests, I’m always exploring new technologies and expanding my knowledge wherever needed. The tech world evolves rapidly, and I love staying ahead by embracing the latest innovations.

Beyond technology, I value peace and surround myself with like-minded individuals.

I firmly believe in the principle: Help others, and help will find its way back to you when you need it.