Tes4Mod:Cobl/Modding/Translations

Overview
Generally when mods are translated, the mods are translated in full, resulting in a completely new release. While this approach works well for most mods, it does not work well for Cobl since: 1) Cobl updates quite frequently, and 2) it's used as a library by other mods. Hence for Cobl, the best approach is to make a translation patch -- i.e. a mod that loads after Cobl Main.esm and patching it as necessary. 

To be more accurate: Cobl has several pieces. Here are how they should be treated:
Cobl Main.esm: Updates frequently. Use a translation patch.
Cobl Races.esp: In progress. Don't translate yet.
Cobl Races - Balanced.esp: In progress. Don't translate yet.
Cobl Glue.esp: Updates infrequently. Translate directly.
Cobl Si.esp: Updates infrequently. Translate directly.
Cobl Tweaks.esp: No translation needed.
Salmo the Baker, Cobl.esp: Updates infrequently. Translate directly.
Bash Patches
Cobl Rules.txt: Translate/replace.
Docs: Translate (but retain version release notes in English).
Extras
COBL Hmm.esp: No translation needed.
COBL Mort Demo.esp: No translation needed. (Modders resource.)
Meshes, Textures, etc.: No translation needed, except for
Textures\architecture\skingrad\bakerysign.dds
Textures\architecture\skingrad\bakerysign_n.dds

In short, of the esp/esm files, only Cobl Main.esm will require a translation patch. The other files should be translated directly. As an example, the release package for a german user would be:
Cobl Main.esm: Untranslated (English) version.
Cobl Main DE.esp: Translation patch for Cobl Main.esm.
Cobl Races DE.esp: Translated mod.
Cobl Races - Balanced DE.esp: Translated mod.
Cobl Glue DE.esp: Translated mod.
Cobl Si DE.esp: Translated mod.
Cobl Tweaks.esp: No translation needed.
Salmo the Baker, Cobl DE.esp: Translated mod.
Bash Patches
Cobl Rules DE.txt: Translated/customized for locale.
Docs: Translate (but retain version release notes in English).
Extras
COBL Hmm.esp: No translation needed.
COBL Mort Demo.esp: No translation needed. (Modders resource.)
Meshes, Textures, etc.: No translation needed, except for
Textures\architecture\skingrad\bakerysign.dds
Textures\architecture\skingrad\bakerysign_n.dds

Packaging for Release
It is advised that translation teams package their Cobl files as above - i.e. with Cobl Main.esm plus all their translated esps (plus resource meshes and textures that come in with the English version). This will provide the most convenient setup/install procedure for end users.

If the translation team find themselves unable to continue while the main Cobl mod continues to release, then end users will still be able to run the translation files on top of the updated (English) Cobl Main.esm. This will allow end users to benefit from the latest Cobl release while still retaining translations for all but the newest of items. Again, for most mods this would be a bit odd, but the procedure given here is designed to make this safe.

Which Mods to Update
When Cobl (English) is updated, the change will usually be restricted to Cobl Main.esm, however sometimes the ancillary esps will be updated. You can tell when this happens by looking at the version number in the description field for the esp (look for something like "Version: 1.51"). (You can view the description field from TESCS or (more easily) from Wrye Bash.) For each mod, the version number will reflect the last time it was updated. E.g. if current Cobl version is 1.51, but Cobl Glue.esp was last updated for Cobl release 1.42, then the version number for Cobl Glue.esp will be 1.42. I.e. if that number has not changed since you last translated the esp, then you don't need to translate it again.

Note that some Cobl release may not require any new translations. If this happens, translation teams can just package the updated Cobl Main.esm (plus any added resources) with their existing translation mods and re-release.

Translation Patch
Generating the translation patch requires a few extra, but easy, steps. If you've made translations before, that's the only unusual part and you can skim the rest as a checklist. If this is your first translation - the process is long, but straight-forward.

Necessary Programs
You'll need   and   for this.

Getting Started
Open Wrye Bash (and keep it open). Select "COBL Main.esm", right-click it, select "Copy to Esp" and use the name "COBL Main.esp".

Open TES4Translate - click the icon on the bottom of Bash with 3 people and a warning sign (you can also do this by altering the name of "TES4View.exe" to "TES4Trans.exe" or making a shortcut to "TES4View.exe -trans"). Select "Oblivion.esm" and "COBL Main.es''p''" and press "OK". Next it will prompt about skipping records. Note that the only record types that need translation are: Activator, Potion, Book, Container, Eyes, Faction, Flora, Game Setting, Hair, Ingredient, and Misc Item. As of now, the following record types are unseen by the player and can be skipped: Alchemical Apparatus, Creature, Light, NPC, Quest, Race, Spell, Weapon. Scripts should be skipped (see below). The rest can always be skipped because they don't have displayed names.

;Activators, Potions, Containers, Eyes, Flora, Hair, Ingredient, Misc. Items
:All of these are straight-forward - just change the name to the translated name. You'll probably notice a few records that shouldn't be seen, i.e., 80% of the activators. You can leave these unchanged if you wish.
;Game Settings
:This is straight-forward, but the meaning is a bit vague. The game setting sCantEquipGeneric is the string you see when you equip the COBL Options item (and any other unequippable item such as misc. items and keys). Usually this would say "You cannot equip this item.", but we have changed it to a fairly meaningless word "Hmmm...". You can replace it with a single blank space if you'd like " ", but don't erase it completely. Erasing the message will eventually cause message system to short-circuit and prevent all other messages from displaying.
;Books
:The book text is in the Description box. Note that it's in html format.
;Factions
:Several menus use faction rank names (via the OBSE parameter %c). This requires the CS, so it should be the last step. Make sure to close TES4Trans - it won't pick up on the changes made in the CS and will overwrite them.
:Load "COBL Main.esp" in the CS. Faction is under Character - select it. All of the COBL string factions have the prefix "cobStr". The Male rank titles are used in menus so translate them. The name of the faction itself won't be seen so you don't have to change it.

Misc. Translations
Aside from the translation patch and the translated esps, there are few special translations to deal with...

Alchemical Catalogs
Wrye Bash's Bashed Patch has a feature which will automatically update the alchemical catalogs to include all ingredients from all active mods. If Bash is not correctly translating these documents for your language, then contact Wrye on the elder scrolls topic. (Basically Bash's   will need to be updated in the right places.)

If this is done correctly, you can actually use this feature of Bash to auto-generate the "default" versions of the alchemical catalogs, which you can then include in your translator patch (e.g. Cobl Main De.esp).

Cobl Rules.txt
This is a "ruleset" for use with Wrye Bash's new (v221)   feature. Translation should replace original Cobl mods with translated equivalents (e.g. replace "Cobl Glue.esp" with "Cobl Glue DE.esp". You may also want to add rules to cover conflicts/interactions with locale specific mods (e.g. german mods that conflict with Cobl). For information on ruleset syntax, see Wrye Bash's documentation.

Docs
Translate as desired. You should keep the Versions section in English, but add a Version (Locale) section above it to note your releases. Also be sure to keep the gist of the   section the same. 

Note that there are both html and txt versions of the docs. You can/should edit the text files and then auto-generate the html files from them. The most efficient way to auto-generate the html is:
Edit txt docs in your favorite text file editor.
Open Wrye Bash, find your translation patch mod (e.g Cobl Main De.esp) and double click it. This will bring up Bash's doc viewer.
Click the Set Doc button and choose your translated text file. Bash will automatically recognize that it's an "Wrye Text" file, then translate it to html and display the html version.
After this, bash will automatically re-generate the html file whenever it notices that the txt file is newer than the html file. If you save changes to the text file, but the doc viewer does not recognize this immediately, then (in the doc browser), click on "Edit File" once to switch to text mode, then again to switch back to html mode. The html file should update at that point.

Script Strings
Translating scripts can be problematic. The main problem here is some trickiness related to the way that variables are defined/added. In short, when scripts are compiled, an index number is associated with each variable. ''It's very important that when Cobl scripts are translated, that their not only the variables of the script remain the same, but also that the index numbers for all of those variables remain the same!!!''

To avoid issues related to this, Cobl previously tried to include translated versions of strings in all scripts. However, this approach was unwieldy (requiring a lot of coordination between English Cobl team and the various translators), and in any case did not scale well to multiple languages (Cobl now has German, Russian and Chinese translations).

So, currently, we leave it up to the translators to translate scripts as well as the various names of items. 

(We should describe the procedure for translating stuff here, but it's complicated and we're sleep deprived at the moment.) So, some quick notes:
All scripts that require translation are now flagged "Translate Me". So, if you just do a text search for that string, you should find all scripts that you need to know about.
All scripts now include version info about when they're changed. Hence after finding scripts that need translation, you can check the version numbers to see how they've actually changed.
Tes4View can help a lot here. It will reveal any critical errors in script variable numbers, and can be used to help fix those errors. 
Tes4Gecko can also help, since it can be used to build difference patches. These can then be used to quickly determine what has been changed between different versions of Cobl.

Unfortunately, describing the last usage of Tes4View and Tes4Edit is the tricky bit. (Which we would describe if we weren't sleep and time deprived.) Maybe later...

Script Strings (Old)
This is the old script translation approach. It's mostly outdated now -- except for a few scripts which still have some joint German translations in them.

To avoid complications and bugs resulting from translating scripts, the translation patch should not contain translated scripts. Instead, each Cobl Main script will check a quest variable (genericLore.i01) for the current language setting (0:English; 1:German; 2:Russian; etc.) For this to work, translators need to translate script text strings and send the translations back to the main Cobl Team for inclusion in Cobl Main.esm. Script string translations are communicated through the Script Strings page.

To support this, the translation patch needs to modify one quest and script in order to set genericLore.i01 to the correct value. To do this:
Edit the translator patch file in the Construction set and...
For the cobGenSetLocaleQ quest, check the "Start Game Enabled" checkbox.
Edit the cobGensetLocalQS script so that GenericLore.i01 to your language value is set to your language value. (If you don't know what that is, ask the Cobl Team.) 
Also set the appropriate language globals. E.g. for German, set cobLangGerman to 1 and cobLangRussian to 0. (Actually these globals will be set automatically after you updated genericLor.i01 -- however, since it's done by a quest, it might take five seconds or so for that to happen. So, might as well do it immediately.)

Resources
The only resource that needs to be translated is the sign for Salmo's bakery:
Textures\architecture\skingrad\bakerysign.dds
Textures\architecture\skingrad\bakerysign_n.dds

Cleanup
Remove unnecessary records
Alter mod description in Wrye Bash
Create a master and turn the file into a patch file

Current Translations
German: ThreeD
Russian: SvShu
Chinese: ??