Joomla 2.5 JText :: _()不解析组件名称

时间:2013-03-19 11:12:06

标签: joomla2.5

我正在编写自定义组件,我正在尝试获取组件列表 这是我的模特函数

function getComponents()
{
    // Initialise variable
    $db     = JFactory::getDbo();   
    $query  = $db->getQuery(true);

    // Get components with permissions      
    $query->select('name AS value, title AS text, level AS level, rules AS rules')
        ->from('#__assets')
        ->where('level > 0')
        ->where('rules !='.$db->Quote('{}'))
        ->order('value');

    $options = $db->setQuery($query)->loadObjectList();

    $levels=array();
    if (count($options)) {
        foreach ($options as &$option) {
            // Translate component name
            $option->rules = array_keys(get_object_vars( json_decode($option->rules) ));
            $option->text = JText::_($option->text);
            $levels[$option->level][] = $option;
        }

        // Sort by component name
        $lang = JFactory::getLanguage();
        JArrayHelper::sortObjects($options, 'text', 1, true, $lang->getLocale());
    }

    return $levels;
}

我的问题是JText::_($option->text);只翻译我的组件的名称而其他组件保持不变。 我的方法出了什么问题?

2 个答案:

答案 0 :(得分:0)

JText将仅在当前组件的语言文件中查找翻译。

要获得解决方法,请查看Loading_extra_language_files的文档,您可以使用类似

的内容
$lang = JFactory::getLanguage();
$extension = 'com_helloworld';
$base_dir = JPATH_SITE;
$language_tag = 'en-GB';
$reload = true;
$lang->load($extension, $base_dir, $language_tag, $reload);

您需要为要翻译的所有组件加载语言文件。然后JText应该正确翻译

答案 1 :(得分:0)

我在joomla代码中进行了一些研究,正是在com_installer中,以了解joomla如何做我想要的。 Marko D是对的,但答案是“不完整的”,所以如果你想要翻译所有组件的名称,这里你有完整的代码片段:)

$extension = 'com_helloworld';
$lang = JFactory::getLanguage();
$source = JPATH_ADMINISTRATOR . '/components/' . $extension;
$lang->load("$extension.sys", JPATH_ADMINISTRATOR, null, false, false)
  ||    $lang->load("$extension.sys", $source, null, false, false)
  ||    $lang->load("$extension.sys", JPATH_ADMINISTRATOR, $lang->getDefault(), false, false)
  ||    $lang->load("$extension.sys", $source, $lang->getDefault(), false, false);

$componentName = JText::_($option->text);

我希望它有所帮助,欢呼。