Whoops, I think I may have added an unintended 'de' to my previous post. What I meant to say was that the CK will always re-embed strings on saving. One would have use the editor's command line to export the string data and compile that into a string table, after each save.
Hmm, I had assumed that delocalisation was fairly straightforward. Well, it shouldn't be an issue, since this will be dealing with strings after localisation. The advanced mode will probably be a requirement though.
If you're curious, the way Bash goes about looking for Strings files:
Anyway, you probably have most stuff figured out already, think you're looking for UI suggestions, which I don't have right now.
Looking for strings files won't be an issue, they'll be picked by the user. I'd forgotten about BSAs though. Well, I can add support for looking inside them after I get loose string file reading done. Thanks for the reminder.

Exactly what TES5Edit does when translating. I also tried to use http://en.wikipedia.org/wiki/Levenshtein_distance instead of exact match to achieve a better translations, and results were good indeed, but it was taking too much time to translate even a small plugin, so I removed that code.
About strings IDs, in TES5Edit they are autoincremented indexes of lstrings occurence in a plugin when traversing records/subrecords starting from TES4 header. Don't know the way CK generates them though.
So matching on ID is a bad idea, string matching is much more consistent but still not the best. You should really try that levenstein or other similar method, this will work very good in StrEdit since the amount of data is much less when only 2 strings files loaded and compared. You can add an option with "match percentage" for comparison, "google translate" button will help a lot too I think.
I'm not entirely sure we're on the same page, so just to be clear, here are the usage cases I've been considering:
A user has A.esp and a corresponding A_English.STRINGS file, but they'd like a French translation. They then open A_English.STRINGS in StrEdit and translate the strings inside, then save the translation as A_French.STRINGS. All that's changed is the text, the IDs must match between the files because otherwise the plugin will load the wrong strings for each record, or fail to find strings.
If the user doesn't translate all the strings in one go, but decides to finish the translation off later, they then load both files in StrEdit - it matches the original and translation using their associated IDs, so that the user can see which strings they've already translated. They can then continue from where they left off and save the updated translation file.
The author of A.esp then releases an update, and the user finds that his translation no longer works with the update because the IDs have changed, or more things have been added so the translation is now incomplete again. The user then opens 3 files in StrEdit: their translation file, the strings file for the new version and the strings file for the old version. StrEdit uses IDs to match the translated strings to the old untranslated strings, then uses the strings themselves to match the old untranslated strings to the new untranslated strings, allowing it to match the translated strings to the new IDs.
The new and old strings might differ slightly, so I might use Levenstein matching - I hadn't considered that possibility, so thanks.
