【问题标题】:Load language file during joomla (2.5) system plugin installationjoomla (2.5) 系统插件安装期间加载语言文件
【发布时间】:2012-12-20 15:08:44
【问题描述】:

在安装系统插件(在 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>

(folder="admin" 周围的方括号应该表示我尝试了使用和不使用此属性。它不会改变任何东西)。

【问题讨论】:

    标签: joomla joomla2.5 joomla-extensions


    【解决方案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 的描述也已本地化!

    我觉得很奇怪有这么多指定语言文件的方法,除了安装的一个角落情况外,它们基本上都可以工作......

    希望这将帮助其他人在这方面苦苦挣扎!

    【讨论】:

      【解决方案2】:

      如果您还将文件复制到管理语言文件夹,它仅适用于安装。如果您查看核心扩展,您会发现它们两者兼而有之。这确实是一个错误,但这就是解决方法。

      【讨论】:

      • 我将如何复制到管理语言文件夹?我可以查看的任何特定扩展名是什么?使用我上面的 xml,它们实际上确实被复制到管理员/语言/...文件夹中,但它们只是在安装过程中没有加载。
      • 这样试试:language/en-GB.com_contact.ini
      • 我猜你不是要写重复的开始标签?不会改变任何东西...
      • 在 pre 或 postflight() 上加载你的语言也尝试在 your lang 中加载你的语言或显示你的清单代码,插件.xml 和安装
      • @RakeshSharma 我不明白清单 plugin.xml 是什么意思?我只有一个 myname.xml 文件(这是清单,对吧)?我需要一个单独的 plugin.xml 吗?而且我以为我已经展示了安装脚本文件和清单 xml 的相关部分,我会尝试展示更多,但您能告诉我应该提供哪些其他部分吗?
      猜你喜欢
      • 2014-02-08
      • 2014-03-05
      • 2012-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-27
      相关资源
      最近更新 更多