mirror of
https://github.com/owenlejeune/TVTime.git
synced 2026-01-02 21:01:19 -05:00
include initial support for more languages
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.owenlejeune.tvtime.api.tmdb
|
package com.owenlejeune.tvtime.api.tmdb
|
||||||
|
|
||||||
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import com.owenlejeune.tvtime.BuildConfig
|
import com.owenlejeune.tvtime.BuildConfig
|
||||||
import com.owenlejeune.tvtime.api.Client
|
import com.owenlejeune.tvtime.api.Client
|
||||||
import com.owenlejeune.tvtime.api.QueryParam
|
import com.owenlejeune.tvtime.api.QueryParam
|
||||||
@@ -14,6 +15,8 @@ class TmdbClient: KoinComponent {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val BASE_URL = "https://api.themoviedb.org/3/"
|
const val BASE_URL = "https://api.themoviedb.org/3/"
|
||||||
|
|
||||||
|
private val SUPPORTED_LANGUAGES = listOf("en", "fr")
|
||||||
}
|
}
|
||||||
|
|
||||||
private val client: Client by inject { parametersOf(BASE_URL) }
|
private val client: Client by inject { parametersOf(BASE_URL) }
|
||||||
@@ -34,7 +37,15 @@ class TmdbClient: KoinComponent {
|
|||||||
override fun intercept(chain: Interceptor.Chain): Response {
|
override fun intercept(chain: Interceptor.Chain): Response {
|
||||||
val apiParam = QueryParam("api_key", BuildConfig.TMDB_ApiKey)
|
val apiParam = QueryParam("api_key", BuildConfig.TMDB_ApiKey)
|
||||||
|
|
||||||
val request = chain.addQueryParams(apiParam)
|
val locale = Locale.current
|
||||||
|
val languageParam = if (SUPPORTED_LANGUAGES.contains(locale.language)) {
|
||||||
|
val languageCode = "${locale.language}-${locale.region}"
|
||||||
|
QueryParam("language", languageCode)
|
||||||
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
|
|
||||||
|
val request = chain.addQueryParams(apiParam, languageParam)
|
||||||
|
|
||||||
return chain.proceed(request)
|
return chain.proceed(request)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,13 +4,15 @@ import com.owenlejeune.tvtime.api.QueryParam
|
|||||||
import okhttp3.Interceptor
|
import okhttp3.Interceptor
|
||||||
import okhttp3.Request
|
import okhttp3.Request
|
||||||
|
|
||||||
fun Interceptor.Chain.addQueryParams(vararg queryParams: QueryParam): Request {
|
fun Interceptor.Chain.addQueryParams(vararg queryParams: QueryParam?): Request {
|
||||||
val original = request()
|
val original = request()
|
||||||
val originalHttpUrl = original.url()
|
val originalHttpUrl = original.url()
|
||||||
|
|
||||||
val urlBuilder = originalHttpUrl.newBuilder()
|
val urlBuilder = originalHttpUrl.newBuilder()
|
||||||
queryParams.forEach { param ->
|
queryParams.forEach { param ->
|
||||||
urlBuilder.addQueryParameter(param.key, param.param)
|
if (param != null) {
|
||||||
|
urlBuilder.addQueryParameter(param.key, param.param)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val url = urlBuilder.build()
|
val url = urlBuilder.build()
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.graphics.Brush
|
import androidx.compose.ui.graphics.Brush
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.constraintlayout.compose.ConstraintLayout
|
import androidx.constraintlayout.compose.ConstraintLayout
|
||||||
@@ -318,14 +319,21 @@ private fun CastCard(itemId: Int?, service: DetailService) {
|
|||||||
backgroundColor = MaterialTheme.colorScheme.primary,
|
backgroundColor = MaterialTheme.colorScheme.primary,
|
||||||
elevation = 8.dp
|
elevation = 8.dp
|
||||||
) {
|
) {
|
||||||
LazyRow(modifier = Modifier
|
Column(modifier = Modifier.fillMaxSize()) {
|
||||||
.fillMaxSize()
|
Text(
|
||||||
.padding(12.dp)
|
text = stringResource(R.string.cast_label),
|
||||||
) {
|
style = MaterialTheme.typography.titleLarge,
|
||||||
items(castAndCrew.value?.cast?.size ?: 0) { i ->
|
modifier = Modifier.padding(start = 12.dp, top = 12.dp)
|
||||||
val castMember = castAndCrew.value!!.cast[i]
|
)
|
||||||
|
LazyRow(modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(12.dp)
|
||||||
|
) {
|
||||||
|
items(castAndCrew.value?.cast?.size ?: 0) { i ->
|
||||||
|
val castMember = castAndCrew.value!!.cast[i]
|
||||||
|
|
||||||
CastCrewCard(person = castMember)
|
CastCrewCard(person = castMember)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
9
app/src/main/res/values-fr/strings.xml
Normal file
9
app/src/main/res/values-fr/strings.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="app_name">TVTime</string>
|
||||||
|
<string name="nav_movies_title">Films</string>
|
||||||
|
<string name="nav_tv_title">Télé</string>
|
||||||
|
<string name="nav_favourites_title">Favoris</string>
|
||||||
|
<string name="nav_settings_title">Réglages</string>
|
||||||
|
<string name="cast_label">Acteurs</string>
|
||||||
|
</resources>
|
||||||
@@ -4,4 +4,5 @@
|
|||||||
<string name="nav_tv_title">TV</string>
|
<string name="nav_tv_title">TV</string>
|
||||||
<string name="nav_favourites_title">Favourites</string>
|
<string name="nav_favourites_title">Favourites</string>
|
||||||
<string name="nav_settings_title">Settings</string>
|
<string name="nav_settings_title">Settings</string>
|
||||||
|
<string name="cast_label">Cast</string>
|
||||||
</resources>
|
</resources>
|
||||||
Reference in New Issue
Block a user