【问题标题】:Joomla 2.5 Package installation with language strings使用语言字符串安装 Joomla 2.5 软件包
【发布时间】:2014-03-05 04:02:37
【问题描述】:

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

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

如果您查看我的 package-xml-file,我想翻译占位符 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 元素的命名以及文件的命名和位置。

cppl 指出包名需要反映在语言文件的名称中。此外,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

【问题讨论】:

    标签: joomla package joomla-extensions


    【解决方案1】:

    我看到的主要问题是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>
    

    要使用这些语言文件,您的 &lt;packagename&gt; 应该是:

    <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);
    }
    

    实际上,它实际上将'pkg_' . &lt;packagename&gt; . '.sys' 组合为文件名。

    【讨论】:

    • 感谢您的回答。除了更改包名之外,我还必须将语言文件的位置更改为 language/de-DE/de-DE.pkg_mypackage.sys.ini。它现在可以工作了,我什至可以运行安装脚本;)
    • 那是因为 标签在 1.6 中已被弃用,请参阅 docs.joomla.org/Manifest_files#Language_files — 很高兴你让它工作了。
    猜你喜欢
    • 2012-12-20
    • 2013-02-25
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多