Gestion basique du langage
Dans cet article, nous ajouterons la gestion des chaînes de langage à notre nouveau composant. Vous avez peut-être remarqué dans le dernier article de cette série de tutoriels que lorsque nous avons ajouté un lien de menu au composant, nous avons codé en dur des mots anglais dans le lien :
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="Hello World!">
<message><![CDATA[My first Joomla! page]]></message>
</layout>
</metadata>
Détails des fichiers :
admin/language/en-GB/en-GB.com_helloworld.ini
Ce fichier contient les chaînes de langage utilisées sur les pages du composant à l'intérieur du panneau d'administration de Joomla!
; Hello World Admin Strings
; Copyright (C) 2020 John Smith. All rights reserved.
COM_HELLOWORLD_MSG_HELLO_WORLD="Hello World!"
admin/language/en-GB/en-GB.com_helloworld.sys.ini
Ce fichier contient les chaînes de langage utilisées dans les systèmes Joomla! en dehors des propres pages du composant. Par exemple, les chaînes de notre élément de menu appartiennent à ce composant, mais elles sont utilisées par le système de menu de Joomla! plutôt que sur nos propres pages, donc elles appartiennent à ce fichier.
; Hello World Sys.ini
; Copyright (C) 2020 John Smith. All rights reserved.
COM_HELLOWORLD_MENU_HELLO_WORLD_TITLE="Hello World!"
COM_HELLOWORLD_MENU_HELLO_WORLD_DESC="My first Joomla! page"
site/language/en-GB/en-GB.com_helloworld.ini
Ce fichier contient les chaînes de langage utilisées sur les pages "publiques" du composant (pages dans la partie site). Il y a quelques points à noter qui sont communs à tous les fichiers de langue que vous allez créer. Tout d'abord, les chaînes de langage sont stockées dans le format INI courant, et le nom de chaque propriété commence par le nom du système du composant : com_helloworld. Il est de convention que toutes les propriétés de langue soient écrites en majuscules.
Vous remarquerez également que tant le dossier que le fichier de langue lui-même contiennent le code local pour ces chaînes, "en-GB". Pour chaque localisation que vous souhaitez prendre en charge, vous aurez besoin d'un nouvel ensemble de fichiers avec les chaînes appropriées.
; Hello World Public Site Strings
; Copyright (C) 2020 John Smith. All rights reserved.
COM_HELLOWORLD_MSG_HELLO_WORLD="Hello World!"
helloworld.xml
Comme précédemment, nous devons ajouter les nouveaux dossiers de langue au manifeste, afin que Joomla! sache les copier à leur place. De plus, nous devons indiquer à Joomla! que nous avons des fichiers de langue, où les trouver et quelles locales ils prennent en charge. Cela se fait avec l'ajout de deux blocs XML `<language />`, un pour chaque partie du composant.
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="4.0" method="upgrade">
<name>Hello World</name>
<!-- The following elements are optional and free of formatting constraints -->
<creationDate>December 2020</creationDate>
<!-- Dummy author, feel free to replace anywhere you see it-->
<author>John Smith</author>
<authorUrl>https://smith.ca</authorUrl>
<copyright>John Smith</copyright>
<license>GPL v3</license>
<!-- The version string is recorded in the components table -->
<version>0.0.4</version>
<!-- The description is optional and defaults to the name -->
<description>
A hello world component!
</description>
<!-- This is the PHP namespace under which the extension's
code is organised. It should follow this format:
Vendor\Component\ComponentName
"Vendor" can be your company or your own name
The "ComponentName" section MUST match the name used
everywhere else for your component. Whatever the name of
this XML file is, the namespace must match (ignoring CamelCase).
-->
<namespace path="src/">JohnSmith\Component\HelloWorld</namespace>
<files folder="site/">
<folder>language</folder>
<folder>src</folder>
<folder>tmpl</folder>
</files>
<languages>
<language tag="en-GB">site/language/en-GB/en-GB.com_helloworld.ini</language>
</languages>
<administration>
<!-- The link that will appear in the Admin panel's "Components" menu -->
<menu link="index.php?option=com_helloworld">Hello World</menu>
<!-- List of files and folders to copy, and where to copy them -->
<files folder="admin/">
<folder>language</folder>
<folder>services</folder>
<folder>src</folder>
<folder>tmpl</folder>
</files>
<languages>
<language tag="en-GB">admin/language/en-GB/en-GB.com_helloworld.ini</language>
<language tag="en-GB">admin/language/en-GB/en-GB.com_helloworld.sys.ini</language>
</languages>
</administration>
</extension>
admin/tmpl/hello/default.php
Remplacez les chaînes de caractères en anglais codées en dur par les nouvelles propriétés de langue. Nous utilisons la classe Joomla\CMS\Language\Text pour afficher nos chaînes de langue dans la page. Si l'utilisateur final utilise une autre langue prise en charge dans notre composant, cette classe récupérera automatiquement les chaînes correctes pour cette langue et les affichera à la place.
<?php
use Joomla\CMS\Language\Text;
/**
* @package Joomla.Administrator
* @subpackage com_helloworld
*
* @copyright Copyright (C) 2020 John Smith. All rights reserved.
* @license GNU General Public License version 3; see LICENSE
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
?>
<h2><?= JText::_('COM_HELLOWORLD_MSG_HELLO_WORLD') ?></h2>
site/tmpl/hello/default.php
Nos modèles de page sont actuellement identiques, donc les remplacements nécessaires sont également identiques. Supprimez l'anglais codé en dur et remplacez-le par la propriété de langue correcte.
<?php
use Joomla\CMS\Language\Text;
/**
* @package Joomla.Administrator
* @subpackage com_helloworld
*
* @copyright Copyright (C) 2020 John Smith. All rights reserved.
* @license GNU General Public License version 3; see LICENSE
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted Access');
?>
<h2><?= JText::_('COM_HELLOWORLD_MSG_HELLO_WORLD') ?></h2>
site/tmpl/hello/default.xml
Tout comme les fichiers de modèle PHP, nous devons remplacer l'anglais codé en dur dans ce fichier par les nouvelles propriétés de langue. Contrairement aux fichiers PHP, cependant, nous n'avons pas besoin de code supplémentaire pour le faire - remplacez simplement les chaînes anglaises par les noms des propriétés de langue et Joomla! est assez intelligent pour les faire correspondre pour nous.
Rappelez-vous : étant donné que ces chaînes sont utilisées par Joomla! dans ses propres systèmes (en dehors des pages de notre composant), elles se trouvent dans le fichier spécial admin/language/en-GB/en-GB.com_helloworld.sys.ini.
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_HELLOWORLD_MENU_HELLO_WORLD_TITLE">
<message><![CDATA[COM_HELLOWORLD_MENU_HELLO_WORLD_DESC]]></message>
</layout>
</metadata>
Tester le composant
Tout comme précédemment, compressez votre nouvelle version de composant et téléchargez-la dans le panneau d'administration de votre installation Joomla!. Une fois qu'il est installé, vérifiez que vos pages et le lien du menu apparaissent exactement comme avant. Si tout fonctionne correctement, il ne devrait y avoir aucun changement du tout.