Compare commits

...

20 Commits

Author SHA1 Message Date
Jason 0e5da85ed2
Merge c3ca8912ed into ec5ca2bb66 2024-04-26 12:07:38 +00:00
summoner001 ec5ca2bb66
Translated using Weblate (Hungarian)
Currently translated at 100.0% (830 of 830 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/hu/
2024-04-26 14:07:18 +02:00
gallegonovato b7e94669cb
Translated using Weblate (Spanish)
Currently translated at 100.0% (830 of 830 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/es/
2024-04-26 14:07:17 +02:00
Fjuro ce57393549
Translated using Weblate (Czech)
Currently translated at 100.0% (830 of 830 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/cs/
2024-04-26 12:07:09 +02:00
Oğuz Ersen f5c89f3f9f
Translated using Weblate (Turkish)
Currently translated at 100.0% (830 of 830 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/tr/
2024-04-26 09:07:16 +02:00
Massimo Pissarello a2d67523ab
Translated using Weblate (Italian)
Currently translated at 100.0% (830 of 830 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/it/
2024-04-26 09:07:14 +02:00
Jose Delvani fc123f3792
Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (830 of 830 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/pt_BR/
2024-04-26 09:07:13 +02:00
大王叫我来巡山 1bd3ee936a
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (830 of 830 strings)

Translation: FreeTube/Translations
Translate-URL: https://hosted.weblate.org/projects/free-tube/translations/zh_Hans/
2024-04-26 09:07:11 +02:00
Jason Henriquez c3ca8912ed Tentatively codify black as new corresponding text color for red and draculaRed 2024-04-25 06:59:07 -05:00
Jason Henriquez b9af359730 Update red color to lighter color closer to original to avoid conflict 2024-04-24 22:47:26 -05:00
Jason Henriquez 73690fab4a Change red color to have an accessible color contrast 2024-04-24 22:35:30 -05:00
Jason Henriquez 7532bb47bd Change yellow destructive fallback text color to black for readability 2024-04-24 22:17:11 -05:00
Jason Henriquez 8c1009b1e3 Add icon capability to ft-buttons, & attach trash icon to destructive buttons 2024-04-24 21:57:36 -05:00
Jason Henriquez d77bbe614f Remove color from 'Cancel' prompt buttons 2024-04-24 19:01:01 -05:00
Jason Henriquez 3dd4ea47b6 Update to use fallback destructive colors 2024-04-24 18:47:54 -05:00
Jason Henriquez e688b23c31 Merge branch 'development' of github.com:FreeTubeApp/FreeTube into feat/mark-destructive-buttons-as-red 2024-04-24 18:19:29 -05:00
Jason Henriquez 69d155d665 Fix experimental settings bug 2023-11-23 15:42:04 -06:00
Jason Henriquez da5a42d5f7 Implement darker red only if red theme is selected 2023-11-23 09:01:56 -06:00
Jason Henriquez 7056778872 Improve destructive action label clarity 2023-11-22 23:53:57 -06:00
Jason Henriquez 62ad7d987a Add destructive styling to destructive actions in FreeTube, including prompt confirmations 2023-11-22 23:39:09 -06:00
30 changed files with 180 additions and 84 deletions

View File

@ -39,7 +39,8 @@ export default defineComponent({
'youtubenew',
'youtube',
'youtubeold',
'newpipe'
'newpipe',
'close'
],
shouldExportPlaylistForOlderVersions: false,
@ -70,7 +71,8 @@ export default defineComponent({
`${exportYouTube} (.csv)`,
`${exportYouTube} (.json)`,
`${exportYouTube} (.opml)`,
`${exportNewPipe} (.json)`
`${exportNewPipe} (.json)`,
this.$t('Close')
]
},
primaryProfile: function () {

View File

@ -67,7 +67,6 @@
:label="$t('Settings.Data Settings.Select Export Type')"
:option-names="exportSubscriptionsPromptNames"
:option-values="subscriptionsPromptValues"
:show-close="true"
@click="exportSubscriptions"
/>
</ft-settings-section>

View File

@ -37,7 +37,7 @@ export default defineComponent({
handleReplaceHttpCache: function (value) {
this.showRestartPrompt = false
if (value === null || value === 'no') {
if (value === null || value === 'cancel') {
this.replaceHttpCache = !this.replaceHttpCache
return
}

View File

@ -19,8 +19,8 @@
<ft-prompt
v-if="showRestartPrompt"
:label="$t('Settings[\'The app needs to restart for changes to take effect. Restart and apply change?\']')"
:option-names="[$t('Yes'), $t('No')]"
:option-values="['yes', 'no']"
:option-names="[$t('Yes, Restart'), $t('Cancel')]"
:option-values="['restart', 'cancel']"
@click="handleReplaceHttpCache"
/>
</ft-settings-section>

View File

@ -7,7 +7,6 @@
block-size: fit-content;
box-sizing: border-box;
cursor: pointer;
display: inline-block;
align-items: center;
justify-content: center;
text-align: center;
@ -17,6 +16,8 @@
white-space: nowrap;
font-weight: 500;
vertical-align: middle;
display: flex;
gap: 10px;
margin: 5px;
box-shadow: 0 1px 2px rgb(0 0 0 / 50%);
}

View File

@ -18,6 +18,10 @@ export default defineComponent({
id: {
type: String,
default: ''
},
icon: {
type: Array,
default: null
}
},
emits: ['click'],

View File

@ -10,6 +10,10 @@
@click="click"
>
<slot>
<font-awesome-icon
v-if="icon"
:icon="icon"
/>
{{ label }}
</slot>
</button>

View File

@ -24,6 +24,8 @@
/>
<ft-button
:label="$t('User Playlists.Cancel')"
:text-color="null"
:background-color="null"
@click="hideCreatePlaylistPrompt"
/>
</ft-flex-box>

View File

@ -74,6 +74,20 @@
}
}
&.destructive {
background-color: var(--destructive-color);
color: var(--destructive-text-color);
&:hover,
&:focus-visible {
background-color: var(--destructive-hover-color);
}
&:active {
background-color: var(--destructive-active-color);
}
}
&.favorite, &.favorite:hover, &.favorite:focus-visible {
color: var(--favorite-icon-color);
}

View File

@ -73,6 +73,8 @@
/>
<ft-button
:label="$t('User Playlists.Cancel')"
:text-color="null"
:background-color="null"
@click="hide"
/>
</ft-flex-box>

View File

@ -34,8 +34,8 @@ export default defineComponent({
subscriptions: [],
selectedLength: 0,
deletePromptValues: [
'yes',
'no'
'delete',
'cancel'
]
}
},
@ -61,8 +61,8 @@ export default defineComponent({
},
deletePromptNames: function () {
return [
this.$t('Yes'),
this.$t('No')
this.$t('Yes, Delete'),
this.$t('Cancel')
]
},
locale: function () {
@ -109,7 +109,7 @@ export default defineComponent({
},
handleDeletePromptClick: function (value) {
if (value !== 'no' && value !== null) {
if (value !== 'cancel' && value !== null) {
if (this.isMainProfile) {
const channelsToRemove = this.subscriptions.filter((channel) => channel.selected)
this.subscriptions = this.subscriptions.filter((channel) => !channel.selected)

View File

@ -30,8 +30,8 @@
/>
<ft-button
:label="$t('Profile.Delete Selected')"
text-color="var(--text-with-main-color)"
background-color="var(--primary-color)"
text-color="var(--destructive-text-color)"
background-color="var(--destructive-color)"
@click="displayDeletePrompt"
/>
</ft-flex-box>
@ -41,6 +41,7 @@
:label="deletePromptMessage"
:option-names="deletePromptNames"
:option-values="deletePromptValues"
:is-first-option-destructive="true"
@click="handleDeletePromptClick"
/>
</div>

View File

@ -41,8 +41,8 @@ export default defineComponent({
profileBgColor: '',
profileTextColor: '',
deletePromptValues: [
'yes',
'no'
'delete',
'cancel'
]
}
},
@ -64,8 +64,8 @@ export default defineComponent({
},
deletePromptNames: function () {
return [
this.$t('Yes'),
this.$t('No')
this.$t('Yes, Delete'),
this.$t('Cancel')
]
},
editOrCreateProfileLabel: function () {
@ -95,7 +95,7 @@ export default defineComponent({
},
handleDeletePrompt: function (response) {
if (response === 'yes') {
if (response === 'delete') {
this.deleteProfile()
} else {
this.showDeletePrompt = false

View File

@ -82,8 +82,9 @@
<ft-button
v-if="!isMainProfile"
:label="$t('Profile.Delete Profile')"
text-color="var(--text-with-main-color)"
background-color="var(--primary-color)"
text-color="var(--destructive-text-color)"
background-color="var(--destructive-color)"
:icon="['fas', 'trash']"
@click="openDeletePrompt"
/>
</template>
@ -98,6 +99,7 @@
:label="deletePromptLabel"
:option-names="deletePromptNames"
:option-values="deletePromptValues"
:is-first-option-destructive="true"
@click="handleDeletePrompt"
/>
</div>

View File

@ -29,14 +29,14 @@ export default defineComponent({
type: Array,
default: () => { return [] }
},
showClose: {
type: Boolean,
default: false
},
autosize: {
type: Boolean,
default: false
}
},
isFirstOptionDestructive: {
type: Boolean,
default: false
},
},
emits: ['click'],
data: function () {
@ -48,7 +48,7 @@ export default defineComponent({
computed: {
sanitizedLabel: function() {
return sanitizeForHtmlId(this.label)
}
},
},
beforeDestroy: function () {
document.removeEventListener('keydown', this.closeEventFunction, true)
@ -67,6 +67,24 @@ export default defineComponent({
this.focusItem(0)
},
methods: {
optionButtonTextColor: function(index) {
if (index === 0 && this.isFirstOptionDestructive) {
return 'var(--destructive-text-color)'
} else if (index < this.optionNames.length - 1) {
return 'var(--text-with-accent-color)'
} else {
return null
}
},
optionButtonBackgroundColor: function(index) {
if (index === 0 && this.isFirstOptionDestructive) {
return 'var(--destructive-color)'
} else if (index < this.optionNames.length - 1) {
return 'var(--accent-color)'
} else {
return null
}
},
click: function (value) {
this.$emit('click', value)
},

View File

@ -32,17 +32,11 @@
:id="'prompt-' + sanitizedLabel + '-' + index"
:key="index"
:label="option"
:text-color="optionButtonTextColor(index)"
:background-color="optionButtonBackgroundColor(index)"
:icon="index === 0 && isFirstOptionDestructive ? ['fas', 'trash'] : null"
@click="click(optionValues[index])"
/>
<ft-button
v-if="showClose"
:id="'prompt-' + sanitizedLabel + '-close'"
:label="$t('Close')"
:tabindex="0"
text-color="'var(--accent-color)'"
background-color="'var(--text-with-accent-color)'"
@click="hide"
/>
</ft-flex-box>
</slot>
</ft-card>

View File

@ -153,14 +153,14 @@
v-if="!editMode && isUserPlaylist && videoCount > 0"
:title="$t('User Playlists.Remove Watched Videos')"
:icon="['fas', 'eye-slash']"
theme="primary"
theme="destructive"
@click="showRemoveVideosOnWatchPrompt = true"
/>
<ft-icon-button
v-if="deletePlaylistButtonVisible"
:title="$t('User Playlists.Delete Playlist')"
:icon="['fas', 'trash']"
theme="primary"
theme="destructive"
@click="showDeletePlaylistPrompt = true"
/>
<ft-share-button
@ -177,6 +177,7 @@
:label="$t('User Playlists.Are you sure you want to delete this playlist? This cannot be undone')"
:option-names="deletePlaylistPromptNames"
:option-values="deletePlaylistPromptValues"
:is-first-option-destructive="true"
@click="handleDeletePlaylistPromptAnswer"
/>
<ft-prompt
@ -184,6 +185,7 @@
:label="$t('User Playlists.Are you sure you want to remove all watched videos from this playlist? This cannot be undone')"
:option-names="deletePlaylistPromptNames"
:option-values="deletePlaylistPromptValues"
:is-first-option-destructive="true"
@click="handleRemoveVideosOnWatchPromptAnswer"
/>
</div>

View File

@ -24,8 +24,8 @@ export default defineComponent({
showRemoveSubscriptionsPrompt: false,
showRemovePlaylistsPrompt: false,
promptValues: [
'yes',
'no'
'delete',
'cancel'
]
}
},
@ -48,8 +48,8 @@ export default defineComponent({
},
promptNames: function () {
return [
this.$t('Yes'),
this.$t('No')
this.$t('Yes, Delete'),
this.$t('Cancel')
]
}
},
@ -57,7 +57,7 @@ export default defineComponent({
handleSearchCache: function (option) {
this.showSearchCachePrompt = false
if (option === 'yes') {
if (option === 'delete') {
this.clearSessionSearchHistory()
showToast(this.$t('Settings.Privacy Settings.Search cache has been cleared'))
}
@ -74,7 +74,7 @@ export default defineComponent({
handleRemoveHistory: function (option) {
this.showRemoveHistoryPrompt = false
if (option === 'yes') {
if (option === 'delete') {
this.removeAllHistory()
showToast(this.$t('Settings.Privacy Settings.Watch history has been cleared'))
}
@ -85,7 +85,7 @@ export default defineComponent({
this.updateActiveProfile(MAIN_PROFILE_ID)
if (option !== 'yes') { return }
if (option !== 'delete') { return }
this.profileList.forEach((profile) => {
if (profile._id === MAIN_PROFILE_ID) {

View File

@ -34,26 +34,30 @@
<ft-flex-box>
<ft-button
:label="$t('Settings.Privacy Settings.Clear Search Cache')"
text-color="var(--text-with-main-color)"
background-color="var(--primary-color)"
text-color="var(--destructive-text-color)"
background-color="var(--destructive-color)"
:icon="['fas', 'trash']"
@click="showSearchCachePrompt = true"
/>
<ft-button
:label="$t('Settings.Privacy Settings.Remove Watch History')"
text-color="var(--text-with-main-color)"
background-color="var(--primary-color)"
text-color="var(--destructive-text-color)"
background-color="var(--destructive-color)"
:icon="['fas', 'trash']"
@click="showRemoveHistoryPrompt = true"
/>
<ft-button
:label="$t('Settings.Privacy Settings.Remove All Subscriptions / Profiles')"
text-color="var(--text-with-main-color)"
background-color="var(--primary-color)"
text-color="var(--destructive-text-color)"
background-color="var(--destructive-color)"
:icon="['fas', 'trash']"
@click="showRemoveSubscriptionsPrompt = true"
/>
<ft-button
:label="$t('Settings.Privacy Settings.Remove All Playlists')"
text-color="var(--text-with-main-color)"
background-color="var(--primary-color)"
text-color="var(--destructive-text-color)"
background-color="var(--destructive-color)"
:icon="['fas', 'trash']"
@click="showRemovePlaylistsPrompt = true"
/>
</ft-flex-box>
@ -62,6 +66,7 @@
:label="$t('Settings.Privacy Settings.Are you sure you want to clear out your search cache?')"
:option-names="promptNames"
:option-values="promptValues"
:is-first-option-destructive="true"
@click="handleSearchCache"
/>
<ft-prompt
@ -69,6 +74,7 @@
:label="$t('Settings.Privacy Settings.Are you sure you want to remove your entire watch history?')"
:option-names="promptNames"
:option-values="promptValues"
:is-first-option-destructive="true"
@click="handleRemoveHistory"
/>
<ft-prompt
@ -76,6 +82,7 @@
:label="removeSubscriptionsPromptMessage"
:option-names="promptNames"
:option-values="promptValues"
:is-first-option-destructive="true"
@click="handleRemoveSubscriptions"
/>
<ft-prompt
@ -83,6 +90,7 @@
:label="$t('Settings.Privacy Settings.Are you sure you want to remove all your playlists?')"
:option-names="promptNames"
:option-values="promptValues"
:is-first-option-destructive="true"
@click="handleRemovePlaylists"
/>
</ft-settings-section>

View File

@ -27,8 +27,8 @@ export default defineComponent({
disableSmoothScrollingToggleValue: false,
showRestartPrompt: false,
restartPromptValues: [
'yes',
'no'
'restart',
'cancel'
],
baseThemeValues: [
'system',
@ -90,8 +90,8 @@ export default defineComponent({
restartPromptNames: function () {
return [
this.$t('Yes'),
this.$t('No')
this.$t('Yes, Restart'),
this.$t('Cancel')
]
},
@ -141,7 +141,7 @@ export default defineComponent({
handleSmoothScrolling: function (value) {
this.showRestartPrompt = false
if (value === null || value === 'no') {
if (value === null || value === 'cancel') {
this.disableSmoothScrollingToggleValue = !this.disableSmoothScrollingToggleValue
return
}

View File

@ -86,6 +86,7 @@
:label="restartPromptMessage"
:option-names="restartPromptNames"
:option-values="restartPromptValues"
:is-first-option-destructive="true"
@click="handleSmoothScrolling"
/>
</ft-settings-section>

View File

@ -8,6 +8,10 @@
.hotPink,
.nordic {
--primary-input-color: rgb(0 0 0 / 50%);
--destructive-color: #f44336;
--destructive-text-color: #000;
--destructive-hover-color: #e53935;
--destructive-active-color: #c62828;
}
.system[data-system-theme*='light'], .light,
@ -191,6 +195,25 @@
--logo-text: url("../../_icons/textBlackSmall.svg");
}
.nordic {
--primary-text-color: #EEE;
--secondary-text-color: #ddd;
--tertiary-text-color: #EEE;
--title-color: #EEE;
--bg-color: #2b2f3a;
--favorite-icon-color: #0F0;
--card-bg-color: #2e3440;
--secondary-card-bg-color: rgb(59 66 82 / 75%);
--scrollbar-color: #4b566a;
--scrollbar-color-hover: #4b566a;
--side-nav-color: #2e3440;
--side-nav-hover-color: #3b4252;
--side-nav-active-color: #3b4252;
--search-bar-color: #4b566a;
--logo-icon: url("../../_icons/iconNordicLightSmall.svg");
--logo-text: url("../../_icons/textNordicLightSmall.svg");
}
.hotPink {
--primary-text-color: #FFFF;
--secondary-text-color: #FFFF;
@ -243,26 +266,6 @@ it can be safely elided. This looks quite pleasant on this theme. */
text-decoration: underline;
}
.nordic {
--primary-text-color: #EEE;
--secondary-text-color: #ddd;
--tertiary-text-color: #EEE;
--title-color: #EEE;
--bg-color: #2b2f3a;
--favorite-icon-color: #0F0;
--card-bg-color: #2e3440;
--secondary-card-bg-color: rgb(59 66 82 / 75%);
--scrollbar-color: #4b566a;
--scrollbar-color-hover: #4b566a;
--side-nav-color: #2e3440;
--side-nav-hover-color: #3b4252;
--side-nav-active-color: #3b4252;
--search-bar-color: #4b566a;
--logo-icon: url("../../_icons/iconNordicLightSmall.svg");
--logo-text: url("../../_icons/textNordicLightSmall.svg");
}
.mainRed,
.mainPink,
.mainPurple,
.mainDeepPurple,
@ -277,6 +280,7 @@ it can be safely elided. This looks quite pleasant on this theme. */
--logo-text-bar-color: url("../../_icons/textWhiteSmall.svg");
}
.mainRed,
.mainLightGreen,
.mainLime,
.mainYellow,
@ -387,6 +391,7 @@ it can be safely elided. This looks quite pleasant on this theme. */
.mainDraculaCyan,
.mainDraculaGreen,
.mainDraculaOrange,
.mainDraculaRed,
.mainDraculaYellow {
--text-with-main-color: #282A36;
--logo-icon-bar-color: url("../../_icons/iconDraculaDarkSmall.svg");
@ -394,8 +399,7 @@ it can be safely elided. This looks quite pleasant on this theme. */
}
.mainDraculaPink,
.mainDraculaPurple,
.mainDraculaRed {
.mainDraculaPurple {
--text-with-main-color: #F8F8F2;
--logo-icon-bar-color: url("../../_icons/iconDraculaLightSmall.svg");
--logo-text-bar-color: url("../../_icons/textDraculaLightSmall.svg");
@ -546,7 +550,6 @@ it can be safely elided. This looks quite pleasant on this theme. */
--primary-color-active: #8d98e4;
}
.secRed,
.secPink,
.secPurple,
.secDeepPurple,
@ -559,6 +562,7 @@ it can be safely elided. This looks quite pleasant on this theme. */
--text-with-accent-color: #FFF;
}
.secRed,
.secLightGreen,
.secLime,
.secYellow,
@ -763,13 +767,13 @@ it can be safely elided. This looks quite pleasant on this theme. */
.secDraculaCyan,
.secDraculaGreen,
.secDraculaOrange,
.secDraculaRed,
.secDraculaYellow {
--text-with-accent-color: #212121;
}
.secDraculaPink,
.secDraculaPurple,
.secDraculaRed {
.secDraculaPurple {
--text-with-accent-color: #F8F8F2;
}
@ -1028,6 +1032,34 @@ it can be safely elided. This looks quite pleasant on this theme. */
--accent-color-opacity4: rgb(180 190 254 / 24%);
}
/* region destructive color for red color themes
using :has(.app) to increase specificity */
.mainRed:has(.app), .secRed:has(.app), .mainDraculaRed:has(.app), .secDraculaRed:has(.app) {
--destructive-color: #9C27B0;
--destructive-text-color: #FFF;
--destructive-hover-color: #8E24AA;
--destructive-active-color: #6A1B9A;
}
/* Deal with theme conflict on destructive colors */
.mainRed.secPurple,
.mainRed.secDeepPurple,
.mainRed.secDraculaPurple,
.mainDraculaRed.secPurple,
.mainDraculaRed.secDeepPurple,
.mainDraculaRed.secDraculaPurple,
.mainPurple.secRed,
.mainPurple.secDraculaRed,
.mainDeepPurple.secRed,
.mainDeepPurple.secDraculaRed,
.mainDraculaPurple.secRed,
.mainDraculaPurple.secDraculaRed {
--destructive-color: #FF9800;
--destructive-text-color: #FFF;
--destructive-hover-color: #FB8C00;
--destructive-active-color: #EF6C00;
}
body[dir='ltr'] {
--ltr-or-rtl: ltr;
--float-left-ltr-rtl-value: left;

View File

@ -626,6 +626,7 @@ Settings:
Remove Password: Odebrat heslo
Set Password: Nastavit heslo
Expand All Settings Sections: Rozbalit všechny sekce nastavení
Sort Settings Sections (A-Z): Seřadit sekce nastavení (A-Z)
About:
#On About page
About: 'O aplikaci'

View File

@ -1068,6 +1068,9 @@ Moments Ago: moments ago
Yes: Yes
No: No
Ok: Ok
Yes, Delete: Yes, Delete
Yes, Restart: Yes, Restart
Cancel: Cancel
# symbol used to indicate that an item is correct
checkmark:
# French is the only language that should change this (they have a space before the colon)

View File

@ -639,6 +639,7 @@ Settings:
Password Incorrect: Contraseña incorrecta
Unlock: Desbloquear
Expand All Settings Sections: Expandir todas las secciones de los ajustes
Sort Settings Sections (A-Z): Ordenar secciones de configuración (A-Z)
About:
#On About page
About: 'Acerca de'

View File

@ -649,6 +649,7 @@ Settings:
Set Password: Jelszó megadása
Remove Password: Jelszó eltávolítása
Expand All Settings Sections: Beállítások kiterjesztése
Sort Settings Sections (A-Z): Beállítások rendezése (A-Z)
About:
#On About page
About: 'Névjegy'

View File

@ -646,6 +646,7 @@ Settings:
Impostazioni
Remove Password: Rimuovi password
Expand All Settings Sections: Espandi tutte le sezioni delle Impostazioni
Sort Settings Sections (A-Z): Ordina le sezioni delle Impostazioni (A-Z)
About:
#On About page
About: 'Informazioni'

View File

@ -641,6 +641,7 @@ Settings:
Password: Senha
Enter Password To Unlock: Digite a senha para desbloquear as configurações
Expand All Settings Sections: Expandir todas as seções de configurações
Sort Settings Sections (A-Z): Classificar seções de configurações (A-Z)
About:
#On About page
About: 'Sobre'
@ -1222,6 +1223,6 @@ Age Restricted:
checkmark:
Display Label: '{label}: {value}'
Feed:
Feed Last Updated: '{feedName} última atualização do feed: {date}'
Feed Last Updated: '{feedName} última atualização: {date}'
Refresh Feed: Atualizar {subscriptionName}
Moments Ago: momentos atrás

View File

@ -638,6 +638,7 @@ Settings:
Remove Password: Parolayı Kaldır
Set Password: Parola Ayarla
Expand All Settings Sections: Tüm Ayarlar Bölümlerini Genişlet
Sort Settings Sections (A-Z): Ayarlar Bölümlerini Sırala (A-Z)
About:
#On About page
About: 'Hakkında'

View File

@ -565,6 +565,7 @@ Settings:
Set Password: 设置密码
Remove Password: 删除密码
Expand All Settings Sections: 展开所有设置部分
Sort Settings Sections (A-Z): 对设置部分进行排序A-Z
About:
#On About page
About: '关于'