Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3
Table of Contents
Table of Contents
maxLevel4
minLevel2
outlinetrue
classtoc
Info
titleDid you know?

A language translation utility is provided at http://translate.blesta.com.This project is intended to facilitate the crowd sourced translation of Blesta into many languages and participation is highly encouraged.

Language in Blesta is handled by a collection of language files, heretoafter referred to as a "language pack." Language packs are primarily located in the language directory /installdir/language/, but additional files may be located in various other locations including ModulesPayment Gateways, Plugins, and some components or helpers. The default language in Blesta is English, US located in /installdir/language/en_us/.

Info
titleWhy not place all language in a single directory?

Allowing Modules, Gateways, and Plugins to specify their own language packs allows for a simplified installation process and helps ensure users will successfully install third-party add-ons.

Language Packs

Language packs must be named according to ISO 639-1 and 3166-1 standards. For example, English, US is stored in language pack en_us. In addition to a collection of language files, each language pack must contain a file of the same name as its directory with a single line defining the name of the language in its native format.

Code Block
title/installdir/language/en_us/en_us
firstline1
linenumberstrue
English, US

Language Direction

Language direction may be defined in the app_controller.php language file. This identifies which direction text should read (ltr for left-to-right, or rtl for right-to-left).

Code Block
title/installdir/language/en_us/app_controller.php
firstline1
linenumberstrue
$lang['AppController.lang.dir'] = "ltr";

If not defined language will default to the "ltr" (left-to-right) direction.

Anatomy of a Language File

Each language file should correspond to the class name in which the language is used. Take for example /installdir/language/en_us/admin_clients.php. This file contains all language associated with the AdminClients controller and related views.

A language file may contain one or more language entries. Entries are represented by array key/value pairs that correspond to an index and definition, respectively.

Code Block
languagephp
title/installdir/language/en_us/admin_clients.php
linenumberstrue
$lang['AdminClients.index.boxtitle_browseclients'] = "Browse Clients";

Index Formats

Indexes are primarily comprised of three dot-segments. The two main formats are:

  1. [ClassName].[methodName].[entry_name]
  2. [ClassName].[!error/!success/!notice].[entry_name]

The exclamation point identifies an entry as not belonging to any particular method. This convention makes it easy to identify error, success, and notice messages that may be used by various methods.

Variable Substitution

Some definitions contain variable substitutions, which can be identified by their syntax: %N$s, where N is a number (1, 2, ...). The $ in the variable name is escaped by a backslash (\) as the $ character has special meaning in double-quoted (") strings.

Code Block
languagephp
title/installdir/language/en_us/admin_clients.php
linenumberstrue
$lang['AdminClients.!success.makepayment_processed'] = "The payment was successfully processed for %1\$s. Transaction Number: %2\$s"; // %1$s is the payment amount, %2$s is the transaction number
Info
titleVariables can appear in any order

The definition above could easily have been written as "The payment was successfully processed! Transaction Number: %2\$s, Amount: %1\$s".

Using Definitions

Loading Language Files

Language files may be loaded from anywhere in Blesta. By default the Language library looks for language files in /installdir/language/, but you can override this value.

Code Block
languagephp
titleFrom somewhere in a controller or model
firstline37
linenumberstrue
Language::loadLang("lang_file"); // loads from /installdir/language/[language_pack]/lang_file.php
Language::loadLang("lang_file", null, PLUGINDIR . "my_plugin" . DS . "language" . DS); // loads from /installdir/plugins/my_plugin/language/[language_pack]/lang_file.php

Displaying Definitions

Controllers and Models must invoke the Language library directly to access language definitions.

Code Block
languagephp
titleFrom somewhere in a controller or model
firstline68
linenumberstrue
echo Language::_("ControllerName.methodName.entry_name");

Views have access to a wrapper method and should utilize the following syntax, instead:

Code Block
languagephp
titleFrom somewhere in a view
firstline17
<?php $this->_("ControllerName.methodName.entry_name");?>

To set variables for substitution, add them beginning as the 3rd parameters to Language::_() or $this->_(). For example:

Code Block
languagephp
titleFrom somewhere in a view
firstline17
<?php $this->_("ControllerName.methodName.entry_name", false, $param1, $param2, ..., $paramN);?>