Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Локализация проекта (http://forum.typo3.ru/forumdisplay.php?f=14)
-   -   Добавление мультиязычности в существующее расширение (http://forum.typo3.ru/showthread.php?t=6030)

filippoff 24.03.2008 05:36

Добавление мультиязычности в существующее расширение
 
господа, подскажите, есть ли простой способ добавить в существующее расширение возможности мультиязычности?
т.е., чтобы при сохранении записи при условии наличия на странице альтернативного языка появлялась возможность ту же запсь перевести на альтернативный язык?
к примеру, как в tt_news - можно выбрать язык записи или категории.

Uruguaygrep 24.03.2008 12:55

ИМХО: Все нормально созданые расширения имеют подключенную мультиязычность.
Если расширение старое и давно не обновлялось, то возможно используются не xml а php файлы locallang.

Встречал где-то в ТЕР расширение которое фиксит старые раширения и заставляет их работать через xml. (ExtDeval по-моему это умеет)

Если это собственное расширение, то отредактируйте через Kickstarter. Он автоматически создает такую возможность. Только перед этим сделайте бэкап расширения. Kickstarter перезапишет файлы.

filippoff 24.03.2008 19:46

само расширение мультиязычное, использует xajax и прочие радости требующие UTF. но в нем есть такие вещи как "названия объектов" и "категории объектов" - эти записи можно сделать только на одном языке.
т.е., я имею в виду не собственно перевод меток в расширении, а возможность перевода записей, как обычный элемент контента мы можем иметь на разных языках.

void 25.03.2008 00:43

Надо модифицировать $TCA этих таблиц. В частности, добавить поля sys_language_uid, l18n_parent, l18n_diffsource.
И дописать строчки в
PHP код:

'languageField' => 'sys_language_uid',    
'transOrigPointerField' => 'l18n_parent',    
'transOrigDiffSourceField' => 'l18n_diffsource'

в раздел 'ctrl'.

Может, ещё что-то надо сделать, не помню.

wind 16.10.2008 20:15

кажется что-то еще надо таки добавить..
я седалала все как написано выше - появилась кнопочка для добавления перевода, но при нажатии на нее просто создается копия существующей записи, а язык остается по-умолчанию :(

void 17.10.2008 12:32

Ещё в код расширения надо добавить нечто такое:
PHP код:

[...]
$rows $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid,pid,title',$table,$where);
$rows $this->overlayRows($table,$rows);
[...]
    function 
overlayRows($table,$rows){
        foreach (
$rows as $key => $row){
            
$rows[$key] = $this->getRecordOverlay($table,$row);
        }
        return 
$rows;
    }
    
    function 
getRecordOverlay($table,$row){
        if (
$GLOBALS['TSFE']->sys_language_content) {
            
$OLmode = ($this->sys_language_mode == 'strict')?'hideNonTranslated':'';
            
$row $GLOBALS['TSFE']->sys_page->getRecordOverlay($table$row$GLOBALS['TSFE']->sys_language_content$OLmode);
        }
        return 
$row;
    } 


marco 17.10.2008 12:44

Еще не забудьте в соответствующие таблицы расширения в БД добавить поля

sys_language_uid int(11) DEFAULT '0' NOT NULL,
l18n_parent int(11) DEFAULT '0' NOT NULL,
l18n_diffsource mediumblob NOT NULL,

wind 17.10.2008 13:14

Спасибо за ответы!
но мне кажется чего-то еще не хватает. Я добавила поля в базу данных (прямо через phpmyadmin). добавила строки
Код:

'languageField' => 'sys_language_uid',   
'transOrigPointerField' => 'l18n_parent',   
'transOrigDiffSourceField' => 'l18n_diffsource',

в ext_tables.php .
В админке появился флажок при нажатии на который по идее должна добавляться запись для локализации. но вместо этого просто происходит копирование выбранной записи.
может надо еще в kickstrater что-то указать дополнительное? :confused:

wind 17.10.2008 17:02

оказалось что в файл tca.php нужно было добавить
Код:

'sys_language_uid' => Array (
                        'exclude' => 1,
                        'label' => 'LLL:EXT:lang/locallang_general.php:LGL.language',
                        'config' => Array (
                                'type' => 'select',
                                'foreign_table' => 'sys_language',
                                'foreign_table_where' => 'ORDER BY sys_language.title',
                                'items' => Array(
                                        Array('LLL:EXT:lang/locallang_general.php:LGL.allLanguages',-1),
                                        Array('LLL:EXT:lang/locallang_general.php:LGL.default_value',0)
                                )
                        )
                ),
                'l18n_parent' => Array (
                        'displayCond' => 'FIELD:sys_language_uid:>:0',
                        'exclude' => 1,
                        'label' => 'LLL:EXT:lang/locallang_general.php:LGL.l18n_parent',
                        'config' => Array (
                                'type' => 'select',
                                'items' => Array (
                                        Array('', 0),
                                ),
                                'foreign_table' => 'tt_news',
                                'foreign_table_where' => 'AND tt_news.uid=###REC_FIELD_l18n_parent### AND tt_news.sys_language_uid IN (-1,0)',
                        )
                ),
                'l18n_diffsource' => Array(
                        'config'=>array(
                                'type'=>'passthrough')
                )
        ),


так что теперь почти работает:)


Часовой пояс GMT +4, время: 10:29.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot