        root=ET.Element('tmx',version='1.4');ET.SubElement(root,'header',{'creationtool':'QuickRouterDemo','creationtoolversion':'1','segtype':'sentence','o-tmf':'plaintext','adminlang':'en','srclang':'zh-CN','datatype':'PlainText'});body=ET.SubElement(root,'body');pairs=[]
        for row in case['input']['pairs']:
            en=row['en'] if row['confirmed'] else output.get('translations',{}).get(row['id']);unit=ET.SubElement(body,'tu',tuid=row['id'])
            for lang,text in [('zh-CN',row['zh']),('en',en)]:tuv=ET.SubElement(unit,'tuv',{'{http://www.w3.org/XML/1998/namespace}lang':lang});ET.SubElement(tuv,'seg').text=text
            pairs.append({'id':row['id'],'zh':row['zh'],'en':en})
        ET.ElementTree(root).write(f/'memory.tmx',encoding='utf-8',xml_declaration=True);back=ET.parse(f/'memory.tmx');units=back.findall('./body/tu');ck('TMX实际回读3个句对',len(units)==3);ck('已确认译文不被改写',pairs[0]['en']=='Save' and pairs[1]['en']=='Cancel');ck('模型新译文保留变量',pairs[2]['en']=='Hello, {name}');ck('两种语言分别标注',all([x.get('{http://www.w3.org/XML/1998/namespace}lang') for x in u.findall('tuv')]==['zh-CN','en'] for u in units));result={'pairs':pairs,'format':'TMX 1.4'};art+=['memory.tmx']
