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

com_installer私は、 Joomlaが私が望むことをどのように行うかを 正確に理解するために、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 に答える
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 に答える