Skip to content

Commit ee3f4d4

Browse files
CAVillalobosneslihanturan
authored andcommitted
Fix wrong language codes displaying to user (#2880) (#2930)
* Updated language codes displayed for Hebrew, Indonesian and Yiddish (#2880) * Function 'fixLanguageCode' encapsulated with unit tests (#2880) * Renaming class "StringUtils" as "LangCodeUtils" and small String formatting improvement in "SpinnerLanguagesAdapter"
1 parent d22884f commit ee3f4d4

File tree

3 files changed

+56
-5
lines changed

3 files changed

+56
-5
lines changed

app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import butterknife.ButterKnife;
2222
import fr.free.nrw.commons.R;
2323
import fr.free.nrw.commons.utils.BiMap;
24+
import fr.free.nrw.commons.utils.LangCodeUtils;
2425

2526
public class SpinnerLanguagesAdapter extends ArrayAdapter {
2627

@@ -114,21 +115,24 @@ public ViewHolder(View itemView) {
114115
}
115116

116117
public void init(int position, boolean isDropDownView) {
118+
final String languageCode = LangCodeUtils.fixLanguageCode(languageCodesList.get(position));
119+
final String languageName = String.format("%s%s", languageNamesList.get(position)
120+
.substring(0, 1).toUpperCase(), languageNamesList.get(position).substring(1));
117121
if (!isDropDownView) {
118122
view.setVisibility(View.GONE);
119-
if(languageCodesList.get(position).length()>2)
120-
tvLanguage.setText(languageCodesList.get(position).subSequence(0,2));
123+
if(languageCode.length()>2)
124+
tvLanguage.setText(languageCode.subSequence(0,2));
121125
else
122-
tvLanguage.setText(languageCodesList.get(position));
126+
tvLanguage.setText(languageCode);
123127

124128
} else {
125129
view.setVisibility(View.VISIBLE);
126130
if (languageCodesList.get(position).isEmpty()) {
127-
tvLanguage.setText(languageNamesList.get(position));
131+
tvLanguage.setText(languageName);
128132
tvLanguage.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
129133
} else {
130134
tvLanguage.setText(
131-
String.format("%s [%s]", languageNamesList.get(position), languageCodesList.get(position)));
135+
String.format("%s [%s]", languageName, languageCode));
132136
if(selectedLanguages.containsKey(languageCodesList.get(position))&&
133137
!languageCodesList.get(position).equals(selectedLangCode)) {
134138
tvLanguage.setTextColor(Color.GRAY);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package fr.free.nrw.commons.utils;
2+
3+
/**
4+
* Utilities class for miscellaneous strings
5+
*/
6+
public class LangCodeUtils {
7+
/**
8+
* Replaces the deprecated ISO-639 language codes used by Android with the updated ISO-639-1.
9+
* @param code Language code you want to update.
10+
* @return Updated language code. If not in the "deprecated list" returns the same code.
11+
*/
12+
public static String fixLanguageCode(String code) {
13+
if (code.equalsIgnoreCase("iw")) {
14+
return "he";
15+
} else if (code.equalsIgnoreCase("in")) {
16+
return "id";
17+
} else if (code.equalsIgnoreCase("ji")) {
18+
return "yi";
19+
} else {
20+
return code;
21+
}
22+
}
23+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package fr.free.nrw.commons.utils;
2+
3+
import org.junit.Test;
4+
5+
import static org.junit.Assert.assertTrue;
6+
7+
public class LangCodeUtilsTest {
8+
@Test
9+
public void testFixLanguageCodeIw(){
10+
assertTrue("Expected 'he' as result", LangCodeUtils.fixLanguageCode("iw").contentEquals("he"));
11+
}
12+
@Test
13+
public void testFixLanguageCodeIn(){
14+
assertTrue("Expected 'id' as result", LangCodeUtils.fixLanguageCode("in").contentEquals("id"));
15+
}
16+
@Test
17+
public void testFixLanguageCodeJi(){
18+
assertTrue("Expected 'yi' as result", LangCodeUtils.fixLanguageCode("ji").contentEquals("yi"));
19+
}
20+
@Test
21+
public void testFixLanguageCodeDefault(){
22+
assertTrue("Expected 'en' as result", LangCodeUtils.fixLanguageCode("en").contentEquals("en"));
23+
}
24+
}

0 commit comments

Comments
 (0)