{{ reference.reason }}
Source {{ reference.originSourceHash }}
{{ reference.snapshot?.english?.join('\n') }}{{ reference.snapshot?.translations?.join('\n') }}SDEditor is a translation editor for Path of Exile StatDescriptions files, with Google sign-in for personal settings backup, shared language dictionaries, and collaboration on matching source versions.
Choose the Path of Exile version you are translating. Source files, workspace data, and history are stored separately for each version.
We found SDEditor data from before PoE1/PoE2 split storage. It looks like {{ formatGameVersion(pendingSingleVersionMigration.detectedVersion) }} data.
Source files: {{ pendingSingleVersionMigration.sourceCount }}
Workspace files: {{ pendingSingleVersionMigration.workspaceCount }}
History entries: {{ pendingSingleVersionMigration.revisionCount }}
WORKSPACE PREFERENCES
Choose your translation language to get started.
These preferences apply across your workspaces.
Settings and regex rules are personal. Dictionaries are shared by language. Managers and admins can work in every language.
When signed in with language access, saved translations automatically collaborate with translators using the same game and source version. Your name and selected or open file are visible to them. Typing stays in your draft until Save.
Privacy policy · How Google sign-in and cloud storage use your data.
Cloud backup is disabled in test mode.
{{ cloudUser.isAdmin ? 'Admin' : 'Manager' }} · Access to every language
Assigned language: {{ cloudUser.language }} · Current dictionary is local only
{{ cloudSyncIssue }}
Choose your translation language in to keep your existing dictionary under that language before cloud backup.
Users appear after their first Google sign-in. Managers can view and edit every language. Translators need an assigned language; clearing it stops their cloud access and keeps their local work.
{{ cloudHistoryUnavailableReason }}
Download your settings, regex rules, and current language Dictionary as a JSON file, or restore a saved copy.
Start from scratch for {{ gameVersionLabel }}. This deletes the selected version's translated workspace and history.
You have more than one instance of SDEditor open in your browser. This can cause data loss or conflicts if you save translations simultaneously across multiple tabs or windows.
You can close this message, but please be careful about data loss.
{{ duplicateLangImportWarning.fileName }} contains duplicated lang blocks. Choose the entry SDEditor should keep for each duplicate group, then confirm to continue importing.
Select one entry for each duplicate group to enable Confirm. Remaining: {{ duplicateLangResolutionRemainingCount() }}.
{{ gameVersionLabel }}{{ gameVersionLabel }} · {{ cloudCanAccessAllLanguages ? (cloudUser?.isAdmin ? 'Admin' : 'Manager') : (cloudUser?.language || lang) }}
{{ managedVisibleError }}
Sign in to select manager-published versions. Your offline workspace remains available.
Your account needs a team language assignment before online versions are available.
Showing versions cached in this browser. Downloaded versions remain available offline.
| Version | Import deadline | Published | Actions |
|---|---|---|---|
| {{ version.name }}HEADEndedWithdrawn{{ managedCached(version) ? 'Available in this browser' : 'Download when selected' }} | Actions |
Loading online versions…
No source versions have been published for this game.
Your local import workflow. Start with the previous ZIP, then import the next update as usual.
{{ managedOfflineVersion.sourceHash?.slice(0, 16) }}
Loading offline workspace…
No standalone offline workspace is stored for this game.
{{ managedFormatDeadline(managedSelectedVersion.deadlineAt) }}
ZIP {{ managedSelectedVersion.zipHash?.slice(0, 16) }}
This version was withdrawn. Its work and history remain available for reference and recovery.
| Online | Actions | ||
|---|---|---|---|
| {{ team.language }}Ended{{ team.counts.loaded }} filesChanges since collection | {{ managedProgress(team).total ? managedProgress(team).saved + ' / ' + managedProgress(team).total : '—' }}{{ managedProgress(team).percent }}%
|
— |
Loading team details…
Team details are unavailable.
Progress shows Saved / (Missing + Saved). Revised is included in Saved; intentionally blank saves can also be Missing. Collections contain server-accepted Saved files; unsaved drafts and pending offline uploads remain outside the collected ZIP.
One original ZIP is published to all 12 teams. Import decisions are shared; translation work remains separated by language.
{{ managedUpload.status.replaceAll('_', ' ') }} · {{ managedUpload.completedTeams }} / 12 teams
{{ (managedUploadBytes / 1048576).toFixed(1) }} MB uploaded
These teams have already started work. Publishing reuses their matching rooms and retains their work and history.
{{ managedUpload.existingTeams.length }} matching shared rooms; no recorded translation work yet.
Only work already shared with the server is shown here. Local drafts and saves awaiting upload remain in each translator’s browser.
{{ managedUploadError }}
· withdrawn; restore its existing entry to publish it again.
{{ managedUpload.validation.repairs.length }} recoverable source repairs applied. The original ZIP bytes are retained unchanged.
{{ group.options.find(option => String(option.occurrence) === String(managedDuplicateChoices[group.filepath + '|' + (group.language || group.lang)]))?.content?.join('\n') }}
{{ managedVisibleError }}
These predecessor copies include removed files and alternatives to existing room or Dropped work. Existing work remains authoritative. Review the preserved text before explicitly saving a correction.
{{ reference.reason }}
Source {{ reference.originSourceHash }}
{{ reference.snapshot?.english?.join('\n') }}{{ reference.snapshot?.translations?.join('\n') }}Welcome to SDEditor!
Read the Editor guide for more information.
* It is recommended to import the last version of StatDescriptions.zip first.
Arrow Up and Down return to the current selection or move between files while the list is focused. Arrow Down from search selects the first file. Home and End select the first and last files on the current page. Page Up and Page Down move ten files. Arrow Left and Right change page; the next page selects its first file and the previous page selects its last file. {{ inlineEditor ? 'Click a row to edit in place; click its filename, double-click the row, or press Enter on the row to open the full editor. Ctrl plus Up or Down opens the previous or next file from the table or translation text. Plain arrows retain normal text-editing behavior in text fields.' : 'Click a row or press Enter to open it.' }}
| {{ desc.hasDiagnosticError ? 'Error' : 'Warning' }}DroppedRevisedLocal draft
{{ editorLoadError }}
|
{{ block.english || '\u00a0' }}
|
{{ collaborationPeerLabel(peer, desc.filepath) }}
{{ block.translation || '\u00a0' }}
Local draft
{{ inlineDraftFor(desc.filepath).translations.map(decodeEscapedNewlines).join('\n') }}
|
This file is absent from the current source. Choose which preserved copy to keep for later review.
{{ droppedConflictExplanation(conflict) }}
The original English source was not preserved.
{{ (conflict.yours.snapshot?.english || []).join('\n') }}{{ (conflict.yours.snapshot?.translations || []).join('\n') }}This copy has already been resolved.
The original English source was not preserved.
{{ (conflict.shared.snapshot.english || []).join('\n') }}{{ (conflict.shared.snapshot.translations || []).join('\n') }}{{ selectedFileFilters.length ? 'Try another search or open Filters to select more statuses.' : 'Open Filters and tick one or more statuses to see matching stat files.' }}
{{ editorLoadError }}
{{ collaborationEditorNotice }}
{{ droppedConflictExplanation(editorDroppedConflict) }}
The original English source was not preserved.
{{ (editorDroppedConflict.yours?.snapshot?.english || []).join('\n') }}{{ (editorDroppedConflict.yours?.snapshot?.translations || []).join('\n') }}This copy has already been resolved.
The original English source was not preserved.
{{ (editorDroppedConflict.shared.snapshot.english || []).join('\n') }}{{ (editorDroppedConflict.shared.snapshot.translations || []).join('\n') }}Your saved result remains local. Resolve these copies, then Save again to share it.
Your saved result remains local. Review this translation, then Save & close to share it.
The original English source was not preserved in this older workspace.
The source entry count changed. Review the dropped copy and save a replacement.
This imports the file's settings and dictionary for its language. A local recovery copy is saved first. Dictionary changes will sync when this account has access to that language.
Choose which changes to keep. Independent changes are already combined in the result.
{{ (cloudConflict.local || cloudConflict.remote || cloudConflict.base).find }} · {{ cloudConflictIndex + 1 }} of {{ cloudConflicts.length }}
{{ cloudDefinitionText(cloudConflict.localDefinitions) }}Automatically merged{{ cloudDefinitionText(cloudResult) }}Preview · choose a side{{ cloudDefinitionText(cloudConflict.remoteDefinitions) }}Automatically merged{{ cloudConflict.localNote || '—' }}Automatically merged{{ cloudResult ? (cloudResult.tlnote || '—') : 'Entry deleted' }}Preview · choose a side{{ cloudConflict.remoteNote || '—' }}Automatically merged{{ cloudStatus }}
No dictionary conflicts remain.
{{ cloudHistoryLanguage }} · See who changed each entry and restore an earlier version.
History recording began {{ cloudHistoryDate(cloudHistoryCoverage.startedAt) }}. Earlier entries appear as a baseline without author attribution. {{ cloudHistoryCoverage.legacyDeletions }} earlier deletion(s) have no saved content to restore. Automatic merge labels describe the synchronizing editor's merge decision.
{{ cloudHistoryError }}
{{ cloudHistoryNotice }}
No shared changes match these filters. Local edits appear after they are synchronized.
Loading version…
{{ cloudHistoryActor(cloudHistoryEvent) }} · {{ cloudHistoryDate(cloudHistoryEvent.createdAt) }} · {{ cloudHistoryOrigin(cloudHistoryEvent) }} · Revision {{ cloudHistoryEvent.revision }}
Entry ID: {{ cloudHistoryEvent.entryId }} · Restored from event {{ cloudHistoryEvent.sourceEventId }} ({{ cloudHistoryEvent.sourceVersion }})
{{ cloudHistoryEvent.canRestoreBefore ? cloudHistorySnapshotText(cloudHistoryEvent.before) : 'This version predates history recording and is unavailable.' }}{{ cloudHistorySnapshotText(cloudHistoryEvent.after) }}This changes the shared entry for all {{ cloudHistoryLanguage }} translators and keeps the same entry ID. Your current local version is preserved in a recovery copy.
{{ cloudHistorySnapshotText(cloudHistoryEvent.current) }}{{ cloudHistorySnapshotText(cloudHistoryRestoreEntry) }}The selected version has no entry. Restoring it deletes this entry from the shared dictionary.
If the shared dictionary changes before saving, review a fresh version before trying again.
{{ comment.body }}
No comments yet. Share a thought about this file.