I have been developing a .NET string formatting library to assist with localization of an application. It\'s called SmartFormat and is open-source on GitHub.>
It would be nice if you provided in the question body a sample of the rules that you're using, what format do they take?
Anyway, in your example:
var message = "There {0:is:are} {0} {0:item:items} remaining";
you seem to be basing on the assumption that the selection in both choice segments is based on the same single rule, and that there is direct correspondence between the two choices - that is the same single rule would choose (is,item) or (are,items).
This assumption is not necessarily correct for other languages, take for example the fictitious language English-ez (just to make things easier to understand for the reader, I find examples in foreign languages irritating - I'm borrowing from Arabic but simplifying a lot). The rules for this language are as follows:
The first selection segment is the same as normal English:
is: count=1
are: count=0, count=2..infinity
The second selection segment has a different rule from normal English, assume the following simple rule:
item: count=1
item-da: count=2 # this language has a special dual form.
items: count=0, count=3..infinity
Now the single rule solution would not be adequate - we can suggest a different form:
var message = "There {0:is:are@rule1} {0} {0:item:items@rule2} remaining";
This solution might have problems in other situations, but we are discussing the example you provided.
Check gettext (allows selection of full message to a single level) and ICU (allows selection of full message to multiple levels ie on multiple variables).