1

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

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);只翻译我的组件名称,而其他组件保持不变。我的方法有什么问题?

4

2 回答 2

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应该正确翻译

于 2013-03-19T16:17:17.250 回答
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);

我希望它有帮助,干杯。

于 2013-03-22T14:50:31.267 回答