Dashboard Workflow

Day to day CLIFF is just two actions: export (UE → .cliff) and import (.cliff → UE). Both run as a step of the official GatherText pipeline, so the progress window and log format match the official Import Text / Export Text workflow exactly.

Before you start

  1. Open Tools > Localization Dashboard and select a Localization Target
  2. Make sure the target has a Native Culture and at least one foreign culture
  3. Confirm the toolbar shows CLIFF 导入 / CLIFF 导出 / AI 翻译

NOTE

Those buttons are injected through the plugin’s official LocalizationService provider. Selecting a TargetSet instead of a target shows the same buttons with different behaviour: export/import process every target in the set (one sub-directory per target), while AI translation opens the culture picker and then runs target by target.

Export: UE → CLIFF

Use it to pull existing translations out into reviewable text files for translators, reviewers or external tools.

  1. Click CLIFF 导出

  2. Pick an output directory in the directory dialog

    CLIFF 导出目录对话框,默认目录为 Target 的本地化数据目录(Content/Localization/<Target>)

  3. The official-style progress window appears with the Export Translations task; a notification reports the output directory when it finishes

    官方同款 Slate 进度窗口:任务列表(含状态图标)、顶部进度条、实时日志与 Copy Log / Save Log / OK / Cancel

The output layout is one directory per culture, named after the target:

<output directory>/
├── <Manifest>.cliffmap.json        # key sidecar (shared by the whole export)
├── zh-Hans/
│   └── cliff-<target>.cliff
├── ja/
│   └── cliff-<target>.cliff
└── …

IMPORTANT

.cliffmap.json is what makes the round trip lossless. UE keys are often the source text itself (Chinese, |, capitals and / are all legal), which cannot be a CLIFF name. The exporter therefore generates stable IDs and records “original UE Namespace / Key ↔ CLIFF canonical ID” in the sidecar. Import picks the sidecar up automatically, so move and commit the sidecar together with the .cliff files.

TIP

Sidecar lookup order: first <file name>.cliffmap.json next to the imported file, then <Manifest>.cliffmap.json one directory up. Without a sidecar the importer derives keys from the Clan to Namespace table plus <group-path>.<entry-id> and logs a warning.

Import: CLIFF → UE

Use it to write .cliff files back into the project — hand-edited, machine-generated or AI-translated.

  1. Click CLIFF 导入

  2. Choose a directory containing .cliff files (the plugin scans it recursively for *.cliff and sorts the results)

    CLIFF 导入目录对话框:标题为 “Select a directory containing CLIFF files to import”

  3. The progress window runs two official tasks: Import TranslationsGenerate Reports

  4. A notification reports how many files were imported, and the Dashboard word counts refresh

What the import actually does (two steps inside one GatherText config):

GatherTextStep0: CommandletClass=CliffImport
    SourcePath      = <Content>/Localization/<Target>
    ManifestName    = <Target>.manifest
    ArchiveName     = <Target>.archive
    NativeCulture   = zh-Hans
    CulturesToGenerate = zh-Hans / en / ja / ...
    CliffFilePath / CliffDirectory + CliffImportCulture
        ↓ writes manifest (source text) and archive (translations)
GatherTextStep1: CommandletClass=GenerateTextLocalizationResource
    DestinationPath = <Content>/Localization/<Target>
    ResourceName    = <Target>.locres
        ↓ recompiles .locmeta / .locres (including the native culture)
        ↓ FTextLocalizationManager live refresh + LocalizationDelegates broadcast

IMPORTANT

Import sorts the native culture first and, when the source language is imported, rewrites the effective source of every foreign archive entry (translations untouched). Import order therefore stops mattering: importing only the source language, only foreign languages, or everything at once converges in a single run without spurious “needs review” flags in the Translation Editor.

After the import

CheckWhereExpected
Entries and translationsWindow > Localization > Translation EditorNew entries present, foreign translations filled, zero “needs review”
Word countsTarget details in the Localization DashboardWord counts and completion refresh with the report
Live refreshEditor UI / PIENew text is visible without restarting the editor
Compiled resourcesContent/Localization/<Target>/<Culture>/<Target>.locresRebuilt for every culture, including the native one

Equivalent commands

The same pipeline runs headless (for example in CI):

CliffLocalizationSuite.Export <targetName> <outputDirectory>
CliffLocalizationSuite.Import <clifFilePath> <targetName>

All parameters are documented in commands and commandlets.

Practical advice

  • Never hand-edit manifest / archive: the official FLocTextHelper owns them and the next import overwrites manual changes.
  • Version-control .cliff files together with their sidecar: .cliff is plain text — UTF-8 without BOM, LF — so it diffs and reviews well.
  • Keep export directories outside the repository (for example Saved/CliffExport/) unless you deliberately maintain a translation repository.
  • Batch directory import: every .cliff in one directory is imported in a single official task, with per-file results in the log.