本地化项目管理
本地化项目管理模块主要负责本地化项目管理,包括项目创建与设置、任务管理、项目交付等。
订单转本地化项目
当订单价格被确认后,在LSP侧,通过点击"订单转本地化项目"按钮,将订单转换为本地化项目,并进行管理,此时会在项目表生成一个与订单管理的本地化项目,一个订单创建一个本地化项目。
本地化项目管理
项目管理的核心功能,目标是对本地化项目完成交付,围绕质量控制,成本控制,风险(进度)控制三个因素逐渐迭代该部分,本期开发主要围绕项目设置和任务管理。
项目管理
一个项目包含以下信息
- 项目基本信息
- 项目名称
- 项目描述
- 项目状态(准备中,生产中,已完成)
- 语言对
- 交付时间
- 本地化步骤信息
- 翻译(T)
- 编辑(E)
- 校对(P)
- 项目语言资产
- 术语库(TB)
- 翻译记忆库(TM)
- 项目预翻译参数 (本期不开发)
- 项目QA参数和Style Guide
- QA 参数提供QA引擎(本期不开发)
- Style Guide 提供译员参考
任务管理
任务管理主要负责任务的创建,拆分,分配,验收等。 一条任务上主要有以下信息
- 字数(工作量)
- 期望交付时间
- 任务状态(未分配,进行中,已提交,已确认)
- 任务进度
- 被分配人员
- 是否拆分过
任务创建
任务的创建时机是第一次保存项目设置时,此时读取项目设置中的本地化步骤信息,生成任务,在没有任何任务分配人员的情况下,当本地化步骤信息发生变化时,会重新生成任务。
CAT 集成
当生成任务时,需要调用内容库的获取内容接口,通过订单中的Snapshot ID获取内容,然后将内容通过接口导入CAT,生成可以供译员使用的 CAT 任务。 导入流程如下
- 每一个目标语生成一个FileGuid,格式是 UUIDv4。
- 按照步骤生成一个Header Key格式为flow-202503-t 其中flow是平台名固定,202503是当前的年月,t代表步骤,可选值为t,e, p。
- 调用导入接口,导入粒度为每一个步骤调用一次导入任务,以下字段未必需的值
- X-Source(HTTP Header中参数)使用第二部生成的值
- fileGuid 使用第一步生成的值
- mid 句段号 使用句段的在本次导入时在总列表中的索引+1,然后to_string(),也就是从1开始,一直递增
- sid 句段ID 使用句段的ID(原始ID,来源内容库)
- source 原文的语言编码,例如 en-US
- sourceText 原文(纯文本) 从内容库中取到的原文
- sourceSegments 原文(结构化对象)
- isLock 是否锁定,默认值为 false
- groupId 组ID,使用句段ID
- target 目标语言编码,例如 zh-CN
- targetText 译文(纯文本)
- targetSegments 译文(结构化对象)
任务拆分
在任务被分配给译员之前,可以进行任务拆分,拆分后的任务不能再次拆分,拆分后的任务暂时不支持合并操作,任务拆分仅允许在第一个步骤中进行,拆分后会同步设置到所有步骤。
任务分配
在译员池中选择译员,进行任务分配,译员未开始任务之前,或者译员确认无法继续任务,可以进行任务重新分配。
任务验收
译员完成任务后,点击提交,任务进入已提交状态,PM对内容认可点击确认,任务进入已确认状态,任务完成,反之重新进入进行中状态。
项目交付
当所有任务的状态都是已确认时,PM可以确认项目完成,完成后项目进入已完成状态,关联的订单可以提交验收。
参考表结构
P.S. 表结构参考部位历史系统表设计,可能存在冗余,纰漏的情形,目的在于展示数据流转和数据大致的存储结构,勿直接用于生产。
1. 项目表 (projects)
sql
CREATE TABLE projects (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_id BIGINT NOT NULL COMMENT '关联订单ID',
name VARCHAR(255) NOT NULL COMMENT '项目名称',
description TEXT COMMENT '项目描述',
status ENUM('preparing', 'in_progress', 'completed') NOT NULL DEFAULT 'preparing' COMMENT '项目状态:准备中,生产中,已完成',
delivery_time DATETIME NOT NULL COMMENT '交付时间',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
created_by BIGINT NOT NULL COMMENT '创建人ID',
updated_by BIGINT NOT NULL COMMENT '更新人ID',
INDEX idx_order_id (order_id),
INDEX idx_status (status)
) COMMENT='本地化项目表';2. 项目语言对表 (project_language_pairs)
sql
CREATE TABLE project_language_pairs (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
project_id BIGINT NOT NULL COMMENT '项目ID',
source_language VARCHAR(10) NOT NULL COMMENT '源语言代码',
target_language VARCHAR(10) NOT NULL COMMENT '目标语言代码',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_project_id (project_id),
UNIQUE KEY uk_project_lang_pair (project_id, source_language, target_language)
) COMMENT='项目语言对表';3. 本地化步骤表 (localization_steps)
sql
CREATE TABLE localization_steps (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
project_id BIGINT NOT NULL COMMENT '项目ID',
step_type ENUM('translation', 'editing', 'proofreading') NOT NULL COMMENT '步骤类型:翻译(T),编辑(E),校对(P)',
is_enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
sequence INT NOT NULL COMMENT '步骤顺序',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_project_id (project_id)
) COMMENT='本地化步骤表';4. 项目语言资产表 (project_language_assets)
sql
CREATE TABLE project_language_assets (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
project_id BIGINT NOT NULL COMMENT '项目ID',
asset_type ENUM('terminology', 'translation_memory') NOT NULL COMMENT '资产类型:术语库(TB),翻译记忆库(TM)',
asset_id BIGINT NOT NULL COMMENT '资产ID',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_project_id (project_id),
UNIQUE KEY uk_project_asset (project_id, asset_type, asset_id)
) COMMENT='项目语言资产表';5. 项目风格指南表 (project_style_guides)
sql
CREATE TABLE project_style_guides (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
project_id BIGINT NOT NULL COMMENT '项目ID',
guide_content TEXT COMMENT '风格指南内容',
file_url VARCHAR(255) COMMENT '风格指南文件URL',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_project_id (project_id)
) COMMENT='项目风格指南表';6. 任务表 (tasks)
sql
CREATE TABLE tasks (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
project_id BIGINT NOT NULL COMMENT '项目ID',
step_id BIGINT NOT NULL COMMENT '关联的本地化步骤ID',
parent_task_id BIGINT COMMENT '父任务ID,用于任务拆分',
source_language VARCHAR(10) NOT NULL COMMENT '源语言代码',
target_language VARCHAR(10) NOT NULL COMMENT '目标语言代码',
word_count INT NOT NULL COMMENT '字数(工作量)',
expected_delivery_time DATETIME NOT NULL COMMENT '期望交付时间',
status ENUM('unassigned', 'in_progress', 'submitted', 'confirmed') NOT NULL DEFAULT 'unassigned' COMMENT '任务状态:未分配,进行中,已提交,已确认',
progress DECIMAL(5,2) DEFAULT 0 COMMENT '任务进度,百分比',
assignee_id BIGINT COMMENT '被分配人员ID',
is_split TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否拆分过',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
created_by BIGINT NOT NULL COMMENT '创建人ID',
updated_by BIGINT NOT NULL COMMENT '更新人ID',
INDEX idx_project_id (project_id),
INDEX idx_step_id (step_id),
INDEX idx_parent_task_id (parent_task_id),
INDEX idx_assignee_id (assignee_id),
INDEX idx_status (status)
) COMMENT='任务表';7. 任务分配历史表 (task_assignment_history)
sql
CREATE TABLE task_assignment_history (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
task_id BIGINT NOT NULL COMMENT '任务ID',
assignee_id BIGINT NOT NULL COMMENT '被分配人员ID',
assigned_by BIGINT NOT NULL COMMENT '分配人ID',
assigned_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '分配时间',
status ENUM('assigned', 'unassigned') NOT NULL COMMENT '分配状态:已分配,已取消',
reason VARCHAR(255) COMMENT '取消分配原因',
INDEX idx_task_id (task_id),
INDEX idx_assignee_id (assignee_id)
) COMMENT='任务分配历史表';8. 项目QA参数表 (project_qa_parameters)(预留,本期不开发)
sql
CREATE TABLE project_qa_parameters (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
project_id BIGINT NOT NULL COMMENT '项目ID',
parameter_key VARCHAR(50) NOT NULL COMMENT '参数键',
parameter_value TEXT COMMENT '参数值',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
INDEX idx_project_id (project_id),
UNIQUE KEY uk_project_param (project_id, parameter_key)
) COMMENT='项目QA参数表';