SDEditor is a translation editor for Path of Exile StatDescriptions files, with optional Google backup for settings and shared language dictionaries.
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 }}
Settings and regex rules are personal. Dictionaries are shared with translators assigned to the same language.
Privacy policy · How Google sign-in and cloud storage use your data.
Cloud backup is disabled in test mode.
{{ cloudUser.name || cloudUser.email }}
{{ cloudUser.email }}
Assigned language: {{ cloudUser.language }} · Current dictionary is local only
Not configured — awaiting admin language assignment
{{ cloudStatus }}
Choose a language below to keep your existing dictionary under that language before cloud backup.
Users appear here after their first Google sign-in. Clearing an assignment stops cloud access and keeps their local work.
{{ cloudHistoryUnavailableReason }}
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() }}.
Welcome to SDEditor!
Read the Editor guide for more information.
* It is recommended to import the last version of StatDescriptions.zip first.
| Directory {{ this.currentSort == "filedir" ? this.currentSortIcon : "" }} | Filename{{ this.currentSort == "filename" ? this.currentSortIcon : "" }} | English{{ this.currentSort == "english" ? this.currentSortIcon : "" }} | Translation{{ this.currentSort == "translation" ? this.currentSortIcon : "" }} |
|---|---|---|---|
| {{ (desc.hasDiagnosticError ? '[ERROR] ' : (desc.hasDiagnosticWarning ? '[WARNING] ' : '')) + elipsisRenderer(desc.filedir) }} | {{ (desc.needsReview ? '⚠ ' : '') + desc.filename }} |
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.
{{ cloudUser && cloudUser.language }} · 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 {{ cloudUser && cloudUser.language }} 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.