Home
NexoPOS

Translating NexoPOS

NexoPOS can be translated by registering the language code, extracting the available localization strings, then editing the generated JSON files. This guide explains the full process for the core application and installed modules.

Before You Start

You need access to the NexoPOS source files and a terminal from the root directory of the installation. You should also know the language code you want to use, such as it for Italian, de for German, or es for Spanish. Use a valid ISO language code so the generated file name and the profile language option stay consistent.

Adding a language that is not already listed requires a core configuration change. If the translation should be available to other users, make the change in a fork of the NexoPOS repository and submit it as a pull request.

Register The Language

Open config/nexopos.php and add the language to the languages array. The array key is the language code and the value is the name displayed inside NexoPOS.

'languages' => [
    'en' => 'English',
    'fr' => 'Francais',
    'it' => 'Italian',
],
nimshot-2026-06-29-121105-hlmbo

For a right-to-left language, also add the language code to the rtl-languages array. For example, Arabic is registered with ar.

'rtl-languages' => [ 'ar' ],

Extract Core Translation Strings

Run the translation command with the language code you registered. This example extracts Italian strings.

php artisan ns:translate --extract --lang=it

NexoPOS creates or updates the language file at lang/it.json. Replace it with the code of the language you are translating.

image-3732467

Translate The JSON File

Open the generated JSON file in your preferred text editor. Each key is the original text used by NexoPOS, and each value is the translated text that will be displayed to users. Keep the keys unchanged and translate only the values.

{
    "Dashboard": "Cruscotto",
    "Products": "Prodotti"
}

After editing, make sure the file remains valid JSON. A missing quote, comma, or closing brace can prevent the language file from loading.

image-4945521

Translate A Module

Modules have their own localization files. First, identify the module namespace from the folder name inside the modules directory. For example, a module installed in modules/NsGastro uses NsGastro as its namespace.

php artisan ns:translate NsGastro --extract --lang=it

This creates or updates the module language file under modules/NsGastro/Lang/it.json. Open that file and translate the values the same way you translated the core language file.

image-5300387

Make Language Files Available

If translations are saved but the browser cannot load them, refresh the public language links. For the core language files, run:

php artisan ns:translate --symlink --force

For a specific module, refresh the module public link with the module namespace:

php artisan modules:symlink NsGastro

You can also refresh public links for all installed modules by running the command without a namespace.

php artisan modules:symlink

Select The Language From The Profile

After the translation files are ready, sign in to NexoPOS and open the user profile from the dashboard header. $

open-profile411952

Select the translated language, save the profile, then reload the dashboard.

set-language-profile590876

If The Translation Does Not Apply

If NexoPOS still displays the original text, check the most common causes first.

  • The language was not selected on the user profile.
  • The language code in config/nexopos.php does not match the generated JSON file name.
  • The JSON file contains a syntax error.
  • The browser cannot access the language files from public/lang or the module public directory.
  • The module namespace passed to php artisan ns:translate is not the correct module namespace.
image-7445231

Summary

  • Register the language in config/nexopos.php.
  • Extract core strings with php artisan ns:translate --extract --lang={code}.
  • Translate the generated JSON file under lang.
  • Extract module strings with php artisan ns:translate {ModuleNamespace} --extract --lang={code}.
  • Refresh public language links, then select the language from the user profile.