Migrate to multiplatform string resources (#10147)
* Migrate to multiplatform string resources * Move plurals translations into separate files * Fix lint check on generated files (cherry picked from commit 46e734fc8eefb8c06a880194e702559ca3fa769d) # Conflicts: # app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt # app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt # app/src/main/java/eu/kanade/presentation/browse/ExtensionsScreen.kt # app/src/main/java/eu/kanade/presentation/browse/SourcesScreen.kt # app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceDialogs.kt # app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt # app/src/main/java/eu/kanade/presentation/category/components/CategoryDialogs.kt # app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt # app/src/main/java/eu/kanade/presentation/manga/components/MangaBottomActionMenu.kt # app/src/main/java/eu/kanade/presentation/manga/components/MangaDialogs.kt # app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsBrowseScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsLibraryScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsMainScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsReaderScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsSecurityScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/about/AboutScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/advanced/ClearDatabaseScreen.kt # app/src/main/java/eu/kanade/presentation/more/settings/screen/data/CreateBackupScreen.kt # app/src/main/java/eu/kanade/presentation/reader/ReaderPageActionsDialog.kt # app/src/main/java/eu/kanade/presentation/reader/appbars/BottomReaderBar.kt # app/src/main/java/eu/kanade/presentation/reader/appbars/ReaderAppBars.kt # app/src/main/java/eu/kanade/presentation/reader/components/ChapterNavigator.kt # app/src/main/java/eu/kanade/presentation/reader/settings/GeneralSettingsPage.kt # app/src/main/java/eu/kanade/tachiyomi/data/download/DownloadManager.kt # app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateJob.kt # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateNotifier.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/BrowseTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/MigrationFlags.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/manga/MigrateMangaScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/MigrateDialog.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SourceSearchScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/sources/MigrateSourceTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/SourcesTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/SourceFilterDialog.kt # app/src/main/java/eu/kanade/tachiyomi/ui/history/HistoryTab.kt # app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt # app/src/main/java/eu/kanade/tachiyomi/ui/reader/setting/ReaderPreferences.kt # app/src/main/java/eu/kanade/tachiyomi/ui/stats/StatsScreen.kt # app/src/main/java/eu/kanade/tachiyomi/ui/updates/UpdatesTab.kt # build.gradle.kts # i18n/build.gradle.kts # i18n/src/commonMain/resources/MR/base/strings_sy.xml # i18n/src/commonMain/resources/MR/fr/strings_sy.xml # i18n/src/commonMain/resources/MR/in/strings_sy.xml # i18n/src/commonMain/resources/MR/pt-rBR/strings_sy.xml # i18n/src/commonMain/resources/MR/ru/strings_sy.xml # i18n/src/commonMain/resources/MR/zh-rCN/strings_sy.xml # i18n/src/commonMain/resources/MR/zh-rTW/strings_sy.xml
This commit is contained in:
@@ -19,6 +19,9 @@ android {
|
||||
|
||||
dependencies {
|
||||
implementation(project(":i18n"))
|
||||
// SY -->
|
||||
implementation(project(":i18n-sy"))
|
||||
// SY <--
|
||||
|
||||
api(libs.logcat)
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package eu.kanade.tachiyomi.core.security
|
||||
|
||||
import eu.kanade.tachiyomi.core.R
|
||||
import dev.icerock.moko.resources.StringResource
|
||||
import tachiyomi.core.preference.Preference
|
||||
import tachiyomi.core.preference.PreferenceStore
|
||||
import tachiyomi.core.preference.getEnum
|
||||
import tachiyomi.i18n.MR
|
||||
|
||||
class SecurityPreferences(
|
||||
private val preferenceStore: PreferenceStore,
|
||||
@@ -45,10 +46,10 @@ class SecurityPreferences(
|
||||
0,
|
||||
)
|
||||
|
||||
enum class SecureScreenMode(val titleResId: Int) {
|
||||
ALWAYS(R.string.lock_always),
|
||||
INCOGNITO(R.string.pref_incognito_mode),
|
||||
NEVER(R.string.lock_never),
|
||||
enum class SecureScreenMode(val titleRes: StringResource) {
|
||||
ALWAYS(MR.strings.lock_always),
|
||||
INCOGNITO(MR.strings.pref_incognito_mode),
|
||||
NEVER(MR.strings.lock_never),
|
||||
}
|
||||
|
||||
// SY -->
|
||||
|
||||
@@ -5,7 +5,6 @@ import android.content.Context
|
||||
import android.webkit.WebView
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.ContextCompat
|
||||
import eu.kanade.tachiyomi.core.R
|
||||
import eu.kanade.tachiyomi.network.AndroidCookieJar
|
||||
import eu.kanade.tachiyomi.util.system.WebViewClientCompat
|
||||
import eu.kanade.tachiyomi.util.system.isOutdated
|
||||
@@ -15,6 +14,8 @@ import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import tachiyomi.core.i18n.localize
|
||||
import tachiyomi.i18n.MR
|
||||
import java.io.IOException
|
||||
import java.util.concurrent.CountDownLatch
|
||||
|
||||
@@ -48,7 +49,7 @@ class CloudflareInterceptor(
|
||||
// Because OkHttp's enqueue only handles IOExceptions, wrap the exception so that
|
||||
// we don't crash the entire app
|
||||
catch (e: CloudflareBypassException) {
|
||||
throw IOException(context.getString(R.string.information_cloudflare_bypass_failure), e)
|
||||
throw IOException(context.localize(MR.strings.information_cloudflare_bypass_failure), e)
|
||||
} catch (e: Exception) {
|
||||
throw IOException(e)
|
||||
}
|
||||
@@ -130,7 +131,7 @@ class CloudflareInterceptor(
|
||||
if (!cloudflareBypassed) {
|
||||
// Prompt user to update WebView if it seems too outdated
|
||||
if (isWebViewOutdated) {
|
||||
context.toast(R.string.information_webview_outdated, Toast.LENGTH_LONG)
|
||||
context.toast(MR.strings.information_webview_outdated, Toast.LENGTH_LONG)
|
||||
}
|
||||
|
||||
throw CloudflareBypassException()
|
||||
|
||||
@@ -5,7 +5,6 @@ import android.os.Build
|
||||
import android.webkit.WebSettings
|
||||
import android.webkit.WebView
|
||||
import android.widget.Toast
|
||||
import eu.kanade.tachiyomi.core.R
|
||||
import eu.kanade.tachiyomi.util.system.DeviceUtil
|
||||
import eu.kanade.tachiyomi.util.system.WebViewUtil
|
||||
import eu.kanade.tachiyomi.util.system.setDefaultSettings
|
||||
@@ -15,6 +14,7 @@ import okhttp3.Interceptor
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import tachiyomi.core.util.lang.launchUI
|
||||
import tachiyomi.i18n.MR
|
||||
import java.util.Locale
|
||||
import java.util.concurrent.CountDownLatch
|
||||
import java.util.concurrent.TimeUnit
|
||||
@@ -57,7 +57,7 @@ abstract class WebViewInterceptor(
|
||||
|
||||
if (!WebViewUtil.supportsWebView(context)) {
|
||||
launchUI {
|
||||
context.toast(R.string.information_webview_required, Toast.LENGTH_LONG)
|
||||
context.toast(MR.strings.information_webview_required, Toast.LENGTH_LONG)
|
||||
}
|
||||
return response
|
||||
}
|
||||
|
||||
@@ -2,7 +2,8 @@ package eu.kanade.tachiyomi.util.system
|
||||
|
||||
import android.content.Context
|
||||
import android.widget.Toast
|
||||
import androidx.annotation.StringRes
|
||||
import dev.icerock.moko.resources.StringResource
|
||||
import tachiyomi.core.i18n.localize
|
||||
|
||||
/**
|
||||
* Display a toast in this context.
|
||||
@@ -11,11 +12,11 @@ import androidx.annotation.StringRes
|
||||
* @param duration the duration of the toast. Defaults to short.
|
||||
*/
|
||||
fun Context.toast(
|
||||
@StringRes resource: Int,
|
||||
resource: StringResource,
|
||||
duration: Int = Toast.LENGTH_SHORT,
|
||||
block: (Toast) -> Unit = {},
|
||||
): Toast {
|
||||
return toast(getString(resource), duration, block)
|
||||
return toast(localize(resource), duration, block)
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package tachiyomi.core.i18n
|
||||
|
||||
import android.content.Context
|
||||
import dev.icerock.moko.resources.PluralsResource
|
||||
import dev.icerock.moko.resources.StringResource
|
||||
import dev.icerock.moko.resources.desc.Plural
|
||||
import dev.icerock.moko.resources.desc.PluralFormatted
|
||||
import dev.icerock.moko.resources.desc.Resource
|
||||
import dev.icerock.moko.resources.desc.ResourceFormatted
|
||||
import dev.icerock.moko.resources.desc.StringDesc
|
||||
|
||||
fun Context.localize(resource: StringResource): String {
|
||||
return StringDesc.Resource(resource).toString(this)
|
||||
}
|
||||
|
||||
fun Context.localize(resource: StringResource, vararg args: Any): String {
|
||||
return StringDesc.ResourceFormatted(resource, *args).toString(this)
|
||||
}
|
||||
|
||||
fun Context.localizePlural(resource: PluralsResource, count: Int): String {
|
||||
return StringDesc.Plural(resource, count).toString(this)
|
||||
}
|
||||
|
||||
fun Context.localizePlural(resource: PluralsResource, count: Int, vararg args: Any): String {
|
||||
return StringDesc.PluralFormatted(resource, count, *args).toString(this)
|
||||
}
|
||||
@@ -3,7 +3,8 @@ package tachiyomi.core.provider
|
||||
import android.content.Context
|
||||
import android.os.Environment
|
||||
import androidx.core.net.toUri
|
||||
import eu.kanade.tachiyomi.core.R
|
||||
import tachiyomi.core.i18n.localize
|
||||
import tachiyomi.i18n.MR
|
||||
import java.io.File
|
||||
|
||||
class AndroidBackupFolderProvider(
|
||||
@@ -13,7 +14,7 @@ class AndroidBackupFolderProvider(
|
||||
override fun directory(): File {
|
||||
return File(
|
||||
Environment.getExternalStorageDirectory().absolutePath + File.separator +
|
||||
context.getString(R.string.app_name),
|
||||
context.localize(MR.strings.app_name),
|
||||
"backup",
|
||||
)
|
||||
}
|
||||
|
||||
@@ -3,7 +3,8 @@ package tachiyomi.core.provider
|
||||
import android.content.Context
|
||||
import android.os.Environment
|
||||
import androidx.core.net.toUri
|
||||
import eu.kanade.tachiyomi.core.R
|
||||
import tachiyomi.core.i18n.localize
|
||||
import tachiyomi.i18n.MR
|
||||
import java.io.File
|
||||
|
||||
class AndroidDownloadFolderProvider(
|
||||
@@ -13,7 +14,7 @@ class AndroidDownloadFolderProvider(
|
||||
override fun directory(): File {
|
||||
return File(
|
||||
Environment.getExternalStorageDirectory().absolutePath + File.separator +
|
||||
context.getString(R.string.app_name),
|
||||
context.localize(MR.strings.app_name),
|
||||
"downloads",
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user