TMDB Settings Screen Localization Improvements and Support

This commit is contained in:
cyberalby2 2026-03-16 14:14:57 +01:00
parent 8a0e7a4d18
commit 97513ab3cc
3 changed files with 71 additions and 56 deletions

View file

@ -3,6 +3,7 @@
"loading": "Loading...",
"cancel": "Cancel",
"save": "Save",
"clear":"Clear",
"delete": "Delete",
"edit": "Edit",
"search": "Search",
@ -624,7 +625,9 @@
"popular": "Popular",
"all_languages": "All Languages",
"search_results": "Search Results",
"no_languages_found": "No languages found for \"{{query}}\"",
"no_languages_found": "No languages found for ",
"search_languages_placeholder":"Search Languages ...",
"fallback_to_available":"fallback to available",
"clear_search": "Clear Search",
"clear_cache_title": "Clear TMDB Cache",
"clear_cache_msg": "This will clear all cached TMDB data ({{size}}). This may temporarily slow down loading until cache rebuilds.",
@ -640,7 +643,11 @@
"using_builtin_key": "Now using the built-in TMDb API key.",
"using_custom_key": "Now using your custom TMDb API key.",
"enter_custom_key": "Please enter and save your custom TMDb API key.",
"key_verified": "API key verified and saved successfully."
"key_verified": "API key verified and saved successfully.",
"current":"Current",
"disclaimer_part_1":"This product uses the TMDB API but is not",
"disclaimer_part_2":"endorsed or certified by TMDB.",
"done":"Done"
},
"settings": {
"language": "Language",

View file

@ -3,6 +3,7 @@
"loading": "Caricamento...",
"cancel": "Annulla",
"save": "Salva",
"clear":"Clear",
"delete": "Elimina",
"edit": "Modifica",
"search": "Cerca",
@ -528,7 +529,7 @@
"sync_complete_title": "Sincronizzazione completata",
"sync_success_msg": "Progressi di visione sincronizzati con successo con Trakt.",
"sync_error_msg": "Sincronizzazione fallita. Riprova.",
"disclaimer":"Questo prodotto usa l'API di Trakt ma non è nè approvato nè certificato da Trakt.",
"disclaimer":"Questo prodotto usa l'API di Trakt ma non è né approvato né certificato da Trakt.",
"library_mode":"Modalità Sincronizzazione Libreria"
},
"simkl": {
@ -553,13 +554,13 @@
"disclaimer": "Nuvio non è affiliato con Simkl."
},
"tmdb_settings": {
"title": "Impostazioni TMDb",
"title": "Impostazioni TMDB",
"metadata_enrichment": "Arricchimento metadati",
"metadata_enrichment_desc": "Migliora i metadati dei contenuti con i dati di TMDb per maggiori dettagli e informazioni.",
"metadata_enrichment_desc": "Migliora i metadati dei contenuti con i dati di TMDB per maggiori dettagli e informazioni.",
"enable_enrichment": "Abilita arricchimento",
"enable_enrichment_desc": "Integra i metadati degli Addon con TMDb per cast, certificazioni, loghi/poster e info di produzione.",
"enable_enrichment_desc": "Integra i metadati degli Addon con TMDB per cast, certificazioni, loghi/poster e info di produzione.",
"localized_text": "Testo localizzato",
"localized_text_desc": "Recupera titoli e descrizioni nella tua lingua preferita da TMDb.",
"localized_text_desc": "Recupera titoli e descrizioni nella tua lingua preferita da TMDB.",
"language": "Lingua",
"change": "Cambia",
"logo_preview": "Anteprima Logo",
@ -567,11 +568,11 @@
"example": "Esempio:",
"no_logo": "Nessun logo disponibile",
"enrichment_options": "Opzioni di arricchimento",
"enrichment_options_desc": "Controlla quali dati recuperare da TMDb. Le opzioni disabilitate useranno i dati dell'Addon, se disponibili.",
"enrichment_options_desc": "Controlla quali dati recuperare da TMDB. Le opzioni disabilitate useranno i dati dell'Addon, se disponibili.",
"cast_crew": "Cast e Troupe",
"cast_crew_desc": "Attori, registi, sceneggiatori con foto profilo",
"title_description": "Titolo e Descrizione",
"title_description_desc": "Usa titolo e panoramica localizzati di TMDb",
"title_description_desc": "Usa titolo e panoramica localizzati di TMDB",
"title_logos": "Loghi Titolo",
"title_logos_desc": "Immagini di alta qualità per il titolo",
"banners_backdrops": "Banner e Sfondi",
@ -593,23 +594,25 @@
"movie_collections": "Collezioni Film",
"movie_collections_desc": "Franchise cinematografici (Marvel, Star Wars, ecc.)",
"api_configuration": "Configurazione API",
"api_configuration_desc": "Configura il tuo accesso alle API di TMDb per funzionalità avanzate.",
"api_configuration_desc": "Configura il tuo accesso alle API di TMDB per funzionalità avanzate.",
"custom_api_key": "Chiave API personalizzata",
"custom_api_key_desc": "Usa la tua chiave API TMDb per prestazioni migliori e limiti di frequenza dedicati.",
"custom_api_key_desc": "Usa la tua chiave API TMDB per prestazioni migliori e limiti di frequenza dedicati.",
"custom_key_active": "Chiave API personalizzata attiva",
"api_key_required": "Chiave API richiesta",
"api_key_placeholder": "Incolla la tua chiave API TMDb (v3)",
"how_to_get_key": "Come ottenere una chiave API TMDb?",
"built_in_key_msg": "Attualmente in uso la chiave API integrata. Considera l'uso di una chiave tua per prestazioni migliori.",
"api_key_placeholder": "Incolla la tua chiave API TMDB (v3)",
"how_to_get_key": "Come ottenere una chiave API TMDB?",
"built_in_key_msg": "La chiave API integrata è attualmente in uso. Considera l'uso di una chiave tua per prestazioni migliori.",
"cache_size": "Dimensione Cache",
"clear_cache": "Cancella Cache",
"cache_days": "Le risposte TMDB vengono memorizzate per 7 giorni per migliorare le prestazioni",
"choose_language": "Scegli Lingua",
"choose_language_desc": "Seleziona la lingua preferita per i contenuti TMDb",
"choose_language_desc": "Seleziona la lingua preferita per i contenuti TMDB",
"popular": "Popolari",
"all_languages": "Tutte le lingue",
"search_results": "Risultati di ricerca",
"no_languages_found": "Nessuna lingua trovata per \"{{query}}\"",
"all_languages": "Lingue Disponibili",
"search_results": "Risultati della ricerca",
"no_languages_found": "Nessuna lingua trovata per",
"search_languages_placeholder":"Ricerca Lingue...",
"fallback_to_available":"usa i dati disponibili come ripiego",
"clear_search": "Cancella ricerca",
"clear_cache_title": "Cancella Cache TMDB",
"clear_cache_msg": "Questo cancellerà tutti i dati TMDB memorizzati ({{size}}). Il caricamento potrebbe rallentare temporaneamente fino alla ricostruzione della cache.",
@ -622,10 +625,14 @@
"empty_api_key": "La chiave API non può essere vuota.",
"invalid_api_key": "Chiave API non valida. Controlla e riprova.",
"save_error": "Si è verificato un errore durante il salvataggio. Riprova.",
"using_builtin_key": "Ora in uso la chiave API TMDb integrata.",
"using_custom_key": "Ora in uso la tua chiave API TMDb personalizzata.",
"enter_custom_key": "Inserisci e salva la tua chiave API TMDb personalizzata.",
"key_verified": "Chiave API verificata e salvata con successo."
"using_builtin_key": "Ora in uso la chiave API TMDB integrata.",
"using_custom_key": "Ora in uso la tua chiave API TMDB personalizzata.",
"enter_custom_key": "Inserisci e salva la tua chiave API TMDB personalizzata.",
"key_verified": "Chiave API verificata e salvata con successo.",
"current":"Attuale",
"disclaimer_part_1":"Questo prodotto usa l'API di TMDB ma non è nè approvato",
"disclaimer_part_2":"né certificato da TMDB.",
"done":"Fatto"
},
"settings": {
"language": "Lingua",

View file

@ -591,7 +591,7 @@ const TMDBSettingsScreen = () => {
<View style={styles.settingTextContainer}>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>{t('tmdb_settings.language')}</Text>
<Text style={[styles.settingDescription, { color: currentTheme.colors.mediumEmphasis }]}>
Current: {(settings.tmdbLanguagePreference || 'en').toUpperCase()}
{t('tmdb_settings.current')}: {(settings.tmdbLanguagePreference || 'en').toUpperCase()}
</Text>
</View>
<TouchableOpacity
@ -647,7 +647,7 @@ const TMDBSettingsScreen = () => {
{renderLogoExample(tmdbLogo, tmdbBanner, loadingLogos)}
{tmdbLogo && (
<Text style={[styles.logoSourceLabel, { color: currentTheme.colors.mediumEmphasis }]}>
{`Language: ${(previewLanguage || '').toUpperCase() || 'N/A'}${isPreviewFallback ? ' (fallback to available)' : ''}`}
{`${t('tmdb_settings.language')}: ${(previewLanguage || '').toUpperCase() || 'N/A'}${isPreviewFallback ? ` (${t('tmdb_settings.fallback_to_available')})` : ''}`}
</Text>
)}
</View>
@ -801,9 +801,9 @@ const TMDBSettingsScreen = () => {
{/* Production Info */}
<View style={styles.settingRow}>
<View style={styles.settingTextContainer}>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>Production Info</Text>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>{t('tmdb_settings.production_info')}</Text>
<Text style={[styles.settingDescription, { color: currentTheme.colors.mediumEmphasis }]}>
Networks & production companies with logos
{t('tmdb_settings.production_info_desc')}
</Text>
</View>
<Switch
@ -818,9 +818,9 @@ const TMDBSettingsScreen = () => {
{/* Movie Details */}
<View style={styles.settingRow}>
<View style={styles.settingTextContainer}>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>Movie Details</Text>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>{t('tmdb_settings.movie_details')}</Text>
<Text style={[styles.settingDescription, { color: currentTheme.colors.mediumEmphasis }]}>
Budget, revenue, runtime, tagline
{t('tmdb_settings.movie_details_desc')}
</Text>
</View>
<Switch
@ -835,9 +835,9 @@ const TMDBSettingsScreen = () => {
{/* TV Details */}
<View style={styles.settingRow}>
<View style={styles.settingTextContainer}>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>TV Show Details</Text>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>{t('tmdb_settings.tv_details')}</Text>
<Text style={[styles.settingDescription, { color: currentTheme.colors.mediumEmphasis }]}>
Status, seasons count, networks, creators
{t('tmdb_settings.tv_details_desc')}
</Text>
</View>
<Switch
@ -852,9 +852,9 @@ const TMDBSettingsScreen = () => {
{/* Collections */}
<View style={[styles.settingRow, { marginBottom: 0 }]}>
<View style={styles.settingTextContainer}>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>Movie Collections</Text>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>{t('tmdb_settings.movie_collections')}</Text>
<Text style={[styles.settingDescription, { color: currentTheme.colors.mediumEmphasis }]}>
Franchise movies (Marvel, Star Wars, etc.)
{t('tmdb_settings.movie_collections_desc')}
</Text>
</View>
<Switch
@ -873,17 +873,17 @@ const TMDBSettingsScreen = () => {
<View style={[styles.sectionCard, { backgroundColor: currentTheme.colors.elevation2 }]}>
<View style={styles.sectionHeader}>
<MaterialIcons name="api" size={20} color={currentTheme.colors.primary} />
<Text style={[styles.sectionTitle, { color: currentTheme.colors.text }]}>API Configuration</Text>
<Text style={[styles.sectionTitle, { color: currentTheme.colors.text }]}>{t('tmdb_settings.api_configuration')}</Text>
</View>
<Text style={[styles.sectionDescription, { color: currentTheme.colors.mediumEmphasis }]}>
Configure your TMDb API access for enhanced functionality.
{t('tmdb_settings.api_configuration_desc')}
</Text>
<View style={styles.settingRow}>
<View style={styles.settingTextContainer}>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>Custom API Key</Text>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>{t('tmdb_settings.custom_api_key')}</Text>
<Text style={[styles.settingDescription, { color: currentTheme.colors.mediumEmphasis }]}>
Use your own TMDb API key for better performance and dedicated rate limits.
{t('tmdb_settings.custom_api_key_desc')}
</Text>
</View>
<Switch
@ -909,7 +909,7 @@ const TMDBSettingsScreen = () => {
<Text style={[styles.statusText, {
color: isKeySet ? currentTheme.colors.success : currentTheme.colors.warning
}]}>
{isKeySet ? "Custom API key active" : "API key required"}
{isKeySet ? t('tmdb_settings.custom_key_active') : t('tmdb_settings.api_key_required')}
</Text>
</View>
@ -931,7 +931,7 @@ const TMDBSettingsScreen = () => {
setApiKey(text);
if (testResult) setTestResult(null);
}}
placeholder="Paste your TMDb API key (v3)"
placeholder={t('tmdb_settings.api_key_placeholder')}
placeholderTextColor={currentTheme.colors.mediumEmphasis}
autoCapitalize="none"
autoCorrect={false}
@ -952,7 +952,7 @@ const TMDBSettingsScreen = () => {
style={[styles.button, { backgroundColor: currentTheme.colors.primary }]}
onPress={saveApiKey}
>
<Text style={[styles.buttonText, { color: currentTheme.colors.white }]}>Save</Text>
<Text style={[styles.buttonText, { color: currentTheme.colors.white }]}>{t('common.save')}</Text>
</TouchableOpacity>
{isKeySet && (
@ -960,7 +960,7 @@ const TMDBSettingsScreen = () => {
style={[styles.button, styles.clearButton, { borderColor: currentTheme.colors.error }]}
onPress={clearApiKey}
>
<Text style={[styles.buttonText, { color: currentTheme.colors.error }]}>Clear</Text>
<Text style={[styles.buttonText, { color: currentTheme.colors.error }]}>{t('common.clear')}</Text>
</TouchableOpacity>
)}
</View>
@ -991,7 +991,7 @@ const TMDBSettingsScreen = () => {
>
<MaterialIcons name="help" size={16} color={currentTheme.colors.primary} style={styles.helpIcon} />
<Text style={[styles.helpText, { color: currentTheme.colors.primary }]}>
How to get a TMDb API key?
{t('tmdb_settings.how_to_get_key')}
</Text>
</TouchableOpacity>
</View>
@ -1002,7 +1002,7 @@ const TMDBSettingsScreen = () => {
<View style={styles.infoContainer}>
<MaterialIcons name="info-outline" size={18} color={currentTheme.colors.primary} />
<Text style={[styles.infoText, { color: currentTheme.colors.mediumEmphasis }]}>
Currently using built-in API key. Consider using your own key for better performance.
{t('tmdb_settings.built_in_key_msg')}
</Text>
</View>
)}
@ -1012,7 +1012,7 @@ const TMDBSettingsScreen = () => {
<View style={styles.settingRow}>
<View style={styles.settingTextContainer}>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>Cache Size</Text>
<Text style={[styles.settingTitle, { color: currentTheme.colors.text }]}>{t('tmdb_settings.cache_size')}</Text>
<Text style={[styles.settingDescription, { color: currentTheme.colors.mediumEmphasis }]}>
{cacheSize}
</Text>
@ -1025,14 +1025,14 @@ const TMDBSettingsScreen = () => {
>
<View style={{ flexDirection: 'row', alignItems: 'center' }}>
<MaterialIcons name="delete-outline" size={18} color={currentTheme.colors.white} />
<Text style={[styles.buttonText, { color: currentTheme.colors.white, marginLeft: 8 }]}>Clear Cache</Text>
<Text style={[styles.buttonText, { color: currentTheme.colors.white, marginLeft: 8 }]}>{t('tmdb_settings.clear_cache')}</Text>
</View>
</TouchableOpacity>
<View style={[styles.infoContainer, { marginTop: 12 }]}>
<MaterialIcons name="info-outline" size={18} color={currentTheme.colors.primary} />
<Text style={[styles.infoText, { color: currentTheme.colors.mediumEmphasis }]}>
TMDB responses are cached for 7 days to improve performance
{t('tmdb_settings.cache_days')}
</Text>
</View>
</View>
@ -1046,10 +1046,10 @@ const TMDBSettingsScreen = () => {
/>
<View style={{ width: '90%' }}>
<Text style={[styles.attributionText, { color: currentTheme.colors.mediumEmphasis }]}>
This product uses the TMDB API but is not
{t('tmdb_settings.disclaimer_part_1')}
</Text>
<Text style={[styles.attributionText, { color: currentTheme.colors.mediumEmphasis }]}>
endorsed or certified by TMDB.
{t('tmdb_settings.disclaimer_part_2')}
</Text>
</View>
</View>
@ -1069,8 +1069,8 @@ const TMDBSettingsScreen = () => {
{/* Header */}
<View style={styles.modalHeader}>
<View style={[styles.dragHandle, { backgroundColor: currentTheme.colors.elevation3 }]} />
<Text style={[styles.modalTitle, { color: currentTheme.colors.text }]}>Choose Language</Text>
<Text style={[styles.modalSubtitle, { color: currentTheme.colors.mediumEmphasis }]}>Select your preferred language for TMDb content</Text>
<Text style={[styles.modalTitle, { color: currentTheme.colors.text }]}>{t('tmdb_settings.choose_language')}</Text>
<Text style={[styles.modalSubtitle, { color: currentTheme.colors.mediumEmphasis }]}>{t('tmdb_settings.choose_language_desc')}</Text>
</View>
{/* Search Section */}
@ -1078,7 +1078,7 @@ const TMDBSettingsScreen = () => {
<View style={[styles.searchContainer, { backgroundColor: currentTheme.colors.elevation1 }]}>
<MaterialIcons name="search" size={20} color={currentTheme.colors.mediumEmphasis} style={styles.searchIcon} />
<TextInput
placeholder="Search languages..."
placeholder={t('tmdb_settings.search_languages_placeholder')}
placeholderTextColor={currentTheme.colors.mediumEmphasis}
style={[styles.searchInput, { color: currentTheme.colors.text }]}
value={languageSearch}
@ -1097,7 +1097,7 @@ const TMDBSettingsScreen = () => {
{/* Popular Languages */}
{languageSearch.length === 0 && (
<View style={styles.popularSection}>
<Text style={[styles.sectionTitle, { color: currentTheme.colors.mediumEmphasis }]}>Popular</Text>
<Text style={[styles.sectionTitle, { color: currentTheme.colors.mediumEmphasis }]}>{t('tmdb_settings.popular')}</Text>
<ScrollView
horizontal
showsHorizontalScrollIndicator={false}
@ -1105,6 +1105,7 @@ const TMDBSettingsScreen = () => {
>
{[
{ code: 'en', label: 'EN' },
{ code: 'it', label: 'IT' },
{ code: 'ar', label: 'AR' },
{ code: 'es', label: 'ES' },
{ code: 'fr', label: 'FR' },
@ -1143,7 +1144,7 @@ const TMDBSettingsScreen = () => {
languageSearch.length > 0 && styles.searchResultsTitle,
{ color: languageSearch.length > 0 ? currentTheme.colors.text : currentTheme.colors.mediumEmphasis }
]}>
{languageSearch.length > 0 ? 'Search Results' : 'All Languages'}
{languageSearch.length > 0 ? t('tmdb_settings.search_results') : t('tmdb_settings.all_languages')}
</Text>
<ScrollView style={styles.languageList} showsVerticalScrollIndicator={false}>
@ -1238,13 +1239,13 @@ const TMDBSettingsScreen = () => {
<View style={styles.noResultsContainer}>
<MaterialIcons name="search-off" size={48} color={currentTheme.colors.mediumEmphasis} />
<Text style={[styles.noResultsText, { color: currentTheme.colors.mediumEmphasis }]}>
No languages found for "{languageSearch}"
{t('tmdb_settings.no_languages_found')} "{languageSearch}"
</Text>
<TouchableOpacity
onPress={() => setLanguageSearch('')}
style={[styles.clearSearchButton, { backgroundColor: currentTheme.colors.elevation1 }]}
>
<Text style={[styles.clearSearchButtonText, { color: currentTheme.colors.primary }]}>Clear search</Text>
<Text style={[styles.clearSearchButtonText, { color: currentTheme.colors.primary }]}>{t('tmdb_settings.clear_search')}</Text>
</TouchableOpacity>
</View>
)}
@ -1260,13 +1261,13 @@ const TMDBSettingsScreen = () => {
onPress={() => setLanguagePickerVisible(false)}
style={styles.cancelButton}
>
<Text style={[styles.cancelButtonText, { color: currentTheme.colors.text }]}>Cancel</Text>
<Text style={[styles.cancelButtonText, { color: currentTheme.colors.text }]}>{t('common.cancel')}</Text>
</TouchableOpacity>
<TouchableOpacity
onPress={() => setLanguagePickerVisible(false)}
style={[styles.doneButton, { backgroundColor: currentTheme.colors.primary }]}
>
<Text style={[styles.doneButtonText, { color: currentTheme.colors.white }]}>Done</Text>
<Text style={[styles.doneButtonText, { color: currentTheme.colors.white }]}>{t('tmdb_settings.done')}</Text>
</TouchableOpacity>
</View>
</View>