Как сделать альтернативный язык сайта языком сайта по умолчанию? - PullRequest
4 голосов
/ 13 декабря 2011

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

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

От:

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

Кому:

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

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

Ответы [ 4 ]

3 голосов
/ 17 декабря 2011

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

Изменение языка по умолчанию для нового контента само по себе не сложно, но у вас останется весь существующий немецкий контент, помеченный как «английский», поэтому вам нужно будет переназначить элементы контента с помощью некоторых хитростей 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_uids для внешнего интерфейса (например, языковые меню): config.sys_language_uid = 2 (если раньше он был немецким). Это может привести к неработающим ссылкам, если все сделано неправильно.

Шаг 7:

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


Вывод:

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

1 голос
/ 02 октября 2016

Я нашел хорошее решение здесь, не потеряв ни одного '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 для записей на немецком языке (> Больше, чем самый последний идентификатор контента)!):

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;

Установите идентификатор английского языка для идентификатора немецкого языка:

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

Измените немецкий идентификатор

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, например 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;

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

1 голос
/ 17 апреля 2013

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

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);
0 голосов
/ 19 февраля 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`

Затем изменить содержимое.Возьмите перевод текста с "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` ;

Это все.Thx

...