DEV Community

ironAngel2000
ironAngel2000

Posted on

1 3

Translations in PHP projects

Sometimes it is necessary to translate masks, forms or other modules into other languages.

The classic way is creating a separate .php file for each language and define a constant for each term. The advantage of this variant is that constants are available in every class and in each namespace.

The disadvantage is, if a lot of constants have to be defined, the list becomes confusing and a translator does not necessarily get along with the constants.

A small project that is quick and easy to integrate can solve this problem.

"Sophokles Translation"

Sophokles Translation is a library that can be conveniently installed and used through Composer.

The installation works as follows:

1. composer require sophokles/translation

2. Run composer install

Enter fullscreen mode Exit fullscreen mode

The new classes are now available through the Composer autoloader.

require_once '/vendor/autoload.php';
Enter fullscreen mode Exit fullscreen mode

The classes themselves work in the namespace "\Sophokles\Translation\".

The classes works with separate JSON formated files, in which the termes are translated. Becaus JSON ist stored in UTF-8 codepage it can be used for all languages. Also translaters can read the files and make easy the transition with a normal text editor.

An example of such a file:

{
    "languages":{
        "source":"en",
        "target":"de"
    },
    "translations":[
        {
            "source":"save",
            "target":"speichern"
        },
        {
            "source":"cancel",
            "target":"abbrechen"
        },
        {
            "source":"delete",
            "target":"löschen"
        }, 
        {
            "source":"edit",
            "target":"bearbeiten"
        },
        {
            "source":"close",
            "target":"schließen"
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

The "languages" section defines the source language as well as the “target” section the target language. The translations are entered in the "translations" section.

In PHP the JSON file can be conveniently integrated:

\Sophokles\Translation\translation::registerFile('/translations/lang.de.json');
Enter fullscreen mode Exit fullscreen mode

Of course, several files can be included, so that you can manage the translations modular in the project.

The output of the translations is handled by the class \Sophokles\Translation\lang. First you have to define the target language (the default language is "en"):

\Sophokles\Translation\lang::setLanguage('de');
Enter fullscreen mode Exit fullscreen mode

To output a term, use the call:

\Sophokles\Translation\lang::get([TERM]);
Enter fullscreen mode Exit fullscreen mode

If the class finds the translation of the term, it is output, otherwise the term is printed in its source. In this way you do not have to ride with cryptic keys, you can work directly in the source language with the correct words. This makes the source code more readable for other programmers.

Sophocles Translation also includes a debugging mode. Simply define the constant "SOPHOKLES_DEBUG":

define ('SOPHOKLES_DEBUG', true);
Enter fullscreen mode Exit fullscreen mode

If the constant has been set to "true", then the system outputs a tilde "~" after each term for which no translation is found.

The library is available for Composer at

https://packagist.org/packages/sophokles/translation

or for developers

https://github.com/ironAngel2000/sophokles-translation

API Trace View

How I Cut 22.3 Seconds Off an API Call with Sentry 👀

Struggling with slow API calls? Dan Mindru walks through how he used Sentry's new Trace View feature to shave off 22.3 seconds from an API call.

Get a practical walkthrough of how to identify bottlenecks, split tasks into multiple parallel tasks, identify slow AI model calls, and more.

Read more →

Top comments (4)

Collapse
 
vladapopov profile image
Vladimir Popov

I found Symfony translation component as a mighty, robust tool for translations.

Collapse
 
ironangel2000 profile image
ironAngel2000

Sure, but if you just want to include a small library and do not need the full framework, then Sophokles / translate is very fast.

Collapse
 
vladapopov profile image
Vladimir Popov

You can install it via composer as a stand alone component to any project.
Anyway i don’t mind using other libs if do the job properly.

Thread Thread
 
ironangel2000 profile image
ironAngel2000 • Edited

Sophokles/translate ist a component of a CMS I actualy Develop. I think I will public in future some libraries of it

Billboard image

Use Playwright to test. Use Playwright to monitor.

Join Vercel, CrowdStrike, and thousands of other teams that run end-to-end monitors on Checkly's programmable monitoring platform.

Get started now!

👋 Kindness is contagious

Dive into an ocean of knowledge with this thought-provoking post, revered deeply within the supportive DEV Community. Developers of all levels are welcome to join and enhance our collective intelligence.

Saying a simple "thank you" can brighten someone's day. Share your gratitude in the comments below!

On DEV, sharing ideas eases our path and fortifies our community connections. Found this helpful? Sending a quick thanks to the author can be profoundly valued.

Okay