Coverage for app/venv/lib/python3.14/site-packages/weblate/lang/data.py: 100%

73 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 07:15 +0000

1# Copyright © Michal Čihař <michal@weblate.org> 

2# 

3# SPDX-License-Identifier: GPL-3.0-or-later 

4 

5from django.utils.translation import pgettext_lazy 

6from weblate_language_data import languages 

7from weblate_language_data.aliases import ALIASES 

8from weblate_language_data.ambiguous import AMBIGUOUS 

9 

10NO_CODE_LANGUAGES = {lang[0] for lang in languages.LANGUAGES} 

11 

12NO_SPACE_LANGUAGES = { 

13 "zh", 

14 "ja", 

15 "th", 

16 "km", 

17 "lo", 

18 "my", 

19 "ko", 

20} 

21 

22UNDERSCORE_EXCEPTIONS = { 

23 "nb_NO", 

24 "zh_Hant", 

25 "zh_Hans", 

26 "be_Latn", 

27 "ro_MD", 

28 "pt_BR", 

29 "pa_PK", 

30 "hi_Latn", 

31} 

32AT_EXCEPTIONS = {"ca@valencia"} 

33 

34 

35def is_default_variant(code): 

36 language = code.partition("_")[0] 

37 if language not in NO_CODE_LANGUAGES and language in ALIASES: 

38 return code == ALIASES[language] 

39 return False 

40 

41 

42def is_basic(code): 

43 if code in AMBIGUOUS: 

44 return False 

45 if "_" in code: 

46 return code in UNDERSCORE_EXCEPTIONS or is_default_variant(code) 

47 return "@" not in code or code in AT_EXCEPTIONS 

48 

49 

50BASIC_LANGUAGES = {lang for lang in NO_CODE_LANGUAGES if is_basic(lang)} 

51 

52# Following variables are used to map Gettext plural formulas 

53# to one/few/may/other like rules 

54 

55ONE_OTHER_PLURALS = ( 

56 "n==1 || n%10==1 ? 0 : 1", 

57 "n != 1", 

58 "(n != 1)", 

59 "n > 1", 

60 "(n > 1)", 

61 "n >= 2 && (n < 11 || n > 99)", 

62 "n % 10 != 1 || n % 100 == 11", 

63 "(n % 10 == 1 && n % 100 != 11) ? 0 : 1", 

64 "n != 1 && n != 2 && n != 3 && (n % 10 == 4 || n % 10 == 6 || n % 10 == 9)", 

65 "(n==0 || n==1)", 

66 "(n%10==1 && n%100!=11 ? 0 : 1)", 

67) 

68 

69TWO_OTHER_PLURALS = ("(n==2) ? 1 : 0",) 

70 

71ONE_FEW_MANY_PLURALS = ( 

72 "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", 

73 "(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2", 

74 "n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", 

75 "(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", 

76 "n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2", 

77 "(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2)", 

78 "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2)", 

79 "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)", 

80 "((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2)", 

81) 

82ONE_FEW_OTHER_PLURALS = ( 

83 "n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2", 

84 "(n == 1) ? 0 : ((n == 0 || n != 1 && n % 100 >= 1 && n % 100 <= 19) ? 1 : 2)", 

85 "(n == 0 || n == 1) ? 0 : ((n >= 2 && n <= 10) ? 1 : 2)", 

86 "(n == 1) ? 0 : ((n == 0 || n % 100 >= 2 && n % 100 <= 19) ? 1 : 2)", 

87 "(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2)", 

88) 

89ZERO_ONE_FEW_OTHER_PLURALS = ( 

90 "n == 0 ? 0 : n == 1 ? 1 : ((n >= 2 && n <= 10) ? 2 : 3)", 

91 "n==0 ? 0 : n==1 ? 1 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 2 : 3", 

92 "n==0 ? 0 : (n == 1) ? 1 : ((n == 0 || n % 100 >= 2 && n % 100 <= 19) ? 2 : 3)", 

93 "n==0 ? 0 : n==1 ? 1 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 2 : 3", 

94 "n==0 ? 0 : (n==1) ? 1 : (n>=2 && n<=4) ? 2 : 3", 

95 "n==0 ? 0 : n%10==1 && n%100!=11 ? 1 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 2 : 3", 

96 "n==0 ? 0 : (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 1 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 2 : 3)", 

97) 

98 

99ONE_ZERO_FEW_OTHER_PLURALS = ( 

100 "(n==1 ? 0 : (n==0 || (n%100>=1 && n%100<=10)) ? 1 : (n%100>=11 && n%100<=19) ? 2 : 3)", 

101) 

102 

103ZERO_ONE_OTHER_PLURALS = ( 

104 "n==0 ? 0 : n==1 ? 1 : 2", 

105 "(n == 0) ? 0 : ((n == 1) ? 1 : 2)", 

106 "(n % 10 == 0 || n % 100 >= 11 && n % 100 <= 19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2)", 

107 "n==0 ? 0 : n>1 ? 1 : 2", 

108 "n==0 ? 0 : n!=1 ? 1 : 2", 

109 "n == 0 ? 0 : n==1 || n%10==1 ? 1 : 2", 

110 "n==0 ? 0 : n != 1 && n != 2 && n != 3 && (n % 10 == 4 || n % 10 == 6 || n % 10 == 9) ? 1: 2", 

111 "n==0 ? 0 : n % 10 != 1 || n % 100 == 11 ? 1 :2", 

112 "n==0 ? 0 : n >= 2 && (n < 11 || n > 99) ? 1 : 2", 

113 "n==0 ? 0 : n%10==1 && n%100!=11 ? 1 : 2", 

114 "(n==1 ? 0 : (n%10==4 || n%10==6 || n%10== 9) ? 1 : 2)", 

115) 

116 

117ONE_TWO_OTHER_PLURALS = ( 

118 "n==1 ? 0 : n==2 ? 1 : 2", 

119 "(n == 1) ? 0 : ((n == 2) ? 1 : 2)", 

120 "n%100==1 ? 0 : n%100==2 ? 1 : 2", 

121 "(n==1 ? 0 : n==2 ? 1 : 2)", 

122 "(n%100==1 ? 0 : n%100==2 ? 1 : 2)", 

123) 

124ZERO_ONE_TWO_OTHER_PLURALS = ( 

125 "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : 3", 

126 "n==0 ? 0 : (n == 1) ? 1 : ((n == 2) ? 2 : 3)", 

127) 

128 

129ONE_OTHER_TWO_PLURALS = ("n==1 ? 0 : n==2 ? 2 : 1",) 

130 

131ONE_TWO_THREE_OTHER_PLURALS = ("(n==1) ? 0 : (n==2) ? 1 : (n == 3) ? 2 : 3",) 

132 

133ONE_TWO_FEW_OTHER_PLURALS = ( 

134 "(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3", 

135 "n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3", 

136 "(n % 10 == 1) ? 0 : ((n % 10 == 2) ? 1 : ((n % 100 == 0 || n % 100 == 20 || n % 100 == 40 || n % 100 == 60 || n % 100 == 80) ? 2 : 3))", 

137 "(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3))", 

138 "(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && n % 10 == 0) ? 2 : 3))", 

139 "(n == 1) ? 0 : ((n == 2) ? 1 : ((n == 10) ? 2 : 3))", 

140 "(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3", 

141 "(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)", 

142) 

143ZERO_ONE_TWO_FEW_OTHER_PLURALS = ( 

144 "n==0 ? 0 : (n==1 || n==11) ? 1 : (n==2 || n==12) ? 2 : (n > 2 && n < 20) ? 3 : 4", 

145 "n==0 ? 0 : (n == 1) ? 1 : ((n == 2) ? 2 : ((n > 10 && n % 10 == 0) ? 3 : 4))", 

146 "n==0 ? 0 : (n % 100 == 1) ? 1 : ((n % 100 == 2) ? 2 : ((n % 100 == 3 || n % 100 == 4) ? 3 : 4))", 

147 "n==0 ? 0 : n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 4", 

148 "n==0 ? 0 : (n % 10 == 1) ? 1 : ((n % 10 == 2) ? 2 : ((n % 100 == 0 || n % 100 == 20 || n % 100 == 40 || n % 100 == 60 || n % 100 == 80) ? 3 : 4))", 

149) 

150 

151OTHER_ONE_TWO_FEW_PLURALS = ( 

152 "(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0)", 

153) 

154 

155ONE_TWO_FEW_MANY_OTHER_PLURALS = ( 

156 "n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4", 

157 "n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :(n>6 && n<11) ? 3 : 4", 

158 "(n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) ? 0 : ((n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) ? 1 : ((((n % 10 == 3 || n % 10 == 4) || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) ? 2 : ((n != 0 && n % 1000000 == 0) ? 3 : 4)))", 

159 "(n == 1) ? 0 : ((n == 2) ? 1 : ((n == 0 || n % 100 >= 3 && n % 100 <= 10) ? 2 : ((n % 100 >= 11 && n % 100 <= 19) ? 3 : 4)))", 

160) 

161 

162ONE_FEW_MANY_OTHER_PLURALS = ( 

163 "n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3", 

164 "n==1 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : n%10==0 || (n%100>10 && n%100<20) ? 2 : 3", 

165 "n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2", 

166 "(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3)", 

167 "(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3)", 

168 "(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3)", 

169) 

170ZERO_ONE_FEW_MANY_OTHER_PLURALS = ( 

171 "n==0 ? 0 : n==1 ? 1 : ( n%100>1 && n%100<11) ? 2 : (n%100>10 && n%100<20 ) ? 3 : 4", 

172 "(n==0 ? 0 : n==1 ? 1 : (n>=2 && n<=5) ? 2 : n==6 ? 3 : 4)", 

173) 

174 

175ONE_OTHER_ZERO_PLURALS = ( 

176 "n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2", 

177 "(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2)", 

178) 

179 

180ZERO_ONE_TWO_FEW_MANY_OTHER_PLURALS = ( 

181 "(n==0) ? 0 : (n==1) ? 1 : (n==2) ? 2 : (n==3) ? 3 :(n==6) ? 4 : 5", 

182 "(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5))))", 

183 "(n == 0) ? 0 : ((n == 1) ? 1 : (((n % 100 == 2 || n % 100 == 22 || n % 100 == 42 || n % 100 == 62 || n % 100 == 82) || n % 1000 == 0 && (n % 100000 >= 1000 && n % 100000 <= 20000 || n % 100000 == 40000 || n % 100000 == 60000 || n % 100000 == 80000) || n != 0 && n % 1000000 == 100000) ? 2 : ((n % 100 == 3 || n % 100 == 23 || n % 100 == 43 || n % 100 == 63 || n % 100 == 83) ? 3 : ((n != 1 && (n % 100 == 1 || n % 100 == 21 || n % 100 == 41 || n % 100 == 61 || n % 100 == 81)) ? 4 : 5))))", 

184 "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : (n>2 && n<7) ? 3 :(n>6 && n<11) ? 4 : 5", 

185 "n==0 ? 0 : (n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) ? 1 : ((n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) ? 2 : ((((n % 10 == 3 || n % 10 == 4) || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) ? 3 : ((n != 0 && n % 1000000 == 0) ? 4 : 5)))", 

186 "(n == 0) ? 0 : (n == 1) ? 1 : ((n == 2) ? 2 : ((n == 0 || n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 19) ? 4 : 5)))", 

187 "(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : (n%100>=3 && n%100<=10) ? 3 : n%100>=11 ? 4 : 5)", 

188 "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5", 

189) 

190ONE_MANY_OTHER_PLURALS = ( 

191 "(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2)", 

192 "(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2)", 

193) 

194ZERO_ONE_MANY_OTHER_PLURALS = ( 

195 "(n == 0) ? 0 : (n == 1) ? 1 : ((n != 0 && n % 1000000 == 0) ? 2 : 3)", 

196) 

197 

198ZERO_OTHER_PLURALS = ("n==0 ? 0 : 1",) 

199 

200# Plural types definition 

201PLURAL_NONE = 0 

202PLURAL_ONE_OTHER = 1 

203PLURAL_ONE_FEW_OTHER = 2 

204PLURAL_ARABIC = 3 

205PLURAL_ONE_TWO_OTHER = 4 

206PLURAL_ONE_TWO_THREE_OTHER = 5 

207PLURAL_ONE_TWO_FEW_OTHER = 6 

208PLURAL_ONE_OTHER_ZERO = 7 

209PLURAL_ONE_FEW_MANY_OTHER = 8 

210PLURAL_TWO_OTHER = 9 

211PLURAL_ONE_TWO_FEW_MANY_OTHER = 10 

212PLURAL_ZERO_ONE_OTHER = 11 

213PLURAL_ZERO_ONE_TWO_FEW_MANY_OTHER = 12 

214PLURAL_OTHER_ONE_TWO_FEW = 13 

215PLURAL_ONE_OTHER_TWO = 14 

216PLURAL_ZERO_OTHER = 15 

217PLURAL_ZERO_ONE_FEW_OTHER = 16 

218PLURAL_ZERO_ONE_TWO_FEW_OTHER = 17 

219PLURAL_ZERO_ONE_TWO_OTHER = 18 

220PLURAL_ZERO_ONE_FEW_MANY_OTHER = 19 

221PLURAL_ONE_MANY_OTHER = 20 

222PLURAL_ZERO_ONE_MANY_OTHER = 21 

223PLURAL_ONE_FEW_MANY = 22 

224PLURAL_ONE_ZERO_FEW_OTHER = 23 

225PLURAL_UNKNOWN = 666 

226 

227# Extra zero plural handling for stringsdict 

228ZERO_PLURAL_TYPES = { 

229 PLURAL_ARABIC, 

230 PLURAL_ZERO_ONE_OTHER, 

231 PLURAL_ZERO_ONE_TWO_FEW_MANY_OTHER, 

232} 

233 

234FORMULA_WITH_ZERO = { 

235 "0": "n==0 ? 0 : 1", 

236 "n > 1": "n==0 ? 0 : n==1 ? 1 : 2", 

237 "n != 1": "n==0 ? 0 : n==1 ? 1 : 2", 

238 "(n == 0 || n == 1) ? 0 : ((n >= 2 && n <= 10) ? 1 : 2)": "n == 0 ? 0 : n == 1 ? 1 : ((n >= 2 && n <= 10) ? 2 : 3)", 

239 "n == 1 ? 0 : n == 2 ? 1 : 2": "n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : 3", 

240 "n==1 || n%10==1 ? 0 : 1": "n == 0 ? 0 : n==1 || n%10==1 ? 1 : 2", 

241 "n==1 ? 0 : n==2 ? 1 : 2": "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : 3", 

242 "(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3": "n==0 ? 0 : (n==1 || n==11) ? 1 : (n==2 || n==12) ? 2 : (n > 2 && n < 20) ? 3 : 4", 

243 "n != 1 && n != 2 && n != 3 && (n % 10 == 4 || n % 10 == 6 || n % 10 == 9)": "n==0 ? 0 : n != 1 && n != 2 && n != 3 && (n % 10 == 4 || n % 10 == 6 || n % 10 == 9) ? 1: 2", 

244 "n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2": "n==0 ? 0 : n==1 ? 1 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 2 : 3", 

245 "(n == 1) ? 0 : ((n == 0 || n % 100 >= 2 && n % 100 <= 19) ? 1 : 2)": "n==0 ? 0 : (n == 1) ? 1 : ((n == 0 || n % 100 >= 2 && n % 100 <= 19) ? 2 : 3)", 

246 "n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2": "n==0 ? 0 : n==1 ? 1 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 2 : 3", 

247 "(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2": "n==0 ? 0 : (n==1) ? 1 : (n>=2 && n<=4) ? 2 : 3", 

248 "(n == 1) ? 0 : ((n == 2) ? 1 : 2)": "n==0 ? 0 : (n == 1) ? 1 : ((n == 2) ? 2 : 3)", 

249 "n==1 ? 0 : n==0 || ( n%100>1 && n%100<11) ? 1 : (n%100>10 && n%100<20 ) ? 2 : 3": "n==0 ? 0 : n==1 ? 1 : ( n%100>1 && n%100<11) ? 2 : (n%100>10 && n%100<20 ) ? 3 : 4", 

250 "n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2": "n==0 ? 0 : n%10==1 && n%100!=11 ? 1 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 2 : 3", 

251 "(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && n % 10 == 0) ? 2 : 3))": "n==0 ? 0 : (n == 1) ? 1 : ((n == 2) ? 2 : ((n > 10 && n % 10 == 0) ? 3 : 4))", 

252 "n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :(n>6 && n<11) ? 3 : 4": "n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : (n>2 && n<7) ? 3 :(n>6 && n<11) ? 4 : 5", 

253 "(n % 100 == 1) ? 0 : ((n % 100 == 2) ? 1 : ((n % 100 == 3 || n % 100 == 4) ? 2 : 3))": "n==0 ? 0 : (n % 100 == 1) ? 1 : ((n % 100 == 2) ? 2 : ((n % 100 == 3 || n % 100 == 4) ? 3 : 4))", 

254 "n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3": "n==0 ? 0 : n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 4", 

255 "n % 10 != 1 || n % 100 == 11": "n==0 ? 0 : n % 10 != 1 || n % 100 == 11 ? 1 :2", 

256 "(n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 1 : 2)": "n==0 ? 0 : (n % 10 == 1 && (n % 100 < 11 || n % 100 > 19)) ? 1 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? 2 : 3)", 

257 "n >= 2 && (n < 11 || n > 99)": "n==0 ? 0 : n >= 2 && (n < 11 || n > 99) ? 1 : 2", 

258 "(n % 10 == 1) ? 0 : ((n % 10 == 2) ? 1 : ((n % 100 == 0 || n % 100 == 20 || n % 100 == 40 || n % 100 == 60 || n % 100 == 80) ? 2 : 3))": "n==0 ? 0 : (n % 10 == 1) ? 1 : ((n % 10 == 2) ? 2 : ((n % 100 == 0 || n % 100 == 20 || n % 100 == 40 || n % 100 == 60 || n % 100 == 80) ? 3 : 4))", 

259 "(n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) ? 0 : ((n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) ? 1 : ((((n % 10 == 3 || n % 10 == 4) || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) ? 2 : ((n != 0 && n % 1000000 == 0) ? 3 : 4)))": "n==0 ? 0 : (n % 10 == 1 && n % 100 != 11 && n % 100 != 71 && n % 100 != 91) ? 1 : ((n % 10 == 2 && n % 100 != 12 && n % 100 != 72 && n % 100 != 92) ? 2 : ((((n % 10 == 3 || n % 10 == 4) || n % 10 == 9) && (n % 100 < 10 || n % 100 > 19) && (n % 100 < 70 || n % 100 > 79) && (n % 100 < 90 || n % 100 > 99)) ? 3 : ((n != 0 && n % 1000000 == 0) ? 4 : 5)))", 

260 "n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2": "n==0 ? 0 : n%10==1 && n%100!=11 ? 1 : 2", 

261 "(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2)": "(n == 0) ? 0 : (n == 1) ? 1 : ((n != 0 && n % 1000000 == 0) ? 2 : 3)", 

262 "(n == 0 || n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2)": "(n == 0) ? 0 : (n == 1) ? 1 : ((n != 0 && n % 1000000 == 0) ? 2 : 3)", 

263 "(n == 1) ? 0 : ((n == 2) ? 1 : ((n == 0 || n % 100 >= 3 && n % 100 <= 10) ? 2 : ((n % 100 >= 11 && n % 100 <= 19) ? 3 : 4)))": "(n == 0) ? 0 : (n == 1) ? 1 : ((n == 2) ? 2 : ((n == 0 || n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 19) ? 4 : 5)))", 

264} 

265 

266 

267def nospace_set(source): 

268 return {item.replace(" ", "") for item in source} 

269 

270 

271# Plural formula - type mappings 

272PLURAL_MAPPINGS = ( 

273 (nospace_set(ONE_OTHER_PLURALS), PLURAL_ONE_OTHER), 

274 (nospace_set(ONE_FEW_OTHER_PLURALS), PLURAL_ONE_FEW_OTHER), 

275 (nospace_set(ZERO_ONE_FEW_OTHER_PLURALS), PLURAL_ZERO_ONE_FEW_OTHER), 

276 (nospace_set(ONE_ZERO_FEW_OTHER_PLURALS), PLURAL_ONE_ZERO_FEW_OTHER), 

277 (nospace_set(ONE_TWO_OTHER_PLURALS), PLURAL_ONE_TWO_OTHER), 

278 (nospace_set(ZERO_ONE_TWO_OTHER_PLURALS), PLURAL_ZERO_ONE_TWO_OTHER), 

279 (nospace_set(ONE_OTHER_TWO_PLURALS), PLURAL_ONE_OTHER_TWO), 

280 (nospace_set(ZERO_ONE_OTHER_PLURALS), PLURAL_ZERO_ONE_OTHER), 

281 (nospace_set(ONE_TWO_FEW_OTHER_PLURALS), PLURAL_ONE_TWO_FEW_OTHER), 

282 (nospace_set(ZERO_ONE_TWO_FEW_OTHER_PLURALS), PLURAL_ZERO_ONE_TWO_FEW_OTHER), 

283 (nospace_set(OTHER_ONE_TWO_FEW_PLURALS), PLURAL_OTHER_ONE_TWO_FEW), 

284 (nospace_set(ONE_TWO_THREE_OTHER_PLURALS), PLURAL_ONE_TWO_THREE_OTHER), 

285 (nospace_set(ONE_OTHER_ZERO_PLURALS), PLURAL_ONE_OTHER_ZERO), 

286 (nospace_set(ONE_FEW_MANY_OTHER_PLURALS), PLURAL_ONE_FEW_MANY_OTHER), 

287 (nospace_set(ZERO_ONE_FEW_MANY_OTHER_PLURALS), PLURAL_ZERO_ONE_FEW_MANY_OTHER), 

288 (nospace_set(TWO_OTHER_PLURALS), PLURAL_TWO_OTHER), 

289 (nospace_set(ONE_TWO_FEW_MANY_OTHER_PLURALS), PLURAL_ONE_TWO_FEW_MANY_OTHER), 

290 ( 

291 nospace_set(ZERO_ONE_TWO_FEW_MANY_OTHER_PLURALS), 

292 PLURAL_ZERO_ONE_TWO_FEW_MANY_OTHER, 

293 ), 

294 (nospace_set(ZERO_OTHER_PLURALS), PLURAL_ZERO_OTHER), 

295 (nospace_set(ONE_MANY_OTHER_PLURALS), PLURAL_ONE_MANY_OTHER), 

296 (nospace_set(ZERO_ONE_MANY_OTHER_PLURALS), PLURAL_ZERO_ONE_MANY_OTHER), 

297 (nospace_set(ONE_FEW_MANY_PLURALS), PLURAL_ONE_FEW_MANY), 

298) 

299 

300# Plural names mapping 

301PLURAL_NAMES = { 

302 PLURAL_NONE: ("",), 

303 PLURAL_ONE_OTHER: ( 

304 pgettext_lazy("Plural form description", "Singular"), 

305 pgettext_lazy("Plural form description", "Plural"), 

306 ), 

307 PLURAL_ONE_FEW_OTHER: ( 

308 pgettext_lazy("Plural form description", "One"), 

309 pgettext_lazy("Plural form description", "Few"), 

310 pgettext_lazy("Plural form description", "Other"), 

311 ), 

312 PLURAL_ZERO_ONE_FEW_OTHER: ( 

313 pgettext_lazy("Plural form description", "Zero"), 

314 pgettext_lazy("Plural form description", "One"), 

315 pgettext_lazy("Plural form description", "Few"), 

316 pgettext_lazy("Plural form description", "Other"), 

317 ), 

318 PLURAL_ONE_ZERO_FEW_OTHER: ( 

319 pgettext_lazy("Plural form description", "One"), 

320 pgettext_lazy("Plural form description", "Zero"), 

321 pgettext_lazy("Plural form description", "Few"), 

322 pgettext_lazy("Plural form description", "Other"), 

323 ), 

324 PLURAL_ARABIC: ( 

325 pgettext_lazy("Plural form description", "Zero"), 

326 pgettext_lazy("Plural form description", "One"), 

327 pgettext_lazy("Plural form description", "Two"), 

328 pgettext_lazy("Plural form description", "Few"), 

329 pgettext_lazy("Plural form description", "Many"), 

330 pgettext_lazy("Plural form description", "Other"), 

331 ), 

332 PLURAL_ZERO_ONE_OTHER: ( 

333 pgettext_lazy("Plural form description", "Zero"), 

334 pgettext_lazy("Plural form description", "One"), 

335 pgettext_lazy("Plural form description", "Other"), 

336 ), 

337 PLURAL_ONE_TWO_OTHER: ( 

338 pgettext_lazy("Plural form description", "One"), 

339 pgettext_lazy("Plural form description", "Two"), 

340 pgettext_lazy("Plural form description", "Other"), 

341 ), 

342 PLURAL_ZERO_ONE_TWO_OTHER: ( 

343 pgettext_lazy("Plural form description", "Zero"), 

344 pgettext_lazy("Plural form description", "One"), 

345 pgettext_lazy("Plural form description", "Two"), 

346 pgettext_lazy("Plural form description", "Other"), 

347 ), 

348 PLURAL_ONE_OTHER_TWO: ( 

349 pgettext_lazy("Plural form description", "One"), 

350 pgettext_lazy("Plural form description", "Other"), 

351 pgettext_lazy("Plural form description", "Two"), 

352 ), 

353 PLURAL_ONE_TWO_THREE_OTHER: ( 

354 pgettext_lazy("Plural form description", "One"), 

355 pgettext_lazy("Plural form description", "Two"), 

356 pgettext_lazy("Plural form description", "Three"), 

357 pgettext_lazy("Plural form description", "Other"), 

358 ), 

359 PLURAL_ONE_TWO_FEW_OTHER: ( 

360 pgettext_lazy("Plural form description", "One"), 

361 pgettext_lazy("Plural form description", "Two"), 

362 pgettext_lazy("Plural form description", "Few"), 

363 pgettext_lazy("Plural form description", "Other"), 

364 ), 

365 PLURAL_ZERO_ONE_TWO_FEW_OTHER: ( 

366 pgettext_lazy("Plural form description", "Zero"), 

367 pgettext_lazy("Plural form description", "One"), 

368 pgettext_lazy("Plural form description", "Two"), 

369 pgettext_lazy("Plural form description", "Few"), 

370 pgettext_lazy("Plural form description", "Other"), 

371 ), 

372 PLURAL_OTHER_ONE_TWO_FEW: ( 

373 pgettext_lazy("Plural form description", "Other"), 

374 pgettext_lazy("Plural form description", "One"), 

375 pgettext_lazy("Plural form description", "Two"), 

376 pgettext_lazy("Plural form description", "Few"), 

377 ), 

378 PLURAL_ONE_OTHER_ZERO: ( 

379 pgettext_lazy("Plural form description", "One"), 

380 pgettext_lazy("Plural form description", "Other"), 

381 pgettext_lazy("Plural form description", "Zero"), 

382 ), 

383 PLURAL_ONE_FEW_MANY_OTHER: ( 

384 pgettext_lazy("Plural form description", "One"), 

385 pgettext_lazy("Plural form description", "Few"), 

386 pgettext_lazy("Plural form description", "Many"), 

387 pgettext_lazy("Plural form description", "Other"), 

388 ), 

389 PLURAL_ZERO_ONE_FEW_MANY_OTHER: ( 

390 pgettext_lazy("Plural form description", "Zero"), 

391 pgettext_lazy("Plural form description", "One"), 

392 pgettext_lazy("Plural form description", "Few"), 

393 pgettext_lazy("Plural form description", "Many"), 

394 pgettext_lazy("Plural form description", "Other"), 

395 ), 

396 PLURAL_ONE_TWO_FEW_MANY_OTHER: ( 

397 pgettext_lazy("Plural form description", "One"), 

398 pgettext_lazy("Plural form description", "Two"), 

399 pgettext_lazy("Plural form description", "Few"), 

400 pgettext_lazy("Plural form description", "Many"), 

401 pgettext_lazy("Plural form description", "Other"), 

402 ), 

403 PLURAL_TWO_OTHER: ( 

404 pgettext_lazy("Plural form description", "Two"), 

405 pgettext_lazy("Plural form description", "Other"), 

406 ), 

407 PLURAL_ZERO_ONE_TWO_FEW_MANY_OTHER: ( 

408 pgettext_lazy("Plural form description", "Zero"), 

409 pgettext_lazy("Plural form description", "One"), 

410 pgettext_lazy("Plural form description", "Two"), 

411 pgettext_lazy("Plural form description", "Few"), 

412 pgettext_lazy("Plural form description", "Many"), 

413 pgettext_lazy("Plural form description", "Other"), 

414 ), 

415 PLURAL_ZERO_OTHER: ( 

416 pgettext_lazy("Plural form description", "Zero"), 

417 pgettext_lazy("Plural form description", "Other"), 

418 ), 

419 PLURAL_ONE_MANY_OTHER: ( 

420 pgettext_lazy("Plural form description", "One"), 

421 pgettext_lazy("Plural form description", "Many"), 

422 pgettext_lazy("Plural form description", "Other"), 

423 ), 

424 PLURAL_ZERO_ONE_MANY_OTHER: ( 

425 pgettext_lazy("Plural form description", "Zero"), 

426 pgettext_lazy("Plural form description", "One"), 

427 pgettext_lazy("Plural form description", "Many"), 

428 pgettext_lazy("Plural form description", "Other"), 

429 ), 

430 PLURAL_ONE_FEW_MANY: ( 

431 pgettext_lazy("Plural form description", "One"), 

432 pgettext_lazy("Plural form description", "Few"), 

433 pgettext_lazy("Plural form description", "Many"), 

434 ), 

435}