我有一个TYPO3网站,其默认网站语言是德语。不久之前,我添加了一种替代的网站语言,即英语。
我现在需要做的是在后端交换这两种语言:
自:
要:
因此,在创建新内容元素的后端,默认语言为英语。
答案 0 :(得分:3)
在TYPO3s本地化概念中,默认语言被认为是原始语言,并且位于数据库表pages
中。其他语言是原始语言的翻译,并且位于表pages_language_overlay
中。因此,您不能简单地将默认设置切换为其中一种翻译语言。
更改新内容的默认语言本身并不困难,但您将留下标有“英语”的所有现有德语内容,因此您需要使用某些mySQL技巧重新分配您的内容元素。如果您不关心现有内容,请忽略第3步和第3步。 4。
第1步:
在对数据库进行更改之前,请确保备份相关数据,至少是表pages
,pages_language_overlay
和tt_content
第2步:
假设英语是id为1(sys_language_uid = 1
)的语言:
Create a new language entry在后端为德语。如果您之前没有定义任何其他语言,则会将其视为'sys_language_uid = 2'
第3步:
将默认语言元素更改为新语言“german”(在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 :(得分:1)
有人可能还想切换页面标题。做类似的事情:
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);
答案 2 :(得分:1)
我在这里找到了一个很好的解决方案而不会丢失任何&#39; t3_origuid&#39;。
当前设置:德语是默认语言,英语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(&gt;超过最新的内容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;
将englisch的uid设置为德语所在的ID:
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;
答案 3 :(得分:0)
是的,您还需要更改tx_news插件中的所有新闻
首先将所有人都放到桌子上
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`
然后更改内容。来自&#34; tmp&#34;的翻译文本并设置成新的原始语言。
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表更改为原点:
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