Skip to content

Commit 7f8870e

Browse files
committed
Remove Plural Entries Missing the 'Other' Form
Not having the 'other' form in plural resources can cause the app to crash. This commit ensures that any plural entries lacking the 'other' form are removed to prevent crashes.
1 parent 04689c5 commit 7f8870e

File tree

2 files changed

+69
-16
lines changed

2 files changed

+69
-16
lines changed

common/src/main/java/com/box/l10n/mojito/okapi/filters/AndroidFilter.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,9 +502,17 @@ public String execute(String xmlContent) {
502502
Element plurals = (Element) pluralsElements.item(i);
503503
NodeList items = plurals.getElementsByTagName("item");
504504
boolean hasTranslated = false;
505+
boolean hasOther = false;
505506

506507
for (int j = 0; j < items.getLength(); j++) {
507508
Element item = (Element) items.item(j);
509+
510+
if ("other".equals(item.getAttribute("quantity"))) {
511+
hasOther =
512+
!RemoveUntranslatedStrategy.UNTRANSLATED_PLACEHOLDER.equals(
513+
item.getTextContent());
514+
}
515+
508516
if (hasRemoveUntranslated()
509517
&& item.getTextContent()
510518
.equals(RemoveUntranslatedStrategy.UNTRANSLATED_PLACEHOLDER)) {
@@ -515,7 +523,7 @@ public String execute(String xmlContent) {
515523
}
516524
}
517525

518-
if (!hasTranslated) {
526+
if (!hasOther || !hasTranslated) {
519527
plurals.getParentNode().removeChild(plurals);
520528
i--;
521529
}

common/src/test/java/com/box/l10n/mojito/okapi/filters/AndroidFilterTest.java

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,8 @@ public void testPostProcessingKeepDescription() {
126126
<item quantity="other">@#$untranslated$#@</item>
127127
</plurals>
128128
<plurals description="testing plural attr" name="pins2">
129-
<item quantity="one">translated</item>
130-
<item quantity="other">@#$untranslated$#@</item>
129+
<item quantity="one">@#$untranslated$#@</item>
130+
<item quantity="other">translated</item>
131131
</plurals>
132132
<plurals name="pins3">
133133
<item quantity="one">pin fr</item>
@@ -143,7 +143,7 @@ public void testPostProcessingKeepDescription() {
143143
<string description="a description" name="pinterest2">somestring to keep</string>
144144
<!--testing plural-->
145145
<plurals description="testing plural attr" name="pins2">
146-
<item quantity="one">translated</item>
146+
<item quantity="other">translated</item>
147147
</plurals>
148148
<plurals name="pins3">
149149
<item quantity="one">pin fr</item>
@@ -170,8 +170,8 @@ public void testPostProcessingRemoveDescription() {
170170
<item quantity="other">@#$untranslated$#@</item>
171171
</plurals>
172172
<plurals description="testing plural attr" name="pins2">
173-
<item quantity="one">translated</item>
174-
<item quantity="other">@#$untranslated$#@</item>
173+
<item quantity="one">@#$untranslated$#@</item>
174+
<item quantity="other">translated</item>
175175
</plurals>
176176
<plurals name="pins3">
177177
<item quantity="one">pin fr</item>
@@ -187,7 +187,7 @@ public void testPostProcessingRemoveDescription() {
187187
<string name="pinterest2">somestring to keep</string>
188188
<!--testing plural-->
189189
<plurals name="pins2">
190-
<item quantity="one">translated</item>
190+
<item quantity="other">translated</item>
191191
</plurals>
192192
<plurals name="pins3">
193193
<item quantity="one">pin fr</item>
@@ -245,8 +245,8 @@ public void testPostProcessingRemoveTranslatableFalse() {
245245
<item quantity="other">@#$untranslated$#@</item>
246246
</plurals>
247247
<plurals description="testing plural attr" name="pins2">
248-
<item quantity="one">translated</item>
249-
<item quantity="other">@#$untranslated$#@</item>
248+
<item quantity="one">@#$untranslated$#@</item>
249+
<item quantity="other">translated</item>
250250
</plurals>
251251
<plurals name="pins3" translatable="false">
252252
<item quantity="one">pin fr</item>
@@ -261,13 +261,58 @@ public void testPostProcessingRemoveTranslatableFalse() {
261261
<resources>
262262
<!--testing plural-->
263263
<plurals name="pins2">
264-
<item quantity="one">translated</item>
264+
<item quantity="other">translated</item>
265265
</plurals>
266266
</resources>
267267
""";
268268
assertEquals(expected, output);
269269
}
270270

271+
@Test
272+
public void testPostProcessingRemoveMissingOther() {
273+
AndroidFilter.AndroidFilePostProcessor androidFilePostProcessor =
274+
new AndroidFilter.AndroidFilePostProcessor(true, true, 2, true, false);
275+
String input =
276+
"""
277+
<?xml version="1.0" encoding="UTF-8"?>
278+
<resources>
279+
<plurals name="pins">
280+
<item quantity="one">pin fr</item>
281+
</plurals>
282+
</resources>
283+
""";
284+
String output = androidFilePostProcessor.execute(input);
285+
String expected =
286+
"""
287+
<?xml version="1.0" encoding="UTF-8"?>
288+
<resources/>
289+
""";
290+
assertEquals(expected, output);
291+
}
292+
293+
@Test
294+
public void testPostProcessingRemoveMissingOtherUntranslated() {
295+
AndroidFilter.AndroidFilePostProcessor androidFilePostProcessor =
296+
new AndroidFilter.AndroidFilePostProcessor(true, true, 2, true, false);
297+
String input =
298+
"""
299+
<?xml version="1.0" encoding="UTF-8"?>
300+
<resources>
301+
<plurals name="pins">
302+
<item quantity="one">pin fr</item>
303+
<item quantity="other">@#$untranslated$#@</item>
304+
</plurals>
305+
</resources>
306+
""";
307+
String output = androidFilePostProcessor.execute(input);
308+
String expected =
309+
"""
310+
<?xml version="1.0" encoding="UTF-8"?>
311+
<resources/>
312+
""";
313+
assertEquals(expected, output);
314+
}
315+
271316
@Test
272317
public void testPostProcessingStandaloneNo() {
273318
AndroidFilter.AndroidFilePostProcessor androidFilePostProcessor =
@@ -284,8 +329,8 @@ public void testPostProcessingStandaloneNo() {
284329
<item quantity="other">@#$untranslated$#@</item>
285330
</plurals>
286331
<plurals description="testing plural attr" name="pins2">
287-
<item quantity="one">translated</item>
288-
<item quantity="other">@#$untranslated$#@</item>
332+
<item quantity="one">@#$untranslated$#@</item>
333+
<item quantity="other">translated</item>
289334
</plurals>
290335
<plurals name="pins3" translatable="false">
291336
<item quantity="one">pin fr</item>
@@ -300,7 +345,7 @@ public void testPostProcessingStandaloneNo() {
300345
<resources>
301346
<!--testing plural-->
302347
<plurals name="pins2">
303-
<item quantity="one">translated</item>
348+
<item quantity="other">translated</item>
304349
</plurals>
305350
</resources>
306351
""";
@@ -323,8 +368,8 @@ public void testPostProcessingStandaloneYes() {
323368
<item quantity="other">@#$untranslated$#@</item>
324369
</plurals>
325370
<plurals description="testing plural attr" name="pins2">
326-
<item quantity="one">translated</item>
327-
<item quantity="other">@#$untranslated$#@</item>
371+
<item quantity="one">@#$untranslated$#@</item>
372+
<item quantity="other">translated</item>
328373
</plurals>
329374
<plurals name="pins3" translatable="false">
330375
<item quantity="one">pin fr</item>
@@ -339,7 +384,7 @@ public void testPostProcessingStandaloneYes() {
339384
<resources>
340385
<!--testing plural-->
341386
<plurals name="pins2">
342-
<item quantity="one">translated</item>
387+
<item quantity="other">translated</item>
343388
</plurals>
344389
</resources>
345390
""";

0 commit comments

Comments
 (0)