-
Notifications
You must be signed in to change notification settings - Fork 8
Specification
SharpDevelop has a very, very old online translation application dating back to 2002, written using ASP (yes, without the .NET). It was database-first, and developers had to go there first, create the resource, generate the resource file, and then check this into source control.
Although this worked well for a long time, it exhibits a few flaws in today's distributed world: it is hard for pull requests to also contain resource strings, it doesn't scale to multiple resource files (we have compartmentalized SharpDevelop over the years), most everything is manual steps.
- Devs stay in the IDE. New resources are added directly to the resource file (English is our default).
- Branches are handled via standard merging practices
- The translation application is now only for translators
- Translation resource files can be downloaded by translators for verification, or the build server can also automatically get updated files
- The original .resx are auto-synced with source control
- Support every resource file format there is
- Support every source control system there is
You can add that, the architecture has provisions for this.
Let's look at original resource strings first:
- Add: the resource string is added, translations are added
- Delete: the resource string is deleted, but the translations are kept (tombstoned)
- Change: the resource string value is updated, and the translation are marked as dirty
Resource string comments are pulled into the database (could contain notes to the translators).
The reason for the tombstoning on delete is that eg you had to remove a feature close to launch for stability reasons, but will bring it back from the dev branch to a production branch once the new production branch is created. In that case, the translations are resurrected.
Speaking of branches - do include only public branches that go to customers, do not include every single dev branch. Keep the branch clutter to a minimum!
We have a lot of collision rules in place - collision meaning what happens if a resource string is already translated in branch A, and now shows up untranslated in branch B. We will reconcile based on newest translation and string match.
The original specification has all the details until we translate and prettify it for the wiki. Note that it is German only.