Difference between revisions of "Making a Language Pack for Joomla/nl"
From Joomla! Documentation
(Updating to match new version of source page) |
|||
Line 21: | Line 21: | ||
Een volledig taalpakket bevat vertalingen voor de website en het beheergedeelte. | Een volledig taalpakket bevat vertalingen voor de website en het beheergedeelte. | ||
− | # In | + | # In het geval van een '''volledig''' pakket, bestaat het pakket uit 3 bestanden en daarna ingepakt (ge-zipped). |
#* <code>pkg_fr-FR.xml</code> | #* <code>pkg_fr-FR.xml</code> | ||
#* <code>site_fr-FR.zip</code> | #* <code>site_fr-FR.zip</code> | ||
#* <code>admin_fr-FR.zip</code> | #* <code>admin_fr-FR.zip</code> | ||
− | # | + | # Naamgeving van het pakket |
#* '''fr-FR_joomla_lang_full_3.4.1v1.zip''' | #* '''fr-FR_joomla_lang_full_3.4.1v1.zip''' | ||
− | # | + | # Bestanden die nodig zijn voor het gedeeltelijk verwijderen |
− | #* | + | #* ieder pakket moet een <code>fr-FR.lib_joomla.ini</code> bevatten en een <code>fr-FR.localise.php</code> om om te gaan met het verwijderen van het website- of beheerpakket door de gebruiker. |
− | #* ''' | + | #* '''BELANGRIJK''': Aangezien sommige beheer ini-bestanden noodzakelijk zijn op de website en er wijzigingen zijn aangebracht in het laden van plugin ini-bestanden, is het altijd noodzakelijk een beheer deel in het definitieve pakket op te nemen, zelfs voor een ''''alleen-website'''' pakket. Bekijk onderstaande [[#The Site-only pack|Alleen-website pakket]] |
===Een pkg_fr-FR.xml bestand=== | ===Een pkg_fr-FR.xml bestand=== |
Revision as of 03:39, 30 July 2015
Hoe een taalpakket aan te maken voor Joomla zelf
Toelichting
- ALLE BESTANDEN MOETEN OPGESLAGEN WORDEN ALS UTF8 NO BOM (voor niet-ascii speciale tekens zoals letters met accenten, etc.)
- De Localise component zou kunnen helpen bij het aanmaken en updaten van de ini bestanden
- Kijk voor het installeren van ini bestanden voor extensies van 3e partijen in Joomla 2.5 J2.5:Het maken van niet-core taalpakketten
- Kijk voor de Joomla 2.5 core taalpakketten bij J2.5:Het maken van een taalpakket voor Joomla!
- Vanaf Joomla! 3.2.0 wordt het en-GB altijd als eerste geladen. Als er dus een string ontbreekt of als er een ontleedfout in een taalpakket optreed zal de Engelse waarde getoond worden.
- De huidige Joomla ontwikkeling kan opgehaald worden vanuit het Joomla! Content Management Systeem op Github
Volledige taalpakketten
* fr-FR
is genomen als voorbeeld van het taalvoorvoegsel.
Een volledig taalpakket bevat vertalingen voor de website en het beheergedeelte.
- In het geval van een volledig pakket, bestaat het pakket uit 3 bestanden en daarna ingepakt (ge-zipped).
pkg_fr-FR.xml
site_fr-FR.zip
admin_fr-FR.zip
- Naamgeving van het pakket
- fr-FR_joomla_lang_full_3.4.1v1.zip
- Bestanden die nodig zijn voor het gedeeltelijk verwijderen
- ieder pakket moet een
fr-FR.lib_joomla.ini
bevatten en een fr-FR.localise.php
om om te gaan met het verwijderen van het website- of beheerpakket door de gebruiker.
- BELANGRIJK: Aangezien sommige beheer ini-bestanden noodzakelijk zijn op de website en er wijzigingen zijn aangebracht in het laden van plugin ini-bestanden, is het altijd noodzakelijk een beheer deel in het definitieve pakket op te nemen, zelfs voor een 'alleen-website' pakket. Bekijk onderstaande Alleen-website pakket
Een pkg_fr-FR.xml bestand
<?xml version="1.0" encoding="UTF-8"?>
<extension type="package" version="3.4" method="upgrade"> <! method="upgrade" is compulsory since 3.4 -->
<name>French_fr-FR</name>
<packagename>fr-FR</packagename> <!-- the packagename has to be the same as the name of pkg_whatever.xml -->
<version>3.4.1.1</version> <!-- change the version # 3.x.x.x when updating, will display in manager -->
<creationDate>03/03/2015</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 - 2015 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.4.1 Full French (fr-FR) Language Package - Version 3.4.1v1</h3>
<h3>Paquet de langue Joomla! 3.4.1 français (fr-FR) complet - Version 3.4.1v1</h3>
</div>]]></description>
<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">http://update.joomla.org/language/translationlist_3.xml</server>
</updateservers>
</extension>
Let op: TinyMCE bestanden zijn niet meer nodig vanaf 3.2. Ze zitten nu in de core. Neem, als uw taal ontbreekt, contact op met de Translation Team coördinatie.
Een zip per gedeelte (ofwel één voor de website en één voor het beheergedeelte)
site_fr-FR.zip
admin_fr-FR.zip
Inhoud van de zip (onderstaande voorbeeld is voor beheergedeelte)
Een install.xml
Voorbeeld voor beheergedeelte
<extension version="3.4" client="administrator" type="language" method="upgrade"> // change to client="site" if site pack
<name>French (fr-FR)</name>
<tag>fr-FR</tag>
<version>3.4.1.1</version>
<creationDate>15/05/2013</creationDate>
<author>French translation team : joomla.fr</author>
<authorEmail>traduction@joomla.fr</authorEmail>
<authorUrl>www.joomla.fr</authorUrl>
<copyright>Copyright (C) 2005 - 2013 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>index.html</filename>
<filename>fr-FR.com_admin.ini</filename>
<filename>fr-FR.com_admin.sys.ini</filename>
<filename>fr-FR.com_banners.ini</filename>
<filename>fr-FR.com_banners.sys.ini</filename>
<filename>fr-FR.com_ajax.ini</filename>
<filename>fr-FR.com_ajax.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_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_emailcloak.ini</filename>
<filename>fr-FR.plg_content_emailcloak.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_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.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_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_extension_joomla.ini</filename>
<filename>fr-FR.plg_extension_joomla.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_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_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_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_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>
<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 pack 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
Alle ini-bestanden
Let op de nieuwe opmaak!
- Dubbele quotes in de waarde moeten geschreven worden als "_QQ_" of als "
Het fr-FR.xml bestand
<?xml version="1.0" encoding="utf-8"?>
<metafile version="3.2" client="administrator">
<tag>fr-FR</tag>
<name>French (fr-FR)</name>
<version>3.4.1.1</version>
<creationDate>15/04/2013</creationDate>
<author>French translation team : joomla.fr</author>
<authorEmail>traduction@joomla.fr</authorEmail>
<authorUrl>www.joomla.fr</authorUrl>
<copyright>Copyright (C) 2005 - 2013 Open Source Matters & 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>
<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>
</metadata>
<params />
</metafile>
Opmerkingen:
- <locale> de locale wordt gebruikt om vertaalde lijsten op de server te sorteren.
- <firstDay>1</firstDay> wordt gebruikt voor de kalender icoon om aan te geven wat de eerste dag van de week is in die taal. 0 is zondag, 1 is maandag, etc.
- <weekEnd>0,6</weekEnd> wordt gebruikt voor de kalender, Het definieert de dag(en) van de week die uitgegrijsd worden. 0,6 is zaterdag & zondag, 1 word vrijdag.
Het fr-FR.localise.php bestand
Dit bestand moet minstens aanwezig zijn de site zip
Uitleg over dit bestand: Het vervangt het fr-FR.ignore.php
bestand en kan aangepast worden afhankelijk van de taal.
- Negeer zoekwoorden.
- Definiëren boven en ondergrens van de lengte van zoekwoorden.
- Definiëren van het aantal tekens dat getoond moet worden als resultaat van zoekopdrachten.
- Definiëren van specifieke meervoudsvormen in sommige talen, waar de waarde van de string kan wijzigen afhankelijk van het aantal (Russisch bijvoorbeeld).
- Definiëren aangepaste transliteratie (als GEEN gebruik wordt gemaakt van de Unicode URL's parameter in de algemene instellingen) om te zorgen voor een juiste wijziging van sommige alfabetten naar ascii van de alias die gebruikt wordt als SEF aan staat. (De transliteratie die nu standaard is in 1.7 moet gelden voor alle Latijnse talen.)
- Definiëren van een aangepaste kalender door het toevoegen van een functie en enkele js-bestanden
SLA DIT BESTAND ALTIJD UTF8 NO BOM OP als het niet-ascii speciale-tekens bevat (letters met accenten, etc.)
Voorbeeld 1 - Aangepaste transliteratie NIET geïmplementeerd
Voorbeeld van een basis fr-FR.localise.php
bestand (waarbij aangepaste transliteratie NIET is geïmplementeerd)
<?php
/**
* @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.
* @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;
}
}
Voorbeeld 2 - Aangepaste transliteratie geïmplementeerd
Voorbeeld van de functie die toegevoegd moet worden aan het localise.php
bestand indien aangepaste transliteratie gewenst is
/**
* 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 = JString::strtolower($string);
//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;
}
}
Voorbeeld 3 - Aangepaste kalender geïmplementeerd
Hier een voorbeeld van een functie die toegevoegd moet worden aan het localise.php
bestand om een aangepaste kalender te implementeren voor fa-IR (Perzische taal)
<?php
/**
* @version $Id: language.php 15628 2010-03-27 05:20:29Z infograf768 $
* @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
* @copyright Copyright (C) 2005 - 2014 JoomlaFarsi.com. 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;
}
}
Let op: Men moet ook de juiste calendar.js
bestanden toevoegen aan het pakket.
Het alleen-website pakket
Wat betreft degenen die een "alleen-website" pakket leveren:
HET IS NOODZAKELIJK EEN BEHEER-PAKKET TE LEVEREN MET ALLE BESTANDEN EN ENKELE MOETEN VERTAALD ZIJN en een uniek pakket te plaatsen zoals een echt "volledig" pakket (zie hierboven).
Waarom? ==> omdat sommige plugin ini-bestanden op de website gebruikt worden Hier is een typisch beheer install.xml
bestand. Voorbeeld voor 3.3.x, de bestanden om te vertalen worden aangegeven door =======> :
<?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>
Kopieer de onvertaalde en-GB
bestanden en wijzig het taalvoorvoegsel.
What not to translate
Don't translate these lines:
- file
fr-FR.ini
= the lines for "JHELP_COMPONENTS_"
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
Why we use .ini files instead of .po .mo
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’ve linked to them. Enter the URL(s) you want to send trackbacks. If you link to other WordPress sites they’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 “About” page that has “Life Story” and “My Dog” 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’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 “About” page that has “Life Story” and “My Dog” 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
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;
}
An 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
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