项目需要建立一个项目文件夹,然后有管理项目信息的项目文件以及各个子文件夹。子文件夹包括源语言文件夹、目标语言文件夹、翻译记忆文件夹、术语文件夹以及工作文件文件夹。另外还有一个备份文件夹,每隔一分钟进行备份。

大多数CAT软件在创建项目时都有一个向导,让你选择语言对,添加项目文件,设置翻译记忆库等等,操作繁琐。我们要做的是一个简单易用的汉英版CAT软件,可以直接选择建立英语到汉语或者汉语到英语的项目。然后,我们默认是使用记忆库、术语库的,可以直接建立。目前记忆库和术语库使用sqlite存储,利用b4j的keyvaluestore以键/值的形式保存。

而工作文件,存储了CAT软件从源文件中抽取的可翻译数据,平时的翻译操作主要在这个文件上进行。

工作文件的格式大多数软件都是采用的xliff,因为常见的文件格式都是以xml格式存储的,而且xliff作为一个标准应该得到广泛采用。

不过我决定使用json格式进行存储。

下面是一个工作文件的内容:

{
    "filename": "int_978DPWINER263.idml",
    "files": [
        {
            "Story_u1de62.xml": [
                [
                    "The Real Science of Supers",
                    "超人背后的真科学",
                    "<p1><c0 id=\"0\">The Real Science of Supers<\/c0><\/p1>",
                    "Story_u1de62.xml"
                ]
            ]
        },
        {
            "Story_u1de4b.xml": [
                [
                    "A Discovery Book",
                    "一本发现书",
                    "<p1><c0 id=\"0\">A Discovery Book<\/c0><\/p1>",
                    "Story_u1de4b.xml"
                ]
            ]
        },
        ]
}

和xliff的内容其实类似,有file,trans-unit等内容,不过我在file里放的是一个列表,列表里依次是原文、译文、带格式信息的原文、所属的文件名。利用带格式信息的原文,可以判断片段合并时需不需要添加空格,可以方便地生成译文。最后带上文件名信息,主要是便于以片段为单位进行操作时方便确定所属文件。

使用json的好处是操作简单,生成的文件可读性较强。当然,不像xml文件那样有schema,标准化程度低是缺点。

另外还有项目文件,也使用json,主要存储项目设置信息,上次操作的信息等。

{
    "settings": {
        "tmList": [
            "out.txt"
        ]
    },
    "lastEntry": 407,
    "files": [
        "超人总动员_新版原文.txt",
        "超人总动员_short.txt"
    ],
    "source": "en",
    "lastFile": "超人总动员_新版原文.txt",
    "target": "zh"
}

下面是一个项目的树状结构:

│  project.json
│
├─bak
│      project.json
│      超人总动员_short.txt.json
│      超人总动员_新版原文.txt.json
├─source
│      超人总动员_short.txt
│      超人总动员_新版原文.txt
├─target
│      超人总动员_short.txt
│      超人总动员_新版原文.txt
├─Term
│      term.db
├─TM
│      externalTM.db
│      out.txt
│      TM.db
└─work
        超人总动员_short.txt.json
        超人总动员_新版原文.txt.json