summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/strgen/strgen.cpp1
-rw-r--r--src/strings.cpp13
2 files changed, 11 insertions, 3 deletions
diff --git a/src/strgen/strgen.cpp b/src/strgen/strgen.cpp
index bcb44f4fe..d7a6ab0f0 100644
--- a/src/strgen/strgen.cpp
+++ b/src/strgen/strgen.cpp
@@ -354,6 +354,7 @@ static void EmitPlural(char *buf, int value)
}
PutUtf8(SCC_PLURAL_LIST);
+ PutByte(_lang.plural_form);
PutByte(TranslateArgumentIdx(argidx, offset));
EmitWordList(words, nw);
}
diff --git a/src/strings.cpp b/src/strings.cpp
index 8cb362a1f..63e0df95e 100644
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -375,12 +375,18 @@ static char *FormatGenericCurrency(char *buff, const CurrencySpec *spec, Money n
return buff;
}
-static int DeterminePluralForm(int64 count)
+/**
+ * Determine the "plural" index given a plural form and a number.
+ * @param count The number to get the plural index of.
+ * @param plural_form The plural form we want an index for.
+ * @return The plural index for the given form.
+ */
+static int DeterminePluralForm(int64 count, int plural_form)
{
/* The absolute value determines plurality */
uint64 n = abs(count);
- switch (_langpack->plural_form) {
+ switch (plural_form) {
default:
NOT_REACHED();
@@ -875,8 +881,9 @@ static char *FormatString(char *buff, const char *str, int64 *argv, uint casei,
break;
case SCC_PLURAL_LIST: { // {P}
+ int plural_form = *str++; // contains the plural form for this string
int64 v = argv_orig[(byte)*str++]; // contains the number that determines plural
- str = ParseStringChoice(str, DeterminePluralForm(v), &buff, last);
+ str = ParseStringChoice(str, DeterminePluralForm(v, plural_form), &buff, last);
break;
}