Like other plugins in Moodle, blocks can have their own language files to manage their display strings. They are contained within a special lang directory within the block's file structure. Moodle uses a hierarchical structure for its language folders. This is designed to allow for parent and child language folders and packs. Language packs are a collection of all of the core language strings needed to support a language. Moodle has an integrated language pack installer, which is used to add language packages for core Moodle. A good example of a parent language folder is en_utf8. The name en_utf8 indicates this is the language folder for English with Unicode encoding. A child language for English is the US dialect. This is designated with the folder name en_us_utf8. Moodle allows the child language to inherit strings defined in the parent language. This lets us rapidly develop language support for dialects by minimizing the work to defining only the strings that are different for the sub-dialect. Any strings not defined in the child language will simply be pulled from the parent.
The official documentation for language packs can be found at:
Let's create a folder called lang within the helloworld folder. Next, we create another folder inside this called en_utf8. Each language will have its own folder within lang. Inside this folder, create a file with the same name as the block's primary PHP file. In our case, we will call this block_helloworld.php. Moodle stores all of its localization strings within a hash array called $string. We define our first value for the $string hash as follows:
<?PHP
$string['helloworld'] = 'Hello World';
?>
Our block and block management page (shown in the following screenshot) should now look a lot better: