Как сделать альтернативный язык сайтом языком по умолчанию?

У меня есть сайт TYPO3, где язык сайта по умолчанию - немецкий. Некоторое время назад я добавил альтернативный язык сайта - английский.

Теперь мне нужно поменять местами эти два языка в бэкэнде:

Из:

  • По умолчанию: немецкий
  • Альтернатива: английский

To:

  • По умолчанию: английский
  • Альтернатива: немецкий

Итак, в бэкэнде, когда я создаю новый элемент контента, языком по умолчанию будет английский.


person nerdess    schedule 13.12.2011    source источник
comment
Помог ли мой ответ? Или вы думаете, что решение слишком сложное?   -  person Mateng    schedule 23.12.2011


Ответы (4)


В концепции локализации TYPO3 языком по умолчанию считается исходный язык, который находится в таблице базы данных pages. Другие языки являются переводами исходного языка и находятся в таблице pages_language_overlay. Следовательно, вы не можете просто переключить значение по умолчанию на один из переведенных языков.

Изменение языка по умолчанию для нового контента само по себе несложно, но у вас останется весь существующий немецкий контент с пометкой «english», поэтому вам нужно будет переназначить элементы контента с помощью некоторых уловок mySQL. Если вас не волнует существующий контент, просто пропустите шаги 3 и 4.

Шаг 1:

Перед внесением изменений в базу данных убедитесь, что вы сделали резервную копию соответствующих данных, по крайней мере, таблиц pages, pages_language_overlay и tt_content.

Шаг 2:

Предполагая, что английский - это язык с идентификатором 1 (sys_language_uid = 1):

Создайте новую языковую запись для немецкого языка в серверной части. Если вы ранее не определяли другие языки, он будет считаться 'sys_language_uid = 2'.

Шаг 3:

Измените языковые элементы по умолчанию на новый язык «немецкий» (в mySQL / phpMyAdmin):

UPDATE tt_content SET sys_language_uid = 2 WHERE sys_language_uid = 0

Шаг 4:

Измените старые элементы английского языка на новый язык по умолчанию:

UPDATE tt_content SET sys_language_uid = 0 WHERE sys_language_uid = 1

Шаг 5:

Затем, если вы хотите, измените метку языка в бэкэнде, введя следующее в свойства страницы вашей корневой страницы:

mod.SHARED {
        defaultLanguageFlag = gb
        defaultLanguageLabel = English
}

Шаг 6:

Не забудьте также изменить все language_uid для внешнего интерфейса (например, языковые меню): config.sys_language_uid = 2 (если раньше он был немецким). Это может привести к неработающим ссылкам, если все сделано неправильно.

Шаг 7:

Удалить запись на альтернативном языке для английского


Вывод:

В зависимости от того, сколько других расширений задействовано (например, realURL), эта задача может не стоить потраченного на нее времени. Я надеюсь, что в будущем разработчики ядра предложат более простое решение.

person Mateng    schedule 17.12.2011
comment
Ссылка на шаге 2 исчезла, но archive.org сохранил ее (хотя и без изображений): https://web.archive.org/web/20111102130932/http://typo3tutorials.com/index.php?id=130 - person newenglander; 23.07.2014
comment
Самая большая проблема - это потеря 't3_origuid', потеря всего контента, перевод ссылок и при переключении языка внутри системы CE создается еще один. Также, если вы используете элемент рендеринга по идентификатору, все они также пропускают - person Oleg V Karun; 19.02.2016

Также можно переключить заголовки страниц. Сделайте что-нибудь вроде:

UPDATE pages, pages_language_overlay 
SET pages.title = pages_language_overlay.title, 
       pages.subtitle = pages_language_overlay.subtitle, 
       pages.nav_title = pages_language_overlay.nav_title, 
       pages.tx_realurl_pathsegment = pages_language_overlay.tx_realurl_pathsegment 
WHERE (pages.uid = pages_language_overlay.pid) 
AND (pages_language_overlay.sys_language_uid = 1);
person Mark    schedule 16.04.2013

Я нашел здесь хорошее решение, не потеряв ни одного t3_origuid.

Текущая настройка: немецкий - язык по умолчанию, английский язык 1. ПЕРВЫЙ: очистите все удаленные записи:

delete from tt_content where deleted = 1;

sys_language_uid изменения немецкого содержимого (от 0 до 10):

update tt_content set sys_language_uid=10 where sys_language_uid=0;

sys_language_uid изменения английского языка (с 1 на 0):

update tt_content set sys_language_uid=0 where sys_language_uid=1;

sys_language_uid немецкого языка изменится обратно на 1 (с 10 на 1):

update tt_content set sys_language_uid=1 where sys_language_uid=10;

Установите новый l18n_parent для немецких записей:

UPDATE tt_content as c1
RIGHT JOIN tt_content as c2 on c2.l18n_parent=c1.uid
SET c1.l18n_parent=c1.uid,c1.t3_origuid=c1.uid
WHERE c1.sys_language_uid=1
    AND c2.sys_language_uid=0;

Измените uid для немецких записей (> Больше, чем самая последняя версия Content ID!):

UPDATE tt_content as c1
RIGHT JOIN tt_content as c2 on c2.l18n_parent=c1.uid
SET c1.uid=c2.uid+10000
WHERE c1.sys_language_uid=1
    AND c2.sys_language_uid=0;

Установите uid of englisch равным идентификатору немецкого языка:

UPDATE tt_content
SET uid=l18n_parent where sys_language_uid=0 and l18n_parent>0;

Снова измените немецкий uid

UPDATE tt_content
SET uid=uid-10000 where sys_language_uid=1 and uid>10000;

Очистить

UPDATE tt_content 
SET l18n_parent=0,t3_origuid=0,l18n_diffsource=''
where sys_language_uid=0 and l18n_parent>0;

Перенести определенные поля переданы:

UPDATE  tt_content as c1
RIGHT JOIN tt_content as c2 on c2.l18n_parent=c1.uid
SET c1.hidden=c2.hidden,
    c1.starttime=c2.starttime,
    c1.endtime=c2.endtime
WHERE c1.sys_language_uid=0
    AND c2.sys_language_uid=1;

СТРАНИЦЫ: Сделайте копию из таблицы Pages, например pages_new:

Затем шаг 1:

update pages left join pages_language_overlay on pages.uid=pages_language_overlay.pid set pages.title=pages_language_overlay.title,        pages.subtitle=pages_language_overlay.subtitle,     pages.description=pages_language_overlay.description,        pages.keywords=pages_language_overlay.keywords,        pages.abstract=pages_language_overlay.abstract,        pages.nav_title=pages_language_overlay.nav_title    where pages_language_overlay.sys_language_uid=1;

Шаг 2:

update pages_language_overlay right join pages_new on pages_language_overlay.pid=pages_new.uid set pages_language_overlay.title=pages_new.title,        pages_language_overlay.subtitle=pages_new.subtitle,     pages_language_overlay.description=pages_new.description,        pages_language_overlay.keywords=pages_new.keywords,        pages_language_overlay.abstract=pages_new.abstract,        pages_language_overlay.nav_title=pages_new.nav_title    where pages_language_overlay.sys_language_uid=1;

Найдено здесь. введите здесь описание ссылки

person RCOR    schedule 02.10.2016

Да, а также вам нужно изменить все новости в плагине tx_news

Сначала скопируйте все в таблицу tmp

CREATE  TABLE  `news_tmp` (  `uid` int( 11  )  NOT  NULL  AUTO_INCREMENT ,
 `pid` int( 11  )  NOT  NULL DEFAULT  '0',
 `tstamp` int( 11  )  NOT  NULL DEFAULT  '0',
 `crdate` int( 11  )  NOT  NULL DEFAULT  '0',
 `cruser_id` int( 11  )  NOT  NULL DEFAULT  '0',
 `t3ver_oid` int( 11  )  NOT  NULL DEFAULT  '0',
 `t3ver_id` int( 11  )  NOT  NULL DEFAULT  '0',
 `t3ver_wsid` int( 11  )  NOT  NULL DEFAULT  '0',
 `t3ver_label` varchar( 30  )  NOT  NULL DEFAULT  '',
 `t3ver_state` tinyint( 4  )  NOT  NULL DEFAULT  '0',
 `t3ver_stage` tinyint( 4  )  NOT  NULL DEFAULT  '0',
 `t3ver_count` int( 11  )  NOT  NULL DEFAULT  '0',
 `t3ver_tstamp` int( 11  )  NOT  NULL DEFAULT  '0',
 `t3ver_move_id` int( 11  )  NOT  NULL DEFAULT  '0',
 `t3_origuid` int( 11  )  NOT  NULL DEFAULT  '0',
 `editlock` tinyint( 4  )  NOT  NULL DEFAULT  '0',
 `sys_language_uid` int( 11  )  NOT  NULL DEFAULT  '0',
 `l10n_parent` int( 11  )  NOT  NULL DEFAULT  '0',
 `l10n_diffsource` mediumtext,
 `deleted` tinyint( 4  )  NOT  NULL DEFAULT  '0',
 `hidden` tinyint( 4  )  NOT  NULL DEFAULT  '0',
 `starttime` int( 11  )  NOT  NULL DEFAULT  '0',
 `endtime` int( 11  )  NOT  NULL DEFAULT  '0',
 `sorting` int( 11  )  NOT  NULL DEFAULT  '0',
 `fe_group` varchar( 100  )  NOT  NULL DEFAULT  '0',
 `title` tinytext,
 `teaser` text,
 `bodytext` mediumtext,
 `datetime` int( 11  )  NOT  NULL DEFAULT  '0',
 `archive` int( 11  )  NOT  NULL DEFAULT  '0',
 `author` tinytext,
 `author_email` tinytext,
 `categories` int( 11  )  NOT  NULL DEFAULT  '0',
 `related` int( 11  )  NOT  NULL DEFAULT  '0',
 `related_from` int( 11  )  NOT  NULL DEFAULT  '0',
 `related_files` tinytext,
 `fal_related_files` int( 11  ) unsigned DEFAULT  '0',
 `related_links` tinytext,
 `type` varchar( 100  )  NOT  NULL DEFAULT  '0',
 `keywords` text,
 `description` text,
 `tags` int( 11  )  NOT  NULL DEFAULT  '0',
 `media` text,
 `fal_media` int( 11  ) unsigned DEFAULT  '0',
 `internalurl` text,
 `externalurl` text,
 `istopnews` int( 11  )  NOT  NULL DEFAULT  '0',
 `content_elements` text,
 `path_segment` tinytext,
 `alternative_title` tinytext,
 `rte_disabled` tinyint( 4  )  NOT  NULL DEFAULT  '0',
 `import_id` varchar( 100  )  NOT  NULL DEFAULT  '',
 `import_source` varchar( 100  )  NOT  NULL DEFAULT  '',
 PRIMARY  KEY (  `uid`  ) ,
 KEY  `parent` (  `pid`  ) ,
 KEY  `sys_language_uid_l10n_parent` (  `sys_language_uid` ,  `l10n_parent`  ) ,
 KEY  `import` (  `import_id` ,  `import_source`  )  ) ENGINE  =  MyISAM  DEFAULT CHARSET  = utf8

INSERT INTO `news_tmp` SELECT * FROM `tx_news_domain_model_news`

Затем измените содержание. Текст переведен Tacke из "tmp" и установлен на новый исходный язык.

UPDATE news_tmp news, tx_news_domain_model_news tmp 
SET news.title = tmp.title, 
       news.teaser = tmp.teaser,
       news.bodytext = tmp.bodytext 
WHERE (news.uid = tmp.t3_origuid) 
AND (news.sys_language_uid = 0)
AND (tmp.sys_language_uid = 2);

UPDATE news_tmp news, tx_news_domain_model_news tmp 
SET news.title = tmp.title, 
       news.teaser = tmp.teaser,
       news.bodytext = tmp.bodytext 
WHERE (news.t3_origuid = tmp.uid) 
AND (news.sys_language_uid = 2)
AND (tmp.sys_language_uid = 0)

и назад

UPDATE news_tmp news, tx_news_domain_model_news tmp 
SET news.title = tmp.title, 
       news.teaser = tmp.teaser,
       news.bodytext = tmp.bodytext 
WHERE (news.t3_origuid = tmp.uid) 
AND (news.sys_language_uid = 2)
AND (tmp.sys_language_uid = 0)

Готов идти. Измените таблицу tmp на origin:

RENAME TABLE  `db`.`tx_news_domain_model_news` TO `db`.`tx_news_domain_model_news_old` ;
RENAME TABLE  `db`.`news_tmp` TO  `db`.`tx_news_domain_model_news` ;

Это все. Спасибо

person Oleg V Karun    schedule 18.02.2016