iTuner Translation - Help Wanted!
Are you fluent in English even though it's not your primary native language? Do you know what a .NET resource file is and how to modify one? Then you may be the perfect person to help translate and localize this project. I'm looking for a few great translators
for this project. You'll need access to Visual Studio 2010 and should have experience translating from English to your preferred language. This is a free hobby project so I can't offer great fortunes but I can offer immeasurable fame and recognition by placing
your name on the
acknowledgements page. Thank you!
Please note all copyrights belong to the project owner.
Languages requested:
- Chinese (zh-Hans)
- French (fr-FR)
- German (de-DE) - 95% complete
- Hebrew (he-IL)
- Italian (it-IT)
- Japanese (ja-JP)
- Portuguese (pt-BR)
- Russian (ru-RU)
- Spanish (es-ES)
How to…
All iTuner resources are specified in a single file. The
iTuner\Properties\Resources.resx file contains the master en-US strings for the application. These resources are referenced by both C# and XAML.
Invariant Resources
There is one convention that you must abide by. Any resource identifier prefixed with the string “I_” (that’s a capital “i” followed by an underscore) is considered an
invariant resource and must not be localized or translated.
XAML Localization
Referencing resource strings from XAML is quite easy. This is just informational so everyone knows how I did it. There are a ton of solutions on the Net including custom MarkupExtension implementations that work nicely. But I found the
simplest solution to be the best. In place of explicit text, use a static reference such as:
<TextBlock
Text="{x:Static
resx:Resources.AboutBox_Reserved}" />
Submit your work
So grab the latest source code, find the
Resources.resx file, copy it and rename it to include your ISO language-Culture code such as Resources.fr-FR.resx or Resources.de-DE.resx, and translate each of the non-invariant strings. Finally, just
submit it as a patch and I’ll incorporate it in to the next release.
en-029 and Pseduo-English
What is the
Resources.en-029.resx file and how is it generated?
Unless there is a special need, I intend on maintaining only the most common or generic variant of each language, for example, de-DE for German, fr-FR for French, es-ES for Spanish, etc. For English, I decided to support en-US as the default language
since this is what I speak!
Then I needed a way of validating that all of the text within iTuner is properly implemented as “translatable” meaning every bit of text is specified as a resource string and is properly fetched from the resource assemblies. But I’m
a typical American programmer and my idea of multi-lingual is C# and C++! So I created this mechanism to replace English text with pseudo-English text. To do that, you need a valid ISO culture to apply to CurrentCulture and CurrentUICulture.
“en-029” is technically Caribbean English but it provides a bucket where I can declare “pseudo-English” translations.
This is how it works:
- The iTuner\Properties\Resources.resx file specifies the en-US strings.
- When iTuner is compiled, the pre-build event command iTunerPseudolator is executed. Pseudolator generates “pseudo-English” which is merely a copy of the English text strings in which every third character in each word is replaced with
a Unicode equivalent maintaining the primary letter for readability. For example, the string “Starting iTunes” becomes "Ŝtařtiňg ïTuňes”. (By only peudo-translating every third character, we prove that the string is translated
while maintaining reasonable readability.)
- The App.config used during development includes the setting UICulture set to en-029.
- When iTuner starts, it reads this UICulture configuration key and applies this setting instead of the default workstation culture.
- Now I can see iTuner pseudo-translated!
- And to switch to real en-US English, I simply need to delete the UICulture configuration setting.

Copyright (c) 2010-2012 Steven M. Cohn. All rights reserved.