plural.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Copyright 2018 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package locale // import "miniflux.app/locale"
  5. type pluralFormFunc func(n int) int
  6. // See https://localization-guide.readthedocs.io/en/latest/l10n/pluralforms.html
  7. // And http://www.unicode.org/cldr/charts/29/supplemental/language_plural_rules.html
  8. var pluralForms = map[string]pluralFormFunc{
  9. // nplurals=2; plural=(n != 1);
  10. "default": func(n int) int {
  11. if n != 1 {
  12. return 1
  13. }
  14. return 0
  15. },
  16. // nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5);
  17. "ar_AR": func(n int) int {
  18. if n == 0 {
  19. return 0
  20. }
  21. if n == 1 {
  22. return 1
  23. }
  24. if n == 2 {
  25. return 2
  26. }
  27. if n%100 >= 3 && n%100 <= 10 {
  28. return 3
  29. }
  30. if n%100 >= 11 {
  31. return 4
  32. }
  33. return 5
  34. },
  35. // nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;
  36. "cs_CZ": func(n int) int {
  37. if n == 1 {
  38. return 0
  39. }
  40. if n >= 2 && n <= 4 {
  41. return 1
  42. }
  43. return 2
  44. },
  45. // nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
  46. "pl_PL": func(n int) int {
  47. if n == 1 {
  48. return 0
  49. }
  50. if n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) {
  51. return 1
  52. }
  53. return 2
  54. },
  55. // nplurals=2; plural=(n > 1);
  56. "pt_BR": func(n int) int {
  57. if n > 1 {
  58. return 1
  59. }
  60. return 0
  61. },
  62. // nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
  63. "ru_RU": func(n int) int {
  64. if n%10 == 1 && n%100 != 11 {
  65. return 0
  66. }
  67. if n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) {
  68. return 1
  69. }
  70. return 2
  71. },
  72. // nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);
  73. "sr_RS": func(n int) int {
  74. if n%10 == 1 && n%100 != 11 {
  75. return 0
  76. }
  77. if n%10 >= 2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20) {
  78. return 1
  79. }
  80. return 2
  81. },
  82. // nplurals=1; plural=0;
  83. "zh_CN": func(n int) int {
  84. return 0
  85. },
  86. }