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>

 

Cela fonctionne comme un test initial, mais coder en dur une seule langue dans le système est une mauvaise idée. Avant d'aller trop loin dans la création de pages et de formulaires, nous devrions ajouter le support multilingue au composant.

Même si vous n'avez pas personnellement les ressources pour effectuer les traductions vous-même, nous recommandons vivement que vous soyez attentif à la gestion correcte des chaînes de langage à l'intérieur de votre composant. Les composants open source peuvent être traduits par les membres de la communauté, et les utilisateurs finaux peuvent créer les leurs s'ils le souhaitent.

Créons les fichiers de langue et mettons à jour le manifeste pour les référencer :

1 Create: admin/language/en-GB/en-GB.com_helloworld.ini Chaînes de langage du composant pour la partie panneau d'administration
2 Create: admin/language/en-GB/en-GB.com_helloworld.sys.ini Chaînes de langage du système pour le composant
3 Create: site/language/en-GB/en-GB.com_helloworld.ini Chaînes de langage du composant pour la partie du site public
4 Update: helloworld.xml Ajouter les fichiers de langue au manifeste
5 Update: admin/tmpl/hello/default.php Remplacez les chaînes de langage codées en dur par des codes de langage.
6 Update: site/tmpl/hello/default.php Remplacez les chaînes de langage codées en dur par des codes de langage.
7 Update: site/tmpl/hello/default.xml

Remplacez les chaînes de langage codées en dur par des codes de langage.

 

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.