In The Elder Scrolls V: Skyrim Bethesda introduced a new way to localize their Master (.esm) and Slave/Plug-In (.esp) files - the so-called Strings.
This page is aimed at people or teams who want to translate Enderal into another language and want to learn about this new and more comfortable way to do so.
Strings are basically a sort of database which tell the Masters/Plug-Ins which text is displayed ingame (this text can be anything - from item names, to perks or messages or even the subtitles).
There are three types of Strings: .Strings, .DLStrings and .ILStrings, what these 3 different type encompass is something you will learn while using the translator, important for now is just that you always need those 3 files for any localized modification.
Of course just having Strings is not enough, you need to tweak your .esm or .esp so that it actually uses them. In the past you had to do that manually for each single text in your modification with a certain Hex-ID index linked to each such text.
Nowadays TesVEdit takes over that job, but more to that later.
Advantages and Disadvantages of Strings
This is an important point, after all you can also manually translate every single text in the .esm and release it like that.
- Easy to use
- Easy to edit
- Savegame Compability
The first advantage is that you do not need any knowledge in the CK to translate a modification with Strings and that you cannot accidentally destroy the mod by messing with the scripts or names. Also you can move the Strings and the esm easily to another PC and translate them there, without having to use the CK (for which you need all of the Skyrim files).
The second advantage is the savegame compability between mods in different languages if you are using Strings. As the actual values in the esm do not change (the Strings only replace the displayed text, remember) savegames are 100% compatible between the EV, the DV (as it is the base) and any other language in which you translate Enderal by using Strings.
- debug.notification and debug.messagebox are not taken into your Strings
- Changes in the original .esm will reset the translated text
The first disadvantage currently hurts the experience with the EV, though we are fixing them as fast as possible - once we are done that disadvantage becomes moot. The second one is something you will also experience with a direct translation but it has to be said nonetheless.
Localizing the Masterfile
You can skip this entire point if you are using the EV Master and its Strings for your translation.
If you want to use Strings, you will first need the base Strings from which you are translating. To get them and at the same time also enable the Masterfile to use Strings you need to localize that Masterfile.
To do so you take the Skyrim.esm, copy it and paste it again into your Data folder. Usually it will then get a name like Copy - Skyrim.esm. This is an important step as the program you will use to localize the .esm cannot localize the first Masterfile loaded in it.
The programm you need to localize the .esm is called TES5Edit and you can download it from here
Once you have it on your PC start it and load both the Skyrim.esm and the Copy - Skyrim.esm (or whatever you have called it). When it is finished right click on the Copy - Skyrim.esm and then go to Other -> Localization -> Localize Plugin. If it asks you to confirm the localization hit Yes and it will generate the String files (this will take at least one minute, do not worry if it seems that TES5Edit stopped working, it actually still does its job so just leave it alone) - once it is finished it asks you if you want to save the files, hit yes again and upon saving the files TES5Edit will close itself.
Now you have the base Strings and a localized masterfile - as you used the Copy - Skyrim.esm for generating the Strings they will be named appropriately.
Important: Only your Copy - Skyrim.esm is localized, the original Skyrim.esm is NOT. What you do now is to backup the old Skyrim.esm, then erase it from the Data folder and rename the Copy - Skyrim.esm to Skyrim.esm and do the same with the Strings so that they match the renamed Masterfile.
Translating the Strings
Once you have the base Strings and the localized .esm you need another tool to actually translate them - for this you should use the Fallout4Translator from here. One may ask why you should not use the TESVTranslator - very simple, the FO4Translator is the next version of the TESVTranslator with far more features and also a bit easier to use.
When you open the Translator for the first time, it will ask you for a workspace - for this you need to point it to a folder with the .esm you want to translate. Important: If you want to translate an .esm in Hybrid-mode with String files, you need those in a separate folder named Strings right next to the .esm.
Important to note is that under no circumstances you should build a dictionary with your original Skyrim String files - there are many instances in Enderal where we translated Skyrim terms differently and that dictionary would only confuse and hinder the translation - for Skyrim mods though it helps wonders in terms of translation speed.
The Translator has several ways how you can translate files/mods:
- .esm/.esp mode - this is a direct translation
- Strings mode - by just loading the Strings you can directly translate them, though I always recommend the third mode
- Hybrid mode - by loading a localized .esm/.esp while having the corresponding String files in a folder named Strings next to it
- MCM mode - with this you can translate the MCM menues if a mod has those (Enderal doesn't use it but there are many mods that do)
- pex mode - experimental and still not fully implemented, but it allows you to load Papyrus .pex files if you want to directly translate them
Only the first 3 modes are usable for Enderal (you should not use the pex translation as you can easily kill Enderal if you do not know your way with scripts). I recommend the Hybrid translation because it unites the advantages of both the String and the .esm modes.
When directly loading an unlocalized .esm or using the Hybrid mode you can see the EDID, which is the name SureAI has given to each text internally, e. g.
You can also search for the EDID (and in newer versions even the type, so e. g. MESG:ITXT or MESG:FULL, or just MESG) which tremendously helps in translating - the EDID often also helps in understanding the context in which a word/sentence is used which is always helpful when translating sth..
Unlike what you can see in my screen above, when you first start the translator and load a plugin the list will look like this:
All rows in red determine untranslated Strings/texts, all in white/grey translated - there are more colors (e. g. blue for sth which was translated in this session) but explaining all of them would be misplaced here, you can easily learn about them by using the translator or reading the many guides on the different fuctions of the translator.
There are three reasons why you should always prefer the translator to a manual translation:
This is a very handy feature which allows you to translate all perfect matching Strings of a certain text at once, hard to explain but easy to show and use:
In here you have a list of Strings which only have the content "Bergbau" (this list is actually far longer, there are perhaps around 200 of those in Enderal) - when you are translating one of them, you will get a new window in which all other instances of the exact same String a listed - together with an option to translate all or only a selected part of them the same way.
In this example nothing can go wrong but please use your head when autotranslating something - if the list is not too long you should check it at least once (especially the EDID) so that you can find words where the autotranslation would be wrong (again: context is key).
All in all this function really helps with the translation speed, in a manual translation you would have to translate each instance separately which would be quite tedious.
Search and replace
Near the upper right corner of the translator you can find a symbol with a magnifying glass and an arrow - this is the Search and Replace function of the translator. The second tool which extremly helps with your translation speed.
It is similar to the auto-translation but differs in one point: you can choose and replace only parts of Strings which use a certain word/sentence/punctuation mark.
Take this example:
Here you have another list - but this time the Strings do not match 100%, so the autotranslation won't help you in translating it. But all of them share the word "Bauplan"
Hence you mark (left click and drag, just like you would mark files in a list/folder) all Strings from which you want to translate the word "Bauplan" at the same time. Once you have marked them all click on the Search and Replace option - you will get a new window with a row named "Search", one named "Replace" and several options below them.
"Search" and "Replace" should be self-explanatory - so let me tell you a bit about the options below of them.
You should use Search and Replace only in Selection mode - otherwise it WILL translate things you do not want translated and it will become a great mess; please keep that in mind, Search and Replace is an advanced tool so use it with care. On the right side you should take the search and replace, or the pure replace option - the one in the middle usually will not lead to satisfactory results in selection mode.
In my example you can Search for "Bauplan" and replace them by "Blueprint". While this does not finish the translation of a String (hence its color will be purple) it fastens up the speed as you do not need to type in Blueprint again and again for each instance of the word.
The main reason why you should use the translator instead of a manual translation in the CK.
Whenever you translate something in the Masterfile/Strings you can save that translation in a appropiately named dictionary of the translator. So if you close the translator and reload the .esm/.Strings it will search for the right dictionary and replace all 100% matching instances of Strings/texts automatically so that you can continue where you left off beforehand.
This is a big deal because it tremendously helps in case of patches!
If you load a patched .esm (localized or not) in the translator it will automatically translate all unchanged parts of the text and will only leave the new/changed things untranslated; this helps with translation further versions of Enderal's Skyrim.esm and it drastically reduces the amount of work you have to do once the masterfile is fully translated for the first time.
Important steps after finishing/when testing the translation
Skyrim.ini and Strings
Once you have everything translated, just export the new Strings and put them into your Strings folder - once you start the game a localized Skyrim.esm will search for the appropiate Strings.
So what are appropiate Strings? In your Skyrim.ini (can be found in C:/User/YourUsername/Documents(or MyDocuments)/MyGames/Skyrim) you can find an entry in the second row called sLanguage=.
The format of Strings is always Master/Pluginfilename_sLanguageValue.(IL/DL)strings.
This means if you translate the Strings from Enderal's Skyrim.esm into French you should put the sLanguage value in your .ini to sLanguage=French and the Strings should be named Skyrim_French.strings as an example.
A list of the valid sLanguage values: German, English, French, Russian, Italian, Japanese, Polish, Russian and Spanish.
If your language is not included in these you will need to set your sLanguage value to one of them regardless, just translate the Strings and the Translate.txt in your language and name them like your chosen sLanguage in this list.
This also means that you have to release the translation with your own .ini file - keep that in mind!
After translating the Strings and setting up your .ini file everything is ready to play, so start up your game...and you will see that all menus are still in English. This is because the Strings only have a very limited amount of UI (User Interface) values in them. For the menus Skyrim uses another way to translate them, a text file named Translate_sLanguage.txt (sLanguage is again the value in your Skyrim.ini, in case of the EV it is named Translate_English.txt).
You can find it under .../Skyrim/Data/Interface.
When you open it you will see a list with text and two rows. The first entry in each row is led by a $-sign. This marks the place where the translated UI text belongs. Behind that $Text there is a weird space and then another text. This second text is what you will see ingame, you can change it to your liking. So all you need to do in this .txt is to translate the text on the right side.
Important: Keep the space between the left and the right texts in place, otherwise it will either not display the text at all or with errors!
Once this is done the translation is finally completed. Just release it with the localized esm, the Strings, your .ini and your translate txt.
If you have any other questions, feel free to ask them in the discussion page of this page.