Compare commits
12 Commits
8468f3edcc
...
fix/180-de
| Author | SHA1 | Date | |
|---|---|---|---|
| bc805a9a3a | |||
| 558aa2e69b | |||
|
|
34108b9c50 | ||
| 49a0c114c2 | |||
|
|
b1ce6f85cc | ||
|
|
ca5f87af11 | ||
|
|
7445092767 | ||
|
|
5ef66120bf | ||
|
|
bda86cd73d | ||
|
|
56953b0c50 | ||
|
|
7c8cd1e145 | ||
|
|
bce36956d1 |
@@ -28,8 +28,8 @@ android {
|
||||
// which builds this version and then creates the matching vX.Y.Z tag +
|
||||
// release itself (versionCode is pinned to MAJOR*10000 + MINOR*100 +
|
||||
// PATCH from versionName, e.g. 2.7.2 -> 20702). See docs/RELEASING.md.
|
||||
versionCode = 21901
|
||||
versionName = "2.19.1"
|
||||
versionCode = 21902
|
||||
versionName = "2.19.2"
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package de.jeanlucmakiola.calendula.data.calendar
|
||||
|
||||
import de.jeanlucmakiola.floret.time.toKotlinInstantFromEpochMillis
|
||||
import android.provider.CalendarContract
|
||||
import android.util.Log
|
||||
import de.jeanlucmakiola.calendula.domain.EventInstance
|
||||
|
||||
@@ -38,5 +39,7 @@ internal fun ColumnReader.toEventInstance(): EventInstance? {
|
||||
isAllDay = getInt(InstanceProjection.IDX_ALL_DAY) != 0,
|
||||
color = color,
|
||||
location = getString(InstanceProjection.IDX_LOCATION),
|
||||
isDeclined = getInt(InstanceProjection.IDX_SELF_ATTENDEE_STATUS) ==
|
||||
CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ internal object InstanceProjection {
|
||||
CalendarContract.Instances.EVENT_COLOR,
|
||||
CalendarContract.Instances.CALENDAR_COLOR,
|
||||
CalendarContract.Instances.EVENT_LOCATION,
|
||||
CalendarContract.Instances.SELF_ATTENDEE_STATUS,
|
||||
)
|
||||
|
||||
const val IDX_INSTANCE_ID = 0
|
||||
@@ -64,6 +65,7 @@ internal object InstanceProjection {
|
||||
const val IDX_EVENT_COLOR = 7
|
||||
const val IDX_CALENDAR_COLOR = 8
|
||||
const val IDX_LOCATION = 9
|
||||
const val IDX_SELF_ATTENDEE_STATUS = 10
|
||||
}
|
||||
|
||||
internal object EventDetailProjection {
|
||||
@@ -182,6 +184,7 @@ internal object SearchProjection {
|
||||
CalendarContract.Events.RDATE,
|
||||
// Excerpted, not just filtered on: a hit has to show what it matched.
|
||||
CalendarContract.Events.DESCRIPTION,
|
||||
CalendarContract.Events.SELF_ATTENDEE_STATUS,
|
||||
)
|
||||
|
||||
const val IDX_ID = 0
|
||||
@@ -197,6 +200,7 @@ internal object SearchProjection {
|
||||
const val IDX_RRULE = 10
|
||||
const val IDX_RDATE = 11
|
||||
const val IDX_DESCRIPTION = 12
|
||||
const val IDX_SELF_ATTENDEE_STATUS = 13
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.jeanlucmakiola.calendula.data.calendar
|
||||
|
||||
import android.provider.CalendarContract
|
||||
import de.jeanlucmakiola.floret.time.toKotlinInstantFromEpochMillis
|
||||
import de.jeanlucmakiola.calendula.domain.EventInstance
|
||||
import de.jeanlucmakiola.calendula.domain.ics.parseRfc2445DurationMillis
|
||||
@@ -42,5 +43,7 @@ internal fun ColumnReader.toSearchResult(): EventInstance? {
|
||||
location = getString(SearchProjection.IDX_LOCATION),
|
||||
isRecurring = !getString(SearchProjection.IDX_RRULE).isNullOrEmpty() ||
|
||||
!getString(SearchProjection.IDX_RDATE).isNullOrEmpty(),
|
||||
isDeclined = getInt(SearchProjection.IDX_SELF_ATTENDEE_STATUS) ==
|
||||
CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -44,9 +44,16 @@ class ProviderReminderInstanceSource @Inject constructor(
|
||||
// `visible` is the flag the app's one visibility model writes (#75).
|
||||
// The status clause mirrors CalendarDataSource.instances: NULL means
|
||||
// "normal", so a bare `!= CANCELED` would drop every ordinary event.
|
||||
// An invitation the user declined is answered — it stays on the calendar
|
||||
// struck through, but it plans nothing (#180). NULL again means "no
|
||||
// answer recorded", which is not a "no".
|
||||
val selection = "${CalendarContract.Calendars.VISIBLE} = 1 AND " +
|
||||
"(${CalendarContract.Instances.STATUS} IS NULL OR " +
|
||||
"${CalendarContract.Instances.STATUS} != ${CalendarContract.Events.STATUS_CANCELED})"
|
||||
"${CalendarContract.Instances.STATUS} != " +
|
||||
"${CalendarContract.Events.STATUS_CANCELED}) AND " +
|
||||
"(${CalendarContract.Instances.SELF_ATTENDEE_STATUS} IS NULL OR " +
|
||||
"${CalendarContract.Instances.SELF_ATTENDEE_STATUS} != " +
|
||||
"${CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED})"
|
||||
return context.contentResolver.query(
|
||||
uri, OCCURRENCE_PROJECTION, selection, null, null,
|
||||
)?.use { c ->
|
||||
|
||||
@@ -67,6 +67,13 @@ data class EventInstance(
|
||||
* Instances query already yields one row per occurrence.
|
||||
*/
|
||||
val isRecurring: Boolean = false,
|
||||
/**
|
||||
* This device user answered "no" to the invitation
|
||||
* (`Events.SELF_ATTENDEE_STATUS`). The event stays on the calendar — it is
|
||||
* still an appointment someone expects an answer about — but every surface
|
||||
* strikes it through, and it plans no reminders (#180).
|
||||
*/
|
||||
val isDeclined: Boolean = false,
|
||||
)
|
||||
|
||||
/**
|
||||
|
||||
@@ -24,11 +24,13 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import de.jeanlucmakiola.calendula.R
|
||||
import de.jeanlucmakiola.calendula.domain.EventInstance
|
||||
import de.jeanlucmakiola.calendula.ui.common.EventDimAlpha
|
||||
import de.jeanlucmakiola.calendula.ui.common.declinedTitle
|
||||
import de.jeanlucmakiola.calendula.ui.common.LocalSoftenColors
|
||||
import de.jeanlucmakiola.calendula.ui.common.LocalUse24HourFormat
|
||||
import de.jeanlucmakiola.calendula.ui.common.eventAccent
|
||||
@@ -129,8 +131,8 @@ internal fun AgendaEventRow(
|
||||
val title = event.title.ifBlank { stringResource(R.string.event_untitled) }
|
||||
GroupedRow(
|
||||
modifier = if (dimmed) modifier.alpha(EventDimAlpha) else modifier,
|
||||
title = title,
|
||||
summary = agendaTimeSummary(event, day, zone),
|
||||
title = declinedTitle(title, event.isDeclined),
|
||||
summary = AnnotatedString(agendaTimeSummary(event, day, zone)),
|
||||
position = position,
|
||||
minHeight = 64.dp,
|
||||
leading = {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
package de.jeanlucmakiola.calendula.ui.common
|
||||
|
||||
import androidx.compose.runtime.compositionLocalOf
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.SpanStyle
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import kotlin.time.Instant
|
||||
|
||||
/**
|
||||
@@ -14,3 +18,30 @@ val LocalDimCutoff = compositionLocalOf<Instant?> { null }
|
||||
|
||||
/** Opacity applied to a completed/past event chip when it is dimmed. */
|
||||
const val EventDimAlpha = 0.4f
|
||||
|
||||
/**
|
||||
* How a declined invitation's title is struck through (#180) — the mark every
|
||||
* surface uses to say "you answered no", chosen over hiding the event because it
|
||||
* is still something the organiser expects you at. Null for everything else, so
|
||||
* it drops straight into a `Text`'s `textDecoration`.
|
||||
*/
|
||||
fun declinedDecoration(isDeclined: Boolean): TextDecoration? =
|
||||
if (isDeclined) TextDecoration.LineThrough else null
|
||||
|
||||
/** [declinedDecoration] for the rows that take styled text rather than a `String`. */
|
||||
fun declinedTitle(title: String, isDeclined: Boolean): AnnotatedString = if (isDeclined) {
|
||||
AnnotatedString(title, SpanStyle(textDecoration = TextDecoration.LineThrough))
|
||||
} else {
|
||||
AnnotatedString(title)
|
||||
}
|
||||
|
||||
/** [declinedTitle] over already-styled text, e.g. a search hit's marked runs. */
|
||||
fun declinedTitle(title: AnnotatedString, isDeclined: Boolean): AnnotatedString =
|
||||
if (!isDeclined) {
|
||||
title
|
||||
} else {
|
||||
buildAnnotatedString {
|
||||
append(title)
|
||||
addStyle(SpanStyle(textDecoration = TextDecoration.LineThrough), 0, title.length)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,6 +106,7 @@ import de.jeanlucmakiola.calendula.ui.common.next
|
||||
import de.jeanlucmakiola.calendula.ui.common.LocalSoftenColors
|
||||
import de.jeanlucmakiola.calendula.ui.common.eventFill
|
||||
import de.jeanlucmakiola.calendula.ui.common.eventInk
|
||||
import de.jeanlucmakiola.calendula.ui.common.declinedDecoration
|
||||
import de.jeanlucmakiola.calendula.ui.common.rememberCalendarSlideSpec
|
||||
import de.jeanlucmakiola.floret.locale.currentLocale
|
||||
import de.jeanlucmakiola.calendula.ui.common.LocalUse24HourFormat
|
||||
@@ -525,6 +526,7 @@ private fun AllDayBar(
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
color = eventInk(fill),
|
||||
textDecoration = declinedDecoration(event.isDeclined),
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -772,6 +774,7 @@ private fun EventBlock(
|
||||
maxLines = if (showTime) 1 else 2,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
color = eventInk(fill, alpha = 0.85f),
|
||||
textDecoration = declinedDecoration(block.event.isDeclined),
|
||||
)
|
||||
}
|
||||
if (showTime) {
|
||||
|
||||
@@ -138,6 +138,7 @@ import de.jeanlucmakiola.calendula.ui.common.CALENDAR_SWIPE_THRESHOLD
|
||||
import de.jeanlucmakiola.calendula.ui.common.CalendarView
|
||||
import de.jeanlucmakiola.calendula.ui.common.IMPLEMENTED_VIEWS
|
||||
import de.jeanlucmakiola.calendula.ui.common.EventDimAlpha
|
||||
import de.jeanlucmakiola.calendula.ui.common.declinedDecoration
|
||||
import de.jeanlucmakiola.calendula.ui.common.LocalDimCutoff
|
||||
import de.jeanlucmakiola.calendula.ui.common.LocalSoftenColors
|
||||
import de.jeanlucmakiola.calendula.ui.common.eventAccent
|
||||
@@ -2358,6 +2359,7 @@ private fun MonthBar(
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
color = eventInk(fill),
|
||||
textDecoration = declinedDecoration(event.isDeclined),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,6 +85,7 @@ import de.jeanlucmakiola.calendula.domain.SearchMonth
|
||||
import de.jeanlucmakiola.floret.identity.animateItemMotion
|
||||
import de.jeanlucmakiola.floret.identity.fadeThrough
|
||||
import de.jeanlucmakiola.floret.identity.predictiveBack
|
||||
import de.jeanlucmakiola.calendula.ui.common.declinedTitle
|
||||
import de.jeanlucmakiola.floret.components.GroupedRow
|
||||
import de.jeanlucmakiola.floret.components.InlineTextField
|
||||
import de.jeanlucmakiola.floret.components.Position
|
||||
@@ -519,7 +520,7 @@ private fun SearchResultRow(
|
||||
// Faded like a past event anywhere else in the app — search reaches back
|
||||
// through the whole history.
|
||||
modifier = if (hit.isPast) modifier.alpha(EventDimAlpha) else modifier,
|
||||
title = marked(event.title, hit.titleSpans, highlight),
|
||||
title = declinedTitle(marked(event.title, hit.titleSpans, highlight), event.isDeclined),
|
||||
summary = searchSummary(hit, highlight),
|
||||
position = position,
|
||||
minHeight = 64.dp,
|
||||
|
||||
@@ -90,6 +90,7 @@ import de.jeanlucmakiola.calendula.ui.common.CalendarFailure
|
||||
import de.jeanlucmakiola.calendula.ui.common.CalendarView
|
||||
import de.jeanlucmakiola.calendula.ui.common.IMPLEMENTED_VIEWS
|
||||
import de.jeanlucmakiola.calendula.ui.common.EventDimAlpha
|
||||
import de.jeanlucmakiola.calendula.ui.common.declinedDecoration
|
||||
import de.jeanlucmakiola.calendula.ui.common.BlockTimeLabel
|
||||
import de.jeanlucmakiola.calendula.ui.common.animatedBlockPlacement
|
||||
import de.jeanlucmakiola.calendula.ui.common.ghostAlpha
|
||||
@@ -662,6 +663,7 @@ private fun AllDayBar(
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
color = eventInk(fill),
|
||||
textDecoration = declinedDecoration(event.isDeclined),
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -940,6 +942,7 @@ private fun EventBlock(
|
||||
maxLines = titleMaxLines,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
color = eventInk(fill, alpha = 0.85f),
|
||||
textDecoration = declinedDecoration(block.event.isDeclined),
|
||||
)
|
||||
}
|
||||
if (showTime) {
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.os.Build
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.glance.GlanceTheme
|
||||
import androidx.glance.material3.ColorProviders
|
||||
import androidx.glance.text.TextDecoration
|
||||
import de.jeanlucmakiola.calendula.ui.theme.CalendulaDarkFallback
|
||||
import de.jeanlucmakiola.calendula.ui.theme.CalendulaLightFallback
|
||||
|
||||
@@ -34,3 +35,10 @@ fun CalendulaGlanceTheme(content: @Composable () -> Unit) {
|
||||
}
|
||||
GlanceTheme(colors = colors, content = content)
|
||||
}
|
||||
|
||||
/**
|
||||
* Glance's counterpart to the app's `declinedDecoration`: a declined invitation
|
||||
* reads the same on the home screen as it does inside the app (#180).
|
||||
*/
|
||||
fun glanceDeclinedDecoration(isDeclined: Boolean): TextDecoration =
|
||||
if (isDeclined) TextDecoration.LineThrough else TextDecoration.None
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.jeanlucmakiola.calendula.widget.agenda
|
||||
|
||||
import de.jeanlucmakiola.calendula.widget.glanceDeclinedDecoration
|
||||
import android.content.Context
|
||||
import android.content.res.Configuration
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -416,7 +417,11 @@ private fun EventRow(
|
||||
Text(
|
||||
text = title,
|
||||
maxLines = 1,
|
||||
style = TextStyle(color = titleColor, fontSize = metrics.eventTitle),
|
||||
style = TextStyle(
|
||||
color = titleColor,
|
||||
fontSize = metrics.eventTitle,
|
||||
textDecoration = glanceDeclinedDecoration(event.isDeclined),
|
||||
),
|
||||
)
|
||||
Text(
|
||||
text = eventTimeSummary(context, event, day, is24Hour),
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.jeanlucmakiola.calendula.widget.month
|
||||
|
||||
import de.jeanlucmakiola.calendula.widget.glanceDeclinedDecoration
|
||||
import android.content.Context
|
||||
import android.content.res.Configuration
|
||||
import androidx.compose.runtime.Composable
|
||||
@@ -414,7 +415,11 @@ private fun SpanBar(event: EventInstance, dark: Boolean, soften: Boolean, width:
|
||||
Text(
|
||||
text = event.title.ifBlank { context.getString(R.string.event_untitled) },
|
||||
maxLines = 1,
|
||||
style = TextStyle(color = ColorProvider(eventInk(fill)), fontSize = 9.sp),
|
||||
style = TextStyle(
|
||||
color = ColorProvider(eventInk(fill)),
|
||||
fontSize = 9.sp,
|
||||
textDecoration = glanceDeclinedDecoration(event.isDeclined),
|
||||
),
|
||||
modifier = GlanceModifier.padding(horizontal = 3.dp),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -16,14 +16,14 @@
|
||||
<string name="state_failure_no_calendars_action">فتح إعدادات تقويم النظام</string>
|
||||
<string name="state_failure_provider">تعذّر قراءة التقويم.</string>
|
||||
<string name="permission_rationale_title">شاهد جميع أحداثك، بشكل جميل</string>
|
||||
<string name="permission_rationale_body">Calendula يحتاج للوصول إلى تقويمك لعرض و إدارة أحداثك. هذا كل ما يطلبه مقدمًا — ولا يخرج أي شيء من جهازك على الإطلاق.</string>
|
||||
<string name="permission_rationale_body">Calendula يحتاج للوصول إلى تقويمك لعرض و إدارة أحداثك.</string>
|
||||
<string name="permission_request_button">منح الوصول إلى التقويم</string>
|
||||
<string name="permission_denied_title">رُفِض الوصول إلى التقويم</string>
|
||||
<string name="permission_denied_body">Calendula لا يمكنه عرض الأحداث بدون الوصول إلى التقويم. يمكنك منحه مُجددًا في إعدادات النظام.</string>
|
||||
<string name="permission_retry_button">أعِد المحاولة</string>
|
||||
<string name="permission_open_settings_button">فتح إعدادات النظام</string>
|
||||
<string name="permission_benefit_private_title">يبقى على جهازك</string>
|
||||
<string name="permission_benefit_private_body">تقويماتك تتِم قراءتها محليًا ولا تُغادر الهاتف أبدًا.</string>
|
||||
<string name="permission_benefit_private_title">الخصوصية حسب التصميم</string>
|
||||
<string name="permission_benefit_private_body">لا يوجد إذن بالإنترنت، ولا تتبع عن بُعد — لا شيء يغادر هاتفك أبدًا.</string>
|
||||
<string name="permission_benefit_sync_title">جميع تقويماتك، مع بعض</string>
|
||||
<string name="permission_benefit_sync_body">جوجل، CalDAV، محلي — أي شيء تمت مزامنته مع الجهاز يظهر فورًا.</string>
|
||||
<string name="permission_benefit_privacy_title">لا تتبع، أبدًا</string>
|
||||
@@ -126,6 +126,7 @@
|
||||
<string name="event_edit_recurrence_none">لا يتكرر</string>
|
||||
<string name="import_reminder_prompt_body_none">تم استيراد هذا الحدث بدون أي تذكير.</string>
|
||||
<plurals name="import_reminder_prompt_body_existing">
|
||||
<item quantity="zero">تم استيراد هذا الحدث مع (%1$d) لا تذكيرات.</item>
|
||||
<item quantity="one">تم استيراد هذا الحدث مع %1$d تذكير.</item>
|
||||
<item quantity="two">تم استيراد هذا الحدث مع %1$d تذكيران.</item>
|
||||
<item quantity="few">تم استيراد هذا الحدث مع %1$d تذكيرات.</item>
|
||||
@@ -177,7 +178,7 @@
|
||||
<string name="reminder_channel_name">تذكيرات الحدث</string>
|
||||
<string name="reminder_channel_description">الإشعارات في أوقات التذكير الخاصه بأحداثك</string>
|
||||
<string name="reminder_onboarding_title">لا تفوّت أي حدث أبدًا</string>
|
||||
<string name="reminder_onboarding_body">Android لا يعرض تذكيرات الأحداث من نفسه — بل يجب أن يقوم تطبيق تقويم بذلك. دع Calendula يتولى هذه المهمة.</string>
|
||||
<string name="reminder_onboarding_body">أندرويد لا يعرض تذكيرات الأحداث من نفسه — بل يجب أن يقوم تطبيق تقويم بذلك. دع Calendula يتولى هذه المهمة.</string>
|
||||
<string name="reminder_benefit_delivery_body">كل تذكير لأحداثك يصِل كإشعار، في الوقت المحدد تمامًا.</string>
|
||||
<string name="reminder_benefit_duplicates_title">هل تستخدم تطبيق تقويم ثانٍ؟</string>
|
||||
<string name="reminder_benefit_duplicates_body">إذا تطبيق آخر أيضًا ينشر تذكيرات، فستراهم مرتين — قم بإيقاف تشغيلهم هناك أو هنا.</string>
|
||||
@@ -242,17 +243,17 @@
|
||||
<string name="agenda_range_this_week">هذا الأسبوع</string>
|
||||
<string name="settings_past_events_show">إظهار</string>
|
||||
<string name="settings_past_events_hide">إخفاء</string>
|
||||
<string name="settings_agenda_header">جدول</string>
|
||||
<string name="settings_agenda_header">الجدول</string>
|
||||
<string name="event_edit_timezone_device">المنطقة الزمنية للجهاز</string>
|
||||
<string name="event_edit_timezone_search">البحث عن المناطق الزمنية</string>
|
||||
<string name="event_edit_timezone_all">جميع المناطق الزمنية</string>
|
||||
<string name="event_edit_timezone_none">لا منطقة زمنية تطابق \"%1$s\"</string>
|
||||
<string name="event_edit_timezone_none">لا منطقة زمنية تطابق ”%1$s“</string>
|
||||
<string name="event_edit_timezone_local_time">%1$s توقيتك</string>
|
||||
<string name="event_edit_timezone_recent">الأحدث</string>
|
||||
<string name="event_edit_recurrence_incomplete">أدخل رقمًا من ١ إلى ٩٩٩</string>
|
||||
<plurals name="duration_minutes">
|
||||
<item quantity="zero">(%d) لا دقائق</item>
|
||||
<item quantity="one">(%d) دقيقة واحده</item>
|
||||
<item quantity="one">%d دقيقة واحده</item>
|
||||
<item quantity="two">%d دقيقتان</item>
|
||||
<item quantity="few">%d دقائق</item>
|
||||
<item quantity="many">%d دقيقة</item>
|
||||
@@ -260,7 +261,7 @@
|
||||
</plurals>
|
||||
<plurals name="duration_hours">
|
||||
<item quantity="zero">(%d) لا ساعات</item>
|
||||
<item quantity="one">(%d) ساعة واحده</item>
|
||||
<item quantity="one">%d ساعة واحده</item>
|
||||
<item quantity="two">%d ساعتان</item>
|
||||
<item quantity="few">%d ساعات</item>
|
||||
<item quantity="many">%d ساعة</item>
|
||||
@@ -268,7 +269,7 @@
|
||||
</plurals>
|
||||
<plurals name="duration_days">
|
||||
<item quantity="zero">(%d) لا أيام</item>
|
||||
<item quantity="one">(%d) يوم واحد</item>
|
||||
<item quantity="one">%d يوم واحد</item>
|
||||
<item quantity="two">%d يومان</item>
|
||||
<item quantity="few">%d أيام</item>
|
||||
<item quantity="many">%d يوم</item>
|
||||
@@ -276,7 +277,7 @@
|
||||
</plurals>
|
||||
<plurals name="duration_weeks">
|
||||
<item quantity="zero">(%d) لا أسابيع</item>
|
||||
<item quantity="one">(%d) أسبوع واحد</item>
|
||||
<item quantity="one">%d أسبوع واحد</item>
|
||||
<item quantity="two">%d أسبوعان</item>
|
||||
<item quantity="few">%d أسابيع</item>
|
||||
<item quantity="many">%d أسبوع</item>
|
||||
@@ -291,7 +292,7 @@
|
||||
<string name="settings_dim_completed_summary">تعتيم الأحداث التي انتهت بالفعل في عرض الشهر والأسبوع</string>
|
||||
<string name="settings_today_toolbar">زر اليوم في شريط الأدوات</string>
|
||||
<string name="settings_today_toolbar_summary">إظهار زر الانتقال إلى اليوم في شريط الأدوات بدلاً من زر عائم</string>
|
||||
<string name="settings_app_name_summary">اعرض Calendula كـ \"Calendar\" في مشغّل التطبيقات الخاص بك. فقط الاسم في المشغّل يتغير؛ وقد ينتقل الرمز إلى مكان جديد بعد التبديل.</string>
|
||||
<string name="settings_app_name_summary">اعرض Calendula كـ ”Calendar“ في مشغّل التطبيقات الخاص بك. فقط الاسم في المشغّل يتغير؛ وقد ينتقل الرمز إلى مكان جديد بعد التبديل.</string>
|
||||
<string name="settings_past_events_dim">تعتيم</string>
|
||||
<string name="settings_past_events">الأحداث السابقة</string>
|
||||
<string name="settings_agenda_range">مدى الجدول</string>
|
||||
@@ -314,7 +315,6 @@
|
||||
<string name="settings_form_fields_hint">الخانات المعروضة افتراضيًا — كل شيء آخر موجود ضمن \"المزيد من الخانات\"</string>
|
||||
<string name="settings_section_event_form">نموذج حدث جديد</string>
|
||||
<string name="settings_quick_switch_header">زر التبديل السريع</string>
|
||||
<string name="app_name">التقويم</string>
|
||||
<string name="settings_theme_system_summary">الحالي %1$s</string>
|
||||
<string name="settings_theme_hint">سواء التطبيق فاتحًا أو داكنًا. الاختيار يُطبق على الفور.</string>
|
||||
<string name="settings_week_start_auto_summary">الحالي %1$s</string>
|
||||
@@ -329,7 +329,7 @@
|
||||
<string name="settings_widget_size_extra_large">كبير جدًا</string>
|
||||
<plurals name="agenda_range_days">
|
||||
<item quantity="zero">(%d) لا أيام</item>
|
||||
<item quantity="one">(%d) يوم واحد</item>
|
||||
<item quantity="one">%d يوم واحد</item>
|
||||
<item quantity="two">%d يومان</item>
|
||||
<item quantity="few">%d أيام</item>
|
||||
<item quantity="many">%d يوم</item>
|
||||
@@ -383,7 +383,7 @@
|
||||
<string name="event_edit_recurrence_next">التالي: %1$s</string>
|
||||
<plurals name="reminder_minutes">
|
||||
<item quantity="zero">(%d) لا دقائق قبل</item>
|
||||
<item quantity="one">(%d) دقيقة واحده قبل</item>
|
||||
<item quantity="one">%d دقيقة واحده قبل</item>
|
||||
<item quantity="two">%d دقيقتان قبل</item>
|
||||
<item quantity="few">%d دقائق قبل</item>
|
||||
<item quantity="many">%d دقيقة قبل</item>
|
||||
@@ -391,7 +391,7 @@
|
||||
</plurals>
|
||||
<plurals name="reminder_hours">
|
||||
<item quantity="zero">(%d) لا ساعات قبل</item>
|
||||
<item quantity="one">(%d) ساعة واحده قبل</item>
|
||||
<item quantity="one">%d ساعة واحده قبل</item>
|
||||
<item quantity="two">%d ساعتان قبل</item>
|
||||
<item quantity="few">%d ساعات قبل</item>
|
||||
<item quantity="many">%d ساعة قبل</item>
|
||||
@@ -399,7 +399,7 @@
|
||||
</plurals>
|
||||
<plurals name="reminder_days">
|
||||
<item quantity="zero">(%d) لا أيام قبل</item>
|
||||
<item quantity="one">(%d) يوم واحد قبل</item>
|
||||
<item quantity="one">%d يوم واحد قبل</item>
|
||||
<item quantity="two">%d يومان قبل</item>
|
||||
<item quantity="few">%d أيام قبل</item>
|
||||
<item quantity="many">%d يوم قبل</item>
|
||||
@@ -407,13 +407,13 @@
|
||||
</plurals>
|
||||
<plurals name="reminder_weeks">
|
||||
<item quantity="zero">(%d) لا أسابيع قبل</item>
|
||||
<item quantity="one">(%d) أسبوع واحد قبل</item>
|
||||
<item quantity="one">%d أسبوع واحد قبل</item>
|
||||
<item quantity="two">%d أسبوعان قبل</item>
|
||||
<item quantity="few">%d أسابيع قبل</item>
|
||||
<item quantity="many">%d أسبوع قبل</item>
|
||||
<item quantity="other">%d أسبوع قبل</item>
|
||||
</plurals>
|
||||
<string name="reminder_benefit_reversible_body">يوجد المفتاح في الإعدادات، ضمن الإشعارات.</string>
|
||||
<string name="reminder_benefit_reversible_body">يوجد مفتاح التبديل في الإعدادات، ضمن الإشعارات.</string>
|
||||
<string name="reminder_custom_amount">القيمة</string>
|
||||
<string name="settings_manage_calendars_hint">إنشاء تقويمات محلية؛ إدارة التقويمات المتزامنة</string>
|
||||
<string name="settings_snooze_duration">مدة التأجيل</string>
|
||||
@@ -451,13 +451,13 @@
|
||||
<string name="settings_special_dates_grant">منح الوصول</string>
|
||||
<string name="calendars_backup_action">تصدير كملف .ics</string>
|
||||
<string name="calendars_export_title">تصدير التقويمات</string>
|
||||
<string name="calendars_export_hint">اختر التقويمات التي تريد تضمينها في .ics الملف.</string>
|
||||
<string name="calendars_export_hint">اختر التقويمات التي تريد تضمينها في ملف .ics.</string>
|
||||
<string name="calendars_export_action">تصدير</string>
|
||||
<string name="calendars_restore_header">استعادة</string>
|
||||
<string name="calendars_restore_action">استعادة من ملف .ics</string>
|
||||
<string name="calendars_restore_hint">استيراد الأحداث من نسخة احتياطية أو تطبيق تقويم آخر.</string>
|
||||
<string name="calendars_auto_backup">النسخ الاحتياطي التلقائي</string>
|
||||
<string name="calendars_auto_backup_hint">قم بتصدير تقويماتك المحلية بشكل دوري إلى مجلد كـ .ics الملف.</string>
|
||||
<string name="calendars_auto_backup_hint">قم بتصدير تقويماتك المحلية بشكل دوري إلى مجلد كـ ملف .ics.</string>
|
||||
<string name="calendars_auto_backup_folder">مجلد النسخ الاحتياطي</string>
|
||||
<string name="calendars_auto_backup_folder_unset">اضغط لاختيار مجلد</string>
|
||||
<string name="calendars_auto_backup_every">كل %1$s</string>
|
||||
@@ -472,7 +472,7 @@
|
||||
<string name="calendars_backup_failed">تعذّر تصدير النسخة الاحتياطية.</string>
|
||||
<plurals name="calendars_backup_done">
|
||||
<item quantity="zero">تم تصدير (%d) لا أحداث.</item>
|
||||
<item quantity="one">تم تصدير (%d) حدث واحد.</item>
|
||||
<item quantity="one">تم تصدير %d حدث واحد.</item>
|
||||
<item quantity="two">تم تصدير %d حدثان.</item>
|
||||
<item quantity="few">تم تصدير %d أحداث.</item>
|
||||
<item quantity="many">تم تصدير %d حدث.</item>
|
||||
@@ -520,7 +520,7 @@
|
||||
<string name="settings_past_events_hint">ما الذي يفعله جدول بالأحداث التي انتهت بالفعل.</string>
|
||||
<string name="calendars_visibility_a11y">إظهار \"%1$s\"</string>
|
||||
<string name="calendars_visibility_notice_title">بعض التقويمات متوقفة</string>
|
||||
<string name="calendars_visibility_notice_message">Calendula يعرض الآن التقويمات التي تم تشغيلها لهذا الجهاز، لذلك ما تراه وما يذكرك لم يعد بإمكانه أن يختلف. بعض تقويماتك متوقفة حاليًا — تم إيقافها هنا أو في تطبيق تقويم آخر. أعد تشغيل أي منها في الإعدادات ← التقويمات.</string>
|
||||
<string name="calendars_visibility_notice_message">Calendula يعرض التقويمات التي تم تشغيلها لهذا الجهاز، وبعض من خاصتك متوقفة. لرؤية أحداثهم، قم بتشغيلهم ضمن الإعدادات ← التقويمات.</string>
|
||||
<string name="calendar_picker_missing_title">تفتقد تقويمًا؟</string>
|
||||
<string name="calendar_picker_missing_summary">قد يكون متوقفًا عن التشغيل، للقراءة فقط أو مملوءًا من جهات الاتصال الخاصة بك — يمكنك إدارة تقويماتك هنا.</string>
|
||||
<string name="calendars_state_read_only">للقراءة فقط</string>
|
||||
@@ -542,4 +542,140 @@
|
||||
<string name="timeline_scale_regular">العادي</string>
|
||||
<string name="timeline_scale_comfortable_summary">مجموعات أوسع، تمرير أكثر</string>
|
||||
<string name="timeline_scale_custom_summary">الارتفاع الذي قمت بضغظت المخطط الزمني إليه</string>
|
||||
<string name="event_edit_timezone_device_summary">يتابعك أينما كنت</string>
|
||||
<string name="event_access_confidential_summary">مُعَلَّم كـ سري؛ ما يعنيه ذلك متروك لحساب التقويم</string>
|
||||
<string name="settings_widget_size_summary">نص الحدث %1$d%%</string>
|
||||
<string name="settings_calendar_durations_hint">امنح تقويم طوله الافتراضي خاص به — للمثال. ٨ ساعات لمناوبات العمل.</string>
|
||||
<string name="settings_backup_subtitle">تصدير، استيراد، النسخ الاحتياطي التلقائي</string>
|
||||
<string name="settings_views_all_header">كل طُرق العرض</string>
|
||||
<string name="settings_calendar_durations_title">المدة لكل تقويم</string>
|
||||
<string name="event_move_done">تم النقل إلى %1$s</string>
|
||||
<string name="event_move_undo">تراجع</string>
|
||||
<string name="event_move_undone">تم التراجع عن النقل</string>
|
||||
<string name="event_move_failed">تعذّر نقل الحدث</string>
|
||||
<string name="event_move_write_denied">Calendula يحتاج إلى صلاحية للكتابة لنقل الأحداث</string>
|
||||
<string name="event_move_gone">لم يعد هذا الحدث موجودًا</string>
|
||||
<string name="onboarding_step_counter">الخطوة %1$d من %2$d</string>
|
||||
<string name="onboarding_backup_title">أحداثك تعيش فقط هنا</string>
|
||||
<string name="onboarding_backup_body">لا شئ على هذا الهاتف تتم مزامنته لحساب، لذلك فقدانها سيؤدي لفقدان تقويمك. Calendula يمكنه كتابة نسخة احتياطية لك.</string>
|
||||
<string name="onboarding_backup_benefit_folder_body">النسخ الاحتياطية هي ملفات .ics عادية — ضعها في مكان ما يزامن، أو على بطاقة SD.</string>
|
||||
<string name="onboarding_backup_benefit_daily_title">مرة واحدة يوميًا، من تلقاء نفسه</string>
|
||||
<string name="onboarding_backup_benefit_daily_body">Calendula يقم بتصدير تقويماتك المحلية في الخلفية. يمكنك تغيير مدى المرات في الإعدادات.</string>
|
||||
<string name="onboarding_backup_enable_button">اختر مجلد وانسخ احتياطيًا</string>
|
||||
<string name="onboarding_backup_skip_button">ليس الآن</string>
|
||||
<string name="onboarding_view_title">ما الذي يجب أن يفتح أولاً؟</string>
|
||||
<string name="onboarding_month_style_title">كيف يجب أن يبدو الشهر؟</string>
|
||||
<string name="onboarding_view_continue_button">متابعة</string>
|
||||
<string name="onboarding_back">رجوع</string>
|
||||
<string name="onboarding_visibility_button">فهمت</string>
|
||||
<string name="onboarding_done_title">تم إعدادك بالكامل</string>
|
||||
<string name="onboarding_done_body">تقويماتك جاهزه. يمكن تغيير كل ما اخترته للتو لاحقًا في الإعدادات.</string>
|
||||
<string name="onboarding_done_button">افتح تقويمي</string>
|
||||
<plurals name="search_selected_count">
|
||||
<item quantity="zero">تم تحديد (%d)</item>
|
||||
<item quantity="one">تم تحديد %d</item>
|
||||
<item quantity="two">تم تحديد %d</item>
|
||||
<item quantity="few">تم تحديد %d</item>
|
||||
<item quantity="many">تم تحديد %d</item>
|
||||
<item quantity="other">تم تحديد %d</item>
|
||||
</plurals>
|
||||
<string name="search_in_descriptions">عُثِر في الأوصاف</string>
|
||||
<string name="search_selection_close">إلغاء التحديد</string>
|
||||
<string name="search_select_all">تحديد الكل</string>
|
||||
<string name="search_delete_selected">حذف المُحدّد</string>
|
||||
<plurals name="search_delete_title">
|
||||
<item quantity="zero">حذف (%d) حدث؟</item>
|
||||
<item quantity="one">حذف %d حدث واحد؟</item>
|
||||
<item quantity="two">حذف %d حدثان؟</item>
|
||||
<item quantity="few">حذف %d أحداث؟</item>
|
||||
<item quantity="many">حذف %d حدث؟</item>
|
||||
<item quantity="other">حذف %d حدث؟</item>
|
||||
</plurals>
|
||||
<plurals name="search_delete_done">
|
||||
<item quantity="zero">تم حذف (%d) لا حدث</item>
|
||||
<item quantity="one">تم حذف %d حدث واحد</item>
|
||||
<item quantity="two">تم حذف %d حدثان</item>
|
||||
<item quantity="few">تم حذف %d أحداث</item>
|
||||
<item quantity="many">تم حذف %d حدث</item>
|
||||
<item quantity="other">تم حذف %d حدث</item>
|
||||
</plurals>
|
||||
<string name="search_delete_partial">تم حذف %1$d، وتعذّر حذف %2$d</string>
|
||||
<string name="search_delete_denied_partial">تم حذف %1$d، ثم تم سحب صلاحية للكتابة</string>
|
||||
<plurals name="import_done_skipped">
|
||||
<item quantity="zero">تم تخطي (%d) بالفعل في هذا التقويم.</item>
|
||||
<item quantity="one">تم تخطي %d بالفعل في هذا التقويم.</item>
|
||||
<item quantity="two">تم تخطي %d بالفعل في هذا التقويم.</item>
|
||||
<item quantity="few">تم تخطي %d بالفعل في هذا التقويم.</item>
|
||||
<item quantity="many">تم تخطي %d بالفعل في هذا التقويم.</item>
|
||||
<item quantity="other">تم تخطي %d بالفعل في هذا التقويم.</item>
|
||||
</plurals>
|
||||
<plurals name="import_done_imported">
|
||||
<item quantity="zero">تم استيراد (%d) لا أحداث.</item>
|
||||
<item quantity="one">تم استيراد %d حدث واحد.</item>
|
||||
<item quantity="two">تم استيراد %d حدثان.</item>
|
||||
<item quantity="few">تم استيراد %d أحداث.</item>
|
||||
<item quantity="many">تم استيراد %d حدث.</item>
|
||||
<item quantity="other">تم استيراد %d حدث.</item>
|
||||
</plurals>
|
||||
<plurals name="import_action">
|
||||
<item quantity="zero">استيراد (%d) لا أحداث</item>
|
||||
<item quantity="one">استيراد %d حدث واحد</item>
|
||||
<item quantity="two">استيراد %d حدثان</item>
|
||||
<item quantity="few">استيراد %d أحداث</item>
|
||||
<item quantity="many">استيراد %d حدث</item>
|
||||
<item quantity="other">استيراد %d حدث</item>
|
||||
</plurals>
|
||||
<plurals name="import_event_count">
|
||||
<item quantity="zero">(%d) لا أحداث في هذا الملف.</item>
|
||||
<item quantity="one">%d حدث واحد في هذا الملف.</item>
|
||||
<item quantity="two">%d حدثان في هذا الملف.</item>
|
||||
<item quantity="few">%d أحداث في هذا الملف.</item>
|
||||
<item quantity="many">%d حدث في هذا الملف.</item>
|
||||
<item quantity="other">%d حدث في هذا الملف.</item>
|
||||
</plurals>
|
||||
<plurals name="import_title_count">
|
||||
<item quantity="zero">يتم استيراد (%d) لا أحداث</item>
|
||||
<item quantity="one">يتم استيراد %d حدث واحد</item>
|
||||
<item quantity="two">يتم استيراد %d حدثان</item>
|
||||
<item quantity="few">يتم استيراد %d أحداث</item>
|
||||
<item quantity="many">يتم استيراد %d حدث</item>
|
||||
<item quantity="other">يتم استيراد %d حدث</item>
|
||||
</plurals>
|
||||
<string name="event_move_recurring_title">نقل الحدث المتكرر</string>
|
||||
<string name="event_edit_conflict_overwrite_hint">فقط الحقول التي عدلتها هي التي ستحل محل التغيير الخارجي</string>
|
||||
<string name="reorder_drag_handle">اسحب لإعادة الترتيب</string>
|
||||
<string name="settings_drawer_order_hint">اسحب لإعادة ترتيب طرق العرض المدرجة في قائمة التنقل.</string>
|
||||
<string name="settings_drawer_order_header">قائمة التنقل</string>
|
||||
<string name="settings_default_reminder_allday">أحداث يوم كامل</string>
|
||||
<string name="settings_allday_reminder_time">وقت تذكير اليوم الكامل</string>
|
||||
<string name="reminder_none">لا شئ</string>
|
||||
<string name="settings_reliable_delivery_hint">أندرويد قد يؤخر التذكيرات لتوفير البطارية. استثنِ Calendula لكي تصل في الوقت المحدد.</string>
|
||||
<string name="settings_calendar_reminders_title">التذكيرات لكل تقويم</string>
|
||||
<string name="settings_license_value">MIT</string>
|
||||
<string name="settings_special_dates_paused_title">متوقف</string>
|
||||
<string name="settings_special_dates_calendar_hint">اضبط لون كل تقويم وإمكانية ظهوره في إعدادات التقويمات.</string>
|
||||
<string name="calendars_visibility_hint">قم بإيقاف تقويم لإخفائه على هذا الجهاز — تختفي أحداثه من التطبيق ويتوقف عن تذكيرك. هذا هو مفتاح التبديل نفسه الذي تستخدمه تطبيقات التقويم الأخرى خاصتك، لذلك تقوم بإخفائه أيضًا. لا شيء يتم حذفه، ولا يتأثر أي جهاز آخر، ويمكنك إعادة تشغيله من هنا في أي وقت.</string>
|
||||
<string name="settings_allday_reminder_fires_at">يتم الإشعار في %1$s</string>
|
||||
<string name="settings_agenda_widget_range">نطاق ودجت الجدول</string>
|
||||
<string name="settings_widget_size">حجم ودجت الجدول</string>
|
||||
<string name="settings_widgets_subtitle">ودجت الجدول، عنصر الإعدادات السريعة</string>
|
||||
<string name="settings_drag_to_reschedule">السحب لتعديل الموعد</string>
|
||||
<string name="settings_drag_to_reschedule_summary">انقل حدثًا عن طريق سحبه إلى يوم أو وقت آخر</string>
|
||||
<string name="event_move_blocked_series_end">لا يمكن نقل حدث بعد نهاية سلسلته</string>
|
||||
<string name="crash_dialog_report">تقرير</string>
|
||||
<string name="settings_quick_switch_hint">اختر أي طُرق العرض التي يتم التنقل بينها باستخدام الزر الموجود في أعلى اليمين، واسحب لإعادة ترتيبها. تظل طرق العرض التي تم إيقاف تشغيلها متاحة من قائمة التنقل.</string>
|
||||
<string name="calendars_account_from_source">%1$s (%2$s)</string>
|
||||
<string name="duration_hours_minutes">%1$s %2$s</string>
|
||||
<string name="settings_widgets_hint">إعدادات لوجدتز الشاشة الرئيسية وعنصر لوحة الإعدادات السريعة. أضف وجدت عن طريق الضغط لفترة طويلة على شاشتك الرئيسية.</string>
|
||||
<string name="import_warning_attendees">لم يتم استيراد قوائم الضيوف.</string>
|
||||
<string name="settings_reliable_delivery_exempt">معفى من تحسين البطارية — تصل التذكيرات في الوقت المحدد.</string>
|
||||
<string name="settings_reliable_delivery">توصيل موثوق</string>
|
||||
<string name="settings_allday_reminder_time_hint">تنطلق التذكيرات لأحداث التي تستمر طوال اليوم عند %1$s</string>
|
||||
<string name="agenda_range_override_hint">فقط للآن — يعيد التعيين إلى المدى المحفوظ الخاص بك عند إعادة فتح Calendula.</string>
|
||||
<string name="settings_past_events_sample_morning">مراجعة الفريق</string>
|
||||
<string name="settings_past_events_sample_midday">غداء مع روبن</string>
|
||||
<string name="settings_past_events_sample_evening">ممارسة الجوقة</string>
|
||||
<string name="settings_special_dates_last_synced">آخر مزامنة %1$s</string>
|
||||
<string name="settings_special_dates_disable_type_message">يؤدي هذا لحذف التقويم ”%1$s“ وأحداثه. سيتم فقدان أي تذكيرات أو ملاحظات أضفتها إليه.</string>
|
||||
<string name="special_dates_default_title_birthday">عيد ميلاد {name} ({year})</string>
|
||||
</resources>
|
||||
|
||||
@@ -17,14 +17,14 @@
|
||||
<string name="state_failure_no_calendars_action">Apri le impostazioni calendario di sistema</string>
|
||||
<string name="state_failure_provider">Errore nella lettura del calendario.</string>
|
||||
<string name="permission_rationale_title">Gestisci magnificamente tutti i tuoi eventi</string>
|
||||
<string name="permission_rationale_body">Calendula ha bisogno di accedere al tuo calendario per mostrare e gestire gli eventi. È l\'unica cosa di cui ha bisogno: nessuna informazione lascerà mai il tuo dispositivo.</string>
|
||||
<string name="permission_rationale_body">Calendula ha bisogno di accedere al tuo calendario per mostrare e gestire gli eventi.</string>
|
||||
<string name="permission_request_button">Concedi l\'accesso al calendario</string>
|
||||
<string name="permission_denied_title">Accesso al calendario negato</string>
|
||||
<string name="permission_denied_body">Calendula non può mostrare gli eventi senza accesso al calendario. Puoi concederlo dalle impostazioni di sistema.</string>
|
||||
<string name="permission_open_settings_button">Apri le impostazioni di sistema</string>
|
||||
<string name="permission_retry_button">Riprova</string>
|
||||
<string name="permission_benefit_private_title">Rimane sul tuo dispositivo</string>
|
||||
<string name="permission_benefit_private_body">I tuoi calendari sono letti localmente e non lasciano mai il tuo dispositivo.</string>
|
||||
<string name="permission_benefit_private_title">Privato by design</string>
|
||||
<string name="permission_benefit_private_body">Nessun accesso a internet, nessun tracking: nulla lascia il tuo dispositivo.</string>
|
||||
<string name="permission_benefit_sync_title">Tutti i tuoi calendari, insieme</string>
|
||||
<string name="permission_benefit_sync_body">Google, CalDAV, locali - qualsiasi calendario sincronizzato sul dispositivo, semplicemente, compare.</string>
|
||||
<string name="permission_benefit_privacy_title">Nessun tracking, per sempre</string>
|
||||
@@ -301,8 +301,8 @@
|
||||
<string name="settings_language_auto">Lingua di sistema</string>
|
||||
<string name="settings_translate">Aiuta a tradurre</string>
|
||||
<string name="settings_translate_hint">Aggiungi o migliora una traduzione su Weblate</string>
|
||||
<string name="settings_appearance_subtitle">Tema, vista di default, inizio settimana</string>
|
||||
<string name="settings_event_form_subtitle">Campi di default per nuovi eventi</string>
|
||||
<string name="settings_appearance_subtitle">Tema, colori, font</string>
|
||||
<string name="settings_event_form_subtitle">Campi di default e comportamento</string>
|
||||
<string name="settings_section_about">A proposito</string>
|
||||
<string name="settings_license">Licenza</string>
|
||||
<string name="settings_license_value">MIT</string>
|
||||
@@ -414,7 +414,7 @@
|
||||
<string name="agenda_range_this_week">Questa settimana</string>
|
||||
<string name="settings_reminders">Promemoria per gli eventi</string>
|
||||
<string name="settings_default_reminder">Promemoria per eventi standard</string>
|
||||
<string name="settings_notifications_subtitle">Promemoria evento</string>
|
||||
<string name="settings_notifications_subtitle">Promemoria</string>
|
||||
<string name="shortcut_new_event_short">Nuovo evento</string>
|
||||
<string name="event_edit_managed_hint">Gestito da “%1$s” - titolo, data e ripetizioni sono sincronizzate dai tuoi contatti. Promemoria e note sono modificabili dall\'utente.</string>
|
||||
<string name="settings_font_headings">Carattere del titolo</string>
|
||||
@@ -423,13 +423,13 @@
|
||||
<string name="settings_font_choose_file">Scegli file…</string>
|
||||
<string name="settings_font_custom_selected">Font personalizzato</string>
|
||||
<string name="settings_font_import_failed">Impossibile leggere il file come font</string>
|
||||
<string name="settings_section_views">Viste</string>
|
||||
<string name="settings_section_views">Vista</string>
|
||||
<string name="settings_quick_switch_header">Pulsante di cambio rapido</string>
|
||||
<string name="settings_quick_switch_hint">Scegli attraverso quali viste scorrere col pulsante in alto a destra, trascinale per riordinarle. Le viste disattivate rimangono raggiungibili dal menù di navigazione.</string>
|
||||
<string name="settings_drawer_order_header">Menù di navigazione</string>
|
||||
<string name="settings_drawer_order_hint">Trascina per riordinare le viste elencate nel menù di navigazione.</string>
|
||||
<string name="reorder_drag_handle">Trascina per riordinare</string>
|
||||
<string name="settings_views_subtitle">Ordine del pulsante di cambio rapido e del menù</string>
|
||||
<string name="settings_views_subtitle">Vista di default, layout, ordine</string>
|
||||
<string name="settings_special_dates_subtitle">Compleanni e anniversari dei contatti</string>
|
||||
<string name="settings_section_special_dates">Date speciali dei contatti</string>
|
||||
<string name="settings_special_dates_enable">Mostra date dei contatti</string>
|
||||
@@ -478,8 +478,8 @@
|
||||
<string name="reminder_day_yesterday">Ieri</string>
|
||||
<string name="agenda_no_more_today">Nessun altro evento per oggi</string>
|
||||
<string name="back">Indietro</string>
|
||||
<string name="settings_soften_colors">Attenua i colori del calendario</string>
|
||||
<string name="settings_soften_colors_summary">I colori dei calendari e degli eventi vengono attenuati per adattarsi al tema. Deseleziona per mostrare i colori naturali.</string>
|
||||
<string name="settings_soften_colors">Armonizza i colori del calendario</string>
|
||||
<string name="settings_soften_colors_summary">Mantieni i colori del calendario ma attenua la luminosità, così gli eventi rimangono leggibili e i colori sono armonizzati. Deseleziona per mostrare i colori originali.</string>
|
||||
<string name="settings_week_numbers">Numeri di settimana</string>
|
||||
<string name="settings_week_numbers_summary">Mostra i numeri di settimana nella vista Mese</string>
|
||||
<string name="settings_agenda_show_today">Mostra sempre Oggi</string>
|
||||
@@ -499,4 +499,151 @@
|
||||
<item quantity="many">Importando %d eventi</item>
|
||||
<item quantity="other">Importando %d eventi</item>
|
||||
</plurals>
|
||||
<string name="event_move_action">Sposta…</string>
|
||||
<string name="event_move_recurring_title">Sposta un evento ricorrente</string>
|
||||
<string name="event_move_done">Spostato al %1$s</string>
|
||||
<string name="event_move_undo">Annulla ripianificazione</string>
|
||||
<string name="event_move_undone">Ripianificazione annullata</string>
|
||||
<string name="event_move_failed">Impossibile ripianificare l\'evento</string>
|
||||
<string name="event_move_write_denied">Calendula ha bisogno dei permessi di scrittura per ripianificare gli eventi</string>
|
||||
<string name="event_move_gone">Questo evento è stato eliminato.</string>
|
||||
<string name="event_move_blocked_series_end">Non è possibile ripianificare un evento oltre la data di fine della sua serie</string>
|
||||
<string name="event_edit_timezone_device">Fuso orario del dispositivo</string>
|
||||
<string name="event_edit_timezone_device_summary">Segue il fuso orario in cui ti trovi</string>
|
||||
<string name="event_edit_timezone_search">Seleziona fuso orario</string>
|
||||
<string name="event_edit_timezone_recent">Recenti</string>
|
||||
<string name="event_edit_timezone_all">Tutti i fusi orari</string>
|
||||
<string name="event_edit_timezone_none">Nessun fuso corrisponde a \"%1$s\"</string>
|
||||
<string name="event_edit_timezone_local_time">%1$s nel tuo fuso orario</string>
|
||||
<string name="event_edit_recurrence_incomplete">Inserisci un numero tra 1 e 999</string>
|
||||
<string name="event_edit_recurrence_next">Prossimo evento: %1$s</string>
|
||||
<string name="event_edit_recurrence_next_none">Questa regola non si ripete</string>
|
||||
<string name="event_access_default_summary">In base all\'impostazione del calendario</string>
|
||||
<string name="event_access_public_summary">Chiunque acceda può vedere i dettagli completi</string>
|
||||
<string name="event_access_private_summary">Gli altri vedranno solo che sei impegnato</string>
|
||||
<string name="event_access_confidential_summary">Confidenziale; dipende dalle impostazioni dell\'account</string>
|
||||
<string name="duration_hours_minutes">%1$s %2$s</string>
|
||||
<string name="duration_custom_max">Al più %1$s</string>
|
||||
<string name="onboarding_step_counter">Step %1$d di %2$d</string>
|
||||
<string name="onboarding_backup_title">I tuoi eventi rimangono qui</string>
|
||||
<string name="onboarding_backup_body">Nulla viene sincronizzato, perdere i dati presenti su questo dispositivo significa perdere i tuoi calendari. Calendula può fare un backup per te.</string>
|
||||
<string name="onboarding_backup_benefit_folder_title">Una cartella a scelta</string>
|
||||
<string name="onboarding_backup_benefit_folder_body">I backup sono file .ics. Mettili al sicuro sul cloud o su una scheda SD.</string>
|
||||
<string name="onboarding_backup_benefit_daily_title">Giornaliero, in automatico</string>
|
||||
<string name="onboarding_backup_benefit_daily_body">Calendula esporta i tuoi calendari locali in background. Selezione la frequenza nelle Impostazioni.</string>
|
||||
<string name="onboarding_backup_enable_button">Seleziona la cartella ed esegui il backup</string>
|
||||
<string name="onboarding_backup_skip_button">Non ora</string>
|
||||
<string name="onboarding_view_title">Cosa viene aperto per primo?</string>
|
||||
<string name="onboarding_month_style_title">Seleziona la vista Mese</string>
|
||||
<string name="onboarding_view_continue_button">Continua</string>
|
||||
<string name="onboarding_back">Indietro</string>
|
||||
<string name="onboarding_visibility_button">Capito</string>
|
||||
<string name="onboarding_done_title">Tutto fatto</string>
|
||||
<string name="onboarding_done_body">I tuoi calendari sono pronti. Tutto ciò che hai scelto può essere modificato più tardi nelle Impostazioni.</string>
|
||||
<string name="onboarding_done_button">Apri i miei calendari</string>
|
||||
<string name="agenda_span_starts">Inizia alle %1$s</string>
|
||||
<string name="agenda_span_ends">Finisce alle %1$s</string>
|
||||
<string name="today_jump_action">Vai ad oggi</string>
|
||||
<plurals name="search_selected_count">
|
||||
<item quantity="one">%d selezionato</item>
|
||||
<item quantity="many">%d selezionati</item>
|
||||
<item quantity="other">%d selezionati</item>
|
||||
</plurals>
|
||||
<string name="search_in_descriptions">Trovato nelle descrizioni</string>
|
||||
<string name="search_selection_close">Cancella selezione</string>
|
||||
<string name="search_select_all">Seleziona tutti</string>
|
||||
<string name="search_delete_selected">Elimina i selezionati</string>
|
||||
<plurals name="search_delete_title">
|
||||
<item quantity="one">Eliminare l\'evento?</item>
|
||||
<item quantity="other">Eliminare l\'evento?</item>
|
||||
</plurals>
|
||||
<plurals name="search_delete_done">
|
||||
<item quantity="one">Evento eliminato</item>
|
||||
<item quantity="other">Evento eliminato</item>
|
||||
</plurals>
|
||||
<string name="search_delete_partial">%1$d eliminati, %2$d no</string>
|
||||
<string name="search_delete_denied_partial">%1$d eliminati, poi permessi di scrittura negati</string>
|
||||
<string name="event_move_occurrence_only">Ripianificare l\'intera serie cambia i giorni in cui cade, quindi puoi ripianificare solo questo evento.</string>
|
||||
<string name="settings_theme_hint">Tema chiaro o scuro. La modifica viene applicata immediatamente.</string>
|
||||
<string name="settings_theme_system_summary">Al momento %1$s</string>
|
||||
<string name="settings_font_specimen_heading">Giovedì, 14 Maggio</string>
|
||||
<string name="settings_font_specimen_body">Team review alle 10:00, poi pranzo con Ugo al bar a Piazza di Spagna.</string>
|
||||
<string name="settings_week_start_auto_summary">Al momento %1$s</string>
|
||||
<string name="settings_today_toolbar">Pulsante Oggi nella toolbar</string>
|
||||
<string name="settings_today_toolbar_summary">Mostra il pulsante \"vai alla data\" nella toolbar invece che come pulsante flottante</string>
|
||||
<string name="settings_app_name">Nome app</string>
|
||||
<string name="settings_app_name_summary">Mostra Calendula come \"Calendario\" nel launcher. Il nome cambia solo nel launcher; l\'icona potrebbe spostarsi dopo la modifica.</string>
|
||||
<string name="settings_time_format_auto_summary">Da sistema: %1$s</string>
|
||||
<string name="settings_timeline_scale">Altezza ore</string>
|
||||
<string name="settings_timeline_scale_hint">Spazio occupato verticalmente da un\'ora nella vista Giorno e Settimana. Puoi anche modificare l\'altezza come preverisci pizzicando la timeline.</string>
|
||||
<string name="timeline_scale_fit_day">Occupa la giornata intera</string>
|
||||
<string name="timeline_scale_fit_day_summary">Tutte le 24 ore in una schermata, senza scrolling</string>
|
||||
<string name="timeline_scale_compact">Compatto</string>
|
||||
<string name="timeline_scale_compact_summary">Più ore per schermata, blocchi più piccoli</string>
|
||||
<string name="timeline_scale_regular">Regolare</string>
|
||||
<string name="timeline_scale_regular_summary">La spaziatura standard</string>
|
||||
<string name="timeline_scale_comfortable">Comodo</string>
|
||||
<string name="timeline_scale_comfortable_summary">Blocchi più ampi, più scrolling</string>
|
||||
<string name="timeline_scale_custom">Personalizza</string>
|
||||
<string name="timeline_scale_custom_summary">L\'altezza a cui hai portato la timeline</string>
|
||||
<string name="settings_drag_to_reschedule">Trascina per ripianificare</string>
|
||||
<string name="settings_drag_to_reschedule_summary">Ripianifica un evento trascinandolo in un altro giorno o ora</string>
|
||||
<string name="settings_past_events_sample_morning">Team review</string>
|
||||
<string name="settings_past_events_sample_midday">Pranzo con Ugo</string>
|
||||
<string name="settings_past_events_sample_evening">Allenamento di scacchi</string>
|
||||
<string name="settings_widget_size">Dimensioni del widget Agenda</string>
|
||||
<string name="settings_widget_size_hint">Dimensioni del testo del widget agenda. Il widget mensile non ha impostazioni, si adatta da solo alla dimensione data.</string>
|
||||
<string name="settings_widget_size_small">Piccolo</string>
|
||||
<string name="settings_widget_size_medium">Medio</string>
|
||||
<string name="settings_widget_size_large">Grande</string>
|
||||
<string name="settings_widget_size_extra_large">Molto grande</string>
|
||||
<string name="settings_widget_size_summary">Carattere %1$d%%</string>
|
||||
<string name="settings_month_header">Vista Mese</string>
|
||||
<string name="settings_month_view_style">Stile vista Mese</string>
|
||||
<string name="month_style_paged">Pagine</string>
|
||||
<string name="month_style_paged_summary">Viene mostrato un singolo mese. Scorri a destra o a sinistra per cambiare mese.</string>
|
||||
<string name="month_style_continuous">Scorrimento</string>
|
||||
<string name="settings_past_events_hint">Ciò che fa l\'Agenda con eventi conclusi.</string>
|
||||
<string name="settings_dynamic_color_summary">Deduci il colore dell\'app dallo sfondo.</string>
|
||||
<string name="settings_about_privacy">Politica per la Privacy</string>
|
||||
<string name="calendars_visibility_hint">Deseleziona un calendario per non mostrarlo sul dispositivo: scompariranno gli eventi e non riceverai più promemoria. Questa impostazione agisce anche su altre app calendario. Nulla viene eliminato e il calendario non scompare da nessun altro dispositivo. Puoi riselezionarlo in ogni momento.</string>
|
||||
<string name="calendars_visibility_a11y">Mostra \"%1$s\"</string>
|
||||
<string name="calendars_visibility_notice_title">Alcuni calendari non sono attivi</string>
|
||||
<string name="calendars_visibility_notice_message">Calendula mostra solo i calendari che sono attivi sul dispositivo, e alcuni non lo sono. Per vedere gli eventi di quest\'ultimi, attivali dalle Impostazioni.</string>
|
||||
<string name="calendar_picker_missing_title">Manca un calendario?</string>
|
||||
<string name="calendar_picker_missing_summary">Può essere disattivato, in sola lettura o compilato in base ai tuoi contatti. Gestisci qui i tuoi calendari.</string>
|
||||
<string name="calendars_state_read_only">Sola lettura</string>
|
||||
<string name="calendars_state_not_synced">Non sincronizzato su questo dispositivo</string>
|
||||
<string name="calendars_state_managed">Compilato dai tuoi contatti</string>
|
||||
<string name="calendars_managed_delete_locked">Questo calendario è compilato in base ai tuoi contatti, quindi Calendula lo creerà di nuovo alla prossima sincronizzazione. Per eliminarlo disattiva l\'opzione \"Date Speciali\" nelle Impostazioni.</string>
|
||||
<string name="calendars_account_from_source">%1$s (%2$s)</string>
|
||||
<string name="month_style_continuous_summary">Ogni mese è sotto la sua testata, con un piccolo spazio a separarlo dal mese successivo.</string>
|
||||
<string name="month_style_dense">Settimane continue</string>
|
||||
<string name="month_style_dense_summary">Le settimane scorrono senza interruzione, ogni mese succede a quello precedente.</string>
|
||||
<string name="month_style_split">Diviso</string>
|
||||
<string name="month_style_split_summary">Una griglia compatta indica i giorni con eventi. Gli eventi del giorno selezionato sono elencati sotto.</string>
|
||||
<string name="month_split_no_events">Nulla in programma</string>
|
||||
<string name="month_split_expand">Mostra il mese completo</string>
|
||||
<string name="month_split_collapse">Mostra gli eventi del giorno</string>
|
||||
<string name="settings_event_duration">Durata standard</string>
|
||||
<string name="settings_event_duration_hint">Quanto durano gli eventi se non modifichi l\'orario di fine. Non ha effetto sugli eventi giornalieri.</string>
|
||||
<string name="settings_calendar_durations_title">Durata per calendario</string>
|
||||
<string name="settings_calendar_durations_hint">Assegna a ciascun calendario la sua durata standard (e.g. 8 ore per il calendario dei turni lavorativi).</string>
|
||||
<string name="settings_calendar_duration_inherits">Default (%1$s)</string>
|
||||
<string name="settings_calendar_duration_use_default">Usa la durata standard (%1$s)</string>
|
||||
<string name="settings_allday_reminder_fires_at">Promemoria alle %1$s</string>
|
||||
<string name="settings_group_look">Aspetto e Comportamento</string>
|
||||
<string name="settings_group_data">Dati</string>
|
||||
<string name="settings_group_app">App</string>
|
||||
<string name="settings_group_about">A proposito</string>
|
||||
<string name="settings_widgets_subtitle">Widget Agenda e riquadro Impostazioni rapide</string>
|
||||
<string name="settings_backup_subtitle">Export, Import, backup automatici</string>
|
||||
<string name="settings_section_widgets">Widget & Riquardi</string>
|
||||
<string name="settings_widgets_hint">Impostazioni per i widget e il riquardo delle Impostazioni rapide. Aggiungi i widget tenendo premuto sulla home.</string>
|
||||
<string name="settings_section_backup">Backup e ripristino</string>
|
||||
<string name="settings_views_all_header">Tutte le viste</string>
|
||||
<string name="settings_week_day_header">Giorno e settimana</string>
|
||||
<string name="settings_default_view_hint">La vista di default all\'apertura dell\'app.</string>
|
||||
<string name="settings_week_start_hint">Il giorno in cui inizia ogni settimana, in tutta l\'app e i suoi widget.</string>
|
||||
<string name="settings_time_format_hint">Formato degli orari in tutta l\'app. Di default viene seguito il formato di sistema.</string>
|
||||
</resources>
|
||||
|
||||
@@ -17,14 +17,14 @@
|
||||
<string name="state_failure_no_calendars_action">Перейти в системные настройки календаря</string>
|
||||
<string name="state_failure_provider">Не удалось просмотреть календарь.</string>
|
||||
<string name="permission_rationale_title">Следите за всеми своими событиями. С красотой</string>
|
||||
<string name="permission_rationale_body">Calendula требуется доступ к вашему календарю, чтобы показывать и управлять вашими событиями. Это всё, что приложение требует с самого начала – и никакая информация не покидает ваш девайс.</string>
|
||||
<string name="permission_rationale_body">Calendula требуется доступ к вашему календарю, чтобы показывать и управлять вашими событиями. Это всё, что приложение требует с самого начала – и никакая информация не покидает ваше устройство.</string>
|
||||
<string name="permission_request_button">Дать доступ к календарю</string>
|
||||
<string name="permission_denied_title">В доступе к календарю отказано</string>
|
||||
<string name="permission_denied_body">Calendula не может показать события без доступа к календарю. Предоставьте его снова в настройках телефона.</string>
|
||||
<string name="permission_open_settings_button">Открыть настройки телефона</string>
|
||||
<string name="permission_retry_button">Попытайтесь снова</string>
|
||||
<string name="permission_benefit_private_title">Остаётся на вашем устройстве</string>
|
||||
<string name="permission_benefit_private_body">Ваши календари просматриваются локально и информация никогда не покидает устройство.</string>
|
||||
<string name="permission_benefit_private_title">Приватность по умолчанию</string>
|
||||
<string name="permission_benefit_private_body">Нет доступа к интернету, нету телеметрии — ничто не покидает ваше устройство.</string>
|
||||
<string name="permission_benefit_sync_title">Все ваши календари. Вместе</string>
|
||||
<string name="permission_benefit_sync_body">Google, CalDAV, локальный календарь – всё синхронизированное с устройством просто подключается.</string>
|
||||
<string name="permission_benefit_privacy_title">Никакого отслеживания. Никогда</string>
|
||||
@@ -62,4 +62,75 @@
|
||||
<string name="event_edit_close">Закрыть</string>
|
||||
<string name="event_edit_save">Сохранить</string>
|
||||
<string name="event_edit_title_hint">Добавить имя</string>
|
||||
<string name="event_move_action">Перенести…</string>
|
||||
<string name="event_move_recurring_title">Перенести повторяющиеся события</string>
|
||||
<string name="event_move_done">Перенесено на %1$s</string>
|
||||
<string name="event_move_undo">Отменить</string>
|
||||
<string name="event_move_occurrence_only">Перемещение всей серии изменит дни на которые она попадёт, поэтому можно переместить только это событие.</string>
|
||||
<string name="event_move_undone">Перемещение отменено</string>
|
||||
<string name="event_move_failed">Не удалось переместить событие</string>
|
||||
<string name="event_move_write_denied">Приложению Calendula требуется доступ на запись, чтобы перемещать события</string>
|
||||
<string name="event_move_gone">Это событие больше не существует</string>
|
||||
<string name="event_move_blocked_series_end">Нельзя переместить событие дальше за пределы его серии</string>
|
||||
<string name="event_edit_managed_hint">Управляется «%1$s» — название, дата и повторение синхронизируются с ваших контактов. Напоминания, местоположения и заметки могут быть редактированы вами.</string>
|
||||
<string name="event_edit_starts">Начинается</string>
|
||||
<string name="event_edit_ends">Заканчивается</string>
|
||||
<string name="event_edit_error_end_before_start">Заканчивается раньше, чем начинается</string>
|
||||
<string name="event_edit_error_no_calendar">Нет календарей с правами на запись</string>
|
||||
<string name="event_edit_save_failed">Не удалось сохранить событие</string>
|
||||
<string name="event_edit_write_denied">Приложению Calendula требуется доступ на запись, чтобы создавать события</string>
|
||||
<string name="event_edit_more_fields">Больше полей</string>
|
||||
<string name="event_edit_add">Добавить</string>
|
||||
<string name="event_edit_add_reminder">Добавить напоминание</string>
|
||||
<string name="event_edit_remove_reminder">Удалить напоминание</string>
|
||||
<string name="event_edit_attendees">Гости</string>
|
||||
<string name="event_edit_add_guest">Добавить гостя</string>
|
||||
<string name="event_edit_add_guest_hint">Добавить гостя по почте…</string>
|
||||
<string name="event_edit_add_guest_from_contacts">Добавить из контактов</string>
|
||||
<string name="event_edit_location_from_contacts">Выбрать адрес из контактов</string>
|
||||
<string name="event_edit_remove_guest">Удалить гостя</string>
|
||||
<string name="event_edit_attendee_required">Обязательный</string>
|
||||
<string name="event_edit_attendee_optional">Необязательный</string>
|
||||
<string name="event_edit_attendees_note_synced">Calendula не отправляет приглашения. Ваша учётная запись календаря может отправить письма гостям при синхронизации.</string>
|
||||
<string name="event_edit_attendees_note_local">Хранится на этом устройстве. Никто не получит уведомление.</string>
|
||||
<string name="event_edit_reminder_custom">Другое</string>
|
||||
<string name="reminder_unit_minutes">минуты</string>
|
||||
<string name="reminder_unit_hours">часы</string>
|
||||
<string name="reminder_unit_days">дни</string>
|
||||
<string name="reminder_unit_weeks">недели</string>
|
||||
<string name="event_edit_availability">Занятость</string>
|
||||
<string name="event_edit_visibility">Видимость</string>
|
||||
<string name="event_edit_timezone_device">Часовой пояс устройства</string>
|
||||
<string name="event_edit_timezone_device_summary">Следует за вами, где бы вы ни были</string>
|
||||
<string name="event_edit_timezone_search">Поиск часовых поясов</string>
|
||||
<string name="event_edit_timezone_recent">Недавние</string>
|
||||
<string name="event_edit_timezone_all">Все часовые пояса</string>
|
||||
<string name="event_edit_timezone_none">Часовые пояса, соответсвующие «%1$s», не найдены</string>
|
||||
<string name="event_edit_timezone_local_time">%1$s по вашему времени</string>
|
||||
<string name="event_edit_color">Цвет</string>
|
||||
<string name="event_edit_color_default">Цвет календаря</string>
|
||||
<string name="event_edit_color_custom">Свой цвет</string>
|
||||
<string name="event_edit_color_reset">Сбросить</string>
|
||||
<string name="event_edit_color_unsupported">Недоступно для этого календаря</string>
|
||||
<string name="event_edit_color_unsupported_hint">Этот календарь не публикует набор цветов. Вы можете разрешить пользовательские цвета для таких календарей в Настройках.</string>
|
||||
<string name="event_edit_color_sync_warning">Этот календарь может потерять или перезаписать цвет при следующей синхронизации.</string>
|
||||
<string name="event_edit_conflict_title">Событие изменено в другом месте</string>
|
||||
<string name="event_edit_conflict_body">Пока вы редактировали, это событие было изменено — синхронизацией или другим приложением. Что вы хотите сделать с вашими изменениями?</string>
|
||||
<string name="event_edit_conflict_overwrite">Сохранить мои изменения</string>
|
||||
<string name="event_edit_conflict_overwrite_hint">Только изменённые вами поля, перезаписывают внешние изменения</string>
|
||||
<string name="event_edit_conflict_discard">Отменить мои изменения</string>
|
||||
<string name="event_edit_conflict_discard_hint">Событие остаётся таким, как сейчас</string>
|
||||
<string name="event_edit_gone_title">Событие удалено</string>
|
||||
<string name="event_edit_gone_body">Это событие было удалено, пока вы его редактировали, например на другом устройстве. Ваши изменения больше не могут быть сохранены.</string>
|
||||
<string name="import_reminder_prompt_title">Применить ваше стандартное напоминание?</string>
|
||||
<string name="import_reminder_prompt_body_none">Это событие было импортировано без каких-либо напоминаний.</string>
|
||||
<plurals name="import_reminder_prompt_body_existing">
|
||||
<item quantity="one">Это событие было импортировано с %1$d напоминанием.</item>
|
||||
<item quantity="few">Это событие было импортировано с %1$d напоминаниями.</item>
|
||||
<item quantity="many">Это событие было импортировано с %1$d напоминаниями.</item>
|
||||
<item quantity="other">Это событие было импортировано с %1$d напоминаниями.</item>
|
||||
</plurals>
|
||||
<string name="import_reminder_prompt_apply">Применить стандартное</string>
|
||||
<string name="import_reminder_prompt_keep">Оставить как есть</string>
|
||||
<string name="event_edit_recurrence_none">Не повторяется</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.jeanlucmakiola.calendula.data.calendar
|
||||
|
||||
import android.provider.CalendarContract
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import kotlin.time.Instant
|
||||
import org.junit.jupiter.api.Test
|
||||
@@ -17,6 +18,7 @@ class InstanceMapperTest {
|
||||
eventColor: Any? = null,
|
||||
calendarColor: Int = 0xFFAABBCC.toInt(),
|
||||
location: String? = null,
|
||||
selfAttendeeStatus: Int = CalendarContract.Attendees.ATTENDEE_STATUS_NONE,
|
||||
): MapColumnReader = MapColumnReader(
|
||||
InstanceProjection.IDX_INSTANCE_ID to instanceId,
|
||||
InstanceProjection.IDX_EVENT_ID to eventId,
|
||||
@@ -28,6 +30,7 @@ class InstanceMapperTest {
|
||||
InstanceProjection.IDX_EVENT_COLOR to eventColor,
|
||||
InstanceProjection.IDX_CALENDAR_COLOR to calendarColor,
|
||||
InstanceProjection.IDX_LOCATION to location,
|
||||
InstanceProjection.IDX_SELF_ATTENDEE_STATUS to selfAttendeeStatus,
|
||||
)
|
||||
|
||||
@Test
|
||||
@@ -90,4 +93,20 @@ class InstanceMapperTest {
|
||||
val inst = reader(location = "Berlin").toEventInstance()
|
||||
assertThat(inst!!.location).isEqualTo("Berlin")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `a declined invitation is marked, any other answer is not`() {
|
||||
assertThat(reader().toEventInstance()!!.isDeclined).isFalse()
|
||||
assertThat(
|
||||
reader(selfAttendeeStatus = CalendarContract.Attendees.ATTENDEE_STATUS_DECLINED)
|
||||
.toEventInstance()!!.isDeclined,
|
||||
).isTrue()
|
||||
listOf(
|
||||
CalendarContract.Attendees.ATTENDEE_STATUS_ACCEPTED,
|
||||
CalendarContract.Attendees.ATTENDEE_STATUS_TENTATIVE,
|
||||
CalendarContract.Attendees.ATTENDEE_STATUS_INVITED,
|
||||
).forEach { status ->
|
||||
assertThat(reader(selfAttendeeStatus = status).toEventInstance()!!.isDeclined).isFalse()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[versions]
|
||||
agp = "9.2.1"
|
||||
kotlin = "2.3.21"
|
||||
ksp = "2.3.10"
|
||||
ksp = "2.3.11"
|
||||
hilt = "2.60.1"
|
||||
coreKtx = "1.19.0"
|
||||
appcompat = "1.7.1"
|
||||
|
||||
Reference in New Issue
Block a user