Localising (or localizing) a Windows Phone application is straightforward, however, testing that you have correctly localised the text is harder. One method is to use a pseudo language but I found that has a couple of problems; you need to overwrite a locale (although you can use my previous posts to create a new ‘unsupported’ language), you need to maintain that language with your default language, and…I just find it over noisy. So I present an alternative.
Here is an example of an application I am working on;
If I switch on the ‘test localisation’ then the page looks like;
Argh, I’ve not localised ‘save’! The idea is that all the localised strings show up as their resource name surrounded by a ‘%’. I think this makes it easier to spot the non-localised text, plus you could turn it on during a test session therefore allowing you to report the resource id that is incorrectly localised for a specific language.
The code is based on a previous post but I’ll show the code again with the slight adjustments;
Note, if you want to dynamically support switching between a language and testing it, then you need to change the GetString to call the base class
public class TestResourceManager : ResourceManager { public TestResourceManager() : base("MyApp.Localisation.StringLibrary", typeof(StringLibrary).Assembly) { } public override string GetString(string name, System.Globalization.CultureInfo culture) { return "%" + name + "%"; } }
Then add a constructor to the default string library.
public class LocalisedStrings { private static readonly StringLibrary _localizedResources = new StringLibrary(); #if DEBUG_LOCALE static LocalisedStrings() { Type type = _localizedResources.GetType(); FieldInfo info = type.GetField("resourceMan", BindingFlags.NonPublic | BindingFlags.Static); info.SetValue(null, new TestResourceManager()); } #endif public StringLibrary LocalizedResources { get { return _localizedResources; } } }
I tend to go old school and just search the project for words like Text or Content. I have absolutely no idea if it is possible, but rather than altering the content of the text, I would find it more useful to alter the colour of the text. If it is not pink, then it has not been changed. I had to look closely to find the “save”
Other visual cues could be useful, although certain areas are harder to colour. Plus you get into background colours etc. The idea behind this solution is to avoid upsetting the rest of the UI but still provide users/testers with a way to report failures without having to understand other languages.