Actions

Difference between revisions of "Creating language packs for extensions in Joomla 2.5"

From Joomla! Documentation

(Special lang files for labels)
(10 intermediate revisions by one user not shown)
Line 1: Line 1:
{{review}}
 
 
{{RightTOC}}Although Joomla 2.5 supports installing language files for the front end (site) or back end (admin), it has no dedicated way to install language files for extensions (components, plugins, modules) unless they are installed with the extension itself.
 
{{RightTOC}}Although Joomla 2.5 supports installing language files for the front end (site) or back end (admin), it has no dedicated way to install language files for extensions (components, plugins, modules) unless they are installed with the extension itself.
  
Fortunately, since Joomla 1.6, Joomla supports a powerful way to install an arbitrary set of files called a 'files' installation unit. (See [http://joomlacode.org/gf/project/joomla/scmsvn/?action=browse&path=%2Fdevelopment%2Ftrunk%2Ftests%2F_data%2Finstaller_packages%2Ffiles_test1%2F Installation unit for an arbitrary set of files named 'files_test1']).
+
Fortunately, since Joomla 1.6, Joomla! supports a powerful way to install an arbitrary set of files called a 'files' installation unit.
 +
Here you will find examples for file structure, XML and lang files content and an installation unit set of files.
 +
* All of the language files could technically have been in the top directory, but this example will show how to set up files in folders in the language pack folder using the 'folder=' attribute in the XML <files> tag.  Also, putting them in folders as shown ensures that the installer can find them during installation to use them to display the name of the language pack as part of the installation confirmation.
  
 
== Example Plugin Language Pack ==
 
== Example Plugin Language Pack ==
Line 22: Line 23:
 
where the file 'ganymede_zz_zz_language_pack.xml' is the installation manifest file.   
 
where the file 'ganymede_zz_zz_language_pack.xml' is the installation manifest file.   
  
 +
=== Special lang files for labels ===
 +
You need to create one file for the lang pack, and a reference language file for en-GB. They will be installed in Joomla admin language folder and the contents its displayed on the install screen and as label in extension manager
 +
 +
The file  'en-GB.files_ganymede_zz_zz_language_pack.sys.ini' would have this language keys for english:
 +
<pre>
 +
; package : plg_ganymede en-GB file for zz-ZZ language pack
 +
; translator : Galileu Galilei
 +
; copyright    Copyright (c) 2006 - 2012. All rights reserved.
 +
; License : GNU General Public License version 2 or later: http://www.gnu.org/copyleft/gpl.html
 +
; Note : All ini files need to be saved as UTF-8 - No BOM
 +
 +
FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK="Plugin Ganymede zz-ZZ Language Pack"
 +
FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK_DESC="Plugin Ganymede zz-ZZ Language Pack created by zz-ZZ Team"
 +
</pre>
 +
 +
The file 'zz-ZZ.files_ganymede_zz_zz_language_pack.sys.ini' would have similar contents only for zz-ZZ lang:
 +
<pre>
 +
; package : plg_ganymede zz-ZZ language pack
 +
; translator : Galileu Galilei
 +
; copyright    Copyright (c) 2006 - 2012. All rights reserved.
 +
; License : GNU General Public License version 2 or later: http://www.gnu.org/copyleft/gpl.html
 +
; Note : All ini files need to be saved as UTF-8 - No BOM
 +
 +
FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK="Plugin Ganymede zz-ZZ Language Pack"
 +
FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK_DESC="Plugin Ganymede zz-ZZ Language Pack created by zz-ZZ Team"
 +
</pre>
 +
 +
* Note that the name of the language key (to the left of the equals sign) must be identical to the name of the manifest file prefixed with 'files_' in order for the extension manager to find it.
 +
As in 'FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK' for XML file named 'ganymede_zz_zz_language_pack.xml' .
 +
 +
=== Example plugin manifest file ===
 
The manifest file would look something like this:
 
The manifest file would look something like this:
<code lang="xml">
+
<source lang="php">
 
     <?xml version="1.0" encoding="utf-8"?>
 
     <?xml version="1.0" encoding="utf-8"?>
 
     <extension version="2.5" type="file" method="upgrade">
 
     <extension version="2.5" type="file" method="upgrade">
       <name>ganymede_zz_zz_language_pack</name>
+
       <name>GANYMEDE_ZZ_ZZ_LANGUAGE_PACK</name>
 
       <version>1.0.0</version>
 
       <version>1.0.0</version>
       <creationDate></creationDate>
+
       <creationDate>07 January 1609</creationDate>
       <author></author>
+
       <author>Galileu Galilei</author>
 
       <authorEmail></authorEmail>
 
       <authorEmail></authorEmail>
 
       <authorUrl></authorUrl>
 
       <authorUrl></authorUrl>
 
       <copyright>Copyright (C) 2011 - 2012. All rights reserved.</copyright>
 
       <copyright>Copyright (C) 2011 - 2012. All rights reserved.</copyright>
 
       <license>GNU/GPL http://www.gnu.org/licenses/gpl-2.0.html</license>
 
       <license>GNU/GPL http://www.gnu.org/licenses/gpl-2.0.html</license>
       <description>GANYMEDE_ZZ_ZZ_LANGUAGE_PACK</description>
+
       <description>GANYMEDE_ZZ_ZZ_LANGUAGE_PACK_DESC</description>
 
       <fileset>
 
       <fileset>
 
         <!-- Language files for the plugin -->
 
         <!-- Language files for the plugin -->
Line 42: Line 74:
 
           <filename>zz-ZZ.plg_content_ganymede.sys.ini</filename>
 
           <filename>zz-ZZ.plg_content_ganymede.sys.ini</filename>
 
         </files>
 
         </files>
         <!-- Languages files for this set of files (for label in extension manager) -->
+
         <!-- Lang pack languages -->
 
         <files folder="language/en-GB" target="language/en-GB">
 
         <files folder="language/en-GB" target="language/en-GB">
 
           <filename>en-GB.files_ganymede_zz_zz_language_pack.sys.ini</filename>
 
           <filename>en-GB.files_ganymede_zz_zz_language_pack.sys.ini</filename>
Line 50: Line 82:
 
         </files>
 
         </files>
 
       </fileset>
 
       </fileset>
 +
    <!-- Lang pack updates -->
 
     <updateservers>
 
     <updateservers>
 
         <server type="collection" priority="1" name="zz-ZZ Language Updates">http://update.zzZZ.com/translationlist.xml</server>
 
         <server type="collection" priority="1" name="zz-ZZ Language Updates">http://update.zzZZ.com/translationlist.xml</server>
 
     </updateservers>
 
     </updateservers>
 
     </extension>
 
     </extension>
</code>
+
</source>
  
 
Special note:
 
Special note:
This example includes also the update servers statement for languages updates using the discovery feature on Joomla Extensions manager
+
This example includes also the update servers statement for one click languages updates using the discovery feature on Joomla Extensions manager
  
  
Line 63: Line 96:
 
* Once this installed, the pseudo-language pack will be listed in the Extension manager (not the language manager).
 
* Once this installed, the pseudo-language pack will be listed in the Extension manager (not the language manager).
 
* This approach installs the plugin language files into the correct location inside the plugin folder.  This is the new approach for the location of extension language files in Joomla 1.6+.
 
* This approach installs the plugin language files into the correct location inside the plugin folder.  This is the new approach for the location of extension language files in Joomla 1.6+.
* The language files 'zz-ZZ.files_ganymede_zz_zz_language_pack.sys.ini' (and its English counterpart) will be put into the top-level (site) language/ folder. They are only needed for displaying the name of this pseudo-language pack in the Extension manager.
+
* The language files 'zz-ZZ.files_ganymede_zz_zz_language_pack.sys.ini' (and its English counterpart) will be put into the top-level (site) language/ folder. They are only needed for displaying the name of this pseudo-language pack in the Extension manager.
* The English version of the language pack file was included for convenience since English is often a second language for many sites.
+
* The English version of the language pack file need to be included. This is not only for convenience even if English is often a second language for many sites.
* All of the language files could technically have been in the top directory, but this example shows how to set up files in folders in the language pack folder using the 'folder=' attribute in the XML <files> tag as shown.  Also, putting them in folders as shown ensures that the installer can find them during installation to use them to display the name of the language pack as part of the installation confirmation.
+
  
The file 'zz-ZZ.files_ganymede_zz_zz_language_pack.sys.ini' might have only one line like this:
 
<pre>
 
FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK="Plugin Ganymede zz-ZZ Language Pack"
 
</pre>
 
* The English version would have similar contents.
 
* Note that both the XML items 'name' and 'description' use the same term here (GANYMEDE_ZZ_ZZ_LANGUAGE_PACK) for convenience.  If you use different terms, be sure to add separate entries for each in the file 'zz-ZZ.files_ganymede_zz_zz_language_pack.sys.ini'.
 
* Note that the name of the language key (to the left of the equals sign) must be identical to the name of the manifest file prefixed with 'files_' in order for the extension manager to find it.
 
  
 
== Creating a language pack for several extensions in one file ==
 
== Creating a language pack for several extensions in one file ==
 
This same a approach can be used to create a single language pack for several extensions at once.  Just create a language pack as shown above for a plugin and add additional <files> sections for each component, plugin, and module.  An additional benefit is that language-specific versions of the help file can be installed in their correct locations as well.   
 
This same a approach can be used to create a single language pack for several extensions at once.  Just create a language pack as shown above for a plugin and add additional <files> sections for each component, plugin, and module.  An additional benefit is that language-specific versions of the help file can be installed in their correct locations as well.   
  
For example suppose we have an extension composed a plugin 'ganymede' and a component 'jupiter'.  To create the zz-ZZ language pack, set up files in the following directory structure:
+
For example suppose we have an extension composed by a plugin 'ganymede' and a component 'jupiter'.  To create the zz-ZZ language pack, set up files in the following directory structure:
 
<pre>
 
<pre>
── extension_zz_zz_language_pack
+
── jupiter_zz_zz_language_pack
   ├── extension_zz_zz_language_pack.xml
+
   ├── jupiter_zz_zz_language_pack.xml
 
   ├── com_jupiter
 
   ├── com_jupiter
 
   │  ├── administrator
 
   │  ├── administrator
Line 92: Line 117:
 
   │  │  ├── zz-ZZ.com_jupiter.ini
 
   │  │  ├── zz-ZZ.com_jupiter.ini
 
   │  │  └── zz-ZZ.com_jupiter.sys.ini
 
   │  │  └── zz-ZZ.com_jupiter.sys.ini
   │  └── site
+
   │  └── language
 
   │      ├── index.html
 
   │      ├── index.html
 
   │      └── zz-ZZ.com_jupiter.ini
 
   │      └── zz-ZZ.com_jupiter.ini
Line 101: Line 126:
 
   └── language
 
   └── language
 
       ├── en-GB
 
       ├── en-GB
       │  └── en-GB.files_extension_zz_zz_language_pack.sys.ini
+
       │  └── en-GB.files_jupiter_zz_zz_language_pack.sys.ini
 
       └── zz-ZZ
 
       └── zz-ZZ
           └── zz-ZZ.files_extension_zz_zz_language_pack.sys.ini
+
           └── zz-ZZ.files_jupiter_zz_zz_language_pack.sys.ini
 
</pre>
 
</pre>
  
The corresponding manifest file, extension_zz_zz_language_pack.xml, would like something like this:
 
  
<code lang="xml">
+
=== Manifest file for component and plugin ===
 +
The corresponding manifest file for jupiter_zz_zz_language_pack.xml, would like something like this:
 +
 
 +
 
 +
<source lang="php">
 
   <?xml version="1.0" encoding="utf-8"?>
 
   <?xml version="1.0" encoding="utf-8"?>
 
   <extension version="2.5" type="file" method="upgrade">
 
   <extension version="2.5" type="file" method="upgrade">
       <name>extension_zz_zz_language_pack</name>
+
       <name>FILES_JUPITER_ZZ_ZZ_LANGUAGE_PACK</name>
 
       <version>1.0.0</version>
 
       <version>1.0.0</version>
       <creationDate></creationDate>
+
       <creationDate>07 January 1609</creationDate>
       <author></author>
+
       <author>Galileu Galilei</author>
 
       <authorEmail></authorEmail>
 
       <authorEmail></authorEmail>
 
       <authorUrl></authorUrl>
 
       <authorUrl></authorUrl>
 
       <copyright>Copyright (C) 2011 ???. All rights reserved.</copyright>
 
       <copyright>Copyright (C) 2011 ???. All rights reserved.</copyright>
 
       <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
 
       <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
       <description>EXTENSION_ZZ_ZZ_LANGUAGE_PACK</description>
+
       <description>FILES_JUPITER_ZZ_ZZ_LANGUAGE_PACK_DESC</description>
 
       <fileset>
 
       <fileset>
           <!-- Admin Jupiter component language folder -->
+
           <!-- Admin component language folder -->
 
           <files folder="com_jupiter/administrator" target="administrator/components/com_jupiter/language/zz-ZZ">
 
           <files folder="com_jupiter/administrator" target="administrator/components/com_jupiter/language/zz-ZZ">
 
               <filename>index.html</filename>
 
               <filename>index.html</filename>
Line 132: Line 160:
 
           </files>
 
           </files>
 
           <!-- Site component language folder -->
 
           <!-- Site component language folder -->
           <files folder="com_jupiter/site" target="components/com_jupiter/language/zz-ZZ">
+
           <files folder="com_jupiter/language" target="components/com_jupiter/language/zz-ZZ">
 
               <filename>index.html</filename>
 
               <filename>index.html</filename>
 
               <filename>zz-ZZ.com_jupiter.ini</filename>
 
               <filename>zz-ZZ.com_jupiter.ini</filename>
Line 142: Line 170:
 
               <filename>zz-ZZ.plg_content_ganymede.sys.ini</filename>
 
               <filename>zz-ZZ.plg_content_ganymede.sys.ini</filename>
 
           </files>
 
           </files>
           <!-- Languages files for this set of files (for label in extension manager) -->
+
           <!-- Lang pack languages -->
 
           <files folder="language/en-GB" target="language/en-GB">
 
           <files folder="language/en-GB" target="language/en-GB">
               <filename>en-GB.files_extension_zz_zz_language_pack.sys.ini</filename>
+
              <filename>index.html</filename>
 +
               <filename>en-GB.files_jupiter_zz_zz_language_pack.sys.ini</filename>
 
           </files>
 
           </files>
 
           <files folder="language/zz-ZZ" target="language/zz-ZZ">
 
           <files folder="language/zz-ZZ" target="language/zz-ZZ">
               <filename>zz-ZZ.files_extension_zz_zz_language_pack.sys.ini</filename>
+
               <filename>zz-ZZ.files_jupiter_zz_zz_language_pack.sys.ini</filename>
 
           </files>
 
           </files>
 
       </fileset>
 
       </fileset>
 +
    <updateservers>
 +
        <server type="collection" priority="1" name="zz-ZZ Language Updates">http://update.zzZZ.com/translationlist.xml</server>
 +
    </updateservers>
 
   </extension>
 
   </extension>
</code>
+
</source>
 
Note that we have created several different <files> sections for the admin language files, the admin help files, the site language files, the plugin language files, and the language files for the language pack itself.
 
Note that we have created several different <files> sections for the admin language files, the admin help files, the site language files, the plugin language files, and the language files for the language pack itself.
 +
  
 
== Example installation unit ==
 
== Example installation unit ==
Line 158: Line 191:
 
[http://joomlacode.org/gf/project/joomla/scmsvn/?action=browse&path=%2Fdevelopment%2Ftrunk%2Ftests%2F_data%2Finstaller_packages%2Ffiles_test1%2F Installation unit for an arbitrary set of files named 'files_test1']).
 
[http://joomlacode.org/gf/project/joomla/scmsvn/?action=browse&path=%2Fdevelopment%2Ftrunk%2Ftests%2F_data%2Finstaller_packages%2Ffiles_test1%2F Installation unit for an arbitrary set of files named 'files_test1']).
  
[[Category:Joomla! 2.5]]
+
 
 +
== One click updates ==
 +
Joomla has the ability to install language packs updates with just one click. This can be done for language core files but also for extensions languages files.
 +
 
 +
Read here:  [[One_click_updates_for_language_packs|One click updates for language packs]]
 +
 
 +
 
 +
[[Category:Joomla! 2.5]] [[Category:Component Development]]

Revision as of 23:47, 10 April 2012

Contents

Although Joomla 2.5 supports installing language files for the front end (site) or back end (admin), it has no dedicated way to install language files for extensions (components, plugins, modules) unless they are installed with the extension itself.

Fortunately, since Joomla 1.6, Joomla! supports a powerful way to install an arbitrary set of files called a 'files' installation unit. Here you will find examples for file structure, XML and lang files content and an installation unit set of files.

  • All of the language files could technically have been in the top directory, but this example will show how to set up files in folders in the language pack folder using the 'folder=' attribute in the XML <files> tag. Also, putting them in folders as shown ensures that the installer can find them during installation to use them to display the name of the language pack as part of the installation confirmation.

Example Plugin Language Pack

Suppose you have a content plugin named 'ganymede' that you want to create a new language pack for language zz-ZZ. Here is what your language pack files in the folder 'ganymede_zz_zz_language_pack' might look like:

── ganymede_zz_zz_language_pack
   ├── index.html
   ├── ganymede_zz_zz_language_pack.xml
   ├── zz-ZZ.plg_content_ganymede.ini
   ├── zz-ZZ.plg_content_ganymede.sys.ini
   └── language
       ├── en-GB
       │   └── en-GB.files_ganymede_zz_zz_language_pack.sys.ini
       └── zz-ZZ
           └── zz-ZZ.files_ganymede_zz_zz_language_pack.sys.ini

where the file 'ganymede_zz_zz_language_pack.xml' is the installation manifest file.

Special lang files for labels

You need to create one file for the lang pack, and a reference language file for en-GB. They will be installed in Joomla admin language folder and the contents its displayed on the install screen and as label in extension manager

The file 'en-GB.files_ganymede_zz_zz_language_pack.sys.ini' would have this language keys for english:

; package : plg_ganymede en-GB file for zz-ZZ language pack
; translator : Galileu Galilei
; copyright    Copyright (c) 2006 - 2012. All rights reserved.
; License : GNU General Public License version 2 or later: http://www.gnu.org/copyleft/gpl.html
; Note : All ini files need to be saved as UTF-8 - No BOM

FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK="Plugin Ganymede zz-ZZ Language Pack"
FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK_DESC="Plugin Ganymede zz-ZZ Language Pack created by zz-ZZ Team"

The file 'zz-ZZ.files_ganymede_zz_zz_language_pack.sys.ini' would have similar contents only for zz-ZZ lang:

; package : plg_ganymede zz-ZZ language pack
; translator : Galileu Galilei
; copyright    Copyright (c) 2006 - 2012. All rights reserved.
; License : GNU General Public License version 2 or later: http://www.gnu.org/copyleft/gpl.html
; Note : All ini files need to be saved as UTF-8 - No BOM

FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK="Plugin Ganymede zz-ZZ Language Pack"
FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK_DESC="Plugin Ganymede zz-ZZ Language Pack created by zz-ZZ Team"
  • Note that the name of the language key (to the left of the equals sign) must be identical to the name of the manifest file prefixed with 'files_' in order for the extension manager to find it.

As in 'FILES_GANYMEDE_ZZ_ZZ_LANGUAGE_PACK' for XML file named 'ganymede_zz_zz_language_pack.xml' .

Example plugin manifest file

The manifest file would look something like this:

    <?xml version="1.0" encoding="utf-8"?>
    <extension version="2.5" type="file" method="upgrade">
      <name>GANYMEDE_ZZ_ZZ_LANGUAGE_PACK</name>
      <version>1.0.0</version>
      <creationDate>07 January 1609</creationDate>
      <author>Galileu Galilei</author>
      <authorEmail></authorEmail>
      <authorUrl></authorUrl>
      <copyright>Copyright (C) 2011 - 2012. All rights reserved.</copyright>
      <license>GNU/GPL http://www.gnu.org/licenses/gpl-2.0.html</license>
      <description>GANYMEDE_ZZ_ZZ_LANGUAGE_PACK_DESC</description>
      <fileset>
        <!-- Language files for the plugin -->
        <files target="plugins/content/ganymede/language/zz-ZZ">
          <filename>index.html</filename>
          <filename>zz-ZZ.plg_content_ganymede.ini</filename>
          <filename>zz-ZZ.plg_content_ganymede.sys.ini</filename>
        </files>
        <!-- Lang pack languages -->
        <files folder="language/en-GB" target="language/en-GB">
          <filename>en-GB.files_ganymede_zz_zz_language_pack.sys.ini</filename>
        </files>
        <files folder="language/zz-ZZ" target="language/zz-ZZ">
          <filename>zz-ZZ.files_ganymede_zz_zz_language_pack.sys.ini</filename>
        </files>
      </fileset>
    <!-- Lang pack updates -->
    <updateservers>
        <server type="collection" priority="1" name="zz-ZZ Language Updates">http://update.zzZZ.com/translationlist.xml</server>
    </updateservers>
    </extension>

Special note: This example includes also the update servers statement for one click languages updates using the discovery feature on Joomla Extensions manager


A few notes and warnings:

  • Once this installed, the pseudo-language pack will be listed in the Extension manager (not the language manager).
  • This approach installs the plugin language files into the correct location inside the plugin folder. This is the new approach for the location of extension language files in Joomla 1.6+.
  • The language files 'zz-ZZ.files_ganymede_zz_zz_language_pack.sys.ini' (and its English counterpart) will be put into the top-level (site) language/ folder. They are only needed for displaying the name of this pseudo-language pack in the Extension manager.
  • The English version of the language pack file need to be included. This is not only for convenience even if English is often a second language for many sites.


Creating a language pack for several extensions in one file

This same a approach can be used to create a single language pack for several extensions at once. Just create a language pack as shown above for a plugin and add additional <files> sections for each component, plugin, and module. An additional benefit is that language-specific versions of the help file can be installed in their correct locations as well.

For example suppose we have an extension composed by a plugin 'ganymede' and a component 'jupiter'. To create the zz-ZZ language pack, set up files in the following directory structure:

── jupiter_zz_zz_language_pack
   ├── jupiter_zz_zz_language_pack.xml
   ├── com_jupiter
   │   ├── administrator
   │   │   ├── help
   │   │   │   └── zz-ZZ
   │   │   │       ├── help.css
   │   │   │       ├── help.html
   │   │   │       └── index.html
   │   │   ├── index.html
   │   │   ├── zz-ZZ.com_jupiter.ini
   │   │   └── zz-ZZ.com_jupiter.sys.ini
   │   └── language
   │       ├── index.html
   │       └── zz-ZZ.com_jupiter.ini
   ├── plg_ganymede
   │   ├── index.html
   │   ├── zz-ZZ.plg_content_ganymede.ini
   │   └── zz-ZZ.plg_content_ganymede.sys.ini
   └── language
       ├── en-GB
       │   └── en-GB.files_jupiter_zz_zz_language_pack.sys.ini
       └── zz-ZZ
           └── zz-ZZ.files_jupiter_zz_zz_language_pack.sys.ini


Manifest file for component and plugin

The corresponding manifest file for jupiter_zz_zz_language_pack.xml, would like something like this:


  <?xml version="1.0" encoding="utf-8"?>
  <extension version="2.5" type="file" method="upgrade">
      <name>FILES_JUPITER_ZZ_ZZ_LANGUAGE_PACK</name>
      <version>1.0.0</version>
      <creationDate>07 January 1609</creationDate>
      <author>Galileu Galilei</author>
      <authorEmail></authorEmail>
      <authorUrl></authorUrl>
      <copyright>Copyright (C) 2011 ???. All rights reserved.</copyright>
      <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>
      <description>FILES_JUPITER_ZZ_ZZ_LANGUAGE_PACK_DESC</description>
      <fileset>
          <!-- Admin component language folder -->
          <files folder="com_jupiter/administrator" target="administrator/components/com_jupiter/language/zz-ZZ">
              <filename>index.html</filename>
              <filename>zz-ZZ.com_jupiter.ini</filename>
              <filename>zz-ZZ.com_jupiter.sys.ini</filename>
          </files>
          <!-- Admin component zz language help folder -->
          <files folder="com_jupiter/administrator/help/" target="administrator/components/com_jupiter/help">
              <folder>zz-ZZ</folder>
          </files>
          <!-- Site component language folder -->
          <files folder="com_jupiter/language" target="components/com_jupiter/language/zz-ZZ">
              <filename>index.html</filename>
              <filename>zz-ZZ.com_jupiter.ini</filename>
          </files>
          <!-- Ganymede plugin language files -->
          <files folder="plg_ganymede" target="plugins/content/ganymede/language/zz-ZZ">
              <filename>index.html</filename>
              <filename>zz-ZZ.plg_content_ganymede.ini</filename>
              <filename>zz-ZZ.plg_content_ganymede.sys.ini</filename>
          </files>
          <!-- Lang pack languages -->
          <files folder="language/en-GB" target="language/en-GB">
              <filename>index.html</filename>
              <filename>en-GB.files_jupiter_zz_zz_language_pack.sys.ini</filename>
          </files>
          <files folder="language/zz-ZZ" target="language/zz-ZZ">
              <filename>zz-ZZ.files_jupiter_zz_zz_language_pack.sys.ini</filename>
          </files>
      </fileset>
    <updateservers>
        <server type="collection" priority="1" name="zz-ZZ Language Updates">http://update.zzZZ.com/translationlist.xml</server>
    </updateservers>
  </extension>

Note that we have created several different <files> sections for the admin language files, the admin help files, the site language files, the plugin language files, and the language files for the language pack itself.


Example installation unit

SVN 'files' for: Installation unit for an arbitrary set of files named 'files_test1').


One click updates

Joomla has the ability to install language packs updates with just one click. This can be done for language core files but also for extensions languages files.

Read here: One click updates for language packs