Вход

Просмотр полной версии : Добавление мультиязычности в существующее расширение


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.
И дописать строчки в
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l18n_parent',
'transOrigDiffSourceField' => 'l18n_diffsource',
в раздел 'ctrl'.

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

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

void
17.10.2008, 12:32
Ещё в код расширения надо добавить нечто такое:

[...]
$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')
)
),


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