2013-01-06 114 views
2

我在安裝系統插件(在Joomla 2.5中)時顯示一個本地化的字符串真的很難。在xml文件中使用本地化字符串的「正常」方式似乎無效,(請參閱此其他問題:Language based installation description)。joomla(2.5)系統插件安裝時加載語言文件

我現在嘗試了那裏提出的方式,通過安裝腳本顯示描述。這種工作(我可以成功地回顯文本),但是,我也無法在那裏進行本地化 - 調試語言時,它顯示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」的平方brackes都應該表明,我既沒有這個屬性試過它不會改變任何東西。)。

回答

1

最後我發現如何真正做到這一點。在谷歌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的描述也是本地化的!

我覺得很奇怪,有這麼多的方式來指定的語言文件,而這一切基本上除了安裝一個角落的情況下工作...

希望這將幫助其他人爲此而努力!

3

它只適用於安裝,如果你還將文件複製到管理語言文件夾。如果你看看核心擴展,你會看到他們都做。這真的是一個錯誤,但這是工作。

+0

我該怎麼做,複製到管理語言文件夾?任何具體的延伸,我可以看看這是什麼?使用我上面的xml,他們實際上*會被複制到管理員/語言/ ...文件夾中,但他們只是在安裝過程中未加載。 – codeling

+0

嘗試這樣的: \t \t <語言文件夾= 「管理員」> \t \t <語言標記= 「EN-GB」>語言/ EN-GB.com_contact.ini \t Elin

+0

我猜你沒是不是要寫重複的開標籤? – codeling