New languages (#318)

* Added Hindi language support

* Added Simplified Chinese support and implemented search in language selection dialog

* Added support for Italian, Polish, Vietnamese, and Brazilian Portuguese languages

* Added Belarusian language support and fixed activity recreation on locale change
This commit is contained in:
Aryan 2026-05-16 20:07:59 +05:30 committed by GitHub
parent 056485a140
commit 70c272baa7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
26 changed files with 7931 additions and 301 deletions

View file

@ -3,17 +3,19 @@ package com.aryan.reader
import java.io.File
import javax.xml.parsers.DocumentBuilderFactory
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
class AppLanguageOptionsTest {
@Test
fun `supported app languages include Spanish`() {
fun `supported app languages expose configured locale order`() {
assertEquals(
listOf("en", "ar", "de", "tr", "fr", "ru", "es"),
listOf("en", "ar", "de", "tr", "fr", "ru", "be", "es", "pt-BR", "it", "pl", "vi", "hi", "zh-CN"),
supportedAppLanguageOptions.mapNotNull { it.tag }
)
assertEquals(R.string.language_spanish, supportedAppLanguageOptions.last().labelRes)
assertEquals(R.string.language_chinese_simplified, supportedAppLanguageOptions.last().labelRes)
}
@Test
@ -23,6 +25,35 @@ class AppLanguageOptionsTest {
assertEquals(supportedAppLanguageOptions, appLanguageSelectionOptions.drop(1))
}
@Test
fun `app language search matches labels tags and aliases`() {
val chinese = supportedAppLanguageOptions.first { it.tag == "zh-CN" }
assertTrue(chinese.matchesLanguageSearch(label = "简体中文(简体中文)", query = "zh cn"))
assertTrue(chinese.matchesLanguageSearch(label = "简体中文(简体中文)", query = "mandarin"))
assertTrue(chinese.matchesLanguageSearch(label = "简体中文(简体中文)", query = "简体"))
assertTrue(systemAppLanguageOption.matchesLanguageSearch(label = "System default", query = "device"))
assertFalse(chinese.matchesLanguageSearch(label = "简体中文(简体中文)", query = "korean"))
}
@Test
fun `app language search normalizes accents`() {
val turkish = supportedAppLanguageOptions.first { it.tag == "tr" }
val belarusian = supportedAppLanguageOptions.first { it.tag == "be" }
val portugueseBrazilian = supportedAppLanguageOptions.first { it.tag == "pt-BR" }
val vietnamese = supportedAppLanguageOptions.first { it.tag == "vi" }
assertTrue(turkish.matchesLanguageSearch(label = "Türkçe (Turkish)", query = "turkce"))
assertTrue(belarusian.matchesLanguageSearch(label = "Беларуская", query = "belarusian"))
assertTrue(
portugueseBrazilian.matchesLanguageSearch(
label = "Português (Brasil)",
query = "portugues brasileiro"
)
)
assertTrue(vietnamese.matchesLanguageSearch(label = "Tiếng Việt", query = "tieng viet"))
}
@Test
fun `supported app language tags are unique`() {
val tags = supportedAppLanguageOptions.mapNotNull { it.tag }