summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lang/korean.txt2
-rw-r--r--src/strings.cpp26
-rw-r--r--src/table/strgen_tables.h1
3 files changed, 28 insertions, 1 deletions
diff --git a/src/lang/korean.txt b/src/lang/korean.txt
index 3dff6f80b..f6643bf6b 100644
--- a/src/lang/korean.txt
+++ b/src/lang/korean.txt
@@ -1,7 +1,7 @@
##name Korean
##ownname 한국어
##isocode ko_KR
-##plural 1
+##plural 11
##textdir ltr
##digitsep .
##digitsepcur .
diff --git a/src/strings.cpp b/src/strings.cpp
index edf7d8819..b113cf915 100644
--- a/src/strings.cpp
+++ b/src/strings.cpp
@@ -430,6 +430,32 @@ static int DeterminePluralForm(int64 count)
* Czech */
case 10:
return n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2;
+
+ /* Two forms, special 'hack' for Korean; singular for numbers ending
+ * in a consonant and plural for numbers ending in a vowel.
+ * Korean doesn't have the concept of plural, but depending on how a
+ * number is pronounced it needs another version of a particle.
+ * As such the plural system is misused to give this distinction.
+ */
+ case 11:
+ switch (n % 10) {
+ case 0: // yeong
+ case 1: // il
+ case 3: // sam
+ case 6: // yuk
+ case 7: // chil
+ case 8: // pal
+ return 0;
+
+ case 2: // i
+ case 4: // sa
+ case 5: // o
+ case 9: // gu
+ return 1;
+
+ default:
+ NOT_REACHED();
+ }
}
}
diff --git a/src/table/strgen_tables.h b/src/table/strgen_tables.h
index b727992b7..2af9e6a3b 100644
--- a/src/table/strgen_tables.h
+++ b/src/table/strgen_tables.h
@@ -161,6 +161,7 @@ static const PluralForm _plural_forms[] = {
{ 4, "Four forms, special case for 1 and all numbers ending in 02, 03, or 04" },
{ 2, "Two forms, singular used for everything ending in 1 but not in 11" },
{ 3, "Three forms, special case for 1 and 2, 3, or 4" },
+ { 2, "Two forms, cases for numbers ending with a consonant and with a vowel" },
};
/* Flags: