WHMCS supports numerous languages, in both in the client and admin areas. To enable this, all text used throughout the system is stored within language files.
Language files are stored in the /lang/ sub-folders of both the client and admin directories.
WHMCS includes 21 client area translations by default. These are:
Arabic, Catalan, Chinese, Croatian, Czech, Danish, Dutch, English, Farsi, French, German, Hungarian, Italian, Norwegian, Brazilian & Native Portuguese, Russian, Spanish, Swedish, Turkish & Ukranian
And for the admin area there are 13 translations included:
Arabic, Czech, Dutch, English, Farsi, French, Hebrew, Hungarian, Italian, Portuguese, Russian, Spanish & Turkish
We rely on the dedication and generosity of our users for contributing translations, as we find real life translations are a much higher quality compared with using automated translation systems as some softwares do. So if you have any suggestions for improvements, or a new language file you are willing to contribute, please get in touch.
Adding a New Language
If a language you operate in is not available as standard, then you can create your own translation. Here's how:
- Begin by opening an existing language file
- Save this file with a new name - the name you want to be shown in the language selection dropdown menu in WHMCS - the name should only consist of a-z0-9 characters and end with the extension ".php"
- Once the file has been created, you can then begin going through and translating the lines within it
- An example line is as follows - you should only change the part in bold:
$_LANG['accountinfo'] = "Account Information";
Be careful not to delete any of the quotation marks (") around the text strings or the semi-colons on the ends of each line (;). Also should you want to use a quote character (") within your translated text, you must escape it - for example: \" The language files are written in PHP syntax so valid PHP code must be maintained.
Translating Language Strings
In addition to general text strings, language strings may also use the following constructs within them:
- Using named tags, like :page
- Using variable names, like $price
- Using %s for sprintf
In the first two examples, WHMCS will need to be able to substitute them into the final output for the string at the time it is used, so it is important to keep them intact and untranslated in your translations. So :page will always be page, and $price will always be $price.
For the sprintf type, the number and location of %s should not be changed, as sprintf replaces these %s values in order from beginning to end, in order, and there's no way for the template to change the order in which the %s tags will be replaced.
$_LANG['examplestring'] = "The price you will pay today is :price";
Right Example translation = " 'ay' yIbuS DaHjaj :price "
Wrong Example translation = " 'ay' yIbuS DaHjaj :'ay' "
This would display :'ay' instead of the price on the translated page.
$_LANG['examplestring'] = "Today is a good day to purchase your domain $domain for cheap!";
Right Example translation = " DaHjaj QaQ jaj yer $domain je' qutlh! "
Wrong Example translation = " DaHjaj QaQ jaj yer $yer je' qutlh! "
This would display everything but $yer: "DaHjaj QaQ jaj yer je' qutlh!"
$_LANG['examplestring'] = "Honor your house with a server for only %s a year! (%s a month)
Right Example translation = "tuqwIj neH %s jabwI' pop! (%s net jar)"
Wrong Example translation 1 = "tuqwIj je jabwI' pop! (%s net jar pagh %s)"
Wrong Example translation 2 = "tuqwIj %s net jar jabwI' pop!"
In the first wrong translation, "net jar pagh" means "X a month, or Y a year". Because WHMCS will be replacing these in the original order, you'll end up showing the prices backwards.
In the second wrong translation, we removed the bit talking about the yearly price and just mention the monthly price. However, WHMCS will still replace the first %s it sees with the yearly price, so you'll end up quoting the yearly price in monthly.
By default the language files in WHMCS use the UTF-8 encoding without a Byter Order Marker character at the start. When modifying these files it is important to maintain the same encoding.
If you have chosen to change the system charset setting to something other than UTF-8 (eg. iso-8859-1) then the language files will need to be re-saved with ANSI encoding without a Byte Order Marker. Most text editors have this option (including Notepad).
Overriding Language Strings
The language files are provided unencoded to allow you to view the language strings that WHMCS uses.
However we do not recommend editing these files directly. They are often overwritten during software upgrades to introduce new and updated text.
Instead we recommend that you use overrides which allow you to customise the default variables with your own in a way which can be safely preserved through the upgrade process.
Steps for customising language strings via overrides are as follows:
1. Create the folder 'overrides' within the 'lang' directory.
2. Create or copy the language file you want to override. For example, to create an override for the English language you create ./lang/overrides/english.php
3. Open the newly created file in your preferred editor.
4. Start the file with a PHP tag '<?php' indicating PHP code is to be used.
5. Enter the variable(s) you wish to override. For example, if you wanted to change "Welcome to our members area" you would locate the proper variable within ./lang/english.php and place it into the overrides english file with your preferred change:
$_LANG['headertext'] = "Welcome to our members area.";
$_LANG['headertext'] = "Welcome home!";
6. For each variable you wish you change, repeat step #5. For example, a completed overrides file should look something like this:
<?php $_LANG['headertext'] = "Welcome home!"; $_LANG['addtocart'] = "Add to Basket"; $_LANG['cartproductaddons'] = "Product Extras";
7. Save, and you're done!
By default the language files in WHMCS use the UTF-8 encoding without a Byte Order Marker character at the start. When creating language override files it is important to maintain the same encoding.
If you have chosen to change the system charset setting to something other than UTF-8 (eg. iso-8859-1) then the language override files will need to be re-saved with ANSI encoding without a Byte Order Marketer. Most text editors have this option (including Notepad).