J3.x

Créer un Pack de langue pour Joomla!

From Joomla! Documentation

This page is a translated version of the page J3.x:Making a Language Pack for Joomla and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎Nederlands • ‎português • ‎português do Brasil • ‎русский
Joomla! 
3.x
série

Comment créer des packs de langue pour le noyau Joomla!

Notes

  • TOUS LES FICHIERS DOIVENT ÊTRE SAUVEGARDÉS EN UTF8 SANS BOM (pour éviter les codes non-ascii pour les lettres accentuées, etc.).
  • Le composant com_localise peut vous aider dans la création et la mise à jour des fichiers .ini.
  • Depuis Joomla! 3.2.0, les fichiers en-GB sont toujours chargés en premier. Par conséquent, si une chaîne est manquante ou si une erreur d'analyse intervient pour un pack de langue, la valeur sera affichée en anglais.


Packs de langue complets

* fr-FR sera pris comme exemple de préfixe de langue. Un pack de langue complet contiendra les traductions à la fois pour la partie site et pour la partie administration.

  1. Pour le cas d'un pack complet, celui-ci se composera de 3 fichiers, puis il sera zippé.
    • pkg_fr-FR.xml
    • site_fr-FR.zip
    • admin_fr-FR.zip
  2. Le nommage du pack :
    • fr-FR_joomla_lang_full_3.7.0v1.zip
  3. Les fichiers nécessaires pour une suppression partielle :
    • chaque pack doit contenir des fichiers fr-FR.lib_joomla.ini et fr-FR.localise.php pour permettre la suppression par l'utilisateur du pack site ou administration.
    • IMPORTANT : depuis que certains fichiers .ini d'administration sont nécessaires en frontend et que certains changements ont été apportés pour le chargement des fichiers ini du plugin, il reste nécessaire d'inclure certains éléments de la partie administration dans le pack final, même pour un pack exclusivement 'site'. Veuillez consulter le Pack autonome pour la partie Site public.

Un fichier pkg_fr-FR.xml

<?xml version="1.0" encoding="UTF-8"?>
<extension type="package" version="3.7" method="upgrade"> <!-- method="upgrade" is compulsory since 3.4 -->
	<name>French language pack</name> <!-- name should be only ALPHA characters since 3.7 -->
	<packagename>fr-FR</packagename> <!-- the packagename has to be the same as the name of pkg_whatever.xml -->
	<version>3.7.0.1</version> <!-- change the version # 3.x.x.x when updating, will display in manager -->
	<creationDate>03/02/2017</creationDate> <!-- will display in manager -->
	<author>French translation team : joomla.fr</author> <!-- will display in manager -->
	<authorEmail>traduction@joomla.fr</authorEmail> <!-- will display in manager -->
	<authorUrl>http://joomla.fr</authorUrl> <!-- will display in manager -->
	<copyright>Copyright (C) 2005 - 2017 Joomla.fr and Open Source Matters, Inc. All rights reserved.</copyright>
	<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
	<url></url>
	<packager></packager>
	<packagerurl></packagerurl>
	<description><![CDATA[<div style="text-align:left;">
<h3>Joomla! 3.7.0 Full French (fr-FR) Language Package - Version 3.7.0v1</h3>
<h3>Paquet de langue Joomla! 3.7.0 français (fr-FR) complet - Version 3.7.0v1</h3>
</div>]]></description>
	<blockChildUninstall>true</blockChildUninstall>  <!-- New in 3.7.0: prevents uninstalling separately site or admin parts. -->
	<files>
		<file type="language" client="site" id="fr-FR">site_fr-FR.zip</file>
		<file type="language" client="administrator" id="fr-FR">admin_fr-FR.zip</file>
	</files>
	<updateservers>
		<server type="collection" priority="1" name="Accredited Joomla! Translations">
                        https://update.joomla.org/language/translationlist_3.xml
                </server>
	</updateservers>
</extension>

Remarque : depuis la version 3.2, les fichiers pour TinyMCE ne sont plus nécessaires. Ils sont désormais intégrés au noyau. Si votre langue est manquante, veuillez contacter le coordinateur pour l'Équipe de Traduction.

Un seul zip par client (c'est à dire un pour le site et un pour l'administration)

  • site_fr-FR.zip
  • admin_fr-FR.zip

Le contenu du zip. (L'exemple ci-dessous sera pour le client admin).

Un fichier install.xml

Exemple pour l'administration.

<extension version="3.7" client="administrator" type="language" method="upgrade"> <!-- change to client="site" if site pack -->
	<name>French (fr-FR)</name> <!-- New in 3.7.0: Use only latin ascii characters. -->
	<tag>fr-FR</tag>
	<version>3.7.0.1</version>
	<creationDate>15/02/2017</creationDate>
	<author>French translation team : joomla.fr</author>
	<authorEmail>traduction@joomla.fr</authorEmail>
	<authorUrl>www.joomla.fr</authorUrl>
	<copyright>Copyright (C) 2005 - 2017 joomla.fr et Open Source Matters. Tous droits réservés</copyright>
	<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
	<description>fr-FR administrator language</description>
	<files>
		<filename>fr-FR.com_admin.ini</filename>
		<filename>fr-FR.com_admin.sys.ini</filename>
		<filename>fr-FR.com_ajax.ini</filename>
		<filename>fr-FR.com_ajax.sys.ini</filename>
		<filename>fr-FR.com_associations.ini</filename>
		<filename>fr-FR.com_associations.sys.ini</filename>
		<filename>fr-FR.com_banners.ini</filename>
		<filename>fr-FR.com_banners.sys.ini</filename>
		<filename>fr-FR.com_cache.ini</filename>
		<filename>fr-FR.com_cache.sys.ini</filename>
		<filename>fr-FR.com_categories.ini</filename>
		<filename>fr-FR.com_categories.sys.ini</filename>
		<filename>fr-FR.com_checkin.ini</filename>
		<filename>fr-FR.com_checkin.sys.ini</filename>
		<filename>fr-FR.com_config.ini</filename>
		<filename>fr-FR.com_config.sys.ini</filename>
		<filename>fr-FR.com_contact.ini</filename>
		<filename>fr-FR.com_contact.sys.ini</filename>
		<filename>fr-FR.com_content.ini</filename>
		<filename>fr-FR.com_content.sys.ini</filename>
		<filename>fr-FR.com_contenthistory.ini</filename>
		<filename>fr-FR.com_contenthistory.sys.ini</filename>
		<filename>fr-FR.com_cpanel.ini</filename>
		<filename>fr-FR.com_cpanel.sys.ini</filename>
		<filename>fr-FR.com_fields.ini</filename>
		<filename>fr-FR.com_fields.sys.ini</filename>
		<filename>fr-FR.com_finder.ini</filename>
		<filename>fr-FR.com_finder.sys.ini</filename>
		<filename>fr-FR.com_installer.ini</filename>
		<filename>fr-FR.com_installer.sys.ini</filename>
		<filename>fr-FR.com_joomlaupdate.ini</filename>
		<filename>fr-FR.com_joomlaupdate.sys.ini</filename>
		<filename>fr-FR.com_languages.ini</filename>
		<filename>fr-FR.com_languages.sys.ini</filename>
		<filename>fr-FR.com_login.ini</filename>
		<filename>fr-FR.com_login.sys.ini</filename>
		<filename>fr-FR.com_mailto.sys.ini</filename>
		<filename>fr-FR.com_media.ini</filename>
		<filename>fr-FR.com_media.sys.ini</filename>
		<filename>fr-FR.com_menus.ini</filename>
		<filename>fr-FR.com_menus.sys.ini</filename>
		<filename>fr-FR.com_messages.ini</filename>
		<filename>fr-FR.com_messages.sys.ini</filename>
		<filename>fr-FR.com_modules.ini</filename>
		<filename>fr-FR.com_modules.sys.ini</filename>
		<filename>fr-FR.com_newsfeeds.ini</filename>
		<filename>fr-FR.com_newsfeeds.sys.ini</filename>
		<filename>fr-FR.com_plugins.ini</filename>
		<filename>fr-FR.com_plugins.sys.ini</filename>
		<filename>fr-FR.com_postinstall.ini</filename>
		<filename>fr-FR.com_postinstall.sys.ini</filename>
		<filename>fr-FR.com_redirect.ini</filename>
		<filename>fr-FR.com_redirect.sys.ini</filename>
		<filename>fr-FR.com_search.ini</filename>
		<filename>fr-FR.com_search.sys.ini</filename>
		<filename>fr-FR.com_tags.ini</filename>
		<filename>fr-FR.com_tags.sys.ini</filename>
		<filename>fr-FR.com_templates.ini</filename>
		<filename>fr-FR.com_templates.sys.ini</filename>
		<filename>fr-FR.com_users.ini</filename>
		<filename>fr-FR.com_users.sys.ini</filename>
		<filename>fr-FR.com_weblinks.ini</filename>
		<filename>fr-FR.com_weblinks.sys.ini</filename>
		<filename>fr-FR.com_wrapper.ini</filename>
		<filename>fr-FR.com_wrapper.sys.ini</filename>
                <filename>fr-FR.css</filename> <!-- this file can be added in the ADMINISTRATOR pack if one wants to change the fonts used to display the back-end interface.-->
		<filename>fr-FR.ini</filename>
		<filename>fr-FR.lib_joomla.ini</filename>
		<filename>fr-FR.localise.php</filename>
		<filename>fr-FR.mod_custom.ini</filename>
		<filename>fr-FR.mod_custom.sys.ini</filename>
		<filename>fr-FR.mod_feed.ini</filename>
		<filename>fr-FR.mod_feed.sys.ini</filename>
		<filename>fr-FR.mod_latest.ini</filename>
		<filename>fr-FR.mod_latest.sys.ini</filename>
		<filename>fr-FR.mod_logged.ini</filename>
		<filename>fr-FR.mod_logged.sys.ini</filename>
		<filename>fr-FR.mod_login.ini</filename>
		<filename>fr-FR.mod_login.sys.ini</filename>
		<filename>fr-FR.mod_menu.ini</filename>
		<filename>fr-FR.mod_menu.sys.ini</filename>
		<filename>fr-FR.mod_multilangstatus.ini</filename>
		<filename>fr-FR.mod_multilangstatus.sys.ini</filename>
		<filename>fr-FR.mod_popular.ini</filename>
		<filename>fr-FR.mod_popular.sys.ini</filename>
		<filename>fr-FR.mod_quickicon.ini</filename>
		<filename>fr-FR.mod_quickicon.sys.ini</filename>
		<filename>fr-FR.mod_stats_admin.ini</filename>
		<filename>fr-FR.mod_stats_admin.sys.ini</filename>
		<filename>fr-FR.mod_status.ini</filename>
		<filename>fr-FR.mod_status.sys.ini</filename>
		<filename>fr-FR.mod_submenu.ini</filename>
		<filename>fr-FR.mod_submenu.sys.ini</filename>
		<filename>fr-FR.mod_title.ini</filename>
		<filename>fr-FR.mod_title.sys.ini</filename>
		<filename>fr-FR.mod_toolbar.ini</filename>
		<filename>fr-FR.mod_toolbar.sys.ini</filename>
		<filename>fr-FR.mod_version.ini</filename>
		<filename>fr-FR.mod_version.sys.ini</filename>
		<filename>fr-FR.plg_authentication_cookie.ini</filename>
		<filename>fr-FR.plg_authentication_cookie.sys.ini</filename>
		<filename>fr-FR.plg_authentication_gmail.ini</filename>
		<filename>fr-FR.plg_authentication_gmail.sys.ini</filename>
		<filename>fr-FR.plg_authentication_joomla.ini</filename>
		<filename>fr-FR.plg_authentication_joomla.sys.ini</filename>
		<filename>fr-FR.plg_authentication_ldap.ini</filename>
		<filename>fr-FR.plg_authentication_ldap.sys.ini</filename>
		<filename>fr-FR.plg_captcha_recaptcha.ini</filename>
		<filename>fr-FR.plg_captcha_recaptcha.sys.ini</filename>
		<filename>fr-FR.plg_content_contact.ini</filename>
		<filename>fr-FR.plg_content_contact.sys.ini</filename>
		<filename>fr-FR.plg_content_emailcloak.ini</filename>
		<filename>fr-FR.plg_content_emailcloak.sys.ini</filename>
		<filename>fr-FR.plg_content_fields.ini</filename>
		<filename>fr-FR.plg_content_fields.sys.ini</filename>
		<filename>fr-FR.plg_content_finder.ini</filename>
		<filename>fr-FR.plg_content_finder.sys.ini</filename>
		<filename>fr-FR.plg_content_joomla.ini</filename>
		<filename>fr-FR.plg_content_joomla.sys.ini</filename>
		<filename>fr-FR.plg_content_loadmodule.ini</filename>
		<filename>fr-FR.plg_content_loadmodule.sys.ini</filename>
		<filename>fr-FR.plg_content_pagebreak.ini</filename>
		<filename>fr-FR.plg_content_pagebreak.sys.ini</filename>
		<filename>fr-FR.plg_content_pagenavigation.ini</filename>
		<filename>fr-FR.plg_content_pagenavigation.sys.ini</filename>
		<filename>fr-FR.plg_content_vote.ini</filename>
		<filename>fr-FR.plg_content_vote.sys.ini</filename>
		<filename>fr-FR.plg_editors-xtd_article.ini</filename>
		<filename>fr-FR.plg_editors-xtd_article.sys.ini</filename>
		<filename>fr-FR.plg_editors-xtd_contact.ini</filename>
		<filename>fr-FR.plg_editors-xtd_contact.sys.ini</filename>
		<filename>fr-FR.plg_editors-xtd_fields.ini</filename>
		<filename>fr-FR.plg_editors-xtd_fields.sys.ini</filename>
		<filename>fr-FR.plg_editors-xtd_image.ini</filename>
		<filename>fr-FR.plg_editors-xtd_image.sys.ini</filename>
		<filename>fr-FR.plg_editors-xtd_menu.ini</filename>
		<filename>fr-FR.plg_editors-xtd_menu.sys.ini</filename>
		<filename>fr-FR.plg_editors-xtd_module.ini</filename>
		<filename>fr-FR.plg_editors-xtd_module.sys.ini</filename>
		<filename>fr-FR.plg_editors-xtd_pagebreak.ini</filename>
		<filename>fr-FR.plg_editors-xtd_pagebreak.sys.ini</filename>
		<filename>fr-FR.plg_editors-xtd_readmore.ini</filename>
		<filename>fr-FR.plg_editors-xtd_readmore.sys.ini</filename>
		<filename>fr-FR.plg_editors_codemirror.ini</filename>
		<filename>fr-FR.plg_editors_codemirror.sys.ini</filename>
		<filename>fr-FR.plg_editors_none.ini</filename>
		<filename>fr-FR.plg_editors_none.sys.ini</filename>
		<filename>fr-FR.plg_editors_tinymce.ini</filename>
		<filename>fr-FR.plg_editors_tinymce.sys.ini</filename>
		<filename>fr-FR.plg_extension_joomla.ini</filename>
		<filename>fr-FR.plg_extension_joomla.sys.ini</filename>
		<filename>fr-FR.plg_fields_calendar.ini</filename>
		<filename>fr-FR.plg_fields_calendar.sys.ini</filename>
		<filename>fr-FR.plg_fields_checkboxes.ini</filename>
		<filename>fr-FR.plg_fields_checkboxes.sys.ini</filename>
		<filename>fr-FR.plg_fields_color.ini</filename>
		<filename>fr-FR.plg_fields_color.sys.ini</filename>
		<filename>fr-FR.plg_fields_editor.ini</filename>
		<filename>fr-FR.plg_fields_editor.sys.ini</filename>
		<filename>fr-FR.plg_fields_gallery.ini</filename>
		<filename>fr-FR.plg_fields_gallery.sys.ini</filename>
		<filename>fr-FR.plg_fields_image.ini</filename>
		<filename>fr-FR.plg_fields_image.sys.ini</filename>
		<filename>fr-FR.plg_fields_imagelist.ini</filename>
		<filename>fr-FR.plg_fields_imagelist.sys.ini</filename>
		<filename>fr-FR.plg_fields_integer.ini</filename>
		<filename>fr-FR.plg_fields_integer.sys.ini</filename>
		<filename>fr-FR.plg_fields_list.ini</filename>
		<filename>fr-FR.plg_fields_list.sys.ini</filename>
		<filename>fr-FR.plg_fields_media.ini</filename>
		<filename>fr-FR.plg_fields_media.sys.ini</filename>
		<filename>fr-FR.plg_fields_radio.ini</filename>
		<filename>fr-FR.plg_fields_radio.sys.ini</filename>
		<filename>fr-FR.plg_fields_sql.ini</filename>
		<filename>fr-FR.plg_fields_sql.sys.ini</filename>
		<filename>fr-FR.plg_fields_text.ini</filename>
		<filename>fr-FR.plg_fields_text.sys.ini</filename>
		<filename>fr-FR.plg_fields_textarea.ini</filename>
		<filename>fr-FR.plg_fields_textarea.sys.ini</filename>
		<filename>fr-FR.plg_fields_url.ini</filename>
		<filename>fr-FR.plg_fields_url.sys.ini</filename>
		<filename>fr-FR.plg_fields_user.ini</filename>
		<filename>fr-FR.plg_fields_user.sys.ini</filename>
		<filename>fr-FR.plg_fields_usergrouplist.ini</filename>
		<filename>fr-FR.plg_fields_usergrouplist.sys.ini</filename>
		<filename>fr-FR.plg_finder_categories.ini</filename>
		<filename>fr-FR.plg_finder_categories.sys.ini</filename>
		<filename>fr-FR.plg_finder_contacts.ini</filename>
		<filename>fr-FR.plg_finder_contacts.sys.ini</filename>
		<filename>fr-FR.plg_finder_content.ini</filename>
		<filename>fr-FR.plg_finder_content.sys.ini</filename>
		<filename>fr-FR.plg_finder_newsfeeds.ini</filename>
		<filename>fr-FR.plg_finder_newsfeeds.sys.ini</filename>
		<filename>fr-FR.plg_finder_tags.ini</filename>
		<filename>fr-FR.plg_finder_tags.sys.ini</filename>
		<filename>fr-FR.plg_finder_weblinks.ini</filename>
		<filename>fr-FR.plg_finder_weblinks.sys.ini</filename>
		<filename>fr-FR.plg_installer_folderinstaller.ini</filename>
		<filename>fr-FR.plg_installer_folderinstaller.sys.ini</filename>
		<filename>fr-FR.plg_installer_packageinstaller.ini</filename>
		<filename>fr-FR.plg_installer_packageinstaller.sys.ini</filename>
		<filename>fr-FR.plg_installer_urlinstaller.ini</filename>
		<filename>fr-FR.plg_installer_urlinstaller.sys.ini</filename>
		<filename>fr-FR.plg_installer_webinstaller.ini</filename>
		<filename>fr-FR.plg_installer_webinstaller.sys.ini</filename>
		<filename>fr-FR.plg_quickicon_extensionupdate.ini</filename>
		<filename>fr-FR.plg_quickicon_extensionupdate.sys.ini</filename>
		<filename>fr-FR.plg_quickicon_joomlaupdate.ini</filename>
		<filename>fr-FR.plg_quickicon_joomlaupdate.sys.ini</filename>
		<filename>fr-FR.plg_quickicon_phpversioncheck.ini</filename>
		<filename>fr-FR.plg_quickicon_phpversioncheck.sys.ini</filename>
		<filename>fr-FR.plg_search_categories.ini</filename>
		<filename>fr-FR.plg_search_categories.sys.ini</filename>
		<filename>fr-FR.plg_search_contacts.ini</filename>
		<filename>fr-FR.plg_search_contacts.sys.ini</filename>
		<filename>fr-FR.plg_search_content.ini</filename>
		<filename>fr-FR.plg_search_content.sys.ini</filename>
		<filename>fr-FR.plg_search_newsfeeds.ini</filename>
		<filename>fr-FR.plg_search_newsfeeds.sys.ini</filename>
		<filename>fr-FR.plg_search_tags.ini</filename>
		<filename>fr-FR.plg_search_tags.sys.ini</filename>
		<filename>fr-FR.plg_search_weblinks.ini</filename>
		<filename>fr-FR.plg_search_weblinks.sys.ini</filename>
		<filename>fr-FR.plg_system_cache.ini</filename>
		<filename>fr-FR.plg_system_cache.sys.ini</filename>
		<filename>fr-FR.plg_system_debug.ini</filename>
		<filename>fr-FR.plg_system_debug.sys.ini</filename>
		<filename>fr-FR.plg_system_fields.ini</filename>
		<filename>fr-FR.plg_system_fields.sys.ini</filename>
		<filename>fr-FR.plg_system_highlight.ini</filename>
		<filename>fr-FR.plg_system_highlight.sys.ini</filename>
		<filename>fr-FR.plg_system_languagecode.ini</filename>
		<filename>fr-FR.plg_system_languagecode.sys.ini</filename>
		<filename>fr-FR.plg_system_languagefilter.ini</filename>
		<filename>fr-FR.plg_system_languagefilter.sys.ini</filename>
		<filename>fr-FR.plg_system_log.ini</filename>
		<filename>fr-FR.plg_system_log.sys.ini</filename>
		<filename>fr-FR.plg_system_logout.ini</filename>
		<filename>fr-FR.plg_system_logout.sys.ini</filename>
		<filename>fr-FR.plg_system_p3p.ini</filename>
		<filename>fr-FR.plg_system_p3p.sys.ini</filename>
		<filename>fr-FR.plg_system_redirect.ini</filename>
		<filename>fr-FR.plg_system_redirect.sys.ini</filename>
		<filename>fr-FR.plg_system_remember.ini</filename>
		<filename>fr-FR.plg_system_remember.sys.ini</filename>
		<filename>fr-FR.plg_system_sef.ini</filename>
		<filename>fr-FR.plg_system_sef.sys.ini</filename>
		<filename>fr-FR.plg_system_stats.ini</filename>
		<filename>fr-FR.plg_system_stats.sys.ini</filename>
		<filename>fr-FR.plg_system_updatenotification.ini</filename>
		<filename>fr-FR.plg_system_updatenotification.sys.ini</filename>
		<filename>fr-FR.plg_twofactorauth_totp.ini</filename>
		<filename>fr-FR.plg_twofactorauth_totp.sys.ini</filename>
		<filename>fr-FR.plg_twofactorauth_yubikey.ini</filename>
		<filename>fr-FR.plg_twofactorauth_yubikey.sys.ini</filename>
		<filename>fr-FR.plg_user_contactcreator.ini</filename>
		<filename>fr-FR.plg_user_contactcreator.sys.ini</filename>
		<filename>fr-FR.plg_user_joomla.ini</filename>
		<filename>fr-FR.plg_user_joomla.sys.ini</filename>
		<filename>fr-FR.plg_user_profile.ini</filename>
		<filename>fr-FR.plg_user_profile.sys.ini</filename>
		<filename>fr-FR.tpl_hathor.ini</filename>
		<filename>fr-FR.tpl_hathor.sys.ini</filename>
		<filename>fr-FR.tpl_isis.ini</filename>
		<filename>fr-FR.tpl_isis.sys.ini</filename>
		<filename file="meta">install.xml</filename> <!-- This file is mandatory as otherwise the pack can't be uninstalled. -->
		<filename file="meta">fr-FR.xml</filename>
	</files>
	<media destination="fr-FR">  <!-- If one needs to add a specific calendar -->
	    <filename>index.html</filename>
	    <filename>js/index.html</filename>
	    <filename>js/calendar-setup.js</filename>
	    <filename>js/calendar.js</filename>
	</media>
	<params />
</extension>

Remarques :

  • fr-FR.lib_joomla.ini : à ajouter à la fois pour l'administration et pour le site. Il est nécessaire au moins pour la partie "site" pour un "Pack autonome pour la partie Site" (voir ci-dessous).
  • fr-FR.css : nouveauté depuis la version 1.7. Ce fichier peut être ajouté dans la partie ADMINISTRATOR si l'on veut changer les polices de caractères utilisées pour l'affichage de l'interface d'administration.
  • fr-FR.xml : remarquez la balise file="meta", qui indique qu'il s'agit du xml de base regroupant les informations sur le pack.
  • install.xml : est requis ! Ce fichier permet d'installer/désinstaller une langue. A noter, la présence de file="meta".
  • fr-FR.localise.php : à ajouter à la fois pour l'administration et pour le site. Il est nécessaire au moins pour la partie "site" pour un "Pack autonome pour la partie Site" (voir ci-dessous).
  • Répertoire media destination="fr-FR" : si vous avez besoin d'ajouter un calendrier spécifique.


Pour tous les fichiers ini

Prenez note de la nouvelle mise en forme !

  • La valeur des guillemets doit être écrite comme "_QQ_" ou comme &quot;
  • Comme dans la version 3.7.0, les caractères d'échappement des guillemets doubles \" peuvent être utilisés en lieu et place de "_QQ_" qui sera obsolète en 4.0

Le fichier fr-FR.xml

<?xml version="1.0" encoding="utf-8"?>
<metafile version="3.7" client="administrator">
    <tag>fr-FR</tag>
	<name>French (fr-FR)</name>
	<version>3.7.0.1</version>
	<creationDate>02/02/2017</creationDate>
	<author>French translation team : joomla.fr</author>
	<authorEmail>traduction@joomla.fr</authorEmail>
	<authorUrl>www.joomla.fr</authorUrl>
	<copyright>Copyright (C) 2005 - 2017 Open Source Matters &amp; Joomla.fr. All rights reserved.</copyright>
	<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
	<description>French administrator language for Joomla 3.0</description>
	<metadata>
		<name>Français (FR)</name>
		<nativeName>Français (France)</nativeName> <!-- NEW in 3.7.0. Use the native alphabet here.-->
		<tag>fr-FR</tag>
		<rtl>0</rtl>
		<locale>fr_FR.utf8, fr_FR.UTF-8, fr_FR.UTF-8@euro, fr_FR, fre_FR, fr, france</locale>
		<firstDay>1</firstDay>
		<weekEnd>0,6</weekEnd>
		<calendar>gregorian</calendar> <!-- NEW in 3.7.0. gregorian and jalali are proposed. If absent, gregorian will be used as default. Do NOT translate-->
	</metadata>
	<params />
</metafile>

Remarques :

  • <locale> la valeur locale est utilisée pour trier les listes traduites lorsqu'elles sont présentes sur le serveur.
  • <firstDay>1</firstDay> utilisé pour le pictogramme de calendrier pour spécifier quel est le premier jour de la semaine dans cette langue. 0 pour le dimanche, 1 pour le lundi, etc.
  • <weekEnd>0,6</weekEnd> utilisé pour le calendrier, permet de définir les jours de la semaine devant être grisés. 0,6 pour le samedi et le dimanche, 1 serait le vendredi.
  • <calendar>gregorian</calendar> utilisé pour le calendrier, jalali adaptera l'affichage du calendrier pour les langues persanes.

Le fichier fr-FR.localise.php

Ce fichier doit être présent au moins dans le zip du client site.

Explication de ce fichier : Il remplace le fr-FR.ignore.php et peut être personnalisé selon les langues.

  • Ignorer les mots de la recherche.
  • Définir les limites supérieures et inférieures pour la longueur des mots dans la recherche.
  • Définir le nombre de caractères à afficher pour le résultat de la recherche.
  • Définir plusieurs fonctionnalités spécifiques pour certaines langues où la valeur de la chaîne peut changer selon le nombre (pour le russe par exemple).
  • Définir des translittération (c'est à dire lorsque vous n'utilisez PAS les paramètres URLs Unicode dans la Configuration Globale) pour garantir le bon changement de certains alphabets en ascii pour la bonne utilisation de l'alias lorsque le SEF est activé. (La translittération maintenant par défaut depuis 1.7 doit prendre en compte toutes les langues latines.)
  • Définir un calendrier personnalisé par l'ajout d'une fonction ainsi que certains fichiers js.

IL FAUT TOUJOURS ENREGISTRER CES FICHIERS EN UTF8 SANS BOM si ils contiennent des caractères non ascii (lettres accentuées, etc.). Les fichiers INI peuvent être enregistrés avec BOM (Joomla! traite ce cas), mais pas les fichiers XML ou PHP.

Exemple 1 - Translittération personnalisée NON mis en œuvre

Exemple d'un fichier de base fr-FR.localise.php (où la translittération personnalisée n'est PAS mis en œuvre).

<?php
/**
 * @version		$Id: fr-FR.localise.php 15628 2010-03-27 05:20:29Z infograf768 $
 * @copyright	Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license		GNU General Public License version 2 or later; see LICENSE.txt
 */

/**
 * fr-FR localise class
 *
 * @package		Joomla.Site
 * @since		1.6
 */
abstract class Fr_FRLocalise {    //// !!!! NOTE the use of Fr_FR for the class !!!  // not the same as your language prefix.
	/**
	 * Returns the potential suffixes for a specific number of items
	 *
	 * @param	int $count  The number of items.
	 * @return	array  An array of potential suffixes.
	 * @since	1.6
	 */
	public static function getPluralSuffixes($count) {
		if ($count == 0) {
			$return =  array('0');
		}
		elseif($count == 1) {
			$return =  array('1');
		}
		else {
			$return = array('MORE');  // Beware, this will be added to a language KEY. It should be in ascii and Uppercase.
		}
		return $return;
	}
	/**
	 * Returns the ignored search words
	 *
	 * @return	array  An array of ignored search words.
	 * @since	1.6
	 */
	public static function getIgnoredSearchWords() {
		$search_ignore = array();
		$search_ignore[] = "et";
		$search_ignore[] = "si";
		$search_ignore[] = "ou";
		return $search_ignore;
	}
	/**
	 * Returns the lower length limit of search words
	 *
	 * @return	integer  The lower length limit of search words.
	 * @since	1.6
	 */
	public static function getLowerLimitSearchWord() {
		return 3;
	}
	/**
	 * Returns the upper length limit of search words
	 *
	 * @return	integer  The upper length limit of search words.
	 * @since	1.6
	 */
	public static function getUpperLimitSearchWord() {
		return 20;
	}
	/**
	 * Returns the number of chars to display when searching
	 *
	 * @return	integer  The number of chars to display when searching.
	 * @since	1.6
	 */
	public static function getSearchDisplayedCharactersNumber() {
		return 200;
	}
}
Exemple 2 - Translittération personnalisée implémentée

Exemple de la fonction à ajouter au fichier localise.php lorsqu'une translittération personnalisée est souhaitée.

/**
	 * This method processes a string and replaces all accented UTF-8 characters by unaccented
	 * ASCII-7 "equivalents"
	 *
	 * @param	string	$string	The string to transliterate
	 * @return	string	The transliteration of the string
	 * @since	1.6
	 */
	public static function transliterate($string)
		{
		$str = \Joomla\String\StringHelper::strtolower($string); // since 3.8.0 to prepare 4.0

		//Specific language transliteration.
		//This one is for latin 1, latin supplement , extended A, Cyrillic, Greek

		$glyph_array = array(
		'a'		=>	'a,à,á,â,ã,ä,å,ā,ă,ą,ḁ,α,ά',
		'ae'	=>	'æ',
		'b'		=>	'β,б',
		'c'		=>	'c,ç,ć,ĉ,ċ,č,ћ,ц',
		'ch'	=>	'ч',
		'd'		=>	'ď,đ,Ð,д,ђ,δ,ð',
		'dz'	=>	'џ',
		'e'		=>	'e,è,é,ê,ë,ē,ĕ,ė,ę,ě,э,ε,έ',
		'f'		=>	'ƒ,ф',
		'g'		=>	'ğ,ĝ,ğ,ġ,ģ,г,γ',
		'h'		=>	'ĥ,ħ,Ħ,х',
		'i'		=>	'i,ì,í,î,ï,ı,ĩ,ī,ĭ,į,и,й,ъ,ы,ь,η,ή',
		'ij'	=>	'ij',
		'j'		=>	'ĵ,j',
		'ja'	=>	'я',
		'ju'	=>	'яю',
		'k'		=>	'ķ,ĸ,κ',
		'l'		=>	'ĺ,ļ,ľ,ŀ,ł,л,λ',
		'lj'	=>	'љ',
		'm'		=>	'μ,м',
		'n'		=>	'ñ,ņ,ň,ʼn,ŋ,н,ν',
		'nj'	=>	'њ',
		'o'		=>	'ò,ó,ô,õ,ø,ō,ŏ,ő,ο,ό,ω,ώ',
		'oe'	=>	'œ,ö',
		'p'		=>	'п,π',
		'ph'	=>	'φ',
		'ps'	=>	'ψ',
		'r'		=>	'ŕ,ŗ,ř,р,ρ,σ,ς',
		's'		=>	'ş,ś,ŝ,ş,š,с',
		'ss'	=>	'ß,ſ',
		'sh'	=>	'ш',
		'shch'	=>	'щ',
		't'		=>	'ţ,ť,ŧ,τ,т',
		'th'	=>	'θ',
		'u'		=>	'u,ù,ú,û,ü,ũ,ū,ŭ,ů,ű,ų,у',
		'v'		=>	'в',
		'w'		=>	'ŵ',
		'x'		=>	'χ,ξ',
		'y'		=>	'ý,þ,ÿ,ŷ',
		'z'		=>	'ź,ż,ž,з,ж,ζ'
		);

		foreach( $glyph_array as $letter => $glyphs ) {
			$glyphs = explode( ',', $glyphs );
			$str = str_replace( $glyphs, $letter, $str );
		}

		return $str;
		}
}
Exemple 3 - mise en œuvre d'un calendrier personnalisé

Voici un exemple de fonction à ajouter au fichier localise.php afin de mettre en œuvre un calendrier personnalisé pour fa-IR (langue persane). Ceci est différent des "meta" dans les XML.

<?php
/**
 * @version		$Id: language.php 15628 2010-03-27 05:20:29Z infograf768 $
 * @copyright	Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 * @license		GNU General Public License version 2 or later; see LICENSE.txt
 */


 jimport('joomla.utilities.date');
abstract class Fa_IRLocalise {

	public static function getPluralSuffixes($count) {
		if ($count == 0) 
		{
			$return =  array('0');
		}
		elseif($count == 1) 
		{
			$return =  array('1');
		}
		else 
		{
			$return = array('MORE');
		}
		return $return;
	}

	public static function getIgnoredSearchWords() {
		$search_ignore = array();
		$search_ignore[] = "and";  //change here to fit
		$search_ignore[] = "in"; //change here to fit
		$search_ignore[] = "on"; //change here to fit
		return $search_ignore;
	}

	public static function getLowerLimitSearchWord() {
		return 3;
	}

	public static function getUpperLimitSearchWord() {
		return 20;
	}

	public static function getSearchDisplayedCharactersNumber() {
		return 200;
	}
}


class fa_IRDate extends JDate {
	const DAY_NUMBER	= "\x027\x03";
	const DAY_NUMBER2	= "\x030\x03";
	const DAY_YEAR		= "\x032\x03";
	const MONTH_ABBR	= "\x033\x03";
	const MONTH_NAME	= "\x034\x03";
	const MONTH_NUMBER	= "\x035\x03";
	const MONTH_NUMBER2	= "\x036\x03";
	const MONTH_LENGTH	= "\x037\x03";
	const YEAR_ABBR		= "\x040\x03";
	const YEAR_NAME		= "\x041\x03";
	const AM_LOWER		= "\x042\x03";
	const AM_UPPER		= "\x043\x03";
	const PERSIAN_EPOCH	= 1948320.5;

	protected static $month_names	= array("فروردين","ارديبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند");


	
	public function calendar($format, $local = false, $translate = true)
	{
		// Do string replacements for date format options that can be translated.
		$format = preg_replace('/(^|[^\\\])d/', "\\1".self::DAY_NUMBER2, $format);
		$format = preg_replace('/(^|[^\\\])j/', "\\1".self::DAY_NUMBER, $format);
		$format = preg_replace('/(^|[^\\\])z/', "\\1".self::DAY_YEAR, $format);
		$format = preg_replace('/(^|[^\\\])M/', "\\1".self::MONTH_ABBR, $format);
		$format = preg_replace('/(^|[^\\\])F/', "\\1".self::MONTH_NAME, $format);
		$format = preg_replace('/(^|[^\\\])n/', "\\1".self::MONTH_NUMBER, $format);
		$format = preg_replace('/(^|[^\\\])m/', "\\1".self::MONTH_NUMBER2, $format);
		$format = preg_replace('/(^|[^\\\])t/', "\\1".self::MONTH_LENGTH, $format);
		$format = preg_replace('/(^|[^\\\])y/', "\\1".self::YEAR_ABBR, $format);
		$format = preg_replace('/(^|[^\\\])Y/', "\\1".self::YEAR_NAME, $format);
		$format = preg_replace('/(^|[^\\\])a/', "\\1".self::AM_LOWER, $format);
		$format = preg_replace('/(^|[^\\\])A/', "\\1".self::AM_UPPER, $format);

		// Format the date.
		$return = parent::calendar($format, $local);

		$jd = gregoriantojd($this->month, $this->day, $this->year);
		$jalaliDate = self::jd_to_persian($jd);
		$m = $jalaliDate['mon'];
		$d = $jalaliDate['day'];
		$y = $jalaliDate['year'];

		// Manually modify the strings in the formated time.
		if (strpos($return, self::DAY_NUMBER) !== false) {
			$return = str_replace(self::DAY_NUMBER, $d , $return);
		}
		if (strpos($return, self::DAY_NUMBER2) !== false) {
			$return = str_replace(self::DAY_NUMBER2, sprintf("%02d",$d), $return);
		}
		if (strpos($return, self::DAY_YEAR) !== false) {
			$return = str_replace(self::DAY_YEAR, $jd - self::persian_to_jd(1,1,$y)+1, $return);
		}
		if (strpos($return, self::MONTH_ABBR) !== false) {
			$return = str_replace(self::MONTH_ABBR, self::$month_names[$m-1] , $return);
		}
		if (strpos($return, self::MONTH_NAME) !== false) {
			$return = str_replace(self::MONTH_NAME, self::$month_names[$m-1] , $return);
		}
		if (strpos($return, self::MONTH_NUMBER) !== false) {
			$return = str_replace(self::MONTH_NUMBER, $m , $return);
		}
		if (strpos($return, self::MONTH_NUMBER2) !== false) {
			$return = str_replace(self::MONTH_NUMBER2, sprintf("%02d", $m) , $return);
		}
		if (strpos($return, self::MONTH_LENGTH) !== false) {
			$return = str_replace(self::MONTH_LENGTH, $m < 7 ? 31 : $m < 12 ? 30 : self::leap_persian($y) ? 30 : 29 , $return);
		}
		if (strpos($return, self::YEAR_ABBR) !== false) {
			$return = str_replace(self::YEAR_ABBR, sprintf("%02d",$y % 100), $return);
		}
		if (strpos($return, self::YEAR_NAME) !== false) {
			$return = str_replace(self::YEAR_NAME, $y, $return);
		}
		if (strpos($return, self::AM_LOWER) !== false) {
			$return = str_replace(self::AM_LOWER, $this->format('a',$local)=='pm' ? 'ب ظ' : 'ق ظ', $return);
		}
		if (strpos($return, self::AM_UPPER) !== false) {
			$return = str_replace(self::AM_UPPER, $this->format('a',$local)=='pm' ? 'ب ظ' : 'ق ظ', $return);
		}

		return $return;
	}
	public static function jd_to_persian($jd)

	{

		//var $year, $month, $day, $depoch, $cycle, $cyear, $ycycle,

		//    $aux1, $aux2, $yday;



		$jd = floor($jd) + 0.5;



		$depoch = $jd - self::persian_to_jd(1, 1, 475);

		$cycle = floor($depoch / 1029983);

		$cyear = $depoch % 1029983;

		if ($cyear == 1029982) {

		    $ycycle = 2820;

		} else {

		    $aux1 = floor($cyear / 366);

		    $aux2 = $cyear % 366;

		    $ycycle = floor(((2134 * $aux1) + (2816 * $aux2) + 2815) / 1028522) +

		                $aux1 + 1;

		}

		$year = $ycycle + (2820 * $cycle) + 474;

		if ($year <= 0) {

		    $year--;

		}

		$yday = ($jd - self::persian_to_jd(1, 1, $year)) + 1;

		$month = ($yday <= 186) ? ceil($yday / 31) : ceil(($yday - 6) / 30);

		$day = ($jd - self::persian_to_jd($month, 1, $year)) + 1;

		return array('year'=>$year, 'mon'=>$month,'day'=> $day);

	}
	public static function persian_to_jd($month, $day, $year)

	{

		//var $epbase, $epyear;

		$epbase = $year - (($year >= 0) ? 474 : 473);

		$epyear = 474 + $epbase % 2820;



		return $day +

		        (($month <= 7) ?

		            (($month - 1) * 31) :

		            ((($month - 1) * 30) + 6)

		        ) +

		        floor((($epyear * 682) - 110) / 2816) +

		        ($epyear - 1) * 365 +

		        floor($epbase / 2820) * 1029983 +

		        self::PERSIAN_EPOCH;

	}

	public static function leap_persian($year) {

	    return (((((($year - (($year > 0) ? 474 : 473)) % 2820) + 474) + 38) * 682) % 2816) < 682;

	}

}

Remarque : il est également nécessaire d'ajouter le fichier calendar.js dans le paquet.


Pack autonome pour la partie Site

Pour ceux d'entre vous qui souhaitez proposer un paquet uniquement pour le client site :


IL EST NÉCESSAIRE DE TOUJOURS FOURNIR UN PACK ADMIN AVEC TOUS LES FICHIERS, CERTAINS D'ENTRE EUX DEVRAIENT ÊTRE TRADUITS, et de créer un paquet unique comme pour un "pack complet" (voir ci-dessus).

Pourquoi ? ==> parce que certains fichiers plugin .ini sont utilisés en partie frontend ! Voici un exemple typique de fichier install.xml pour l'administration. Par exemple, pour une version 3.3.x, les fichiers à traduire sont indiqués par : =======>

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.3" client="administrator" type="language" method="upgrade">
	<name>MyLanguage (xx-XX)</name>
	<tag>xx-XX</tag>
	<version>3.3.3.1</version>
	<creationDate>July 2014</creationDate>
	<author>MyLanguage translation team : xx-XX Team/author</author>
	<authorEmail>traduction@mysite.com</authorEmail>
	<authorUrl>http://mysite.com</authorUrl>
	<copyright>Copyright (C) 2005 - 2014 Open Source Matters. All rights reserved.</copyright>
	<copyright>Copyright (C) date_year - date_year My Team or name. All rights reserved.</copyright>
	<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
	<description>xx-XX administrator language for 3.3.x</description>
	<files>
		<filename>xx-XX.com_admin.ini</filename>
		<filename>xx-XX.com_admin.sys.ini</filename>
		<filename>xx-XX.com_banners.ini</filename>
		<filename>xx-XX.com_banners.sys.ini</filename>
		<filename>xx-XX.com_ajax.ini</filename>
		<filename>xx-XX.com_ajax.sys.ini</filename>
		<filename>xx-XX.com_cache.ini</filename>
		<filename>xx-XX.com_cache.sys.ini</filename>
		<filename>xx-XX.com_categories.ini</filename>
		<filename>xx-XX.com_categories.sys.ini</filename>
		<filename>xx-XX.com_checkin.ini</filename>
		<filename>xx-XX.com_checkin.sys.ini</filename>
		<filename>xx-XX.com_config.ini</filename>
		<filename>xx-XX.com_config.sys.ini</filename>
		<filename>xx-XX.com_contact.ini</filename>
		<filename>xx-XX.com_contact.sys.ini</filename>
		<filename>xx-XX.com_content.ini</filename>
		<filename>xx-XX.com_content.sys.ini</filename>
		<filename>xx-XX.com_contenthistory.ini</filename>
		<filename>xx-XX.com_contenthistory.sys.ini</filename>
		<filename>xx-XX.com_cpanel.ini</filename>
		<filename>xx-XX.com_cpanel.sys.ini</filename>
		<filename>xx-XX.com_finder.ini</filename>
		<filename>xx-XX.com_finder.sys.ini</filename>
		<filename>xx-XX.com_installer.ini</filename>
		<filename>xx-XX.com_installer.sys.ini</filename>
		<filename>xx-XX.com_joomlaupdate.ini</filename>
		<filename>xx-XX.com_joomlaupdate.sys.ini</filename>
		<filename>xx-XX.com_languages.ini</filename>
		<filename>xx-XX.com_languages.sys.ini</filename>
		<filename>xx-XX.com_login.ini</filename>
		<filename>xx-XX.com_login.sys.ini</filename>
		<filename>xx-XX.com_mailto.sys.ini</filename>
		<filename>xx-XX.com_media.ini</filename>
		<filename>xx-XX.com_media.sys.ini</filename>
		<filename>xx-XX.com_menus.ini</filename>
		<filename>xx-XX.com_menus.sys.ini</filename>
		<filename>xx-XX.com_messages.ini</filename>
		<filename>xx-XX.com_messages.sys.ini</filename>
		<filename>xx-XX.com_modules.ini</filename>
		<filename>xx-XX.com_modules.sys.ini</filename>
		<filename>xx-XX.com_newsfeeds.ini</filename>
		<filename>xx-XX.com_newsfeeds.sys.ini</filename>
		<filename>xx-XX.com_plugins.ini</filename>
		<filename>xx-XX.com_plugins.sys.ini</filename>
		<filename>xx-XX.com_postinstall.ini</filename>
		<filename>xx-XX.com_postinstall.sys.ini</filename>
		<filename>xx-XX.com_redirect.ini</filename>
		<filename>xx-XX.com_redirect.sys.ini</filename>
		<filename>xx-XX.com_search.ini</filename>
		<filename>xx-XX.com_search.sys.ini</filename>
		<filename>xx-XX.com_tags.ini</filename>
		<filename>xx-XX.com_tags.sys.ini</filename>
		<filename>xx-XX.com_templates.ini</filename>
		<filename>xx-XX.com_templates.sys.ini</filename>
		<filename>xx-XX.com_users.ini</filename>
		<filename>xx-XX.com_users.sys.ini</filename>
		<filename>xx-XX.com_weblinks.ini</filename>
		<filename>xx-XX.com_weblinks.sys.ini</filename>
		<filename>xx-XX.com_wrapper.ini</filename>
		<filename>xx-XX.com_wrapper.sys.ini</filename>
		<filename>xx-XX.ini</filename>
		<filename>xx-XX.lib_joomla.ini</filename>
		<filename>xx-XX.localise.php</filename>
		<filename>xx-XX.mod_custom.ini</filename>
		<filename>xx-XX.mod_custom.sys.ini</filename>
		<filename>xx-XX.mod_feed.ini</filename>
		<filename>xx-XX.mod_feed.sys.ini</filename>
		<filename>xx-XX.mod_latest.ini</filename>
		<filename>xx-XX.mod_latest.sys.ini</filename>
		<filename>xx-XX.mod_logged.ini</filename>
		<filename>xx-XX.mod_logged.sys.ini</filename>
		<filename>xx-XX.mod_login.ini</filename>
		<filename>xx-XX.mod_login.sys.ini</filename>
		<filename>xx-XX.mod_menu.ini</filename>
		<filename>xx-XX.mod_menu.sys.ini</filename>
		<filename>xx-XX.mod_multilangstatus.ini</filename>
		<filename>xx-XX.mod_multilangstatus.sys.ini</filename>
		<filename>xx-XX.mod_popular.ini</filename>
		<filename>xx-XX.mod_popular.sys.ini</filename>
		<filename>xx-XX.mod_quickicon.ini</filename>
		<filename>xx-XX.mod_quickicon.sys.ini</filename>
		<filename>xx-XX.mod_stats_admin.ini</filename>
		<filename>xx-XX.mod_stats_admin.sys.ini</filename>
		<filename>xx-XX.mod_status.ini</filename>
		<filename>xx-XX.mod_status.sys.ini</filename>
		<filename>xx-XX.mod_submenu.ini</filename>
		<filename>xx-XX.mod_submenu.sys.ini</filename>
		<filename>xx-XX.mod_title.ini</filename>
		<filename>xx-XX.mod_title.sys.ini</filename>
		<filename>xx-XX.mod_toolbar.ini</filename>
		<filename>xx-XX.mod_toolbar.sys.ini</filename>
		<filename>xx-XX.mod_version.ini</filename>
		<filename>xx-XX.mod_version.sys.ini</filename>
		<filename>xx-XX.plg_authentication_cookie.ini</filename>
		<filename>xx-XX.plg_authentication_cookie.sys.ini</filename>
		<filename>xx-XX.plg_authentication_gmail.ini</filename>
		<filename>xx-XX.plg_authentication_gmail.sys.ini</filename>
		<filename>xx-XX.plg_authentication_joomla.ini</filename>
		<filename>xx-XX.plg_authentication_joomla.sys.ini</filename>
		<filename>xx-XX.plg_authentication_ldap.ini</filename>
		<filename>xx-XX.plg_authentication_ldap.sys.ini</filename>
=========>	<filename>xx-XX.plg_captcha_recaptcha.ini</filename>
		<filename>xx-XX.plg_captcha_recaptcha.sys.ini</filename>
		<filename>xx-XX.plg_content_emailcloak.ini</filename>
		<filename>xx-XX.plg_content_contact.ini</filename>
		<filename>xx-XX.plg_content_contact.sys.ini</filename>
		<filename>xx-XX.plg_content_emailcloak.sys.ini</filename>
		<filename>xx-XX.plg_content_finder.ini</filename>
		<filename>xx-XX.plg_content_finder.sys.ini</filename>
		<filename>xx-XX.plg_content_joomla.ini</filename>
		<filename>xx-XX.plg_content_joomla.sys.ini</filename>
		<filename>xx-XX.plg_content_loadmodule.ini</filename>
		<filename>xx-XX.plg_content_loadmodule.sys.ini</filename>
=========>	<filename>xx-XX.plg_content_pagebreak.ini</filename>
		<filename>xx-XX.plg_content_pagebreak.sys.ini</filename>
		<filename>xx-XX.plg_content_pagenavigation.ini</filename>
		<filename>xx-XX.plg_content_pagenavigation.sys.ini</filename>
=========>	<filename>xx-XX.plg_content_vote.ini</filename>
		<filename>xx-XX.plg_content_vote.sys.ini</filename>
		<filename>xx-XX.plg_editors_codemirror.ini</filename>
		<filename>xx-XX.plg_editors_codemirror.sys.ini</filename>
		<filename>xx-XX.plg_editors_none.ini</filename>
		<filename>xx-XX.plg_editors_none.sys.ini</filename>
		<filename>xx-XX.plg_editors_tinymce.ini</filename>
		<filename>xx-XX.plg_editors_tinymce.sys.ini</filename>
=========>	<filename>xx-XX.plg_editors-xtd_article.ini</filename>
		<filename>xx-XX.plg_editors-xtd_article.sys.ini</filename>
=========>	<filename>xx-XX.plg_editors-xtd_image.ini</filename>
		<filename>xx-XX.plg_editors-xtd_image.sys.ini</filename>
=========>	<filename>xx-XX.plg_editors-xtd_pagebreak.ini</filename>
		<filename>xx-XX.plg_editors-xtd_pagebreak.sys.ini</filename>
=========>	<filename>xx-XX.plg_editors-xtd_readmore.ini</filename>
		<filename>xx-XX.plg_editors-xtd_readmore.sys.ini</filename>
		<filename>xx-XX.plg_extension_joomla.ini</filename>
		<filename>xx-XX.plg_extension_joomla.sys.ini</filename>
=========>	<filename>xx-XX.plg_finder_categories.ini</filename>
		<filename>xx-XX.plg_finder_categories.sys.ini</filename>
=========>	<filename>xx-XX.plg_finder_contacts.ini</filename>
		<filename>xx-XX.plg_finder_contacts.sys.ini</filename>
=========>	<filename>xx-XX.plg_finder_content.ini</filename>
		<filename>xx-XX.plg_finder_content.sys.ini</filename>
=========>	<filename>xx-XX.plg_finder_newsfeeds.ini</filename>
		<filename>xx-XX.plg_finder_newsfeeds.sys.ini</filename>
=========>	<filename>xx-XX.plg_finder_tags.ini</filename>
		<filename>xx-XX.plg_finder_tags.sys.ini</filename>
=========>	<filename>xx-XX.plg_finder_weblinks.ini</filename>
		<filename>xx-XX.plg_finder_weblinks.sys.ini</filename>
		<filename>xx-XX.plg_installer_webinstaller.ini</filename>
		<filename>xx-XX.plg_installer_webinstaller.sys.ini</filename>
		<filename>xx-XX.plg_quickicon_extensionupdate.ini</filename>
		<filename>xx-XX.plg_quickicon_extensionupdate.sys.ini</filename>
		<filename>xx-XX.plg_quickicon_joomlaupdate.ini</filename>
		<filename>xx-XX.plg_quickicon_joomlaupdate.sys.ini</filename>
=========>	<filename>xx-XX.plg_search_categories.ini</filename>
		<filename>xx-XX.plg_search_categories.sys.ini</filename>
=========>	<filename>xx-XX.plg_search_contacts.ini</filename>
		<filename>xx-XX.plg_search_contacts.sys.ini</filename>
=========>	<filename>xx-XX.plg_search_content.ini</filename>
		<filename>xx-XX.plg_search_content.sys.ini</filename>
=========>	<filename>xx-XX.plg_search_newsfeeds.ini</filename>
		<filename>xx-XX.plg_search_newsfeeds.sys.ini</filename>
=========>	<filename>xx-XX.plg_search_tags.ini</filename>
		<filename>xx-XX.plg_search_tags.sys.ini</filename>
=========>	<filename>xx-XX.plg_search_weblinks.ini</filename>
		<filename>xx-XX.plg_search_weblinks.sys.ini</filename>
		<filename>xx-XX.plg_system_cache.ini</filename>
		<filename>xx-XX.plg_system_cache.sys.ini</filename>
		<filename>xx-XX.plg_system_debug.ini</filename>
		<filename>xx-XX.plg_system_debug.sys.ini</filename>
		<filename>xx-XX.plg_system_highlight.ini</filename>
		<filename>xx-XX.plg_system_highlight.sys.ini</filename>
		<filename>xx-XX.plg_system_languagecode.ini</filename>
		<filename>xx-XX.plg_system_languagecode.sys.ini</filename>
		<filename>xx-XX.plg_system_languagefilter.ini</filename>
		<filename>xx-XX.plg_system_languagefilter.sys.ini</filename>
		<filename>xx-XX.plg_system_log.ini</filename>
		<filename>xx-XX.plg_system_log.sys.ini</filename>
		<filename>xx-XX.plg_system_logout.ini</filename>
		<filename>xx-XX.plg_system_logout.sys.ini</filename>
		<filename>xx-XX.plg_system_p3p.ini</filename>
		<filename>xx-XX.plg_system_p3p.sys.ini</filename>
		<filename>xx-XX.plg_system_redirect.ini</filename>
		<filename>xx-XX.plg_system_redirect.sys.ini</filename>
		<filename>xx-XX.plg_system_remember.ini</filename>
		<filename>xx-XX.plg_system_remember.sys.ini</filename>
		<filename>xx-XX.plg_system_sef.ini</filename>
		<filename>xx-XX.plg_system_sef.sys.ini</filename>
		<filename>xx-XX.plg_twofactorauth_totp.ini</filename>
		<filename>xx-XX.plg_twofactorauth_totp.sys.ini</filename>
		<filename>xx-XX.plg_twofactorauth_yubikey.ini</filename>
		<filename>xx-XX.plg_twofactorauth_yubikey.sys.ini</filename>
		<filename>xx-XX.plg_user_contactcreator.ini</filename>
		<filename>xx-XX.plg_user_contactcreator.sys.ini</filename>
		<filename>xx-XX.plg_user_joomla.ini</filename>
		<filename>xx-XX.plg_user_joomla.sys.ini</filename>
=========>	<filename>xx-XX.plg_user_profile.ini</filename>
		<filename>xx-XX.plg_user_profile.sys.ini</filename>
		<filename>xx-XX.tpl_hathor.ini</filename>
		<filename>xx-XX.tpl_hathor.sys.ini</filename>
		<filename>xx-XX.tpl_isis.ini</filename>
		<filename>xx-XX.tpl_isis.sys.ini</filename>
=========>	<filename file="meta">install.xml</filename>
=========>	<filename file="meta">xx-XX.xml</filename>
	</files>
	<params />
</extension>

Pour les fichiers intraduisibles, il vous suffit de copier ceux en en-GB et changer le préfixe de langue.

Ce qu'il ne faut PAS traduire

Il ne faut jamais traduire ces lignes :

  • dans un fichier fr-FR.ini, les lignes de type : JHELP_COMPONENTS_

exemple :

JHELP_COMPONENTS_MESSAGING_INBOX="Components_Messaging_Inbox"

Elles sont en effet utilisées pour l'organisation de l'aide. Elles pourront être utilisées dans l'avenir si nous avons un wiki spécifique d'aide par langue.

Foire Aux Questions

Pourquoi nous utilisons les fichiers .ini plutôt que les .po ou .mo ?

Les fichiers INI ont été choisis en 2006 pour différentes raisons :

  • Il n'existait pas d'application spécifique permettant de traiter le .po sur l'ensemble des plateformes (Poedit n'était pas disponible sur Windows)
  • Toute personne, même sans connaissance du code, pouvait créer/modifier un fichier .ini
  • Les fichiers .ini sont lisibles alors que les .po ne le sont pas
  • Il n'est pas possible de charger plus d'un fichier .po par page.

mais pas uniquement et voici la raison pour laquelle il faut continuer :

L'exemple suivant est un exemple tiré d'un code Wordpress pour un simple fichier .php ( WP n'utilise PAS le pluriel, comme j'ai pu le constater dans leurs fichiers .po) :

get_current_screen()->add_help_tab( array(
        'id'      => 'publish-box',
        'title'   => __('Publish Settings'),
        'content' => $publish_box,
    ) );

    $discussion_settings  = '<p>' . __('<strong>Send Trackbacks</strong> - Trackbacks are a way to notify legacy blog systems that you&#8217;ve linked to them. Enter the URL(s) you want to send trackbacks. If you link to other WordPress sites they&#8217;ll be notified automatically using pingbacks, and this field is unnecessary.') . '</p>';
    $discussion_settings .= '<p>' . __('<strong>Discussion</strong> - You can turn comments and pings on or off, and if there are comments on the post, you can see them here and moderate them.') . '</p>';

    get_current_screen()->add_help_tab( array(
        'id'      => 'discussion-settings',
        'title'   => __('Discussion Settings'),
        'content' => $discussion_settings,
    ) );
} elseif ( 'page' == $post_type ) {
    $page_attributes = '<p>' . __('<strong>Parent</strong> - You can arrange your pages in hierarchies. For example, you could have an &#8220;About&#8221; page that has &#8220;Life Story&#8221; and &#8220;My Dog&#8221; pages under it. There are no limits to how many levels you can nest pages.') . '</p>' .
        '<p>' . __('<strong>Template</strong> - Some themes have custom templates you can use for certain pages that might have additional features or custom layouts. If so, you&#8217;ll see them in this dropdown menu.') . '</p>' .
        '<p>' . __('<strong>Order</strong> - Pages are usually ordered alphabetically, but you can choose your own order by entering a number (1 for first, etc.) in this field.') . '</p>';

    get_current_screen()->add_help_tab( array(
        'id' => 'page-attributes',
        'title' => __('Page Attributes'),
        'content' => $page_attributes,
    ) );
}

Ceci pour GetText :

__('<strong>Parent</strong> - You can arrange your pages in hierarchies. For example, you could have an &#8220;About&#8221; page that has &#8220;Life Story&#8221; and &#8220;My Dog&#8221; pages under it. There are no limits to how many levels you can nest pages.')

C'est beaucoup plus simple avec les fichiers ini :

JText::_("SOME_CONSTANT")

Travailler avec les pluriels

Certaines langues, comme le russe n'ont PAS les mêmes pluriels que l'anglais. Ils ont besoin d'ajouter des chaînes de caractères pour les adapter à leurs définitions. Le CMS Joomla! propose une solution à cela et peut être trouvée dans le fichier localise.php, ajouté aux packs langues. Par exemple : En ce qui concerne le pluriel, ceci est le pluriel en russe :

public static function getPluralSuffixes($count)
    {
        if ($count == 0) {
            $return = array('0');
        } else {
            $return = array(($count%10==1 && $count%100!=11 ? '1' : ($count%10>=2 && $count%10<=4 && ($count%100<10 || $count%100>=20) ? '2' : 'MORE')));
        }
        return $return;
    }

Et ceci pour le gaélique Écossais

public static function getPluralSuffixes($count) {
        if ($count == 0 || $count > 19) {
            $return =  array('0');
        }
        elseif($count == 1 || $count == 11) {
               $return =  array('1');
        }
        elseif($count == 2 || $count == 12) {
               $return =  array('2');
        }
        elseif(($count > 2 && $count < 12) || ($count > 12 && $count < 19)) {
                $return =  array('FEW');
        }
        return $return;
     }

Maintenant, comparez avec le en-GB :

public static function getPluralSuffixes($count) {
        if ($count == 0) {
            $return =  array('0');
        }
        elseif($count == 1) {
            $return =  array('1');
        }
        else {
            $return = array('MORE');
        }
        return $return;
    }

Cela signifie que lorsque nous avons dans en-GB :

COM_BANNERS_BANNERS_N_ITEMS_CHECKED_IN_0="No banner successfully checked in"
COM_BANNERS_BANNERS_N_ITEMS_CHECKED_IN_1="%d banner successfully checked in"
COM_BANNERS_BANNERS_N_ITEMS_CHECKED_IN_MORE="%d banners successfully checked in"

En russe nous aurons besoin de :

COM_BANNERS_BANNERS_N_ITEMS_CHECKED_IN_0="Ни один баннер не был разблокирован"
COM_BANNERS_BANNERS_N_ITEMS_CHECKED_IN_1="%d баннер успешно разблокирован"
COM_BANNERS_BANNERS_N_ITEMS_CHECKED_IN_2="%d баннера успешно разблокировано"
COM_BANNERS_BANNERS_N_ITEMS_CHECKED_IN_MORE="%d баннеров успешно разблокировано"

Codes ISO standards pour le nommage des packs de langue

Le lien officiel pour les codes pays est : https://www.iso.org/obp/ui/#search

Joomla utilise les codes alpha-2 :

CS est le code pays pour la Tchécoslovaquie AVANT qu'elle est été séparée entre la République Tchèque (CZ) et la Slovaquie (SK).

Nos balises de langue sont composées de 2 parties :

  • l'indicatif de langue
  • l'indicatif du pays

Voici la liste officielle pour les codes de langues : http://www.iso.org/iso/home/standards/language_codes.htm

Lorsque cela est possible, nous utilisons les 2 lettres du code de langue sinon, nous en utilisons 3. Par exemple, nous avons pour Joomla :

ckb-IQ pour le Kurde Sorani

srp-MOI pour la langue Monténégrine