Archived

Developing a MVC Component/Adding language management: Difference between revisions

From Joomla! Documentation

Cdemko (talk | contribs)
 
(89 intermediate revisions by 17 users not shown)
Line 1: Line 1:
{{underconstruction}}
{{version/tutor|2.5}}
== Articles in this series ==
{{Chunk:Developing a Model-View-Controller (MVC) Component for Joomla!2.5 - Contents}}
* [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 01|Developing a Basic Component]]
* [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 02|Adding a view to the site part]]
* [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 03|Adding a menu type to the backend part]]
* [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 04|Adding a model to the site part]]
* [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 05|Adding a variable request in the menu type]]
* [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 06|Using the database]]
* [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 07|Basic backend]]
* [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 08|Adding language management]]


== Indroduction ==
== Introduction ==
This tutorial is part of the [[Developing a Model-View-Controller (MVC) Component for Joomla!1.6]] tutorial. You are encouraged to read the previous parts of the tutorial before reading this.
This tutorial is part of the [[Developing a Model-View-Controller (MVC) Component for Joomla!2.5]] tutorial. You are encouraged to read the previous parts of the tutorial before reading this.


Joomla!1.6 manages languages for components in four different situations:
Joomla!2.5 manages languages for components in four different situations:
* displaying a component in the public site
* displaying a component in the public site
* managing a component in the backend
* managing a component in the backend
* managing menus in the backend
* managing menus in the backend
* installing a component (new in 1.6)
* installing a component (new in 1.7)


Joomla!1.6 uses two different location folder for languages:
Joomla!2.5 uses two different location folder for languages:
* one in ''administrator/language'' or ''language''
* one in ''administrator/language'' or ''language''
* one in the component folder (''administrator/component/*component*/language'' or ''component/*component*/language'')
* one in the component folder (''administrator/components/*component*/language'' or ''components/*component*/language'')


It depends how the component is installed.
It depends how the component is installed.
== Adding language translation in the public site ==
With your favorite file manager and editor, put a file ''site/language/en-GB/en-GB.com_helloworld.ini''. This file will contain translation for the public part. For the moment, this file is empty
<span id="site/language/en-GB/en-GB.com_helloworld.ini">
''site/language/en-GB/en-GB.com_helloworld.ini''
<source lang="ini">
</source>
</span>
For the moment, there are no translations strings in this file.
== Adding language translation when managing the component ==
With your favorite file manager and editor, put a file ''admin/language/en-GB/en-GB.com_helloworld.ini''. This file will contain translation for the backend part.
<span id="admin/language/en-GB/en-GB.com_helloworld.ini">
''admin/language/en-GB/en-GB.com_helloworld.ini''
<source lang="ini">
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC="This message will be displayed"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL="Message"
COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING="Greeting"
COM_HELLOWORLD_HELLOWORLD_HEADING_ID="Id"
</source>
</span>
== Adding language translation when managing the menus in the backend ==
With your favorite file manager and editor, put a file ''admin/language/en-GB/en-GB.com_helloworld.sys.ini''. This file will contain translation for the backend part.
<span id="admin/language/en-GB/en-GB.com_helloworld.sys.ini">
''admin/language/en-GB/en-GB.com_helloworld.sys.ini''
<source lang="ini">
COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="This is the Hello World description"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE="Hello World"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC="This view displays a selected message"
COM_HELLOWORLD_MENU="Hello World!"
</source>
</span>
== Language File Location Options ==
Starting with version 1.7 there are 2 ways to install language files for an extension.
One can use one or the other or a combination of both.
The 1.5 way will install the files in the CORE language folders (ROOT/administrator/language/ and ROOT/language/ ).
The new way —since 1.6— includes the files in a "language" folder installed at the root of the extension.
Therefore an extension can include a language folder with a .sys.ini different from the one installed in joomla core language folders (this last one not being included in that language folder but in root or any other folder not installed).
This let's display 2 different descriptions: one from the sys.ini in the "language" folder is used as a message displayed when install has been done, the other (from the .ini) is used for "normal" operation, i.e. when the extension is edited in back-end.
This can be extremely useful when installing also uses some scripts and requires a different value for the description.
'''Note:''' The sys.ini file is also used to translate the name of the extensions in some back-end Managers and to provide menu translation for components
Therefore, the xml would include since 1.6
<source lang="xml">
<files>
<[...]
<folder>language</folder>  // This folder HAS to include the right subfolders, i.e. language/en-GB/ ... language/fr-FR/
<filename>whatever</filename>
[...]
</files>
</source>
and/or then (1.5 way):
<source lang="xml">
<languages folder="joomlacorelanguagefolders"> // if using another language folder for cleanliness (any folder name will fit)
<language tag="en-GB">en-GB/en-GB.whatever.ini</language> // or
<language tag="en-GB">en-GB.whatever.ini</language> if no tagged subfolder
<language tag="en-GB">en-GB/en-GB.whatever.sys.ini</language> // or
<language tag="en-GB">en-GB.whatever.sys.ini</language> if no tagged subfolder
</languages>
</source>
or simply in ROOT
<source lang="xml">
<languages>
<language tag="en-GB">en-GB.whatever.ini</language>
<language tag="en-GB">en-GB.whatever.sys.ini</language>
</languages>
</source>
Language file used by the install script during install of a component(''the first install'' not upgrade) obeys specific rules described at http://docs.joomla.org/Specification_of_language_files. During the first install, only the language file included in the component folder (/administrator/components/com_helloworld/language) is used when present. If this file is only provided in the CORE language folder (/administrator/language), no translation occurs. This also applies to KEYs used in the manifest file.
When upgrading or uninstalling the extension (not installing), it is the sys.ini file present in the extension root language folder which will display the result of the install from the description key/value. Thereafter, if present, the sys.ini as well as the ini installed in CORE language folder will have priority over the files present in the root language folder of the extension.
'''Note:'''
''One advantage of installing the files in the extension "language" folder is that these are not touched when updating a language pack.
The other advantage is that this folder can include multiple languages (en-GB always, fr-FR, it-IT, etc.) not requiring the user to install the corresponding language pack. This is handy as they are available if, later on, a user installs the corresponding pack.''
== Adding translation when installing the component ==
See: [[J2.5:Developing_a_MVC_Component/Adding_language_management#Language_File_Location_Options|Language File Location Options]]
With your favorite file manager and editor, put a file ''EXTENSIONROOT/language/en-GB/en-GB.myextension.sys.ini''. This file will contain translation for the install.
<span id="EXTENSIONROOT/language/en-GB/en-GB.myextension.sys.ini">
''language/en-GB/en-GB.myextension.sys.ini''
<source lang="ini">
COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="This is the Hello World description"
</source>
</span>
The ''COM_HELLOWORLD_DESCRIPTION'' can be used in the [[#helloworld.xml|helloworld.xml]] file


== Packaging the component ==
== Packaging the component ==
Line 29: Line 124:
Content of your code directory
Content of your code directory
* ''[[#helloworld.xml|helloworld.xml]]''
* ''[[#helloworld.xml|helloworld.xml]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|site/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_02#site/helloworld.php|site/helloworld.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_02#site/helloworld.php|site/helloworld.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|site/views/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_02#site/controller.php|site/controller.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|site/views/helloworld/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/views/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_04#site/views/helloworld/view.html.php|site/views/helloworld/view.html.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/views/helloworld/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|site/views/helloworld/tmpl/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_04#site/views/helloworld/view.html.php|site/views/helloworld/view.html.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_06#site/views/helloworld/tmpl/default.xml|site/views/helloworld/tmpl/default.xml]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/views/helloworld/tmpl/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|site/models/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_06#site/views/helloworld/tmpl/default.xml|site/views/helloworld/tmpl/default.xml]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_06#site/models/helloworld.php|site/models/helloworld.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_02#site/views/helloworld/tmpl/default.php|site/views/helloworld/tmpl/default.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_02#site/views/helloworld/tmpl/default.php|site/views/helloworld/tmpl/default.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/models/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|admin/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_06#site/models/helloworld.php|site/models/helloworld.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_07#admin/helloworld.php|admin/helloworld.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/language/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_07#admin/controller.php|admin/controller.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|site/language/en-GB/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|admin/sql/index.html]]''
* ''[[#site/language/en-GB/en-GB.com_helloworld.ini|site/language/en-GB/en-GB.com_helloworld.ini]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_06#admin/sql/install.mysql.utf8.sql|admin/sql/install.mysql.utf8.sql]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_06#admin/sql/uninstall.mysql.utf8.sql|admin/sql/uninstall.mysql.utf8.sql]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/helloworld.php|admin/helloworld.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_06#admin/sql/update.mysql.utf8.sql|admin/sql/update.mysql.utf8.sql]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/controller.php|admin/controller.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|admin/models/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/sql/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|admin/models/fields/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_06#admin/sql/install.mysql.utf8.sql|admin/sql/install.mysql.utf8.sql]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_06#admin/models/fields/helloworld.php|admin/models/fields/helloworld.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_06#admin/sql/uninstall.mysql.utf8.sql|admin/sql/uninstall.mysql.utf8.sql]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_07#admin/models/helloworldlist.php|admin/models/helloworldlist.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/sql/updates/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|admin/views/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/sql/updates/mysql/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|admin/views/helloworldlist/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#admin/sql/updates/mysql/0.0.1.sql|admin/sql/updates/mysql/0.0.1.sql]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_07#admin/views/helloworldlist/view.html.php|admin/views/helloworldlist/view.html.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_06#admin/sql/install.mysql.utf8.sql|admin/sql/updates/mysql/0.0.6.sql]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|admin/views/helloworldlist/tmpl/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/models/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_07#admin/views/helloworldlist/tmpl/default.php|admin/views/helloworldlist/tmpl/default.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/models/fields/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_07#admin/views/helloworldlist/tmpl/default_head.php|admin/views/helloworldlist/tmpl/default_head.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_06#admin/models/fields/helloworld.php|admin/models/fields/helloworld.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_07#admin/views/helloworldlist/tmpl/default_body.php|admin/views/helloworldlist/tmpl/default_body.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/models/helloworlds.php|admin/models/helloworlds.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_07#admin/views/helloworldlist/tmpl/default_foot.php|admin/views/helloworldlist/tmpl/default_foot.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/views/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_01#index.html|admin/tables/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/views/helloworlds/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!1.6_-_Part_06#admin/tables/helloworld.php|admin/tables/helloworld.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/views/helloworlds/view.html.php|admin/views/helloworlds/view.html.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/views/helloworlds/tmpl/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/views/helloworlds/tmpl/default.php|admin/views/helloworlds/tmpl/default.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/views/helloworlds/tmpl/default_head.php|admin/views/helloworlds/tmpl/default_head.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/views/helloworlds/tmpl/default_body.php|admin/views/helloworlds/tmpl/default_body.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_07#admin/views/helloworlds/tmpl/default_foot.php|admin/views/helloworlds/tmpl/default_foot.php]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_01#index.html|admin/tables/index.html]]''
* ''[[Developing_a_Model-View-Controller_(MVC)_Component_for_Joomla!2.5_-_Part_06#admin/tables/helloworld.php|admin/tables/helloworld.php]]''
* ''[[#admin/language/en-GB/en-GB.com_helloworld.ini|admin/language/en-GB/en-GB.com_helloworld.ini]]''
* ''[[#admin/language/en-GB/en-GB.com_helloworld.sys.ini|admin/language/en-GB/en-GB.com_helloworld.sys.ini]]''
* ''[[#language/en-GB/en-GB.ini|language/en-GB/en-GB.ini]]''


Create a compressed file of this directory or directly download the [http://joomlacode.org/gf/download/frsrelease/11394/46017/com_helloworld-1.6-part08.zip archive] and install it using the extension manager of Joomla!1.6. You can add a menu item of this component using the menu manager in the backend.
Create a compressed file of this directory or directly download the [http://joomlacode.org/gf/download/frsrelease/11394/58398/com_helloworld-1.6-part08.zip archive] and install it using the extension manager of Joomla. You can add a menu item of this component using the menu manager in the backend.


<span id="helloworld.xml">
<span id="helloworld.xml">
Line 67: Line 172:
<source lang="xml">
<source lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.6.0" method="upgrade">
<extension type="component" version="2.5.0" method="upgrade">
<name>Hello World!</name>
 
<name>COM_HELLOWORLD</name>
<!-- The following elements are optional and free of formatting constraints -->
<creationDate>November 2009</creationDate>
<creationDate>November 2009</creationDate>
<author>John Doe</author>
<author>John Doe</author>
Line 75: Line 182:
<copyright>Copyright Info</copyright>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<license>License Info</license>
<version>0.0.7</version>
<!--  The version string is recorded in the components table -->
<description>Description of the Hello World component ...</description>
<version>0.0.8</version>
<!-- The description is optional and defaults to the name -->
<description>COM_HELLOWORLD_DESCRIPTION</description>


<install> <!-- Runs on install -->
<install> <!-- Runs on install -->
Line 88: Line 197:
</sql>
</sql>
</uninstall>
</uninstall>
<update> <!-- Runs on update -->
<update> <!-- Runs on update; New in 2.5 -->
<sql>
<schemas>
<file driver="mysql" charset="utf8">sql/update.mysql.utf8.sql</file>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</sql>
</schemas>
</update>
</update>


<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->
<files folder="site">
<files folder="site">
<filename>index.html</filename>
<filename>index.html</filename>
Line 100: Line 213:
<folder>views</folder>
<folder>views</folder>
<folder>models</folder>
<folder>models</folder>
<folder>language</folder>
</files>
</files>


<administration>
<administration>
<menu>Hello World!</menu>
<!-- Administration Menu Section -->
<menu>COM_HELLOWORLD_MENU</menu>
<!-- Administration Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package -->
<files folder="admin">
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<filename>controller.php</filename>
<!-- SQL files section -->
<folder>sql</folder>
<folder>sql</folder>
<!-- tables files section -->
<folder>tables</folder>
<folder>tables</folder>
<!-- models files section -->
<folder>models</folder>
<folder>models</folder>
<!-- views files section -->
<!-- views files section -->
<folder>views</folder>
<folder>views</folder>
</files>
</files>
<languages folder="admin">
<language tag="en-GB">language/en-GB/en-GB.com_helloworld.ini</language>
<language tag="en-GB">language/en-GB/en-GB.com_helloworld.sys.ini</language>
</languages>
</administration>
</administration>
</extension>
</extension>
</source>
</source>
</span>
</span>
In this ''helloworld.xml'' file, languages are installed in:
* ''administrator/language'' for the admin part (look at the xml languages tag)
* ''components/com_helloworld/language'' for the site part (there are no xml languages tag in the site part of the xml description file, but the language folder is included)
The corrected zip file, download and delete the .png extension before use:
[http://docs.joomla.org/images/6/6e/Com_helloworld-1.6-part08.zip.png]
== Navigate ==
[[Developing a Model-View-Controller (MVC) Component for Joomla!2.5 - Part 07|Prev: Basic backend]]
[[Developing a Model-View-Controller (MVC) Component for Joomla!2.5 - Part 09|Next: Adding backend actions]]


== Contributors ==
== Contributors ==
*[[User:cdemko|Christophe Demko]]
*[[User:cdemko|Christophe Demko]]
*[[User:oaksu|Ozgur Aksu]]


[[Category:Development]]
[[Category:Development]]
[[category:Joomla! 1.6]]
[[Category:Joomla! 1.6]]
[[category:Manual]]
[[Category:Joomla! 1.7]]
[[Category:Joomla! 2.5]]

Latest revision as of 22:18, 26 April 2022


Introduction

This tutorial is part of the Developing a Model-View-Controller (MVC) Component for Joomla!2.5 tutorial. You are encouraged to read the previous parts of the tutorial before reading this.

Joomla!2.5 manages languages for components in four different situations:

  • displaying a component in the public site
  • managing a component in the backend
  • managing menus in the backend
  • installing a component (new in 1.7)

Joomla!2.5 uses two different location folder for languages:

  • one in administrator/language or language
  • one in the component folder (administrator/components/*component*/language or components/*component*/language)

It depends how the component is installed.

Adding language translation in the public site

With your favorite file manager and editor, put a file site/language/en-GB/en-GB.com_helloworld.ini. This file will contain translation for the public part. For the moment, this file is empty

site/language/en-GB/en-GB.com_helloworld.ini

For the moment, there are no translations strings in this file.

Adding language translation when managing the component

With your favorite file manager and editor, put a file admin/language/en-GB/en-GB.com_helloworld.ini. This file will contain translation for the backend part.

admin/language/en-GB/en-GB.com_helloworld.ini

COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC="This message will be displayed"
COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL="Message"
COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING="Greeting"
COM_HELLOWORLD_HELLOWORLD_HEADING_ID="Id"

Adding language translation when managing the menus in the backend

With your favorite file manager and editor, put a file admin/language/en-GB/en-GB.com_helloworld.sys.ini. This file will contain translation for the backend part.

admin/language/en-GB/en-GB.com_helloworld.sys.ini

COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="This is the Hello World description"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE="Hello World"
COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC="This view displays a selected message"
COM_HELLOWORLD_MENU="Hello World!"

Language File Location Options

Starting with version 1.7 there are 2 ways to install language files for an extension. One can use one or the other or a combination of both.

The 1.5 way will install the files in the CORE language folders (ROOT/administrator/language/ and ROOT/language/ ). The new way —since 1.6— includes the files in a "language" folder installed at the root of the extension.

Therefore an extension can include a language folder with a .sys.ini different from the one installed in joomla core language folders (this last one not being included in that language folder but in root or any other folder not installed). This let's display 2 different descriptions: one from the sys.ini in the "language" folder is used as a message displayed when install has been done, the other (from the .ini) is used for "normal" operation, i.e. when the extension is edited in back-end. This can be extremely useful when installing also uses some scripts and requires a different value for the description.

Note: The sys.ini file is also used to translate the name of the extensions in some back-end Managers and to provide menu translation for components

Therefore, the xml would include since 1.6

<files>
<[...]
<folder>language</folder>  // This folder HAS to include the right subfolders, i.e. language/en-GB/ ... language/fr-FR/
<filename>whatever</filename>
[...]
</files>

and/or then (1.5 way):

<languages folder="joomlacorelanguagefolders"> // if using another language folder for cleanliness (any folder name will fit)
<language tag="en-GB">en-GB/en-GB.whatever.ini</language> // or
<language tag="en-GB">en-GB.whatever.ini</language> if no tagged subfolder
<language tag="en-GB">en-GB/en-GB.whatever.sys.ini</language> // or
<language tag="en-GB">en-GB.whatever.sys.ini</language> if no tagged subfolder
</languages>

or simply in ROOT

<languages>
<language tag="en-GB">en-GB.whatever.ini</language>
<language tag="en-GB">en-GB.whatever.sys.ini</language>
</languages>

Language file used by the install script during install of a component(the first install not upgrade) obeys specific rules described at http://docs.joomla.org/Specification_of_language_files. During the first install, only the language file included in the component folder (/administrator/components/com_helloworld/language) is used when present. If this file is only provided in the CORE language folder (/administrator/language), no translation occurs. This also applies to KEYs used in the manifest file.

When upgrading or uninstalling the extension (not installing), it is the sys.ini file present in the extension root language folder which will display the result of the install from the description key/value. Thereafter, if present, the sys.ini as well as the ini installed in CORE language folder will have priority over the files present in the root language folder of the extension.

Note: One advantage of installing the files in the extension "language" folder is that these are not touched when updating a language pack. The other advantage is that this folder can include multiple languages (en-GB always, fr-FR, it-IT, etc.) not requiring the user to install the corresponding language pack. This is handy as they are available if, later on, a user installs the corresponding pack.

Adding translation when installing the component

See: Language File Location Options

With your favorite file manager and editor, put a file EXTENSIONROOT/language/en-GB/en-GB.myextension.sys.ini. This file will contain translation for the install.

language/en-GB/en-GB.myextension.sys.ini

COM_HELLOWORLD="Hello World!"
COM_HELLOWORLD_DESCRIPTION="This is the Hello World description"

The COM_HELLOWORLD_DESCRIPTION can be used in the helloworld.xml file

Packaging the component

Content of your code directory

Create a compressed file of this directory or directly download the archive and install it using the extension manager of Joomla. You can add a menu item of this component using the menu manager in the backend.

helloworld.xml

<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="2.5.0" method="upgrade">

	<name>COM_HELLOWORLD</name>
	<!-- The following elements are optional and free of formatting constraints -->
	<creationDate>November 2009</creationDate>
	<author>John Doe</author>
	<authorEmail>john.doe@example.org</authorEmail>
	<authorUrl>http://www.example.org</authorUrl>
	<copyright>Copyright Info</copyright>
	<license>License Info</license>
	<!--  The version string is recorded in the components table -->
	<version>0.0.8</version>
	<!-- The description is optional and defaults to the name -->
	<description>COM_HELLOWORLD_DESCRIPTION</description>

	<install> <!-- Runs on install -->
		<sql>
			<file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
		</sql>
	</install>
	<uninstall> <!-- Runs on uninstall -->
		<sql>
			<file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
		</sql>
	</uninstall>
	<update> <!-- Runs on update; New in 2.5 -->
		<schemas>
			<schemapath type="mysql">sql/updates/mysql</schemapath>
		</schemas>
	</update>

	<!-- Site Main File Copy Section -->
	<!-- Note the folder attribute: This attribute describes the folder
		to copy FROM in the package to install therefore files copied
		in this section are copied from /site/ in the package -->
	<files folder="site">
		<filename>index.html</filename>
		<filename>helloworld.php</filename>
		<filename>controller.php</filename>
		<folder>views</folder>
		<folder>models</folder>
		<folder>language</folder>
	</files>

	<administration>
		<!-- Administration Menu Section -->
		<menu>COM_HELLOWORLD_MENU</menu>
		<!-- Administration Main File Copy Section -->
		<!-- Note the folder attribute: This attribute describes the folder
			to copy FROM in the package to install therefore files copied
			in this section are copied from /admin/ in the package -->
		<files folder="admin">
			<!-- Admin Main File Copy Section -->
			<filename>index.html</filename>
			<filename>helloworld.php</filename>
			<filename>controller.php</filename>
			<!-- SQL files section -->
			<folder>sql</folder>
			<!-- tables files section -->
			<folder>tables</folder>
			<!-- models files section -->
			<folder>models</folder>
			<!-- views files section -->
			<folder>views</folder>
		</files>
		<languages folder="admin">
			<language tag="en-GB">language/en-GB/en-GB.com_helloworld.ini</language>
			<language tag="en-GB">language/en-GB/en-GB.com_helloworld.sys.ini</language>
		</languages>
	</administration>

</extension>

In this helloworld.xml file, languages are installed in:

  • administrator/language for the admin part (look at the xml languages tag)
  • components/com_helloworld/language for the site part (there are no xml languages tag in the site part of the xml description file, but the language folder is included)

The corrected zip file, download and delete the .png extension before use: [1]

Navigate

Prev: Basic backend Next: Adding backend actions

Contributors