Merge branch 'master' into fix/dropdown-colors

This commit is contained in:
Ensar Sarajčić 2023-10-09 12:06:14 +02:00
commit 49f1f1b7df
13 changed files with 292 additions and 220 deletions

View file

@ -1,4 +1,4 @@
package com.simplemobiletools.commons.compose.settings.scaffold
package com.simplemobiletools.commons.compose.lists
import android.content.Context
import androidx.compose.foundation.background

View file

@ -1,6 +1,7 @@
package com.simplemobiletools.commons.compose.settings.scaffold
package com.simplemobiletools.commons.compose.lists
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
@ -19,7 +20,7 @@ import com.simplemobiletools.commons.compose.extensions.rememberMutableInteracti
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
@Composable
fun SettingsScaffold(
fun SimpleColumnScaffold(
title: String,
goBack: () -> Unit,
modifier: Modifier = Modifier,
@ -28,7 +29,7 @@ fun SettingsScaffold(
if (!reverseLayout) Arrangement.Top else Arrangement.Bottom,
horizontalAlignment: Alignment.Horizontal = Alignment.Start,
scrollState: ScrollState = rememberScrollState(),
content: @Composable() (ColumnScope.(PaddingValues) -> Unit)
content: @Composable (ColumnScope.(PaddingValues) -> Unit)
) {
val context = LocalContext.current
val (statusBarColor, contrastColor) = statusBarAndContrastColor(context)
@ -43,7 +44,7 @@ fun SettingsScaffold(
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
SettingsScaffoldTopBar(
SimpleScaffoldTopBar(
title = title,
scrolledColor = scrolledColor,
navigationIconInteractionSource = navigationIconInteractionSource,
@ -72,7 +73,7 @@ fun SettingsScaffold(
@Composable
fun SettingsScaffold(
fun SimpleColumnScaffold(
modifier: Modifier = Modifier,
title: @Composable (scrolledColor: Color) -> Unit,
goBack: () -> Unit,
@ -97,7 +98,7 @@ fun SettingsScaffold(
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
SettingsScaffoldTopBar(
SimpleScaffoldTopBar(
title = title,
scrolledColor = scrolledColor,
navigationIconInteractionSource = navigationIconInteractionSource,
@ -125,7 +126,7 @@ fun SettingsScaffold(
}
@Composable
fun SettingsScaffold(
fun SimpleColumnScaffold(
modifier: Modifier = Modifier,
title: @Composable (scrolledColor: Color) -> Unit,
actions: @Composable() (RowScope.() -> Unit),
@ -135,7 +136,7 @@ fun SettingsScaffold(
if (!reverseLayout) Arrangement.Top else Arrangement.Bottom,
horizontalAlignment: Alignment.Horizontal = Alignment.Start,
scrollState: ScrollState = rememberScrollState(),
content: @Composable() (ColumnScope.(PaddingValues) -> Unit)
content: @Composable (ColumnScope.(PaddingValues) -> Unit)
) {
val context = LocalContext.current
@ -151,7 +152,7 @@ fun SettingsScaffold(
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
SettingsScaffoldTopBar(
SimpleScaffoldTopBar(
title = title,
scrolledColor = scrolledColor,
navigationIconInteractionSource = navigationIconInteractionSource,
@ -179,13 +180,56 @@ fun SettingsScaffold(
}
}
@Composable
fun SimpleColumnScaffold(
modifier: Modifier = Modifier,
customTopBar: @Composable (scrolledColor: Color, navigationInteractionSource: MutableInteractionSource, scrollBehavior: TopAppBarScrollBehavior, statusBarColor: Int, colorTransitionFraction: Float, contrastColor: Color) -> Unit,
goBack: () -> Unit,
reverseLayout: Boolean = false,
verticalArrangement: Arrangement.Vertical =
if (!reverseLayout) Arrangement.Top else Arrangement.Bottom,
horizontalAlignment: Alignment.Horizontal = Alignment.Start,
scrollState: ScrollState = rememberScrollState(),
content: @Composable() (ColumnScope.(PaddingValues) -> Unit)
) {
val context = LocalContext.current
val (statusBarColor, contrastColor) = statusBarAndContrastColor(context)
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
val (colorTransitionFraction, scrolledColor) = transitionFractionAndScrolledColor(scrollBehavior, contrastColor)
SystemUISettingsScaffoldStatusBarColor(scrolledColor)
val navigationIconInteractionSource = rememberMutableInteractionSource()
AdjustNavigationBarColors()
Scaffold(
modifier = modifier
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
customTopBar(scrolledColor, navigationIconInteractionSource, scrollBehavior, statusBarColor, colorTransitionFraction, contrastColor)
}
) { paddingValues ->
ScreenBoxSettingsScaffold(paddingValues) {
Column(
modifier = Modifier
.matchParentSize()
.verticalScroll(scrollState),
verticalArrangement = verticalArrangement,
horizontalAlignment = horizontalAlignment,
) {
content(paddingValues)
Spacer(modifier = Modifier.padding(bottom = paddingValues.calculateBottomPadding()))
}
}
}
}
@MyDevices
@Composable
private fun SettingsScaffoldPreview() {
private fun SimpleColumnScaffoldPreview() {
AppThemeSurface {
SettingsScaffold(title = "About", goBack = {}) {
SimpleColumnScaffold(title = "About", goBack = {}) {
ListItem(headlineContent = { Text(text = "Some text") },
leadingContent = {
Icon(imageVector = Icons.Filled.AccessTime, contentDescription = null)

View file

@ -1,4 +1,4 @@
package com.simplemobiletools.commons.compose.settings.scaffold
package com.simplemobiletools.commons.compose.lists
import androidx.compose.foundation.gestures.FlingBehavior
import androidx.compose.foundation.gestures.ScrollableDefaults
@ -25,7 +25,7 @@ import com.simplemobiletools.commons.compose.extensions.rememberMutableInteracti
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
@Composable
fun SettingsLazyScaffold(
fun SimpleLazyListScaffold(
title: String,
goBack: () -> Unit,
modifier: Modifier = Modifier,
@ -53,7 +53,7 @@ fun SettingsLazyScaffold(
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
SettingsScaffoldTopBar(
SimpleScaffoldTopBar(
title = title,
scrolledColor = scrolledColor,
navigationIconInteractionSource = navigationIconInteractionSource,
@ -85,7 +85,7 @@ fun SettingsLazyScaffold(
@Composable
fun SettingsLazyScaffold(
fun SimpleLazyListScaffold(
modifier: Modifier = Modifier,
title: @Composable (scrolledColor: Color) -> Unit,
goBack: () -> Unit,
@ -113,7 +113,7 @@ fun SettingsLazyScaffold(
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
SettingsScaffoldTopBar(
SimpleScaffoldTopBar(
title = title,
scrolledColor = scrolledColor,
navigationIconInteractionSource = navigationIconInteractionSource,
@ -144,7 +144,7 @@ fun SettingsLazyScaffold(
}
@Composable
fun SettingsLazyScaffold(
fun SimpleLazyListScaffold(
modifier: Modifier = Modifier,
title: @Composable (scrolledColor: Color) -> Unit,
actions: @Composable() (RowScope.() -> Unit),
@ -173,7 +173,7 @@ fun SettingsLazyScaffold(
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
SettingsScaffoldTopBar(
SimpleScaffoldTopBar(
title = title,
scrolledColor = scrolledColor,
navigationIconInteractionSource = navigationIconInteractionSource,
@ -205,7 +205,7 @@ fun SettingsLazyScaffold(
}
@Composable
fun SettingsLazyScaffold(
fun SimpleLazyListScaffold(
modifier: Modifier = Modifier,
topBar: @Composable (scrolledColor: Color, navigationInteractionSource: MutableInteractionSource, scrollBehavior: TopAppBarScrollBehavior, statusBarColor: Int, colorTransitionFraction: Float, contrastColor: Color) -> Unit,
contentPadding: PaddingValues = PaddingValues(0.dp),
@ -254,7 +254,7 @@ fun SettingsLazyScaffold(
}
@Composable
fun SettingsLazyScaffold(
fun SimpleLazyListScaffold(
modifier: Modifier = Modifier,
darkStatusBarIcons: Boolean = true,
customTopBar: @Composable (scrolledColor: Color, navigationInteractionSource: MutableInteractionSource, scrollBehavior: TopAppBarScrollBehavior, statusBarColor: Int, colorTransitionFraction: Float, contrastColor: Color) -> Unit,
@ -286,9 +286,9 @@ fun SettingsLazyScaffold(
@MyDevices
@Composable
private fun SettingsLazyScaffoldPreview() {
private fun SimpleLazyListScaffoldPreview() {
AppThemeSurface {
SettingsLazyScaffold(title = "About", goBack = {}) {
SimpleLazyListScaffold(title = "About", goBack = {}) {
item {
ListItem(headlineContent = { Text(text = "Some text") },
leadingContent = {

View file

@ -1,4 +1,4 @@
package com.simplemobiletools.commons.compose.settings.scaffold
package com.simplemobiletools.commons.compose.lists
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
@ -23,7 +23,7 @@ import com.simplemobiletools.commons.compose.theme.AppThemeSurface
import com.simplemobiletools.commons.compose.theme.SimpleTheme
@Composable
fun SettingsScaffoldTopBar(
fun SimpleScaffoldTopBar(
modifier: Modifier = Modifier,
title: String,
scrolledColor: Color,
@ -47,21 +47,21 @@ fun SettingsScaffoldTopBar(
)
},
navigationIcon = {
SettingsNavigationIcon(
SimpleNavigationIcon(
goBack = goBack,
navigationIconInteractionSource = navigationIconInteractionSource,
iconColor = scrolledColor
)
},
scrollBehavior = scrollBehavior,
colors = topAppBarColors(statusBarColor, colorTransitionFraction, contrastColor),
colors = simpleTopAppBarColors(statusBarColor, colorTransitionFraction, contrastColor),
modifier = modifier.topAppBarPaddings(),
windowInsets = topAppBarInsets()
)
}
@Composable
fun SettingsScaffoldTopBar(
fun SimpleScaffoldTopBar(
modifier: Modifier = Modifier,
title: @Composable (scrolledColor: Color) -> Unit,
scrolledColor: Color,
@ -77,21 +77,21 @@ fun SettingsScaffoldTopBar(
title(scrolledColor)
},
navigationIcon = {
SettingsNavigationIcon(
SimpleNavigationIcon(
goBack = goBack,
navigationIconInteractionSource = navigationIconInteractionSource,
iconColor = scrolledColor
)
},
scrollBehavior = scrollBehavior,
colors = topAppBarColors(statusBarColor, colorTransitionFraction, contrastColor),
colors = simpleTopAppBarColors(statusBarColor, colorTransitionFraction, contrastColor),
modifier = modifier.topAppBarPaddings(),
windowInsets = topAppBarInsets()
)
}
@Composable
fun SettingsScaffoldTopBar(
fun SimpleScaffoldTopBar(
modifier: Modifier = Modifier,
title: @Composable (scrolledColor: Color) -> Unit,
actions: @Composable RowScope.() -> Unit,
@ -108,7 +108,7 @@ fun SettingsScaffoldTopBar(
title(scrolledColor)
},
navigationIcon = {
SettingsNavigationIcon(
SimpleNavigationIcon(
goBack = goBack,
navigationIconInteractionSource = navigationIconInteractionSource,
iconColor = scrolledColor
@ -116,14 +116,14 @@ fun SettingsScaffoldTopBar(
},
actions = actions,
scrollBehavior = scrollBehavior,
colors = topAppBarColors(statusBarColor, colorTransitionFraction, contrastColor),
colors = simpleTopAppBarColors(statusBarColor, colorTransitionFraction, contrastColor),
modifier = modifier.topAppBarPaddings(),
windowInsets = topAppBarInsets()
)
}
@Composable
fun topAppBarColors(
fun simpleTopAppBarColors(
statusBarColor: Int,
colorTransitionFraction: Float,
contrastColor: Color
@ -149,7 +149,7 @@ fun Modifier.topAppBarPaddings(
}
@Composable
fun SettingsNavigationIcon(
fun SimpleNavigationIcon(
modifier: Modifier = Modifier,
navigationIconInteractionSource: MutableInteractionSource = rememberMutableInteractionSource(),
goBack: () -> Unit,
@ -166,12 +166,12 @@ fun SettingsNavigationIcon(
)
) { goBack() }
) {
BackIcon(iconColor)
SimpleBackIcon(iconColor)
}
}
@Composable
fun BackIcon(iconColor: Color?) {
fun SimpleBackIcon(iconColor: Color?) {
if (iconColor == null) {
Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack, contentDescription = stringResource(id = R.string.back),
@ -189,9 +189,9 @@ fun BackIcon(iconColor: Color?) {
@Composable
@MyDevices
private fun SettingsScaffoldTopBarPreview() {
private fun SimpleScaffoldTopBarPreview() {
AppThemeSurface {
SettingsScaffoldTopBar(
SimpleScaffoldTopBar(
title = "SettingsScaffoldTopBar",
scrolledColor = Color.Black,
navigationIconInteractionSource = rememberMutableInteractionSource(),

View file

@ -9,11 +9,11 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.compose.extensions.MyDevices
import com.simplemobiletools.commons.compose.lists.SimpleColumnScaffold
import com.simplemobiletools.commons.compose.settings.SettingsGroup
import com.simplemobiletools.commons.compose.settings.SettingsHorizontalDivider
import com.simplemobiletools.commons.compose.settings.SettingsListItem
import com.simplemobiletools.commons.compose.settings.SettingsTitleTextComponent
import com.simplemobiletools.commons.compose.settings.scaffold.SettingsScaffold
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
import com.simplemobiletools.commons.compose.theme.SimpleTheme
@ -27,7 +27,7 @@ internal fun AboutScreen(
socialSection: @Composable () -> Unit,
otherSection: @Composable () -> Unit,
) {
SettingsScaffold(title = stringResource(id = R.string.about), goBack = goBack) {
SimpleColumnScaffold(title = stringResource(id = R.string.about), goBack = goBack) {
aboutSection()
helpUsSection()
socialSection()

View file

@ -17,11 +17,11 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.compose.extensions.MyDevices
import com.simplemobiletools.commons.compose.lists.SimpleLazyListScaffold
import com.simplemobiletools.commons.compose.settings.SettingsGroupTitle
import com.simplemobiletools.commons.compose.settings.SettingsHorizontalDivider
import com.simplemobiletools.commons.compose.settings.SettingsListItem
import com.simplemobiletools.commons.compose.settings.SettingsTitleTextComponent
import com.simplemobiletools.commons.compose.settings.scaffold.SettingsLazyScaffold
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
import com.simplemobiletools.commons.compose.theme.SimpleTheme
import com.simplemobiletools.commons.models.LanguageContributor
@ -36,7 +36,7 @@ internal fun ContributorsScreen(
showContributorsLabel: Boolean,
contributors: ImmutableList<LanguageContributor>
) {
SettingsLazyScaffold(
SimpleLazyListScaffold(
title = { scrolledColor ->
Text(
text = stringResource(id = R.string.contributors),

View file

@ -21,8 +21,8 @@ import androidx.compose.ui.unit.sp
import androidx.compose.ui.viewinterop.AndroidView
import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.compose.extensions.MyDevices
import com.simplemobiletools.commons.compose.lists.SimpleLazyListScaffold
import com.simplemobiletools.commons.compose.settings.SettingsHorizontalDivider
import com.simplemobiletools.commons.compose.settings.scaffold.SettingsLazyScaffold
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
import com.simplemobiletools.commons.compose.theme.SimpleTheme
import com.simplemobiletools.commons.extensions.removeUnderlines
@ -35,7 +35,7 @@ internal fun FAQScreen(
goBack: () -> Unit,
faqItems: ImmutableList<FAQItem>,
) {
SettingsLazyScaffold(
SimpleLazyListScaffold(
title = stringResource(id = R.string.frequently_asked_questions),
goBack = goBack,
contentPadding = PaddingValues(bottom = SimpleTheme.dimens.margin.medium)

View file

@ -12,8 +12,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.compose.extensions.MyDevices
import com.simplemobiletools.commons.compose.lists.SimpleLazyListScaffold
import com.simplemobiletools.commons.compose.settings.SettingsHorizontalDivider
import com.simplemobiletools.commons.compose.settings.scaffold.SettingsLazyScaffold
import com.simplemobiletools.commons.compose.theme.AppThemeSurface
import com.simplemobiletools.commons.compose.theme.SimpleTheme
import com.simplemobiletools.commons.helpers.*
@ -27,7 +27,7 @@ internal fun LicenseScreen(
thirdPartyLicenses: ImmutableList<License>,
onLicenseClick: (urlId: Int) -> Unit,
) {
SettingsLazyScaffold(
SimpleLazyListScaffold(
title = stringResource(id = R.string.third_party_licences),
goBack = goBack
) {

View file

@ -44,12 +44,12 @@ import androidx.compose.ui.unit.sp
import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.compose.components.SimpleDropDownMenuItem
import com.simplemobiletools.commons.compose.extensions.*
import com.simplemobiletools.commons.compose.lists.*
import com.simplemobiletools.commons.compose.menus.ActionItem
import com.simplemobiletools.commons.compose.menus.ActionMenu
import com.simplemobiletools.commons.compose.menus.OverflowMode
import com.simplemobiletools.commons.compose.settings.SettingsCheckBoxComponent
import com.simplemobiletools.commons.compose.settings.SettingsHorizontalDivider
import com.simplemobiletools.commons.compose.settings.scaffold.*
import com.simplemobiletools.commons.compose.system_ui_controller.rememberSystemUiController
import com.simplemobiletools.commons.compose.theme.*
import com.simplemobiletools.commons.compose.theme.model.Theme
@ -96,7 +96,7 @@ internal fun ManageBlockedNumbersScreen(
clearSelection()
}
SettingsLazyScaffold(
SimpleLazyListScaffold(
darkStatusBarIcons = !isInActionMode,
customTopBar = { scrolledColor: Color,
navigationInteractionSource: MutableInteractionSource,
@ -470,7 +470,7 @@ private fun ActionModeToolbar(
},
navigationIcon = {
SettingsNavigationIcon(navigationIconInteractionSource = navigationIconInteractionSource, goBack = onBackClick, iconColor = textColor)
SimpleNavigationIcon(navigationIconInteractionSource = navigationIconInteractionSource, goBack = onBackClick, iconColor = textColor)
},
actions = {
BlockedNumberActionMenu(selectedIdsCount = selectedIdsCount, onDelete = onDelete, onCopy = onCopy, iconColor = textColor)
@ -543,7 +543,7 @@ private fun NonActionModeToolbar(
onImportBlockedNumbers: () -> Unit,
onExportBlockedNumbers: () -> Unit
) {
SettingsScaffoldTopBar(
SimpleScaffoldTopBar(
title = { scrolledTextColor ->
Text(
text = stringResource(id = R.string.manage_blocked_numbers),

View file

@ -722,7 +722,7 @@
<string name="widgets">Виџети</string>
<string name="use_same_snooze">Увек користи исто време за успављивање</string>
<string name="snooze_time">Време успављивања</string>
<string name="vibrate_on_button_press">Вибрирајте притиснути дугметом</string>
<string name="vibrate_on_button_press">Вибрација при притиску на дугме</string>
<string name="move_items_into_recycle_bin">Премести ставке у канту за отпатке уместо брисања</string>
<string name="recycle_bin_cleaning_interval">Временски интервал за чишћење канте за отпатке</string>
<string name="empty_recycle_bin">Испразни канту за смеће</string>
@ -1153,7 +1153,7 @@
<string name="trial_expires_soon">Your trial expires soon.</string>
<string name="unlock_for_one_final_day">Unlock the app for one final day</string>
<string name="welcome_to_app_name">Welcome to %s!</string>
<string name="trial_start_description">Thank you for using our app. You can use this unlocked version for &lt;font color=\'#FFFFFF\'>%d days&lt;/font>. Once the trial ends, please consider upgrading to the Pro version. It has a huge amount of new features, modern design, no ads and many other improvements.
<string name="trial_start_description">Thank you for using our app. You can use this unlocked version for &lt;font color=\'#FFFFFF\'&gt;%d days&lt;/font&gt;. Once the trial ends, please consider upgrading to the Pro version. It has a huge amount of new features, modern design, no ads and many other improvements.
\n\nYou just have to pay for it once in a lifetime and if you won\'t be satisfied, you can uninstall it and get a refund.\n\nHope you\'ll like it :)</string>
<string name="trial_end_description">Please upgrade to the Pro version to enjoy the app to the fullest.\n\nYou just have to pay for it once in a lifetime and if you won\'t be satisfied, you can uninstall it and get a refund.\n\nSee you there :)</string>
<plurals name="trial_expires_days">
@ -1165,4 +1165,4 @@
<string name="pro_app_refund">Не заборавите да ако деинсталирате било коју плаћену апликацију у року од 2 сата, новац ће вам аутоматски бити враћен. Ако желите повраћај новца било када касније, само нас контактирајте на hello@simplemobiletools.com и добићете га. То олакшава испробавање :)</string>
<!-- Description of our developer profile on Google Play, it can have max 140 characters -->
<string name="developer_description">Група једноставних Андроид апликација отвореног кода са прилагодљивим виџетима, без огласа и непотребних дозвола.</string>
</resources>
</resources>

View file

@ -2,7 +2,7 @@
<resources>
<string name="ok">OK</string>
<string name="cancel">Hủy bỏ</string>
<string name="close">Close</string>
<string name="close">Đóng</string>
<string name="back">Quay lại</string>
<string name="nothing">Không có gì</string>
<string name="later">Sau</string>
@ -49,7 +49,7 @@
<string name="no_phone_call_permission">Ứng dụng không có quyền thực hiện cuộc gọi điện thoại, vui lòng cấp quyền đó trong cài đặt thiết bị</string>
<string name="insert_text_here">Chèn văn bản vào đây</string>
<string name="call_person">Gọi %s</string>
<string name="confirm_calling_person">Confirm calling %s</string>
<string name="confirm_calling_person">Xác nhận gọi %s</string>
<string name="zero">Zero</string>
<string name="one">One</string>
<string name="two">Hai</string>
@ -68,16 +68,16 @@
<string name="disclaimer">Từ chối trách nhiệm</string>
<string name="take_photo">Chụp ảnh</string>
<string name="choose_photo">Chọn hình ảnh</string>
<string name="choose_video">Choose video</string>
<string name="choose_contact">Choose contact</string>
<string name="choose_file">Choose file</string>
<string name="choose_video">Chọn video</string>
<string name="choose_contact">Chọn liên hệ</string>
<string name="choose_file">Chọn tập tin</string>
<string name="record_audio">Ghi âm</string>
<string name="record_video">Quay video</string>
<string name="updating">Đang cập nhật…</string>
<string name="phone_storage">Bộ nhớ điện thoại</string>
<string name="phone_storage_hidden">Bộ nhớ điện thoại (không hiển thị bởi các ứng dụng khác)</string>
<string name="audio">Audio</string>
<string name="scanning">Scanning</string>
<string name="scanning">Đang quét</string>
<!-- Events -->
<string name="birthday">Ngày sinh nhật</string>
<string name="anniversary">Dịp kỉ niệm</string>
@ -87,22 +87,22 @@
<!-- Phone numbers -->
<string name="mobile">Mobile</string>
<string name="main_number">Chính</string>
<string name="work_fax">Work Fax</string>
<string name="work_fax">Fax công việc</string>
<string name="home_fax">Home Fax</string>
<string name="pager">Pager</string>
<string name="no_phone_number_found">No phone number has been found</string>
<string name="no_phone_number_found">Không có số điện thoại nào được tìm thấy</string>
<!-- View types -->
<string name="change_view_type">Thay đổi kiểu xem</string>
<string name="grid">Lưới</string>
<string name="grid_pro">Lưới (Pro)</string>
<string name="uneven_grid">Uneven Grid</string>
<string name="uneven_grid">Ô không đồng đều</string>
<string name="list">Danh sách</string>
<string name="increase_column_count">Tăng số lượng cột</string>
<string name="reduce_column_count">Giảm số lượng cột</string>
<string name="column_count">Column count</string>
<string name="row_count">Row count</string>
<string name="portrait_column_count">Portrait column count</string>
<string name="landscape_column_count">Landscape column count</string>
<string name="column_count">Số cột</string>
<string name="row_count">Số hàng</string>
<string name="portrait_column_count">Số cột màn hình dọc</string>
<string name="landscape_column_count">Số cột màn hình ngang</string>
<string name="change_cover_image">Thay đổi ảnh bìa</string>
<string name="select_photo">Chọn ảnh</string>
<plurals name="column_counts">
@ -114,29 +114,29 @@
<item quantity="other">%d rows</item>
</plurals>
<!-- Blocked numbers -->
<string name="manage_blocked_numbers">Manage blocked numbers</string>
<string name="not_blocking_anyone">You are not blocking anyone.</string>
<string name="add_a_blocked_number">Add a blocked number</string>
<string name="manage_blocked_numbers">Quản lý số bị chặn</string>
<string name="not_blocking_anyone">Bạn hiện tại không chặn ai.</string>
<string name="add_a_blocked_number">Thêm số bị chặn</string>
<string name="block_number">Block number</string>
<string name="block_numbers">Block numbers</string>
<string name="blocked_numbers">Blocked numbers</string>
<string name="export_blocked_numbers">Export blocked numbers</string>
<string name="import_blocked_numbers">Import blocked numbers</string>
<string name="must_make_default_dialer">You have to make this app the default dialer app to make use of blocked numbers.</string>
<string name="block_numbers">Chặn số</string>
<string name="blocked_numbers">Số bị chặn</string>
<string name="export_blocked_numbers">Xuất số bị chặn</string>
<string name="import_blocked_numbers">Nhập số bị chặn</string>
<string name="must_make_default_dialer">Bạn cần phải đặt ứng dụng này thành ứng dụng quay số mặc định để có thể chặn số điện thoại.</string>
<string name="set_as_default">Set as default</string>
<string name="block_confirmation">Are you sure you want to block \"%s\"?</string>
<string name="block_not_stored_calls">Block calls from not stored contacts</string>
<string name="block_hidden_calls">Block calls from hidden numbers</string>
<string name="block_not_stored_messages">Block messages from not stored contacts</string>
<string name="block_hidden_messages">Block messages from hidden numbers</string>
<string name="add_blocked_number_helper_text">Enter a number or a pattern (e.g. *12345*, +1*8888) to block all calls and messages from numbers matching the pattern.</string>
<string name="must_make_default_caller_id_app">Can\'t block unknown numbers without caller ID permission.</string>
<string name="block_confirmation">Bạn có chắc là muốn chặn \"%s\"\?</string>
<string name="block_not_stored_calls">Chặn cuộc gọi từ liên hệ không có trong danh bạ lưu trữ</string>
<string name="block_hidden_calls">Chặn cuộc gọi từ số ẩn</string>
<string name="block_not_stored_messages">Chặn tin nhắn từ số không có trong danh bạ lưu trữ</string>
<string name="block_hidden_messages">Chặn tin nhắn từ số ẩn</string>
<string name="add_blocked_number_helper_text">Nhập một số hoặc mẫu (vd: *12345*, +1*8888) để chặn tất cả các cuộc gọi và tin nhắn từ các số khớp với mẫu.</string>
<string name="must_make_default_caller_id_app">Không thể chặn số chưa biết mà không có quyền ID người gọi.</string>
<string name="block_contact">Block contact</string>
<string name="block_contact_success">Contact blocked</string>
<string name="block_contact_fail">Contact could not be blocked</string>
<string name="unblock_contact">Unblock contact</string>
<string name="unblock_contact_success">Contact unblocked</string>
<string name="unblock_contact_fail">Contact could not be unblocked</string>
<string name="block_contact_success">Đã chặn liên hệ</string>
<string name="block_contact_fail">Liên hệ không thể bị chặn</string>
<string name="unblock_contact">Bỏ chặn liên hệ</string>
<string name="unblock_contact_success">Đã bỏ chặn liên hệ</string>
<string name="unblock_contact_fail">Không thể bỏ chặn liên hệ</string>
<!-- Favorites -->
<string name="favorites">Yêu thích</string>
<string name="add_favorites">Thêm mục yêu thích</string>
@ -144,26 +144,26 @@
<string name="remove_from_favorites">Loại bỏ khỏi mục ưa thích</string>
<!-- Search -->
<string name="search">Tìm kiếm</string>
<string name="search_in_placeholder">Search in %s</string>
<string name="search_in_placeholder">Tìm trong %s</string>
<string name="type_2_characters">Nhập ít nhất 2 ký tự để bắt đầu tìm kiếm.</string>
<string name="show_search">Show a search bar</string>
<string name="show_search">Hiển thị thanh tìm kiếm</string>
<string name="search_contacts">Tìm liên hệ</string>
<string name="search_favorites">Tìm kiếm yêu thích</string>
<string name="search_apps">Search apps</string>
<string name="search_events">Search events</string>
<string name="search_apps">Tìm kiếm ứng dụng</string>
<string name="search_events">Tìm kiếm sự kiện</string>
<string name="search_groups">Tìm nhóm</string>
<string name="search_history">Search history</string>
<string name="search_calls">Search calls</string>
<string name="search_files">Search files</string>
<string name="search_folders">Search folders</string>
<string name="search_files_and_folders">Search files and folders</string>
<string name="search_playlists">Search playlists</string>
<string name="search_artists">Search artists</string>
<string name="search_albums">Search albums</string>
<string name="search_tracks">Search tracks</string>
<string name="search_text">Search text</string>
<string name="search_conversations">Search conversations</string>
<string name="search_recordings">Search recordings</string>
<string name="search_history">Tìm kiếm lịch sử</string>
<string name="search_calls">Tìm kiếm cuộc gọi</string>
<string name="search_files">Tìm kiếm tập tin</string>
<string name="search_folders">Tìm kiếm thư mục</string>
<string name="search_files_and_folders">Tìm kiếm tập tin và thư mục</string>
<string name="search_playlists">Tìm kiếm danh sách phát</string>
<string name="search_artists">Tìm kiếm nghệ sĩ</string>
<string name="search_albums">Tìm kiếm album</string>
<string name="search_tracks">Tìm kiếm bản nhạc</string>
<string name="search_text">Tìm kiếm văn bản</string>
<string name="search_conversations">Tìm kiếm cuộc hội thoại</string>
<string name="search_recordings">Tìm kiếm bản ghi</string>
<!-- Filters -->
<string name="filter">Bộ lọc</string>
<string name="filter_pro">Bộ lọc (Pro)</string>
@ -174,20 +174,20 @@
<string name="no_contacts_permission">Cần quyền truy cập danh bạ</string>
<string name="no_camera_permissions">Cần quyền truy cập máy ảnh</string>
<string name="no_audio_permissions">Cần quyền truy cập âm thanh</string>
<string name="no_permission">No permission</string>
<string name="allow_notifications_reminders">You must allow the app displaying notifications, else it cannot show reminders.</string>
<string name="allow_full_screen_notifications_reminders">You must allow the app displaying full screen notifications, else you may miss some reminders.</string>
<string name="allow_notifications_files">You must allow the app displaying notifications, else it cannot show the progress bar.</string>
<string name="allow_notifications_music_player">You must allow the app displaying notifications, else it cannot play songs.</string>
<string name="allow_notifications_voice_recorder">You must allow the app displaying notifications, else it cannot record audio.</string>
<string name="allow_notifications_incoming_calls">You must allow the app displaying notifications, else it cannot show incoming calls.</string>
<string name="allow_full_screen_notifications_incoming_calls">You must allow the app displaying full screen notifications, else you may miss some incoming calls.</string>
<string name="allow_notifications_incoming_messages">You must allow the app displaying notifications, else it cannot show incoming messages.</string>
<string name="allow_alarm_scheduled_messages">You must allow the app accessing internal alarms, else it cannot send scheduled messages.</string>
<string name="allow_alarm_sleep_timer">You must allow the app accessing internal alarms, else it cannot turn off the application after sleep timer.</string>
<string name="allow_location_permission">You must allow the app accessing your location, else it won\'t know it.</string>
<string name="grant_permission">Grant Permission</string>
<string name="permission_required">Permission Required</string>
<string name="no_permission">Không có quyền</string>
<string name="allow_notifications_reminders">Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không thể hiển thị lời nhắc.</string>
<string name="allow_full_screen_notifications_reminders">Bạn cần phải cho phép ứng dụng hiển thị thông báo toàn màn hình, nếu không bạn có thể bỏ lở một vài lời nhắc.</string>
<string name="allow_notifications_files">Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không thể hiển thị thanh tiến trình.</string>
<string name="allow_notifications_music_player">Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không thể phát bài hát.</string>
<string name="allow_notifications_voice_recorder">Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không thể ghi âm.</string>
<string name="allow_notifications_incoming_calls">Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không thể hiển thị cuộc gọi đến.</string>
<string name="allow_full_screen_notifications_incoming_calls">Bạn cần phải cho phép ứng dụng hiển thị thông báo toàn màn hình, nếu không bạn có thể sẽ bỏ lỡ một vài cuộc gọi đến.</string>
<string name="allow_notifications_incoming_messages">Bạn cần phải cho phép ứng dụng hiển thị thông báo, nếu không ứng dụng không hiển thị tin nhắn đến.</string>
<string name="allow_alarm_scheduled_messages">Bạn cần phải cho phép ứng dụng truy cập báo thức nội bộ, nếu không ứng dụng không thể gửi tin nhắn được lên lịch.</string>
<string name="allow_alarm_sleep_timer">Bạn cần phải cho phép ứng dụng truy cập báo thức nội bộ, nếu không ứng dụng không thể tắt ứng dụng sau khi hẹn giờ ngủ.</string>
<string name="allow_location_permission">Bạn cần phải cho phép ứng dụng truy cập vị trí của bạn, nếu không ứng dụng sẽ không biết được vị trí của bạn.</string>
<string name="grant_permission">Cấp quyền</string>
<string name="permission_required">Yêu cầu quyền</string>
<!-- Renaming -->
<string name="rename_file">Đổi tên tập tin</string>
<string name="rename_folder">Đổi tên thư mục</string>
@ -209,10 +209,10 @@
<string name="pattern_renaming">Mẫu</string>
<string name="string_to_add">Chuỗi để thêm</string>
<string name="rename_date_time_pattern">%Y - năm\n%M - tháng\n%D - ngày\n%h - giờ\n%m - phút\n%s - giây\n%i - số tăng từ 1</string>
<string name="filename_without_txt">Filename (without .txt)</string>
<string name="filename_without_json">Filename (without .json)</string>
<string name="filename_without_zip">Filename (without .zip)</string>
<string name="cannot_hide_files">Starting from Android 11 you cannot hide files and folders like that anymore</string>
<string name="filename_without_txt">Tên tập tin (không có đuôi .txt)</string>
<string name="filename_without_json">Tên tập tin (không có đuôi .json)</string>
<string name="filename_without_zip">Tên tập tin (không có đuôi .zip)</string>
<string name="cannot_hide_files">Bắt đầu từ Android 11, bạn không thể ẩn tập tin và thư mục như thế được nữa</string>
<!-- Copy / Move -->
<string name="copy">Sao chép</string>
<string name="move">Di chuyển</string>
@ -229,11 +229,11 @@
<string name="copy_failed">Không thể sao chép các tập tin</string>
<string name="copying">Đang sao chép... </string>
<string name="copying_success">Tập tin được sao chép thành công</string>
<string name="copying_success_one">File copied successfully</string>
<string name="copying_success_one">Tập tin được sao chép thành công</string>
<string name="copy_move_failed">Đã xảy ra lỗi</string>
<string name="moving">Di chuyển... </string>
<string name="moving">Di chuyển</string>
<string name="moving_success">Tập tin đã được chuyển thành công</string>
<string name="moving_success_one">File moved successfully</string>
<string name="moving_success_one">Tập tin được di chuyển thành công</string>
<string name="moving_success_partial">Một số tệp không thể di chuyển</string>
<string name="copying_success_partial">Một số tệp không thể sao chép</string>
<string name="no_files_selected">Không có tập tin nào được chọn</string>
@ -242,7 +242,7 @@
<string name="could_not_create_file">Không thể tạo tệp %s</string>
<string name="no_new_items">Không có mục mới được tìm thấy</string>
<string name="no_space">Đích đến không có đủ dung lượng khả dụng.\nRequired %1$s, khả dụng %2$s</string>
<string name="system_service_disabled">System service for selecting files and folders is unavailable</string>
<string name="system_service_disabled">Dịch vụ hệ thống để chọn tập tin và thư mục không khả dụng</string>
<!-- Create new -->
<string name="create_new">Tạo mới</string>
<string name="folder">Thư mục</string>
@ -259,27 +259,27 @@
<string name="merge">Kết hợp</string>
<string name="keep_both">Giữ cả hai</string>
<string name="overwrite">Ghi đè</string>
<string name="skip">Skip</string>
<string name="skip">Bỏ qua</string>
<string name="append">Nối với \'_1\'</string>
<string name="apply_to_all">Áp dụng cho tất cả</string>
<string name="system_folder_restriction">The system does not allow the operation in this folder, please pick another one</string>
<string name="system_folder_copy_restriction">The system does not allow copying into this folder, please pick another one</string>
<string name="rename_in_sd_card_system_restriction">The system does not allow renaming in this folder</string>
<string name="rename_internal_system_restriction">Cannot rename folders directly on internal storage, only subfolders</string>
<string name="system_folder_restriction">Hệ thống không cho phép thao tác tại thư mục này, vui lòng chọn một thư mục khác</string>
<string name="system_folder_copy_restriction">Hệ thống không cho phép sao chép vào thư mục này, vui lòng chọn thư mục khác</string>
<string name="rename_in_sd_card_system_restriction">Hệ thống không cho phép đổi tên trong thư mục này</string>
<string name="rename_internal_system_restriction">Không thể đổi tên thư mục trực tiếp trên bộ nhớ trong, chỉ các thư mục con</string>
<string name="cannot_rename_folder">Không thể đổi tên thư mục này</string>
<!-- File picker -->
<string name="select_folder">Chọn một thư mục</string>
<string name="select_file">Chọn một tập tin</string>
<string name="confirm_storage_access_title">Xác nhận truy cập bộ nhớ ngoài</string>
<string name="confirm_folder_access_title">Confirm folder access</string>
<string name="confirm_folder_access_title">Xác nhận quyền truy cập thư mục</string>
<string name="confirm_storage_access_text">Vui lòng chọn thư mục trên cùng của thẻ SD trên màn hình tiếp theo, để cấp quyền truy cập ghi</string>
<string name="confirm_storage_access_text_sd">Nếu bạn không thấy thẻ SD, hãy thử điều này</string>
<string name="confirm_storage_access_android_text">Please allow the app accessing the selected storage on the next screen by pressing \'Use this folder\' at the bottom.</string>
<string name="confirm_storage_access_android_text_specific">Please allow accessing \'&lt;b&gt;%s&lt;/b&gt;\' on the next screen by pressing \'&lt;b&gt;Use this folder&lt;/b&gt;\' at the bottom.</string>
<string name="confirm_create_doc_for_new_folder_text">Please press \'&lt;b&gt;Save&lt;/b&gt;\' at the bottom of the next screen to create the new folder.</string>
<string name="confirm_storage_access_android_text">Vui lòng cho phép ứng dụng truy cập vào bộ nhớ đã chọn trên màn hình tiếp theo bằng cách nhấn \'Sử dụng thư mục này\' ở dưới cùng.</string>
<string name="confirm_storage_access_android_text_specific">Vui lòng cho phép \'<b>%s</b>\' trên màn hình tiếp theo bằng cách nhấn \'<b>Sử dụng thư mục này</b>\' ở dưới cùng.</string>
<string name="confirm_create_doc_for_new_folder_text">Vui lòng nhấn \'<b>Lưu</b>\' ở dưới cùng của màn hình tiếp theo để tạo thư mục mới.</string>
<string name="confirm_selection">Xác nhận lựa chọn</string>
<string name="loading">Loading</string>
<string name="access_storage_prompt">Please grant our app access to all your files, it might not work well without it.</string>
<string name="loading">Đang tải</string>
<string name="access_storage_prompt">Vui lòng cấp quyền cho ứng dụng của chúng tôi để truy cập mọi tập tin của bạn, ứng dụng có thể không hoạt động ổn định nếu không có quyền đó.</string>
<plurals name="items">
<item quantity="one">%d item</item>
<item quantity="other">%d items</item>
@ -300,16 +300,16 @@
</plurals>
<!-- Storages -->
<string name="select_storage">Chọn nơi lưu trữ</string>
<string name="storage">Storage</string>
<string name="storage">Bộ nhớ</string>
<string name="internal">Bộ nhớ trong</string>
<string name="internal_storage">Internal Storage</string>
<string name="internal_storage">Bộ nhớ trong</string>
<string name="sd_card">Thẻ SD</string>
<string name="root">Root</string>
<string name="wrong_root_selected">Đã chọn sai thư mục, vui lòng chọn thư mục gốc của thẻ SD của bạn</string>
<string name="sd_card_usb_same">Đường dẫn thẻ SD và thiết bị USB không thể giống nhau</string>
<string name="app_on_sd_card">Bạn dường như đã cài đặt ứng dụng trên thẻ SD, điều đó làm cho các widget ứng dụng không khả dụng. Bạn thậm chí sẽ không nhìn thấy chúng trong danh sách các widget có sẵn.
         Đây là một giới hạn hệ thống, vì vậy nếu bạn muốn sử dụng các widget, bạn phải di chuyển ứng dụng vào bộ nhớ trong.</string>
<string name="wrong_folder_selected">Wrong folder selected, please select path \'%s\'</string>
<string name="wrong_folder_selected">Chọn sai thư mục, vui lòng chọn đường dẫn \'%s\'</string>
<!-- File properties -->
<string name="properties">Chi tiết</string>
<string name="path">Đường dẫn</string>
@ -325,20 +325,20 @@
<string name="exposure_time">Thời gian phơi sáng</string>
<string name="iso_speed">Tốc độ ISO</string>
<string name="f_number">F-number</string>
<string name="camera">Camera</string>
<string name="camera">Máy ảnh</string>
<string name="exif">EXIF</string>
<string name="song_title">Tên bài hát</string>
<string name="gps_coordinates">tọa độ GPS</string>
<string name="altitude">Độ cao</string>
<string name="remove_exif">Remove EXIF</string>
<string name="remove_exif_confirmation">Are you sure you want to remove EXIF values like GPS coordinates, camera model etc?</string>
<string name="exif_removed">EXIF values removed successfully</string>
<string name="remove_exif">Xóa EXIF</string>
<string name="remove_exif_confirmation">Bạn có chắc là muốn xóa giá trị EXIF như tọa độ GPS, kiểu máy ảnh,... không\?</string>
<string name="exif_removed">Giá trị EXIF đã được xóa thành công</string>
<!-- Color customization -->
<string name="background_color">Màu nền</string>
<string name="text_color">Màu văn bản</string>
<string name="primary_color">Màu chính</string>
<string name="accent_color_white">Accent color of white theme</string>
<string name="accent_color_black_and_white">Accent color of Black &amp; White theme</string>
<string name="accent_color_white">Màu nhấn của chủ đề màu chắn</string>
<string name="accent_color_black_and_white">Màu nhấn của chủ đề Đen &amp; Trắng</string>
<string name="foreground_color">Màu nền</string>
<string name="app_icon_color">Màu biểu tượng ứng dụng</string>
<string name="bottom_navigation_bar_color">Màu thanh điều hướng phía dưới</string>
@ -358,7 +358,7 @@
<string name="app_icon_color_warning">CẢNH BÁO: Một số trình khởi chạy không xử lý tùy chỉnh biểu tượng ứng dụng đúng cách. Trong trường hợp biểu tượng biến mất, hãy thử khởi chạy ứng dụng qua Google Play hoặc một số tiện ích, nếu có.
         Sau khi khởi chạy, chỉ cần đặt lại biểu tượng màu cam mặc định #F57C00. Bạn có thể phải cài đặt lại ứng dụng trong trường hợp xấu nhất.</string>
<string name="share_colors_success">Màu sắc được cập nhật thành công. Một chủ đề mới có tên \'Shared\' đã được thêm vào, vui lòng sử dụng chủ đề đó để cập nhật tất cả các màu của ứng dụng trong tương lai.</string>
<string name="shared_theme_note">Note that even though you are using the Pro app version, you still need Simple Thank You for technical reasons. It takes care of the color synchronization.</string>
<string name="shared_theme_note">Chú ý rằng mặc dù bạn đang dùng phiên bản Pro, bạn vẫn cần Simple Cám ơn vì lý do kỹ thuật. Nó đảm nhiệm việc đồng bộ hóa màu sắc.</string>
<string name="purchase_thank_you">
<![CDATA[
Làm ơn hãy mua ứng dụng <a href="https://play.google.com/store/apps/details?id=com.simplemobiletools.thankyou">Simple Thank You</a> để mở khóa tính năng này và hỗ trợ nhà phát triển. Cảm ơn!
@ -368,7 +368,7 @@
<string name="light_theme">Sáng</string>
<string name="dark_theme">Tối</string>
<string name="auto_theme">Auto</string>
<string name="auto_light_dark_theme">Auto light / dark</string>
<string name="auto_light_dark_theme">Sáng / tối tự động</string>
<string name="solarized">Solarized</string>
<string name="dark_red">Đỏ sẫm</string>
<string name="white">White</string>
@ -377,8 +377,8 @@
<string name="shared">Đã chia sẻ</string>
<string name="system_default">System default</string>
<!-- What's new -->
<string name="whats_new">Có gì mới ? </string>
<string name="whats_new_disclaimer">* chỉ các bản cập nhật lớn hơn được liệt kê ở đây, luôn luôn cũng có một số cải tiến nhỏ hơn</string>
<string name="whats_new">Có gì mới</string>
<string name="whats_new_disclaimer">* chỉ các bản cập nhật lớn được liệt kê ở đây, luôn luôn cũng có một số cải tiến nhỏ</string>
<!-- Actionbar items -->
<string name="delete">Xóa bỏ</string>
<string name="remove">Xóa</string>
@ -387,50 +387,50 @@
<string name="share_via">Chia sẻ qua</string>
<string name="resize">Thay đổi kích thước</string>
<string name="select_all">Chọn tất cả</string>
<string name="select_text">Select text</string>
<string name="select_text">Chọn văn bản</string>
<string name="hide">Ẩn</string>
<string name="unhide">Bỏ ẩn</string>
<string name="hide_folder">Ẩn thư mục</string>
<string name="unhide_folder">Bỏ ẩn thư mục</string>
<string name="temporarily_show_hidden">Tạm thời hiển thị mục đã ẩn</string>
<string name="stop_showing_hidden">Dừng hiển thị mục đã ẩn</string>
<string name="allow_access_more_media">Allow access to more media</string>
<string name="allow_access_more_media">Cho phép truy cập nhiều phương tiện hơn</string>
<string name="maximum_share_reached">Bạn không thể chia sẻ nhiều nội dung này cùng một lúc</string>
<string name="empty_and_disable_recycle_bin">Làm trống và tắt Thùng rác</string>
<string name="undo">Hoàn tác</string>
<string name="redo">Khôi phục</string>
<string name="print">In</string>
<string name="print_pro">In (Pro)</string>
<string name="shortcut">Shortcut</string>
<string name="shortcut">Phím tắt</string>
<string name="create_shortcut">Tạo phím tắt</string>
<string name="create_shortcut_pro">Tạo phím tắt (Pro)</string>
<string name="add_number_to_contact">Thêm số để liên hệ</string>
<string name="view_contact_details">View contact details</string>
<string name="call_from_sim_1">Call from SIM 1</string>
<string name="call_from_sim_2">Call from SIM 2</string>
<string name="call_from_sim_1">Gọi từ SIM 1</string>
<string name="call_from_sim_2">Gọi từ SIM 2</string>
<string name="toggle_filename">Chuyển đổi khả năng hiển thị tên tệp</string>
<string name="move_to_top">Move to the top</string>
<string name="move_to_bottom">Move to the bottom</string>
<string name="move_to_top">Di chuyển lên trên cùng</string>
<string name="move_to_bottom">Di chuyển xuống dưới cùng</string>
<string name="pin_item">Pin item</string>
<string name="unpin_item">Unpin item</string>
<string name="unpin_item">Bỏ ghim mục</string>
<string name="send_sms">Send SMS</string>
<string name="send_email">Send email</string>
<string name="call">Call</string>
<string name="call">Gọi</string>
<string name="contact_details">Contact details</string>
<string name="add_contact">Add contact</string>
<string name="wallpapers">Wallpapers</string>
<string name="show_line_numbers">Show line numbers</string>
<string name="hide_line_numbers">Hide line numbers</string>
<string name="sleep_timer">Sleep timer</string>
<string name="unblock">Unblock</string>
<string name="wallpapers">Hình nền</string>
<string name="show_line_numbers">Hiển thị số dòng</string>
<string name="hide_line_numbers">Ẩn số dòng</string>
<string name="sleep_timer">Hẹn giờ ngủ</string>
<string name="unblock">Bỏ chặn</string>
<!-- Sorting -->
<string name="sort_by">Sắp xếp theo</string>
<string name="name">Tên</string>
<string name="size">Kích thước</string>
<string name="last_modified">Sửa đổi lần cuối</string>
<string name="date_created">Date created</string>
<string name="date_created">Ngày tạo</string>
<string name="date_taken">Ngày chụp</string>
<string name="date_added">Date added</string>
<string name="date_added">Ngày thêm</string>
<string name="title">Tiêu đề</string>
<string name="filename">Tên tệp</string>
<string name="extension">Phần mở rộng</string>
@ -440,13 +440,13 @@
<string name="descending">Giảm dần</string>
<string name="use_for_this_folder">Chỉ sử dụng cho thư mục này</string>
<string name="sort_numeric_parts">Sắp xếp các phần số theo giá trị thực</string>
<string name="first_name">First name</string>
<string name="first_name">Tên</string>
<string name="middle_name">Middle name</string>
<string name="surname">Surname</string>
<string name="surname">Họ</string>
<string name="full_name">Full name</string>
<string name="use_custom_sorting">Use custom sorting</string>
<string name="change_order">Change order</string>
<string name="more_options">More options</string>
<string name="use_custom_sorting">Sử dụng sắp xếp tùy chỉnh</string>
<string name="change_order">Thay đổi thứ tự</string>
<string name="more_options">Thêm tùy chọn</string>
<!-- Confirmation dialog -->
<string name="proceed_with_deletion">Bạn có chắc chắn muốn tiến hành xóa?</string>
<!-- Are you sure you want to delete 5 items? -->
@ -457,7 +457,7 @@
<string name="are_you_sure_delete">Bạn có chắc bạn muốn xóa mục này?</string>
<string name="are_you_sure_recycle_bin">Bạn có chắc chắn muốn chuyển mục này vào Thùng rác không?</string>
<string name="do_not_ask_again">Đừng hỏi lại trong phần này</string>
<string name="do_not_show_again">Do not show again</string>
<string name="do_not_show_again">Không hiện lại</string>
<string name="yes"></string>
<string name="no">Không</string>
<string name="maybe">Có lẽ</string>
@ -470,19 +470,20 @@
<string name="enter_pin">Nhập PIN</string>
<string name="please_enter_pin">Vui lòng nhập mã PIN</string>
<string name="wrong_pin">PIN sai</string>
<string name="pin_must_be_4_digits_long">PIN must be at least 4 digits long</string>
<string name="too_many_incorrect_attempts">Too many incorrect unlock attempts.\nTry again in %d seconds.</string>
<string name="pin_must_be_4_digits_long">Mã PIN phải dài ít nhất 4 chữ số</string>
<string name="too_many_incorrect_attempts">Quá nhiều lần thử sai.
\nThử lại sau %d giây.</string>
<string name="repeat_pin">Lặp lại mã PIN</string>
<string name="pattern">Mẫu hình</string>
<string name="insert_pattern">Chèn mẫu hình</string>
<string name="wrong_pattern">Mẫu hình sai</string>
<string name="repeat_pattern">Lặp lại mẫu hình</string>
<string name="biometrics">Biometrics</string>
<string name="biometrics">Sinh trắc học</string>
<string name="fingerprint">Vân tay</string>
<string name="add_fingerprint">Thêm dấu vân tay</string>
<string name="place_finger">Vui lòng đặt ngón tay của bạn trên cảm biến vân tay</string>
<string name="open_biometric_dialog">Open biometric ID verification dialog</string>
<string name="authenticate">Authenticate</string>
<string name="open_biometric_dialog">Mở họp thoại xác thực ID sinh trắc học</string>
<string name="authenticate">Xác thực</string>
<string name="authentication_failed">Quá trình xác thực đã thất bại</string>
<string name="authentication_blocked">Xác thực bị chặn, vui lòng thử lại sau giây lát</string>
<string name="no_fingerprints_registered">Bạn chưa đăng ký dấu vân tay, vui lòng thêm trong Cài đặt của thiết bị</string>
@ -496,15 +497,15 @@
<string name="enter_password">Enter password</string>
<string name="password">Password</string>
<string name="add_password">Add password</string>
<string name="empty_password_new">Please enter a password</string>
<string name="empty_password">Please enter the password</string>
<string name="invalid_password">Incorrect password</string>
<string name="empty_password_new">Vui lòng nhập mật khẩu</string>
<string name="empty_password">Vui lòng nhập mật khẩu</string>
<string name="invalid_password">Mật khẩu sai</string>
<!-- Times -->
<string name="yesterday">Hôm qua</string>
<string name="today">Hôm nay</string>
<string name="tomorrow">Ngày mai</string>
<string name="every_day">Every day</string>
<string name="hide_year">Hide year</string>
<string name="every_day">Mỗi ngày</string>
<string name="hide_year">Ẩn năm</string>
<string name="seconds_raw">giây</string>
<string name="minutes_raw">phút</string>
<string name="hours_raw">giờ</string>
@ -631,7 +632,8 @@
<!-- For example: Time remaining till the alarm goes off: 6 hours, 5 minutes -->
<string name="alarm_goes_off_in">Thời gian còn lại cho đến khi báo thức kêu: \n%s</string>
<string name="reminder_triggers_in">Thời gian còn lại cho đến khi nhắc nhở kích hoạt: \n%s</string>
<string name="time_remaining">Time remaining:\n%s</string>
<string name="time_remaining">Thời gian còn lại:
\n%s</string>
<string name="alarm_warning">Hãy chắc chắn rằng báo thức hoạt động đúng trước khi dựa vào nó. Nó có thể hoạt động sai do hạn chế hệ thống liên quan đến tiết kiệm pin.</string>
<string name="reminder_warning">Hãy chắc chắn rằng các lời nhắc hoạt động đúng trước khi dựa vào chúng. Chúng có thể hoạt động sai do hạn chế hệ thống liên quan đến tiết kiệm pin.</string>
<string name="notifications_disabled">Thông báo của ứng dụng này đã bị vô hiệu hóa. Vui lòng vào cài đặt thiết bị của bạn để kích hoạt chúng.</string>
@ -645,22 +647,22 @@
<string name="your_sounds">Âm báo của bạn</string>
<string name="add_new_sound">Thêm một âm báo mới</string>
<string name="no_sound">Không có âm báo</string>
<string name="during_day_at_hh_mm">During the day at hh:mm</string>
<string name="during_day_at">During the day at %02d:%02d</string>
<string name="during_day_at_hh_mm">Trong ngày lúc hh:mm</string>
<string name="during_day_at">Trong ngày lúc %02d:%02d</string>
<!-- Settings -->
<string name="settings">Cài đặt</string>
<string name="purchase_simple_thank_you">Cảm ơn vì đã mua hàng Simple</string>
<string name="general_settings">General</string>
<string name="color_customization">Color customization</string>
<string name="improved_color_customization">Improved color customization</string>
<string name="color_customization">Tùy chỉnh màu sắc</string>
<string name="improved_color_customization">Cải thiện tùy chỉnh màu sắc</string>
<string name="customize_colors">Tùy chỉnh màu sắc</string>
<string name="customize_colors_locked">Tùy chỉnh màu sắc (Locked)</string>
<string name="feature_locked">Locked</string>
<string name="feature_locked">Đã khóa</string>
<string name="customize_widget_colors">Tùy chỉnh màu widget</string>
<string name="customize_notifications">Customize notifications</string>
<string name="customize_notifications">Tùy chỉnh thông báo</string>
<string name="notification_sound">Notification sound</string>
<string name="use_english_language">Sử dụng tiếng anh</string>
<string name="language">Language</string>
<string name="language">Ngôn ngữ</string>
<string name="show_hidden_items">Hiển thị các mục ẩn</string>
<string name="font_size">Cỡ chữ</string>
<string name="small">Nhỏ</string>
@ -678,7 +680,7 @@
<string name="use_24_hour_time_format">Sử dụng định dạng 24 giờ</string>
<string name="change_date_and_time_format">Thay đổi định dạng ngày giờ</string>
<string name="sunday_first">Bắt đầu tuần vào chủ nhật</string>
<string name="start_week_on">Start week on</string>
<string name="start_week_on">Tuần bắt đầu vào</string>
<string name="widgets">Widgets</string>
<string name="use_same_snooze">Luôn luôn sử dụng cùng thời gian báo lại</string>
<string name="snooze_time">Thời gian báo lại</string>
@ -691,41 +693,41 @@
<string name="import_settings">Nhập cài đặt</string>
<string name="settings_exported_successfully">Cài đặt được xuất thành công</string>
<string name="settings_imported_successfully">Cài đặt được nhập thành công</string>
<string name="start_name_with_surname">Start name with surname</string>
<string name="clear_cache">Clear cache</string>
<string name="show_call_confirmation_dialog">Show a call confirmation dialog before initiating a call</string>
<string name="start_name_with_surname">Tên bắt đầu với họ</string>
<string name="clear_cache">Xóa bộ nhớ đệm</string>
<string name="show_call_confirmation_dialog">Hiển thị hộp thoại xác nhận gọi trước khi bắt đầu cuộc gọi</string>
<!-- Setting sections -->
<string name="visibility">Hiển thị</string>
<string name="security">Bảo vệ</string>
<string name="scrolling">Cuộn</string>
<string name="file_operations">Thao tác tập tin</string>
<string name="recycle_bin">Thùng rác</string>
<string name="saving_label">Đang lưu</string>
<string name="saving_label">Đang lưu</string>
<string name="startup">Mở đầu</string>
<string name="text">Văn bản</string>
<string name="migrating">Di chuyển</string>
<string name="quality">Quality</string>
<string name="main_screen">Main screen</string>
<string name="thumbnails">Thumbnails</string>
<string name="quality">Chất lượng</string>
<string name="main_screen">Màn hình chính</string>
<string name="thumbnails">Hình thu nhỏ</string>
<string name="list_view">List view</string>
<!-- Excluding -->
<string name="exclude">Loại trừ</string>
<string name="exclude_folder">Exclude folder</string>
<string name="exclude_folder">Loại trừ thư mục</string>
<string name="excluded_folders">Các thư mục bị loại trừ</string>
<string name="excluded">(loại trừ)</string>
<string name="manage_excluded_folders">Quản lý các thư mục loại trừ</string>
<string name="remove_all">Xóa tất cả</string>
<string name="remove_all_description">Xóa tất cả các thư mục khỏi danh sách loại trừ\? Điều này sẽ không xóa các thư mục.</string>
<string name="temporarily_show_excluded">Temporarily show excluded</string>
<string name="stop_showing_excluded">Stop showing excluded</string>
<string name="temporarily_show_excluded">Tạm thời hiển thị bị loại trừ</string>
<string name="stop_showing_excluded">Ngưng hiển thị bị loại trừ</string>
<!-- Default tab to open -->
<string name="manage_shown_tabs">Manage shown tabs</string>
<string name="default_tab_to_open">Tab to open at app start</string>
<string name="manage_shown_tabs">Quản lý thẻ đang hiển thị</string>
<string name="default_tab_to_open">Thẻ để mở khi bắt đầu ứng dụng</string>
<string name="contacts_tab">Contacts</string>
<string name="favorites_tab">Favorites</string>
<string name="call_history_tab">Call History</string>
<string name="groups_tab">Groups</string>
<string name="last_used_tab">Last used one</string>
<string name="favorites_tab">Yêu thích</string>
<string name="call_history_tab">Lịch sử gọi</string>
<string name="groups_tab">Nhóm</string>
<string name="last_used_tab">Cái được sử dụng cuối cùng</string>
<string name="files_tab">Files</string>
<string name="recent_files_tab">Recent files</string>
<!-- Recycle Bin -->
@ -739,8 +741,8 @@
<string name="moving_recycle_bin_items_disabled">Di chuyển mục trong Thùng rác bị vô hiệu hóa, vui lòng sử dụng Khôi phục</string>
<string name="show_the_recycle_bin">Hiển thị thùng rác</string>
<string name="hide_the_recycle_bin">Ẩn thùng rác</string>
<string name="open_the_recycle_bin">Open the Recycle Bin</string>
<string name="skip_the_recycle_bin">Skip the Recycle Bin, delete files directly</string>
<string name="open_the_recycle_bin">Mở Thùng rác</string>
<string name="skip_the_recycle_bin">Bỏ qua Thùng rác, xóa tập tin trực tiếp</string>
<plurals name="moving_items_into_bin">
<item quantity="one">Moving %d item into the Recycle Bin</item>
<item quantity="other">Moving %d items into the Recycle Bin</item>
@ -755,11 +757,11 @@
<string name="importing_some_entries_failed">Nhập một số mục không thành công</string>
<string name="exporting_some_entries_failed">Xuất một số mục không thành công</string>
<string name="no_entries_for_importing">Không có mục để nhập được tìm thấy</string>
<string name="no_new_entries_for_importing">No new entries for importing have been found</string>
<string name="no_new_entries_for_importing">Không có mục nhập mới để nhập nào được tìm thấy</string>
<string name="no_entries_for_exporting">Không có mục nào để xuất được tìm thấy</string>
<string name="backups">Backups</string>
<string name="enable_automatic_backups">Enable automatic backups</string>
<string name="manage_automatic_backups">Manage automatic backups</string>
<string name="backups">Sao lưu</string>
<string name="enable_automatic_backups">Bật sao lưu tự động</string>
<string name="manage_automatic_backups">Quản lý sao lưu tự động</string>
<string name="date_time_pattern_info">You can use the following patterns to name your file automatically:\n\n%Y - year\n%M - month\n%D - day\n%h - hour\n%m - minute\n%s - second</string>
<!-- OTG devices -->
<string name="usb">USB</string>
@ -833,13 +835,39 @@
<string name="more_info">Thêm thông tin</string>
<string name="upgrade">Nâng cấp</string>
<string name="upgrade_calendar">Bạn phải di chuyển thủ công các sự kiện được lưu trữ cục bộ thông qua xuất trong tệp .ics, sau đó nhập. Bạn có thể tìm thấy cả hai nút xuất / nhập ở menu màn hình chính.</string>
<string name="upgraded_from_free_gallery">Hello,\n\nseems like you just upgraded from the free version. Once you are happy with this one and maybe migrated your settings and favorites over, you can uninstall the old free one to avoid launching it accidentally as you will not need it anymore.\n\nThanks!</string>
<string name="upgraded_from_free_gallery">Xin chào
\n
\ncó vẻ như bạn mới nâng cấp từ phiên bản miễn phí. Một khi bạn cảm thấy hài lòng với ứng dụng này và có lẽ đã di chuyển thông tin cài đặt và yêu thích qua, bạn có thể gỡ cài đặt phiên bản miễn phí để tránh mở nó lên, vì bạn không còn cần nó nữa. Việc đó cũng sẽ ngăn hộp thoại này xuất hiện.
\n
\nCám ơn!</string>
<string name="upgraded_to_pro_gallery">Hello,\n\nseems like you already have the Pro app version too. Once you are happy with it and maybe migrated your settings and favorites over, you can uninstall this one to avoid launching it accidentally as you will not need it anymore.\n\nThanks!</string>
<string name="upgraded_from_free">Hello,\n\nseems like you just upgraded from the free version. Once you are happy with this one and maybe migrated your data over, you can uninstall the old free one to avoid launching it accidentally as you will not need it anymore.\n\nThanks!</string>
<string name="upgraded_from_free">Xin chào
\n
\ncó vẻ như bạn mới nâng cấp từ phiên bản miễn phí. Một khi bạn đã hài lòng với ứng dụng này và có lẽ cũng đã di chuyển dữ liệu qua, bạn có thể gỡ cài đặt phiên bản miễn phí để tránh việc mở nó lên, vì bạn không còn cần nó nữa. Việc đó cũng sẽ ngăn hộp thoại này xuất hiện.
\n
\nCám ơn!</string>
<string name="upgraded_to_pro">Hello,\n\nseems like you already have the Pro app version too. Once you are happy with it and maybe migrated your data over, you can uninstall this one to avoid launching it accidentally as you will not need it anymore.\n\nThanks!</string>
<string name="upgraded_from_free_calendar">Hello,\n\nseems like you just upgraded from the free version. If you want to migrate your locally stored events over, you have to do it manually by exporting them into an .ics file in the free app version and importing here through the top menu. \n\nOnce you are satisfied with your setup in the Pro version, you can uninstall the old free one as you won\'t need it anymore.\n\nThanks!</string>
<string name="upgraded_from_free_contacts">Hello,\n\nseems like you just upgraded from the free version. If you had any contacts stored under \"%s\", you have to migrate them manually by exporting in a .vcf file from the free app version and importing here through the top menu.\n\nOnce you are satisfied with your setup in the Pro version, you can uninstall the old free one as you won\'t need it anymore.\n\nThanks!</string>
<string name="upgraded_from_free_notes">Hello,\n\nseems like you just upgraded from the free version. If you want to migrate your notes over, you have to do it manually by exporting them into a file in the free app version and importing here through the top menu. \n\nOnce you are satisfied with your setup in the Pro version, you can uninstall the old free one as you won\'t need it anymore.\n\nThanks!</string>
<string name="upgraded_from_free_calendar">Xin chào,
\n
\ncó vẻ như bạn vừa mới nâng cấp lên từ phiên bản miễn phí. Nếu như bạn muốn di chuyển các sự kiện được lưu trữ nội bộ của bạn qua, bạn phải làm việc đó một cách thủ công bằng cách xuất chúng sang một tập tin .ics trong phiên bản miễn phí và nhập chúng tại đây thông qua menu ở trên cùng.
\n
\nMột khi bạn hài lòng với các thiết lập của mình ở bản Pro, bạn có thể gỡ cài đặt phiên bản miễn phí bởi bạn không còn cần nó nữa, việc đó cũng sẽ ngăn hộp thoại này xuất hiện.
\n
\nCám ơn!</string>
<string name="upgraded_from_free_contacts">Xin chào,
\n
\ncó vẻ như bạn vừa mới nâng cấp từ phiên bản miễn phí. Nếu như bạn có bất kỳ liên hệ vào được lưu trữ dưới \"%s\", bạn cần phải di chuyển chúng thủ công bằng cách xuất sang tập tin .vcf từ phiên bản miễn phí và nhập chúng tại đây thông qua menu ở trên cùng.
\n
\nSau khi bạn hài lòng với thiết lập của mình tại phiên bản Pro, bạn có thể gỡ cài đặt phiên bản miễn phí bởi bạn không còn cần nó nữa, việc này cũng sẽ ngăn cho hộp thoại này xuất hiện.
\n
\nCám ơn!</string>
<string name="upgraded_from_free_notes">Xin chào,
\n
\ncó vẻ như bạn vừa mới nâng cấp từ phiên bản miễn phí. Nếu như bạn muốn di chuyển ghi chú qua, bạn cần phải làm thủ công bằng cách xuất chúng thành một tập tin trong phiên bản miễn phí và nhập chúng tại đây thông qua menu trên cùng.
\n
\nSau khi bạn hài lòng với thiết lập của mình, bạn có thể gỡ cài đặt phiên bản miễn phí bởi bạn không còn cần đến nó nữa, việc đó cũng sẽ ngăn cho hộp thoại này xuất hiện.
\n
\nCám ơn!</string>
<!-- About -->
<string name="about">Thông tin</string>
<string name="website">Website</string>
@ -1131,4 +1159,4 @@
<string name="pro_app_refund">Đừng quên rằng nếu bạn gỡ cài đặt bất kỳ ứng dụng phải trả tiền nào trong vòng 2 giờ, bạn sẽ tự động được hoàn lại tiền. Nếu bạn muốn hoàn lại tiền bất cứ lúc nào sau đó, chỉ cần liên hệ với chúng tôi tại hello@simplemobiletools.com và bạn sẽ nhận được nó.Thật dễ dàng đúng không :)</string>
<!-- Description of our developer profile on Google Play, it can have max 140 characters -->
<string name="developer_description">A group of simple, open source Android apps with customizable widgets, without ads and unnecessary permissions.</string>
</resources>
</resources>

View file

@ -1,7 +1,7 @@
[versions]
#jetbrains
kotlin = "1.9.10"
kotlin-immutable-collections = "0.3.5"
kotlin-immutable-collections = "0.3.6"
#KSP
kotlinxSerializationJson = "1.5.1"
ksp = "1.9.10-1.0.13"

View file

@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip