I'm not pointing out a solution for your problem, but I have, however, a concern about your string-formatting:
One problem with your example is the use of String.Format with translations.
The "Add your {0}" part will, in some languages, requre different wordings depending on, what will be inserted into the {0} part.
An example:
"Add you horse" will, translated into Danish, become "Tilføj din hest" whereas "Add your donkey" will translate into "Tilføj dit æsel". So as you can see there is a difference: din/dit which will not be translateable correctly from "Add your {0}". The same goes for other languags such as german.
Edit: A pseudo-answer could be something like: Add more strings to each resx-file (with identifiers like AddYourItemHorse, AddYourItemRacecar and AddYourItemDonkey) for each of the themes. Or create resource file like PageName.Racecar.da-DK.resx with the resources for the racecar-theme in it and so on. Then, based on the area of the code, theme and the current culture, you do the following:
Dictionary<string, string> resourceDictionary = new Dictionary<string, string>();
private void fillDictionary(string path)
{
using (ResXResourceReader rxrr = new ResXResourceReader(path))
{
foreach (DictionaryEntry entry in rxrr)
{
//Fill the fillDictionary
}
}
}
And then access the string in the dictionary by concatenating what you want with a string representing the theme:
string theme = "Racecar";
Label testLabel = new Label();
testLabel.Text = resourceDictionary[AddYourItem + theme];
Alternatively you can have a resource-file pr. area, language and theme like: MainForm.Racecar.da-DK.resx and then build the path passed to the fillDictionary like this:
string languageCode = Thread.CurrentThread.CurrentCulture.Name;
string path = "MainForm." + theme + "." + llanguageCode + ".resx";
And pass the path to the fillDictionary-method.
Note that the above code is not tested. I have just written it here from the top of my mind. But it should point you in the direction of a possible (not necessarily optimal) solution.
You can read more about the ResXResourceReader here: Working with .resx Files Programmatically