使用语言字符串的Joomla 2.5软件包安装

时间:2014-02-07 16:26:30

标签: joomla package joomla-extensions

我正在创建一个Joomla 2.5组件,它应该与一个相关的插件一起安装。因此,我正在使用此处所述的“包”概念:http://docs.joomla.org/Package

我的问题是:如何实现安装后显示的可翻译文本?

如果你查看我的package-xml文件,我想要翻译占位符MY_PACKAGE_DESCRIPTION。

<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="package">
    <name>My Package</name>
    <author></author>
    <creationDate>January 2014</creationDate>
    <packagename>mycomponent</packagename>
    <copyright>©2014</copyright>
    <url></url>
    <version>1.0.0</version>
    <packager></packager>
    <packagerurl></packagerurl>
    <description>MY_PACKAGE_DESCRIPTION</description>
    <update></update>
    <scriptfile>installer.php</scriptfile>
    <files folder="packages">
        <file type="component" id="com_mycomponent" >com_mycomponent.zip</file>
        <file type="plugin" id="myplugin" group="quickicon">plg_quickicon_myplugin.zip</file>
    </files>
    <languages folder="language">
        <language tag="en-GB">en-GB.pkg_mypackage.sys.ini</language>
        <language tag="de-DE">de-DE.pkg_mypackage.sys.ini</language>
    </languages>
</extension>

我尝试为软件包创建专用语言文件,但在安装过程中都没有引用我的组件或插件的语言文件。

解决方案

我终于让一切按预期工作了。您必须非常小心XML-Elements的命名以及文件的命名和位置。

cppl 一样,指出packagename需要反映在语言文件的名称中。 Joomla似乎也需要确切位置的语言文件(相对于zipfile中的根路径):

language/[language tag]/[language file]

所以最后这确实有效:

<packagename>mypackage</packagename>
...
<languages folder="language">
    <language tag="en-GB">en-GB/en-GB.pkg_mypackage.sys.ini</language>
    <language tag="de-DE">de-DE/de-DE.pkg_mypackage.sys.ini</language>
</languages>

我也在努力让安装程序脚本在程序包安装期间运行。

<scriptfile>installer.php</scriptfile>

遵循Joomla命名约定,安装程序类的正确命名必须是

class pkg_mypackageInstallerScript {
    ...
}

最后,可安装的ZIP-Package中相应的文件夹结构现在如下:

pgk_mypackage.xml
installer.php
packages/com_mycomponent.zip
packages/plg_quickicon_myplugin.zip
language/de-DE/de-DE.pkg_mypackage.sys.ini
language/en-GB/en-GB.pkg_mypackage.sys.ini

1 个答案:

答案 0 :(得分:0)

我看到的主要问题是packagename元素与language元素不匹配。你(至少在你的问题上)

<packagename>mycomponent</packagename>
...
<languages folder="language">
    <language tag="en-GB">en-GB.pkg_mypackage.sys.ini</language>
    <language tag="de-DE">de-DE.pkg_mypackage.sys.ini</language>
</languages>

要使用这些语言文件,您的<packagename>应为:

<packagename>mypackage</packagename>

如果你看一下Joomla 2.5中的软件包适配器,你可以看到这个:

public function loadLanguage($path)
{
    $this->manifest = $this->parent->getManifest();
    $extension = 'pkg_' . strtolower(JFilterInput::getInstance()->clean((string) $this->manifest->packagename, 'cmd'));
    $lang = JFactory::getLanguage();
    $source = $path;
    $lang->load($extension . '.sys', $source, null, false, false)
        || $lang->load($extension . '.sys', JPATH_SITE, null, false, false)
        || $lang->load($extension . '.sys', $source, $lang->getDefault(), false, false)
        || $lang->load($extension . '.sys', JPATH_SITE, $lang->getDefault(), false, false);
}

在psuedo中,它实际上将'pkg_' . <packagename> . '.sys'组合为文件名。