我正在编写自定义组件,我正在尝试获取组件列表 这是我的模特函数
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);
只翻译我的组件的名称而其他组件保持不变。
我的方法出了什么问题?
答案 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);
我希望它有所帮助,欢呼。