diff --git a/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java index 57e512d8a..10d3e2484 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/SpinnerLanguagesAdapter.java @@ -21,6 +21,7 @@ import butterknife.BindView; import butterknife.ButterKnife; import fr.free.nrw.commons.R; import fr.free.nrw.commons.utils.BiMap; +import fr.free.nrw.commons.utils.LangCodeUtils; public class SpinnerLanguagesAdapter extends ArrayAdapter { @@ -114,21 +115,24 @@ public class SpinnerLanguagesAdapter extends ArrayAdapter { } public void init(int position, boolean isDropDownView) { + final String languageCode = LangCodeUtils.fixLanguageCode(languageCodesList.get(position)); + final String languageName = String.format("%s%s", languageNamesList.get(position) + .substring(0, 1).toUpperCase(), languageNamesList.get(position).substring(1)); if (!isDropDownView) { view.setVisibility(View.GONE); - if(languageCodesList.get(position).length()>2) - tvLanguage.setText(languageCodesList.get(position).subSequence(0,2)); + if(languageCode.length()>2) + tvLanguage.setText(languageCode.subSequence(0,2)); else - tvLanguage.setText(languageCodesList.get(position)); + tvLanguage.setText(languageCode); } else { view.setVisibility(View.VISIBLE); if (languageCodesList.get(position).isEmpty()) { - tvLanguage.setText(languageNamesList.get(position)); + tvLanguage.setText(languageName); tvLanguage.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); } else { tvLanguage.setText( - String.format("%s [%s]", languageNamesList.get(position), languageCodesList.get(position))); + String.format("%s [%s]", languageName, languageCode)); if(selectedLanguages.containsKey(languageCodesList.get(position))&& !languageCodesList.get(position).equals(selectedLangCode)) { tvLanguage.setTextColor(Color.GRAY); diff --git a/app/src/main/java/fr/free/nrw/commons/utils/LangCodeUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/LangCodeUtils.java new file mode 100644 index 000000000..102a950cb --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/utils/LangCodeUtils.java @@ -0,0 +1,23 @@ +package fr.free.nrw.commons.utils; + +/** + * Utilities class for miscellaneous strings + */ +public class LangCodeUtils { + /** + * Replaces the deprecated ISO-639 language codes used by Android with the updated ISO-639-1. + * @param code Language code you want to update. + * @return Updated language code. If not in the "deprecated list" returns the same code. + */ + public static String fixLanguageCode(String code) { + if (code.equalsIgnoreCase("iw")) { + return "he"; + } else if (code.equalsIgnoreCase("in")) { + return "id"; + } else if (code.equalsIgnoreCase("ji")) { + return "yi"; + } else { + return code; + } + } +} diff --git a/app/src/test/kotlin/fr/free/nrw/commons/utils/LangCodeUtilsTest.java b/app/src/test/kotlin/fr/free/nrw/commons/utils/LangCodeUtilsTest.java new file mode 100644 index 000000000..395c812c7 --- /dev/null +++ b/app/src/test/kotlin/fr/free/nrw/commons/utils/LangCodeUtilsTest.java @@ -0,0 +1,24 @@ +package fr.free.nrw.commons.utils; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class LangCodeUtilsTest { + @Test + public void testFixLanguageCodeIw(){ + assertTrue("Expected 'he' as result", LangCodeUtils.fixLanguageCode("iw").contentEquals("he")); + } + @Test + public void testFixLanguageCodeIn(){ + assertTrue("Expected 'id' as result", LangCodeUtils.fixLanguageCode("in").contentEquals("id")); + } + @Test + public void testFixLanguageCodeJi(){ + assertTrue("Expected 'yi' as result", LangCodeUtils.fixLanguageCode("ji").contentEquals("yi")); + } + @Test + public void testFixLanguageCodeDefault(){ + assertTrue("Expected 'en' as result", LangCodeUtils.fixLanguageCode("en").contentEquals("en")); + } +}