Block {{ block.index + 1 }} · Table (@ separates columns)
{{ block.english || '(No English text)' }}
{{ block.translation || '(No translation)' }}
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 with translators assigned to the same language.
When signed in with an assigned language, 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.
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 here after their first Google sign-in. Clearing an assignment stops 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() }}.
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. Click a row or press Enter to open it.
| {{ (desc.hasDiagnosticError ? '[ERROR] ' : (desc.hasDiagnosticWarning ? '[WARNING] ' : '')) + elipsisRenderer(desc.filedir) }} | Needs review |
{{ collaborationPeerLabel(peer, desc.filepath) }}
|
{{ 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 }}
No reference files match. Try another search or language.
Do not translate
{{ lookupSelectedReference.stats.join('\n') }}{{ block.english || '(No English text)' }}
{{ block.translation || '(No translation)' }}
This file has no text blocks.
Select a result to read its full text. You can select and copy reference text.
{{ commentsFilepath }}
Shared across all languages and source versions
{{ commentsUnavailableReason }}
{{ commentsFileError }}
{{ commentsUnreadError }}
Local history · saved in this browser
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.
{{ comment.body }}
No comments yet. Share a thought about this file.