我正在创建一个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
答案 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'
组合为文件名。