mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-05 19:28:25 +00:00
feat(i18n): build the Wave-3 strings bridge and migrate the first key
- commons/ui/StringRes.kt: the Compose-resources twin of the app's stringRes family (composable, formatted, plural, and suspend loadStringRes variants). Thin delegates - compose-resources caches parsed locale files process-wide, so the Android-style LruCache is unnecessary here. - App StringResourceCache.kt gains stringRes(StringResource) overloads delegating to the bridge, so a file can mix migrated and unmigrated keys under its existing single import; migrating a key is just R.string.x -> Res.string.x. - tools/strings-migrate: moves keys from app res to commons composeResources across all locales byte-for-byte (both trees are Crowdin-managed with the same android mapping); refuses keys using bare %s/%d since compose-resources only formats positional args. - Exemplar: profile_banner - the single string blocking the ui/layouts cluster - migrated across 57 locales, all 7 call-site files repointed. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011S1vbFWVVAMFDT8PTgdibV
This commit is contained in:
@@ -30,6 +30,10 @@ import androidx.compose.ui.platform.LocalConfiguration
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.lifecycle.compose.LifecycleResumeEffect
|
||||
import org.jetbrains.compose.resources.PluralStringResource
|
||||
import org.jetbrains.compose.resources.StringResource
|
||||
import com.vitorpamplona.amethyst.commons.ui.pluralStringRes as commonsPluralStringRes
|
||||
import com.vitorpamplona.amethyst.commons.ui.stringRes as commonsStringRes
|
||||
|
||||
/**
|
||||
* Cache for stringResource because it seems to be > 1ms function in some phones
|
||||
@@ -73,6 +77,28 @@ fun StringResSetup() {
|
||||
@Composable
|
||||
fun stringRes(id: Int): String = resourceCache.get(id) ?: stringResource(id).also { resourceCache.put(id, it) }
|
||||
|
||||
// Overloads for keys already migrated to commons Compose resources
|
||||
// (com.vitorpamplona.amethyst.commons.resources.Res.string.*). They let a file
|
||||
// mix migrated and unmigrated keys under this one import — overload resolution
|
||||
// picks by argument type — so migrating a key is just R.string.x -> Res.string.x.
|
||||
// When a whole file moves to commons, swap this import for
|
||||
// com.vitorpamplona.amethyst.commons.ui.stringRes.
|
||||
@Composable
|
||||
fun stringRes(id: StringResource): String = commonsStringRes(id)
|
||||
|
||||
@Composable
|
||||
fun stringRes(
|
||||
id: StringResource,
|
||||
vararg args: Any,
|
||||
): String = commonsStringRes(id, *args)
|
||||
|
||||
@Composable
|
||||
fun pluralStringRes(
|
||||
id: PluralStringResource,
|
||||
count: Int,
|
||||
vararg args: Any,
|
||||
): String = if (args.isEmpty()) commonsPluralStringRes(id, count) else commonsPluralStringRes(id, count, *args)
|
||||
|
||||
@Composable
|
||||
fun stringRes(
|
||||
id: Int,
|
||||
|
||||
@@ -40,6 +40,8 @@ import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.vitorpamplona.amethyst.R
|
||||
import com.vitorpamplona.amethyst.commons.resources.Res
|
||||
import com.vitorpamplona.amethyst.commons.resources.profile_banner
|
||||
import com.vitorpamplona.amethyst.ui.layouts.listItem.SlimListItem
|
||||
import com.vitorpamplona.amethyst.ui.note.elements.TimeAgo
|
||||
import com.vitorpamplona.amethyst.ui.painterRes
|
||||
@@ -64,7 +66,7 @@ fun ChannelNamePreview() {
|
||||
channelPicture = {
|
||||
Image(
|
||||
painter = painterRes(R.drawable.github, 1),
|
||||
contentDescription = stringRes(id = R.string.profile_banner),
|
||||
contentDescription = stringRes(id = Res.string.profile_banner),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
)
|
||||
},
|
||||
@@ -98,7 +100,7 @@ fun ChannelNamePreview() {
|
||||
leadingContent = {
|
||||
Image(
|
||||
painter = painterRes(R.drawable.github, 2),
|
||||
contentDescription = stringRes(id = R.string.profile_banner),
|
||||
contentDescription = stringRes(id = Res.string.profile_banner),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
modifier = Size55Modifier,
|
||||
)
|
||||
@@ -123,7 +125,7 @@ fun ChannelNamePreview() {
|
||||
leadingContent = {
|
||||
Image(
|
||||
painter = painterRes(R.drawable.github, 2),
|
||||
contentDescription = stringRes(id = R.string.profile_banner),
|
||||
contentDescription = stringRes(id = Res.string.profile_banner),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
modifier = Size55Modifier,
|
||||
)
|
||||
|
||||
@@ -41,6 +41,8 @@ import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.vitorpamplona.amethyst.R
|
||||
import com.vitorpamplona.amethyst.commons.resources.Res
|
||||
import com.vitorpamplona.amethyst.commons.resources.profile_banner
|
||||
import com.vitorpamplona.amethyst.ui.note.LikeIcon
|
||||
import com.vitorpamplona.amethyst.ui.note.TextCount
|
||||
import com.vitorpamplona.amethyst.ui.note.ZappedIcon
|
||||
@@ -66,7 +68,7 @@ fun LeftPictureLayoutPreviewCard() {
|
||||
onImage = {
|
||||
Image(
|
||||
painter = painterRes(R.drawable.github, 3),
|
||||
contentDescription = stringRes(id = R.string.profile_banner),
|
||||
contentDescription = stringRes(id = Res.string.profile_banner),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
modifier = Modifier.fillMaxSize().clip(QuoteBorder),
|
||||
)
|
||||
|
||||
+5
-3
@@ -63,6 +63,8 @@ import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.offset
|
||||
import androidx.compose.ui.unit.sp
|
||||
import com.vitorpamplona.amethyst.R
|
||||
import com.vitorpamplona.amethyst.commons.resources.Res
|
||||
import com.vitorpamplona.amethyst.commons.resources.profile_banner
|
||||
import com.vitorpamplona.amethyst.ui.layouts.ChatHeaderLayout
|
||||
import com.vitorpamplona.amethyst.ui.layouts.listItem.ListTokens.ListItemContainerElevation
|
||||
import com.vitorpamplona.amethyst.ui.note.elements.TimeAgo
|
||||
@@ -92,7 +94,7 @@ fun ChannelNamePreview() {
|
||||
channelPicture = {
|
||||
Image(
|
||||
painter = painterRes(R.drawable.github, 1),
|
||||
contentDescription = stringRes(id = R.string.profile_banner),
|
||||
contentDescription = stringRes(id = Res.string.profile_banner),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
)
|
||||
},
|
||||
@@ -126,7 +128,7 @@ fun ChannelNamePreview() {
|
||||
leadingContent = {
|
||||
Image(
|
||||
painter = painterRes(R.drawable.github, 2),
|
||||
contentDescription = stringRes(id = R.string.profile_banner),
|
||||
contentDescription = stringRes(id = Res.string.profile_banner),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
modifier = Size55Modifier,
|
||||
)
|
||||
@@ -152,7 +154,7 @@ fun ChannelNamePreview() {
|
||||
leadingContent = {
|
||||
Image(
|
||||
painter = painterRes(R.drawable.github, 2),
|
||||
contentDescription = stringRes(id = R.string.profile_banner),
|
||||
contentDescription = stringRes(id = Res.string.profile_banner),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
modifier = Size55Modifier,
|
||||
)
|
||||
|
||||
+3
-2
@@ -75,7 +75,6 @@ import androidx.compose.ui.focus.focusRequester
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.LinkAnnotation
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
@@ -96,6 +95,8 @@ import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbol
|
||||
import com.vitorpamplona.amethyst.commons.icons.symbols.MaterialSymbols
|
||||
import com.vitorpamplona.amethyst.commons.model.ImmutableListOfLists
|
||||
import com.vitorpamplona.amethyst.commons.model.User
|
||||
import com.vitorpamplona.amethyst.commons.resources.Res
|
||||
import com.vitorpamplona.amethyst.commons.resources.profile_banner
|
||||
import com.vitorpamplona.amethyst.commons.scheduledposts.ScheduledPostStatus
|
||||
import com.vitorpamplona.amethyst.isDebug
|
||||
import com.vitorpamplona.amethyst.model.Account
|
||||
@@ -278,7 +279,7 @@ fun ProfileContentTemplate(
|
||||
} else {
|
||||
AsyncImage(
|
||||
model = R.drawable.profile_banner,
|
||||
contentDescription = stringResource(R.string.profile_banner),
|
||||
contentDescription = stringRes(Res.string.profile_banner),
|
||||
contentScale = ContentScale.Crop,
|
||||
modifier = bannerModifier,
|
||||
)
|
||||
|
||||
+3
-1
@@ -31,6 +31,8 @@ import androidx.compose.ui.layout.ContentScale
|
||||
import com.vitorpamplona.amethyst.R
|
||||
import com.vitorpamplona.amethyst.commons.model.Note
|
||||
import com.vitorpamplona.amethyst.commons.model.User
|
||||
import com.vitorpamplona.amethyst.commons.resources.Res
|
||||
import com.vitorpamplona.amethyst.commons.resources.profile_banner
|
||||
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUserBanner
|
||||
import com.vitorpamplona.amethyst.ui.components.MyAsyncImage
|
||||
import com.vitorpamplona.amethyst.ui.note.BaseUserPicture
|
||||
@@ -143,7 +145,7 @@ fun DefaultProfileBanner(
|
||||
) {
|
||||
Image(
|
||||
painter = painterRes(R.drawable.profile_banner, sizeReference),
|
||||
contentDescription = stringRes(R.string.profile_banner),
|
||||
contentDescription = stringRes(Res.string.profile_banner),
|
||||
contentScale = ContentScale.Crop,
|
||||
modifier = modifier,
|
||||
)
|
||||
|
||||
@@ -81,6 +81,8 @@ import com.vitorpamplona.amethyst.R
|
||||
import com.vitorpamplona.amethyst.commons.model.EmptyTagList
|
||||
import com.vitorpamplona.amethyst.commons.model.Note
|
||||
import com.vitorpamplona.amethyst.commons.model.toImmutableListOfLists
|
||||
import com.vitorpamplona.amethyst.commons.resources.Res
|
||||
import com.vitorpamplona.amethyst.commons.resources.profile_banner
|
||||
import com.vitorpamplona.amethyst.commons.richtext.RichTextParser
|
||||
import com.vitorpamplona.amethyst.commons.ui.components.ClickableTextPrimary
|
||||
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.event.observeNote
|
||||
@@ -175,7 +177,7 @@ fun RenderAppDefinition(
|
||||
} else {
|
||||
Image(
|
||||
painter = painterRes(R.drawable.profile_banner, 6),
|
||||
contentDescription = stringRes(id = R.string.profile_banner),
|
||||
contentDescription = stringRes(id = Res.string.profile_banner),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
modifier =
|
||||
Modifier
|
||||
|
||||
+3
-1
@@ -41,6 +41,8 @@ import androidx.compose.ui.unit.dp
|
||||
import coil3.compose.AsyncImage
|
||||
import com.vitorpamplona.amethyst.R
|
||||
import com.vitorpamplona.amethyst.commons.model.User
|
||||
import com.vitorpamplona.amethyst.commons.resources.Res
|
||||
import com.vitorpamplona.amethyst.commons.resources.profile_banner
|
||||
import com.vitorpamplona.amethyst.commons.richtext.RichTextParser
|
||||
import com.vitorpamplona.amethyst.service.relayClient.reqCommand.user.observeUserBanner
|
||||
import com.vitorpamplona.amethyst.ui.components.ZoomableImageDialog
|
||||
@@ -105,7 +107,7 @@ fun DrawBanner(
|
||||
} else {
|
||||
Image(
|
||||
painter = painterRes(R.drawable.profile_banner, 2),
|
||||
contentDescription = stringRes(id = R.string.profile_banner),
|
||||
contentDescription = stringRes(id = Res.string.profile_banner),
|
||||
contentScale = ContentScale.FillWidth,
|
||||
modifier =
|
||||
Modifier
|
||||
|
||||
@@ -99,7 +99,6 @@
|
||||
<string name="add">إضافة</string>
|
||||
<string name="replying_to">"الرد على"</string>
|
||||
<string name="and">" و "</string>
|
||||
<string name="profile_banner">لافتة الملف الشخصي</string>
|
||||
<string name="error_parsing_error_message">خطأ أثناء تحليل رسالة الخطأ</string>
|
||||
<string name="following">"المتابعون"</string>
|
||||
<string name="followers">"متابِعاً"</string>
|
||||
|
||||
@@ -88,7 +88,6 @@
|
||||
<string name="add">যুক্ত করুন</string>
|
||||
<string name="replying_to">"এই ব্যক্তির প্রতিউত্তর দিচ্ছেন "</string>
|
||||
<string name="and">" এবং "</string>
|
||||
<string name="profile_banner">প্রোফাইলের ব্যানার</string>
|
||||
<string name="error_parsing_error_message">ত্রুটি বার্তা পার্স করতে ব্যর্থ</string>
|
||||
<string name="following">" অনুসরণ"</string>
|
||||
<string name="followers">" অনুসারী"</string>
|
||||
|
||||
@@ -105,7 +105,6 @@
|
||||
<string name="add">Přidat</string>
|
||||
<string name="replying_to">"odpovídá na "</string>
|
||||
<string name="and">" a "</string>
|
||||
<string name="profile_banner">Banner profilu</string>
|
||||
<string name="error_parsing_error_message">Chyba při zpracování chybové zprávy</string>
|
||||
<string name="following">" Sleduje"</string>
|
||||
<string name="followers">" Sledující"</string>
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
<string name="add">Hinzufügen</string>
|
||||
<string name="replying_to">"Antworten auf "</string>
|
||||
<string name="and">" und "</string>
|
||||
<string name="profile_banner">Profilbanner</string>
|
||||
<string name="error_parsing_error_message">Fehler beim Parsen der Fehlermeldung</string>
|
||||
<string name="following">" Gefolgt"</string>
|
||||
<string name="followers">" Follower"</string>
|
||||
|
||||
@@ -59,7 +59,6 @@
|
||||
<string name="add">Hinzufügen</string>
|
||||
<string name="replying_to">"Antworten auf "</string>
|
||||
<string name="and">" und "</string>
|
||||
<string name="profile_banner">Profilbanner</string>
|
||||
<string name="error_parsing_error_message">Fehler beim Parsen der Fehlermeldung</string>
|
||||
<string name="following">" Folgen"</string>
|
||||
<string name="followers">" Anhänger"</string>
|
||||
|
||||
@@ -85,7 +85,6 @@
|
||||
<string name="add">Προσθήκη</string>
|
||||
<string name="replying_to">"απάντηση σε "</string>
|
||||
<string name="and">" και "</string>
|
||||
<string name="profile_banner">Ταπετσαρία Προφίλ</string>
|
||||
<string name="error_parsing_error_message">Σφάλμα ανάλυσης σφάλμα μηνύματος</string>
|
||||
<string name="following">" Ακολουθείτε"</string>
|
||||
<string name="followers">" Ακόλουθοι"</string>
|
||||
|
||||
@@ -86,7 +86,6 @@
|
||||
<string name="add">Aldoni</string>
|
||||
<string name="replying_to">"respondante al "</string>
|
||||
<string name="and">" kaj "</string>
|
||||
<string name="profile_banner">Profila Murpapero</string>
|
||||
<string name="error_parsing_error_message">Eraro analizante de erara mesaĝo</string>
|
||||
<string name="following">" Sekvanti"</string>
|
||||
<string name="followers">" Sekvantoj"</string>
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
<string name="add">Aldoni</string>
|
||||
<string name="replying_to">"respondante al "</string>
|
||||
<string name="and">" kaj "</string>
|
||||
<string name="profile_banner">Profila Murpapero</string>
|
||||
<string name="error_parsing_error_message">Eraro analizante de erara mesaĝo</string>
|
||||
<string name="following">" Sekvanti"</string>
|
||||
<string name="followers">" Sekvantoj"</string>
|
||||
|
||||
@@ -88,7 +88,6 @@
|
||||
<string name="add">Añadir</string>
|
||||
<string name="replying_to">"respondiendo a "</string>
|
||||
<string name="and">" y "</string>
|
||||
<string name="profile_banner">Banner de perfil</string>
|
||||
<string name="error_parsing_error_message">Error al analizar el mensaje de error</string>
|
||||
<string name="following">" Siguiendo"</string>
|
||||
<string name="followers">" Seguidores"</string>
|
||||
|
||||
@@ -88,7 +88,6 @@
|
||||
<string name="add">Agregar</string>
|
||||
<string name="replying_to">"respondiendo a "</string>
|
||||
<string name="and">" y "</string>
|
||||
<string name="profile_banner">Banner del perfil</string>
|
||||
<string name="error_parsing_error_message">Error al analizar el mensaje de error</string>
|
||||
<string name="following">" Siguiendo"</string>
|
||||
<string name="followers">" Seguidores"</string>
|
||||
|
||||
@@ -88,7 +88,6 @@
|
||||
<string name="add">Agregar</string>
|
||||
<string name="replying_to">"respondiendo a "</string>
|
||||
<string name="and">" y "</string>
|
||||
<string name="profile_banner">Banner del perfil</string>
|
||||
<string name="error_parsing_error_message">Error al analizar el mensaje de error</string>
|
||||
<string name="following">" Siguiendo"</string>
|
||||
<string name="followers">" Seguidores"</string>
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
<string name="add">Añadir</string>
|
||||
<string name="replying_to">"respondiendo a "</string>
|
||||
<string name="and">" y "</string>
|
||||
<string name="profile_banner">Banner de perfil</string>
|
||||
<string name="following">" Siguiendo"</string>
|
||||
<string name="followers">" Seguidores"</string>
|
||||
<string name="profile">Perfil</string>
|
||||
|
||||
@@ -88,7 +88,6 @@
|
||||
<string name="add">افزودن</string>
|
||||
<string name="replying_to">" پاسخ به"</string>
|
||||
<string name="and">" و "</string>
|
||||
<string name="profile_banner">بنر پروفایل</string>
|
||||
<string name="error_parsing_error_message">خطا در تفسیر پیغام خطا</string>
|
||||
<string name="following">"دنبال شونده"</string>
|
||||
<string name="followers">"دنبال کننده"</string>
|
||||
|
||||
@@ -58,7 +58,6 @@
|
||||
<string name="add">افزودن</string>
|
||||
<string name="replying_to">" پاسخ به"</string>
|
||||
<string name="and">" و "</string>
|
||||
<string name="profile_banner">بنر پروفایل</string>
|
||||
<string name="error_parsing_error_message">خطا در تفسیر پیغام خطا</string>
|
||||
<string name="following">"دنبال شونده"</string>
|
||||
<string name="followers">"دنبال کننده"</string>
|
||||
|
||||
@@ -87,7 +87,6 @@
|
||||
<string name="add">Lisää</string>
|
||||
<string name="replying_to">"vastaus kohteeseen "</string>
|
||||
<string name="and">" ja "</string>
|
||||
<string name="profile_banner">Profiilin banneri</string>
|
||||
<string name="error_parsing_error_message">Virhe virhesanomaa tulkittaessa</string>
|
||||
<string name="following">" Seuratut"</string>
|
||||
<string name="followers">" Seuraajat"</string>
|
||||
|
||||
@@ -81,7 +81,6 @@
|
||||
<string name="add">Ajouter</string>
|
||||
<string name="replying_to">"répondre à "</string>
|
||||
<string name="and">" et "</string>
|
||||
<string name="profile_banner">Bannière du profil</string>
|
||||
<string name="error_parsing_error_message">Erreur d\'analyse du message d\'erreur</string>
|
||||
<string name="following">" Abonnements"</string>
|
||||
<string name="followers">" Abonnés"</string>
|
||||
|
||||
@@ -88,7 +88,6 @@
|
||||
<string name="add">Ajouter</string>
|
||||
<string name="replying_to">"répondre à "</string>
|
||||
<string name="and">" et "</string>
|
||||
<string name="profile_banner">Bannière du profil</string>
|
||||
<string name="error_parsing_error_message">Erreur d\'analyse du message d\'erreur</string>
|
||||
<string name="following">" Abonnements"</string>
|
||||
<string name="followers">" Abonnés"</string>
|
||||
|
||||
@@ -59,7 +59,6 @@
|
||||
<string name="add">Ajouter</string>
|
||||
<string name="replying_to">"répondre à "</string>
|
||||
<string name="and">" et "</string>
|
||||
<string name="profile_banner">Bannière du profil</string>
|
||||
<string name="error_parsing_error_message">Erreur d\'analyse du message d\'erreur</string>
|
||||
<string name="following">" Abonnements"</string>
|
||||
<string name="followers">" Abonnés"</string>
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
<string name="add">जोडें</string>
|
||||
<string name="replying_to">"उत्तर इनको "</string>
|
||||
<string name="and">" तथा "</string>
|
||||
<string name="profile_banner">परिचय ध्वजचित्र</string>
|
||||
<string name="error_parsing_error_message">अपक्रम संदेश परखने में अपक्रम</string>
|
||||
<string name="following">" का अनुचरण"</string>
|
||||
<string name="followers">" अनुचर"</string>
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
<string name="add">Hozzáadás</string>
|
||||
<string name="replying_to">"válasz erre: "</string>
|
||||
<string name="and">" és "</string>
|
||||
<string name="profile_banner">Profilplakát</string>
|
||||
<string name="error_parsing_error_message">Hiba a hibaüzenet elemzésekor</string>
|
||||
<string name="following">" Követett"</string>
|
||||
<string name="followers">" Követő"</string>
|
||||
|
||||
@@ -80,7 +80,6 @@
|
||||
<string name="add">Tambah</string>
|
||||
<string name="replying_to">"balas ke "</string>
|
||||
<string name="and">" dan "</string>
|
||||
<string name="profile_banner">Banner Profil</string>
|
||||
<string name="error_parsing_error_message">Salah memilah pesan error</string>
|
||||
<string name="following">" Mengikuti"</string>
|
||||
<string name="followers">" Pengikut"</string>
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
<string name="add">Tambah</string>
|
||||
<string name="replying_to">"membalas kepada "</string>
|
||||
<string name="and">" dan "</string>
|
||||
<string name="profile_banner">Spanduk Profil</string>
|
||||
<string name="error_parsing_error_message">Gagal menguraikan pesan kesalahan</string>
|
||||
<string name="following">" Mengikuti"</string>
|
||||
<string name="followers">" Pengikut"</string>
|
||||
|
||||
@@ -84,7 +84,6 @@
|
||||
<string name="add">Aggiungi</string>
|
||||
<string name="replying_to">"rispondendo a"</string>
|
||||
<string name="and">" e "</string>
|
||||
<string name="profile_banner">Immagine di copertina</string>
|
||||
<string name="error_parsing_error_message">Errore analisi messaggio d\'errore</string>
|
||||
<string name="following">" Seguiti"</string>
|
||||
<string name="followers">" Seguaci"</string>
|
||||
|
||||
@@ -84,7 +84,6 @@
|
||||
<string name="add">追加</string>
|
||||
<string name="replying_to">"リプライ先: "</string>
|
||||
<string name="and">" と "</string>
|
||||
<string name="profile_banner">プロフィールバナー</string>
|
||||
<string name="error_parsing_error_message">エラーメッセージの解析に失敗しました</string>
|
||||
<string name="following">" フォロー"</string>
|
||||
<string name="followers">" フォロワー"</string>
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
<string name="add">追加</string>
|
||||
<string name="replying_to">"リプライ先: "</string>
|
||||
<string name="and">" と "</string>
|
||||
<string name="profile_banner">プロフィールバナー</string>
|
||||
<string name="following">" フォロー"</string>
|
||||
<string name="followers">" フォロワー"</string>
|
||||
<string name="profile">プロフィール</string>
|
||||
|
||||
@@ -83,7 +83,6 @@
|
||||
<string name="add">추가</string>
|
||||
<string name="replying_to">"답글 대상: "</string>
|
||||
<string name="and">" 및 "</string>
|
||||
<string name="profile_banner">프로필 배너</string>
|
||||
<string name="error_parsing_error_message">오류 메시지 파싱 실패</string>
|
||||
<string name="following">" 팔로잉"</string>
|
||||
<string name="followers">" 팔로워"</string>
|
||||
|
||||
@@ -90,7 +90,6 @@
|
||||
<string name="add">Pievienot</string>
|
||||
<string name="replying_to">"atbild uz "</string>
|
||||
<string name="and">" un "</string>
|
||||
<string name="profile_banner">Profila reklāmkarogs</string>
|
||||
<string name="error_parsing_error_message">Kļūda, parsējot kļūdas ziņojumu</string>
|
||||
<string name="following">" Seko"</string>
|
||||
<string name="followers">" Sekotāji"</string>
|
||||
|
||||
@@ -157,7 +157,6 @@
|
||||
|
||||
<string name="and">" en "</string>
|
||||
|
||||
<string name="profile_banner">Profielbanner</string>
|
||||
|
||||
<string name="error_parsing_error_message">Fout bij verwerken foutmelding</string>
|
||||
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
<string name="add">Toevoegen</string>
|
||||
<string name="replying_to">"antwoordt op"</string>
|
||||
<string name="and">" en "</string>
|
||||
<string name="profile_banner">Profielbanner</string>
|
||||
<string name="error_parsing_error_message">Fout bij verwerken foutmelding</string>
|
||||
<string name="following">"Volgend"</string>
|
||||
<string name="followers">"Volgers"</string>
|
||||
|
||||
@@ -59,7 +59,6 @@
|
||||
<string name="add">Toevoegen</string>
|
||||
<string name="replying_to">"reageert op "</string>
|
||||
<string name="and">" en "</string>
|
||||
<string name="profile_banner">Profielbanner</string>
|
||||
<string name="error_parsing_error_message">Fout bij het parsen van foutberichten</string>
|
||||
<string name="following">" Volgend"</string>
|
||||
<string name="followers">" Volgers"</string>
|
||||
|
||||
@@ -105,7 +105,6 @@
|
||||
<string name="add">Dodaj</string>
|
||||
<string name="replying_to">"odpowiadając do "</string>
|
||||
<string name="and">" i "</string>
|
||||
<string name="profile_banner">Baner profilu</string>
|
||||
<string name="error_parsing_error_message">Błąd podczas analizowania komunikatu o błędzie</string>
|
||||
<string name="following">" Obserwowane"</string>
|
||||
<string name="followers">" Obserwujące"</string>
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
<string name="add">Adicionar</string>
|
||||
<string name="replying_to">"respondendo para "</string>
|
||||
<string name="and">" e "</string>
|
||||
<string name="profile_banner">Banner do perfil</string>
|
||||
<string name="error_parsing_error_message">Erro ao analisar mensagem de erro</string>
|
||||
<string name="following">" Seguindo"</string>
|
||||
<string name="followers">" Seguidores"</string>
|
||||
|
||||
@@ -83,7 +83,6 @@
|
||||
<string name="add">Adicionar</string>
|
||||
<string name="replying_to">"respondendo para "</string>
|
||||
<string name="and">" e "</string>
|
||||
<string name="profile_banner">Banner do perfil</string>
|
||||
<string name="error_parsing_error_message">Erro ao analisar mensagem de erro</string>
|
||||
<string name="following">" Seguindo"</string>
|
||||
<string name="followers">" Seguidores"</string>
|
||||
|
||||
@@ -93,7 +93,6 @@
|
||||
<string name="add">Добавить</string>
|
||||
<string name="replying_to">"ответ на "</string>
|
||||
<string name="and">" и "</string>
|
||||
<string name="profile_banner">Баннер профиля</string>
|
||||
<string name="error_parsing_error_message">Ошибка при анализе сообщения об ошибке</string>
|
||||
<string name="following">" Подписок"</string>
|
||||
<string name="followers">" Подписчиков"</string>
|
||||
|
||||
@@ -91,7 +91,6 @@
|
||||
<string name="add">Добавить</string>
|
||||
<string name="replying_to">"ответ на "</string>
|
||||
<string name="and">" и "</string>
|
||||
<string name="profile_banner">Баннер профиля</string>
|
||||
<string name="error_parsing_error_message">Ошибка разбора сообщения об ошибке</string>
|
||||
<string name="following">" Подписки"</string>
|
||||
<string name="followers">" Подписчики"</string>
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
<string name="add">Добавить</string>
|
||||
<string name="replying_to">"ответ на "</string>
|
||||
<string name="and">" и "</string>
|
||||
<string name="profile_banner">Баннер профиля</string>
|
||||
<string name="error_parsing_error_message">Ошибка при анализе сообщения об ошибке</string>
|
||||
<string name="following">" Подписок"</string>
|
||||
<string name="followers">" Подписчиков"</string>
|
||||
|
||||
@@ -115,7 +115,6 @@ Za podpisovanje se je potrebno prijaviti s privatnim ključem</string>
|
||||
<string name="add">Dodaj</string>
|
||||
<string name="replying_to">"odgovoriti "</string>
|
||||
<string name="and">" in "</string>
|
||||
<string name="profile_banner">Pasica profila</string>
|
||||
<string name="error_parsing_error_message">Napaka pri razčlembi sporočila o napaki</string>
|
||||
<string name="following">" Sledi"</string>
|
||||
<string name="followers">" Sledilcev"</string>
|
||||
|
||||
@@ -85,7 +85,6 @@
|
||||
<string name="add">Dodaj</string>
|
||||
<string name="replying_to">"odgovara na "</string>
|
||||
<string name="and">" i "</string>
|
||||
<string name="profile_banner">Baner profila</string>
|
||||
<string name="error_parsing_error_message">Greška pri parsiranju poruke o grešci</string>
|
||||
<string name="following">" Praćeni"</string>
|
||||
<string name="followers">" Pratioci"</string>
|
||||
|
||||
@@ -97,7 +97,6 @@
|
||||
<string name="add">Lägg till</string>
|
||||
<string name="replying_to">"Svarar till "</string>
|
||||
<string name="and">" och "</string>
|
||||
<string name="profile_banner">Profil Banner</string>
|
||||
<string name="error_parsing_error_message">Fel vid tolkning av felmeddelande</string>
|
||||
<string name="following">" Följer"</string>
|
||||
<string name="followers">" Följare"</string>
|
||||
|
||||
@@ -86,7 +86,6 @@
|
||||
<string name="add">Ongeza</string>
|
||||
<string name="replying_to">"kujibu "</string>
|
||||
<string name="and">" na "</string>
|
||||
<string name="profile_banner">Bango la Wasifu</string>
|
||||
<string name="error_parsing_error_message">Hitilafu katika kuchanganua ujumbe wa hitilafu</string>
|
||||
<string name="following">" Kufuatia"</string>
|
||||
<string name="followers">" Wafuasi"</string>
|
||||
|
||||
@@ -86,7 +86,6 @@
|
||||
<string name="add">சேர்</string>
|
||||
<string name="replying_to">"பதில் பெறுநர் "</string>
|
||||
<string name="and">"மற்றும்"</string>
|
||||
<string name="profile_banner">தன்விவர பேனர்</string>
|
||||
<string name="error_parsing_error_message">பிழை செய்தியை பாகுபடுத்துவதில் பிழை</string>
|
||||
<string name="following">" பின்பற்றப்படுவோர்"</string>
|
||||
<string name="followers">" பின்பற்றுவோர்"</string>
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
<string name="add">சேர்</string>
|
||||
<string name="replying_to">"பதில் பெறுநர் "</string>
|
||||
<string name="and">"மற்றும்"</string>
|
||||
<string name="profile_banner">தன்விவர பேனர்</string>
|
||||
<string name="following">" பின்பற்றப்படுவோர்"</string>
|
||||
<string name="followers">" பின்பற்றுவோர்"</string>
|
||||
<string name="profile">தன்விவரம்</string>
|
||||
|
||||
@@ -85,7 +85,6 @@
|
||||
<string name="add">เพิ่ม</string>
|
||||
<string name="replying_to">"ตอบกลับถึง "</string>
|
||||
<string name="and">" และ "</string>
|
||||
<string name="profile_banner">หน้าปกโปรไฟล์</string>
|
||||
<string name="error_parsing_error_message">เกิดข้อผิดพลาดในการวิเคราะห์ข้อความแสดงข้อผิดพลาด</string>
|
||||
<string name="following">" กำลังติดตาม"</string>
|
||||
<string name="followers">" ผู้ติดตาม"</string>
|
||||
|
||||
@@ -58,7 +58,6 @@
|
||||
<string name="add">เพิ่ม</string>
|
||||
<string name="replying_to">"ตอบกลับถึง "</string>
|
||||
<string name="and">" และ "</string>
|
||||
<string name="profile_banner">หน้าปกโปรไฟล์</string>
|
||||
<string name="error_parsing_error_message">เกิดข้อผิดพลาดในการวิเคราะห์ข้อความแสดงข้อผิดพลาด</string>
|
||||
<string name="following">" กำลังติดตาม"</string>
|
||||
<string name="followers">" ผู้ติดตาม"</string>
|
||||
|
||||
@@ -86,7 +86,6 @@
|
||||
<string name="add">Ekle</string>
|
||||
<string name="replying_to">"yanıtlanıyor"</string>
|
||||
<string name="and">"ve"</string>
|
||||
<string name="profile_banner">Profil Bayrağı</string>
|
||||
<string name="error_parsing_error_message">Hata mesajı ayrıştırılırken hata oluştu</string>
|
||||
<string name="following">"Takip edilenler"</string>
|
||||
<string name="followers">"Takipçiler"</string>
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
<string name="add">Ekle</string>
|
||||
<string name="replying_to">"yanıtlanıyor"</string>
|
||||
<string name="and">"ve"</string>
|
||||
<string name="profile_banner">Profil Bayrağı</string>
|
||||
<string name="following">"Takip edilenler"</string>
|
||||
<string name="followers">"Takipçiler"</string>
|
||||
<string name="profile">Profil</string>
|
||||
|
||||
@@ -92,7 +92,6 @@
|
||||
<string name="add">Додати</string>
|
||||
<string name="replying_to">"у відповідь "</string>
|
||||
<string name="and">" та "</string>
|
||||
<string name="profile_banner">Банер профілю</string>
|
||||
<string name="error_parsing_error_message">Помилка при обробці повідомлення про помилку</string>
|
||||
<string name="following">" Підписок"</string>
|
||||
<string name="followers">" Підписників"</string>
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
<string name="add">Додати</string>
|
||||
<string name="replying_to">"у відповідь "</string>
|
||||
<string name="and">" та "</string>
|
||||
<string name="profile_banner">Банер профілю</string>
|
||||
<string name="error_parsing_error_message">Помилка при обробці повідомлення про помилку</string>
|
||||
<string name="following">" Підписок"</string>
|
||||
<string name="followers">" Підписників"</string>
|
||||
|
||||
@@ -88,7 +88,6 @@
|
||||
<string name="add">Qo\'shish</string>
|
||||
<string name="replying_to">"Kimga javob yozilmoqda: "</string>
|
||||
<string name="and">" va "</string>
|
||||
<string name="profile_banner">Profil banneri</string>
|
||||
<string name="error_parsing_error_message">Xato xabarini tahlil qilishda xato</string>
|
||||
<string name="following">" Kuzatilmoqda"</string>
|
||||
<string name="followers">" Kuzatuvchilar"</string>
|
||||
|
||||
@@ -80,7 +80,6 @@
|
||||
<string name="add">Thêm</string>
|
||||
<string name="replying_to">"đang trả lời "</string>
|
||||
<string name="and">" và "</string>
|
||||
<string name="profile_banner">Ảnh bìa hồ sơ</string>
|
||||
<string name="error_parsing_error_message">Lỗi phân tích thông báo lỗi</string>
|
||||
<string name="following">" Đang theo dõi"</string>
|
||||
<string name="followers">" Người theo dõi"</string>
|
||||
|
||||
@@ -86,7 +86,6 @@
|
||||
<string name="add">添加</string>
|
||||
<string name="replying_to">"回复 "</string>
|
||||
<string name="and">" 和 "</string>
|
||||
<string name="profile_banner">个人档案横幅</string>
|
||||
<string name="error_parsing_error_message">解析错误信息时出错</string>
|
||||
<string name="following">" 关注"</string>
|
||||
<string name="followers">" 粉丝"</string>
|
||||
|
||||
@@ -84,7 +84,6 @@
|
||||
<string name="add">添加</string>
|
||||
<string name="replying_to">"回覆 "</string>
|
||||
<string name="and">" 和 "</string>
|
||||
<string name="profile_banner">個人檔案橫幅</string>
|
||||
<string name="error_parsing_error_message">解析错误信息时出错</string>
|
||||
<string name="following">" 關注"</string>
|
||||
<string name="followers">" 粉絲"</string>
|
||||
|
||||
@@ -84,7 +84,6 @@
|
||||
<string name="add">添加</string>
|
||||
<string name="replying_to">"回复 "</string>
|
||||
<string name="and">" 和 "</string>
|
||||
<string name="profile_banner">个人档案横幅</string>
|
||||
<string name="error_parsing_error_message">解析错误信息时出错</string>
|
||||
<string name="following">" 关注"</string>
|
||||
<string name="followers">" 粉丝"</string>
|
||||
|
||||
@@ -85,7 +85,6 @@
|
||||
<string name="add">添加</string>
|
||||
<string name="replying_to">"回覆 "</string>
|
||||
<string name="and">" 和 "</string>
|
||||
<string name="profile_banner">個人檔案橫幅</string>
|
||||
<string name="error_parsing_error_message">錯誤解析錯誤消息</string>
|
||||
<string name="following">" 關注"</string>
|
||||
<string name="followers">" 粉絲"</string>
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
<string name="add">添加</string>
|
||||
<string name="replying_to">"回复 "</string>
|
||||
<string name="and">" 和 "</string>
|
||||
<string name="profile_banner">个人档案横幅</string>
|
||||
<string name="following">" 关注"</string>
|
||||
<string name="followers">" 粉丝"</string>
|
||||
<string name="profile">个人档案</string>
|
||||
|
||||
@@ -103,7 +103,6 @@
|
||||
<string name="add">Add</string>
|
||||
<string name="replying_to">"replying to "</string>
|
||||
<string name="and">" and "</string>
|
||||
<string name="profile_banner">Profile Banner</string>
|
||||
<string name="error_parsing_error_message">Error parsing error message</string>
|
||||
<string name="following">" Following"</string>
|
||||
<string name="followers">" Followers"</string>
|
||||
|
||||
@@ -569,8 +569,29 @@ Original findings, for reference:
|
||||
design decision**: `CachePruner`/`CacheSearch` call
|
||||
`Account.isFollowing(...)`; either `IAccount` grows it (DesktopIAccount
|
||||
must implement) or they take a narrower interface (recommended).
|
||||
- **Wave 3: strings bridge** — a `stringRes` twin backed by Compose
|
||||
resources in commons; gates ~210 otherwise-pure UI files.
|
||||
- **Wave 3: strings bridge** — **BUILT (2026-09-01)**. The pieces:
|
||||
- `commons/ui/StringRes.kt` (commonMain): `stringRes(StringResource)`,
|
||||
formatted + plural variants, `loadStringRes`/`loadPluralStringRes` for
|
||||
non-composable scopes. Thin delegates over compose-resources — no extra
|
||||
cache (the library caches parsed locale files process-wide).
|
||||
- App-side `ui/StringResourceCache.kt` gained `stringRes(StringResource)`
|
||||
overloads delegating to the bridge, so ONE `stringRes` import serves
|
||||
mixed files: migrating a key is just `R.string.x` → `Res.string.x`
|
||||
(+ the two `commons.resources` imports). No aliasing, no churn.
|
||||
- `tools/strings-migrate/migrate.py <keys…>`: moves keys from app res to
|
||||
commons composeResources across all 57 locales byte-for-byte (Crowdin
|
||||
covers both trees with the same mapping — see crowdin.yml). It refuses
|
||||
keys with bare `%s`/`%d` (compose-resources needs positional `%1$s`).
|
||||
- Exemplar shipped: `profile_banner` (the ui/layouts cluster's only
|
||||
string blocker) migrated + all 7 call-site files repointed.
|
||||
- **Remaining Wave-3 work:** migrate keys feature-by-feature with this
|
||||
tool (keys whose non-composable `ctx`-based call sites exist must have
|
||||
those call sites adapted to `loadStringRes` first), then move the
|
||||
now-unblocked composables. Note the layouts cluster ALSO needs theme
|
||||
constants (`DividerThickness`, `Size55Modifier`, …) hoisted from app
|
||||
`ui/theme/Shape.kt` into `commons/ui/theme/Sizes.kt`, plus
|
||||
`painterRes`/`TimeAgo`/`NewItemsBubble` decisions — the audit's
|
||||
"strings-only" tally under-counted transitive deps.
|
||||
- **Wave 4: Account/AccountViewModel decomposition** — long-tail.
|
||||
|
||||
### Environment notes for the next session (hard-won)
|
||||
|
||||
@@ -72,4 +72,5 @@
|
||||
<item quantity="many">%1$d حدثًا</item>
|
||||
<item quantity="other">%1$d حدث</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">لافتة الملف الشخصي</string>
|
||||
</resources>
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
<item quantity="one">%1$d টি ইভেন্ট</item>
|
||||
<item quantity="other">%1$d টি ইভেন্ট</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">প্রোফাইলের ব্যানার</string>
|
||||
</resources>
|
||||
|
||||
@@ -195,4 +195,5 @@
|
||||
<item quantity="many">%1$d událostí</item>
|
||||
<item quantity="other">%1$d událostí</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Banner profilu</string>
|
||||
</resources>
|
||||
|
||||
@@ -185,4 +185,5 @@
|
||||
<item quantity="one">%1$d Termin</item>
|
||||
<item quantity="other">%1$d Termine</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Profilbanner</string>
|
||||
</resources>
|
||||
|
||||
@@ -47,4 +47,5 @@
|
||||
<item quantity="one">%1$d Termin</item>
|
||||
<item quantity="other">%1$d Termine</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Profilbanner</string>
|
||||
</resources>
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
<item quantity="one">%1$d συμβάν</item>
|
||||
<item quantity="other">%1$d συμβάντα</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Ταπετσαρία Προφίλ</string>
|
||||
</resources>
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
<item quantity="one">%1$d evento</item>
|
||||
<item quantity="other">%1$d eventoj</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Profila Murpapero</string>
|
||||
</resources>
|
||||
|
||||
@@ -47,4 +47,5 @@
|
||||
<item quantity="one">%1$d evento</item>
|
||||
<item quantity="other">%1$d eventoj</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Profila Murpapero</string>
|
||||
</resources>
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
<item quantity="one">%1$d evento</item>
|
||||
<item quantity="other">%1$d eventos</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Banner de perfil</string>
|
||||
</resources>
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
<item quantity="one">%1$d evento</item>
|
||||
<item quantity="other">%1$d eventos</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Banner del perfil</string>
|
||||
</resources>
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
<item quantity="one">%1$d evento</item>
|
||||
<item quantity="other">%1$d eventos</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Banner del perfil</string>
|
||||
</resources>
|
||||
|
||||
@@ -47,4 +47,5 @@
|
||||
<item quantity="one">%1$d evento</item>
|
||||
<item quantity="other">%1$d eventos</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Banner de perfil</string>
|
||||
</resources>
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
<item quantity="one">%1$d رویداد</item>
|
||||
<item quantity="other">%1$d رویداد</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">بنر پروفایل</string>
|
||||
</resources>
|
||||
|
||||
@@ -47,4 +47,5 @@
|
||||
<item quantity="one">%1$d رویداد</item>
|
||||
<item quantity="other">%1$d رویداد</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">بنر پروفایل</string>
|
||||
</resources>
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
<item quantity="one">%1$d tapahtuma</item>
|
||||
<item quantity="other">%1$d tapahtumaa</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Profiilin banneri</string>
|
||||
</resources>
|
||||
|
||||
@@ -56,4 +56,5 @@
|
||||
<item quantity="one">%1$d événement</item>
|
||||
<item quantity="other">%1$d événements</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Bannière du profil</string>
|
||||
</resources>
|
||||
|
||||
@@ -58,4 +58,5 @@
|
||||
<item quantity="one">%1$d événement</item>
|
||||
<item quantity="other">%1$d événements</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Bannière du profil</string>
|
||||
</resources>
|
||||
|
||||
@@ -47,4 +47,5 @@
|
||||
<item quantity="one">%1$d événement</item>
|
||||
<item quantity="other">%1$d événements</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Bannière du profil</string>
|
||||
</resources>
|
||||
|
||||
@@ -185,4 +185,5 @@
|
||||
<item quantity="one">%1$d घटना</item>
|
||||
<item quantity="other">%1$d घटनाएँ</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">परिचय ध्वजचित्र</string>
|
||||
</resources>
|
||||
|
||||
@@ -185,4 +185,5 @@
|
||||
<item quantity="one">%1$d esemény</item>
|
||||
<item quantity="other">%1$d esemény</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Profilplakát</string>
|
||||
</resources>
|
||||
|
||||
@@ -55,4 +55,5 @@
|
||||
<plurals name="calendar_collection_count">
|
||||
<item quantity="other">%1$d acara</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Banner Profil</string>
|
||||
</resources>
|
||||
|
||||
@@ -44,4 +44,5 @@
|
||||
<plurals name="calendar_collection_count">
|
||||
<item quantity="other">%1$d acara</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Spanduk Profil</string>
|
||||
</resources>
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
<item quantity="one">%1$d evento</item>
|
||||
<item quantity="other">%1$d eventi</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Immagine di copertina</string>
|
||||
</resources>
|
||||
|
||||
@@ -56,4 +56,5 @@
|
||||
<plurals name="calendar_collection_count">
|
||||
<item quantity="other">%1$dイベント</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">プロフィールバナー</string>
|
||||
</resources>
|
||||
|
||||
@@ -44,4 +44,5 @@
|
||||
<plurals name="calendar_collection_count">
|
||||
<item quantity="other">%1$dイベント</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">プロフィールバナー</string>
|
||||
</resources>
|
||||
|
||||
@@ -56,4 +56,5 @@
|
||||
<plurals name="calendar_collection_count">
|
||||
<item quantity="other">%1$d개 이벤트</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">프로필 배너</string>
|
||||
</resources>
|
||||
|
||||
@@ -62,4 +62,5 @@
|
||||
<item quantity="one">%1$d notikums</item>
|
||||
<item quantity="other">%1$d notikumi</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Profila reklāmkarogs</string>
|
||||
</resources>
|
||||
|
||||
@@ -47,4 +47,5 @@
|
||||
<item quantity="one">%1$d evenement</item>
|
||||
<item quantity="other">%1$d evenementen</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Profielbanner</string>
|
||||
</resources>
|
||||
|
||||
@@ -185,4 +185,5 @@
|
||||
<item quantity="one">%1$d evenement</item>
|
||||
<item quantity="other">%1$d evenementen</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Profielbanner</string>
|
||||
</resources>
|
||||
|
||||
@@ -47,4 +47,5 @@
|
||||
<item quantity="one">%1$d evenement</item>
|
||||
<item quantity="other">%1$d evenementen</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Profielbanner</string>
|
||||
</resources>
|
||||
|
||||
@@ -195,4 +195,5 @@
|
||||
<item quantity="many">%1$d wydarzeń</item>
|
||||
<item quantity="other">%1$d wydarzeń</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Baner profilu</string>
|
||||
</resources>
|
||||
|
||||
@@ -185,4 +185,5 @@
|
||||
<item quantity="one">%1$d evento</item>
|
||||
<item quantity="other">%1$d eventos</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Banner do perfil</string>
|
||||
</resources>
|
||||
|
||||
@@ -59,4 +59,5 @@
|
||||
<item quantity="one">%1$d evento</item>
|
||||
<item quantity="other">%1$d eventos</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Banner do perfil</string>
|
||||
</resources>
|
||||
|
||||
@@ -66,4 +66,5 @@
|
||||
<item quantity="many">%1$d событий</item>
|
||||
<item quantity="other">%1$d события</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Баннер профиля</string>
|
||||
</resources>
|
||||
|
||||
@@ -66,4 +66,5 @@
|
||||
<item quantity="many">%1$d событий</item>
|
||||
<item quantity="other">%1$d события</item>
|
||||
</plurals>
|
||||
<string name="profile_banner">Баннер профиля</string>
|
||||
</resources>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user