在joomla(2.5)系统插件安装期间加载语言文件

时间:2013-01-06 20:51:50

标签: joomla joomla2.5 joomla-extensions

在安装系统插件期间(在Joomla 2.5中),我很难显示本地化字符串。 xml文件中本地化字符串的“正常”方式似乎不起作用(请参阅另一个问题:Language based installation description)。

我现在尝试了那里提出的方法,通过安装脚本显示描述。这种工作(我可以成功回显文本),然而,我也无法本地化 - 在调试语言时,它表明plugin.sys.ini尚未加载;我试图手动加载文件,但加载任何我的插件语言文件都没有成功。 这是我到目前为止(在一个名为setupscripts.php的文件中):

<?php // no direct access
defined('_JEXEC') or die('Restricted access');

class plgsystemmyplgnameInstallerScript {

    static function loadLanguage() {
        $lang =& JFactory::getLanguage();
        $lang->load('plg_system_myname', JPATH_ADMINISTRATOR);
    }

    function install($parent)
    {
        self::loadLanguage();
        echo JTEXT::_("PLG_MYNAME_TEST_TEXT");
    }
    function uninstall($parent)
    {
        self::loadLanguage();
        echo JText::_('PLG_MYNAME_UNINSTALL_TEXT');
    }
    function update($parent)
    {
        self::loadLanguage();
        echo JText::_('PLG_MYNAME_UPDATE_TEXT');
    }
    function preflight($type, $parent) {}
    function postflight($type, $parent) {
        self::loadLanguage();
        echo JText::_('PLG_MYNAME_INSTALL_TEXT');
    }
}

但我只能得到?? PLG_MYNAME_TEST_TEXT ?? ?? ?? PLG_MYNAME_INSTALL_TEXT (安装语言调试)...奇怪的是,页面底部的“未翻译的字符串”下的语言调试功能显示“无”(如果不是来自尝试但是失败的话,那么问号来自哪里?翻译???)。

尝试了它的一些变体(在插件名称的末尾有.sys,因为我实际上认为设置字符串应该在.sys.ini文件中,没有第二个参数(保留默认值),但没有运气 - 没有错误,日志中没有任何内容(实际上我的日志文件不存在,可能还没有条目?可以用Joomla设置日志级别吗?)。但是从来没有加载任何文件(在“加载”下没有任何变化语言文件“。

有人知道如何正确加载语言吗?

在设置过程中加载语言时是否需要考虑一些特殊问题?如果加载语言失败,为什么没有错误消息?我是否可能必须将语言文件安装到特殊位置才能在安装过​​程中识别它们?我目前的xml看起来像这样:

<extension version="2.5" type="plugin" group="system" method="upgrade">
<name>PLG_MYNAME</name>
<!-- ... author, copyright, version, .. --> 
<scriptfile>setupscripts.php</scriptfile>
<files>
    <filename plugin="myname">myname.php</filename>
    <filename>setupscripts.php</filename>
    <filename>index.html</filename>
    <folder>sql</folder>
</files>
<!-- ... install->sql->file ... -->
<!-- ... uninstall->sql->file ... -->
<!-- ... update->schemas->schemapath ... -->
<languages [folder="admin"]>
   <language tag="en-GB">en-GB.plg_system_myname.ini</language>
   <language tag="en-GB">en-GB.plg_system_myname.sys.ini</language>
   <!-- ... other languages ... -->
</languages>
<!-- ... config->fields->fieldset->field ... -->
</extension>

(文件夹周围的方括号=“admin”应该表示我在使用和不使用此属性时都尝试过。它不会改变任何内容。)

2 个答案:

答案 0 :(得分:3)

如果您还将文件复制到管理语言文件夹,它仅适用于安装。如果你看一下核心扩展,你会发现它们都做到了。这真的是一个错误,但这就是解决方法。

答案 1 :(得分:1)

最后我发现了如何真正做到这一点。在Google Joomla开发小组中彻底搜索了this very similar question

基本上,语言文件需要驻留在一个单独的语言文件夹中,而文件部分也需要引用它们。我的xml现在看起来像这样:

<!-- ... everything else stayed the same, except: -->
<files>
    <filename plugin="myplg">myplg.php</filename>
    <filename>index.html</filename>
    <folder>language</folder>
    <folder>sql</folder>
</files>
<languages folder="language">
        <language tag="en-GB">en-GB/en-GB.plg_system_myplg.ini</language>
        <language tag="en-GB">en-GB/en-GB.plg_system_myplg.sys.ini</language>
        <!-- .. other languages ... ->
</languages>
<!-- ... rest of the xml file ... -->

语言文件现在都在单独的子文件夹中......它们被复制到与之前完全相同的位置(管理员/语言// ...),但现在XML中的描述也已本地化!

我觉得很奇怪,有很多方法可以指定语言文件,除了安装的一个角落外,这些方法基本上都有用......

希望这会帮助其他人挣扎!