diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/ImagesManageActivity.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/ImagesManageActivity.kt index c4fa8ab727f9..d6037d8e8400 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/ImagesManageActivity.kt +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/ImagesManageActivity.kt @@ -213,8 +213,8 @@ class ImagesManageActivity : BaseActivity() { addedLanguages.add(currentLanguage) languageForImage.add(getLanguageData(currentLanguage, false)) } - val localeValues = resources.getStringArray(R.array.languages_array) - val otherNotSupportedCode = localeValues.filter { it !in addedLanguages } + + val otherNotSupportedCode = SupportedLanguages.codes().filter { it !in addedLanguages } languageForImage.addAll(getLanguageData(otherNotSupportedCode, false)) val adapter = LanguageDataAdapter(this, R.layout.simple_spinner_item_white, languageForImage) diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/PreferencesFragment.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/PreferencesFragment.kt index 21151e67e70b..68c1fed2623c 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/PreferencesFragment.kt +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/PreferencesFragment.kt @@ -57,10 +57,8 @@ import openfoodfacts.github.scrachx.openfood.BuildConfig import openfoodfacts.github.scrachx.openfood.R import openfoodfacts.github.scrachx.openfood.analytics.AnalyticsEvent import openfoodfacts.github.scrachx.openfood.analytics.MatomoAnalytics -import openfoodfacts.github.scrachx.openfood.app.OFFApplication import openfoodfacts.github.scrachx.openfood.customtabs.CustomTabActivityHelper import openfoodfacts.github.scrachx.openfood.customtabs.WebViewFallback -import openfoodfacts.github.scrachx.openfood.features.scan.ContinuousScanActivity import openfoodfacts.github.scrachx.openfood.jobs.LoadTaxonomiesWorker import openfoodfacts.github.scrachx.openfood.jobs.OfflineProductWorker.Companion.scheduleSync import openfoodfacts.github.scrachx.openfood.models.DaoSession @@ -69,13 +67,9 @@ import openfoodfacts.github.scrachx.openfood.models.entities.analysistagconfig.A import openfoodfacts.github.scrachx.openfood.models.entities.analysistagconfig.AnalysisTagConfigDao import openfoodfacts.github.scrachx.openfood.models.entities.country.CountryName import openfoodfacts.github.scrachx.openfood.models.entities.country.CountryNameDao -import openfoodfacts.github.scrachx.openfood.utils.INavigationItem +import openfoodfacts.github.scrachx.openfood.utils.* import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper.getLanguage -import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper.getLocale -import openfoodfacts.github.scrachx.openfood.utils.NavigationDrawerListener import openfoodfacts.github.scrachx.openfood.utils.NavigationDrawerListener.NavigationDrawerType -import openfoodfacts.github.scrachx.openfood.utils.SearchSuggestionProvider -import openfoodfacts.github.scrachx.openfood.utils.requirePreference import org.greenrobot.greendao.async.AsyncOperation import org.greenrobot.greendao.async.AsyncOperationListener import org.greenrobot.greendao.query.WhereCondition.StringCondition @@ -107,33 +101,7 @@ class PreferencesFragment : PreferenceFragmentCompat(), INavigationItem, OnShare val settings = requireActivity().getSharedPreferences("prefs", 0) - val finalLocalLangs = mutableListOf() - val finalLocalLabels = mutableListOf() - - val languages = requireActivity().resources.getStringArray(R.array.languages_array) - val localeLabels = arrayOfNulls(languages.size) - - languages.withIndex().forEach { (i, lang) -> - val current = getLocale(lang) - localeLabels[i] = current.getDisplayName(current).capitalize(Locale.getDefault()) - finalLocalLabels += localeLabels[i] - finalLocalLangs += lang - } - - requirePreference(getString(R.string.pref_language_key)).let { - it.entries = finalLocalLabels.toTypedArray() - it.entryValues = finalLocalLangs.toTypedArray() - it.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _: Preference?, locale: Any? -> - val configuration = requireActivity().resources.configuration - Toast.makeText(context, getString(R.string.changes_saved), Toast.LENGTH_SHORT).show() - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - configuration.setLocale(getLocale(locale as String?)) - requireActivity().recreate() - } - true - } - } - + initLanguageCell() requirePreference(getString(R.string.pref_app_theme_key)).let { it.setEntries(R.array.application_theme_entries) @@ -434,6 +402,28 @@ class PreferencesFragment : PreferenceFragmentCompat(), INavigationItem, OnShare .addTo(disp) } + private fun initLanguageCell() { + val localesWithNames = SupportedLanguages.codes() + .map { + val locale = LocaleHelper.getLocale(it) + it to locale.getDisplayName(locale).capitalize(locale) + } + + requirePreference(getString(R.string.pref_language_key)).let { preference -> + preference.entries = localesWithNames.map { it.second }.toTypedArray() + preference.entryValues = localesWithNames.map { it.first }.toTypedArray() + preference.onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _: Preference?, locale: Any? -> + val configuration = requireActivity().resources.configuration + Toast.makeText(context, getString(R.string.changes_saved), Toast.LENGTH_SHORT).show() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + configuration.setLocale(LocaleHelper.getLocale(locale as String?)) + requireActivity().recreate() + } + true + } + } + } + companion object { const val LOGIN_PREF = "login" fun newInstance() = PreferencesFragment().apply { arguments = Bundle() } diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/ProductEditOverviewFragment.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/ProductEditOverviewFragment.kt index 81ce96dcaa1d..ef2948ea58b8 100644 --- a/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/ProductEditOverviewFragment.kt +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/features/product/edit/ProductEditOverviewFragment.kt @@ -852,7 +852,7 @@ class ProductEditOverviewFragment : ProductEditFragment() { } private fun selectProductLanguage() { - val localeValues = requireActivity().resources.getStringArray(R.array.languages_array) + val localeValues = SupportedLanguages.codes() val localeLabels = arrayOfNulls(localeValues.size) val finalLocalValues = ArrayList() val finalLocalLabels = ArrayList() diff --git a/app/src/main/java/openfoodfacts/github/scrachx/openfood/utils/SupportedLanguages.kt b/app/src/main/java/openfoodfacts/github/scrachx/openfood/utils/SupportedLanguages.kt new file mode 100644 index 000000000000..76ba936d6c39 --- /dev/null +++ b/app/src/main/java/openfoodfacts/github/scrachx/openfood/utils/SupportedLanguages.kt @@ -0,0 +1,98 @@ +package openfoodfacts.github.scrachx.openfood.utils + +@Suppress("unused") +enum class SupportedLanguages(val code: String) { + AA("aa"), + ACH("ach"), + AF("af"), + AK("ak"), + AM("am"), + AR("ar"), + AS("as"), + AST("ast"), + AZ("az"), + B_SR_CYRL("b+sr+Cyrl"), + B_SR_LATN("b+sr+Latn"), + BE("be"), + BN("bn"), + BG("bg"), + CA("ca"), + CS("cs"), + DA("da"), + DE("de"), + EL("el"), + EN("en"), + EO("eo"), + ES("es"), + ET("et"), + EU("eu"), + FA("fa"), + FI("fi"), + FIL("fil"), + FR("fr"), + GA("ga"), + GL("gl"), + GU("gu"), + HE("he"), + HI("hi"), + HU("hu"), + HR("hr"), + HY("hy"), + ID("id"), + IT("it"), + IS("is"), + JA("ja"), + KAB("kab"), + KK("kk"), + KM("km"), + KO("ko"), + KU("ku"), + LO("lo"), + LT("lt"), + LV("lv"), + MG("mg"), + ML("ml"), + MN("mn"), + MS("ms"), + MT("mt"), + MY("my"), + NE("ne"), + NO("no"), + NB("nb"), + NL_BE("nl-BE"), + NL("nl"), + PL("pl"), + PT_BR("pt-BR"), + PT("pt"), + RO("ro"), + RU("ru"), + SI("si"), + SL("sl"), + SK("sk"), + SV("sv"), + TA("ta"), + TE("te"), + TG("tg"), + TH("th"), + TI("ti"), + TL("tl"), + TR("tr"), + UG("ug"), + UK("uk"), + UZ("uz"), + VI("vi"), + WA("wa"), + WO("wo"), + XH("xh"), + YI("yi"), + YO("yo"), + ZH_CN("zh-CN"), + ZH_HK("zh-HK"), + ZH_TW("zh-TW"), + ZH("zh"), + ZU("zu"); + + companion object { + fun codes() = values().map { it.code } + } +} diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index d7c29c272381..6b380cf814a0 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -209,99 +209,6 @@ Zinc - - - aa - ach - af - ak - am - ar - as - ast - az - b+sr+Cyrl - b+sr+Latn - be - bn - bg - ca - cs - da - de - el - en - eo - es - et - eu - fa - fi - fil - fr - ga - gl - gu - he - hi - hu - hr - hy - id - it - is - ja - kab - kk - km - ko - ku - lo - lt - lv - mg - ml - mn - ms - mt - my - ne - no - nb - nl-BE - nl - pl - pt-BR - pt - ro - ru - si - sl - sk - sv - ta - te - tg - th - ti - tl - tr - ug - uk - uz - vi - wa - wo - xh - yi - yo - zh-CN - zh-HK - zh-TW - zh - zu - - https://world-%1$s.openfoodfacts.org/ingredients?translate=1 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0eefc8c4a2e4..a73bdc4deb8f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -216,100 +216,6 @@ Zinc - - - aa - ach - af - ak - am - ar - as - ast - az - b+sr+Cyrl - b+sr+Latn - be - bn - bg - ca - cs - da - de - el - en - eo - es - et - eu - fa - fi - fil - fr - ga - gl - gu - he - hi - hu - hr - hy - id - it - is - ja - kab - kk - km - ko - ku - lo - lt - lv - mg - ml - mn - ms - mt - my - ne - no - nb - nl-BE - nl - pl - pt-BR - pt - ro - ru - si - sl - sk - sv - ta - te - tg - th - ti - tl - tr - ug - uk - uz - vi - wa - wo - xh - yi - yo - zh-CN - zh-HK - zh-TW - zh - zu - - - https://world-%1$s.openfoodfacts.org/ingredients?translate=1