Skyrim String Localizer
Posted 12 December 2011 - 09:23 PM
Writing out the strings directly into the esp shouldn't be too big of an issue and there's other reasons to do so, but it's not necessary for the situation you've described.
To do this now, you use the Skyrim_xxxxx.STRINGS file to start with, change your translations within the gird in Skyrim Strings Localizer, uncheck the use binary data checkbox, then write out your STRINGS files as normal. This will create a strings file for your mod that uses the same string IDs as the original translation, but replaces the text with whatever you wanted. This also makes it easy to use different languages as the string IDs are the same and you just need to use the Skyrim_xxxxx.STRINGS file from whichever language you wanted to translate to. If you write strings directly out to the esp, you lose the string IDs completely making it difficult to translate to another language file.
So, I've got two version numbers in the software itself, and I haven't gotten around to syncing them... It's both 184.108.40.206 AND 0.3.0.0
Posted 13 December 2011 - 02:16 AM
Okay, I knew I had a lot to learn about C#, but adding some more advanced UI type features is taking longer than I expected Still, it's coming along nicely. The program can now read an existing esp and find the text strings in the selected STRINGS files. The rows it finds are displayed in green. Ones it doesn't find are displayed in light red. You can right-click one of these rows and either assign a new ID or manually choose a string from the STRINGS files.
The last part is only partially working. I've got a form that pops up, shows the string you selected and then displays every string in the appropriate STRINGS file. I still need to figure out the best way of passing the selection back to the main form as well as maybe add a "Best Guess" feature that at least shows a close match. There's several ways of doing it, but I haven't decided how I want to deal with it yet.
I'm taking a short break and will pick it back up tomorrow... I'm hoping I'll be able to get the next version up in the next couple of days.
Posted 14 December 2011 - 02:38 AM
I've also discovered that if you have a DLSTRINGS entry that has <##> in the text, where ## is a number, it will fail a lookup and the description won't be displayed. What's interesting, is that I've removed the brackets and it still fails the lookup. Not sure what's going on with this, but I'll be trying to figure that out as I go.
Posted 14 December 2011 - 04:09 AM
To do this now, you use the Skyrim_xxxxx.STRINGS file to start with, change your translations within the gird in Skyrim Strings Localizer, uncheck the use binary data checkbox, then write out your STRINGS files as normal. This will create a strings file for your mod that uses the same string IDs as the original translation, but replaces the text with whatever you wanted.
Please forgive a pure little stupid idiot. I didnt come to the idea the grid could be editable. Your program is much better than i thought. This make many more thinks much more easier. I will link to your program much more than before.
Did i say thanks? Anyway thanks, thanks, thanks!
Posted 14 December 2011 - 12:26 PM
Thanks to loveltzzm, we may have found out a workaround for the LOOKUP FAILED! errors on objects that have an enchantment. It appears you can just zero out the DESC field on those objects in the esp file and the game looks up the description from the ENCH records. What's really wierd is if you only have only one object with an enchantment that contains a <##> in the DESC, it works just fine...
Anyway, back to dissecting the esp and reading it into a memory structure . Once I can read it, then write it back out and get the same file, I can start manipulating it
Edited by MaboroshiDaikon, 14 December 2011 - 12:28 PM.
Posted 15 December 2011 - 03:14 PM
1. It's necessary to have an abillity to load Skyrim.esm or any another esm/esp file as template with original [ID] and [FULL NAME] of items, NPC's, etc. This values can be showed in new columns of the grid - just as made in fo3edit/fnvedit.
2. String list for "Choose from string list" option can be buffered, because it's annoying when it's loading each time again. Also, the "Cancel" button does not work in "Choose string" window.
3. Please, add codepage 1251 (Cyrillic) for encoding strings and loading names from esm (as described in clause 1).
Posted 15 December 2011 - 03:57 PM
1) Not sure entirely what you're getting at (I haven't used fo3edit), but I definitely plan on adding the esp ID's to the first column. I'll look into adding the editor name as well, should be easy enough.
2) Choose from string list is currently under construction and doesn't do much of anything other than display the appropriate STRINGS file in a grid. I needed to release a version that fixed two other bugs ASAP, so some of my in-progess work is still enabled (but not working).
BTW, while I'll definitely try to make it easy to work with the strings list, it *is* 30,000+ entries... I'll probably change the whole paradigm and basically add a button that pops up the list and you can use the list and the main page at the same time, side-by-side, changing rows on the main page and double-clicking the popped up strings list to change them.
3) You can actually type any codepage you want into that box and it will work as long as it's a Windows codepage. I don't currently save that box out anywhere, so it doesn't remember it on next load, but it should keep it while you have the program open. The only unique code paths would be for things like Unicode, UTF7 and UTF8 and such. I've coded for the later two, but not Unicode as I don't think Skyrim handles 2byte language strings. As it seems that Cyrillic is actually used in a Skyrim version, I'll add it to the programmed list for the next version.
Basically, The hack I built that reads specific data from esps won't work for writing them, so I'm creating some structures to handle the esp records now, and it's a bit of a beast. I'm not even planning to fully support all esps in the first revision. I also haven't had much time to work on it the past couple of days, so it's going kind of slowly
Edited by MaboroshiDaikon, 15 December 2011 - 04:09 PM.
Posted 15 December 2011 - 05:49 PM
Please, check this: http://s2.ipicture.r...23/TLWLSuF5.jpg
As you can see the row "FULL - Name" contains names of the same object for main file (esm) and different mods. Such presentation is perfect for comparing and "translating" (drag'n'drop) on the fly. In our case, changed names would be saved in the STRINGS file ONLY, not the plugin file.
The grid view could be as follows:
| ID | ESM TEXT | ESP TEXT | STRINGS |
|00000123|Original object name|Object name from plugin|Our translated object name|
Note: "ESM TEXT" column can contain data from another plugin ("esp" file, selected instead of the "esm"). This even may be the same plugin, but older version. I repeat, all changes will be saved ONLY to the "STRINGS" column and appropriate file.
I found Unicode fonts for Skyrim mod (http://skyrimnexus.c...file.php?id=637), may be the game can handle them nevertheless... And thanks for adding CP1251.
Keep going, your program may be the best translation tool for Skyrim EVER! ;-)
Posted 16 December 2011 - 12:46 AM
Ah, now that I see the screenshot, I realize that I have used fnvedit before and now I know what you're getting at
With that in mind, I've got an update on my progress.
I can read ESPs into a structure! Yay! I guess. I've tested in on a couple of esps I had and was able to display the "formIDs" and the Editor Names for multi-group esps. I currently crash on esps that have child groups (such as CELL type groups), which is OK for now. I'll work on that a little later. Up next is writing the class function to write esps, then going through a test where I change an esp, rewrite it and load it up into Skyrim
Now, back to the suggestion from antaurus: At this point, reading the Skyrim.ESM is way too big a task Instead, I'll probably do this:
| FormID | EDID | StringID | STRINGS |
FormID is what it was called in Oblivion, but it's basically the same thing in Skyrim. EDID is a string, stored in the esp, that describes the object. Usually something like "GuardianCircleScroll." StringID and STRINGS are what's there now.
Once I've got that working, I can work on expanding things. Maybe by adding checkboxes that remove or add columns to the display.
I can now write the file out and get an exact copy of the esp I've read. Next comes the fun part of writing code that lets me modify the esp!
Edited by MaboroshiDaikon, 16 December 2011 - 03:13 AM.
Posted 16 December 2011 - 07:35 AM
"...Up next is writing the class function to write esps..."
Don't you try to make Skyrim Construction Set before the Bethesda realise their!? :-) To my mind, it's not nessesary to implement a such functionality. But it's up to you.
"...reading the Skyrim.ESM is way too big a task..."
AFAIK, esm and esp formats are similar, except of some flag(s) in their headers. Only problem I see is some kind of memory management. I think the temporary DB could be the solution.
"| FormID | EDID | StringID | STRINGS |"
Alternatively, you can use only STRING-files in your program, without touching any esp/esm's:
The author used some console program, which can dump all ID/NAME data in STRING file from esm(esp)...
EDIT: this data is useless, because the text is not the "Full-NAME", but EDID mentioned by you.
So the table view will be changed to this:
| FormID | Skyrim-[Language].STRINGS [text] | esm-dump.STRINGS  | plugin-dump.STRINGS  |
Call it the alternative mode for editing, if you want, which can be used already.
Edited by antaurus, 16 December 2011 - 08:55 AM.