mirror of
https://github.com/mihonapp/mihon.git
synced 2025-06-26 02:57:50 +02:00
Migrate to multiplatform string resources (#10147)
* Migrate to multiplatform string resources * Move plurals translations into separate files * Fix lint check on generated files
This commit is contained in:
@ -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,
|
||||
@ -26,9 +27,9 @@ 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),
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
/**
|
||||
|
26
core/src/main/java/tachiyomi/core/i18n/Localize.kt
Normal file
26
core/src/main/java/tachiyomi/core/i18n/Localize.kt
Normal file
@ -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