diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/ComposeDefault.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/ComposeDefault.kt index 4764268a5..eeaf02dd9 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/ComposeDefault.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/ComposeDefault.kt @@ -7,8 +7,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.platform.LocalContext -import com.hippo.ehviewer.ui.i18n.LocalTranslations -import com.hippo.ehviewer.ui.i18n.Translations +import com.hippo.ehviewer.ui.i18n.LocalStrings +import com.hippo.ehviewer.ui.i18n.Strings import com.hippo.ehviewer.ui.screen.implicit import com.hippo.ehviewer.ui.tools.DialogState import com.hippo.ehviewer.ui.tools.LocalDialogState @@ -22,12 +22,12 @@ import kotlinx.coroutines.CoroutineScope @Composable inline fun AnimatedVisibilityScope.composing( navigator: DestinationsNavigator, - block: @Composable context(Translations, MainActivity, SnackbarHostState, DialogState, SharedTransitionScope, TransitionsVisibilityScope, DestinationsNavigator, CoroutineScope) + block: @Composable context(Strings, MainActivity, SnackbarHostState, DialogState, SharedTransitionScope, TransitionsVisibilityScope, DestinationsNavigator, CoroutineScope) () -> R, ) = with(NoopTransitionsVisibilityScope) { togetherWith(implicit()) { block( - LocalTranslations.current, + LocalStrings.current, with(LocalContext.current) { remember { findActivity() } }, LocalSnackBarHostState.current, LocalDialogState.current, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt index 3cc49bc7c..42b916d37 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/GalleryInfoBottomSheet.kt @@ -30,7 +30,7 @@ import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.GalleryDetail import com.hippo.ehviewer.client.data.GalleryInfo.Companion.LOCAL_FAVORITED import com.hippo.ehviewer.client.thumbUrl -import com.hippo.ehviewer.ui.i18n.Translations +import com.hippo.ehviewer.ui.i18n.Strings import com.hippo.ehviewer.ui.screen.navWithUrl import com.hippo.ehviewer.util.addTextToClipboard import com.ramcosta.composedestinations.navigation.DestinationsNavigator @@ -38,7 +38,7 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator private const val INDEX_URL = 2 private const val INDEX_PARENT = 9 -context(Translations) +context(Strings) fun GalleryDetail.content() = arrayOf( keyGid to "$gid", keyToken to token, @@ -63,7 +63,7 @@ fun GalleryDetail.content() = arrayOf( keyFavoriteName to favoriteName, ) -context(Context, DestinationsNavigator, Translations) +context(Context, DestinationsNavigator, Strings) @Composable fun GalleryInfoBottomSheet(detail: GalleryDetail) { Column(modifier = Modifier.fillMaxWidth()) { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/DeTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/DeStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/DeTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/DeStrings.kt index b9aa582d9..7705ca8ef 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/DeTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/DeStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object DeTranslations : Translations by EnTranslations { +object DeStrings : Strings by EnStrings { override val homepage = "Startseite" override val subscription = "Gefolgte Etiketten" override val whatsHot = "Beliebt" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EnTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EnStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EnTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EnStrings.kt index b485c00ef..3e3ff9cec 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EnTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EnStrings.kt @@ -2,10 +2,10 @@ package com.hippo.ehviewer.ui.i18n import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.buildAnnotatedString -import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.withStyle -object EnTranslations : Translations { +object EnStrings : Strings { override val appName = "EhViewer" override val siteE = "e-hentai" override val siteEx = "exhentai" @@ -360,7 +360,7 @@ object EnTranslations : Translations { override val settingsAboutDeclarationSummary = "EhViewer is not affiliated with E-Hentai.org in any way" override val settingsAboutAuthor = "Author" override val settingsAboutAuthorSummary = buildAnnotatedString { - withStyle(SpanStyle(textDecoration = TextDecoration.Underline)) { + withStyle(SpanStyle(fontStyle = FontStyle.Italic)) { appendLine("Hippo") appendLine("NekoInverter") appendLine("飛鳥澪") diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EsTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EsStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EsTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EsStrings.kt index 4ddd2d631..4eb1d957a 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EsTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/EsStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object EsTranslations : Translations by EnTranslations { +object EsStrings : Strings by EnStrings { override val homepage = "Página de inicio" override val subscription = "Suscripción" override val whatsHot = "Destacado" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/FrTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/FrStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/FrTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/FrStrings.kt index 1f3543b3b..acdf90bb5 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/FrTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/FrStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object FrTranslations : Translations by EnTranslations { +object FrStrings : Strings by EnStrings { override val homepage = "Page d'acceuil" override val subscription = "Tags suivis" override val whatsHot = "Plus vus" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/JaTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/JaStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/JaTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/JaStrings.kt index 64fd98524..a19c55907 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/JaTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/JaStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object JaTranslations : Translations by EnTranslations { +object JaStrings : Strings by EnStrings { override val homepage = "ホーム" override val subscription = "購読" override val whatsHot = "人気" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/KoTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/KoStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/KoTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/KoStrings.kt index 8f05dc4ef..b852d4b9e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/KoTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/KoStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object KoTranslations : Translations by EnTranslations { +object KoStrings : Strings by EnStrings { override val homepage = "홈" override val whatsHot = "인기 갤러리" override val favourite = "즐겨찾기" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/NbNoTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/NbNoStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/NbNoTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/NbNoStrings.kt index f1ee92808..6be069564 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/NbNoTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/NbNoStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object NbNoTranslations : Translations by EnTranslations { +object NbNoStrings : Strings by EnStrings { override val textIsEmpty = "Tekst tom" override val waring = "Advarsel" override val clipboardGalleryUrlSnackAction = "Vis" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/Translations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/Strings.kt similarity index 95% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/Translations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/Strings.kt index 72e10e500..b028b969e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/Translations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/Strings.kt @@ -10,7 +10,7 @@ import androidx.compose.ui.text.intl.Locale import cafe.adriel.lyricist.ProvideStrings import cafe.adriel.lyricist.rememberStrings -interface Translations { +interface Strings { val appName: String val siteE: String val siteEx: String @@ -612,30 +612,45 @@ object Locales { const val ZhTw = "zh-TW" } -val LocalTranslations: ProvidableCompositionLocal = - staticCompositionLocalOf { EnTranslations } +val Translations = mapOf( + Locales.En to EnStrings, + Locales.De to DeStrings, + Locales.Es to EsStrings, + Locales.Fr to FrStrings, + Locales.Ja to JaStrings, + Locales.Ko to KoStrings, + Locales.NbNo to NbNoStrings, + Locales.Th to ThStrings, + Locales.Tr to TrStrings, + Locales.ZhCn to ZhCnStrings, + Locales.ZhHk to ZhHkStrings, + Locales.ZhTw to ZhTwStrings, +) + +val LocalStrings: ProvidableCompositionLocal = + staticCompositionLocalOf { EnStrings } @Composable fun ProvideTranslations(content: @Composable () -> Unit) = ProvideStrings( rememberStrings( - translations = mapOf( - Locales.En to EnTranslations, - Locales.De to DeTranslations, - Locales.Es to EsTranslations, - Locales.Fr to FrTranslations, - Locales.Ja to JaTranslations, - Locales.Ko to KoTranslations, - Locales.NbNo to NbNoTranslations, - Locales.Th to ThTranslations, - Locales.Tr to TrTranslations, - Locales.ZhCn to ZhCnTranslations, - Locales.ZhHk to ZhHkTranslations, - Locales.ZhTw to ZhTwTranslations, - ), - currentLanguageTag = with(Locale.current) { - listOf(language, region).mapNotNull { it.ifBlank { null } }.joinToString("-") - }, + translations = Translations, + currentLanguageTag = Locale.current.resolveLanguageTag(), ), - provider = LocalTranslations, + provider = LocalStrings, content = content, ) + +fun getStrings(locale: Locale = Locale.current) = Translations[locale.resolveLanguageTag()] ?: EnStrings + +fun Locale.resolveLanguageTag() = when (val language = language) { + "zh" -> when (script) { + "Hans" -> Locales.ZhCn + else -> when (region) { + "HK" -> Locales.ZhHk + "MO", "TW" -> Locales.ZhTw + else -> Locales.ZhCn + } + } + "nb" -> Locales.NbNo + else -> language +} diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ThTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ThStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ThTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ThStrings.kt index ea70dd717..9c5a8858f 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ThTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ThStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object ThTranslations : Translations by EnTranslations { +object ThStrings : Strings by EnStrings { override val homepage = "หน้าหลัก" override val whatsHot = "เรื่องที่กำลังมาแรงมากๆ" override val favourite = "รายการโปรด" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/TrTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/TrStrings.kt similarity index 98% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/TrTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/TrStrings.kt index ddda9e93c..ee014f06c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/TrTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/TrStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object TrTranslations : Translations by EnTranslations { +object TrStrings : Strings by EnStrings { override val galleryListSearchBarHintExhentai = "ExHentai'de Arayın" override val homepage = "Ana sayfa" override val subscription = "Abonelikler" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhCnTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhCnStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhCnTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhCnStrings.kt index f4e3c915b..53fa76f2e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhCnTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhCnStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object ZhCnTranslations : Translations by EnTranslations { +object ZhCnStrings : Strings by EnStrings { override val homepage = "主页" override val subscription = "订阅" override val whatsHot = "热门" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhHkTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhHkStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhHkTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhHkStrings.kt index b3ae1cdf5..6f8b3bd9f 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhHkTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhHkStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object ZhHkTranslations : Translations by EnTranslations { +object ZhHkStrings : Strings by ZhTwStrings { override val homepage = "主頁" override val subscription = "訂閲" override val whatsHot = "熱門" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhTwTranslations.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhTwStrings.kt similarity index 99% rename from app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhTwTranslations.kt rename to app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhTwStrings.kt index 1b2560572..7a864e84d 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhTwTranslations.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/i18n/ZhTwStrings.kt @@ -1,6 +1,6 @@ package com.hippo.ehviewer.ui.i18n -object ZhTwTranslations : Translations by EnTranslations { +object ZhTwStrings : Strings by EnStrings { override val homepage = "首頁" override val subscription = "訂閱" override val whatsHot = "熱門" diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/ArchiveList.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/ArchiveList.kt index 11533ed16..1c6dfb5d4 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/ArchiveList.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/ArchiveList.kt @@ -21,9 +21,9 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.hippo.ehviewer.client.parser.Archive import com.hippo.ehviewer.client.parser.Funds -import com.hippo.ehviewer.ui.i18n.Translations +import com.hippo.ehviewer.ui.i18n.Strings -context(Translations) +context(Strings) @Composable fun ArchiveList( funds: Funds, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/AvatarIcon.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/AvatarIcon.kt index f3fbf92a6..cb95af258 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/AvatarIcon.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/AvatarIcon.kt @@ -46,7 +46,7 @@ import com.hippo.ehviewer.client.EhEngine import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.parser.HomeParser import com.hippo.ehviewer.collectAsState -import com.hippo.ehviewer.ui.i18n.Translations +import com.hippo.ehviewer.ui.i18n.Strings import com.hippo.ehviewer.ui.login.refreshAccountInfo import com.hippo.ehviewer.ui.tools.DialogState import com.hippo.ehviewer.util.displayString @@ -81,7 +81,7 @@ private val limitFlow: StateFlow = refreshEvent.conflate() .let { src -> merge(src, invalidateEvent.map { none() }) } .stateIn(limitScope, SharingStarted.Eagerly, none()) -context(CoroutineScope, DialogState, SnackbarHostState, DestinationsNavigator, Translations) +context(CoroutineScope, DialogState, SnackbarHostState, DestinationsNavigator, Strings) @Composable fun AvatarIcon() { val hasSignedIn by Settings.hasSignedIn.collectAsState() diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/TorrentList.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/TorrentList.kt index bd281d4ea..ce9ff56cc 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/TorrentList.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/TorrentList.kt @@ -23,9 +23,9 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.hippo.ehviewer.client.parser.Torrent import com.hippo.ehviewer.client.parser.format -import com.hippo.ehviewer.ui.i18n.Translations +import com.hippo.ehviewer.ui.i18n.Strings -context(Translations) +context(Strings) @Composable fun TorrentList( items: List, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt index 06679d6d0..01ed111c2 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryDetailContent.kt @@ -103,7 +103,7 @@ import com.hippo.ehviewer.ui.MainActivity import com.hippo.ehviewer.ui.confirmRemoveDownload import com.hippo.ehviewer.ui.destinations.GalleryCommentsScreenDestination import com.hippo.ehviewer.ui.getFavoriteIcon -import com.hippo.ehviewer.ui.i18n.Translations +import com.hippo.ehviewer.ui.i18n.Strings import com.hippo.ehviewer.ui.jumpToReaderByPage import com.hippo.ehviewer.ui.main.ArchiveList import com.hippo.ehviewer.ui.main.EhPreviewItem @@ -154,7 +154,7 @@ import kotlinx.coroutines.launch import moe.tarsin.coroutines.runSuspendCatching import moe.tarsin.coroutines.runSwallowingWithUI -context(CoroutineScope, DestinationsNavigator, DialogState, MainActivity, SnackbarHostState, SharedTransitionScope, TransitionsVisibilityScope, Translations) +context(CoroutineScope, DestinationsNavigator, DialogState, MainActivity, SnackbarHostState, SharedTransitionScope, TransitionsVisibilityScope, Strings) @Composable fun GalleryDetailContent( galleryInfo: GalleryInfo, @@ -379,7 +379,7 @@ fun GalleryDetailContent( } } -context(Context, CoroutineScope, DestinationsNavigator, DialogState, SnackbarHostState, Translations) +context(Context, CoroutineScope, DestinationsNavigator, DialogState, SnackbarHostState, Strings) @Composable fun BelowHeader(galleryDetail: GalleryDetail, voteTag: VoteTag) { @Composable