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:
arkon
2023-11-18 13:54:56 -05:00
committed by GitHub
parent c39ae21f4a
commit 46e734fc8e
340 changed files with 5741 additions and 6292 deletions

View File

@ -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),
}
}

View File

@ -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()

View File

@ -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
}

View File

@ -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)
}
/**

View 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)
}

View File

@ -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",
)
}

View File

@ -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",
)
}