Oprettelse af en sprogpakke

Skrevet af Ronny Buelund.

At lave en ikke-kerne sprogpakke i 2.5 og 3.x er temmelig forskelligt fra at lave en Kerne pakke.

Typen af pakke er en "fil" type.

Her er en typisk xml der installerer ini filer i administrator site KERNE standard sprogmapper for kun et sprog og en udvidelse. Mange sprog og mange udvidelser kan inkluderes i den samme .zip pakke.

 

<?xml version="1.0" encoding="utf-8"?>
<extension type="file" version="2.5" method="upgrade">
 
        <!-- Please use a unique name to make uninstall to work. Should be identical to your manifest filename. -->
        <name>lang_extensionname_fr-FR</name>
        <author>Danish Translation Team</author>
        <creationDate>18 Oktober 2013</creationDate>
        <copyright>(C) 2005-2013 Whoever</copyright>
        <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
        <authorEmail>info@whoever</authorEmail>
        <authorUrl>http://www.myextension.org</authorUrl>
        <version>1.0.0</version>
        <description>This da-DK lang pack for myextension has been installed successfully</description>
 
        <!-- Fileset definition -->
        <fileset>
 
                <!-- back-end -->
                <files folder="admin/da-DK" target="administrator/language/da-DK">
                        <filename>da-DK.com_myextension.ini</filename>
                        <filename>da-DK.com_myextension.sys.ini</filename>
                        <filename>da-DK.plg_system_myextension.ini</filename>
                        <filename>da-DK.plg_system_myextension.sys.ini</filename>
                </files>
 
                <!-- front-end -->
                <files folder="site/da-DK" target="language/da-DK">
                        <filename>da-DK.com_myextension.ini</filename>
                        <filename>da-DK.com_myextension.sys.ini</filename>
                        <filename>da-DK.mod_myextension.ini</filename>
                        <filename>da-DK.mod_myextension.sys.ini</filename>
                </files>
        </fileset>
</extension>

.zip pakken i dette tilfælde udgøres af xml filen ovenover og 2 mapper: site og admin, hver af disse indeholdende en da-DK mappe med ini filerne.

lang_udvidelsesnavn_da-DK.xml

site/da-DK/ + alle ini filer + index.html

admin/da-DK/ + alle ini filer + index.html

Resultatet er installationen af ini filerne i en eksisterende da-DK mappe eller oprettelsen af denne hvis den ikke eksisterer allerede.

Det har ingen indflydelse på eksisterende filer. Afinstallation af "Fil" pakken (Udvidelser=>Udvidelser=>Filtrer efter "fil") vil kun afinstallere de listede ini filer.

NOTE: I 2.5, undtagen hvis du anvender et specifikt script, så vil sprogmapperne xx-XX altid blive oprettet hvis de ikke allerede eksisterer.

Gør den multisproget

Hvis du ønsker at pakke alle de tilgængelige sprog ned i en enkelt installerbar fil, men ønsker at anvende separate fil udvidelser (som forklaret ovenover) for at kunne installere eller afinstallere dem separat, så skal du anvende en pakke med et lille script.

Følgende kode vil kun installere de sprog som eksisterer i din Joomla installation. Hvis nye sprog tilføjes så skal pakken installeres igen.

pkg_kunena_languages.xml (i vort eksempel):

<?xml version="1.0" encoding="utf-8"?>
<extension type="package" version="2.5" method="upgrade">
 
        <!-- Put anything into here, name is only shown in extension manager. -->
        <name>Kunena Language Pack</name>
 
        <!-- Filename without "pkg_" prefix. Must be unique or uninstall breaks. -->
        <packagename>kunena_languages</packagename>
 
        <version>2.0.0</version>
        <creationDate>2012-05-09</creationDate>
        <author>Kunena Team</author>
        <authorEmail>Denne e-mail adresse bliver beskyttet mod spambots. Du skal have JavaScript aktiveret for at vise den.</authorEmail>
        <authorUrl>http://www.kunena.org</authorUrl>
        <copyright>(C) 2008 - 2012 Kunena Team. All rights reserved.</copyright>
        <license>GNU/GPL</license>
        <description>Language pack for Kunena forum component.</description>
 
        <scriptfile>install.script.php</scriptfile>
        <files folder="language">
                <!-- Content will be added by our installer script -->
        </files>
</extension>

install.script.php:

<?php
defined( '_JEXEC' ) or die();
 
// Needed in Joomla < 2.5:
jimport( 'joomla.filesystem.folder' );
jimport( 'joomla.installer.installer' );
 
// FIXME: remember to change class name
class pkg_kunena_languagesInstallerScript {
 
        // FIXME: remember to change language package name
        protected $name = 'com_kunena';
 
        public function uninstall($parent) {
                // Remove languages.
                $languages = JFactory::getLanguage()->getKnownLanguages();
                foreach ($languages as $language) {
                        echo $this->uninstallLanguage($language['tag'], $language['name']);
                }
        }
 
        public function preflight($type, $parent) {
                if (!in_array($type, array('install', 'update'))) return true;
 
                $app = JFactory::getApplication();
 
                // If you want, you can detect your extension in here and fail with a message if it is not installed.
 
                // Get list of languages to be installed. Only installs languages that are found in your system.
                $source = $parent->getParent()->getPath('source').'/language';
                $languages = JFactory::getLanguage()->getKnownLanguages();
 
                $files = $parent->manifest->files;
                foreach ($languages as $language) {
                        $search = JFolder::files($source, $language['tag']);
                        if (empty($search)) continue;
 
                        // Generate something like <file type="file" client="site" id="com_kunena_fi-FI">com_kunena_fi-FI_v2.0.0.zip</file>
                        $file = $files->addChild('file', array_pop($search));
                        $file->addAttribute('type', 'file');
                        $file->addAttribute('client', 'site');
                        $file->addAttribute('id', $this->name.'_'.$language['tag']);
                        echo sprintf('Installing language %s - %s ...', $language['tag'], $language['name']) . '<br />';
                }
 
                if (empty($files)) {
                        // No packages to install: replace failure message with something that's more descriptive.
                        $app->enqueueMessage(sprintf ( 'Your site is English only. There\'s no need to install language pack.' ), 'notice');
                        return false;
                }
 
                return true;
        }
 
        public function uninstallLanguage($tag, $name) {
                $table = JTable::getInstance('extension');
                $id = $table->find(array('type'=>'file', 'element'=>"{$this->name}_{$tag}"));
                if (!$id) return;
 
                $installer = new JInstaller();
                $installer->uninstall ( 'file', $id );
        }
}

Kopier så blot alle sprog zip-filerne (eller installerbare mapper) ind under sprogmappen. Vær blot sikker på at de alle anvender den samme navne konvention inden du oprette installationspakken.

Det smarte ved den ovennævnte installationspakke er at du ikke behøver at ændre noget i scriptet hvis sprog for din udvidelse bliver tilføjet, fjernet eller opdateret.

Sponsorer

Danhost