Подход, который вы выбрали, может работать в большинстве случаев на английском и испанском языках, но, скорее всего, не работает на многих других языках. Проблема в том, что у вас есть только один шаблон, который пытается решить все грамматические числа.
var message = "There {0:is|are} {0} {0:item|items} remaining";
Вам нужен один шаблон для каждого грамматического пола. Здесь я объединил два шаблона в одну строку с несколькими шаблонами.
var message = PluralFormat("one;There is {0} item remaining;other;There are {0} items remaining", count);
В английском используются два грамматических числа: единственное и множественное число. один начинает единственное число, а другой начинает множественное число.
При переводе, например, на финский язык, который использует столько же грамматических чисел, сколько вы бы использовали
"one;{0} kappale jäljellä;other;{0} kappaletta jäljellä"
Однако японцы используют только одно грамматическое число, поэтому японцы используют только другое. Польский использует три грамматических числа, поэтому он будет содержать одно, несколько и много.
Во-вторых, вам понадобятся правильные правила для выбора правильного количества рисунков. CLDR консорциума Unicode содержит правила в файле XML.
Я реализовал библиотеку с открытым исходным кодом, которая использует правила CLDR (преобразованные из XML в код C # и включенные в библиотеку) и строки с несколькими шаблонами для поддержки как грамматических чисел, так и грамматических родов.
https://github.com/jaska45/I18N
Используя эту библиотеку, ваши сэмплы превращаются в
var message = MultiPattern.Format("one;There is {0} item remaining;other;There are {0} items remaining", count);