Skip to content

Localization Project Management

The localization project management module is mainly responsible for managing localization projects, including project creation and setup, task management, project delivery, etc.

Converting Orders to Localization Projects

When the order price is confirmed, on the LSP side, by clicking the "Convert Order to Localization Project" button, the order is converted into a localization project for management. At this time, a localization project associated with the order is generated in the project table. One order creates one localization project.

Localization Project Management

The core function of project management is to complete the delivery of localization projects. This part will be gradually iterated around three factors: quality control, cost control, and risk (progress) control. The current development phase mainly focuses on project setup and task management.

Project Management

A project includes the following information:

  • Basic project information
    • Project name
    • Project description
    • Project status (In preparation, In production, Completed)
    • Language pairs
    • Delivery time
  • Localization step information
    • Translation (T)
    • Editing (E)
    • Proofreading (P)
  • Project language assets
    • Terminology Base (TB)
    • Translation Memory (TM)
  • Project pre-translation parameters (not developed in this phase)
  • Project QA parameters and Style Guide
    • QA parameters provide QA engine (not developed in this phase)
    • Style Guide provides reference for translators

Task Management

Task management is mainly responsible for task creation, splitting, assignment, acceptance, etc. A task mainly has the following information:

  • Word count (workload)
  • Expected delivery time
  • Task status (Unassigned, In progress, Submitted, Confirmed)
  • Task progress
  • Assigned personnel
  • Whether it has been split

Task Creation

Tasks are created when the project settings are saved for the first time. At this time, the localization step information in the project settings is read to generate tasks. When no task has been assigned to personnel, if the localization step information changes, tasks will be regenerated.

CAT Integration

When generating tasks, it is necessary to call the content library's content retrieval interface to obtain content through the Snapshot ID in the order, and then import the content into CAT through an interface to generate CAT tasks for translators to use.

The import process is as follows:

  1. Generate a FileGuid for each target language, in UUIDv4 format.
  2. Generate a Header Key based on the step, formatted as flow-202503-t, where "flow" is the fixed platform name, "202503" is the current year and month, and "t" represents the step, with possible values being t, e, p.
  3. Call the import interface once for each step. The following fields are necessary values:
    • X-Source (HTTP Header parameter) uses the value generated in step 2
    • fileGuid uses the value generated in step 1
    • mid segment number uses the segment index + 1 in the total list of this import and then to_string(), starting from 1 and incrementing continuously
    • sid segment ID uses the segment ID (original ID from content library)
    • source source language code, e.g., en-US
    • sourceText source text (plain text) from the content library
    • sourceSegments source text (structured object)
    • isLock whether locked, default value is false
    • groupId group ID, uses segment ID
    • target target language code, e.g., zh-CN
    • targetText target text (plain text)
    • targetSegments target text (structured object)

Task Splitting

Before a task is assigned to a translator, it can be split. Split tasks cannot be split again. Merging of split tasks is not supported at this time. Task splitting is only allowed in the first step, and after splitting, the settings will be synchronized to all steps.

Task Assignment

Select translators from the translator pool for task assignment. Before the translator starts the task, or if the translator confirms they cannot continue the task, the task can be reassigned.

Task Acceptance

After the translator completes the task, they click submit, and the task enters the submitted state. If the PM approves the content and clicks confirm, the task enters the confirmed state and is completed. Otherwise, it returns to the in-progress state.

Project Delivery

When all tasks are in the confirmed state, the PM can confirm that the project is completed. After completion, the project enters the completed state, and the associated order can be submitted for acceptance.

Reference Table Structure

P.S. The table structure references historical system table designs and may contain redundancies and omissions. The purpose is to demonstrate data flow and approximate storage structure, not for direct production use.

1. Projects Table (projects)

sql
CREATE TABLE projects (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    order_id BIGINT NOT NULL COMMENT 'Associated order ID',
    name VARCHAR(255) NOT NULL COMMENT 'Project name',
    description TEXT COMMENT 'Project description',
    status ENUM('preparing', 'in_progress', 'completed') NOT NULL DEFAULT 'preparing' COMMENT 'Project status: preparing, in progress, completed',
    delivery_time DATETIME NOT NULL COMMENT 'Delivery time',
    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 'Creator ID',
    updated_by BIGINT NOT NULL COMMENT 'Updater ID',
    INDEX idx_order_id (order_id),
    INDEX idx_status (status)
) COMMENT='Localization project table';

2. Project Language Pairs Table (project_language_pairs)

sql
CREATE TABLE project_language_pairs (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    project_id BIGINT NOT NULL COMMENT 'Project ID',
    source_language VARCHAR(10) NOT NULL COMMENT 'Source language code',
    target_language VARCHAR(10) NOT NULL COMMENT 'Target language code',
    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='Project language pairs table';

3. Localization Steps Table (localization_steps)

sql
CREATE TABLE localization_steps (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    project_id BIGINT NOT NULL COMMENT 'Project ID',
    step_type ENUM('translation', 'editing', 'proofreading') NOT NULL COMMENT 'Step type: translation(T), editing(E), proofreading(P)',
    is_enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT 'Whether enabled',
    sequence INT NOT NULL COMMENT 'Step sequence',
    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='Localization steps table';

4. Project Language Assets Table (project_language_assets)

sql
CREATE TABLE project_language_assets (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    project_id BIGINT NOT NULL COMMENT 'Project ID',
    asset_type ENUM('terminology', 'translation_memory') NOT NULL COMMENT 'Asset type: terminology(TB), translation memory(TM)',
    asset_id BIGINT NOT NULL COMMENT 'Asset 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='Project language assets table';

5. Project Style Guides Table (project_style_guides)

sql
CREATE TABLE project_style_guides (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    project_id BIGINT NOT NULL COMMENT 'Project ID',
    guide_content TEXT COMMENT 'Style guide content',
    file_url VARCHAR(255) COMMENT 'Style guide file 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='Project style guides table';

6. Tasks Table (tasks)

sql
CREATE TABLE tasks (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    project_id BIGINT NOT NULL COMMENT 'Project ID',
    step_id BIGINT NOT NULL COMMENT 'Associated localization step ID',
    parent_task_id BIGINT COMMENT 'Parent task ID, used for task splitting',
    source_language VARCHAR(10) NOT NULL COMMENT 'Source language code',
    target_language VARCHAR(10) NOT NULL COMMENT 'Target language code',
    word_count INT NOT NULL COMMENT 'Word count (workload)',
    expected_delivery_time DATETIME NOT NULL COMMENT 'Expected delivery time',
    status ENUM('unassigned', 'in_progress', 'submitted', 'confirmed') NOT NULL DEFAULT 'unassigned' COMMENT 'Task status: unassigned, in progress, submitted, confirmed',
    progress DECIMAL(5,2) DEFAULT 0 COMMENT 'Task progress, percentage',
    assignee_id BIGINT COMMENT 'Assignee ID',
    is_split TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Whether it has been split',
    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 'Creator ID',
    updated_by BIGINT NOT NULL COMMENT 'Updater 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='Tasks table';

7. Task Assignment History Table (task_assignment_history)

sql
CREATE TABLE task_assignment_history (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    task_id BIGINT NOT NULL COMMENT 'Task ID',
    assignee_id BIGINT NOT NULL COMMENT 'Assignee ID',
    assigned_by BIGINT NOT NULL COMMENT 'Assigner ID',
    assigned_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Assignment time',
    status ENUM('assigned', 'unassigned') NOT NULL COMMENT 'Assignment status: assigned, unassigned',
    reason VARCHAR(255) COMMENT 'Reason for unassignment',
    INDEX idx_task_id (task_id),
    INDEX idx_assignee_id (assignee_id)
) COMMENT='Task assignment history table';

8. Project QA Parameters Table (project_qa_parameters) (Reserved, not developed in this phase)

sql
CREATE TABLE project_qa_parameters (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    project_id BIGINT NOT NULL COMMENT 'Project ID',
    parameter_key VARCHAR(50) NOT NULL COMMENT 'Parameter key',
    parameter_value TEXT COMMENT 'Parameter value',
    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='Project QA parameters table';