2023-06-19 14:42:47 -07:00
|
|
|
// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
|
|
|
|
// SPDX-License-Identifier: Apache-2.0
|
2017-11-19 21:10:04 -08:00
|
|
|
|
2023-08-10 19:46:45 -07:00
|
|
|
package locale // import "miniflux.app/v2/internal/locale"
|
2017-11-19 21:10:04 -08:00
|
|
|
|
|
|
|
// See https://localization-guide.readthedocs.io/en/latest/l10n/pluralforms.html
|
|
|
|
// And http://www.unicode.org/cldr/charts/29/supplemental/language_plural_rules.html
|
2025-07-06 00:31:17 +02:00
|
|
|
func getPluralForm(lang string, n int) int {
|
|
|
|
switch lang {
|
|
|
|
case "ar_AR":
|
2024-02-28 16:08:20 +01:00
|
|
|
switch {
|
|
|
|
case n == 0:
|
2017-11-19 21:10:04 -08:00
|
|
|
return 0
|
2024-02-28 16:08:20 +01:00
|
|
|
case n == 1:
|
2017-11-19 21:10:04 -08:00
|
|
|
return 1
|
2024-02-28 16:08:20 +01:00
|
|
|
case n == 2:
|
2017-11-19 21:10:04 -08:00
|
|
|
return 2
|
2024-02-28 16:08:20 +01:00
|
|
|
case n%100 >= 3 && n%100 <= 10:
|
2017-11-19 21:10:04 -08:00
|
|
|
return 3
|
2024-02-28 16:08:20 +01:00
|
|
|
case n%100 >= 11:
|
2017-11-19 21:10:04 -08:00
|
|
|
return 4
|
2025-07-06 00:31:17 +02:00
|
|
|
default:
|
|
|
|
return 5
|
2017-11-19 21:10:04 -08:00
|
|
|
}
|
2025-07-06 00:31:17 +02:00
|
|
|
case "cs_CZ":
|
2024-02-28 16:08:20 +01:00
|
|
|
switch {
|
|
|
|
case n == 1:
|
2017-11-19 21:10:04 -08:00
|
|
|
return 0
|
2024-02-28 16:08:20 +01:00
|
|
|
case n >= 2 && n <= 4:
|
2017-11-19 21:10:04 -08:00
|
|
|
return 1
|
2025-07-06 00:31:17 +02:00
|
|
|
default:
|
|
|
|
return 2
|
2017-11-19 21:10:04 -08:00
|
|
|
}
|
2025-07-06 00:31:17 +02:00
|
|
|
case "id_ID", "ja_JP":
|
2024-02-29 20:20:29 -08:00
|
|
|
return 0
|
2025-07-06 00:31:17 +02:00
|
|
|
case "pl_PL":
|
2024-02-28 16:08:20 +01:00
|
|
|
switch {
|
|
|
|
case n == 1:
|
2017-11-19 21:10:04 -08:00
|
|
|
return 0
|
2024-02-28 16:08:20 +01:00
|
|
|
case n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20):
|
2017-11-19 21:10:04 -08:00
|
|
|
return 1
|
2025-07-06 00:31:17 +02:00
|
|
|
default:
|
|
|
|
return 2
|
2017-11-19 21:10:04 -08:00
|
|
|
}
|
2025-07-06 00:31:17 +02:00
|
|
|
case "ro_RO":
|
2025-03-28 10:57:15 -07:00
|
|
|
switch {
|
|
|
|
case n == 1:
|
|
|
|
return 0
|
|
|
|
case n == 0 || (n%100 > 0 && n%100 < 20):
|
|
|
|
return 1
|
2025-07-06 00:31:17 +02:00
|
|
|
default:
|
|
|
|
return 2
|
2025-03-28 10:57:15 -07:00
|
|
|
}
|
2025-07-06 00:31:17 +02:00
|
|
|
case "ru_RU", "uk_UA", "sr_RS":
|
|
|
|
switch {
|
|
|
|
case n%10 == 1 && n%100 != 11:
|
|
|
|
return 0
|
|
|
|
case n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20):
|
2024-02-29 20:20:29 -08:00
|
|
|
return 1
|
2025-07-06 00:31:17 +02:00
|
|
|
default:
|
|
|
|
return 2
|
2024-02-29 20:20:29 -08:00
|
|
|
}
|
2025-07-06 00:31:17 +02:00
|
|
|
case "zh_CN", "zh_TW", "nan_Latn_pehoeji":
|
2024-02-29 20:20:29 -08:00
|
|
|
return 0
|
2025-07-06 00:31:17 +02:00
|
|
|
default: // includes fr_FR, pr_BR, tr_TR
|
|
|
|
if n > 1 {
|
|
|
|
return 1
|
|
|
|
}
|
2022-08-15 19:13:47 +03:00
|
|
|
return 0
|
|
|
|
}
|
|
|
|
}
|