diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 3dff6f80b3..f6643bf6bb 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 edf7d88193..b113cf9154 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 b727992b77..2af9e6a3b0 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: