J3.x

Difference between revisions of "Making a Language Pack for Joomla"

From Joomla! Documentation

m
m (Changed JHELP_COMPONENTS_ to JHELP_ - no translate applies to all JHELP_ strings)
 
(74 intermediate revisions by 11 users not shown)
Line 1: Line 1:
{{version/tutor|3.0}}
+
<noinclude><languages /></noinclude>
==How to create localized CORE language packs==
+
<noinclude>{{Joomla version|version=3.x|comment=<translate><!--T:43-->
===Notes===
+
series</translate>}}</noinclude>
 +
{{-}}
 +
{{RightTOC}}
 +
<translate>==How to create localized CORE language packs== <!--T:1--></translate>
 +
<translate>
 +
===Notes=== <!--T:2-->
 
* ALL FILES MUST BE SAVED AS UTF8 NO BOM (for non-ascii glyphs as in accented letters, etc.)  
 
* ALL FILES MUST BE SAVED AS UTF8 NO BOM (for non-ascii glyphs as in accented letters, etc.)  
  
* The localise component may help you create and update the ini files: http://extensions.joomla.org/extensions/languages/language-edition/17755
+
<!--T:3-->
 +
* The [https://github.com/joomla-projects/com_localise/releases localise] component may help you create and update the ini files
  
* For 3rd party extensions self-contained ini files installation, see http://docs.joomla.org/Making_non-core_language_packs_in_2.5
+
<!--T:4-->
 +
* For 3rd party extensions self-contained ini files installation in Joomla 2.5, see [[S:MyLanguage/J2.5:Making non-core language packs|J2.5:Making non-core language packs]]
  
* For Joomla 2.x core language packs, see http://docs.joomla.org/Making_a_Language_Pack_for_Joomla_1.6
+
<!--T:5-->
 +
* For Joomla 2.5 core language packs, see [[S:MyLanguage/J2.5:Making a Language Pack for Joomla|J2.5:Making a Language Pack for Joomla!]]
  
==Full language packs==
+
<!--T:6-->
A full language pack will contain translations for site and admin parts
+
* As of Joomla! 3.2.0, en-GB is always loading first. Therefore if a string is missing or if there is a parsing error in a language pack, the English value will be displayed.
  
'''* fr-FR is taken as an example of language prefix.'''
+
<!--T:7-->
 +
* Current Joomla development can be fetched from the [https://github.com/joomla/joomla-cms Home of the Joomla! Content Management System at Github]
 +
</translate>
  
 +
<translate>
 +
 +
==Full language packs== <!--T:8-->
 +
</translate>
 +
<translate>
 +
<!--T:9-->
 +
'''* <code>fr-FR<code> is taken as an example of language prefix.'''
 +
A full language pack will contain translations for site and admin parts.
 +
 +
<!--T:10-->
 
# In the case of a '''FULL''' pack, the package is composed of 3 files, then zipped.
 
# In the case of a '''FULL''' pack, the package is composed of 3 files, then zipped.
#* pkg_fr-FR.xml
+
#* <code>pkg_fr-FR.xml</code>
#* site_fr-FR.zip
+
#* <code>site_fr-FR.zip</code>
#* admin_fr-FR.zip
+
#* <code>admin_fr-FR.zip</code>
 
 
 
# Naming of the pack
 
# Naming of the pack
#* fr-FR_joomla_lang_full_2.5.6v1.zip
+
#* '''fr-FR_joomla_lang_full_3.7.0v1.zip'''
# '''IMPORTANT''': Since some administrator ini files are necessary in front-end and some changes were brought in the loading of the plugin ini files, it is always necessary to include some admin part in the final pack, even for a ''''site-only'''' pack. See below http://docs.joomla.org/Making_a_Language_Pack_for_Joomla_1.6#The_Site-only_pack
+
# Files required for partial deletion
 +
#* each pack should include a <code>fr-FR.lib_joomla.ini</code> and a <code>fr-FR.localise.php</code> to cope for deletion of site or admin pack by the user.
 +
#* '''IMPORTANT''': Since some administrator ini files are necessary in front-end and some changes were brought in the loading of the plugin ini files, it is always necessary to include some admin part in the final pack, even for a ''''site-only'''' pack. See below [[#The Site-only pack|The Site-only pack]]
 +
</translate>
  
Also, each pack should include a fr-FR.lib_joomla.ini and a fr-FR.localise.php to cope for deletion of site or admin pack by the user.
+
<translate>===A pkg_fr-FR.xml file=== <!--T:11--></translate>
  
===A pkg_fr-FR.xml file===
 
 
<source lang="xml">
 
<source lang="xml">
<?xml version="1.0" encoding="UTF-8" ?>
+
<?xml version="1.0" encoding="UTF-8"?>
<extension type="package" version="3.1">
+
<extension type="package" version="3.7" method="upgrade"> <!-- method="upgrade" is compulsory since 3.4 -->
<name>French Language Pack</name>
+
<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 -->
+
<packagename>fr-FR</packagename> <!-- the packagename has to be the same as the name of pkg_whatever.xml -->
<version>3.1.0.1</version> <!-- change the version # 3.x.x.x when updating, will display in manager -->
+
<version>3.7.0.1</version> <!-- change the version # 3.x.x.x when updating, will display in manager -->
<creationDate>15/05/2013</creationDate>   <!-- will display in manager -->
+
<creationDate>03/02/2017</creationDate> <!-- will display in manager -->
<author>French translation team : joomla.fr</author> <!-- will display in manager -->
+
<author>French translation team : joomla.fr</author> <!-- will display in manager -->
<authorEmail>traduction@joomla.fr</authorEmail> <!-- will display in manager -->
+
<authorEmail>traduction@joomla.fr</authorEmail> <!-- will display in manager -->
<authorUrl>www.joomla.fr</authorUrl> <!-- will display in manager -->
+
<authorUrl>http://joomla.fr</authorUrl> <!-- will display in manager -->
    <copyright>Copyright (C) 2005 - 2013 joomla.fr et Open Source Matters. Tous droits réservés</copyright>
+
<copyright>Copyright (C) 2005 - 2017 Joomla.fr and Open Source Matters, Inc. All rights reserved.</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
+
<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
 
<url></url>
 
<url></url>
<packager>Joomla! French</packager>
+
<packager></packager>
<packagerurl>www.joomla.fr</packagerurl>
+
<packagerurl></packagerurl>
<description>
+
<description><![CDATA[<div style="text-align:left;">
<![CDATA[
+
<h3>Joomla! 3.7.0 Full French (fr-FR) Language Package - Version 3.7.0v1</h3>
<div style="text-align:left;">
+
<h3>Paquet de langue Joomla! 3.7.0 français (fr-FR) complet - Version 3.7.0v1</h3>
<h3>Joomla! 3.1 Full French (fr-FR) Language Package - Version 3.1.0v1</h3>
+
</div>]]></description>
<h3>Paquet de langue Joomla! 3.1 français (fr-FR) complet - Version 3.1.0v1</h3>
+
<blockChildUninstall>true</blockChildUninstall> <!-- New in 3.7.0: prevents uninstalling separately site or admin parts. -->
<br>
 
<h4>Installation du pack de langue fr-FR de TinyMCE 3.5.6 pour Joomla 3.1 inclus</h4>
 
<div style="font-weight: normal; padding-bottom:20px;">N'oubliez pas de sélectionner la langue FR dans les <a href="index.php?option=com_plugins&amp;view=plugins&amp;filter_search=TinyMCE"><strong>paramètres du plug-in 'Éditeur - TinyMCE'</strong></a> (paramètre  'Langue de l'éditeur' = fr).<br><br>
 
Si vous utilisez la <strong>détection automatique</strong>, veillez à ce que soient installés les différents packs de langue de TinyMCE correspondants aux packs de langue installés pour Joomla!</div>
 
</div>
 
]]>
 
</description>
 
 
<files>
 
<files>
 
<file type="language" client="site" id="fr-FR">site_fr-FR.zip</file>
 
<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>
 
<file type="language" client="administrator" id="fr-FR">admin_fr-FR.zip</file>
<file type="file" client="site" id="TinyMCE_fr-FR">fr-FR_TinyMCE_3.5.6.zip</file>
 
 
</files>
 
</files>
    <updateservers>
+
<updateservers>
        <server type="collection" priority="1" name="Accredited Joomla! Translations">http://update.joomla.org/language/translationlist_3.xml</server>
+
<server type="collection" priority="1" name="Accredited Joomla! Translations">
    </updateservers>
+
                        https://update.joomla.org/language/translationlist_3.xml
 +
                </server>
 +
</updateservers>
 
</extension>
 
</extension>
 
</source>
 
</source>
  
===One zip per client (i.e. site and admin)===
+
<translate>
 +
<!--T:12-->
 +
Note: TinyMCE files are no more needed since 3.2. They are now shipped with core. If your language is missing, please contact the Translation Team coordination.
 +
</translate>
  
* site_fr-FR.zip
+
<translate>
* admin_fr-FR.zip
+
===One zip per client (i.e. site and admin)=== <!--T:13-->
  
 +
<!--T:14-->
 +
* <code>site_fr-FR.zip</code>
 +
* <code>admin_fr-FR.zip</code>
 +
 +
<!--T:15-->
 
Content of the client's zip (example below is for admin)
 
Content of the client's zip (example below is for admin)
 +
</translate>
  
====an install.xml ====
+
<translate>
<install is deprecated
+
====an install.xml ==== <!--T:16-->
 +
Example for admin
 +
</translate>
  
 
<source lang="xml"
 
<source lang="xml"
 
<?xml version="1.0" encoding="utf-8"?>
 
<?xml version="1.0" encoding="utf-8"?>
<extension version="3.1" client="administrator" type="language" method="upgrade"> // change to client="site" if site pack
+
<extension version="3.7" client="administrator" type="language" method="upgrade"> <!-- change to client="site" if site pack -->
<name>French (fr-FR)</name>
+
<name>French (fr-FR)</name> <!-- New in 3.7.0: Use only latin ascii characters. -->
    <tag>fr-FR</tag>
+
<tag>fr-FR</tag>
<version>3.1.0.1</version>
+
<version>3.7.0.1</version>
<creationDate>15/05/2013</creationDate>
+
<creationDate>15/02/2017</creationDate>
 
<author>French translation team : joomla.fr</author>
 
<author>French translation team : joomla.fr</author>
 
<authorEmail>traduction@joomla.fr</authorEmail>
 
<authorEmail>traduction@joomla.fr</authorEmail>
 
<authorUrl>www.joomla.fr</authorUrl>
 
<authorUrl>www.joomla.fr</authorUrl>
    <copyright>Copyright (C) 2005 - 2013 joomla.fr et Open Source Matters. Tous droits réservés</copyright>
+
<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>
 
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
 
<description>fr-FR administrator language</description>
 
<description>fr-FR administrator language</description>
 
<files>
 
<files>
        <filename>index.html</filename>
 
 
<filename>fr-FR.com_admin.ini</filename>
 
<filename>fr-FR.com_admin.ini</filename>
 
<filename>fr-FR.com_admin.sys.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.ini</filename>
 
<filename>fr-FR.com_banners.sys.ini</filename>
 
<filename>fr-FR.com_banners.sys.ini</filename>
Line 106: Line 135:
 
<filename>fr-FR.com_content.ini</filename>
 
<filename>fr-FR.com_content.ini</filename>
 
<filename>fr-FR.com_content.sys.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.ini</filename>
 
<filename>fr-FR.com_cpanel.sys.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.ini</filename>
 
<filename>fr-FR.com_finder.sys.ini</filename>
 
<filename>fr-FR.com_finder.sys.ini</filename>
Line 131: Line 164:
 
<filename>fr-FR.com_plugins.ini</filename>
 
<filename>fr-FR.com_plugins.ini</filename>
 
<filename>fr-FR.com_plugins.sys.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.ini</filename>
 
<filename>fr-FR.com_redirect.sys.ini</filename>
 
<filename>fr-FR.com_redirect.sys.ini</filename>
 
<filename>fr-FR.com_search.ini</filename>
 
<filename>fr-FR.com_search.ini</filename>
 
<filename>fr-FR.com_search.sys.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.ini</filename>
 
<filename>fr-FR.com_templates.sys.ini</filename>
 
<filename>fr-FR.com_templates.sys.ini</filename>
Line 143: Line 180:
 
<filename>fr-FR.com_wrapper.ini</filename>
 
<filename>fr-FR.com_wrapper.ini</filename>
 
<filename>fr-FR.com_wrapper.sys.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.ini</filename>
 
<filename>fr-FR.lib_joomla.ini</filename>
 
<filename>fr-FR.lib_joomla.ini</filename>
Line 176: Line 214:
 
<filename>fr-FR.mod_version.ini</filename>
 
<filename>fr-FR.mod_version.ini</filename>
 
<filename>fr-FR.mod_version.sys.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.ini</filename>
 
<filename>fr-FR.plg_authentication_gmail.sys.ini</filename>
 
<filename>fr-FR.plg_authentication_gmail.sys.ini</filename>
Line 184: Line 224:
 
<filename>fr-FR.plg_captcha_recaptcha.ini</filename>
 
<filename>fr-FR.plg_captcha_recaptcha.ini</filename>
 
<filename>fr-FR.plg_captcha_recaptcha.sys.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.ini</filename>
 
<filename>fr-FR.plg_content_emailcloak.sys.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.ini</filename>
 
<filename>fr-FR.plg_content_finder.sys.ini</filename>
 
<filename>fr-FR.plg_content_finder.sys.ini</filename>
<filename>fr-FR.plg_content_geshi.ini</filename>
 
<filename>fr-FR.plg_content_geshi.sys.ini</filename>
 
 
<filename>fr-FR.plg_content_joomla.ini</filename>
 
<filename>fr-FR.plg_content_joomla.ini</filename>
 
<filename>fr-FR.plg_content_joomla.sys.ini</filename>
 
<filename>fr-FR.plg_content_joomla.sys.ini</filename>
Line 200: Line 242:
 
<filename>fr-FR.plg_content_vote.ini</filename>
 
<filename>fr-FR.plg_content_vote.ini</filename>
 
<filename>fr-FR.plg_content_vote.sys.ini</filename>
 
<filename>fr-FR.plg_content_vote.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_editors-xtd_article.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_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.ini</filename>
 
<filename>fr-FR.plg_editors-xtd_image.sys.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.ini</filename>
 
<filename>fr-FR.plg_editors-xtd_pagebreak.sys.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.ini</filename>
 
<filename>fr-FR.plg_editors-xtd_readmore.sys.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.ini</filename>
 
<filename>fr-FR.plg_extension_joomla.sys.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.ini</filename>
 
<filename>fr-FR.plg_finder_categories.sys.ini</filename>
 
<filename>fr-FR.plg_finder_categories.sys.ini</filename>
Line 224: Line 308:
 
<filename>fr-FR.plg_finder_newsfeeds.ini</filename>
 
<filename>fr-FR.plg_finder_newsfeeds.ini</filename>
 
<filename>fr-FR.plg_finder_newsfeeds.sys.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.ini</filename>
 
<filename>fr-FR.plg_finder_weblinks.sys.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.ini</filename>
 
<filename>fr-FR.plg_quickicon_extensionupdate.sys.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.ini</filename>
 
<filename>fr-FR.plg_quickicon_joomlaupdate.sys.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.ini</filename>
 
<filename>fr-FR.plg_search_categories.sys.ini</filename>
 
<filename>fr-FR.plg_search_categories.sys.ini</filename>
Line 238: Line 334:
 
<filename>fr-FR.plg_search_newsfeeds.ini</filename>
 
<filename>fr-FR.plg_search_newsfeeds.ini</filename>
 
<filename>fr-FR.plg_search_newsfeeds.sys.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.ini</filename>
 
<filename>fr-FR.plg_search_weblinks.sys.ini</filename>
 
<filename>fr-FR.plg_search_weblinks.sys.ini</filename>
Line 244: Line 342:
 
<filename>fr-FR.plg_system_debug.ini</filename>
 
<filename>fr-FR.plg_system_debug.ini</filename>
 
<filename>fr-FR.plg_system_debug.sys.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.ini</filename>
 
<filename>fr-FR.plg_system_highlight.sys.ini</filename>
 
<filename>fr-FR.plg_system_highlight.sys.ini</filename>
Line 262: Line 362:
 
<filename>fr-FR.plg_system_sef.ini</filename>
 
<filename>fr-FR.plg_system_sef.ini</filename>
 
<filename>fr-FR.plg_system_sef.sys.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.ini</filename>
 
<filename>fr-FR.plg_user_contactcreator.sys.ini</filename>
 
<filename>fr-FR.plg_user_contactcreator.sys.ini</filename>
Line 272: Line 380:
 
<filename>fr-FR.tpl_isis.ini</filename>
 
<filename>fr-FR.tpl_isis.ini</filename>
 
<filename>fr-FR.tpl_isis.sys.ini</filename>
 
<filename>fr-FR.tpl_isis.sys.ini</filename>
<filename file="meta">install.xml</filename> <!-- Mandatory! This file lets uninstall a language -->
+
<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>
 
<filename file="meta">fr-FR.xml</filename>
 
</files>
 
</files>
Line 284: Line 392:
 
</extension>
 
</extension>
 
</source>
 
</source>
 +
 +
<translate>
 +
<!--T:17-->
 
Notes:  
 
Notes:  
* fr-FR.lib_joomla.ini : Add in both admin and site At least in site if "site only pack", see below
+
* <code>fr-FR.lib_joomla.ini</code> : Add in both admin and site. At least in site if "site only pack", see below
* fr-FR.css : NEW IN 1.7: this file can be added in the ADMINISTRATOR pack if one wants to change the fonts used to display the back-end interface.
+
* <code>fr-FR.css</code> : NEW IN 1.7: this file can be added in the ADMINISTRATOR part if one wants to change the fonts used to display the back-end interface.
* fr-FR.xml : Note the file="meta" tag, telling it's the basic xml holding info about the pack.
+
* <code>fr-FR.xml</code> : Note the file="meta" tag, telling it's the basic xml holding info about the pack.
* install.xml : Mandatory! This file lets uninstall a language. Note file="meta"
+
* <code>install.xml</code> : Mandatory! This file lets install/uninstall a language. Note file="meta"
* fr-FR.localise.php : Add in both admin and site. At least in site if "site only pack", see below
+
* <code>fr-FR.localise.php</code> : Add in both admin and site. At least in site if "site only pack", see below
* Folder media destination="fr-FR" : If one needs to add a specific calendar
+
* Folder media <code>destination="fr-FR"</code> : If one needs to add a specific calendar
 +
</translate>
  
 +
<translate>
  
====All the ini files====
+
====All the ini files==== <!--T:18-->
 
Beware of new formatting!  
 
Beware of new formatting!  
 +
* Double quotes in the value should be written as "_QQ_" or as &amp;quot;
 +
* '''As of 3.7.0 escaped doublequotes \" may be used instead of "_QQ_" which will be deprecated in 4.0'''
 +
</translate>
  
Double quotes in the value should be written as "_QQ_" or as &amp;quot;
+
<translate>
 +
====the fr-FR.xml==== <!--T:19-->
 +
</translate>
  
NEVER use an escaped quote '''\"'''  as these will break in php 5.2.x
+
<source lang="xml">
 
+
<?xml version="1.0" encoding="utf-8"?>
====the fr-FR.xml====
+
<metafile version="3.7" client="administrator">
 
+
    <tag>fr-FR</tag>
<source lang="xml"><?xml version="1.0" encoding="utf-8"?>
+
<name>French (fr-FR)</name>
<metafile version="2.5" client="administrator" >
+
<version>3.7.0.1</version>
<tag>fr-FR</tag>
+
<creationDate>02/02/2017</creationDate>
<name>French (FR)</name>
+
<author>French translation team : joomla.fr</author>
<description>French administrator language for Joomla 1.6</description>
+
<authorEmail>traduction@joomla.fr</authorEmail>
<version>2.5.6.1</version>
+
<authorUrl>www.joomla.fr</authorUrl>
<creationDate>2010-08-01</creationDate>
+
<copyright>Copyright (C) 2005 - 2017 Open Source Matters &amp; Joomla.fr. All rights reserved.</copyright>
        <author>French translation team : Joomla!fr</author>
+
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
        <authorEmail>traduction@joomla.fr</authorEmail>
+
<description>French administrator language for Joomla 3.0</description>
        <authorUrl>www.joomla.fr</authorUrl>
 
        <copyright>Copyright (C) 2005 - 2011 Open Source Matters &amp; Joomla.fr. All rights reserved.</copyright>
 
        <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
 
 
<metadata>
 
<metadata>
<name>French (FR)</name>
+
<name>Français (FR)</name>
 +
<nativeName>Français (France)</nativeName> <!-- NEW in 3.7.0. Use the native alphabet here.-->
 
<tag>fr-FR</tag>
 
<tag>fr-FR</tag>
 
<rtl>0</rtl>
 
<rtl>0</rtl>
                <locale>fr_FR.utf8, fr_FR.UTF-8, fr_FR.UTF-8@euro, French_Standard,french, fr_FR, fre_FR, fr</locale> <!-- the locale is used to sort translated lists when present on the server. -->
+
<locale>fr_FR.utf8, fr_FR.UTF-8, fr_FR.UTF-8@euro, fr_FR, fre_FR, fr, france</locale>
                <firstDay>1</firstDay> <!-- used for the Calendar icon to specify what is the first day of the week in that language. 0 is Sunday, 1 is Monday, etc. -->
+
<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>
 
</metadata>
 
<params />
 
<params />
</metafile></source>
+
</metafile>
 
+
</source>
====the fr-FR.localise.php====
 
  
(This file should be present at least in site zip)
+
<translate>
 +
<!--T:20-->
 +
Notes:
 +
* <locale> the locale is used to sort translated lists when present on the server.
 +
* <firstDay>1</firstDay> used for the Calendar icon to specify what is the first day of the week in that language. 0 is Sunday, 1 is Monday, etc.
 +
* <weekEnd>0,6</weekEnd> used for the Calendar, It defines the days of the week to be greyed. 0,6 is Saturday & Sunday, 1 would be Friday.
 +
* <calendar>gregorian</calendar> is used for the Calendar, jalali will adapt the display of the calendar to Persian languages.
 +
</translate>
  
Explanation of this file:
+
<translate>
 +
====the fr-FR.localise.php==== <!--T:21-->
 +
</translate>
 +
<translate>
 +
<!--T:22-->
 +
This file should be present at least in site zip
  
It replaces the fr-FR.ignore.php and it can be customized depending on languages.
+
<!--T:23-->
 +
Explanation of this file: It replaces the <code>fr-FR.ignore.php</code> and it can be customized depending on languages.
 
   
 
   
 
*Ignore search words.
 
*Ignore search words.
  
 +
<!--T:24-->
 
*Define upper and lower limit of search words length.
 
*Define upper and lower limit of search words length.
  
 +
<!--T:25-->
 
*Define number of characters to display for the result of the search.
 
*Define number of characters to display for the result of the search.
  
 +
<!--T:26-->
 
*Define specific plural functionality for some languages where the value of the string can change depending on the count (Russian for example).
 
*Define specific plural functionality for some languages where the value of the string can change depending on the count (Russian for example).
  
 +
<!--T:27-->
 
*Define custom transliteration (i.e. when NOT using the Unicode URLS parameter in Global Configuration) to ensure proper change of some alphabets to ascii for the alias used when SEF is on. (The transliteration which is now default in 1.7 should take care of all latin-based languages.)
 
*Define custom transliteration (i.e. when NOT using the Unicode URLS parameter in Global Configuration) to ensure proper change of some alphabets to ascii for the alias used when SEF is on. (The transliteration which is now default in 1.7 should take care of all latin-based languages.)
  
 +
<!--T:28-->
 
*Define a custom calendar by adding a function as well as some js files
 
*Define a custom calendar by adding a function as well as some js files
  
 +
<!--T:29-->
 
'''ALWAYS SAVE THIS FILE AS UTF8 NO BOM''' if it contains non-ascii glyphs (accented letters, etc.)
 
'''ALWAYS SAVE THIS FILE AS UTF8 NO BOM''' if it contains non-ascii glyphs (accented letters, etc.)
 +
Ini files can be saved with BOM (Joomla deals with that), but not xmls and php files.
 +
</translate>
  
 +
<translate>
 +
=====Example 1 - Custom transliteration NOT implemented===== <!--T:30-->
 +
Example of a basic <code>fr-FR.localise.php</code> (where custom transliteration is NOT implemented)
 +
</translate>
  
 
Example of a basic fr-FR.localise.php (where custom transliteration is NOT implemented)
 
 
<source lang="php"><?php
 
<source lang="php"><?php
 
/**
 
/**
 
  * @version $Id: fr-FR.localise.php 15628 2010-03-27 05:20:29Z infograf768 $
 
  * @version $Id: fr-FR.localise.php 15628 2010-03-27 05:20:29Z infograf768 $
  * @copyright Copyright (C) 2005 - 2010 Open Source Matters, Inc. All rights reserved.
+
  * @copyright Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
 
  * @license GNU General Public License version 2 or later; see LICENSE.txt
 
  * @license GNU General Public License version 2 or later; see LICENSE.txt
 
  */
 
  */
Line 362: Line 502:
 
  * @since 1.6
 
  * @since 1.6
 
  */
 
  */
abstract class fr_FRLocalise {    //// !!!! NOTE the use of fr_FR for the class !!!  // not the same as your language prefix.
+
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
 
* Returns the potential suffixes for a specific number of items
Line 424: Line 564:
 
}</source>
 
}</source>
  
===Example of the function to add when custom transliteration is desired===
+
<translate>
 +
=====Example 2 - Custom transliteration implemented===== <!--T:31-->
 +
 
 +
<!--T:32-->
 +
Example of the function to add to file <code>localise.php</code> when custom transliteration is desired
 +
</translate>
  
 
<source lang="php">
 
<source lang="php">
Line 436: Line 581:
 
*/
 
*/
 
public static function transliterate($string)
 
public static function transliterate($string)
{
+
{
$str = JString::strtolower($string);
+
$str = \Joomla\String\StringHelper::strtolower($string); // since 3.8.0 to prepare 4.0
  
 
//Specific language transliteration.
 
//Specific language transliteration.
Line 443: Line 588:
  
 
$glyph_array = array(
 
$glyph_array = array(
'a' => 'a,à,á,â,ã,ä,å,a,a,a,?,a,?',
+
'a' => 'a,à,á,â,ã,ä,å,ā,ă,ą,,α,ά',
 
'ae' => 'æ',
 
'ae' => 'æ',
'b' => 'ß,?',
+
'b' => 'β,б',
'c' => 'c,ç,c,c,c,c,?,?',
+
'c' => 'c,ç,ć,ĉ,ċ,č,ћ,ц',
'ch' => '?',
+
'ch' => 'ч',
'd' => 'd,d,Ð,?,?,d,ð',
+
'd' => 'ď,đ,Ð,д,ђ,δ,ð',
'dz' => '?',
+
'dz' => 'џ',
'e' => 'e,è,é,ê,ë,e,e,e,e,e,?,e,?',
+
'e' => 'e,è,é,ê,ë,ē,ĕ,ė,ę,ě,э,ε,έ',
'f' => 'ƒ,?',
+
'f' => 'ƒ,ф',
'g' => 'g,g,g,g,g,?,?',
+
'g' => 'ğ,ĝ,ğ,ġ,ģ,г,γ',
'h' => 'h,h,H,?',
+
'h' => 'ĥ,ħ,Ħ,х',
'i' => 'i,ì,í,î,ï,i,i,i,i,i,?,?,?,?,?,?,?',
+
'i' => 'i,ì,í,î,ï,ı,ĩ,ī,ĭ,į,и,й,ъ,ы,ь,η,ή',
'ij' => '?',
+
'ij' => 'ij',
'j' => 'j,j',
+
'j' => 'ĵ,j',
'ja' => '?',
+
'ja' => 'я',
'ju' => '??',
+
'ju' => 'яю',
'k' => 'k,?,?',
+
'k' => 'ķ,ĸ,κ',
'l' => 'l,l,l,?,l,?,?',
+
'l' => 'ĺ,ļ,ľ,ŀ,ł,л,λ',
'lj' => '?',
+
'lj' => 'љ',
'm' => 'µ,?',
+
'm' => 'μ,м',
'n' => 'ñ,n,n,?,?,?,?',
+
'n' => 'ñ,ņ,ň,ʼn,ŋ,н,ν',
'nj' => '?',
+
'nj' => 'њ',
'o' => 'ò,ó,ô,õ,ø,o,o,o,?,?,?,?',
+
'o' => 'ò,ó,ô,õ,ø,ō,ŏ,ő,ο,ό,ω,ώ',
 
'oe' => 'œ,ö',
 
'oe' => 'œ,ö',
'p' => '?,p',
+
'p' => 'п,π',
'ph' => 'f',
+
'ph' => 'φ',
'ps' => '?',
+
'ps' => 'ψ',
'r' => 'r,r,r,?,?,s,?',
+
'r' => 'ŕ,ŗ,ř,р,ρ,σ,ς',
's' => 's,s,s,s,š,?',
+
's' => 'ş,ś,ŝ,ş,š,с',
'ss' => 'ß,?',
+
'ss' => 'ß,ſ',
'sh' => '?',
+
'sh' => 'ш',
'shch' => '?',
+
'shch' => 'щ',
't' => 't,t,t,t,?',
+
't' => 'ţ,ť,ŧ,τ,т',
'th' => '?',
+
'th' => 'θ',
'u' => 'u,ù,ú,û,ü,u,u,u,u,u,u,?',
+
'u' => 'u,ù,ú,û,ü,ũ,ū,ŭ,ů,ű,ų,у',
'v' => '?',
+
'v' => 'в',
'w' => 'w',
+
'w' => 'ŵ',
'x' => '?,?',
+
'x' => 'χ,ξ',
'y' => 'ý,þ,ÿ,y',
+
'y' => 'ý,þ,ÿ,ŷ',
'z' => 'z,z,ž,?,?,?'
+
'z' => 'ź,ż,ž,з,ж,ζ'
 
);
 
);
  
Line 491: Line 636:
  
 
return $str;
 
return $str;
}
+
}
 +
}
 
</source>
 
</source>
  
 
+
<translate>
Here is an example of a function to add in the localise.php file in order to implement a custom calendar for fa-IR (Persian language)  
+
=====Example 3 - Custom calendar implemented===== <!--T:33-->
 +
Here is an example of a function to add in the <code>localise.php</code> file in order to implement a custom calendar for fa-IR (Persian language). This is different from the meta in the xml(s).
 +
</translate>
  
 
<source lang="php">
 
<source lang="php">
 +
<?php
 
/**
 
/**
  * fa-IR Date class
+
  * @version $Id: language.php 15628 2010-03-27 05:20:29Z infograf768 $
*
+
  * @copyright Copyright (C) 2005 - 2017 Open Source Matters, Inc. All rights reserved.
  * @package Joomla.Site
+
  * @license GNU General Public License version 2 or later; see LICENSE.txt
  * @since 1.6
 
 
  */
 
  */
jimport('joomla.utilities.date');
+
 
 +
 
 +
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 {
 
class fa_IRDate extends JDate {
 
const DAY_NUMBER = "\x027\x03";
 
const DAY_NUMBER = "\x027\x03";
Line 520: Line 710:
 
const PERSIAN_EPOCH = 1948320.5;
 
const PERSIAN_EPOCH = 1948320.5;
  
protected static $month_names = array("???????","????????","?????","???","?????","??????","???","????","???","??","????","?????");
+
protected static $month_names = array("فروردين","ارديبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند");
  
  
/**
+
* Gets the date as a formatted string.
 
*
 
* @param string The date format specification string (see {@link PHP_MANUAL#date})
 
* @param boolean True to return the date string in the local time zone, false to return it in GMT.
 
* @return string The date string in the french republican calendar (see @link{http://en.wikipedia.org/wiki/French_Republican_Calendar}).
 
* @since 1.6
 
*/
 
 
public function calendar($format, $local = false, $translate = true)
 
public function calendar($format, $local = false, $translate = true)
 
{
 
{
Line 588: Line 771:
 
}
 
}
 
if (strpos($return, self::AM_LOWER) !== false) {
 
if (strpos($return, self::AM_LOWER) !== false) {
$return = str_replace(self::AM_LOWER, $this->format('a',$local)=='pm' ? '? ?' : '? ?', $return);
+
$return = str_replace(self::AM_LOWER, $this->format('a',$local)=='pm' ? 'ب ظ' : 'ق ظ', $return);
 
}
 
}
 
if (strpos($return, self::AM_UPPER) !== false) {
 
if (strpos($return, self::AM_UPPER) !== false) {
$return = str_replace(self::AM_UPPER, $this->format('a',$local)=='pm' ? '? ?' : '? ?', $return);
+
$return = str_replace(self::AM_UPPER, $this->format('a',$local)=='pm' ? 'ب ظ' : 'ق ظ', $return);
 
}
 
}
  
Line 688: Line 871:
  
 
}
 
}
 +
 
</source>
 
</source>
  
One has also to add the right calendar.js files in the package.
+
<translate>
 +
<!--T:34-->
 +
Note: One has also to add the right <code>calendar.js</code> files in the package.
 +
</translate>
  
==The Site-only pack==
+
<translate>
'''
 
Concerning those of you providing "site only" packs:'''
 
  
The packages have to be made on the model of http://joomlacode.org/gf/download/frsrelease/16677/72539/gd-GB_joomla_lang_full_2.5.1.zip
+
==The Site-only pack== <!--T:35-->
(Download and decompress locally to see the exact structure of the pack (install.xml, files included, etc.)
 
  
I.e. IT IS NECESSARY TO PROVIDE A LIMITED ADMIN PACK and to post a unique package including both
+
<!--T:36-->
 +
'''Concerning those of you providing "site only" packs:'''
  
Why? ==> because some plugin ini files are used in front-end! Here is a typical xml for admin in this case. Example for 2.5:
+
 
 +
<!--T:37-->
 +
I.e. IT IS NECESSARY TO PROVIDE AN ADMIN PACK WITH ALL FILES, SOME OF THEM SHOULD BE TRANSLATED and to post a unique package as for a real "full" pack (See above).
 +
 
 +
<!--T:38-->
 +
Why? ==> because some plugin ini files are used in front-end! Here is a typical administrator <code>install.xml</code> in this case. Example for 3.3.x, the files to translate are indicated by =======> :
 +
</translate>
  
 
<source lang="xml">
 
<source lang="xml">
 
<?xml version="1.0" encoding="utf-8"?>
 
<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" client="administrator" type="language" method="upgrade">
+
<extension version="3.3" client="administrator" type="language" method="upgrade">
<name>Scottish Gaelic (GB)</name>
+
<name>MyLanguage (xx-XX)</name>
    <tag>gd-GB</tag>
+
<tag>xx-XX</tag>
    <version>2.5.6.1</version>
+
<version>3.3.3.1</version>
    <creationDate>2012-02-13</creationDate>
+
<creationDate>July 2014</creationDate>
    <author>akerbeltz</author>
+
<author>MyLanguage translation team : xx-XX Team/author</author>
    <authorEmail>fios@akerbeltz.org</authorEmail>
+
<authorEmail>traduction@mysite.com</authorEmail>
    <authorUrl>www.akerbeltz.org</authorUrl>
+
<authorUrl>http://mysite.com</authorUrl>
    <copyright>Copyright (C) 2005 - 2012 Joomla Open Source Matters. Gach còir glèidhte.</copyright>
+
<copyright>Copyright (C) 2005 - 2014 Open Source Matters. All rights reserved.</copyright>
    <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
+
<copyright>Copyright (C) date_year - date_year My Team or name. All rights reserved.</copyright>
    <description>Scottish Gaelic language pack for Joomla! 2.5</description>
+
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
 +
<description>xx-XX administrator language for 3.3.x</description>
 
<files>
 
<files>
        <filename>index.html</filename>
+
<filename>xx-XX.com_admin.ini</filename>
<filename>gd-GB.plg_captcha_recaptcha.ini</filename>
+
<filename>xx-XX.com_admin.sys.ini</filename>
<filename>gd-GB.plg_finder_categories.ini</filename>
+
<filename>xx-XX.com_banners.ini</filename>
<filename>gd-GB.plg_finder_contacts.ini</filename>
+
<filename>xx-XX.com_banners.sys.ini</filename>
<filename>gd-GB.plg_finder_content.ini</filename>
+
<filename>xx-XX.com_ajax.ini</filename>
<filename>gd-GB.plg_finder_newsfeeds.ini</filename>
+
<filename>xx-XX.com_ajax.sys.ini</filename>
<filename>gd-GB.plg_finder_weblinks.ini</filename>
+
<filename>xx-XX.com_cache.ini</filename>
        <filename>gd-GB.plg_content_pagebreak.ini</filename>
+
<filename>xx-XX.com_cache.sys.ini</filename>
        <filename>gd-GB.plg_content_vote.ini</filename>
+
<filename>xx-XX.com_categories.ini</filename>
        <filename>gd-GB.plg_editors-xtd_article.ini</filename>
+
<filename>xx-XX.com_categories.sys.ini</filename>
        <filename>gd-GB.plg_editors-xtd_image.ini</filename>
+
<filename>xx-XX.com_checkin.ini</filename>
        <filename>gd-GB.plg_editors-xtd_pagebreak.ini</filename>
+
<filename>xx-XX.com_checkin.sys.ini</filename>
        <filename>gd-GB.plg_editors-xtd_readmore.ini</filename>
+
<filename>xx-XX.com_config.ini</filename>
        <filename>gd-GB.plg_search_categories.ini</filename>
+
<filename>xx-XX.com_config.sys.ini</filename>
        <filename>gd-GB.plg_search_contacts.ini</filename>
+
<filename>xx-XX.com_contact.ini</filename>
        <filename>gd-GB.plg_search_content.ini</filename>
+
<filename>xx-XX.com_contact.sys.ini</filename>
        <filename>gd-GB.plg_search_newsfeeds.ini</filename>
+
<filename>xx-XX.com_content.ini</filename>
        <filename>gd-GB.plg_search_weblinks.ini</filename>
+
<filename>xx-XX.com_content.sys.ini</filename>
        <filename>gd-GB.plg_user_profile.ini</filename>
+
<filename>xx-XX.com_contenthistory.ini</filename>
        <filename file="meta">install.xml</filename>
+
<filename>xx-XX.com_contenthistory.sys.ini</filename>
        <filename file="meta">gd-GB.xml</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>
 
</files>
 +
<params />
 
</extension>
 
</extension>
 +
 +
</source>
 +
 +
<translate>
 +
<!--T:39-->
 +
For the untranslated files, just copy the <code>en-GB</code> ones and change the language prefix.
 +
</translate>
 +
 +
<translate>
 +
==What not to translate== <!--T:40-->
 +
Don't translate these lines:
 +
 +
<!--T:44-->
 +
* file <code>fr-FR.ini</code> = the lines for <code>"JHELP_"</code>
 +
 +
<!--T:45-->
 +
example:
 +
</translate>
 +
<source lang="php">
 +
JHELP_COMPONENTS_MESSAGING_INBOX="Components_Messaging_Inbox"
 +
</source>
 +
 +
<translate>
 +
<!--T:41-->
 +
They are used for mapping the help. When a specific wiki for help per language is available, they will be functional.
 +
</translate>
 +
 +
<translate>==Frequent Asked Questions== <!--T:46--></translate>
 +
<translate>===Why we use .ini files instead of .po .mo=== <!--T:47--></translate>
 +
<translate><!--T:48-->
 +
INI files were choosen in 2006 for several reasons:</translate>
 +
 +
<translate><!--T:49-->
 +
* There was no specific app to deal with .po on all platforms (Poedit was not available on Windows)
 +
* Anyone, even without any code knowledge, could create/edit an ini file
 +
* ini files are readable while .po are not
 +
* You can't load more than one .po file per page.</translate>
 +
 +
<translate><!--T:50-->
 +
but not only, and this is why it is better to go on:</translate>
 +
 +
<translate><!--T:51-->
 +
the following is an example picked from Wordpress of the code in a simple .php file (BTW WP does NOT use any plurals, as I could see in their .po files):</translate>
 +
 +
<source lang="php">
 +
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,
 +
    ) );
 +
}
 
</source>
 
</source>
 +
 +
<translate><!--T:52-->
 +
This for GetText:</translate>
 +
 +
<source lang="php">
 +
__('<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.')
 +
</source>
 +
 +
<translate><!--T:53-->
 +
It is simpler with ini files:</translate>
 +
 +
<source lang="php">
 +
JText::_("SOME_CONSTANT")
 +
</source>
 +
 +
<translate>===Working with plurals=== <!--T:54--></translate>
 +
<translate><!--T:55-->
 +
Some languages like Russian do NOT have the same plurals as English. They need to add strings to fit their definitions. Joomla CMS provides a solution for it and it can be seen in the file <tt>localise.php</tt> added to the language package. For example:
 +
</translate>
 +
<translate><!--T:56-->
 +
Concerning plurals, this is the Russian plural:</translate>
 +
 +
<source lang="php">
 +
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;
 +
    }
 +
</source>
 +
 +
<translate><!--T:57-->
 +
And this is the Scottish gaelic one:</translate>
 +
 +
<source lang="php">
 +
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;
 +
    }
 +
</source>
 +
 +
<translate><!--T:58-->
 +
Now compare with en-GB:</translate>
 +
 +
<source lang="php">
 +
public static function getPluralSuffixes($count) {
 +
        if ($count == 0) {
 +
            $return =  array('0');
 +
        }
 +
        elseif($count == 1) {
 +
            $return =  array('1');
 +
        }
 +
        else {
 +
            $return = array('MORE');
 +
        }
 +
        return $return;
 +
    }
 +
</source>
 +
 +
<translate><!--T:59-->
 +
This means that when we have in en-GB:</translate>
 +
 +
<source lang="php">
 +
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"
 +
</source>
 +
 +
<translate><!--T:60-->
 +
In Russian they need:</translate>
 +
 +
<source lang="php">
 +
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 баннеров успешно разблокировано"
 +
</source>
 +
 +
<translate>===Standard ISO codes for naming language packages=== <!--T:61--></translate>
 +
<translate><!--T:62-->
 +
The official link concerning Country codes is:</translate> https://www.iso.org/obp/ui/#search
 +
 +
<translate><!--T:63-->
 +
Joomla uses alpha-2 codes:</translate>
 +
 +
<translate><!--T:64-->
 +
CS was the official country code of Tchecoslovakia BEFORE it was separated into the Czeck Republic (CZ) and Slovakia (SK)</translate>
 +
 +
<translate><!--T:65-->
 +
Our Lang tags are composed of 2 parts:
 +
 +
<!--T:66-->
 +
* the languagecode
 +
* the countrycode</translate>
 +
 +
<translate><!--T:67-->
 +
Here is the official list for language code:</translate> http://www.iso.org/iso/home/standards/language_codes.htm
 +
 +
<translate><!--T:68-->
 +
When possible we use the 2 letters language code, otherwise we use 3. For example we have for Joomla
 +
 +
<!--T:69-->
 +
ckb-IQ for Kurdish Sorani
 +
 +
<!--T:70-->
 +
srp-ME for Montenegrin</translate>
 +
 +
<translate>
 +
<!--T:42-->
 
[[Category:Joomla! 3.0]]
 
[[Category:Joomla! 3.0]]
 
[[Category:Tutorials]]
 
[[Category:Tutorials]]
 
[[Category:Language Development]]
 
[[Category:Language Development]]
 +
</translate>

Latest revision as of 04:29, 29 September 2020

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

How to create localized CORE language packs[edit]

Notes[edit]

  • ALL FILES MUST BE SAVED AS UTF8 NO BOM (for non-ascii glyphs as in accented letters, etc.)
  • The localise component may help you create and update the ini files
  • As of Joomla! 3.2.0, en-GB is always loading first. Therefore if a string is missing or if there is a parsing error in a language pack, the English value will be displayed.


Full language packs[edit]

* fr-FR is taken as an example of language prefix. A full language pack will contain translations for site and admin parts.

  1. In the case of a FULL pack, the package is composed of 3 files, then zipped.
    • pkg_fr-FR.xml
    • site_fr-FR.zip
    • admin_fr-FR.zip
  2. Naming of the pack
    • fr-FR_joomla_lang_full_3.7.0v1.zip
  3. Files required for partial deletion
    • each pack should include a fr-FR.lib_joomla.ini and a fr-FR.localise.php to cope for deletion of site or admin pack by the user.
    • IMPORTANT: Since some administrator ini files are necessary in front-end and some changes were brought in the loading of the plugin ini files, it is always necessary to include some admin part in the final pack, even for a 'site-only' pack. See below The Site-only pack

A pkg_fr-FR.xml file[edit]

<?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>

Note: TinyMCE files are no more needed since 3.2. They are now shipped with core. If your language is missing, please contact the Translation Team coordination.

One zip per client (i.e. site and admin)[edit]

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

Content of the client's zip (example below is for admin)

an install.xml[edit]

Example for admin

<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>

Notes:

  • fr-FR.lib_joomla.ini : Add in both admin and site. At least in site if "site only pack", see below
  • fr-FR.css : NEW IN 1.7: this file can be added in the ADMINISTRATOR part if one wants to change the fonts used to display the back-end interface.
  • fr-FR.xml : Note the file="meta" tag, telling it's the basic xml holding info about the pack.
  • install.xml : Mandatory! This file lets install/uninstall a language. Note file="meta"
  • fr-FR.localise.php : Add in both admin and site. At least in site if "site only pack", see below
  • Folder media destination="fr-FR" : If one needs to add a specific calendar


All the ini files[edit]

Beware of new formatting!

  • Double quotes in the value should be written as "_QQ_" or as &quot;
  • As of 3.7.0 escaped doublequotes \" may be used instead of "_QQ_" which will be deprecated in 4.0

the fr-FR.xml[edit]

<?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>

Notes:

  • <locale> the locale is used to sort translated lists when present on the server.
  • <firstDay>1</firstDay> used for the Calendar icon to specify what is the first day of the week in that language. 0 is Sunday, 1 is Monday, etc.
  • <weekEnd>0,6</weekEnd> used for the Calendar, It defines the days of the week to be greyed. 0,6 is Saturday & Sunday, 1 would be Friday.
  • <calendar>gregorian</calendar> is used for the Calendar, jalali will adapt the display of the calendar to Persian languages.

the fr-FR.localise.php[edit]

This file should be present at least in site zip

Explanation of this file: It replaces the fr-FR.ignore.php and it can be customized depending on languages.

  • Ignore search words.
  • Define upper and lower limit of search words length.
  • Define number of characters to display for the result of the search.
  • Define specific plural functionality for some languages where the value of the string can change depending on the count (Russian for example).
  • Define custom transliteration (i.e. when NOT using the Unicode URLS parameter in Global Configuration) to ensure proper change of some alphabets to ascii for the alias used when SEF is on. (The transliteration which is now default in 1.7 should take care of all latin-based languages.)
  • Define a custom calendar by adding a function as well as some js files

ALWAYS SAVE THIS FILE AS UTF8 NO BOM if it contains non-ascii glyphs (accented letters, etc.) Ini files can be saved with BOM (Joomla deals with that), but not xmls and php files.

Example 1 - Custom transliteration NOT implemented[edit]

Example of a basic fr-FR.localise.php (where custom transliteration is NOT implemented)

<?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;
	}
}
Example 2 - Custom transliteration implemented[edit]

Example of the function to add to file localise.php when custom transliteration is desired

/**
	 * 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;
		}
}
Example 3 - Custom calendar implemented[edit]

Here is an example of a function to add in the localise.php file in order to implement a custom calendar for fa-IR (Persian language). This is different from the meta in the xml(s).

<?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;

	}

}

Note: One has also to add the right calendar.js files in the package.


The Site-only pack[edit]

Concerning those of you providing "site only" packs:


I.e. IT IS NECESSARY TO PROVIDE AN ADMIN PACK WITH ALL FILES, SOME OF THEM SHOULD BE TRANSLATED and to post a unique package as for a real "full" pack (See above).

Why? ==> because some plugin ini files are used in front-end! Here is a typical administrator install.xml in this case. Example for 3.3.x, the files to translate are indicated by =======> :

<?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>

For the untranslated files, just copy the en-GB ones and change the language prefix.

What not to translate[edit]

Don't translate these lines:

  • file fr-FR.ini = the lines for "JHELP_"

example:

JHELP_COMPONENTS_MESSAGING_INBOX="Components_Messaging_Inbox"

They are used for mapping the help. When a specific wiki for help per language is available, they will be functional.

Frequent Asked Questions[edit]

Why we use .ini files instead of .po .mo[edit]

INI files were choosen in 2006 for several reasons:

  • There was no specific app to deal with .po on all platforms (Poedit was not available on Windows)
  • Anyone, even without any code knowledge, could create/edit an ini file
  • ini files are readable while .po are not
  • You can't load more than one .po file per page.

but not only, and this is why it is better to go on:

the following is an example picked from Wordpress of the code in a simple .php file (BTW WP does NOT use any plurals, as I could see in their .po files):

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,
    ) );
}

This for 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.')

It is simpler with ini files:

JText::_("SOME_CONSTANT")

Working with plurals[edit]

Some languages like Russian do NOT have the same plurals as English. They need to add strings to fit their definitions. Joomla CMS provides a solution for it and it can be seen in the file localise.php added to the language package. For example: Concerning plurals, this is the Russian plural:

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;
    }

And this is the Scottish gaelic one:

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;
     }

Now compare with 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;
    }

This means that when we have in 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"

In Russian they need:

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 баннеров успешно разблокировано"

Standard ISO codes for naming language packages[edit]

The official link concerning Country codes is: https://www.iso.org/obp/ui/#search

Joomla uses alpha-2 codes:

CS was the official country code of Tchecoslovakia BEFORE it was separated into the Czeck Republic (CZ) and Slovakia (SK)

Our Lang tags are composed of 2 parts:

  • the languagecode
  • the countrycode

Here is the official list for language code: http://www.iso.org/iso/home/standards/language_codes.htm

When possible we use the 2 letters language code, otherwise we use 3. For example we have for Joomla

ckb-IQ for Kurdish Sorani

srp-ME for Montenegrin