35 Commits

Author SHA1 Message Date
LineageOS Infra
9ab1ae0ded Automatic translation import
Change-Id: I62d8d2a2468af3d3067a5219ec646f5fc48e6984
2024-02-18 06:25:32 +00:00
LineageOS Infra
0e9f297968 Automatic translation import
Change-Id: Id72a218d8a991e8f2669a8090e7b70bc4f7c292e
2024-01-01 17:11:55 +00:00
LineageOS Infra
5b0f26e70c Automatic translation import
Change-Id: Ia954613a9079ff50c000a1859e2805714e026118
2023-12-15 20:35:36 +00:00
LineageOS Infra
1052ca58a2 Automatic translation import
Change-Id: I25cc3145715ebfe4f47a2d603a30b7cc10e2dbee
2023-10-15 18:22:12 +00:00
LineageOS Infra
f35070f528 Automatic translation import
Change-Id: I38958ec6064db828d4ce4cc1c968d91399ba0d4e
2023-09-15 16:38:17 +00:00
LineageOS Infra
7679b15c50 Automatic translation import
Change-Id: I2cb3993fc11c24379e7e3e15cd3afb03ab7520a8
2023-07-15 16:40:32 +00:00
LineageOS Infra
b29b3b73aa Automatic translation import
Change-Id: I8382ade5509c984c4fd04104bbc73b4927dc4c23
2023-07-01 17:31:24 +00:00
LineageOS Infra
2c156bbddc Automatic translation import
Change-Id: I733df5d244e17b176811023ca0c37f70d42e1ac1
2023-06-15 12:06:58 +00:00
LineageOS Infra
f32a7e2996 Automatic translation import
Change-Id: I49a5f12f4543123b461d8e5830489f06c05883e7
2023-06-01 10:19:52 +00:00
LineageOS Infra
84ea99a7e8 Automatic translation import
Change-Id: Ia026f9cd3b6529e4876646250e0c9097bc4451d0
2023-05-15 13:15:55 +00:00
LineageOS Infra
f73716d370 Automatic translation import
Change-Id: I8b8560517a639776b26d4799f9e88b01a6be2a0e
2023-04-24 14:26:20 +00:00
Tommaso Fonda
b9527f6b6f Updater: Show the correct percentage during package installation
Fixes the mismatch between the progress bar's status and the percentage
displayed next to it.

Fixes: https://gitlab.com/LineageOS/issues/android/-/issues/4830
Change-Id: I5c243acda4f06561cbd5b3a73060205b32d8d41d
2023-04-13 17:38:33 +02:00
Aaron Kling
a44034fb5c Use -television instead of -large-notouch for atv resources
Mobile builds on devices with no touch panel are also getting these
settings applied, which is not intended.

Change-Id: I02fac65dc7042c04259d6f65a957185aac32a252
2022-08-02 20:50:20 -05:00
Timi Rautamäki
131e969d05 fixup! Updater: Move progress next to progressbar
Fix crash on ATV devices by applying same layout changes to
layout-large-notouch.

Change-Id: Id6eabcf8b1960106eb63bd15bcf97f9b4cf0bbc8
2022-03-06 13:31:11 +00:00
Michael Bestas
f7f4e1a0fc Automatic translation import
Change-Id: I4e61ee0e45bb2d878e219c3a1e66202121e0692e
2022-02-13 21:58:37 +01:00
Michael W
25104aef77 Updater: Don't show thousands of days
* When pausing and resuming, the ETA calculation is off by a lot
  due to the time diff since the last calculation resulting in a
  big delta and therefore a very low speed
* By fixing this, we also need to set the last byte count to the total
  byte count there, otherwise the downloaded bytes since last calculation
  will be larger than in reality, resulting in too fast speeds calculated

Change-Id: Ica1053cc297ff59221ea2bc0014f20973a080c88
2022-02-11 18:24:41 +01:00
Michael W
99e4d424a5 Updater: Move progress next to progressbar
* The progress text can get very long, resulting in jumping marquee text
* In order to reduce the length, move the percentage out of the text
  and next to the progressbar
* The behavior can be observed e.g. on pro1 in german, where the button
  is also wider due to the german text

Change-Id: I0276182efed757c0929b31434edad9be548b841c
2022-02-11 18:16:02 +01:00
Alexander Martinz
c4e34d5b07 Updater: layout: activity_updates: add spacing between build info and last checked entry
Change-Id: Ie85fecb30ba12b056569049aac674dc1b8653942
Signed-off-by: Alexander Martinz <amartinz@shiftphones.com>
2022-02-10 15:52:20 +01:00
Alexander Martinz
66fc964521 Updater: Allow starting activities from background
-----

05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: FATAL EXCEPTION: main
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: Process: com.shiftos.updater, PID: 19707
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.shiftos.updater/org.lineageos.updater.controller.UpdaterService }: app is in background uid UidRecord{1463ce2 u0a63 TPSL bg:+47m50s26ms idle change:idle procs:1 seq(0,0,0)}
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1616)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.ContextImpl.startService(ContextImpl.java:1571)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.content.ContextWrapper.startService(ContextWrapper.java:669)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at org.lineageos.updater.UpdatesActivity.onStart(UpdatesActivity.java:181)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1433)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.Activity.performStart(Activity.java:7847)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3295)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2017)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:107)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:214)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:7397)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:491)
05-06 17:21:58.988 10063 19707 19707 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:935)

-----

Change-Id: Ibc2d471b028c1d4e824b3ede4bbc336d76801f88
Signed-off-by: Alexander Martinz <amartinz@shiftphones.com>
2022-02-10 15:52:11 +01:00
Joey
3c7a7cd432 Updater: use consistent format for file sizes
Change-Id: I9a17cf2df69e2e39e90de169ca108511c71d4e31
Signed-off-by: Joey <joey@lineageos.org>
2022-02-10 15:50:56 +01:00
Michael W
1d3758d5b5 Updater: Show toast when starting export
* It's not immediately clear that an export is started since the
  notification isn't intrusive
* Show a toast - that will be clear enough

Change-Id: I78d78b23884df3ddb37bc486c1d6012f899c888d
2022-02-10 15:45:29 +01:00
Michael W
12a22e43e2 Updater: Switch to destination selector
* Let the user decide where to store the file
* That way it's not located in /storage/emulated/0/Android/data/...
  ...org.lineageos.updater/files/LineageOS updates/*.zip
  -> The user knows where the file is stored
  -> We don't have to care about WRITE_EXTERNAL_STORAGE etc
* Remove the cancel button - after closing the file stream we loose
  permission to access it, therefore can't delete it anymore
  -> Let the user handle deletion manually
* Since we don't use WRITE_EXTERNAL_STORAGE anymore, remove it from
  Manifest and also remove PermissionUtils (+calls) - we can now export
  immediately.
  -> This also solves the
  "TODO: start exporting once the permission has been granted"

Change-Id: I50afa403f2803569aa9def807ea20ee72c582284
2022-02-10 15:45:29 +01:00
Michael W
2623730bef Updater: No need to install every update
* Apparently users are not aware that they don't have to install every
  update we ever released (weeklies) after they have skipped some due
  to various reasons
* Since we are providing full installation packages, remind the user that
  it's ok to only ever choose the newest one

Change-Id: I70f9acd70344f36aaae7e45b848f6bcb7a8b3c0f
2022-02-10 15:45:29 +01:00
Michael W
f2ac903e3e Updater: We don't do upgrades
* We are actually updating, but especially between translations and
  non native speakers, drawing a semantical difference is more harmful
  than helpful
* Use "install" instead

Change-Id: Icdf1ce45d6cd35334b5c8ac13af3ec6741d837b6
2022-02-10 15:45:29 +01:00
Michael Bestas
8f332103fe Updater: Add exported flags in manifest
Targeting S+ (version 31 and above) requires that an explicit value
for android:exported be defined when intent filters are present

Change-Id: I2ce2b2cd1dcd69e343ae8577587483b19d825fdc
2022-02-10 15:45:28 +01:00
Michael Bestas
e0bcaec5b6 Updater: Add FLAG_IMMUTABLE flag to PendingIntent
Fixes:
Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE
or FLAG_MUTABLE be specified when creating a PendingIntent.

Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some
functionality depends on the PendingIntent being mutable,
e.g. if it needs to be used with inline replies or bubbles.

Change-Id: I63b25512d3bf6e0d3b0cc95d91295f4065175848
2022-02-10 15:45:17 +01:00
Michael W
46c06ad958 Updater: The great cleanup
* Make final where possible
* Remove unused casts, imports, methods, enums and constructors
* Add null checks

Change-Id: Idd1a16426dd1928e2ed9922f5a35ba32ce4f808b
2022-02-10 15:44:46 +01:00
Michael W
bdb6a3ff66 Updater: update dependencies
Change-Id: I0686b28e7f6754c1b11b219b9036ea372032070b
2022-02-10 15:40:01 +01:00
Michael W
16cc9dd259 Updater: Replace lintOptions with lint
* As per AS recommendation

Change-Id: Id3668f21f356f13dcce4576c528b8af06d77a95f
2022-02-10 15:40:01 +01:00
Michael W
541e70f789 Updater: Compile with and target Sdk version 30
Change-Id: Ie479a27173e9941ab3152eb3ce6078c794b5aa7f
2022-02-10 15:40:01 +01:00
Michael W
45bb652a10 Updater: Change gradle from 3.5 to 7.1
Change-Id: Ia70512a77cdb30c6315863dcb65233d38cb5c9b9
2022-02-10 15:39:58 +01:00
Michael W
69b461369c Updater: Replace jcenter with mavenCentral
Change-Id: I0b6ae6553f106eef4cb7d331e3b089b74a66abcb
2022-01-31 16:05:42 +01:00
Luca Stefani
28dd829142 fixup! Updater: add a 3-dot menu for update item
Change-Id: I10fe453c5f14d1a0ca49b734df517047cb7ee802
2021-11-01 22:02:08 +02:00
Michael W
1500f2f68e Automatic translation import
Change-Id: Ibbfc884c22676ca287f8bda05e35b2b5b28d980c
2021-10-26 20:49:28 +02:00
Timi Rautamäki
affcb29065 Updater: add a 3-dot menu for update item
A menu opening with only a long press is not intuitive and often not
found by user.

Change-Id: I7f819b77e2cbc534cafe488edadc4d3dd9b87d01
2021-10-13 18:09:21 +02:00
88 changed files with 1571 additions and 880 deletions

View File

@@ -9,8 +9,8 @@
<uses-permission android:name="android.permission.REBOOT" /> <uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECOVERY" /> <uses-permission android:name="android.permission.RECOVERY" />
<uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application <application
android:allowBackup="false" android:allowBackup="false"
@@ -25,6 +25,7 @@
android:name=".UpdatesActivity" android:name=".UpdatesActivity"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:label="@string/display_name" android:label="@string/display_name"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar" android:theme="@style/AppTheme.NoActionBar"
android:launchMode="singleTop"> android:launchMode="singleTop">
<intent-filter android:priority="1"> <intent-filter android:priority="1">
@@ -50,7 +51,7 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<receiver android:name=".UpdatesCheckReceiver"> <receiver android:name=".UpdatesCheckReceiver" android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter> </intent-filter>

View File

@@ -1,16 +1,16 @@
repositories { repositories {
google() google()
jcenter() mavenCentral()
} }
buildscript { buildscript {
repositories { repositories {
google() google()
jcenter() mavenCentral()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.5.0' classpath 'com.android.tools.build:gradle:7.1.1'
} }
} }
@@ -21,18 +21,13 @@ keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
android { android {
compileSdkVersion 29 compileSdkVersion 30
defaultConfig { defaultConfig {
minSdkVersion 27 minSdkVersion 27
targetSdkVersion 29 targetSdkVersion 30
} }
lintOptions {
ignore 'ProtectedPermissions'
// These depend on translations
ignore 'ExtraTranslation', 'ImpliedQuantity', 'MissingQuantity', 'MissingTranslation'
}
sourceSets { sourceSets {
main { main {
@@ -55,14 +50,17 @@ android {
storePassword keystoreProperties['storePassword'] storePassword keystoreProperties['storePassword']
} }
} }
lint {
ignore 'ProtectedPermissions', 'ExtraTranslation', 'ImpliedQuantity', 'MissingQuantity', 'MissingTranslation'
}
} }
dependencies { dependencies {
compileOnly fileTree(dir: 'system_libs/', include: ['*.jar']) compileOnly fileTree(dir: 'system_libs/', include: ['*.jar'])
implementation 'com.google.android.material:material:1.0.0' implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.appcompat:appcompat:1.1.0' implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.preference:preference:1.1.0' implementation 'androidx.preference:preference:1.1.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.2.1'
} }

View File

@@ -19,5 +19,6 @@
<permission name="android.permission.ACCESS_CACHE_FILESYSTEM"/> <permission name="android.permission.ACCESS_CACHE_FILESYSTEM"/>
<permission name="android.permission.REBOOT"/> <permission name="android.permission.REBOOT"/>
<permission name="android.permission.RECOVERY"/> <permission name="android.permission.RECOVERY"/>
<permission name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/>
</privapp-permissions> </privapp-permissions>
</permissions> </permissions>

View File

@@ -1,13 +1,14 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal" android:orientation="horizontal"
android:id="@+id/main_container" android:id="@+id/main_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
android:padding="16dp" android:padding="16dp"
android:weightSum="2"> android:weightSum="2"
android:baselineAligned="false">
<RelativeLayout <RelativeLayout
android:layout_width="0dp" android:layout_width="0dp"
@@ -29,57 +30,57 @@
android:fontFamily="sans-serif-light" android:fontFamily="sans-serif-light"
android:paddingBottom="16dp" android:paddingBottom="16dp"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textSize="56sp" /> android:textSize="56sp"
tools:text="LineageOS\n18.1" />
<TextView <TextView
android:id="@+id/header_build_version" android:id="@+id/header_build_version"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/header_title"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" /> android:textSize="14sp"
tools:text="Android 11"/>
<TextView <TextView
android:id="@+id/header_build_date" android:id="@+id/header_build_date"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/header_build_version"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" /> android:textSize="14sp"
tools:text="2022-01-01"/>
<TextView <TextView
android:id="@+id/header_last_check" android:id="@+id/header_last_check"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/header_build_date"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textSize="14sp" /> android:textSize="14sp"
tools:text="Last checked: 2022-01-01"/>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/header_last_check"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:weightSum="2" android:weightSum="2"
android:orientation="horizontal"> android:orientation="horizontal">
<Button <Button
android:id="@+id/refresh" android:id="@+id/refresh"
android:drawableLeft="@drawable/ic_menu_refresh" android:drawableStart="@drawable/ic_menu_refresh"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:text="refresh" android:text="@string/menu_refresh"
style="@style/Widget.AppCompat.Button.Borderless.Colored"/> style="@style/Widget.AppCompat.Button.Borderless.Colored"/>
<Button <Button
android:id="@+id/preferences" android:id="@+id/preferences"
android:drawableLeft="@drawable/ic_menu_preferences" android:drawableStart="@drawable/ic_menu_preferences"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:text="preferences" android:text="@string/menu_preferences"
style="@style/Widget.AppCompat.Button.Borderless.Colored"/> style="@style/Widget.AppCompat.Button.Borderless.Colored"/>
</LinearLayout> </LinearLayout>

View File

@@ -16,7 +16,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="horizontal" android:orientation="horizontal"
android:weightSum="1"> android:weightSum="1"
android:baselineAligned="false">
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"
@@ -48,25 +49,40 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/progress"
android:visibility="invisible"
tools:visibility="visible">
<ProgressBar <ProgressBar
android:id="@+id/progress_bar" android:id="@+id/progress_bar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal" style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingTop="4sp" android:paddingTop="4sp"
android:visibility="invisible" tools:progress="65" />
tools:progress="65"
tools:visibility="visible" /> <TextView
android:id="@+id/progress_percent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="8dp"
android:paddingEnd="8dp"
tools:text="65%" />
</LinearLayout>
<TextView <TextView
android:id="@+id/progress_text" android:id="@+id/progress_text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/progress_bar" android:layout_below="@id/progress"
android:ellipsize="marquee" android:ellipsize="marquee"
android:singleLine="true" android:singleLine="true"
android:visibility="invisible" android:visibility="invisible"
tools:text="162 of 300 MB (3 minutes left) • 65%" tools:text="162 of 300 MB (3 minutes left)"
tools:visibility="visible" /> tools:visibility="visible" />
<TextView <TextView
@@ -80,6 +96,18 @@
</RelativeLayout> </RelativeLayout>
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageButton
android:id="@+id/update_menu"
style="?android:attr/actionOverflowButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:padding="8dp"
android:contentDescription="@null" />
<Button <Button
android:id="@id/update_action" android:id="@id/update_action"
style="@style/Widget.AppCompat.Button.Borderless.Colored" style="@style/Widget.AppCompat.Button.Borderless.Colored"
@@ -88,4 +116,5 @@
android:padding="8dp" android:padding="8dp"
tools:text="Pause" /> tools:text="Pause" />
</LinearLayout> </LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>

View File

@@ -64,6 +64,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/header_build_date" android:layout_below="@id/header_build_date"
android:layout_marginTop="8dp"
android:textColor="?android:attr/textColorPrimary" android:textColor="?android:attr/textColorPrimary"
android:textSize="12sp" /> android:textSize="12sp" />
</RelativeLayout> </RelativeLayout>

View File

@@ -29,7 +29,7 @@
android:entries="@array/menu_auto_updates_check_interval_entries" /> android:entries="@array/menu_auto_updates_check_interval_entries" />
</LinearLayout> </LinearLayout>
<Switch <androidx.appcompat.widget.SwitchCompat
android:id="@+id/preferences_auto_delete_updates" android:id="@+id/preferences_auto_delete_updates"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@@ -37,7 +37,7 @@
android:text="@string/menu_auto_delete_updates" android:text="@string/menu_auto_delete_updates"
android:textSize="16sp" /> android:textSize="16sp" />
<Switch <androidx.appcompat.widget.SwitchCompat
android:id="@+id/preferences_mobile_data_warning" android:id="@+id/preferences_mobile_data_warning"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@@ -45,7 +45,7 @@
android:text="@string/menu_mobile_data_warning" android:text="@string/menu_mobile_data_warning"
android:textSize="16sp" /> android:textSize="16sp" />
<Switch <androidx.appcompat.widget.SwitchCompat
android:id="@+id/preferences_ab_perf_mode" android:id="@+id/preferences_ab_perf_mode"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@@ -53,7 +53,7 @@
android:text="@string/menu_ab_perf_mode" android:text="@string/menu_ab_perf_mode"
android:textSize="16sp" /> android:textSize="16sp" />
<Switch <androidx.appcompat.widget.SwitchCompat
android:id="@+id/preferences_update_recovery" android:id="@+id/preferences_update_recovery"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@@ -15,7 +15,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="horizontal" android:orientation="horizontal"
android:weightSum="1"> android:weightSum="1"
android:baselineAligned="false">
<LinearLayout <LinearLayout
android:layout_width="0dp" android:layout_width="0dp"
@@ -47,25 +48,40 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/progress"
android:visibility="invisible"
tools:visibility="visible">
<ProgressBar <ProgressBar
android:id="@+id/progress_bar" android:id="@+id/progress_bar"
style="@style/Widget.AppCompat.ProgressBar.Horizontal" style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingTop="4sp" android:paddingTop="4sp"
android:visibility="invisible" tools:progress="65" />
tools:progress="65"
tools:visibility="visible" /> <TextView
android:id="@+id/progress_percent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="8dp"
android:paddingEnd="8dp"
tools:text="65%" />
</LinearLayout>
<TextView <TextView
android:id="@+id/progress_text" android:id="@+id/progress_text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_below="@id/progress_bar" android:layout_below="@id/progress"
android:ellipsize="marquee" android:ellipsize="marquee"
android:singleLine="true" android:singleLine="true"
android:visibility="invisible" android:visibility="invisible"
tools:text="162 of 300 MB (3 minutes left) • 65%" tools:text="162 of 300 MB (3 minutes left)"
tools:visibility="visible" /> tools:visibility="visible" />
<TextView <TextView
@@ -79,6 +95,18 @@
</RelativeLayout> </RelativeLayout>
</LinearLayout> </LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageButton
android:id="@+id/update_menu"
style="?android:attr/actionOverflowButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:padding="8dp"
android:contentDescription="@null" />
<Button <Button
android:id="@id/update_action" android:id="@id/update_action"
style="@style/Widget.AppCompat.Button.Borderless.Colored" style="@style/Widget.AppCompat.Button.Borderless.Colored"
@@ -87,4 +115,5 @@
android:padding="8dp" android:padding="8dp"
tools:text="Pause" /> tools:text="Pause" />
</LinearLayout> </LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android">
xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/menu_export_update" android:id="@+id/menu_export_update"
android:title="@string/menu_export_update" /> android:title="@string/menu_export_update" />

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">آخر تحقق: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">آخر تحقق: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> من <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> من <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> من <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">جارٍ التحقق من التحديث</string> <string name="list_verifying_update">جارٍ التحقق من التحديث</string>
<string name="list_no_updates">لا توجد تحديثات جديدة. للبحث عن تحديثات جديدة يدويًا، استخدم الزر تحديث.</string> <string name="list_no_updates">لا توجد تحديثات جديدة. للبحث عن تحديثات جديدة يدويًا، استخدم الزر تحديث.</string>
<string name="action_download">تنزيل</string> <string name="action_download">تنزيل</string>
@@ -81,8 +81,6 @@
<string name="confirm_delete_dialog_title">حذف الملف</string> <string name="confirm_delete_dialog_title">حذف الملف</string>
<string name="confirm_delete_dialog_message">حذف ملف التحديث المحدد؟</string> <string name="confirm_delete_dialog_message">حذف ملف التحديث المحدد؟</string>
<string name="apply_update_dialog_title">تطبيق التحديث</string> <string name="apply_update_dialog_title">تطبيق التحديث</string>
<string name="apply_update_dialog_message">أنت على وشك الترقية إلى <xliff:g id="update_name">%1$s</xliff:g>.\n\nإذا قمت بالضغط على <xliff:g id="ok">%2$s</xliff:g>، سيقوم الجهاز بإعادة تشغيل نفسه في وضع الاستعادة لتثبيت التحديث.\n\nملاحظة: هذه الميزة تتطلب مسترد متوافق أو سيلزم تثبيت التحديثات يدويًا.</string>
<string name="apply_update_dialog_message_ab">أنت على وشك الترقية إلى <xliff:g id="update_name">%1$s</xliff:g>.\n\nعند الضغط على <xliff:g id="ok">%2$s</xliff:g>، وسوف يبدأ الجهاز بالتثبيت في الخلفية.\n\nحتى الانتهاء، وسوف يتم مطالبتك بإعادة التشغيل.</string>
<string name="cancel_installation_dialog_message">إلغاء التثبيت؟</string> <string name="cancel_installation_dialog_message">إلغاء التثبيت؟</string>
<string name="label_download_url">عنوان التنزيل</string> <string name="label_download_url">عنوان التنزيل</string>
<string name="toast_download_url_copied">تم نسخ الرابط</string> <string name="toast_download_url_copied">تم نسخ الرابط</string>
@@ -90,6 +88,7 @@
<string name="notification_export_success">تم تصدير التحديث</string> <string name="notification_export_success">تم تصدير التحديث</string>
<string name="notification_export_fail">خطأ في التصدير</string> <string name="notification_export_fail">خطأ في التصدير</string>
<string name="toast_already_exporting">جاري تصدير تحديث بالفعل</string> <string name="toast_already_exporting">جاري تصدير تحديث بالفعل</string>
<string name="toast_export_started">بدأ التصدير</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="zero"><xliff:g id="count">%d</xliff:g> ثانية متبقية</item> <item quantity="zero"><xliff:g id="count">%d</xliff:g> ثانية متبقية</item>
<item quantity="one"><xliff:g id="count">%d</xliff:g> ثانية متبقية</item> <item quantity="one"><xliff:g id="count">%d</xliff:g> ثانية متبقية</item>
@@ -124,4 +123,6 @@
<string name="new_updates_channel_title">تحديثات جديدة</string> <string name="new_updates_channel_title">تحديثات جديدة</string>
<string name="ongoing_channel_title">التنزيلات الحالية</string> <string name="ongoing_channel_title">التنزيلات الحالية</string>
<string name="update_failed_channel_title">فشل التحديث</string> <string name="update_failed_channel_title">فشل التحديث</string>
<string name="info_dialog_title">هل كنت تعلم؟ </string>
<string name="info_dialog_ok">شكرًا على المعلومة!</string>
</resources> </resources>

20
res/values-as/strings.xml Normal file
View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2017-2020 The LineageOS Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="menu_update_recovery">পুনৰুদ্ধাৰ আপডেট কৰক</string>
<string name="toast_forced_update_recovery">এই ডিভাইচত Lineage পুনৰুদ্ধাৰ আপডেটসমূহ নিষ্ক্ৰিয় কৰাটো অসম্ভৱ।</string>
</resources>

View File

@@ -17,58 +17,60 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Anovador</string> <string name="app_name">Anovador</string>
<string name="display_name">Anovador</string> <string name="display_name">Anovador</string>
<string name="verification_failed_notification">Falló la verificación</string> <string name="verification_failed_notification">La verificación falló</string>
<string name="verifying_download_notification">Verificando l\'anovamientu</string> <string name="verifying_download_notification">Verificando l\'anovamientu</string>
<string name="downloading_notification">Baxando</string> <string name="downloading_notification">En descarga</string>
<string name="download_paused_notification">Descarga posada</string> <string name="download_paused_notification">La descarga ta en posa</string>
<string name="download_paused_error_notification">Fallu de descarga</string> <string name="download_paused_error_notification">Error de la descarga</string>
<string name="download_completed_notification">Completóse la descarga</string> <string name="download_completed_notification">Completóse la descarga</string>
<string name="download_starting_notification">Aniciando descarga</string> <string name="download_starting_notification">Aniciando la descarga</string>
<string name="update_failed_notification">Falló l\'anovamientu</string> <string name="update_failed_notification">L\'anovamientu falló</string>
<string name="new_updates_found_title">Anovamientos nuevos</string> <string name="installation_suspended_notification">Suspendióse la instalación</string>
<string name="new_updates_found_title">Hai anovamientos</string>
<string name="text_download_speed">%1$s, %2$s/s</string> <string name="text_download_speed">%1$s, %2$s/s</string>
<string name="pause_button">Posar</string> <string name="pause_button">Posar</string>
<string name="resume_button">Siguir</string> <string name="resume_button">Siguir</string>
<string name="suspend_button">Suspender</string>
<string name="installing_update">Instalando\'l paquete d\'anovamientu</string> <string name="installing_update">Instalando\'l paquete d\'anovamientu</string>
<string name="installing_update_error">Fallu d\'instalación</string> <string name="installing_update_error">Error de la instalación</string>
<string name="installing_update_finished">Instalóse l\'anovamientu</string> <string name="installing_update_finished">Instalóse l\'anovamientu</string>
<string name="finalizing_package">Finando la instalación del paquete</string> <string name="finalizing_package">Finando la instalación del paquete</string>
<string name="preparing_ota_first_boot">Tresnando\'l primer arranque</string> <string name="preparing_ota_first_boot">Tresnando\'l primer arrinque</string>
<string name="dialog_prepare_zip_message">Tresnáu preliminar del anovamientu</string> <string name="dialog_prepare_zip_message">Tresnáu preliminar del anovamientu</string>
<string name="dialog_battery_low_title">Batería baxa</string> <string name="dialog_battery_low_title">Queda poca batería</string>
<string name="dialog_battery_low_message_pct">El nivel de batería ta perbaxu, precises polo menos<xliff:g id="percent_discharging">%1$d</xliff:g>%% de batería pa siguir, <xliff:g id="percent_charging">%2$d</xliff:g>%% si ta en carga.</string> <string name="dialog_battery_low_message_pct">El nivel de batería ye perbaxu, tien d\'haber polo menos un <xliff:g id="percent_discharging">%1$d</xliff:g>%% de batería pa siguir, <xliff:g id="percent_charging">%2$d</xliff:g>%% si ta en carga.</string>
<string name="reboot">Reaniciar</string> <string name="reboot">Reaniciar</string>
<string name="menu_refresh">Refrescar</string> <string name="menu_refresh">Anovar</string>
<string name="menu_preferences">Preferencies</string> <string name="menu_preferences">Preferencies</string>
<string name="menu_auto_updates_check">Comprobación automática d\'anovamientos</string> <string name="menu_auto_updates_check">Comprobación d\'anovamientos</string>
<string name="menu_auto_updates_check_interval_daily">Una vegada al día</string> <string name="menu_auto_updates_check_interval_daily">Caldía</string>
<string name="menu_auto_updates_check_interval_weekly">Una vegada por selmana</string> <string name="menu_auto_updates_check_interval_weekly">Selmanalmente</string>
<string name="menu_auto_updates_check_interval_monthly">Una vegada al mes</string> <string name="menu_auto_updates_check_interval_monthly">Mensualmente</string>
<string name="menu_auto_updates_check_interval_never">Enxamás</string> <string name="menu_auto_updates_check_interval_never">Enxamás</string>
<string name="menu_auto_delete_updates">Desaniciar anovamientos al instalalos</string> <string name="menu_auto_delete_updates">Desaniciar los anovamientos al instalalos</string>
<string name="menu_delete_update">Desaniciar</string> <string name="menu_delete_update">Desaniciar</string>
<string name="menu_copy_url">Copiar URL</string> <string name="menu_copy_url">Copiar la URL</string>
<string name="menu_export_update">Esportar anovamientu</string> <string name="menu_export_update">Esportar l\'anovamientu</string>
<string name="menu_show_changelog">Amosar rexistru de cambeos</string> <string name="menu_show_changelog">Amosar el rexistru de cambeos</string>
<string name="menu_ab_perf_mode">Priorizar el procesu d\'anovamientu</string> <string name="menu_ab_perf_mode">Priorizar el procesu d\'anovamientu</string>
<string name="menu_update_recovery">Anovar el recovery</string> <string name="menu_update_recovery">Anovar el recovery</string>
<string name="toast_forced_update_recovery">Ye imposible desactivar los anovamientos del recovery de Lineage nesti preséu.</string> <string name="toast_forced_update_recovery">Ye imposible desactivar los anovamientos del recovery de Lineage nesti preséu.</string>
<string name="snack_updates_found">Alcontráronse anovamientos nuevos</string> <string name="snack_updates_found">Atopáronse anovamientos</string>
<string name="snack_no_updates_found">Nun s\'alcontraron anovamientos</string> <string name="snack_no_updates_found">Nun s\'atopó nengún anovamientu</string>
<string name="snack_updates_check_failed">Falló la comprobación d\'anovamientos. Comprueba la to conexón a Internet y volvi tentalo, por favor.</string> <string name="snack_updates_check_failed">La comprobación d\'anovamientos falló. Comprueba la conexón a internet y volvi tentalo.</string>
<string name="snack_download_failed">Falló la descarga. Comprueba la to conexón a Internet y volvi tentalo, por favor.</string> <string name="snack_download_failed">La descarga falló. Comprueba la conexón a internet y volvi tentalo.</string>
<string name="snack_download_verification_failed">Falló la verificación del anovamientu.</string> <string name="snack_download_verification_failed">La comprobación d\'anovamientos falló</string>
<string name="snack_download_verified">Descarga completada.</string> <string name="snack_download_verified">Completóse la descarga.</string>
<string name="snack_update_not_installable">Esti anovamientu nun pue instalase enriba de la compilación actual.</string> <string name="snack_update_not_installable">Esti anovamientu nun se pue instalar sobre la versión actual.</string>
<string name="header_title_text">LineageOS\n%1$s</string> <string name="header_title_text">LineageOS\n%1$s</string>
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string> <string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
<string name="header_last_updates_check">Anovamientu caberu\'l <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Verificando anovamientu</string> <string name="list_verifying_update">Verificando l\'anovamientu</string>
<string name="list_no_updates">Nun s\'alcontraron anovamientos. Pa comprobalos a mano, usa\'l botón Refrescar.</string> <string name="list_no_updates">Nun s\'atopó nengún anovamientu. Pa comprobar manualmente si los hai, usa\'l botón «Anovar».</string>
<string name="action_download">Baxar</string> <string name="action_download">Baxar</string>
<string name="action_pause">Posar</string> <string name="action_pause">Posar</string>
<string name="action_resume">Siguir</string> <string name="action_resume">Siguir</string>
@@ -76,24 +78,25 @@
<string name="action_info">Información</string> <string name="action_info">Información</string>
<string name="action_delete">Desaniciar</string> <string name="action_delete">Desaniciar</string>
<string name="action_cancel">Encaboxar</string> <string name="action_cancel">Encaboxar</string>
<string name="confirm_delete_dialog_title">Desaniciar ficheru</string> <string name="confirm_delete_dialog_title">Desaniciu d\'un ficheru</string>
<string name="confirm_delete_dialog_message">¿Desaniciar l\'anovamientu esbilláu?</string> <string name="confirm_delete_dialog_message">¿Quies desaniciar l\'anovamientu seleicionáu?</string>
<string name="apply_update_dialog_title">Aplicar anovamientu</string> <string name="apply_update_dialog_title">Instalación d\'un anovamientu</string>
<string name="apply_update_dialog_message">Tas a piques d\'anovar a <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi primes <xliff:g id="ok">%2$s</xliff:g>, el preséu va reaniciase solu al recovery pa instalar l\'anovamientu.\n\nNota: Esta carauterística rique un recovery compatible o los anovamientos van precisar instalase a mano.</string> <string name="apply_update_dialog_message">Tas a piques d\'instalar «<xliff:g id="update_name">%1$s</xliff:g>».\n\nSi primes «<xliff:g id="ok">%2$s</xliff:g>», el preséu va reaniciase y entrar nel mou de recuperación pa instalar l\'anovamientu.\n\nNota: esta función rique un recovery compatible o los anovamientos tienen que s\'instalar manualmente.</string>
<string name="apply_update_dialog_message_ab">Tas a piques d\'anovar a <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi primes <xliff:g id="ok">%2$s</xliff:g>, el preséu va entamar la instalación de fondu.\n\nNamái acabar, va suxerísete reaniciar.</string> <string name="apply_update_dialog_message_ab">Tas a piques d\'instalar «<xliff:g id="update_name">%1$s</xliff:g>».\n\nSi primes «<xliff:g id="ok">%2$s</xliff:g>», el preséu va comenzar la instalación en segundu planu.\n\nNamás acabar, el propiu preséu va suxerite que lu reanicies.</string>
<string name="cancel_installation_dialog_message">¿Encaboxar la instalación?</string> <string name="cancel_installation_dialog_message">¿Quies encaboxar la instalación?</string>
<string name="label_download_url">URL de descarga</string> <string name="label_download_url">URL de la descarga</string>
<string name="toast_download_url_copied">Copióse la URL</string> <string name="toast_download_url_copied">Copióse la URL</string>
<string name="dialog_export_title">Esportando anovamientu</string> <string name="dialog_export_title">Esportando l\'anovamientu</string>
<string name="notification_export_success">Esportóse l\'anovamientu</string> <string name="notification_export_success">Esportóse l\'anovamientu</string>
<string name="notification_export_fail">Fallu d\'esportación</string> <string name="notification_export_fail">Error de la esportación</string>
<string name="toast_already_exporting">Yá ta esportándose un anovamientu</string> <string name="toast_already_exporting">Yá ta esportándose un anovamientu</string>
<string name="toast_export_started">Anicióse la esportación</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">Queda 1 segundu</item> <item quantity="one">Queda 1 segundu</item>
<item quantity="other">Queden <xliff:g id="count">%d</xliff:g> segundos</item> <item quantity="other">Queden <xliff:g id="count">%d</xliff:g> segundos</item>
</plurals> </plurals>
<plurals name="eta_minutes"> <plurals name="eta_minutes">
<item quantity="one">Queda un 1 minutu</item> <item quantity="one">Queda 1 minutu</item>
<item quantity="other">Queden <xliff:g id="count">%d</xliff:g> minutos</item> <item quantity="other">Queden <xliff:g id="count">%d</xliff:g> minutos</item>
</plurals> </plurals>
<plurals name="eta_hours"> <plurals name="eta_hours">
@@ -101,13 +104,16 @@
<item quantity="other">Queden <xliff:g id="count">%d</xliff:g> hores</item> <item quantity="other">Queden <xliff:g id="count">%d</xliff:g> hores</item>
</plurals> </plurals>
<string name="update_on_mobile_data_title">Alvertencia</string> <string name="update_on_mobile_data_title">Alvertencia</string>
<string name="update_on_mobile_data_message">Tas a piques de baxar un paquete d\'anovamientu usando los datos móviles que pue causar un usu altu de datos. ¿Prestaríate siguir?</string> <string name="update_on_mobile_data_message">Tas a piques de baxar un paquete d\'anovamientu colos datos móviles que pue xenerar un usu altu de datos. ¿Quies siguir?</string>
<string name="checkbox_mobile_data_warning">Nun amosar más</string> <string name="checkbox_mobile_data_warning">Nun volver amosar</string>
<string name="menu_mobile_data_warning">Alvertencia de datos de móviles</string> <string name="menu_mobile_data_warning">Alvertir al usar la rede móvil</string>
<string name="blocked_update_dialog_title">Bloquióse l\'anovamientu</string> <string name="blocked_update_dialog_title">Bloquióse l\'anovamientu</string>
<string name="blocked_update_dialog_message">Esti anovamientu nun pue instalase usando l\'aplicación anovadora. Llei <xliff:g id="info_url">%1$s</xliff:g> pa más información, por favor.</string> <string name="blocked_update_dialog_message">Esti anovamientu nun se pue instalar con «Anovador». Llei <xliff:g id="info_url">%1$s</xliff:g> pa consiguir más información.</string>
<string name="export_channel_title">Completáu de la esportación</string> <string name="export_channel_title">Esportación completada</string>
<string name="new_updates_channel_title">Anovamientos nuevos</string> <string name="new_updates_channel_title">Hai anovamientos</string>
<string name="ongoing_channel_title">Descargues en cursu</string> <string name="ongoing_channel_title">Descargues en cursu</string>
<string name="update_failed_channel_title">Falló l\'anovamientu</string> <string name="update_failed_channel_title">Anovamientu fallíu</string>
<string name="info_dialog_title">¿Sabíeslo?</string>
<string name="info_dialog_message">Los anovamientos de LineageOS son paquetes d\'instalación completos. Esto significa que siempres pues instalar l\'últimu anovamientu, ¡magar que saltares dalgún intermediu!</string>
<string name="info_dialog_ok">¡Gracies!</string>
</resources> </resources>

View File

@@ -15,62 +15,62 @@
limitations under the License. limitations under the License.
--> -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Yeniləyici</string> <string name="app_name">Güncəlləyici</string>
<string name="display_name">Yeniləyici</string> <string name="display_name">Güncəlləyici</string>
<string name="verification_failed_notification">Təsdiqləmə uğursuz oldu</string> <string name="verification_failed_notification">Doğrulama uğursuz oldu</string>
<string name="verifying_download_notification">Yeniləmə təsdiqlənir</string> <string name="verifying_download_notification">Güncəlləmə doğrulanır</string>
<string name="downloading_notification">Endirilir</string> <string name="downloading_notification">Endirilir</string>
<string name="download_paused_notification">Endirməyə fasilə verildi</string> <string name="download_paused_notification">Endirməyə fasilə verildi</string>
<string name="download_paused_error_notification">Endirmə xətası</string> <string name="download_paused_error_notification">Endirmə xətası</string>
<string name="download_completed_notification">Endirmə tamamlandı</string> <string name="download_completed_notification">Endirmə tamamlandı</string>
<string name="download_starting_notification">Endirmə başladılır</string> <string name="download_starting_notification">Endirmə başladılır</string>
<string name="update_failed_notification">Yeniləmə uğursuz oldu</string> <string name="update_failed_notification">Güncəlləmə uğursuz oldu</string>
<string name="installation_suspended_notification">Quraşdırma dayandırıldı</string> <string name="installation_suspended_notification">Quraşdırma dayandırıldı</string>
<string name="new_updates_found_title">Ən son yeniləmələr</string> <string name="new_updates_found_title">Yeni güncəlləmələr</string>
<string name="text_download_speed">%1$s, %2$s/s</string> <string name="text_download_speed">%1$s, %2$s/s</string>
<string name="pause_button">Fasilə ver</string> <string name="pause_button">Fasilə ver</string>
<string name="resume_button">Davam etdir</string> <string name="resume_button">Davam etdir</string>
<string name="suspend_button">Dayandır</string> <string name="suspend_button">Dayandır</string>
<string name="installing_update">Yeniləmə paketi quraşdırılır</string> <string name="installing_update">Güncəlləmə paketi quraşdırılır</string>
<string name="installing_update_error">Quraşdırma xətası</string> <string name="installing_update_error">Quraşdırma xətası</string>
<string name="installing_update_finished">Yeniləmə quraşdırıldı</string> <string name="installing_update_finished">Güncəlləmə quraşdırıldı</string>
<string name="finalizing_package">Paket quraşdırma tamamlanır</string> <string name="finalizing_package">Paket quraşdırma tamamlanır</string>
<string name="preparing_ota_first_boot">İlk yükləmə üçün hazırlanır</string> <string name="preparing_ota_first_boot">İlk yükləmə üçün hazırlanır</string>
<string name="dialog_prepare_zip_message">Yeniləmə ilkin hazırlığı</string> <string name="dialog_prepare_zip_message">Güncəlləmə ilkin hazırlıq</string>
<string name="dialog_battery_low_title">Zəif batareya</string> <string name="dialog_battery_low_title">Zəif batareya</string>
<string name="dialog_battery_low_message_pct">Batereya səviyyəsi çox aşağıdır, davam etmək üçün ən az batereya səviyyəsi <xliff:g id="percent_discharging">%1$d</xliff:g>%% olmalıdır, <xliff:g id="percent_charging">%2$d</xliff:g>%% enerji yığır.</string> <string name="dialog_battery_low_message_pct">Batereya səviyyəsi çox aşağıdır, davam etmək üçün ən az batereya səviyyəsi <xliff:g id="percent_discharging">%1$d</xliff:g>%% olmalıdır, <xliff:g id="percent_charging">%2$d</xliff:g>%% enerji yığır.</string>
<string name="reboot">Yenidən başlat</string> <string name="reboot">Yenidən başlat</string>
<string name="menu_refresh">Təzələ</string> <string name="menu_refresh">Təzələ</string>
<string name="menu_preferences">Tərcihlər</string> <string name="menu_preferences">Tərcihlər</string>
<string name="menu_auto_updates_check">Avtomatik yeniləmə yoxlanışı</string> <string name="menu_auto_updates_check">Avto-güncəlləmə yoxlanışı</string>
<string name="menu_auto_updates_check_interval_daily">Gündə bir dəfə</string> <string name="menu_auto_updates_check_interval_daily">Gündə bir dəfə</string>
<string name="menu_auto_updates_check_interval_weekly">Həftədə bir dəfə</string> <string name="menu_auto_updates_check_interval_weekly">Həftədə bir dəfə</string>
<string name="menu_auto_updates_check_interval_monthly">Ayda bir dəfə</string> <string name="menu_auto_updates_check_interval_monthly">Ayda bir dəfə</string>
<string name="menu_auto_updates_check_interval_never">Heç vaxt</string> <string name="menu_auto_updates_check_interval_never">Heç vaxt</string>
<string name="menu_auto_delete_updates">Quraşdırılanda yeniləmələri sil</string> <string name="menu_auto_delete_updates">Quraşdırılanda güncəlləmələri sil</string>
<string name="menu_delete_update">Sil</string> <string name="menu_delete_update">Sil</string>
<string name="menu_copy_url">URL-ni Kopyala</string> <string name="menu_copy_url">URL-ni Kopyala</string>
<string name="menu_export_update">Yeniləməni köçür</string> <string name="menu_export_update">Güncəlləməni xaricə köçür</string>
<string name="menu_show_changelog">Dəyişiklik jurnalını göstər</string> <string name="menu_show_changelog">Dəyişiklik jurnalını göstər</string>
<string name="menu_ab_perf_mode">Üstünlüyü yeniləmə prosesinə ver</string> <string name="menu_ab_perf_mode">Üstünlüyü güncəlləmə prosesinə ver</string>
<string name="menu_update_recovery">Bərpa rejimini yeni</string> <string name="menu_update_recovery">Geri qaytarma rejimini güncəl</string>
<string name="toast_forced_update_recovery">Bu cihazda Lineage Bərpa yeniləmələrini sıradan çıxartmaq mümkün deyil.</string> <string name="toast_forced_update_recovery">Bu cihazda Lineage Geri qaytarma güncəlləmələrini sıradan çıxartmaq mümkün deyil.</string>
<string name="snack_updates_found">Yeniləmə tapıldı</string> <string name="snack_updates_found">Yeni güncəlləmə tapıldı</string>
<string name="snack_no_updates_found">Yeniləmə yoxdur</string> <string name="snack_no_updates_found">Yeni güncəlləmə tapılmadı</string>
<string name="snack_updates_check_failed">Yeniləmə yoxlanışı uğursuz oldu. Zəhmət olmasa internet bağlantısını yoxlayıb yenidən cəhd edin.</string> <string name="snack_updates_check_failed">Güncəlləmə yoxlanışı uğursuz oldu. Lütfən internet bağlantınızı yoxlayıb daha sonra yenidən sınayın.</string>
<string name="snack_download_failed">Endirmə uğursuz oldu. Zəhmət olmasa internet bağlantısını yoxlayıb yenidən cəhd edin.</string> <string name="snack_download_failed">Endirmə uğursuz oldu. Lütfən internet bağlantınızı yoxlayıb yenidən sınayın.</string>
<string name="snack_download_verification_failed">Yeniləmə təsdiqləməsi uğursuz oldu.</string> <string name="snack_download_verification_failed">Güncəlləmə doğrulaması uğursuz oldu.</string>
<string name="snack_download_verified">Endirmə tamamlandı.</string> <string name="snack_download_verified">Endirmə tamamlandı.</string>
<string name="snack_update_not_installable">Bu yeniləmə hazırki quruluşun üzərində quraşdırıla bilməz.</string> <string name="snack_update_not_installable">Bu güncəlləmə hazırkı quruluşun üzərinə quraşdırıla bilməz.</string>
<string name="header_title_text">LineageOS\n%1$s</string> <string name="header_title_text">LineageOS\n%1$s</string>
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string> <string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
<string name="header_last_updates_check">Son yoxlama: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Son yoxlama: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Yeniləmə təsdiqlənir</string> <string name="list_verifying_update">Güncəlləmə doğrulanır</string>
<string name="list_no_updates">Yeniləmə tapılmadı. Yeniləmələri əllə yoxlamaq üçün Təzələ düyməsindən istifadə edin.</string> <string name="list_no_updates">Yeni güncəlləmə tapılmadı. Yeni güncəlləmələri əllə yoxlamaq üçün Təzələ düyməsini istifadə edin.</string>
<string name="action_download">Endir</string> <string name="action_download">Endir</string>
<string name="action_pause">Fasilə ver</string> <string name="action_pause">Fasilə ver</string>
<string name="action_resume">Davam etdir</string> <string name="action_resume">Davam etdir</string>
@@ -79,17 +79,18 @@
<string name="action_delete">Sil</string> <string name="action_delete">Sil</string>
<string name="action_cancel">İmtina</string> <string name="action_cancel">İmtina</string>
<string name="confirm_delete_dialog_title">Faylı sil</string> <string name="confirm_delete_dialog_title">Faylı sil</string>
<string name="confirm_delete_dialog_message">Seçilmiş yeniləmə faylı silinsin?</string> <string name="confirm_delete_dialog_message">Seçilmiş güncəlləmə faylı silinsin?</string>
<string name="apply_update_dialog_title">Yeniləməni tətbiq et</string> <string name="apply_update_dialog_title">Güncəlləməni tətbiq et</string>
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> yüksəldirsiniz.\n\n<xliff:g id="ok">%2$s</xliff:g> bassanız, cihaz yeniləməni quraşdırmaq üçün bərpa rejimində yenidən başlayacaq.\n\nQeyd: Bu özəlliyin uyğun bir Bərpa mühitinə ehtiyacı var və ya yeniləmələr əllə quraşdırılmalıdır.</string> <string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> quraşdırırsınız.\n\n<xliff:g id="ok">%2$s</xliff:g> düyməsinə bassanız, cihaz güncəlləməni quraşdırmaq üçün bərpa rejimində yenidən başlayacaq.\n\nQeyd: Bu özəlliyin uyğun bir Bərpa mühitinə ehtiyacı var və ya güncəlləmələr əllə quraşdırılmalıdır.</string>
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> yüksəldirsiniz.\n\n<xliff:g id="ok">%2$s</xliff:g> düyməsinə bassanız, cihaz arxaplanda quraşdırılmağa başlıyacaq.\n\nƏməliyyat bitəndə, yenidən başladılmalıdır.</string> <string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> quraşdırırsınız.\n\n<xliff:g id="ok">%2$s</xliff:g> düyməsinə bassanız, cihaz arxaplanda quraşdırılmağa başlıyacaq.\n\nƏməliyyat bitəndə, yenidən başladılmalıdır.</string>
<string name="cancel_installation_dialog_message">Quraşdırmadan imtina edilsin?</string> <string name="cancel_installation_dialog_message">Quraşdırmadan imtina edilsin?</string>
<string name="label_download_url">Endirmə bağlantısı</string> <string name="label_download_url">Endirmə bağlantısı</string>
<string name="toast_download_url_copied">Bağlantı kopyalandı</string> <string name="toast_download_url_copied">Bağlantı kopyalandı</string>
<string name="dialog_export_title">Yeniləmə köçürülür</string> <string name="dialog_export_title">Güncəlləmə xaricə köçürülür</string>
<string name="notification_export_success">Yeniləmə köçürüldü</string> <string name="notification_export_success">Güncəlləmə xaricə köçürüldü</string>
<string name="notification_export_fail">Köçürmə xətası</string> <string name="notification_export_fail">Köçürmə xətası</string>
<string name="toast_already_exporting">Artıq bir yeniləmə köçürülür</string> <string name="toast_already_exporting">Artıq bir güncəlləmə xaricə köçürülür</string>
<string name="toast_export_started">Xaricə köçürmə başladı</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 saniyə qaldı</item> <item quantity="one">1 saniyə qaldı</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> saniyə qaldı</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> saniyə qaldı</item>
@@ -103,13 +104,16 @@
<item quantity="other"><xliff:g id="count">%d</xliff:g> saat qaldı</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> saat qaldı</item>
</plurals> </plurals>
<string name="update_on_mobile_data_title">Xəbərdarlıq</string> <string name="update_on_mobile_data_title">Xəbərdarlıq</string>
<string name="update_on_mobile_data_message">Böyük ehtimalla mobil verilənlərdən istifadə edərək yüksək verilənlər istifadəsinə səbəb olacaq yeniləmə paketi endirirsiniz. Davam etmək istəyirsiniz?</string> <string name="update_on_mobile_data_message">Böyük ehtimalla mobil internet istifadə edərək yüksək internet istifadəsinə səbəb olacaq güncəlləmə paketi endirirsiniz. Davam etmək istəyirsiniz?</string>
<string name="checkbox_mobile_data_warning">Təkrar göstərmə</string> <string name="checkbox_mobile_data_warning">Təkrar göstərmə</string>
<string name="menu_mobile_data_warning">Mobil verilənlər xəbərdarlığı</string> <string name="menu_mobile_data_warning">Mobil internet xəbərdarlığı</string>
<string name="blocked_update_dialog_title">Yeniləmə əngəlləndi</string> <string name="blocked_update_dialog_title">Güncəlləmə əngəlləndi</string>
<string name="blocked_update_dialog_message">Bu yeniləmə, tətbiq yeniləyici istifadə edilərək quraşdırıla bilməz. Ətraflı məlumat üçün zəhmət olmasa <xliff:g id="info_url">%1$s</xliff:g> ünvanını oxuyun.</string> <string name="blocked_update_dialog_message">Bu güncəlləmə, tətbiq güncəlləyici istifadə edilərək quraşdırıla bilməz. Ətraflı məlumat üçün lütfən <xliff:g id="info_url">%1$s</xliff:g> ünvanını oxuyun.</string>
<string name="export_channel_title">Köçürmə tamamlandı</string> <string name="export_channel_title">Köçürmə tamamlandı</string>
<string name="new_updates_channel_title">Ən son yeniləmələr</string> <string name="new_updates_channel_title">Yeni güncəlləmələr</string>
<string name="ongoing_channel_title">Davam edən endirmələr</string> <string name="ongoing_channel_title">Davam edən endirmələr</string>
<string name="update_failed_channel_title">Yeniləmə uğursuz oldu</string> <string name="update_failed_channel_title">Güncəlləmə uğursuz oldu</string>
<string name="info_dialog_title">Bilirdiniz?</string>
<string name="info_dialog_message">LineageOS güncəlləmələri, tam quraşdırma paketləridir. Yəni, güncəlləmə prosesini ötürsəniz belə, hər zaman yalnız son güncəlləməni quraşdıra bilirsiniz!</string>
<string name="info_dialog_ok">Məlumat üçün təşəkkürlər!</string>
</resources> </resources>

65
res/values-be/strings.xml Normal file
View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2017-2020 The LineageOS Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="verifying_download_notification">Праверка абнаўленняў</string>
<string name="download_paused_error_notification">Памылка спампоўвання</string>
<string name="download_starting_notification">Пачатак спампоўвання</string>
<string name="installation_suspended_notification">Усталяванне прыпынена</string>
<string name="new_updates_found_title">Новыя абнаўленні</string>
<string name="text_download_speed">%1$s, %2$s/с</string>
<string name="suspend_button">Прыпыніць</string>
<string name="installing_update">Усталяванне пакета з абнаўленнем</string>
<string name="installing_update_error">Памылка ўсталявання</string>
<string name="installing_update_finished">Абнаўленне ўсталявана</string>
<string name="preparing_ota_first_boot">Падрыхтоўка да першага запуску</string>
<string name="dialog_prepare_zip_message">Падрыхтоўка абнаўлення</string>
<string name="reboot">Перазапуск</string>
<string name="menu_refresh">Абнавiць</string>
<string name="menu_auto_updates_check">Аўтаматычная праверка абнаўленняў</string>
<string name="menu_auto_updates_check_interval_monthly">Штомесяц</string>
<string name="menu_auto_updates_check_interval_never">Ніколі</string>
<string name="menu_auto_delete_updates">Выдаліць файлы абнаўлення пасля ўсталявання</string>
<string name="menu_delete_update">Выдаліць</string>
<string name="menu_copy_url">Скапіяваць URL-адрас</string>
<string name="menu_export_update">Экспартаванне абнаўлення</string>
<string name="menu_show_changelog">Паказаць журнал змяненняў</string>
<string name="menu_ab_perf_mode">Прыярытэт працэсу абнаўлення</string>
<string name="snack_no_updates_found">Абнаўленні не знойдзены</string>
<string name="header_title_text">LineageOS\n%1$s</string>
<string name="header_last_updates_check">Апошняя праверка: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_verifying_update">Праверка абнаўленняў</string>
<string name="list_no_updates">Новыя абнаўленні не знойдзены. Каб праверыць абнаўленні ўручную, націсніце кнопку Абнавіць.</string>
<string name="action_download">Спампаваць</string>
<string name="action_install">Усталяваць</string>
<string name="action_info">Інфармацыя</string>
<string name="action_delete">Выдаліць</string>
<string name="confirm_delete_dialog_title">Выдаліць файл</string>
<string name="confirm_delete_dialog_message">Выдаліць выбраны файл абнаўлення?</string>
<string name="apply_update_dialog_title">Ужыць абнаўленне</string>
<string name="label_download_url">URL-адрасы спамповак</string>
<string name="toast_download_url_copied">URL-адрас скапіяваны</string>
<string name="dialog_export_title">Экспартаванне абнаўлення</string>
<string name="notification_export_success">Абнаўленне экспартавана</string>
<string name="toast_export_started">Пачалося экспартаванне</string>
<string name="checkbox_mobile_data_warning">Больш не паказваць</string>
<string name="new_updates_channel_title">Новыя абнаўленні</string>
<string name="ongoing_channel_title">Бягучыя спампоўкі</string>
<string name="info_dialog_title">Ці ведалі вы што?</string>
<string name="info_dialog_ok">Дзякуй за інфармацыю!</string>
</resources>

View File

@@ -67,8 +67,6 @@
<string name="header_last_updates_check">Последна проверка: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Последна проверка: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> от <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">Проверка на актуализацията</string> <string name="list_verifying_update">Проверка на актуализацията</string>
<string name="list_no_updates">Не са намерени нови актуализации. За да проверите ръчно за нови актуализации, използвайте бутона за обновяване.</string> <string name="list_no_updates">Не са намерени нови актуализации. За да проверите ръчно за нови актуализации, използвайте бутона за обновяване.</string>
<string name="action_download">Изтегли</string> <string name="action_download">Изтегли</string>
@@ -81,8 +79,6 @@
<string name="confirm_delete_dialog_title">Изтриване на файл</string> <string name="confirm_delete_dialog_title">Изтриване на файл</string>
<string name="confirm_delete_dialog_message">Да бъде ли изтрит файлът на избраната актуализация?</string> <string name="confirm_delete_dialog_message">Да бъде ли изтрит файлът на избраната актуализация?</string>
<string name="apply_update_dialog_title">Приложи актуализацията</string> <string name="apply_update_dialog_title">Приложи актуализацията</string>
<string name="apply_update_dialog_message">На път сте да актуализирате до версия <xliff:g id="update_name">%1$s</xliff:g>.\n\nако натиснете <xliff:g id="ok">%2$s</xliff:g>, устройството ще се рестартира в режим на възстановяване, за да инсталира актуализацията. \ n \ nЗабележка: Тази функция изисква съвместимо Recovery или актуализации трябва да бъдат инсталирани ръчно.</string>
<string name="apply_update_dialog_message_ab">На път сте да актуализирате до версия <xliff:g id="update_name">%1$s</xliff:g>.\n\nАко натиснете <xliff:g id="ok">%2$s</xliff:g>, устройството ще започне инсталирането във фонов режим.\n\nКогато завърши, ще бъдете подканени да рестартирате.</string>
<string name="cancel_installation_dialog_message">Анулиране на инсталирането?</string> <string name="cancel_installation_dialog_message">Анулиране на инсталирането?</string>
<string name="label_download_url">Изтеглете URL</string> <string name="label_download_url">Изтеглете URL</string>
<string name="toast_download_url_copied">URL Копиран</string> <string name="toast_download_url_copied">URL Копиран</string>

View File

@@ -23,6 +23,11 @@
<string name="pause_button">বিরাম</string> <string name="pause_button">বিরাম</string>
<string name="menu_update_recovery">রিকভারি আপডেট করুন</string> <string name="menu_update_recovery">রিকভারি আপডেট করুন</string>
<string name="toast_forced_update_recovery">এই ডিভাইসে লিনিয়েজ রিকভারি এর আপডেট বন্ধ করা সম্ভব নয়</string> <string name="toast_forced_update_recovery">এই ডিভাইসে লিনিয়েজ রিকভারি এর আপডেট বন্ধ করা সম্ভব নয়</string>
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> এর <xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g></string>
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) এর <xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g></string>
<string name="apply_update_dialog_message">আপনি এখন <xliff:g id="update_name">%1$s</xliff:g> ইনস্টল করতে যাচ্ছেন। আপনি যদি <xliff:g id="ok">%2$s</xliff:g> বোতামে টিপ দেন, তাহলে ডিভাইসটি আপডেট করার জন্য রিকভারি মোডে চলে যাবে।\n\n এই কাজটি সম্পাদনের জন্য আপডেট সমর্থন করে এমন একটি রিকভারি লাগবে। তা না হলে আপডেটটি আপনার মেনুয়ালি ইনস্টল করতে হবে।</string>
<string name="apply_update_dialog_message_ab">আপনি এখন <xliff:g id="update_name">%1$s</xliff:g> ইনস্টল করতে যাচ্ছেন।\n\nআপনি যদি <xliff:g id="ok">%2$s</xliff:g> বোতামে টিপ দেন, তাহলে ডিভাইসটি ব্যাকগ্রাউন্ড এ ইনস্টল করতে থাকবে।\n\nআপডেটটি ইনস্টল করা শেষ হলে আপনাকে রিস্টার্ট করতে বলা হবে।</string>
<string name="toast_export_started">রপ্তানি করা শুরু হয়েছে</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">১ সেকেন্ড বাকি</item> <item quantity="one">১ সেকেন্ড বাকি</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> সেকেন্ড বাকি</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> সেকেন্ড বাকি</item>
@@ -35,4 +40,7 @@
<item quantity="one">১ ঘণ্টা বাকি</item> <item quantity="one">১ ঘণ্টা বাকি</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> ঘণ্টা বাকি</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> ঘণ্টা বাকি</item>
</plurals> </plurals>
<string name="info_dialog_title">আপনি কি জানতেন?</string>
<string name="info_dialog_message">লিনিএজ ওএস এর আপডেট প্যাকেজে সকল ফাইল দেওয়া থাকে। অর্থাৎ আপনি মাঝের আপডেটগুলো ইনস্টল না করে শুধুমাত্র লেটেস্ট আপডেট ইনস্টল করতে পারবেন।</string>
<string name="info_dialog_ok">তথ্যটির জন্য ধন্যবাদ</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Darrera comprovació: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Darrera comprovació: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">S\'està verificant l\'actualització</string> <string name="list_verifying_update">S\'està verificant l\'actualització</string>
<string name="list_no_updates">No s\'han trobat noves actualitzacions. Per comprovar manualment si hi ha noves actualitzacions, utilitzeu el botó Refresca.</string> <string name="list_no_updates">No s\'han trobat noves actualitzacions. Per comprovar manualment si hi ha noves actualitzacions, utilitzeu el botó Refresca.</string>
<string name="action_download">Baixa</string> <string name="action_download">Baixa</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Esborra el fitxer</string> <string name="confirm_delete_dialog_title">Esborra el fitxer</string>
<string name="confirm_delete_dialog_message">Vols esborrar el fitxer d\'actualització seleccionat?</string> <string name="confirm_delete_dialog_message">Vols esborrar el fitxer d\'actualització seleccionat?</string>
<string name="apply_update_dialog_title">Aplica l\'actualització</string> <string name="apply_update_dialog_title">Aplica l\'actualització</string>
<string name="apply_update_dialog_message">Estàs a punt d\'actualitzar a <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi prems <xliff:g id="ok">%2$s</xliff:g>, el dispositiu es reiniciarà en mode recuperació per instal·lar l\'actualització.\n\nNota: Aquesta funció requereix un «Recovery» compatible o les actualitzacions s\'hauran d\'instal·lar manualment.</string> <string name="apply_update_dialog_message">Esteu a punt d\'instal·lar <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi premeu <xliff:g id="ok">%2$s</xliff:g>, el dispositiu es reiniciarà en el mode recuperació per a instal·lar l\'actualització.\n\nNota: Aquesta funció requereix un Recuperador compatible o les actualitzacions hauran de ser instal·lades manualment.</string>
<string name="apply_update_dialog_message_ab">Estàs a punt d\'actualitzar a <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi prems <xliff:g id="ok">%2$s</xliff:g>, el dispositiu començarà a instal·lar en segon pla.\n\nUn cop completat, se\'t demanarà reiniciar.</string> <string name="apply_update_dialog_message_ab">Esteu a punt d\'instal·lar <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi premeu <xliff:g id="ok">%2$s</xliff:g>, el dispositiu començarà a instal·lar-ho en segon pla.\n\nUna vegada completat, se us demanarà que el reinicieu.</string>
<string name="cancel_installation_dialog_message">Voleu cancel·lar la instal·lació?</string> <string name="cancel_installation_dialog_message">Voleu cancel·lar la instal·lació?</string>
<string name="label_download_url">URL de baixada</string> <string name="label_download_url">URL de baixada</string>
<string name="toast_download_url_copied">URL copiada</string> <string name="toast_download_url_copied">URL copiada</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Actualització exportada</string> <string name="notification_export_success">Actualització exportada</string>
<string name="notification_export_fail">Ha fallat l\'exportació</string> <string name="notification_export_fail">Ha fallat l\'exportació</string>
<string name="toast_already_exporting">Ja s\'està exportant una actualització</string> <string name="toast_already_exporting">Ja s\'està exportant una actualització</string>
<string name="toast_export_started">S\'ha iniciat l\'exportació</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">Falta 1 segon</item> <item quantity="one">Falta 1 segon</item>
<item quantity="other">Falten <xliff:g id="count">%d</xliff:g> segons</item> <item quantity="other">Falten <xliff:g id="count">%d</xliff:g> segons</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">Noves actualitzacions</string> <string name="new_updates_channel_title">Noves actualitzacions</string>
<string name="ongoing_channel_title">Baixades en curs</string> <string name="ongoing_channel_title">Baixades en curs</string>
<string name="update_failed_channel_title">Actualització fallida</string> <string name="update_failed_channel_title">Actualització fallida</string>
<string name="info_dialog_title">Ho sabies?</string>
<string name="info_dialog_message">Les actualitzacions de LineageOS són paquets d\'instal·lació complets. Açò significa que sempre pots instal·lar únicament l\'última actualització, encara que t\'hagis saltat alguna actualització per entremig.</string>
<string name="info_dialog_ok">Gràcies per la informació!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Poslední kontrola: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Poslední kontrola: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z(e) <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z(e) <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Ověření aktualizace</string> <string name="list_verifying_update">Ověření aktualizace</string>
<string name="list_no_updates">Nebyly nalezeny žádné nové aktualizace. Chcete-li ručně vyhledat nové aktualizace, použijte tlačítko „Obnovit“.</string> <string name="list_no_updates">Nebyly nalezeny žádné nové aktualizace. Chcete-li ručně vyhledat nové aktualizace, použijte tlačítko „Obnovit“.</string>
<string name="action_download">Stáhnout</string> <string name="action_download">Stáhnout</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Smazat soubor</string> <string name="confirm_delete_dialog_title">Smazat soubor</string>
<string name="confirm_delete_dialog_message">Smazat zvolený soubor aktualizace?</string> <string name="confirm_delete_dialog_message">Smazat zvolený soubor aktualizace?</string>
<string name="apply_update_dialog_title">Použít aktualizaci</string> <string name="apply_update_dialog_title">Použít aktualizaci</string>
<string name="apply_update_dialog_message">Chystáte se aktualizovat na <xliff:g id="update_name">%1$s</xliff:g>.\n\nPokud stisknete <xliff:g id="ok">%2$s</xliff:g>, telefon se restartuje do režimu Recovery, kde budete pokračovat v instalaci aktualizace.\n\nPoznámka: tato funkce vyžaduje nainstalovaný kompatibilní režim Recovery nebo je nutné instalaci provést ručně.</string> <string name="apply_update_dialog_message">Chystáte se instalovat <xliff:g id="update_name">%1$s</xliff:g>.\n\nPokud stisknete <xliff:g id="ok">%2$s</xliff:g>, telefon se restartuje do režimu Recovery, kde budete pokračovat v instalaci aktualizace.\n\nPoznámka: tato funkce vyžaduje nainstalovaný kompatibilní režim Recovery nebo je nutné instalaci provést ručně.</string>
<string name="apply_update_dialog_message_ab">Chystáte se aktualizovat na <xliff:g id="update_name">%1$s</xliff:g>.\n\nPokud stisknete <xliff:g id="ok">%2$s</xliff:g>, spustí se instalace na pozadí.\n\nPo dokončení budete vyzváni k restartu.</string> <string name="apply_update_dialog_message_ab">Chystáte se instalovat <xliff:g id="update_name">%1$s</xliff:g>.\n\nPokud stisknete <xliff:g id="ok">%2$s</xliff:g>, spustí se instalace na pozadí.\n\nPo dokončení budete vyzváni k restartu.</string>
<string name="cancel_installation_dialog_message">Zrušit instalaci?</string> <string name="cancel_installation_dialog_message">Zrušit instalaci?</string>
<string name="label_download_url">URL stažení</string> <string name="label_download_url">URL stažení</string>
<string name="toast_download_url_copied">URL zkopírována</string> <string name="toast_download_url_copied">URL zkopírována</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Aktualizace exportována</string> <string name="notification_export_success">Aktualizace exportována</string>
<string name="notification_export_fail">Chyba exportu</string> <string name="notification_export_fail">Chyba exportu</string>
<string name="toast_already_exporting">Aktualizace se již exportuje</string> <string name="toast_already_exporting">Aktualizace se již exportuje</string>
<string name="toast_export_started">Export byl zahájen</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">Zbývá 1 sekunda</item> <item quantity="one">Zbývá 1 sekunda</item>
<item quantity="few">Zbývají <xliff:g id="count">%d</xliff:g> sekundy</item> <item quantity="few">Zbývají <xliff:g id="count">%d</xliff:g> sekundy</item>
@@ -118,4 +119,7 @@
<string name="new_updates_channel_title">Nové aktualizace</string> <string name="new_updates_channel_title">Nové aktualizace</string>
<string name="ongoing_channel_title">Probíhající stahování</string> <string name="ongoing_channel_title">Probíhající stahování</string>
<string name="update_failed_channel_title">Aktualizace se nezdařila</string> <string name="update_failed_channel_title">Aktualizace se nezdařila</string>
<string name="info_dialog_title">Věděli jste, že…</string>
<string name="info_dialog_message">Aktualizace LineageOS jsou plné instalační balíčky. To znamená, že můžete vždy nainstalovat pouze nejnovější aktualizaci, a\u00a0je možné některé z\u00a0nich zcela přeskočit!</string>
<string name="info_dialog_ok">Děkujeme za informace!</string>
</resources> </resources>

View File

@@ -53,6 +53,8 @@
<string name="menu_export_update">Allforio\'r diweddariad</string> <string name="menu_export_update">Allforio\'r diweddariad</string>
<string name="menu_show_changelog">Dangos log newid</string> <string name="menu_show_changelog">Dangos log newid</string>
<string name="menu_ab_perf_mode">Blaenoriaethu\'r broses diweddaru</string> <string name="menu_ab_perf_mode">Blaenoriaethu\'r broses diweddaru</string>
<string name="menu_update_recovery">Adfer y modd diweddaru</string>
<string name="toast_forced_update_recovery">Mae\'n amhosibl analluogi diweddariadau Adfer Lineage ar y ddyfais hon.</string>
<string name="snack_updates_found">Mae yna ddiweddariad(au) newydd</string> <string name="snack_updates_found">Mae yna ddiweddariad(au) newydd</string>
<string name="snack_no_updates_found">Ni chanfuwyd diweddariadau newydd</string> <string name="snack_no_updates_found">Ni chanfuwyd diweddariadau newydd</string>
<string name="snack_updates_check_failed">Methodd gwiriad y diweddariad. Gwiria dy gysylltiad â\'r rhwydwaith a rhoi cynnig arall arni.</string> <string name="snack_updates_check_failed">Methodd gwiriad y diweddariad. Gwiria dy gysylltiad â\'r rhwydwaith a rhoi cynnig arall arni.</string>
@@ -65,8 +67,8 @@
<string name="header_last_updates_check">Gwiriwyd diwethaf: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Gwiriwyd diwethaf: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> o <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> o <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> o <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> o <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Yn dilysu\'r diweddariad</string> <string name="list_verifying_update">Yn dilysu\'r diweddariad</string>
<string name="list_no_updates">Ni chanfuwyd diweddariadau newydd. I wirio am ddiweddariadau newydd dy hun, defnyddia\'r botwm ail-lwytho.</string> <string name="list_no_updates">Ni chanfuwyd diweddariadau newydd. I wirio am ddiweddariadau newydd dy hun, defnyddia\'r botwm ail-lwytho.</string>
<string name="action_download">Lawrlwytho</string> <string name="action_download">Lawrlwytho</string>
@@ -79,8 +81,8 @@
<string name="confirm_delete_dialog_title">Dileu ffeil</string> <string name="confirm_delete_dialog_title">Dileu ffeil</string>
<string name="confirm_delete_dialog_message">Dileu\'r ffeil diweddariad a ddewiswyd?</string> <string name="confirm_delete_dialog_message">Dileu\'r ffeil diweddariad a ddewiswyd?</string>
<string name="apply_update_dialog_title">Gosod diweddariad</string> <string name="apply_update_dialog_title">Gosod diweddariad</string>
<string name="apply_update_dialog_message">Rwyt ar fin uwchraddio i <xliff:g id="update_name">%1$s</xliff:g>.\n\nOs wyt yn gwasgu <xliff:g id="ok">%2$s</xliff:g>, bydd y ddyfais yn ail-ddechrau ei hun i\'r modd adfer er mwyn gosod y diweddariad.\n\nNodyn: Mae ar y nodwedd hon angen Modd Adfer (Recovery) cydnaws er mwyn gosod diweddariadau yn awtomatig.</string> <string name="apply_update_dialog_message">Rwyt ar fin osod <xliff:g id="update_name">%1$s</xliff:g>.\n\nOs wyt yn gwasgu <xliff:g id="ok">%2$s</xliff:g>, bydd y ddyfais yn ail-ddechrau ei hun i\'r modd adfer er mwyn gosod y diweddariad.\n\nNodyn: Mae ar y nodwedd hon angen Modd Adfer (Recovery) cydnaws er mwyn gosod diweddariadau yn awtomatig.</string>
<string name="apply_update_dialog_message_ab">Rwyt ar fin uwchraddio i <xliff:g id="update_name">%1$s</xliff:g>.\n\nOs wyt yn gwasgu <xliff:g id="ok">%2$s</xliff:g>, bydd y ddyfais yn dechrau\'r gosod yn y cefndir.\n\nPan fydd wedi\'i gwblhau, cei dy hysbysu i ailddechrau\'r system.</string> <string name="apply_update_dialog_message_ab">Rwyt ar fin osod <xliff:g id="update_name">%1$s</xliff:g>.\n\nOs wyt yn gwasgu <xliff:g id="ok">%2$s</xliff:g>, bydd y ddyfais yn dechrau\'r gosod yn y cefndir.\n\nPan fydd wedi\'i gwblhau, cei dy hysbysu i ailddechrau\'r system.</string>
<string name="cancel_installation_dialog_message">Diddymu\'r gosod?</string> <string name="cancel_installation_dialog_message">Diddymu\'r gosod?</string>
<string name="label_download_url">URL lawrlwytho</string> <string name="label_download_url">URL lawrlwytho</string>
<string name="toast_download_url_copied">Copïwyd yr URL</string> <string name="toast_download_url_copied">Copïwyd yr URL</string>
@@ -88,6 +90,7 @@
<string name="notification_export_success">Allforiwyd y diweddariad</string> <string name="notification_export_success">Allforiwyd y diweddariad</string>
<string name="notification_export_fail">Gwall allforio</string> <string name="notification_export_fail">Gwall allforio</string>
<string name="toast_already_exporting">Eisoes yn allforio diweddariad</string> <string name="toast_already_exporting">Eisoes yn allforio diweddariad</string>
<string name="toast_export_started">Wedi dechrau allforio</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="zero"><xliff:g id="count">%d</xliff:g> eiliadau yn weddill</item> <item quantity="zero"><xliff:g id="count">%d</xliff:g> eiliadau yn weddill</item>
<item quantity="one"><xliff:g id="count">%d</xliff:g> eiliad yn weddill</item> <item quantity="one"><xliff:g id="count">%d</xliff:g> eiliad yn weddill</item>
@@ -122,4 +125,7 @@
<string name="new_updates_channel_title">Diweddariadau newydd</string> <string name="new_updates_channel_title">Diweddariadau newydd</string>
<string name="ongoing_channel_title">Llwythi sy\'n parhau</string> <string name="ongoing_channel_title">Llwythi sy\'n parhau</string>
<string name="update_failed_channel_title">Methodd y diweddariad</string> <string name="update_failed_channel_title">Methodd y diweddariad</string>
<string name="info_dialog_title">A wyddet ti?</string>
<string name="info_dialog_message">Mae diweddariadau LineageOS yn becynnau gosod llawn, felly mae o hyd yn bosib gosod y diweddariad diweddaraf, hyd yn oed os wyt wedi neidio ambell ddiweddariad ers y diwethaf!</string>
<string name="info_dialog_ok">Diolch am y wybodaeth!</string>
</resources> </resources>

View File

@@ -15,8 +15,10 @@
limitations under the License. limitations under the License.
--> -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="verification_failed_notification">Verifikation mislykkedes</string> <string name="app_name">Opdatering</string>
<string name="verifying_download_notification">Verificerer opdatering</string> <string name="display_name">Opdatering</string>
<string name="verification_failed_notification">Bekræftelse fejlede</string>
<string name="verifying_download_notification">Bekræfter opdatering</string>
<string name="downloading_notification">Henter</string> <string name="downloading_notification">Henter</string>
<string name="download_paused_notification">Overførsel på pause</string> <string name="download_paused_notification">Overførsel på pause</string>
<string name="download_paused_error_notification">Overførselsfejl</string> <string name="download_paused_error_notification">Overførselsfejl</string>
@@ -47,6 +49,7 @@
<string name="menu_delete_update">Slet</string> <string name="menu_delete_update">Slet</string>
<string name="menu_copy_url">Kopiér URL</string> <string name="menu_copy_url">Kopiér URL</string>
<string name="menu_export_update">Eksportér opdatering</string> <string name="menu_export_update">Eksportér opdatering</string>
<string name="menu_show_changelog">Vis ændringslog</string>
<string name="menu_ab_perf_mode">Prioritér opdateringsproces</string> <string name="menu_ab_perf_mode">Prioritér opdateringsproces</string>
<string name="menu_update_recovery">Opdatér gendannelse</string> <string name="menu_update_recovery">Opdatér gendannelse</string>
<string name="toast_forced_update_recovery">Det er umuligt at deaktivere Lineage Gendannelse opdateringer på denne enhed.</string> <string name="toast_forced_update_recovery">Det er umuligt at deaktivere Lineage Gendannelse opdateringer på denne enhed.</string>
@@ -59,11 +62,12 @@
<string name="snack_update_not_installable">Denne opdatering kan ikke installeres ovenpå det nuværende build.</string> <string name="snack_update_not_installable">Denne opdatering kan ikke installeres ovenpå det nuværende build.</string>
<string name="header_title_text">LineageOS\n%1$s</string> <string name="header_title_text">LineageOS\n%1$s</string>
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string> <string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
<string name="header_last_updates_check">Sidst tjekket: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Sidst kontrolleret: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> af <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> af <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_verifying_update">Verificerer opdatering</string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> af <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Bekræfter opdatering</string>
<string name="list_no_updates">Ingen nye opdateringer fundet. Brug Genopfrisk-knappen, for manuel kontrol af nye opdateringer.</string> <string name="list_no_updates">Ingen nye opdateringer fundet. Brug Genopfrisk-knappen, for manuel kontrol af nye opdateringer.</string>
<string name="action_download">Hent</string> <string name="action_download">Hent</string>
<string name="action_pause">Pause</string> <string name="action_pause">Pause</string>
@@ -75,8 +79,8 @@
<string name="confirm_delete_dialog_title">Slet fil</string> <string name="confirm_delete_dialog_title">Slet fil</string>
<string name="confirm_delete_dialog_message">Slet den valgte opdateringsfil?</string> <string name="confirm_delete_dialog_message">Slet den valgte opdateringsfil?</string>
<string name="apply_update_dialog_title">Anvend opdatering</string> <string name="apply_update_dialog_title">Anvend opdatering</string>
<string name="apply_update_dialog_message">Du er ved at opgradere til <xliff:g id="update_name">%1$s</xliff:g>.\n\nHvis du trykker <xliff:g id="ok">%2$s</xliff:g>, vil enheden genstarte sig selv i gendannelsestilstand, for at installere opdateringen.\n\nBemærk: Denne funktion kræver en kompatibel Gendannelse, ellers vil opdateringer skulle installeres manuelt.</string> <string name="apply_update_dialog_message">Du er ved at installere <xliff:g id="update_name">%1$s</xliff:g>. \n\n Hvis du trykker <xliff:g id="ok">%2$s</xliff:g>, enheden vil genstarte i gendannelsestilstand for at installere opdateringen.\n\nNoter: Denne funktion kræver en kompitabel gendannelse eller opdateing vil have brug for at blive installeret manuelt.</string>
<string name="apply_update_dialog_message_ab">Du er ved at opgradere til <xliff:g id="update_name">%1$s </xliff:g>.\n\nHvis du trykker <xliff:g id="ok">%2$s</xliff:g>, vil enheden begynde at installere i baggrunden.\n\nSå snart den er færdig, vil du blive bedt om at genstarte.</string> <string name="apply_update_dialog_message_ab">Du er ved at installere <xliff:g id="update_name">%1$s</xliff:g>.\n\n Hvis du trykker <xliff:g id="ok">%2$s</xliff:g>, vil enheden begynde at installere i baggrunden.\n\nr færdig, vil du blive spurgt om at genstarte.</string>
<string name="cancel_installation_dialog_message">Afbryd installeringen?</string> <string name="cancel_installation_dialog_message">Afbryd installeringen?</string>
<string name="label_download_url">Hent URL</string> <string name="label_download_url">Hent URL</string>
<string name="toast_download_url_copied">URL kopieret</string> <string name="toast_download_url_copied">URL kopieret</string>
@@ -84,6 +88,7 @@
<string name="notification_export_success">Opdatering eksporteret</string> <string name="notification_export_success">Opdatering eksporteret</string>
<string name="notification_export_fail">Eksportfejl</string> <string name="notification_export_fail">Eksportfejl</string>
<string name="toast_already_exporting">Eksporterer allerede en opdatering</string> <string name="toast_already_exporting">Eksporterer allerede en opdatering</string>
<string name="toast_export_started">Eksportering startet</string>
<string name="update_on_mobile_data_title">Advarsel</string> <string name="update_on_mobile_data_title">Advarsel</string>
<string name="update_on_mobile_data_message">Du er ved at hente en opdateringspakke vha. mobildata, hvilket sandsynligvis vil forårsage højt dataforbrug. Ønsker du at fortsætte?</string> <string name="update_on_mobile_data_message">Du er ved at hente en opdateringspakke vha. mobildata, hvilket sandsynligvis vil forårsage højt dataforbrug. Ønsker du at fortsætte?</string>
<string name="checkbox_mobile_data_warning">Vis ikke igen</string> <string name="checkbox_mobile_data_warning">Vis ikke igen</string>
@@ -94,4 +99,7 @@
<string name="new_updates_channel_title">Nye opdateringer</string> <string name="new_updates_channel_title">Nye opdateringer</string>
<string name="ongoing_channel_title">Igangværende Downloads</string> <string name="ongoing_channel_title">Igangværende Downloads</string>
<string name="update_failed_channel_title">Opdatering fejlede</string> <string name="update_failed_channel_title">Opdatering fejlede</string>
<string name="info_dialog_title">Vidste du?</string>
<string name="info_dialog_message">LineageOS opdateringer er komplette installationspakker. Det betyder, at du altid kun kan installere den seneste opdatering, selv om du har sprunget nogle over!</string>
<string name="info_dialog_ok">Tak for info!</string>
</resources> </resources>

View File

@@ -41,7 +41,7 @@
<string name="dialog_battery_low_message_pct">Dein Akkustand ist zu niedrig. Es werden mindestens <xliff:g id="percent_discharging">%1$d</xliff:g>%% Restkapazität (oder <xliff:g id="percent_charging">%2$d</xliff:g>%% mit angeschlossenem Ladegerät) benötigt, um fortzufahren.</string> <string name="dialog_battery_low_message_pct">Dein Akkustand ist zu niedrig. Es werden mindestens <xliff:g id="percent_discharging">%1$d</xliff:g>%% Restkapazität (oder <xliff:g id="percent_charging">%2$d</xliff:g>%% mit angeschlossenem Ladegerät) benötigt, um fortzufahren.</string>
<string name="reboot">Neustart</string> <string name="reboot">Neustart</string>
<string name="menu_refresh">Aktualisieren</string> <string name="menu_refresh">Aktualisieren</string>
<string name="menu_preferences">Voreinstellungen</string> <string name="menu_preferences">Einstellungen</string>
<string name="menu_auto_updates_check">Automatisch nach Updates suchen</string> <string name="menu_auto_updates_check">Automatisch nach Updates suchen</string>
<string name="menu_auto_updates_check_interval_daily">Einmal am Tag</string> <string name="menu_auto_updates_check_interval_daily">Einmal am Tag</string>
<string name="menu_auto_updates_check_interval_weekly">Einmal pro Woche</string> <string name="menu_auto_updates_check_interval_weekly">Einmal pro Woche</string>
@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Zuletzt geprüft: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Zuletzt geprüft: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> von <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> von <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> von <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> von <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Update wird geprüft</string> <string name="list_verifying_update">Update wird geprüft</string>
<string name="list_no_updates">Keine neuen Updates gefunden. Um manuell nach neuen Updates zu suchen, verwende die Schaltfläche \"Aktualisieren\".</string> <string name="list_no_updates">Keine neuen Updates gefunden. Um manuell nach neuen Updates zu suchen, verwende die Schaltfläche \"Aktualisieren\".</string>
<string name="action_download">Herunterladen</string> <string name="action_download">Herunterladen</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Datei löschen</string> <string name="confirm_delete_dialog_title">Datei löschen</string>
<string name="confirm_delete_dialog_message">Soll die ausgewählte Update-Datei gelöscht werden?</string> <string name="confirm_delete_dialog_message">Soll die ausgewählte Update-Datei gelöscht werden?</string>
<string name="apply_update_dialog_title">Update installieren</string> <string name="apply_update_dialog_title">Update installieren</string>
<string name="apply_update_dialog_message">Bereit zum Update auf <xliff:g id="update_name">%1$s</xliff:g>\n\nWenn du <xliff:g id="ok">%2$s</xliff:g> drückst, wird das Gerät im Recovery-Modus gestartet, um das Update durchzuführen.\n\nHinweis: Diese Funktion erfordert ein kompatibles Recovery-System, anderenfalls muss das Update manuell installiert werden.</string> <string name="apply_update_dialog_message">Bereit zur Installation von <xliff:g id="update_name">%1$s</xliff:g>\n\nWenn du <xliff:g id="ok">%2$s</xliff:g> drückst, wird das Gerät im Recovery-Modus gestartet, um das Update durchzuführen.\n\nHinweis: Diese Funktion erfordert ein kompatibles Recovery-System, anderenfalls muss das Update manuell installiert werden.</string>
<string name="apply_update_dialog_message_ab">Bereit zum Update auf <xliff:g id="update_name">%1$s</xliff:g>\n\nWenn du <xliff:g id="ok">%2$s drückst</xliff:g>, beginnt das Gerät im Hintergrund mit der Installation\n\nSobald diese abgeschlossen ist, wirst du zum Neustart aufgefordert.</string> <string name="apply_update_dialog_message_ab">Bereit zur Installation von <xliff:g id="update_name">%1$s</xliff:g>\n\nWenn du <xliff:g id="ok">%2$s drückst</xliff:g>, beginnt das Gerät im Hintergrund mit der Installation.\n\nSobald diese abgeschlossen ist, wirst du zum Neustart aufgefordert.</string>
<string name="cancel_installation_dialog_message">Installation abbrechen?</string> <string name="cancel_installation_dialog_message">Installation abbrechen?</string>
<string name="label_download_url">Download URL</string> <string name="label_download_url">Download URL</string>
<string name="toast_download_url_copied">URL wurde kopiert</string> <string name="toast_download_url_copied">URL wurde kopiert</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Update wurde exportiert</string> <string name="notification_export_success">Update wurde exportiert</string>
<string name="notification_export_fail">Fehler beim Export</string> <string name="notification_export_fail">Fehler beim Export</string>
<string name="toast_already_exporting">Update wird bereits exportiert</string> <string name="toast_already_exporting">Update wird bereits exportiert</string>
<string name="toast_export_started">Export gestartet</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">noch 1 Sekunde</item> <item quantity="one">noch 1 Sekunde</item>
<item quantity="other">noch <xliff:g id="count">%d</xliff:g> Sekunden</item> <item quantity="other">noch <xliff:g id="count">%d</xliff:g> Sekunden</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">Neue Updates</string> <string name="new_updates_channel_title">Neue Updates</string>
<string name="ongoing_channel_title">Laufende Downloads</string> <string name="ongoing_channel_title">Laufende Downloads</string>
<string name="update_failed_channel_title">Update fehlgeschlagen</string> <string name="update_failed_channel_title">Update fehlgeschlagen</string>
<string name="info_dialog_title">Schon gewusst?</string>
<string name="info_dialog_message">LineageOS-Updates sind vollständige Installationspakete. Das bedeutet, dass du immer nur das neueste Update installieren zu brauchst, auch wenn du zwischendurch welche übersprungen hast!</string>
<string name="info_dialog_ok">Danke für die Information!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Τελευταίος έλεγχος: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Τελευταίος έλεγχος: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> από <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> από <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> από <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> από <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Επαλήθευση ενημέρωσης</string> <string name="list_verifying_update">Επαλήθευση ενημέρωσης</string>
<string name="list_no_updates">Δεν βρέθηκαν νέες ενημερώσεις. Για να ελέγξετε χειροκίνητα για νέες ενημερώσεις, χρησιμοποιήστε το πλήκτρο Ανανέωσης.</string> <string name="list_no_updates">Δεν βρέθηκαν νέες ενημερώσεις. Για να ελέγξετε χειροκίνητα για νέες ενημερώσεις, χρησιμοποιήστε το πλήκτρο Ανανέωσης.</string>
<string name="action_download">Λήψη</string> <string name="action_download">Λήψη</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Διαγραφή αρχείου</string> <string name="confirm_delete_dialog_title">Διαγραφή αρχείου</string>
<string name="confirm_delete_dialog_message">Διαγραφή του επιλεγμένου αρχείου ενημέρωσης;</string> <string name="confirm_delete_dialog_message">Διαγραφή του επιλεγμένου αρχείου ενημέρωσης;</string>
<string name="apply_update_dialog_title">Εφαρμογή ενημέρωσης</string> <string name="apply_update_dialog_title">Εφαρμογή ενημέρωσης</string>
<string name="apply_update_dialog_message">Πρόκειται να αναβαθμίσετε σε <xliff:g id="update_name">%1$s</xliff:g>.\n\nΑν πατήσετε <xliff:g id="ok">%2$s</xliff:g>, η συσκευή θα κάνει επανεκκίνηση σε λειτουργία recovery για να εγκατασταθεί η ενημέρωση.\n\nΣημείωση: Αυτή η λειτουργία απαιτεί μια συμβατή recovery αλλιώς η ενημέρωση θα πρέπει να εγκατασταθεί χειροκίνητα.</string> <string name="apply_update_dialog_message">Πρόκειται να εγκαταστήσετε το <xliff:g id="update_name">%1$s</xliff:g>.\n\nΑν πατήσετε <xliff:g id="ok">%2$s</xliff:g>, η συσκευή θα κάνει επανεκκίνηση σε λειτουργία recovery για να εγκατασταθεί η ενημέρωση.\n\nΣημείωση: Αυτή η λειτουργία απαιτεί μια συμβατή recovery αλλιώς η ενημέρωση θα πρέπει να εγκατασταθεί χειροκίνητα.</string>
<string name="apply_update_dialog_message_ab">Πρόκειται να αναβαθμίσετε σε <xliff:g id="update_name">%1$s</xliff:g>.\n\nΕάν πατήσετε <xliff:g id="ok">%2$s</xliff:g>, η συσκευή θα ξεκινήσει την εγκατάσταση στο παρασκήνιο.\n\nΌταν ολοκληρωθεί, θα σας ζητηθεί να κάνετε επανεκκίνηση.</string> <string name="apply_update_dialog_message_ab">Πρόκειται να εγκαταστήσετε το <xliff:g id="update_name">%1$s</xliff:g>.\n\nΕάν πατήσετε <xliff:g id="ok">%2$s</xliff:g>, η συσκευή θα ξεκινήσει την εγκατάσταση στο παρασκήνιο.\n\nΌταν ολοκληρωθεί, θα σας ζητηθεί να κάνετε επανεκκίνηση.</string>
<string name="cancel_installation_dialog_message">Ακύρωση της εγκατάστασης;</string> <string name="cancel_installation_dialog_message">Ακύρωση της εγκατάστασης;</string>
<string name="label_download_url">Λήψη συνδέσμου</string> <string name="label_download_url">Λήψη συνδέσμου</string>
<string name="toast_download_url_copied">Ο σύνδεσμος αντιγράφηκε</string> <string name="toast_download_url_copied">Ο σύνδεσμος αντιγράφηκε</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Η ενημέρωση εξάχθηκε</string> <string name="notification_export_success">Η ενημέρωση εξάχθηκε</string>
<string name="notification_export_fail">Σφάλμα εξαγωγής</string> <string name="notification_export_fail">Σφάλμα εξαγωγής</string>
<string name="toast_already_exporting">Εξάγεται ήδη μία ενημέρωση</string> <string name="toast_already_exporting">Εξάγεται ήδη μία ενημέρωση</string>
<string name="toast_export_started">Η εξαγωγή ξεκίνησε</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">απομένει 1 δευτερόλεπτο</item> <item quantity="one">απομένει 1 δευτερόλεπτο</item>
<item quantity="other">απομένουν <xliff:g id="count">%d</xliff:g> δευτερόλεπτα</item> <item quantity="other">απομένουν <xliff:g id="count">%d</xliff:g> δευτερόλεπτα</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">Νέες ενημερώσεις</string> <string name="new_updates_channel_title">Νέες ενημερώσεις</string>
<string name="ongoing_channel_title">Λήψεις σε εξέλιξη</string> <string name="ongoing_channel_title">Λήψεις σε εξέλιξη</string>
<string name="update_failed_channel_title">Η ενημέρωση απέτυχε</string> <string name="update_failed_channel_title">Η ενημέρωση απέτυχε</string>
<string name="info_dialog_title">Το γνωρίζατε;</string>
<string name="info_dialog_message">Οι ενημερώσεις LineageOS είναι πλήρη πακέτα εγκατάστασης. Αυτό σημαίνει ότι μπορείτε πάντα να εγκαταστήσετε μόνο την πιο πρόσφατη ενημέρωση, ακόμα κι αν παραλείψατε κάποια ενδιάμεσα!</string>
<string name="info_dialog_ok">Ευχαριστώ για τις πληροφορίες!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Verifying update</string> <string name="list_verifying_update">Verifying update</string>
<string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string> <string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string>
<string name="action_download">Download</string> <string name="action_download">Download</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Delete file</string> <string name="confirm_delete_dialog_title">Delete file</string>
<string name="confirm_delete_dialog_message">Delete the selected update file?</string> <string name="confirm_delete_dialog_message">Delete the selected update file?</string>
<string name="apply_update_dialog_title">Apply update</string> <string name="apply_update_dialog_title">Apply update</string>
<string name="apply_update_dialog_message">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string> <string name="apply_update_dialog_message">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
<string name="apply_update_dialog_message_ab">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string> <string name="apply_update_dialog_message_ab">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
<string name="cancel_installation_dialog_message">Cancel the installation?</string> <string name="cancel_installation_dialog_message">Cancel the installation?</string>
<string name="label_download_url">Download URL</string> <string name="label_download_url">Download URL</string>
<string name="toast_download_url_copied">URL Copied</string> <string name="toast_download_url_copied">URL Copied</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Update exported</string> <string name="notification_export_success">Update exported</string>
<string name="notification_export_fail">Export error</string> <string name="notification_export_fail">Export error</string>
<string name="toast_already_exporting">Already exporting an update</string> <string name="toast_already_exporting">Already exporting an update</string>
<string name="toast_export_started">Export started</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 second left</item> <item quantity="one">1 second left</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">New updates</string> <string name="new_updates_channel_title">New updates</string>
<string name="ongoing_channel_title">Ongoing downloads</string> <string name="ongoing_channel_title">Ongoing downloads</string>
<string name="update_failed_channel_title">Update failed</string> <string name="update_failed_channel_title">Update failed</string>
<string name="info_dialog_title">Did you know?</string>
<string name="info_dialog_message">LineageOS updates are full installation packages. That means you can always install only the latest update, even if you skipped some in between!</string>
<string name="info_dialog_ok">Thanks for the info!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Verifying update</string> <string name="list_verifying_update">Verifying update</string>
<string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string> <string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string>
<string name="action_download">Download</string> <string name="action_download">Download</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Delete file</string> <string name="confirm_delete_dialog_title">Delete file</string>
<string name="confirm_delete_dialog_message">Delete the selected update file?</string> <string name="confirm_delete_dialog_message">Delete the selected update file?</string>
<string name="apply_update_dialog_title">Apply update</string> <string name="apply_update_dialog_title">Apply update</string>
<string name="apply_update_dialog_message">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string> <string name="apply_update_dialog_message">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
<string name="apply_update_dialog_message_ab">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string> <string name="apply_update_dialog_message_ab">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
<string name="cancel_installation_dialog_message">Cancel the installation?</string> <string name="cancel_installation_dialog_message">Cancel the installation?</string>
<string name="label_download_url">Download URL</string> <string name="label_download_url">Download URL</string>
<string name="toast_download_url_copied">URL Copied</string> <string name="toast_download_url_copied">URL Copied</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Update exported</string> <string name="notification_export_success">Update exported</string>
<string name="notification_export_fail">Export error</string> <string name="notification_export_fail">Export error</string>
<string name="toast_already_exporting">Already exporting an update</string> <string name="toast_already_exporting">Already exporting an update</string>
<string name="toast_export_started">Export started</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 second left</item> <item quantity="one">1 second left</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">New updates</string> <string name="new_updates_channel_title">New updates</string>
<string name="ongoing_channel_title">Ongoing downloads</string> <string name="ongoing_channel_title">Ongoing downloads</string>
<string name="update_failed_channel_title">Update failed</string> <string name="update_failed_channel_title">Update failed</string>
<string name="info_dialog_title">Did you know?</string>
<string name="info_dialog_message">LineageOS updates are full installation packages. That means you can always install only the latest update, even if you skipped some in between!</string>
<string name="info_dialog_ok">Thanks for the info!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Verifying update</string> <string name="list_verifying_update">Verifying update</string>
<string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string> <string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string>
<string name="action_download">Download</string> <string name="action_download">Download</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Delete file</string> <string name="confirm_delete_dialog_title">Delete file</string>
<string name="confirm_delete_dialog_message">Delete the selected update file?</string> <string name="confirm_delete_dialog_message">Delete the selected update file?</string>
<string name="apply_update_dialog_title">Apply update</string> <string name="apply_update_dialog_title">Apply update</string>
<string name="apply_update_dialog_message">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string> <string name="apply_update_dialog_message">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
<string name="apply_update_dialog_message_ab">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string> <string name="apply_update_dialog_message_ab">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
<string name="cancel_installation_dialog_message">Cancel the installation?</string> <string name="cancel_installation_dialog_message">Cancel the installation?</string>
<string name="label_download_url">Download URL</string> <string name="label_download_url">Download URL</string>
<string name="toast_download_url_copied">URL Copied</string> <string name="toast_download_url_copied">URL Copied</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Update exported</string> <string name="notification_export_success">Update exported</string>
<string name="notification_export_fail">Export error</string> <string name="notification_export_fail">Export error</string>
<string name="toast_already_exporting">Already exporting an update</string> <string name="toast_already_exporting">Already exporting an update</string>
<string name="toast_export_started">Export started</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 second left</item> <item quantity="one">1 second left</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">New updates</string> <string name="new_updates_channel_title">New updates</string>
<string name="ongoing_channel_title">Ongoing downloads</string> <string name="ongoing_channel_title">Ongoing downloads</string>
<string name="update_failed_channel_title">Update failed</string> <string name="update_failed_channel_title">Update failed</string>
<string name="info_dialog_title">Did you know?</string>
<string name="info_dialog_message">LineageOS updates are full installation packages. That means you can always install only the latest update, even if you skipped some in between!</string>
<string name="info_dialog_ok">Thanks for the info!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Last checked: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Verifying update</string> <string name="list_verifying_update">Verifying update</string>
<string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string> <string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string>
<string name="action_download">Download</string> <string name="action_download">Download</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Delete file</string> <string name="confirm_delete_dialog_title">Delete file</string>
<string name="confirm_delete_dialog_message">Delete the selected update file?</string> <string name="confirm_delete_dialog_message">Delete the selected update file?</string>
<string name="apply_update_dialog_title">Apply update</string> <string name="apply_update_dialog_title">Apply update</string>
<string name="apply_update_dialog_message">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string> <string name="apply_update_dialog_message">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
<string name="apply_update_dialog_message_ab">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string> <string name="apply_update_dialog_message_ab">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
<string name="cancel_installation_dialog_message">Cancel the installation?</string> <string name="cancel_installation_dialog_message">Cancel the installation?</string>
<string name="label_download_url">Download URL</string> <string name="label_download_url">Download URL</string>
<string name="toast_download_url_copied">URL Copied</string> <string name="toast_download_url_copied">URL Copied</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Update exported</string> <string name="notification_export_success">Update exported</string>
<string name="notification_export_fail">Export error</string> <string name="notification_export_fail">Export error</string>
<string name="toast_already_exporting">Already exporting an update</string> <string name="toast_already_exporting">Already exporting an update</string>
<string name="toast_export_started">Export started</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 second left</item> <item quantity="one">1 second left</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> seconds left</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">New updates</string> <string name="new_updates_channel_title">New updates</string>
<string name="ongoing_channel_title">Ongoing downloads</string> <string name="ongoing_channel_title">Ongoing downloads</string>
<string name="update_failed_channel_title">Update failed</string> <string name="update_failed_channel_title">Update failed</string>
<string name="info_dialog_title">Did you know?</string>
<string name="info_dialog_message">LineageOS updates are full installation packages. That means you can always install only the latest update, even if you skipped some in between!</string>
<string name="info_dialog_ok">Thanks for the info!</string>
</resources> </resources>

View File

@@ -29,6 +29,7 @@
<string name="text_download_speed">%1$s, %2$s/s</string> <string name="text_download_speed">%1$s, %2$s/s</string>
<string name="pause_button">Pausar</string> <string name="pause_button">Pausar</string>
<string name="resume_button">Reanudar</string> <string name="resume_button">Reanudar</string>
<string name="suspend_button">Suspender</string>
<string name="installing_update">Instalando paquete de actualización</string> <string name="installing_update">Instalando paquete de actualización</string>
<string name="installing_update_error">Error de instalación</string> <string name="installing_update_error">Error de instalación</string>
<string name="installing_update_finished">Actualización instalada</string> <string name="installing_update_finished">Actualización instalada</string>
@@ -63,8 +64,6 @@
<string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">Verificando actualización</string> <string name="list_verifying_update">Verificando actualización</string>
<string name="list_no_updates">Sin nuevas actualizaciones disponibles. Para comprobar manualmente, pulsa el botón «Actualizar».</string> <string name="list_no_updates">Sin nuevas actualizaciones disponibles. Para comprobar manualmente, pulsa el botón «Actualizar».</string>
<string name="action_download">Descargar</string> <string name="action_download">Descargar</string>
@@ -77,8 +76,6 @@
<string name="confirm_delete_dialog_title">Borrar archivo</string> <string name="confirm_delete_dialog_title">Borrar archivo</string>
<string name="confirm_delete_dialog_message">¿Borrar el archivo de actualización seleccionado?</string> <string name="confirm_delete_dialog_message">¿Borrar el archivo de actualización seleccionado?</string>
<string name="apply_update_dialog_title">Aplicar actualización</string> <string name="apply_update_dialog_title">Aplicar actualización</string>
<string name="apply_update_dialog_message">Actualizarás a <xliff:g id="filename">%1$s</xliff:g>.\n\nAl pulsar en <xliff:g id="ok">%2$s</xliff:g>, se reiniciará el dispositivo en modo de recuperación para instalar la actualización.\n\nNota: Esta característica necesita un modo de recuperación compatible o las actualizaciones deberán instalarse manualmente.</string>
<string name="apply_update_dialog_message_ab">Actualizarás a <xliff:g id="filename">%1$s</xliff:g>. \n\nAl pulsar en <xliff:g id="ok">%2$s</xliff:g>, el dispositivo comenzará a instalar en segundo plano.\n\nUna vez terminado el proceso, se le pedirá que reinicie.</string>
<string name="cancel_installation_dialog_message">¿Cancelar instalación?</string> <string name="cancel_installation_dialog_message">¿Cancelar instalación?</string>
<string name="label_download_url">URL de descarga</string> <string name="label_download_url">URL de descarga</string>
<string name="toast_download_url_copied">URL copiada</string> <string name="toast_download_url_copied">URL copiada</string>

View File

@@ -34,6 +34,7 @@
<string name="finalizing_package">Finalizando instalación del paquete</string> <string name="finalizing_package">Finalizando instalación del paquete</string>
<string name="preparing_ota_first_boot">Preparando para el primer arranque</string> <string name="preparing_ota_first_boot">Preparando para el primer arranque</string>
<string name="dialog_prepare_zip_message">Preparación preliminar de la actualización</string> <string name="dialog_prepare_zip_message">Preparación preliminar de la actualización</string>
<string name="dialog_battery_low_title">Batería baja</string>
<string name="reboot">Reiniciar</string> <string name="reboot">Reiniciar</string>
<string name="menu_refresh">Actualizar</string> <string name="menu_refresh">Actualizar</string>
<string name="menu_preferences">Preferencias</string> <string name="menu_preferences">Preferencias</string>
@@ -43,6 +44,7 @@
<string name="menu_copy_url">Copiar URL</string> <string name="menu_copy_url">Copiar URL</string>
<string name="menu_export_update">Exportar actualización</string> <string name="menu_export_update">Exportar actualización</string>
<string name="menu_show_changelog">Mostrar registro de cambios</string> <string name="menu_show_changelog">Mostrar registro de cambios</string>
<string name="toast_forced_update_recovery">Es imposible desactivar en este dispositivo las actualizaciones del Modo de Recuperación («Recovery») de Lineage.</string>
<string name="snack_updates_found">Se encontraron nuevas actualizaciones</string> <string name="snack_updates_found">Se encontraron nuevas actualizaciones</string>
<string name="snack_no_updates_found">No se encontraron nuevas actualizaciones</string> <string name="snack_no_updates_found">No se encontraron nuevas actualizaciones</string>
<string name="snack_updates_check_failed">Error en la comprobación de actualizaciones. Por favor, verifique la conexión a Internet e inténtalo nuevamente.</string> <string name="snack_updates_check_failed">Error en la comprobación de actualizaciones. Por favor, verifique la conexión a Internet e inténtalo nuevamente.</string>
@@ -55,7 +57,6 @@
<string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_verifying_update">Verificando actualización</string> <string name="list_verifying_update">Verificando actualización</string>
<string name="list_no_updates">Sin nuevas actualizaciones disponibles. Para comprobar manualmente, pulsa el botón «Actualizar».</string> <string name="list_no_updates">Sin nuevas actualizaciones disponibles. Para comprobar manualmente, pulsa el botón «Actualizar».</string>
<string name="action_download">Descargar</string> <string name="action_download">Descargar</string>
@@ -68,8 +69,6 @@
<string name="confirm_delete_dialog_title">Borrar archivo</string> <string name="confirm_delete_dialog_title">Borrar archivo</string>
<string name="confirm_delete_dialog_message">¿Borrar el archivo de actualización seleccionado?</string> <string name="confirm_delete_dialog_message">¿Borrar el archivo de actualización seleccionado?</string>
<string name="apply_update_dialog_title">Aplicar actualización</string> <string name="apply_update_dialog_title">Aplicar actualización</string>
<string name="apply_update_dialog_message">Actualizarás a <xliff:g id="filename">%1$s</xliff:g>.\n\nAl pulsar en <xliff:g id="ok">%2$s</xliff:g>, se reiniciará el dispositivo en modo «Recovery» para instalar la actualización.\n\nNota: Esta función requiere un «Recovery» compatible o las actualizaciones deberán instalarse manualmente.</string>
<string name="apply_update_dialog_message_ab">Actualizarás a <xliff:g id="filename">%1$s</xliff:g>. \n\nAl pulsar en <xliff:g id="ok">%2$s</xliff:g>, el dispositivo comenzará a instalar en segundo plano.\n\nUna vez terminado el proceso, se le pedirá que reinicie.</string>
<string name="cancel_installation_dialog_message">¿Cancelar la instalación?</string> <string name="cancel_installation_dialog_message">¿Cancelar la instalación?</string>
<string name="label_download_url">URL de descarga</string> <string name="label_download_url">URL de descarga</string>
<string name="toast_download_url_copied">URL copiada</string> <string name="toast_download_url_copied">URL copiada</string>
@@ -77,6 +76,14 @@
<string name="notification_export_success">Actualización exportada</string> <string name="notification_export_success">Actualización exportada</string>
<string name="notification_export_fail">Error de exportación</string> <string name="notification_export_fail">Error de exportación</string>
<string name="toast_already_exporting">Ya se está exportando una actualización</string> <string name="toast_already_exporting">Ya se está exportando una actualización</string>
<plurals name="eta_seconds">
<item quantity="one">Falta 1 segundo</item>
<item quantity="other">Faltan <xliff:g id="count">%d</xliff:g> segundos</item>
</plurals>
<plurals name="eta_minutes">
<item quantity="one">Falta 1 minuto</item>
<item quantity="other">Faltan <xliff:g id="count">%d</xliff:g> minutos</item>
</plurals>
<string name="update_on_mobile_data_title">Advertencia</string> <string name="update_on_mobile_data_title">Advertencia</string>
<string name="update_on_mobile_data_message">Se descargará un paquete de actualización usando los datos móviles, que probablemente ocasione un alto consumo de datos. ¿Quieres continuar?</string> <string name="update_on_mobile_data_message">Se descargará un paquete de actualización usando los datos móviles, que probablemente ocasione un alto consumo de datos. ¿Quieres continuar?</string>
<string name="checkbox_mobile_data_warning">No mostrar de nuevo</string> <string name="checkbox_mobile_data_warning">No mostrar de nuevo</string>

View File

@@ -15,6 +15,8 @@
limitations under the License. limitations under the License.
--> -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Uuendaja</string>
<string name="display_name">Uuendaja</string>
<string name="installation_suspended_notification">Installimine peatati</string> <string name="installation_suspended_notification">Installimine peatati</string>
<string name="suspend_button">Peata</string> <string name="suspend_button">Peata</string>
<string name="dialog_battery_low_title">Madal akutase</string> <string name="dialog_battery_low_title">Madal akutase</string>
@@ -27,7 +29,6 @@
<string name="menu_ab_perf_mode">Eelista uuendusprotsessi</string> <string name="menu_ab_perf_mode">Eelista uuendusprotsessi</string>
<string name="menu_update_recovery">Uuenda taastust</string> <string name="menu_update_recovery">Uuenda taastust</string>
<string name="toast_forced_update_recovery">Lineage Recovery taastevärskendusi pole selles seadmes võimalik keelata.</string> <string name="toast_forced_update_recovery">Lineage Recovery taastevärskendusi pole selles seadmes võimalik keelata.</string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 sekund jäänud</item> <item quantity="one">1 sekund jäänud</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> sekundit jäänud</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> sekundit jäänud</item>

View File

@@ -56,7 +56,6 @@
<string name="snack_updates_found">Eguneraketa berriak aurkitu dira</string> <string name="snack_updates_found">Eguneraketa berriak aurkitu dira</string>
<string name="snack_no_updates_found">Ez da eguneraketa berririk aurkitu</string> <string name="snack_no_updates_found">Ez da eguneraketa berririk aurkitu</string>
<string name="snack_updates_check_failed">Eguneraketa bilaketak huts egin du. Interneterako konexioa egiaztatu eta berriro saiatu, mesedez.</string> <string name="snack_updates_check_failed">Eguneraketa bilaketak huts egin du. Interneterako konexioa egiaztatu eta berriro saiatu, mesedez.</string>
<string name="snack_download_failed">Deskargak huts egin du. Egiaztatu Interneterako konexioa eta saiatu berriro.</string>
<string name="snack_download_verification_failed">Eguneraketaren egiaztaketak huts egin du.</string> <string name="snack_download_verification_failed">Eguneraketaren egiaztaketak huts egin du.</string>
<string name="snack_download_verified">Deskarga osatuta.</string> <string name="snack_download_verified">Deskarga osatuta.</string>
<string name="snack_update_not_installable">Eguneraketa hau ezin da instalatu uneko konpilazioaren gainean.</string> <string name="snack_update_not_installable">Eguneraketa hau ezin da instalatu uneko konpilazioaren gainean.</string>
@@ -65,8 +64,6 @@
<string name="header_last_updates_check">Azken egiaztaketa: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Azken egiaztaketa: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">Eguneraketa egiaztatzen</string> <string name="list_verifying_update">Eguneraketa egiaztatzen</string>
<string name="list_no_updates">Ez da eguneraketa berririk aurkitu. Eguneraketak eskuz egiaztatzeko, erabili freskatze botoia.</string> <string name="list_no_updates">Ez da eguneraketa berririk aurkitu. Eguneraketak eskuz egiaztatzeko, erabili freskatze botoia.</string>
<string name="action_download">Deskargatu</string> <string name="action_download">Deskargatu</string>
@@ -79,8 +76,6 @@
<string name="confirm_delete_dialog_title">Ezabatu fitxategia</string> <string name="confirm_delete_dialog_title">Ezabatu fitxategia</string>
<string name="confirm_delete_dialog_message">Ezabatu hautatutako eguneraketa fitxategia?</string> <string name="confirm_delete_dialog_message">Ezabatu hautatutako eguneraketa fitxategia?</string>
<string name="apply_update_dialog_title">Aplikatu eguneraketa</string> <string name="apply_update_dialog_title">Aplikatu eguneraketa</string>
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g>. bertsioa instalatzera zoaz.\n\n <xliff:g id="ok">%2$s</xliff:g> sakatzean, gailua berreskuratze moduan berrabiaraziko da eguneraketa instalatzeko.\n\nOharra: Berreskuratze aplikazio bateragarri bat behar du ezaugarri honek, bestela eguneraketak eskuz instalatu beharko dira.</string>
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> bertsioa instalatzera zoaz.\n\n<xliff:g id="ok">%2$s</xliff:g> sakatzean, gailua atzeko planoan hasiko da eguneratzen.\n\nBehin bukatuta berrabiaraztea eskatuko zaizu.</string>
<string name="cancel_installation_dialog_message">Ezeztatu instalazioa?</string> <string name="cancel_installation_dialog_message">Ezeztatu instalazioa?</string>
<string name="label_download_url">Deskargaren URL-s</string> <string name="label_download_url">Deskargaren URL-s</string>
<string name="toast_download_url_copied">URL-a kopiatuta</string> <string name="toast_download_url_copied">URL-a kopiatuta</string>

View File

@@ -67,8 +67,6 @@
<string name="header_last_updates_check">Viimeksi tarkistettu: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Viimeksi tarkistettu: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">Todentaa päivitystä</string> <string name="list_verifying_update">Todentaa päivitystä</string>
<string name="list_no_updates">Uusia päivityksiä ei löytynyt. Tarkistaaksesi päivitykset manuaalisesti, paina Päivitä-painiketta.</string> <string name="list_no_updates">Uusia päivityksiä ei löytynyt. Tarkistaaksesi päivitykset manuaalisesti, paina Päivitä-painiketta.</string>
<string name="action_download">Lataa</string> <string name="action_download">Lataa</string>
@@ -81,8 +79,6 @@
<string name="confirm_delete_dialog_title">Poista tiedosto</string> <string name="confirm_delete_dialog_title">Poista tiedosto</string>
<string name="confirm_delete_dialog_message">Poista valittu päivitystiedosto?</string> <string name="confirm_delete_dialog_message">Poista valittu päivitystiedosto?</string>
<string name="apply_update_dialog_title">Asenna päivitys</string> <string name="apply_update_dialog_title">Asenna päivitys</string>
<string name="apply_update_dialog_message">Olet päivittämässä versioon <xliff:g id="update_name">%1$s</xliff:g>.\n\nJos painat <xliff:g id="ok">%2$s</xliff:g>, laite käynnistyy Recovery-tilaan. \n\nHuomautus: Tämä toiminto vaatii yhteensopivan Recoveryn tai päivitys pitää asentaa manuaalisesti.</string>
<string name="apply_update_dialog_message_ab">Olet päivittämässä versioon <xliff:g id="update_name">%1$s</xliff:g>.\n\nJos painat <xliff:g id="ok">%2$s</xliff:g>, asennus alkaa taustalla.\n\nKun asennus on valmis, sinua pyydetään käynnistämään laite uudelleen.</string>
<string name="cancel_installation_dialog_message">Peruuta asennus?</string> <string name="cancel_installation_dialog_message">Peruuta asennus?</string>
<string name="label_download_url">Lataussivun URL-osoite</string> <string name="label_download_url">Lataussivun URL-osoite</string>
<string name="toast_download_url_copied">URL-osoite kopioitu</string> <string name="toast_download_url_copied">URL-osoite kopioitu</string>
@@ -112,4 +108,6 @@
<string name="new_updates_channel_title">Uudet päivitykset</string> <string name="new_updates_channel_title">Uudet päivitykset</string>
<string name="ongoing_channel_title">Käynnissä olevat lataukset</string> <string name="ongoing_channel_title">Käynnissä olevat lataukset</string>
<string name="update_failed_channel_title">Päivitys epäonnistui</string> <string name="update_failed_channel_title">Päivitys epäonnistui</string>
<string name="info_dialog_title">Tiesitkö?</string>
<string name="info_dialog_message">LineageOS-päivitykset ovat täydellisiä asennuspaketteja, jonka ansiosta voit aina asentaa vain viimeisimmän päivityksen, vaikka ohittaisitkin välillä joitakin versioita!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Dernière vérification : <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Dernière vérification : <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> sur <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> sur <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> sur <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> sur <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Vérification de la mise à jour en cours</string> <string name="list_verifying_update">Vérification de la mise à jour en cours</string>
<string name="list_no_updates">Aucune nouvelle mise à jour trouvée. Pour vérifier manuellement la présence de mises à jour, utiliser le bouton Actualiser.</string> <string name="list_no_updates">Aucune nouvelle mise à jour trouvée. Pour vérifier manuellement la présence de mises à jour, utiliser le bouton Actualiser.</string>
<string name="action_download">Télécharger</string> <string name="action_download">Télécharger</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Supprimer le fichier</string> <string name="confirm_delete_dialog_title">Supprimer le fichier</string>
<string name="confirm_delete_dialog_message">Supprimer le fichier de mise à jour sélectionné ?</string> <string name="confirm_delete_dialog_message">Supprimer le fichier de mise à jour sélectionné ?</string>
<string name="apply_update_dialog_title">Appliquer la mise à jour</string> <string name="apply_update_dialog_title">Appliquer la mise à jour</string>
<string name="apply_update_dialog_message">Vous êtes sur le point d\'installer <xliff:g id="update_name">%1$s</xliff:g>.\n\nLorsque vous appuierez sur <xliff:g id="ok">%2$s</xliff:g>, votre appareil redémarrera automatiquement en mode recovery pour installer la mise à jour.\n\nRemarque : Cette opération nécessite un recovery compatible, sinon les mises à jour devront être installées manuellement.</string> <string name="apply_update_dialog_message">Vous êtes sur le point d\'installer <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi vous appuyez sur <xliff:g id="ok">%2$s</xliff:g>, votre appareil redémarrera automatiquement en mode récupération pour installer la mise à jour.\n\nRemarque : Cette opération nécessite un système de récupération compatible, sans quoi les mises à jour devront être installées manuellement.</string>
<string name="apply_update_dialog_message_ab">Vous êtes sur le point de faire la mise à jour vers <xliff:g id="update_name">%1$s</xliff:g>.\n\nLorsque vous appuierez sur <xliff:g id="ok">%2$s</xliff:g>, lappareil commencera l\'installation en tâche de fond.\n\nUne fois celle-ci terminée, il vous sera demandé de redémarrer.</string> <string name="apply_update_dialog_message_ab">Vous êtes sur le point d\'installer <xliff:g id="update_name">%1$s</xliff:g>.\n\nSi vous appuyez sur <xliff:g id="ok">%2$s</xliff:g>, lappareil commencera l\'installation en arrière-plan.\n\nUne fois celle-ci terminée, il vous sera demandé de redémarrer.</string>
<string name="cancel_installation_dialog_message">Annuler l\'installation ?</string> <string name="cancel_installation_dialog_message">Annuler l\'installation ?</string>
<string name="label_download_url">URL de téléchargement</string> <string name="label_download_url">URL de téléchargement</string>
<string name="toast_download_url_copied">URL copiée</string> <string name="toast_download_url_copied">URL copiée</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Mise à jour exportée</string> <string name="notification_export_success">Mise à jour exportée</string>
<string name="notification_export_fail">Erreur lors de l\'exportation</string> <string name="notification_export_fail">Erreur lors de l\'exportation</string>
<string name="toast_already_exporting">Une mise à jour est déjà en cours d\'export</string> <string name="toast_already_exporting">Une mise à jour est déjà en cours d\'export</string>
<string name="toast_export_started">Export démarré</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">temps restant : 1 seconde</item> <item quantity="one">temps restant : 1 seconde</item>
<item quantity="other">temps restant : <xliff:g id="count">%d</xliff:g> secondes</item> <item quantity="other">temps restant : <xliff:g id="count">%d</xliff:g> secondes</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">Nouvelles mises à jour</string> <string name="new_updates_channel_title">Nouvelles mises à jour</string>
<string name="ongoing_channel_title">Téléchargements en cours</string> <string name="ongoing_channel_title">Téléchargements en cours</string>
<string name="update_failed_channel_title">Échec de la mise à jour</string> <string name="update_failed_channel_title">Échec de la mise à jour</string>
<string name="info_dialog_title">Le saviez-vous ?</string>
<string name="info_dialog_message">Les mises à jour de LineageOS sont des paquets d\'installation complets. Cela signifie que vous ne pouvez installer que la dernière mise à jour, même si vous en avez ignorées entre temps !</string>
<string name="info_dialog_ok">Merci pour l\'information !</string>
</resources> </resources>

View File

@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2017-2020 The LineageOS Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Inzornaments</string>
<string name="display_name">Inzornaments</string>
<string name="verification_failed_notification">Verifiche falide</string>
<string name="verifying_download_notification">Verifiche inzornaments</string>
<string name="downloading_notification">Daûr a discjariâ</string>
<string name="download_paused_notification">Discjariament in pause</string>
<string name="download_paused_error_notification">Erôr tal discjariâ</string>
<string name="download_completed_notification">Discjariament completât</string>
<string name="download_starting_notification">Daûr a scomençâ il discjariament</string>
<string name="update_failed_notification">Inzornament falît</string>
<string name="installation_suspended_notification">Instalazion sospindude</string>
<string name="new_updates_found_title">Gnûfs inzornaments</string>
<string name="text_download_speed">%1$s, %2$s/s</string>
<string name="pause_button">Pause</string>
<string name="resume_button">Ripie</string>
<string name="suspend_button">Sospint</string>
<string name="installing_update">Instalazion dal pachet di inzornament</string>
<string name="installing_update_error">Erôr di instalazion</string>
<string name="installing_update_finished">Inzornament instalât</string>
<string name="finalizing_package">Daûr a completâ la instalazion dal pachet</string>
<string name="preparing_ota_first_boot">Preparazion pal prin inviament</string>
<string name="dialog_prepare_zip_message">Preparazion dal inzornament preliminâr</string>
<string name="dialog_battery_low_title">Batarie basse</string>
<string name="dialog_battery_low_message_pct">Il nivel de batarie al è masse bas, tu scugnis vê almancul il <xliff:g id="percent_discharging">%1$d</xliff:g>%% par continuâ, <xliff:g id="percent_charging">%2$d</xliff:g>%% se e je in cjame.</string>
<string name="reboot">Torne invie</string>
<string name="menu_refresh">Torne cjame</string>
<string name="menu_preferences">Preferencis</string>
<string name="menu_auto_updates_check">Ricercje inzornaments in automatic</string>
<string name="menu_auto_updates_check_interval_daily">Une volte par dì</string>
<string name="menu_auto_updates_check_interval_weekly">Une volte par setemane</string>
<string name="menu_auto_updates_check_interval_monthly">Une volte par mês</string>
<string name="menu_auto_updates_check_interval_never">Mai</string>
<string name="menu_auto_delete_updates">Elimine i inzornaments se instalâts</string>
<string name="menu_delete_update">Elimine</string>
<string name="menu_copy_url">Copie l\'URL</string>
<string name="menu_export_update">Espuarte inzornament</string>
<string name="menu_show_changelog">Mostre regjisti modifichis</string>
<string name="menu_ab_perf_mode">Inzornaments cun prioritât</string>
<string name="menu_update_recovery">Inzorne Recovery</string>
<string name="toast_forced_update_recovery">Nol è pussibil disativâ i inzornaments di Lineage Recovery su chest dispositîf.</string>
<string name="snack_updates_found">Cjatâts gnûfs inzornaments</string>
<string name="snack_no_updates_found">Nissun gnûf inzornament cjatât</string>
<string name="snack_updates_check_failed">La verifiche di gnûfs inzornaments e je falide. Controle la conession internet e torne prove plui indenant.</string>
<string name="snack_download_failed">Il discjariament dal inzornament al è falît. Controle la conession a internet e torne prove plui indenant.</string>
<string name="snack_download_verification_failed">Verifiche dal inzornament falide.</string>
<string name="snack_download_verified">Discjariament completât.</string>
<string name="snack_update_not_installable">Nol è pussibil instalâ chest inzornament sore di cheste version.</string>
<string name="header_title_text">LineageOS\n%1$s</string>
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
<string name="header_last_updates_check">Ultime verifiche: <xliff:g id="date" example="2 di Zenâr dal 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="Lui 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Verifiche inzornament</string>
<string name="list_no_updates">Nissun gnûf inzornament cjatât. Par controlâ a man i gnûfs inzornaments, tocje il boton Inzorne.</string>
<string name="action_download">Discjame</string>
<string name="action_pause">Pause</string>
<string name="action_resume">Ripie</string>
<string name="action_install">Instale</string>
<string name="action_info">Informazions</string>
<string name="action_delete">Elimine</string>
<string name="action_cancel">Anule</string>
<string name="confirm_delete_dialog_title">Elimine file</string>
<string name="confirm_delete_dialog_message">Eliminâ il file di inzornament selezionât?</string>
<string name="apply_update_dialog_title">Apliche inzornament</string>
<string name="apply_update_dialog_message">Tu stâs par instalâ <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe tu frachis <xliff:g id="ok">%2$s</xliff:g>, il dispositîf al tornarà a inviâsi in modalitât recovery par instalâ in automatic l\'inzornament.\n\nNote: Cheste funzion e domande une Recovery compatibile, in câs contrari tu varâs di procedi ae instalazion manuâl.</string>
<string name="apply_update_dialog_message_ab">Tu stâs par instalâ <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe tu frachis <xliff:g id="ok">%2$s</xliff:g>, il dispositîf al scomençarà la instalazion in sotfont.\n\nUne volte completade, ti vignarà domandât di tornâ a inviâ il dispositîf.</string>
<string name="cancel_installation_dialog_message">Anulâ la instalazion?</string>
<string name="label_download_url">URL dal discjariament</string>
<string name="toast_download_url_copied">URL copiât</string>
<string name="dialog_export_title">Esportazion inzornament</string>
<string name="notification_export_success">Inzornament espuartât</string>
<string name="notification_export_fail">Erôr de esportazion</string>
<string name="toast_already_exporting">Si sta za espuartant un inzornament</string>
<string name="toast_export_started">Esportazion scomençade</string>
<plurals name="eta_seconds">
<item quantity="one">Al mancje 1 secont</item>
<item quantity="other">A mancjin <xliff:g id="count">%d</xliff:g> seconts</item>
</plurals>
<plurals name="eta_minutes">
<item quantity="one">Al mancje 1 minût</item>
<item quantity="other">A mancjin <xliff:g id="count">%d</xliff:g> minûts</item>
</plurals>
<plurals name="eta_hours">
<item quantity="one">E mancje 1 ore</item>
<item quantity="other">A mancjin <xliff:g id="count">%d</xliff:g> oris</item>
</plurals>
<string name="update_on_mobile_data_title">Atenzion</string>
<string name="update_on_mobile_data_message">Tu stâs par discjariâ un pachet di inzornament doprant i dâts mobii, chest al podarès puartâ a consumâ une vore di dâts pes conessions a consum. Procedi?</string>
<string name="checkbox_mobile_data_warning">No sta mostrâ plui</string>
<string name="menu_mobile_data_warning">Avîs utilizazion dâs mobii</string>
<string name="blocked_update_dialog_title">Inzornament blocât</string>
<string name="blocked_update_dialog_message">Nol è pussibil instalâ chest inzornament cu la aplicazion di inzornament. Lei <xliff:g id="info_url">%1$s</xliff:g> par vê plui informazions.</string>
<string name="export_channel_title">Completament de esportazion</string>
<string name="new_updates_channel_title">Gnûfs inzornaments</string>
<string name="ongoing_channel_title">Discjariaments in vore</string>
<string name="update_failed_channel_title">Inzornament falît</string>
<string name="info_dialog_title">Savevistu?</string>
<string name="info_dialog_message">I inzornaments di LineageOS a son pachets di instalazion complets. Chest al significhe che tu puedis simpri instalâ l\'ultin inzornament, ancje se prime tu\'nd âs saltât cualchidun!</string>
<string name="info_dialog_ok">Graciis pe informazion!</string>
</resources>

View File

@@ -65,8 +65,6 @@
<string name="header_last_updates_check">Lêst kontrolearre: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Lêst kontrolearre: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> fan <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> fan <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">Fernijing ferifiearje</string> <string name="list_verifying_update">Fernijing ferifiearje</string>
<string name="list_no_updates">Gjin nije fernijingen fûn. Brûk de knop Fernije om hânmjittich te kontrolearjen op nije fernijingen.</string> <string name="list_no_updates">Gjin nije fernijingen fûn. Brûk de knop Fernije om hânmjittich te kontrolearjen op nije fernijingen.</string>
<string name="action_download">Downloade</string> <string name="action_download">Downloade</string>
@@ -79,8 +77,6 @@
<string name="confirm_delete_dialog_title">Bestân fuortsmite</string> <string name="confirm_delete_dialog_title">Bestân fuortsmite</string>
<string name="confirm_delete_dialog_message">Selektearre fernijingsbestân fuortsmite?</string> <string name="confirm_delete_dialog_message">Selektearre fernijingsbestân fuortsmite?</string>
<string name="apply_update_dialog_title">Fernijing tapasse</string> <string name="apply_update_dialog_title">Fernijing tapasse</string>
<string name="apply_update_dialog_message">Jo systeem wurdt bywurke nei <xliff:g id="update_name">%1$s</xliff:g>.\n\nWannear\'t jo op <xliff:g id="ok">%2$s</xliff:g> tikke, sil it apparaat opnij starte nei recovery om de fernijing te ynstallearjen.\n\nLet op: in compatibele recovery is fereaske, oars moat de fernijing hânmjittich ynstallearre wurde.</string>
<string name="apply_update_dialog_message_ab">Jo systeem wurdt bywurke nei <xliff:g id="update_name">%1$s</xliff:g>.\n\nWannear\'t jo op <xliff:g id="ok">%2$s</xliff:g> tikke, sil it apparaat de fernijing op de eftergrûn útfiere.\n\nWannear\'t de ynstallaasje foltôge is, sil frege wurde it tastel te opnij te starten.</string>
<string name="cancel_installation_dialog_message">Ynstallaasje annulearje?</string> <string name="cancel_installation_dialog_message">Ynstallaasje annulearje?</string>
<string name="label_download_url">Download-URL</string> <string name="label_download_url">Download-URL</string>
<string name="toast_download_url_copied">URL kopiearre</string> <string name="toast_download_url_copied">URL kopiearre</string>

View File

@@ -61,14 +61,12 @@
<string name="snack_download_failed">Dhfhàillig an luchdadh a-nuas. Thoir sùil air a cheangal ris an eadar-lìon agad is feuch ris a-rithist an ceann greis.</string> <string name="snack_download_failed">Dhfhàillig an luchdadh a-nuas. Thoir sùil air a cheangal ris an eadar-lìon agad is feuch ris a-rithist an ceann greis.</string>
<string name="snack_download_verification_failed">Dhfhàillig le dearbhadh an ùrachaidh.</string> <string name="snack_download_verification_failed">Dhfhàillig le dearbhadh an ùrachaidh.</string>
<string name="snack_download_verified">Tha an luchdadh a-nuas deiseil.</string> <string name="snack_download_verified">Tha an luchdadh a-nuas deiseil.</string>
<string name="snack_update_not_installable">Chan urrainn dhut an t-ùrachadh seo a stàladh air an tionndadh làithreach agad.</string> <string name="snack_update_not_installable">Chan urrainn dhut an t-ùrachadh seo a stàladh air an togail làithreach agad.</string>
<string name="header_title_text">LineageOS\n%1$s</string> <string name="header_title_text">LineageOS\n%1$s</string>
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string> <string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
<string name="header_last_updates_check">An sgrùdadh mu dheireadh: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">An sgrùdadh mu dheireadh: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">A dearbhadh an ùrachaidh</string> <string name="list_verifying_update">A dearbhadh an ùrachaidh</string>
<string name="list_no_updates">Cha deach ùrachadh a lorg. Airson sùil a thoirt airson ùrachaidhean a làimh, cleachd am putan “Ath-nuadhaich”.</string> <string name="list_no_updates">Cha deach ùrachadh a lorg. Airson sùil a thoirt airson ùrachaidhean a làimh, cleachd am putan “Ath-nuadhaich”.</string>
<string name="action_download">Luchdaich a-nuas</string> <string name="action_download">Luchdaich a-nuas</string>
@@ -81,8 +79,6 @@
<string name="confirm_delete_dialog_title">Sguab às am faidhle</string> <string name="confirm_delete_dialog_title">Sguab às am faidhle</string>
<string name="confirm_delete_dialog_message">A bheil thu airson faidhle an ùrachaidh a thagh thu a sguabadh às?</string> <string name="confirm_delete_dialog_message">A bheil thu airson faidhle an ùrachaidh a thagh thu a sguabadh às?</string>
<string name="apply_update_dialog_title">Cuir an t-ùrachadh an sàs</string> <string name="apply_update_dialog_title">Cuir an t-ùrachadh an sàs</string>
<string name="apply_update_dialog_message">Tha thu an impis àrdachadh gu <xliff:g id="update_name">%1$s</xliff:g>.\n\nMa bhrùthas tu <xliff:g id="ok">%2$s</xliff:g>, nì an t-uidheam ath-thòiseachadh sa mhodh aisig airson an t-ùrachadh a stàladh.\n\nAn aire: Tha feum air gleus aisig co-chòrdail no feumaidh tu an t-ùrachadh a stàladh a làimh.</string>
<string name="apply_update_dialog_message_ab">Tha thu an impis àrdachadh gu <xliff:g id="update_name">%1$s</xliff:g>.\n\nMa bhrùthas tu <xliff:g id="ok">%2$s</xliff:g>, tòisichidh an t-uidheam air an stàladh sa chùlaibh.\n\nNuair a bhios e deiseil, thèid ath-thòiseachadh iarraidh ort.</string>
<string name="cancel_installation_dialog_message">An sguir thu dhen stàladh?</string> <string name="cancel_installation_dialog_message">An sguir thu dhen stàladh?</string>
<string name="label_download_url">Luchdaich a-nuas URL</string> <string name="label_download_url">Luchdaich a-nuas URL</string>
<string name="toast_download_url_copied">Chaidh lethbhreac dhen URL a dhèanamh</string> <string name="toast_download_url_copied">Chaidh lethbhreac dhen URL a dhèanamh</string>
@@ -97,10 +93,10 @@
<item quantity="other"><xliff:g id="count">%d</xliff:g> diog air fhàgail</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> diog air fhàgail</item>
</plurals> </plurals>
<plurals name="eta_minutes"> <plurals name="eta_minutes">
<item quantity="one"><xliff:g id="count">%d</xliff:g> mhionaid air fhàgail</item> <item quantity="one"><xliff:g id="count">%d</xliff:g> mhion. air fhàgail</item>
<item quantity="two"><xliff:g id="count">%d</xliff:g> mhionaid air fhàgail</item> <item quantity="two"><xliff:g id="count">%d</xliff:g> mhion. air fhàgail</item>
<item quantity="few"><xliff:g id="count">%d</xliff:g> mionaidean air fhàgail</item> <item quantity="few"><xliff:g id="count">%d</xliff:g> mion. air fhàgail</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> mionaid air fhàgail</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> mion. air fhàgail</item>
</plurals> </plurals>
<plurals name="eta_hours"> <plurals name="eta_hours">
<item quantity="one"><xliff:g id="count">%d</xliff:g> uair a thìde air fhàgail</item> <item quantity="one"><xliff:g id="count">%d</xliff:g> uair a thìde air fhàgail</item>

View File

@@ -67,8 +67,6 @@
<string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Última comprobación: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new">restan <xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">Comprobando actualización</string> <string name="list_verifying_update">Comprobando actualización</string>
<string name="list_no_updates">Non se atoparon novas actualizacións. Para buscar manualmente, preme no botón Actualizar.</string> <string name="list_no_updates">Non se atoparon novas actualizacións. Para buscar manualmente, preme no botón Actualizar.</string>
<string name="action_download">Descarga</string> <string name="action_download">Descarga</string>
@@ -81,8 +79,6 @@
<string name="confirm_delete_dialog_title">Eliminar ficheiro</string> <string name="confirm_delete_dialog_title">Eliminar ficheiro</string>
<string name="confirm_delete_dialog_message">Eliminar o ficheiro de actualización seleccionado?</string> <string name="confirm_delete_dialog_message">Eliminar o ficheiro de actualización seleccionado?</string>
<string name="apply_update_dialog_title">Aplicar a actualización</string> <string name="apply_update_dialog_title">Aplicar a actualización</string>
<string name="apply_update_dialog_message">Procederase a actualizar <xliff:g id="update_name">%1$s</xliff:g>.\n\nAo premer en <xliff:g id="ok">%2$s</xliff:g>, reiniciarase no modo recuperación para instalar a actualización.\n\nAviso: Esta función require dunha recuperación compatible ou as actualizacións precisarán de se instalar manualmente.</string>
<string name="apply_update_dialog_message_ab">Actualizaráse a <xliff:g id="update_name">%1$s</xliff:g>.\n\n Se pulsase <xliff:g id="ok">%2$s</xliff:g>, o dispositivo comezará a instalar en segundo plano.\n\nUnha vez terminado o proceso, pediráselle que reinicie.</string>
<string name="cancel_installation_dialog_message">Cancelar a instalación?</string> <string name="cancel_installation_dialog_message">Cancelar a instalación?</string>
<string name="label_download_url">URL da descarga</string> <string name="label_download_url">URL da descarga</string>
<string name="toast_download_url_copied">URL copiado</string> <string name="toast_download_url_copied">URL copiado</string>

View File

@@ -62,8 +62,6 @@
<string name="confirm_delete_dialog_title">Izbriši datoteku</string> <string name="confirm_delete_dialog_title">Izbriši datoteku</string>
<string name="confirm_delete_dialog_message">Želite li izbrisati odabranu datoteku ažuriranja?</string> <string name="confirm_delete_dialog_message">Želite li izbrisati odabranu datoteku ažuriranja?</string>
<string name="apply_update_dialog_title">Primjeni ažuriranje</string> <string name="apply_update_dialog_title">Primjeni ažuriranje</string>
<string name="apply_update_dialog_message">Ažurirat ćete svoj sustav na <xliff:g id="filename">%1$s</xliff:g>.\n\nAko pritisnete <xliff:g id="ok">%2$s</xliff:g>, uređaj će se sam ponovno pokrenuti u načinu oporavka kako bi instalirao ažuriranje.\n\nNapomena: ova značajka zahtijeva kompatibilan Oporavak. U suprotnome će se ažuriranja morati instalirati ručno.</string>
<string name="apply_update_dialog_message_ab">Spremate se ažurirati na <xliff:g id="filename">%1$s </xliff:g>.\n\nAko dodirnete <xliff:g id="ok">%2$s</xliff:g>, uređaj će započeti instalaciju u pozadini.\n\nKad se završi, trebati ćete ponovno pokrenuti uređaj.</string>
<string name="cancel_installation_dialog_message">Prekinuti instalaciju?</string> <string name="cancel_installation_dialog_message">Prekinuti instalaciju?</string>
<string name="label_download_url">Preuzmi URL</string> <string name="label_download_url">Preuzmi URL</string>
<string name="toast_download_url_copied">URL kopiran</string> <string name="toast_download_url_copied">URL kopiran</string>

View File

@@ -68,8 +68,8 @@ illetve, ha éppen tölt, akkor még <xliff:g id="percent_charging">%2$d</xliff:
<string name="header_last_updates_check">Utolsó ellenőrzés: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Utolsó ellenőrzés: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> a <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g>-ból - <xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> a <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g>-ból (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Frissítésellenőrzés</string> <string name="list_verifying_update">Frissítésellenőrzés</string>
<string name="list_no_updates">Nem található új frissítés. A manuális ellenőrzéshez használja a Frissítés gombot.</string> <string name="list_no_updates">Nem található új frissítés. A manuális ellenőrzéshez használja a Frissítés gombot.</string>
<string name="action_download">Letöltés</string> <string name="action_download">Letöltés</string>
@@ -82,8 +82,8 @@ illetve, ha éppen tölt, akkor még <xliff:g id="percent_charging">%2$d</xliff:
<string name="confirm_delete_dialog_title">Fájltörlés</string> <string name="confirm_delete_dialog_title">Fájltörlés</string>
<string name="confirm_delete_dialog_message">Biztosan törölni szeretné a letöltött frissítőfájlt?</string> <string name="confirm_delete_dialog_message">Biztosan törölni szeretné a letöltött frissítőfájlt?</string>
<string name="apply_update_dialog_title">A frissítés telepítése</string> <string name="apply_update_dialog_title">A frissítés telepítése</string>
<string name="apply_update_dialog_message">A következő frissítésre készül: <xliff:g id="update_name">%1$s</xliff:g>.\n\nHa megnyomja ezt a gombot: <xliff:g id="ok">%2$s</xliff:g>, a készülék újraindul recovery módban a frissítés telepítéséhez.\n\nMegjegyzés: Ehhez a funkcióhoz kompatibilis recovery-re van szükség, ennek hiányában manuálisan kell a telepíteni a frissítéseket.</string> <string name="apply_update_dialog_message">Ön a következőt kívánja telepiteni: <xliff:g id="update_name">%1$s</xliff:g>\n\nAmennyiben megnyomja az <xliff:g id="ok">%2$s</xliff:g> gombot, a készülék újraindul recovery-módban és telepíti a frissítést.\n\nFigyelmeztetés: a telepítéshez a készülékkel kompatibilis Recovery szükséges</string>
<string name="apply_update_dialog_message_ab">A következő frissítésre készül: <xliff:g id="update_name">%1$s</xliff:g>.\n\nHa megnyomja ezt a gombot: <xliff:g id="ok">%2$s</xliff:g>, a készülék elkezdi a telepítést a háttérben.\n\nAmint kész, újraindításra lesz szükség.</string> <string name="apply_update_dialog_message_ab">A következő telepítésre készül: <xliff:g id="update_name">%1$s</xliff:g>.\n\nAmennyiben megnyomja az <xliff:g id="ok">%2$s</xliff:g> gombot, a készülék elkezdi a telepítést a háttérben.\n\nAmint kész, újraindításra lesz szükség.</string>
<string name="cancel_installation_dialog_message">Megszakítja a telepítést?</string> <string name="cancel_installation_dialog_message">Megszakítja a telepítést?</string>
<string name="label_download_url">Az URL letöltése</string> <string name="label_download_url">Az URL letöltése</string>
<string name="toast_download_url_copied">Az URL másolva</string> <string name="toast_download_url_copied">Az URL másolva</string>
@@ -91,6 +91,7 @@ illetve, ha éppen tölt, akkor még <xliff:g id="percent_charging">%2$d</xliff:
<string name="notification_export_success">A frissítés exportálva</string> <string name="notification_export_success">A frissítés exportálva</string>
<string name="notification_export_fail">Exportálás hiba</string> <string name="notification_export_fail">Exportálás hiba</string>
<string name="toast_already_exporting">Egy frissítés exportálása már folyamatban van</string> <string name="toast_already_exporting">Egy frissítés exportálása már folyamatban van</string>
<string name="toast_export_started">Az exportálás elindult</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 másodperc van hátra</item> <item quantity="one">1 másodperc van hátra</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> másodperc van hátra</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> másodperc van hátra</item>
@@ -113,4 +114,7 @@ illetve, ha éppen tölt, akkor még <xliff:g id="percent_charging">%2$d</xliff:
<string name="new_updates_channel_title">Új frissítések</string> <string name="new_updates_channel_title">Új frissítések</string>
<string name="ongoing_channel_title">Folyamatban lévő letöltések</string> <string name="ongoing_channel_title">Folyamatban lévő letöltések</string>
<string name="update_failed_channel_title">A frissítés sikertelen</string> <string name="update_failed_channel_title">A frissítés sikertelen</string>
<string name="info_dialog_title">Tudta Ön?</string>
<string name="info_dialog_message">A LineageOS frissítései teljes telepítőcsomagok. Ez azt jelenti, hogy mindig elég a legfrissebb csomagot telepítenie, nem baj ha korábban kihagyott párat!</string>
<string name="info_dialog_ok">Köszönet az információért!</string>
</resources> </resources>

View File

@@ -54,6 +54,7 @@
<string name="menu_show_changelog">Tampilkan catatan perubahan</string> <string name="menu_show_changelog">Tampilkan catatan perubahan</string>
<string name="menu_ab_perf_mode">Prioritaskan proses pembaruan</string> <string name="menu_ab_perf_mode">Prioritaskan proses pembaruan</string>
<string name="menu_update_recovery">Perbarui Recovery</string> <string name="menu_update_recovery">Perbarui Recovery</string>
<string name="toast_forced_update_recovery">Tidak mungkin untuk menonaktifkan pembaruan Lineage Recovery di perangkat ini.</string>
<string name="snack_updates_found">Pembaruan baru ditemukan</string> <string name="snack_updates_found">Pembaruan baru ditemukan</string>
<string name="snack_no_updates_found">Tidak ada pembaruan baru ditemukan</string> <string name="snack_no_updates_found">Tidak ada pembaruan baru ditemukan</string>
<string name="snack_updates_check_failed">Pemeriksaan pembaruan gagal. Silakan periksa koneksi Internet Anda dan coba lagi nanti.</string> <string name="snack_updates_check_failed">Pemeriksaan pembaruan gagal. Silakan periksa koneksi Internet Anda dan coba lagi nanti.</string>
@@ -66,8 +67,8 @@
<string name="header_last_updates_check">Terakhir diperiksa: <xliff:g id="date" example="1 January 1970">%1$s </xliff:g> (<xliff:g id="time" example="01:23">%2$s </xliff:g>)</string> <string name="header_last_updates_check">Terakhir diperiksa: <xliff:g id="date" example="1 January 1970">%1$s </xliff:g> (<xliff:g id="time" example="01:23">%2$s </xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> dari <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> dari <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> dari <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="duration" example="3 minutes">%3$s</xliff:g> lagi) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> dari <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Memverifikasi pembaruan</string> <string name="list_verifying_update">Memverifikasi pembaruan</string>
<string name="list_no_updates">Pembaruan tidak ditemukan. Untuk memeriksa pembaruan secara manual, gunakan tombol Segarkan.</string> <string name="list_no_updates">Pembaruan tidak ditemukan. Untuk memeriksa pembaruan secara manual, gunakan tombol Segarkan.</string>
<string name="action_download">Unduh</string> <string name="action_download">Unduh</string>
@@ -80,8 +81,8 @@
<string name="confirm_delete_dialog_title">Hapus berkas</string> <string name="confirm_delete_dialog_title">Hapus berkas</string>
<string name="confirm_delete_dialog_message">Hapus berkas pembaruan yang terpilih?</string> <string name="confirm_delete_dialog_message">Hapus berkas pembaruan yang terpilih?</string>
<string name="apply_update_dialog_title">Terapkan pembaruan</string> <string name="apply_update_dialog_title">Terapkan pembaruan</string>
<string name="apply_update_dialog_message">Anda akan meningkatkan ke <xliff:g id="update_name">%1$s</xliff:g>.\n\nJika Anda menekan <xliff:g id="ok">%2$s</xliff:g>, perangkat akan mulai ulang sendiri dalam mode recovery untuk memasang pembaruan.\n\nPerhatian: Fitur ini memerlukan Recovery yang kompatibel atau pembaruan perlu dipasang secara manual.</string> <string name="apply_update_dialog_message">Anda akan memasang <xliff:g id="update_name">%1$s</xliff:g>.\n\nJika Anda menekan <xliff:g id="ok">%2$s</xliff:g>, perangkat akan mulai ulang sendiri dalam mode recovery untuk memasang pembaruan.\n\nPerhatian: Fitur ini memerlukan Recovery yang kompatibel atau pembaruan perlu dipasang secara manual.</string>
<string name="apply_update_dialog_message_ab">Anda akan meningkatkan ke <xliff:g id="update_name">%1$s</xliff:g>.\n\nJika Anda menekan <xliff:g id="ok">%2$s</xliff:g>, perangkat akan mulai memasang di latar belakang.\n\nSetelah selesai, Anda akan diminta untuk memulai ulang perangkat.</string> <string name="apply_update_dialog_message_ab">Anda akan memasang <xliff:g id="update_name">%1$s</xliff:g>.\n\nJika Anda menekan <xliff:g id="ok">%2$s</xliff:g>, perangkat akan mulai memasang di latar belakang.\n\nSetelah selesai, Anda akan diminta untuk memulai ulang perangkat.</string>
<string name="cancel_installation_dialog_message">Batalkan pemasangan?</string> <string name="cancel_installation_dialog_message">Batalkan pemasangan?</string>
<string name="label_download_url">URL Unduh</string> <string name="label_download_url">URL Unduh</string>
<string name="toast_download_url_copied">URL disalin</string> <string name="toast_download_url_copied">URL disalin</string>
@@ -89,6 +90,7 @@
<string name="notification_export_success">Pembaruan diekspor</string> <string name="notification_export_success">Pembaruan diekspor</string>
<string name="notification_export_fail">Kesalahan saat mengekspor</string> <string name="notification_export_fail">Kesalahan saat mengekspor</string>
<string name="toast_already_exporting">Sudah mengekspor pembaruan</string> <string name="toast_already_exporting">Sudah mengekspor pembaruan</string>
<string name="toast_export_started">Ekspor dimulai</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="other"><xliff:g id="count">%d</xliff:g> detik tersisa</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> detik tersisa</item>
</plurals> </plurals>
@@ -108,4 +110,7 @@
<string name="new_updates_channel_title">Pembaruan baru</string> <string name="new_updates_channel_title">Pembaruan baru</string>
<string name="ongoing_channel_title">Unduhan sedang berlangsung</string> <string name="ongoing_channel_title">Unduhan sedang berlangsung</string>
<string name="update_failed_channel_title">Pembaruan gagal</string> <string name="update_failed_channel_title">Pembaruan gagal</string>
<string name="info_dialog_title">Tahukah Anda?</string>
<string name="info_dialog_message">Pembaruan LineageOS adalah paket instalasi lengkap. Itu berarti Anda selalu dapat menginstal hanya pembaruan terbaru, bahkan jika Anda melewatkan beberapa di antaranya!</string>
<string name="info_dialog_ok">Terima kasih atas infonya!</string>
</resources> </resources>

118
res/values-is/strings.xml Normal file
View File

@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2017-2020 The LineageOS Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Uppfærslustýring</string>
<string name="display_name">Uppfærslustýring</string>
<string name="verification_failed_notification">Sannvottun mistókst</string>
<string name="verifying_download_notification">Yfirfer uppfærslu</string>
<string name="downloading_notification">Sæki gögn</string>
<string name="download_paused_notification">Niðurhal í bið</string>
<string name="download_paused_error_notification">Villa við að sækja gögn</string>
<string name="download_completed_notification">Niðurhali lokið</string>
<string name="download_starting_notification">Byrja niðurhal</string>
<string name="update_failed_notification">Uppfærsla mistókst</string>
<string name="installation_suspended_notification">Uppsetning sett í bið</string>
<string name="new_updates_found_title">Nýjar uppfærslur</string>
<string name="text_download_speed">%1$s, %2$s/s</string>
<string name="pause_button">Í bið</string>
<string name="resume_button">Halda áfram</string>
<string name="suspend_button">Setja í bið</string>
<string name="installing_update">Set inn uppfærslupakka</string>
<string name="installing_update_error">Villa í uppsetningu</string>
<string name="installing_update_finished">Uppfærsla uppsett</string>
<string name="finalizing_package">Lýk uppsetningu á pakka</string>
<string name="preparing_ota_first_boot">Undirbý fyrstu ræsingu</string>
<string name="dialog_prepare_zip_message">Undirbúningur forstillinga uppfærslu</string>
<string name="dialog_battery_low_title">Lítil hleðsla á rafhlöðu</string>
<string name="dialog_battery_low_message_pct">Hleðslan á rafhlöðunni er of lítil, þú þarft a.m.k. <xliff:g id="percent_discharging">%1$d</xliff:g>%% hleðslu til að halda áfram, <xliff:g id="percent_charging">%2$d</xliff:g>%% ef í hleðslu.</string>
<string name="reboot">Endurræsa</string>
<string name="menu_refresh">Endurlesa</string>
<string name="menu_preferences">Kjörstillingar</string>
<string name="menu_auto_updates_check">Sjálfvirk athugun með uppfærslur</string>
<string name="menu_auto_updates_check_interval_daily">Einu sinni á dag</string>
<string name="menu_auto_updates_check_interval_weekly">Einu sinni í viku</string>
<string name="menu_auto_updates_check_interval_monthly">Einu sinni í mánuði</string>
<string name="menu_auto_updates_check_interval_never">Aldrei</string>
<string name="menu_auto_delete_updates">Eyða uppfærslupökkum þegar þeir hafa verið settir inn</string>
<string name="menu_delete_update">Eyða</string>
<string name="menu_copy_url">Afrita slóð</string>
<string name="menu_export_update">Flytja út uppfærslu</string>
<string name="menu_show_changelog">Birta breytingaannál</string>
<string name="menu_ab_perf_mode">Setja uppfærsluferli í forgang</string>
<string name="menu_update_recovery">Uppfæra endurheimtingu</string>
<string name="snack_updates_found">Nýjar uppfærslur fundust</string>
<string name="snack_no_updates_found">Engar nýjar uppfærslur fundust</string>
<string name="snack_updates_check_failed">Athugun með uppfærslur mistókst. Skoðaðu internettenginguna og reyndu aftur síðar.</string>
<string name="snack_download_failed">Niðurhal mistókst. Athugaðu internettenginguna og reyndu aftur síðar.</string>
<string name="snack_download_verification_failed">Sannvottun uppfærslu mistókst.</string>
<string name="snack_download_verified">Niðurhali er lokið.</string>
<string name="snack_update_not_installable">Þessa uppfærslu er ekki gægt að setja upp á þessari byggingarútgáfu.</string>
<string name="header_title_text">LineageOS\n%1$s</string>
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
<string name="header_last_updates_check">Síðast kannað: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Yfirfer uppfærslu</string>
<string name="list_no_updates">Engar nýjar uppfærslur fundust. Til að athuga handvirkt með nýjar uppfærslur, notaðu Endurlesa-hnappinn.</string>
<string name="action_download">Sækja</string>
<string name="action_pause">Í bið</string>
<string name="action_resume">Halda áfram</string>
<string name="action_install">Setja upp</string>
<string name="action_info">Upplýsingar</string>
<string name="action_delete">Eyða</string>
<string name="action_cancel">Hætta við</string>
<string name="confirm_delete_dialog_title">Eyða skrá</string>
<string name="confirm_delete_dialog_message">Eyða valdri uppfærsluskrá?</string>
<string name="apply_update_dialog_title">Virkja uppfærslu</string>
<string name="apply_update_dialog_message">Þú ert í þann mund að setja upp <xliff:g id="update_name">%1$s</xliff:g>.\n\nEf þú ýtir á <xliff:g id="ok">%2$s</xliff:g>, mun tækið endurræsa sig í endurheimtuham til að setja inn uppfærsluna.\n\nAthugaðu: Þessi eiginleiki krefst þess að til staðar séu samhæfð endurheimtugögn því annars þarf að setja uppfærslurnar inn handvirkt.</string>
<string name="apply_update_dialog_message_ab">Þú ert í þann mund að setja upp <xliff:g id="update_name">%1$s</xliff:g>.\n\nEf þú ýtir á <xliff:g id="ok">%2$s</xliff:g>, mun tækið hefja uppfærsluna í bakgrunnsferli.\n\nÞegar henni er lokið færðu beiðni um að endurræsa.</string>
<string name="cancel_installation_dialog_message">Hætta við uppsetningu?</string>
<string name="label_download_url">Niðurhalsslóð</string>
<string name="toast_download_url_copied">URL-slóð afrituð</string>
<string name="dialog_export_title">Flytja út uppfærslu</string>
<string name="notification_export_success">Uppfærsla flutt út</string>
<string name="notification_export_fail">Villa við útflutning</string>
<string name="toast_already_exporting">Þegar að flytja út uppfærslu</string>
<string name="toast_export_started">Útflutningur hafinn</string>
<plurals name="eta_seconds">
<item quantity="one">1 sekúnda eftir</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> sekúndur eftir</item>
</plurals>
<plurals name="eta_minutes">
<item quantity="one">1 mínúta eftir</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> mínútur eftir</item>
</plurals>
<plurals name="eta_hours">
<item quantity="one">1 klukkustund eftir</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> klukkustundir eftir</item>
</plurals>
<string name="update_on_mobile_data_title">Aðvörun</string>
<string name="update_on_mobile_data_message">Þú ert í þann mund að uppfæra pakka með því að nota farsímagagnatengingu og gæti það valdið mikilli gagnanotkun. Viltu halda áfram?</string>
<string name="checkbox_mobile_data_warning">Ekki sýna aftur</string>
<string name="menu_mobile_data_warning">Aðvörun vegna farsímagagna</string>
<string name="blocked_update_dialog_title">Lokað á uppfærslu</string>
<string name="blocked_update_dialog_message">Þessa uppfærslu er ekki hægt að setja inn með uppfærsluforritinu. Skoðaðu <xliff:g id="info_url">%1$s</xliff:g> til að fá frekari upplýsingar.</string>
<string name="export_channel_title">Klárun útflutnings</string>
<string name="new_updates_channel_title">Nýjar uppfærslur</string>
<string name="ongoing_channel_title">Niðurhal í gangi</string>
<string name="update_failed_channel_title">Uppfærsla mistókst</string>
<string name="info_dialog_title">Vissir þú?</string>
<string name="info_dialog_message">Uppfærslur á LineageOS eru alltaf heilir uppsetningapakkar. Það þýðir að þú getur alltaf sett einungis upp nýjustu uppfærsluna, jafnvel þótt þú hafir sleppt einhverjum uppfærslum í millitíðinni!</string>
<string name="info_dialog_ok">Takk fyrir upplýsingarnar!</string>
</resources>

View File

@@ -18,7 +18,7 @@
<string name="app_name">Aggiornamenti</string> <string name="app_name">Aggiornamenti</string>
<string name="display_name">Aggiornamenti</string> <string name="display_name">Aggiornamenti</string>
<string name="verification_failed_notification">Verifica fallita</string> <string name="verification_failed_notification">Verifica fallita</string>
<string name="verifying_download_notification">Verifica aggiornamenti</string> <string name="verifying_download_notification">Verifica dell\'aggiornamento</string>
<string name="downloading_notification">Download in corso</string> <string name="downloading_notification">Download in corso</string>
<string name="download_paused_notification">Download in pausa</string> <string name="download_paused_notification">Download in pausa</string>
<string name="download_paused_error_notification">Errore durante il download</string> <string name="download_paused_error_notification">Errore durante il download</string>
@@ -31,12 +31,12 @@
<string name="pause_button">Pausa</string> <string name="pause_button">Pausa</string>
<string name="resume_button">Riprendi</string> <string name="resume_button">Riprendi</string>
<string name="suspend_button">Sospendi</string> <string name="suspend_button">Sospendi</string>
<string name="installing_update">Installazione del pacchetto aggiornamento</string> <string name="installing_update">Installazione del pacchetto d\'aggiornamento</string>
<string name="installing_update_error">Errore d\'installazione</string> <string name="installing_update_error">Errore d\'installazione</string>
<string name="installing_update_finished">Aggiornamento installato</string> <string name="installing_update_finished">Aggiornamento installato</string>
<string name="finalizing_package">Finalizzalizzazione del pachetto d\'installazione in corso</string> <string name="finalizing_package">Finalizzazione dell\'installazione del pacchetto</string>
<string name="preparing_ota_first_boot">Preparazione per il primo avvio</string> <string name="preparing_ota_first_boot">Preparazione per il primo avvio</string>
<string name="dialog_prepare_zip_message">Preparazione aggiornamento preliminare</string> <string name="dialog_prepare_zip_message">Preparazione preliminare dell\'aggiornamento</string>
<string name="dialog_battery_low_title">Batteria scarica</string> <string name="dialog_battery_low_title">Batteria scarica</string>
<string name="dialog_battery_low_message_pct">Il livello della batteria è troppo basso, è necessario almeno il <xliff:g id="percent_discharging">%1$d</xliff:g>%% di batteria per continuare, oppure il <xliff:g id="percent_charging">%2$d</xliff:g>%% se il dispositivo è in carica.</string> <string name="dialog_battery_low_message_pct">Il livello della batteria è troppo basso, è necessario almeno il <xliff:g id="percent_discharging">%1$d</xliff:g>%% di batteria per continuare, oppure il <xliff:g id="percent_charging">%2$d</xliff:g>%% se il dispositivo è in carica.</string>
<string name="reboot">Riavvia</string> <string name="reboot">Riavvia</string>
@@ -55,7 +55,7 @@
<string name="menu_ab_perf_mode">Agg. con priorità</string> <string name="menu_ab_perf_mode">Agg. con priorità</string>
<string name="menu_update_recovery">Aggiornamento recovery</string> <string name="menu_update_recovery">Aggiornamento recovery</string>
<string name="toast_forced_update_recovery">Impossibile disabilitare l\'aggiornamento di Lineage Recovery su questo dispositivo</string> <string name="toast_forced_update_recovery">Impossibile disabilitare l\'aggiornamento di Lineage Recovery su questo dispositivo</string>
<string name="snack_updates_found">Nessun aggiornamento trovato</string> <string name="snack_updates_found">Aggiornamenti trovati</string>
<string name="snack_no_updates_found">Nessun nuovo aggiornamento trovato</string> <string name="snack_no_updates_found">Nessun nuovo aggiornamento trovato</string>
<string name="snack_updates_check_failed">La verifica di aggiornamenti è fallita. Controlla la connessione ad internet e riprova più tardi.</string> <string name="snack_updates_check_failed">La verifica di aggiornamenti è fallita. Controlla la connessione ad internet e riprova più tardi.</string>
<string name="snack_download_failed">Il download dell\'aggiornamento è fallito. Controlla la connessione ad internet e riprova più tardi.</string> <string name="snack_download_failed">Il download dell\'aggiornamento è fallito. Controlla la connessione ad internet e riprova più tardi.</string>
@@ -67,11 +67,11 @@
<string name="header_last_updates_check">Ultima verifica: <xliff:g id="date" example="1 Gennaio 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Ultima verifica: <xliff:g id="date" example="1 Gennaio 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="Luglio 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="Luglio 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> di <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Verifica aggiornamento</string> <string name="list_verifying_update">Verifica aggiornamento</string>
<string name="list_no_updates">Nessun nuovo aggiornamento trovato. Per controllare manualmente nuovi aggiornamenti, tocca il pulsante Aggiorna.</string> <string name="list_no_updates">Nessun nuovo aggiornamento trovato. Per controllare manualmente nuovi aggiornamenti, tocca il pulsante Aggiorna.</string>
<string name="action_download">Download</string> <string name="action_download">Scarica</string>
<string name="action_pause">Pausa</string> <string name="action_pause">Pausa</string>
<string name="action_resume">Riprendi</string> <string name="action_resume">Riprendi</string>
<string name="action_install">Installa</string> <string name="action_install">Installa</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Elimina file</string> <string name="confirm_delete_dialog_title">Elimina file</string>
<string name="confirm_delete_dialog_message">Eliminare il file di aggiornamento selezionato?</string> <string name="confirm_delete_dialog_message">Eliminare il file di aggiornamento selezionato?</string>
<string name="apply_update_dialog_title">Applica aggiornamento</string> <string name="apply_update_dialog_title">Applica aggiornamento</string>
<string name="apply_update_dialog_message">Si sta per aggiornare a <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe si preme <xliff:g id="ok">%2$s</xliff:g>, il dispositivo verrà riavviato in modalità recovery per installare l\'aggiornamento automaticamente.\n\nNota: Questa funzione richiede una recovery compatibile, in caso contrario si dovrà procedere all\'installazione manualmente.</string> <string name="apply_update_dialog_message">Stai per installare <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe premi <xliff:g id="ok">%2$s</xliff:g>, il dispositivo verrà riavviato in modalità recovery per installare l\'aggiornamento automaticamente.\n\nNota: questa funzione richiede una recovery compatibile, in caso contrario si dovrà procedere all\'installazione manualmente.</string>
<string name="apply_update_dialog_message_ab">Si sta per aggiornare a <xliff:g id="update_name">%1$s</xliff:g>.\n\nPremendo <xliff:g id="ok">%2$s</xliff:g>, il dispositivo inizierà l\'installazione in background.\n\nUna volta completato verrà richiesto di riavviare il dispositivo.</string> <string name="apply_update_dialog_message_ab">Stai per installare <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe premi <xliff:g id="ok">%2$s</xliff:g>, il dispositivo inizierà l\'installazione in background.\n\nUna volta completato, ti verrà richiesto di riavviare il dispositivo.</string>
<string name="cancel_installation_dialog_message">Annullare l\'installazione?</string> <string name="cancel_installation_dialog_message">Annullare l\'installazione?</string>
<string name="label_download_url">Download URL</string> <string name="label_download_url">Download URL</string>
<string name="toast_download_url_copied">URL copiato</string> <string name="toast_download_url_copied">URL copiato</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Aggiornamento esportato</string> <string name="notification_export_success">Aggiornamento esportato</string>
<string name="notification_export_fail">Errore esportazione</string> <string name="notification_export_fail">Errore esportazione</string>
<string name="toast_already_exporting">Esportazione aggiornamento già in corso</string> <string name="toast_already_exporting">Esportazione aggiornamento già in corso</string>
<string name="toast_export_started">Esportazione avviata</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 secondo rimanente</item> <item quantity="one">1 secondo rimanente</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> secondi rimanenti</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> secondi rimanenti</item>
@@ -107,9 +108,12 @@
<string name="checkbox_mobile_data_warning">Non mostrare di nuovo</string> <string name="checkbox_mobile_data_warning">Non mostrare di nuovo</string>
<string name="menu_mobile_data_warning">Avviso utilizzo dati mobili</string> <string name="menu_mobile_data_warning">Avviso utilizzo dati mobili</string>
<string name="blocked_update_dialog_title">Aggiornamento bloccato</string> <string name="blocked_update_dialog_title">Aggiornamento bloccato</string>
<string name="blocked_update_dialog_message">Questo aggiornamento non può essere installato usando l\'app updater. Si prega di leggere <xliff:g id="info_url">%1$s</xliff:g> per ulteriori informazioni.</string> <string name="blocked_update_dialog_message">Questo aggiornamento non può essere installato usando l\'app Aggiornamenti. Si prega di leggere <xliff:g id="info_url">%1$s</xliff:g> per ulteriori informazioni.</string>
<string name="export_channel_title">Completamento esportazione</string> <string name="export_channel_title">Completamento esportazione</string>
<string name="new_updates_channel_title">Nuovi aggiornamenti</string> <string name="new_updates_channel_title">Nuovi aggiornamenti</string>
<string name="ongoing_channel_title">Download in corso</string> <string name="ongoing_channel_title">Download in corso</string>
<string name="update_failed_channel_title">Aggiornamento fallito</string> <string name="update_failed_channel_title">Aggiornamento fallito</string>
<string name="info_dialog_title">Lo sapevi?</string>
<string name="info_dialog_message">Gli aggiornamenti di LineageOS sono pacchetti d\'installazione completi. Questo significa che puoi sempre installare solo l\'ultimo aggiornamento, anche se ne hai saltati alcuni in precedenza!</string>
<string name="info_dialog_ok">Grazie per l\'informazione!</string>
</resources> </resources>

View File

@@ -59,8 +59,6 @@
<string name="header_last_updates_check">בדיקה אחרונה: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">בדיקה אחרונה: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> מתוך <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> מתוך <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">מאמת עדכון</string> <string name="list_verifying_update">מאמת עדכון</string>
<string name="list_no_updates">לא נמצאו עדכונים חדשים. בכדי לבדוק אם יש עדכונים חדשים, לחץ על רענון.</string> <string name="list_no_updates">לא נמצאו עדכונים חדשים. בכדי לבדוק אם יש עדכונים חדשים, לחץ על רענון.</string>
<string name="action_download">הורד</string> <string name="action_download">הורד</string>
@@ -73,8 +71,6 @@
<string name="confirm_delete_dialog_title">מחק קובץ</string> <string name="confirm_delete_dialog_title">מחק קובץ</string>
<string name="confirm_delete_dialog_message">למחוק את קבצי העדכון שנבחרו?</string> <string name="confirm_delete_dialog_message">למחוק את קבצי העדכון שנבחרו?</string>
<string name="apply_update_dialog_title">החל עדכון</string> <string name="apply_update_dialog_title">החל עדכון</string>
<string name="apply_update_dialog_message">אתה עומד לשדרג אל <xliff:g id="update_name">%1$s</xliff:g>.\n\nאם תבחר <xliff:g id="ok">%2$s</xliff:g>, המכשיר יופעל מחדש למצב שחזור (Recovery) להתקנת העדכון.\n\nשים לב: תכונה זו דורשת ריקוברי תואם או שהעדכון לא יותקן אוטומטית.</string>
<string name="apply_update_dialog_message_ab">אתה עומד לעדכן אל <xliff:g id="update_name">%1$s</xliff:g>.\n\nאם תלחץ על <xliff:g id="ok">%2$s</xliff:g>, המכשיר יתחיל בהתקנה ברקע.\n\nלאחר שההתקנה תסתיים, תתבקש להפעיל את המכשיר מחדש.</string>
<string name="cancel_installation_dialog_message">לבטל את ההתקנה?</string> <string name="cancel_installation_dialog_message">לבטל את ההתקנה?</string>
<string name="label_download_url">כתובת ההורדה</string> <string name="label_download_url">כתובת ההורדה</string>
<string name="toast_download_url_copied">הכתובת הועתקה</string> <string name="toast_download_url_copied">הכתובת הועתקה</string>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">最終確認: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">最終確認: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">アップデートを確認</string> <string name="list_verifying_update">アップデートを確認</string>
<string name="list_no_updates">新しい更新はありません。新しい更新を手動で確認するには、更新ボタンを押してください。</string> <string name="list_no_updates">新しい更新はありません。新しい更新を手動で確認するには、更新ボタンを押してください。</string>
<string name="action_download">ダウンロード</string> <string name="action_download">ダウンロード</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">ファイルを削除</string> <string name="confirm_delete_dialog_title">ファイルを削除</string>
<string name="confirm_delete_dialog_message">選択したアップデートファイルを削除しますか?</string> <string name="confirm_delete_dialog_message">選択したアップデートファイルを削除しますか?</string>
<string name="apply_update_dialog_title">アップデートを適用</string> <string name="apply_update_dialog_title">アップデートを適用</string>
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g>にアップデートしようとしています。\n\n<xliff:g id="ok">%2$s</xliff:g>を押すと、アップデートをインストールするために端末をリカバリーモードでに再起動します。\n\n注意: この機能には対応したリカバリーが必要です。なければ手動でインストールする必要があります。</string> <string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> をインストールしようとしています。\n\n<xliff:g id="ok">%2$s</xliff:g>を押すと、アップデートをインストールするために端末をリカバリーモードでに再起動します。\n\n注意: この機能には対応したリカバリーが必要です。なければ手動でインストールする必要があります。</string>
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> にアップデートしようとしています。\n\n<xliff:g id="ok">%2$s</xliff:g>を押すと、バックグラウンドでインストールを開始します。\n\nインストールが完了したら、再起動を促すプロンプトが表示されます。</string> <string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> をインストールしようとしています。\n\n<xliff:g id="ok">%2$s</xliff:g>を押すと、バックグラウンドでインストールを開始します。\n\nインストールが完了したら、再起動を促すプロンプトが表示されます。</string>
<string name="cancel_installation_dialog_message">インストールをキャンセルしますか?</string> <string name="cancel_installation_dialog_message">インストールをキャンセルしますか?</string>
<string name="label_download_url">ダウンロード URL</string> <string name="label_download_url">ダウンロード URL</string>
<string name="toast_download_url_copied">URL をコピーしました</string> <string name="toast_download_url_copied">URL をコピーしました</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">アップデートのエクスポート</string> <string name="notification_export_success">アップデートのエクスポート</string>
<string name="notification_export_fail">エラー出力</string> <string name="notification_export_fail">エラー出力</string>
<string name="toast_already_exporting">すでにアップデートをエクスポートしています。</string> <string name="toast_already_exporting">すでにアップデートをエクスポートしています。</string>
<string name="toast_export_started">エクスポートを開始しました</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="other">残り<xliff:g id="count">%d</xliff:g></item> <item quantity="other">残り<xliff:g id="count">%d</xliff:g></item>
</plurals> </plurals>
@@ -109,4 +110,7 @@
<string name="new_updates_channel_title">新しいアップデート</string> <string name="new_updates_channel_title">新しいアップデート</string>
<string name="ongoing_channel_title">ダウンロード中</string> <string name="ongoing_channel_title">ダウンロード中</string>
<string name="update_failed_channel_title">更新に失敗しました</string> <string name="update_failed_channel_title">更新に失敗しました</string>
<string name="info_dialog_title">ご存知ですか?</string>
<string name="info_dialog_message">LineageOS のアップデートは完全なインストールパッケージです。つまり、いくつかのアップデートをスキップしても、最新のアップデートのみをインストールするだけで良いのです!</string>
<string name="info_dialog_ok">ありがとうございます!</string>
</resources> </resources>

View File

@@ -17,19 +17,103 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">განმაახლებელი</string> <string name="app_name">განმაახლებელი</string>
<string name="display_name">განმაახლებელი</string> <string name="display_name">განმაახლებელი</string>
<string name="verification_failed_notification">დამოწმება ვერ მოხერხდა</string>
<string name="verifying_download_notification">მიმდინარეობს განახლების დამოწმება</string>
<string name="downloading_notification">ჩამოიტვირთება</string> <string name="downloading_notification">ჩამოიტვირთება</string>
<string name="download_paused_notification">ჩამოტვირთვა შეჩერებულია</string>
<string name="download_paused_error_notification">ჩამოტვირთვის შეცდომა</string>
<string name="download_completed_notification">ჩამოტვირთვა დასრულებულია</string>
<string name="download_starting_notification">ჩამოტვირთვა იწყება</string>
<string name="update_failed_notification">განახლება ვერ მოხერხდა</string>
<string name="installation_suspended_notification">დაყენება გადაიდო</string> <string name="installation_suspended_notification">დაყენება გადაიდო</string>
<string name="new_updates_found_title">ბოლო განახლებები</string> <string name="new_updates_found_title">ბოლო განახლებები</string>
<string name="text_download_speed">%1$s, %2$s/წმ</string>
<string name="pause_button">შეჩერება</string> <string name="pause_button">შეჩერება</string>
<string name="resume_button">გაგრძელება</string> <string name="resume_button">გაგრძელება</string>
<string name="suspend_button">გადადება</string> <string name="suspend_button">გადადება</string>
<string name="installing_update">ყენდება განახლების კრებული</string>
<string name="installing_update_error">შეცდომა დაყენებისას</string>
<string name="installing_update_finished">განახლება დაყენებულია</string>
<string name="finalizing_package">სრულდება კრებულის ჩადგმა</string>
<string name="preparing_ota_first_boot">მზადდება პირველი ჩატვირთვისთვის</string>
<string name="dialog_prepare_zip_message">წინასწარი მომზადება განახლებისთვის</string>
<string name="dialog_battery_low_title">ბატარეა ჯდება</string> <string name="dialog_battery_low_title">ბატარეა ჯდება</string>
<string name="dialog_battery_low_message_pct">მუხტის დონე მეტად მცირეა, საჭიროა დამუხტული იყოს არანაკლებ <xliff:g id="percent_discharging">%1$d</xliff:g>%% ან <xliff:g id="percent_charging">%2$d</xliff:g>%% ან შეერთდეს სატენზე.</string>
<string name="reboot">გადატვირთვა</string>
<string name="menu_refresh">განახლება</string>
<string name="menu_preferences">პარამეტრები</string>
<string name="menu_auto_updates_check">თვითგანახლების შემოწმება</string>
<string name="menu_auto_updates_check_interval_daily">დღეში ერთხელ</string> <string name="menu_auto_updates_check_interval_daily">დღეში ერთხელ</string>
<string name="menu_auto_updates_check_interval_weekly">კვირაში ერთხელ</string> <string name="menu_auto_updates_check_interval_weekly">კვირაში ერთხელ</string>
<string name="menu_auto_updates_check_interval_monthly">თვეში ერთხელ</string> <string name="menu_auto_updates_check_interval_monthly">თვეში ერთხელ</string>
<string name="menu_auto_updates_check_interval_never">არასდროს</string> <string name="menu_auto_updates_check_interval_never">არასდროს</string>
<string name="menu_auto_delete_updates">განახლებების წაშლა დაყენების შემდეგ</string>
<string name="menu_delete_update">წაშლა</string>
<string name="menu_copy_url">ბმულის ასლი</string>
<string name="menu_export_update">განახლების გატანა</string>
<string name="menu_show_changelog">ცვლილებების ჩვენება</string>
<string name="menu_ab_perf_mode">განახლებისთვის უპირატესობის მინიჭება</string>
<string name="menu_update_recovery">აღმდგენის განახლება</string> <string name="menu_update_recovery">აღმდგენის განახლება</string>
<string name="toast_forced_update_recovery">შეუძლებელია Lineage-აღმდგენის განახლებების გათიშვა, ამ მოწყობილობაზე.</string> <string name="toast_forced_update_recovery">ვერ გაითიშება Lineage-აღმდგენის განახლებები ამ მოწყობილობაზე.</string>
<string name="apply_update_dialog_message">თქვენ აპირებთ განაახლოთ <xliff:g id="update_name">%1$s</xliff:g> ვერსიაზე.\n\nთუ დააჭერთ ღილაკზე <xliff:g id="ok">%2$s</xliff:g>, მოწყობილობა ხელახლა ჩაირთვება აღმდგენ რეჟიმში განახლების დასაყენებლად.\n\nშენიშვნა: საჭიროებს თავსებად აღმდგენ გარსს, თუ არადა განახლებები ხელით იქნება დასაყენებელი.</string> <string name="snack_updates_found">ნაპოვნია განახლებები</string>
<string name="snack_no_updates_found">განახლებები ვერ მოიძებნა</string>
<string name="snack_updates_check_failed">განახლებებზე შემოწმება ვერ მოხერხდა. გთხოვთ, გადაამოწმოთ თქვენი ინტერნეტკავშირი და მოგვიანებით სცადოთ ხელახლა.</string>
<string name="snack_download_failed">ჩამოტვირთვა ვერ მოხერხდა. გთხოვთ გადაამოწმოთ თქვენი ინტერნეტკავშირი და სცადოთ ხელახლა.</string>
<string name="snack_download_verification_failed">განახლების დამოწმება ვერ მოხერხდა.</string>
<string name="snack_download_verified">ჩამოტვირთვა დასრულებულია.</string>
<string name="snack_update_not_installable">განახლების ვერ დაყენდება მიმდინარე ანაწყობზე.</string>
<string name="header_title_text">LineageOS\n%1$s</string>
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
<string name="header_last_updates_check">ბოლო შემოწმება: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g>, სულ <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g>, სულ <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">განახლება მოწმდება</string>
<string name="list_no_updates">განახლებები ვერ მოიძებნა. განახლებებზე ხელით შესამოწმებლად, გამოიყენეთ განახლების ღილაკი.</string>
<string name="action_download">ჩამოტვირთვა</string>
<string name="action_pause">შეჩერება</string>
<string name="action_resume">გაგრძელება</string>
<string name="action_install">დაყენება</string>
<string name="action_info">მონაცემები</string>
<string name="action_delete">წაშლა</string>
<string name="action_cancel">გაუქმება</string>
<string name="confirm_delete_dialog_title">ფაილის წაშლა</string>
<string name="confirm_delete_dialog_message">წაიშალოს განახლების შერჩეული ფაილი?</string>
<string name="apply_update_dialog_title">განახლების ასახვა</string>
<string name="apply_update_dialog_message">აპირებთ, ჩააყენოთ <xliff:g id="update_name">%1$s</xliff:g>.\n\nთუ დააჭერთ ღილაკზე <xliff:g id="ok">%2$s</xliff:g>, მოწყობილობა ხელახლა ჩაირთვება აღმდგენ რეჟიმში, განახლების დასაყენებლად.\n\nშენიშვნა: საჭიროებს თავსებად აღმდგენ გარსს, თუ არადა განახლებები ხელით იქნება დასაყენებელი.</string>
<string name="apply_update_dialog_message_ab">აპირებთ, ჩააყენოთ <xliff:g id="update_name">%1$s</xliff:g>.\n\nთუ დააჭერთ ღილაკზე <xliff:g id="ok">%2$s</xliff:g>, მოწყობილობა დაიწყებს დაყენებას ფონურად.\n\nდასრულებისას კი მოგთხოვთ გადატვირთვას.</string>
<string name="cancel_installation_dialog_message">გაუქმდეს დაყენება?</string>
<string name="label_download_url">ჩამოტვირთვის ბმული</string>
<string name="toast_download_url_copied">ბმულის ასლი აღებულია</string>
<string name="dialog_export_title">განახლება ცალკე შეინახება</string>
<string name="notification_export_success">განახლება გატანილია ფაილში</string>
<string name="notification_export_fail">შეცდომა გატანისას</string>
<string name="toast_already_exporting">გატანა უკვე მიმდინარეობს</string>
<string name="toast_export_started">გატანა დაწყებულია</string>
<plurals name="eta_seconds">
<item quantity="one">დარჩენილია 1 წამი</item>
<item quantity="other">დარჩენილია <xliff:g id="count">%d</xliff:g> წამი</item>
</plurals>
<plurals name="eta_minutes">
<item quantity="one">დარჩენილია 1 წუთი</item>
<item quantity="other">დარჩენილია <xliff:g id="count">%d</xliff:g> წუთი</item>
</plurals>
<plurals name="eta_hours">
<item quantity="one">დარჩენილია 1 საათი</item>
<item quantity="other">დარჩენილია <xliff:g id="count">%d</xliff:g> საათი</item>
</plurals>
<string name="update_on_mobile_data_title">გაფრთხილება</string>
<string name="update_on_mobile_data_message">აპირებთ ჩამოტვირთოთ განახლება მობილური ინტერნეტით, რასაც შეიძლება მოჰყვეს დიდი ხარჯი. ნამდვილად გსურთ, განაგრძოთ?</string>
<string name="checkbox_mobile_data_warning">მომავალში ჩვენების გარეშე</string>
<string name="menu_mobile_data_warning">მობილური ინტერნეტის გაფრთხილება</string>
<string name="blocked_update_dialog_title">განახლება შეიზღუდა</string>
<string name="blocked_update_dialog_message">განახლების დაყენება ვერ ხერხდება გამნახლებელი აპით. ვრცლად, გთხოვთ, იხილოთ <xliff:g id="info_url">%1$s</xliff:g>.</string>
<string name="export_channel_title">გადატანა დასრულებულია</string>
<string name="new_updates_channel_title">ბოლო განახლებები</string> <string name="new_updates_channel_title">ბოლო განახლებები</string>
<string name="ongoing_channel_title">მიმდინარე ჩამოტვირთვები</string>
<string name="update_failed_channel_title">განახლება ვერ მოხერხდა</string>
<string name="info_dialog_title">იცოდით?</string>
<string name="info_dialog_message">LineageOS-ის განახლებები სრულ კრებულებს წარმოადგენს. ეს კი ნიშნავს, რომ ყოველთვის შეგიძლიათ ჩააყენოთ ბოლო განახლება, ზოგიერთის გამოტოვების შემთხვევაშიც. </string>
<string name="info_dialog_ok">გმადლობთ, რომ მაცნობეთ!</string>
</resources> </resources>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2017-2020 The LineageOS Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">Asefrak n ulqem</string>
<string name="display_name">Asefrak n ulqem</string>
<string name="verification_failed_notification">Icceḍ usenqed</string>
<string name="verifying_download_notification">Asenqed n welqem</string>
<string name="downloading_notification">Asider</string>
<string name="download_paused_error_notification">Tuccḍa n usider</string>
<string name="download_completed_notification">Asider yemmed</string>
<string name="download_starting_notification">Asenker n usider</string>
<string name="installation_suspended_notification">Ittwafsex usebdded</string>
<string name="new_updates_found_title">Ileqman imaynuten</string>
<string name="text_download_speed">%1$s, %2$s/s</string>
<string name="pause_button">Steɛfu</string>
<string name="resume_button">Kemmel</string>
<string name="suspend_button">Ittwafsex</string>
<string name="installing_update">Asebded n ukemmus n lqem</string>
<string name="installing_update_error">Tuccḍa g usebded</string>
<string name="installing_update_finished">Lqem ibded</string>
<string name="preparing_ota_first_boot">Aheggi i tnekra tamezwarut</string>
<string name="dialog_prepare_zip_message">Aheggi n lqem n unezwer</string>
<string name="dialog_battery_low_title">Aẓru qrib ad-yefak</string>
<string name="reboot">Ales asenker</string>
<string name="menu_refresh">Sismeḍ</string>
<string name="menu_preferences">Tiwelhiwin</string>
<string name="menu_auto_updates_check">A senqed n uleqqem awurman</string>
<string name="menu_auto_updates_check_interval_daily">Tikkelt i wass</string>
<string name="menu_auto_updates_check_interval_weekly">Tikkelt i ddurt</string>
<string name="menu_auto_updates_check_interval_monthly">Tikkelt i waggur</string>
<string name="menu_auto_updates_check_interval_never">Weṛǧin</string>
<string name="menu_auto_delete_updates">Kkes Ileqman ticki isbedden</string>
<string name="menu_delete_update">Kkes</string>
<string name="menu_copy_url">Nɣel URL</string>
<string name="menu_export_update">Sifeḍ lqem</string>
<string name="menu_update_recovery">Leqqem aḥraz</string>
<string name="snack_updates_found">Llan ileqman imaynuten</string>
<string name="snack_no_updates_found">Ulac ileqman imaynuten</string>
<string name="snack_updates_check_failed">Icceḍ usenqed n uleqqem. Txilek senqed tuqqna-k γer internet sakin ɛreḍ tikelt nniḍen ticki.</string>
<string name="snack_download_failed">Icceḍ usider. Txilek senqed tuqqna-k γer internet sakin ɛreḍ tikelt nniḍen ticki.</string>
<string name="snack_download_verification_failed">Icceḍ usenqed n ulqem.</string>
<string name="snack_download_verified">Asider yemmed.</string>
<string name="header_title_text">LineageOS\n%1$s</string>
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
<string name="header_last_updates_check">Asenqed aneggaru: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g>(<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_verifying_update">Asenqed n welqem</string>
<string name="list_no_updates">Ulac ileqman imaynuten. Iwakken ad-tsenqdeḍ ileqman imaynuten s ufus, seqdec taqffalt Sismeḍ.</string>
<string name="action_download">Sider</string>
<string name="action_pause">Steɛfu</string>
<string name="action_resume">Kemmel</string>
<string name="action_install">Sebded</string>
<string name="action_info">Talɣut</string>
<string name="action_delete">Kkes</string>
<string name="action_cancel">Sefsex</string>
<string name="confirm_delete_dialog_title">Kkes afaylu</string>
<string name="confirm_delete_dialog_message">Kkes afaylu n lqem ittwafernen?</string>
<string name="apply_update_dialog_title">Seddu lqem</string>
<string name="label_download_url">Sider URL</string>
<string name="toast_download_url_copied">URL ittwanγel</string>
<string name="dialog_export_title">Asifeḍ n lqem</string>
<string name="notification_export_success">Lqem ittwasifeḍ</string>
<string name="notification_export_fail">Tuccḍa g usifeḍ</string>
<string name="update_on_mobile_data_title">Ɣur-k</string>
<string name="checkbox_mobile_data_warning">Ur tuɣaleḍ ara ad itsekneḍ</string>
<string name="menu_mobile_data_warning">Alɣu n isefka izirazen</string>
<string name="blocked_update_dialog_title">Lqem iwḥel</string>
<string name="blocked_update_dialog_message">A leqqem agi ur izmir ara ad-ibded s usnas n usefrak n-lqem. Ttxil-ek ɣer <xliff:g id="info_url">%1$s</xliff:g> i ugar talɣut.</string>
<string name="new_updates_channel_title">Ileqman imaynuten</string>
</resources>

View File

@@ -15,15 +15,47 @@
limitations under the License. limitations under the License.
--> -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="verification_failed_notification">ಪರಿಶೀಲನೆ ವಿಫಲ</string>
<string name="verifying_download_notification">ನವೀಕರಣ ಪರಿಶೀಲಿಸುತ್ತಿದೆ</string>
<string name="downloading_notification">ಇಳಿಸುತ್ತಿದೆ</string>
<string name="download_paused_notification">ಇಳಿಸುವಿಕೆ ವಿರಾಮ</string>
<string name="download_paused_error_notification">ಇಳಿಸುವಾಗ ದೋಷ</string>
<string name="download_completed_notification">ಇಳಿಸುವಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ</string>
<string name="text_download_speed">%1$s, %2$s/s</string>
<string name="installing_update">ನವೀಕರಣ ಘಂಟನ್ನು ಸ್ಥಾಪಿಸುತ್ತಿದೆ</string>
<string name="installing_update_error">ಸ್ಥಾಪನೆ ದೋಷ</string>
<string name="finalizing_package">ಘಂಟು ಸ್ಥಾಪನೆಯನ್ನು ಕೊನೆಗೊಳಿಸುತ್ತಿದೆ</string>
<string name="dialog_battery_low_title">ಅಲ್ಪ ಮಿಂತಿಣಿ</string> <string name="dialog_battery_low_title">ಅಲ್ಪ ಮಿಂತಿಣಿ</string>
<string name="dialog_battery_low_message_pct">ಮಿಂತಿಣಿ ಮಟ್ಟ ತೀರಾ ಕಡಿಮೆಯಿದೆ. ಮುಂದುವರಿಸಲು ನಿಮಗೆ ಕನಿಷ್ಟ <xliff:g id="percent_discharging">%1$d</xliff:g>%% ಚಾರ್ಜ್ ಅಥವಾ ಚಾರ್ಜಿಂಗ್ನಲ್ಲಿ <xliff:g id="percent_charging">%2$d</xliff:g>%% ಬೇಕು.</string> <string name="dialog_battery_low_message_pct">ಮಿಂತಿಣಿ ಮಟ್ಟ ತೀರಾ ಕಡಿಮೆಯಿದೆ. ಮುಂದುವರಿಸಲು ನಿಮಗೆ ಕನಿಷ್ಟ <xliff:g id="percent_discharging">%1$d</xliff:g>%% ಚಾರ್ಜ್ ಅಥವಾ ಚಾರ್ಜಿಂಗ್ನಲ್ಲಿ <xliff:g id="percent_charging">%2$d</xliff:g>%% ಬೇಕು.</string>
<string name="menu_auto_updates_check">ಸ್ವಯಂ ನವೀಕರಣ ಪರಿಶೀಲನೆ</string>
<string name="menu_auto_updates_check_interval_daily">ದಿನಕ್ಕೊಮ್ಮೆ</string> <string name="menu_auto_updates_check_interval_daily">ದಿನಕ್ಕೊಮ್ಮೆ</string>
<string name="menu_auto_updates_check_interval_weekly">ವಾರಕ್ಕೊಮ್ಮೆ</string> <string name="menu_auto_updates_check_interval_weekly">ವಾರಕ್ಕೊಮ್ಮೆ</string>
<string name="menu_auto_updates_check_interval_monthly">ತಿಂಗಳಿಗೊಮ್ಮೆ</string> <string name="menu_auto_updates_check_interval_monthly">ತಿಂಗಳಿಗೊಮ್ಮೆ</string>
<string name="menu_auto_updates_check_interval_never">ಎಂದಿಗೂ ಬೇಡ</string> <string name="menu_auto_updates_check_interval_never">ಎಂದಿಗೂ ಬೇಡ</string>
<string name="menu_auto_delete_updates">ಸ್ಥಾಪಿಸಿದ ನಂತರ ನವೀಕರಣಗಳನ್ನು ಅಳಿಸು</string>
<string name="menu_delete_update">ಅಳಿಸು</string>
<string name="menu_copy_url">URL ನಕಲಿಸು</string>
<string name="menu_export_update">ನವೀಕರಿಣ ನಿರ್ಯಾತ</string>
<string name="menu_show_changelog">ಬದಲಾವಣೆಗಳನ್ನು ತೋರಿಸು</string> <string name="menu_show_changelog">ಬದಲಾವಣೆಗಳನ್ನು ತೋರಿಸು</string>
<string name="menu_ab_perf_mode">ನವೀಕರಣಕ್ಕೆ ಆದ್ಯತೆ ಕೊಡು</string> <string name="menu_ab_perf_mode">ನವೀಕರಣಕ್ಕೆ ಆದ್ಯತೆ ಕೊಡು</string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> ರಲ್ಲಿ <xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="snack_download_verified">ಇಳಿಸುವಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ.</string>
<string name="header_last_updates_check">ಕೊನೆಯ ಪರಿಶೀಲನೆ: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_verifying_update">ನವೀಕರಣ ಪರಿಶೀಲಿಸುತ್ತಿದೆ</string>
<string name="action_download">ಇಳಿಸು</string>
<string name="action_install">ಸ್ಥಾಪಿಸು</string>
<string name="action_info">ಮಾಹಿತಿ</string>
<string name="action_delete">ಅಳಿಸು</string>
<string name="action_cancel">ರದ್ದು</string>
<string name="confirm_delete_dialog_title">ಕಡತವನ್ನು ಅಳಿಸು</string>
<string name="confirm_delete_dialog_message">ಆಯ್ಕೆಯಾದ ನವೀಕರಣ ಕಡತ ಅಳಿಸುವುದೇ?</string>
<string name="apply_update_dialog_title">ನವೀಕರಣ ಅನ್ವಯಿಸು</string>
<string name="cancel_installation_dialog_message">ಸ್ಥಾಪನೆ ರದ್ದಿಸಲೇ?</string>
<string name="label_download_url">ಇಳಿಸುವ URL</string>
<string name="dialog_export_title">ನವೀಕರಿಣ ನಿರ್ಯಾತವಾಗುತ್ತಿದೆ</string>
<string name="notification_export_fail">ದೋಷ ನಿರ್ಯಾತ</string>
<string name="toast_already_exporting">ಈಗಾಗಲೇ ನವೀಕರಣವನ್ನು ರಫ್ತು ಮಾಡಲಾಗುತ್ತಿದೆ</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">೧ ಕ್ಷಣ ಬಾಕಿ</item> <item quantity="one">೧ ಕ್ಷಣ ಬಾಕಿ</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> ಕ್ಷಣ ಬಾಕಿ</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> ಕ್ಷಣ ಬಾಕಿ</item>
@@ -36,6 +68,9 @@
<item quantity="one">೧ ಗಂಟೆ ಬಾಕಿ</item> <item quantity="one">೧ ಗಂಟೆ ಬಾಕಿ</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> ಗಂಟೆ ಬಾಕಿ</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> ಗಂಟೆ ಬಾಕಿ</item>
</plurals> </plurals>
<string name="update_on_mobile_data_title">ಎಚ್ಚರಿಕೆ</string>
<string name="update_on_mobile_data_message">ನೀವು ಮೊಬೈಲ್ ದತ್ತಾಂಶವನ್ನು ಹೆಚ್ಚು ಬಳಕೆ ಉಂಟುಮಾಡುವ ನವೀಕರಣ ಘಂಟನ್ನು ಇಳಿಸ ಹೊರಟಿರುವಿರಿ. ಮುಂದುವರಿಸುವುದೇ?</string>
<string name="checkbox_mobile_data_warning">ಪುನಃ ತೋರಿಸದಿರು</string>
<string name="export_channel_title">ನಿರ್ಯಾತ ಪೂರ್ಣತೆ</string> <string name="export_channel_title">ನಿರ್ಯಾತ ಪೂರ್ಣತೆ</string>
<string name="ongoing_channel_title">ಪ್ರಗತಿಯಲ್ಲಿರುವ ಕೆಳಭರಿತಗಳು</string> <string name="ongoing_channel_title">ಪ್ರಗತಿಯಲ್ಲಿರುವ ಕೆಳಭರಿತಗಳು</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">마지막 확인: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">마지막 확인: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">업데이트 검증 중</string> <string name="list_verifying_update">업데이트 검증 중</string>
<string name="list_no_updates">새로운 업데이트가 없습니다. 수동으로 새 업데이트를 확인하려면 새로고침 버튼을 누르세요.</string> <string name="list_no_updates">새로운 업데이트가 없습니다. 수동으로 새 업데이트를 확인하려면 새로고침 버튼을 누르세요.</string>
<string name="action_download">다운로드</string> <string name="action_download">다운로드</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">파일 삭제</string> <string name="confirm_delete_dialog_title">파일 삭제</string>
<string name="confirm_delete_dialog_message">선택한 업데이트 파일을 삭제하시겠습니까?</string> <string name="confirm_delete_dialog_message">선택한 업데이트 파일을 삭제하시겠습니까?</string>
<string name="apply_update_dialog_title">업데이트 적용</string> <string name="apply_update_dialog_title">업데이트 적용</string>
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> 버전으로 업그레이드를 시도하려 합니다.\n\n<xliff:g id="ok">%2$s</xliff:g>을 누르면 업데이트를 설치하기 위해 기기가 리커버리 모드로 다시 시작됩니다.\n\n주의: 이 기능은 호환되는 리커버리가 필요하며, 없을 경우 업데이트를 수동으로 설치해야 합니다.</string> <string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> 버전을 설치하려 합니다.\n\n<xliff:g id="ok">%2$s</xliff:g>을 누르면 업데이트를 설치하기 위해 기기가 리커버리 모드로 다시 시작됩니다.\n\n주의: 이 기능은 호환되는 리커버리가 필요하며, 없을 경우 업데이트를 수동으로 설치해야 합니다.</string>
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> 버전으로 업그레이드를 시도하려 합니다.\n\n<xliff:g id="ok">%2$s</xliff:g>을 누르면 백그라운드에서 이 업데이트를 설치합니다.\n\n설치가 완료되면 기기를 다시 시작할 것인지 묻는 대화 상자가 나타납니다.</string> <string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> 버전을 설치하려 합니다.\n\n<xliff:g id="ok">%2$s</xliff:g>을 누르면 백그라운드에서 이 업데이트를 설치합니다.\n\n설치가 완료되면 기기를 다시 시작할 것인지 묻는 대화 상자가 나타납니다.</string>
<string name="cancel_installation_dialog_message">설치를 취소하시겠습니까?</string> <string name="cancel_installation_dialog_message">설치를 취소하시겠습니까?</string>
<string name="label_download_url">다운로드 URL</string> <string name="label_download_url">다운로드 URL</string>
<string name="toast_download_url_copied">URL 복사됨</string> <string name="toast_download_url_copied">URL 복사됨</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">업데이트를 내보냈습니다.</string> <string name="notification_export_success">업데이트를 내보냈습니다.</string>
<string name="notification_export_fail">내보내기 오류</string> <string name="notification_export_fail">내보내기 오류</string>
<string name="toast_already_exporting">이미 업데이트를 내보내는 중입니다.</string> <string name="toast_already_exporting">이미 업데이트를 내보내는 중입니다.</string>
<string name="toast_export_started">내보내기를 시작했습니다.</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="other"><xliff:g id="count">%d</xliff:g>초 남음</item> <item quantity="other"><xliff:g id="count">%d</xliff:g>초 남음</item>
</plurals> </plurals>
@@ -109,4 +110,7 @@
<string name="new_updates_channel_title">새 업데이트</string> <string name="new_updates_channel_title">새 업데이트</string>
<string name="ongoing_channel_title">진행 중인 다운로드</string> <string name="ongoing_channel_title">진행 중인 다운로드</string>
<string name="update_failed_channel_title">업데이트 실패</string> <string name="update_failed_channel_title">업데이트 실패</string>
<string name="info_dialog_title">알고 계신가요?</string>
<string name="info_dialog_message">LineageOS 업데이트는 전체 설치 패키지입니다. 중간에 몇 개 버전을 건너뛰었더라도 가장 최신 버전만 설치하면 됩니다!</string>
<string name="info_dialog_ok">정보 감사합니다!</string>
</resources> </resources>

View File

@@ -55,7 +55,6 @@
<string name="header_last_updates_check">Sist sjekket: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Sist sjekket: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> av <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_verifying_update">Bekrefter oppdatering</string> <string name="list_verifying_update">Bekrefter oppdatering</string>
<string name="list_no_updates">Ingen nye programvareoppdateringer funnet. For å se etter oppdateringer manuelt, bruk Oppdater-knappen.</string> <string name="list_no_updates">Ingen nye programvareoppdateringer funnet. For å se etter oppdateringer manuelt, bruk Oppdater-knappen.</string>
<string name="action_download">Last ned</string> <string name="action_download">Last ned</string>
@@ -68,8 +67,6 @@
<string name="confirm_delete_dialog_title">Slett fil</string> <string name="confirm_delete_dialog_title">Slett fil</string>
<string name="confirm_delete_dialog_message">Slett valgt oppdateringsfil?</string> <string name="confirm_delete_dialog_message">Slett valgt oppdateringsfil?</string>
<string name="apply_update_dialog_title">Installer oppdatering</string> <string name="apply_update_dialog_title">Installer oppdatering</string>
<string name="apply_update_dialog_message">Du er i ferd med å oppdatere til <xliff:g id="update_name">%1$s</xliff:g>.\n\nHvis du trykker <xliff:g id="ok">%2$s</xliff:g> vil enheten starte på nytt i gjenopprettingsmodus for å installere oppdateringen.\n\nMerk: Denne funksjonen krever en kompatibel gjenopprettingsprogramvare ellers må oppdateringer installeres manuelt.</string>
<string name="apply_update_dialog_message_ab">Du er i ferd med å oppdatere til <xliff:g id="update_name">%1$s</xliff:g>.\n\nHvis du trykker <xliff:g id="ok">%2$s</xliff:g> vil enheten begynne å installere i bakgrunnen.\n\nNår den er ferdig, vil du bli spurt om å starte på nytt.</string>
<string name="cancel_installation_dialog_message">Vil du avbryte installasjonen?</string> <string name="cancel_installation_dialog_message">Vil du avbryte installasjonen?</string>
<string name="label_download_url">Last ned nettadresse</string> <string name="label_download_url">Last ned nettadresse</string>
<string name="toast_download_url_copied">Nettadresse kopiert</string> <string name="toast_download_url_copied">Nettadresse kopiert</string>

View File

@@ -37,6 +37,8 @@
<string name="finalizing_package">Installatie van het pakket afronden</string> <string name="finalizing_package">Installatie van het pakket afronden</string>
<string name="preparing_ota_first_boot">Eerste start voorbereiden</string> <string name="preparing_ota_first_boot">Eerste start voorbereiden</string>
<string name="dialog_prepare_zip_message">Update voorbereiden</string> <string name="dialog_prepare_zip_message">Update voorbereiden</string>
<string name="dialog_battery_low_title">Batterij bijna leeg</string>
<string name="dialog_battery_low_message_pct">Uw batterijniveau is te laag, u moet op zijn minst <xliff:g id="percent_discharging">%1$d</xliff:g>%% batterijcapaciteit hebben om door te gaan of <xliff:g id="percent_charging">%2$d</xliff:g>%% tijdens het opladen.</string>
<string name="reboot">Herstarten</string> <string name="reboot">Herstarten</string>
<string name="menu_refresh">Vernieuwen</string> <string name="menu_refresh">Vernieuwen</string>
<string name="menu_preferences">Instellingen</string> <string name="menu_preferences">Instellingen</string>
@@ -50,6 +52,9 @@
<string name="menu_copy_url">URL kopiëren</string> <string name="menu_copy_url">URL kopiëren</string>
<string name="menu_export_update">Update exporteren</string> <string name="menu_export_update">Update exporteren</string>
<string name="menu_show_changelog">Changelog weergeven</string> <string name="menu_show_changelog">Changelog weergeven</string>
<string name="menu_ab_perf_mode">Geef prioriteit aan het updateproces</string>
<string name="menu_update_recovery">Recovery bijwerken</string>
<string name="toast_forced_update_recovery">Het is onmogelijk om Lineage Recovery updates op dit apparaat uit te schakelen.</string>
<string name="snack_updates_found">Nieuwe updates gevonden</string> <string name="snack_updates_found">Nieuwe updates gevonden</string>
<string name="snack_no_updates_found">Geen nieuwe updates gevonden</string> <string name="snack_no_updates_found">Geen nieuwe updates gevonden</string>
<string name="snack_updates_check_failed">Kan niet controleren op updates. Controleer uw internetverbinding en probeer het later opnieuw.</string> <string name="snack_updates_check_failed">Kan niet controleren op updates. Controleer uw internetverbinding en probeer het later opnieuw.</string>
@@ -62,7 +67,8 @@
<string name="header_last_updates_check">Laatst gecontroleerd: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Laatst gecontroleerd: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> van <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> van <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> van <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Update verifiëren</string> <string name="list_verifying_update">Update verifiëren</string>
<string name="list_no_updates">Geen nieuwe updates gevonden. Gebruik de knop Vernieuwen om handmatig te controleren op nieuwe updates.</string> <string name="list_no_updates">Geen nieuwe updates gevonden. Gebruik de knop Vernieuwen om handmatig te controleren op nieuwe updates.</string>
<string name="action_download">Downloaden</string> <string name="action_download">Downloaden</string>
@@ -75,8 +81,8 @@
<string name="confirm_delete_dialog_title">Bestand verwijderen</string> <string name="confirm_delete_dialog_title">Bestand verwijderen</string>
<string name="confirm_delete_dialog_message">Geselecteerde update-bestand verwijderen?</string> <string name="confirm_delete_dialog_message">Geselecteerde update-bestand verwijderen?</string>
<string name="apply_update_dialog_title">Update toepassen</string> <string name="apply_update_dialog_title">Update toepassen</string>
<string name="apply_update_dialog_message">Uw systeem wordt bijgewerkt naar <xliff:g id="update_name">%1$s</xliff:g>.\n\nWanneer u op <xliff:g id="ok">%2$s</xliff:g> tikt, zal het apparaat herstarten naar recovery om de update te installeren.\n\nLet op: een compatibele recovery is vereist, anders moet de update handmatig worden geïnstalleerd.</string> <string name="apply_update_dialog_message">U staat op het punt uw systeem bij te werken naar <xliff:g id="update_name">%1$s</xliff:g>.\n\nAls u op <xliff:g id="ok">%2$s</xliff:g> tikt, zal het apparaat herstarten naar recovery om de update te installeren.\n\nLet op: een compatibele recovery is vereist, anders moet de update handmatig worden geïnstalleerd.</string>
<string name="apply_update_dialog_message_ab">Uw systeem wordt bijgewerkt naar <xliff:g id="update_name">%1$s</xliff:g>.\n\nWanneer u op <xliff:g id="ok">%2$s</xliff:g> tikt, zal het apparaat de update op de achtergrond uitvoeren.\n\nWanneer de installatie voltooid is zal gevraagd worden het toestel te herstarten.</string> <string name="apply_update_dialog_message_ab">U staat op het punt om uw toestel bij te werken naar <xliff:g id="update_name">%1$s</xliff:g>.\n\nAls u op <xliff:g id="ok">%2$s</xliff:g> tikt, zal het apparaat de update op de achtergrond uitvoeren.\n\nZodra de installatie voltooid is, zal gevraagd worden om het apparaat te herstarten.</string>
<string name="cancel_installation_dialog_message">Installatie annuleren?</string> <string name="cancel_installation_dialog_message">Installatie annuleren?</string>
<string name="label_download_url">Download-URL</string> <string name="label_download_url">Download-URL</string>
<string name="toast_download_url_copied">URL gekopieerd</string> <string name="toast_download_url_copied">URL gekopieerd</string>
@@ -84,6 +90,7 @@
<string name="notification_export_success">Update geëxporteerd</string> <string name="notification_export_success">Update geëxporteerd</string>
<string name="notification_export_fail">Fout bij exporteren</string> <string name="notification_export_fail">Fout bij exporteren</string>
<string name="toast_already_exporting">Er wordt al een update geëxporteerd</string> <string name="toast_already_exporting">Er wordt al een update geëxporteerd</string>
<string name="toast_export_started">Exporteren is begonnen</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 seconde resterend</item> <item quantity="one">1 seconde resterend</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> seconden resterend</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> seconden resterend</item>
@@ -104,5 +111,9 @@
<string name="blocked_update_dialog_message">Deze update kan niet worden geïnstalleerd met behulp van de updater-app. Lees <xliff:g id="info_url">%1$s</xliff:g> voor meer informatie.</string> <string name="blocked_update_dialog_message">Deze update kan niet worden geïnstalleerd met behulp van de updater-app. Lees <xliff:g id="info_url">%1$s</xliff:g> voor meer informatie.</string>
<string name="export_channel_title">Exporteren voltooid</string> <string name="export_channel_title">Exporteren voltooid</string>
<string name="new_updates_channel_title">Nieuwe updates</string> <string name="new_updates_channel_title">Nieuwe updates</string>
<string name="ongoing_channel_title">Huidige downloads</string>
<string name="update_failed_channel_title">Update mislukt</string> <string name="update_failed_channel_title">Update mislukt</string>
<string name="info_dialog_title">Wist u dat?</string>
<string name="info_dialog_message">LineageOS updates zijn volledige installatiepakketten. Dat betekent dat u altijd alleen de nieuwste update hoeft te installeren, zelfs als u een paar updates overslaat!</string>
<string name="info_dialog_ok">Bedankt voor de informatie!</string>
</resources> </resources>

View File

@@ -38,7 +38,7 @@
<string name="preparing_ota_first_boot">Przygotowanie do pierwszego uruchomienia</string> <string name="preparing_ota_first_boot">Przygotowanie do pierwszego uruchomienia</string>
<string name="dialog_prepare_zip_message">Przygotowanie wstępne aktualizacji</string> <string name="dialog_prepare_zip_message">Przygotowanie wstępne aktualizacji</string>
<string name="dialog_battery_low_title">Niskim poziom baterii</string> <string name="dialog_battery_low_title">Niskim poziom baterii</string>
<string name="dialog_battery_low_message_pct">Poziom naładowania baterii jest zbyt niski, musisz mieć co najmniej <xliff:g id="percent_discharging">%1$d</xliff:g>% baterii lub <xliff:g id="percent_charging">%2$d</xliff:g>% w trakcie ładowania.</string> <string name="dialog_battery_low_message_pct">Poziom naładowania baterii jest zbyt niski, musisz mieć co najmniej <xliff:g id="percent_discharging">%1$d</xliff:g>%% baterii lub <xliff:g id="percent_charging">%2$d</xliff:g>%% w trakcie ładowania.</string>
<string name="reboot">Uruchom ponownie</string> <string name="reboot">Uruchom ponownie</string>
<string name="menu_refresh">Odśwież</string> <string name="menu_refresh">Odśwież</string>
<string name="menu_preferences">Ustawienia</string> <string name="menu_preferences">Ustawienia</string>
@@ -53,6 +53,8 @@
<string name="menu_export_update">Wyślij aktualizację</string> <string name="menu_export_update">Wyślij aktualizację</string>
<string name="menu_show_changelog">Pokaż listę zmian</string> <string name="menu_show_changelog">Pokaż listę zmian</string>
<string name="menu_ab_perf_mode">Nadaj wyższy priorytet procesowi aktualizacji</string> <string name="menu_ab_perf_mode">Nadaj wyższy priorytet procesowi aktualizacji</string>
<string name="menu_update_recovery">Aktualizuj Recovery</string>
<string name="toast_forced_update_recovery">Nie można wyłączyć aktualizacji Lineage Recovery na tym urządzeniu.</string>
<string name="snack_updates_found">Znaleziono nowe aktualizacje</string> <string name="snack_updates_found">Znaleziono nowe aktualizacje</string>
<string name="snack_no_updates_found">Nie znaleziono nowych aktualizacji</string> <string name="snack_no_updates_found">Nie znaleziono nowych aktualizacji</string>
<string name="snack_updates_check_failed">Sprawdzanie aktualizacji nie powiodło się. Sprawdź połączenie z Internetem i spróbuj ponownie.</string> <string name="snack_updates_check_failed">Sprawdzanie aktualizacji nie powiodło się. Sprawdź połączenie z Internetem i spróbuj ponownie.</string>
@@ -65,8 +67,8 @@
<string name="header_last_updates_check">Ostatnio sprawdzane: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Ostatnio sprawdzane: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Sprawdzanie aktualizacji</string> <string name="list_verifying_update">Sprawdzanie aktualizacji</string>
<string name="list_no_updates">Nie znaleziono nowych aktualizacji. Aby ręcznie sprawdzić dostępność nowych aktualizacji, użyj przycisku Odśwież.</string> <string name="list_no_updates">Nie znaleziono nowych aktualizacji. Aby ręcznie sprawdzić dostępność nowych aktualizacji, użyj przycisku Odśwież.</string>
<string name="action_download">Pobierz</string> <string name="action_download">Pobierz</string>
@@ -79,8 +81,8 @@
<string name="confirm_delete_dialog_title">Usuń plik</string> <string name="confirm_delete_dialog_title">Usuń plik</string>
<string name="confirm_delete_dialog_message">Usunąć wybrany plik aktualizacji?</string> <string name="confirm_delete_dialog_message">Usunąć wybrany plik aktualizacji?</string>
<string name="apply_update_dialog_title">Zastosuj aktualizację</string> <string name="apply_update_dialog_title">Zastosuj aktualizację</string>
<string name="apply_update_dialog_message">Masz zamiar zaktualizować do <xliff:g id="update_name">%1$s</xliff:g>.\n\nGdy naciśniesz <xliff:g id="ok">%2$s</xliff:g>, urządzenie uruchomi się ponownie w trybie recovery, aby zainstalować aktualizację.\n\nUwaga: Ta funkcja wymaga kompatybilnego recovery, w innym przypadku aktualizację należy zainstalować ręcznie.</string> <string name="apply_update_dialog_message">Zamierzasz zainstalować <xliff:g id="update_name">%1$s</xliff:g>.\n\nJeśli naciśniesz <xliff:g id="ok">%2$s</xliff:g>, urządzenie uruchomi się ponownie w trybie Recovery, aby zainstalować aktualizację.\n\nUwaga: Ta funkcja wymaga kompatybilnego Recovery lub aktualizacje będą musiały być zainstalowane ręcznie.</string>
<string name="apply_update_dialog_message_ab">Masz zamiar zaktualizować do <xliff:g id="filename">%1$s</xliff:g>. \n\nGdy naciśniesz <xliff:g id="ok">%2$s</xliff:g>, urządzenie zacznie instalować w tle.\n\nPo zakończeniu wyświetli komunikat, aby urządzenie uruchomić ponownie.</string> <string name="apply_update_dialog_message_ab">Zamierzasz zainstalować <xliff:g id="update_name">%1$s</xliff:g>.\n\nJeśli naciśniesz <xliff:g id="ok">%2$s</xliff:g>, urządzenie rozpocznie instalację w tle.\n\nPo zakończeniu, zostanie wyświetlony komunikat, aby uruchomić urządzenie ponownie.</string>
<string name="cancel_installation_dialog_message">Anulować instalację?</string> <string name="cancel_installation_dialog_message">Anulować instalację?</string>
<string name="label_download_url">Pobierz adres URL</string> <string name="label_download_url">Pobierz adres URL</string>
<string name="toast_download_url_copied">Skopiowano adres URL</string> <string name="toast_download_url_copied">Skopiowano adres URL</string>
@@ -88,6 +90,7 @@
<string name="notification_export_success">Aktualizacja wysłana</string> <string name="notification_export_success">Aktualizacja wysłana</string>
<string name="notification_export_fail">Błąd wysyłania</string> <string name="notification_export_fail">Błąd wysyłania</string>
<string name="toast_already_exporting">Aktualizacja jest już wysyłana</string> <string name="toast_already_exporting">Aktualizacja jest już wysyłana</string>
<string name="toast_export_started">Rozpoczęto eksportowanie</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">Pozostała 1 sekunda</item> <item quantity="one">Pozostała 1 sekunda</item>
<item quantity="few">Pozostały <xliff:g id="count">%d</xliff:g> sekundy</item> <item quantity="few">Pozostały <xliff:g id="count">%d</xliff:g> sekundy</item>
@@ -111,9 +114,12 @@
<string name="checkbox_mobile_data_warning">Nie pokazuj ponownie</string> <string name="checkbox_mobile_data_warning">Nie pokazuj ponownie</string>
<string name="menu_mobile_data_warning">Ostrzeżenie o danych komórkowych</string> <string name="menu_mobile_data_warning">Ostrzeżenie o danych komórkowych</string>
<string name="blocked_update_dialog_title">Aktualizacja zablokowana</string> <string name="blocked_update_dialog_title">Aktualizacja zablokowana</string>
<string name="blocked_update_dialog_message">Tej aktualizacji nie można zainstalować przy użyciu aplikacji aktualizacji. Zapoznaj się z <xliff:g id="info_url">%1$s </xliff:g> aby uzyskać więcej informacji.</string> <string name="blocked_update_dialog_message">Tej aktualizacji nie można zainstalować przy użyciu aplikacji \"Aktualizator\". Zapoznaj się z <xliff:g id="info_url">%1$s </xliff:g>, aby uzyskać więcej informacji.</string>
<string name="export_channel_title">Eksport zakończony</string> <string name="export_channel_title">Eksport zakończony</string>
<string name="new_updates_channel_title">Nowe aktualizacje</string> <string name="new_updates_channel_title">Nowe aktualizacje</string>
<string name="ongoing_channel_title">Trwające pobieranie</string> <string name="ongoing_channel_title">Trwające pobieranie</string>
<string name="update_failed_channel_title">Aktualizacja nie powiodła się</string> <string name="update_failed_channel_title">Aktualizacja nie powiodła się</string>
<string name="info_dialog_title">Czy wiesz, że?</string>
<string name="info_dialog_message">Aktualizacje LineageOS to pełne pakiety instalacyjne. Oznacza to, że zawsze możesz zainstalować tylko najnowszą aktualizację, nawet jeśli poprzednie zostały pominięte!</string>
<string name="info_dialog_ok">Dziękujemy za informację!</string>
</resources> </resources>

View File

@@ -65,8 +65,6 @@
<string name="header_last_updates_check">Última verificação: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> às <xliff:g id="time" example="01:23">%2$s</xliff:g></string> <string name="header_last_updates_check">Última verificação: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> às <xliff:g id="time" example="01:23">%2$s</xliff:g></string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">Verificando atualização</string> <string name="list_verifying_update">Verificando atualização</string>
<string name="list_no_updates">Não foram encontradas novas atualizações. Use o botão Atualizar para buscar por novas atualizações manualmente.</string> <string name="list_no_updates">Não foram encontradas novas atualizações. Use o botão Atualizar para buscar por novas atualizações manualmente.</string>
<string name="action_download">Baixar</string> <string name="action_download">Baixar</string>
@@ -79,8 +77,6 @@
<string name="confirm_delete_dialog_title">Excluir arquivo</string> <string name="confirm_delete_dialog_title">Excluir arquivo</string>
<string name="confirm_delete_dialog_message">Excluir o arquivo de atualização selecionado?</string> <string name="confirm_delete_dialog_message">Excluir o arquivo de atualização selecionado?</string>
<string name="apply_update_dialog_title">Instalar atualização</string> <string name="apply_update_dialog_title">Instalar atualização</string>
<string name="apply_update_dialog_message">Você está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nAo clicar em <xliff:g id="ok">%2$s</xliff:g>, o dispositivo reiniciará no modo de recuperação para instalar a atualização.\n\nÉ necessário ter uma Recuperação compatível, caso contrário as atualizações deverão ser instaladas manualmente.</string>
<string name="apply_update_dialog_message_ab">Você está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nAo clicar em <xliff:g id="ok">%2$s</xliff:g>, o dispositivo iniciará a instalação em segundo plano.\n\nAo concluir, você será solicitado a reiniciar o dispositivo.</string>
<string name="cancel_installation_dialog_message">Deseja cancelar a instalação?</string> <string name="cancel_installation_dialog_message">Deseja cancelar a instalação?</string>
<string name="label_download_url">URL de Download</string> <string name="label_download_url">URL de Download</string>
<string name="toast_download_url_copied">URL copiado</string> <string name="toast_download_url_copied">URL copiado</string>
@@ -110,4 +106,6 @@
<string name="new_updates_channel_title">Novas atualizações</string> <string name="new_updates_channel_title">Novas atualizações</string>
<string name="ongoing_channel_title">Downloads em andamento</string> <string name="ongoing_channel_title">Downloads em andamento</string>
<string name="update_failed_channel_title">Falha ao atualizar</string> <string name="update_failed_channel_title">Falha ao atualizar</string>
<string name="info_dialog_title">Você sabia?</string>
<string name="info_dialog_ok">Agradecemos o seu comentário!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Última verificação: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Última verificação: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">A verificar atualização</string> <string name="list_verifying_update">A verificar atualização</string>
<string name="list_no_updates">Não foram encontradas novas atualizações. Para verificar novas atualizações manualmente, use o botão Atualizar.</string> <string name="list_no_updates">Não foram encontradas novas atualizações. Para verificar novas atualizações manualmente, use o botão Atualizar.</string>
<string name="action_download">Transferir</string> <string name="action_download">Transferir</string>
@@ -82,7 +82,7 @@
<string name="confirm_delete_dialog_message">Deseja eliminar o ficheiro de atualizações selecionado?</string> <string name="confirm_delete_dialog_message">Deseja eliminar o ficheiro de atualizações selecionado?</string>
<string name="apply_update_dialog_title">Aplicar atualização</string> <string name="apply_update_dialog_title">Aplicar atualização</string>
<string name="apply_update_dialog_message">Está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe carregar em<xliff:g id="ok">%2$s</xliff:g>, o dispositivo irá reiniciar no modo de recuperação para instalar a atualização.\n\nNota: É necessária uma Recuperação compatível, caso contrário as atualizações terão de ser instaladas manualmente.</string> <string name="apply_update_dialog_message">Está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe carregar em<xliff:g id="ok">%2$s</xliff:g>, o dispositivo irá reiniciar no modo de recuperação para instalar a atualização.\n\nNota: É necessária uma Recuperação compatível, caso contrário as atualizações terão de ser instaladas manualmente.</string>
<string name="apply_update_dialog_message_ab">Está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe selecionar <xliff:g id="ok">%2$s</xliff:g>, o dispositivo irá iniciar a instalação em plano de fundo.\n\nUma vez concluída, ser-lhe-á pedido que reinicie o dispositivo.</string> <string name="apply_update_dialog_message_ab">Está prestes a atualizar para <xliff:g id="update_name">%1$s</xliff:g>.\n\nSe selecionar <xliff:g id="ok">%2$s</xliff:g>, o dispositivo irá iniciar a instalação em segundo plano.\n\nUma vez concluída, ser-lhe-á pedido que reinicie o dispositivo.</string>
<string name="cancel_installation_dialog_message">Cancelar a instalação?</string> <string name="cancel_installation_dialog_message">Cancelar a instalação?</string>
<string name="label_download_url">URL de transferência</string> <string name="label_download_url">URL de transferência</string>
<string name="toast_download_url_copied">URL copiado</string> <string name="toast_download_url_copied">URL copiado</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Atualização exportada</string> <string name="notification_export_success">Atualização exportada</string>
<string name="notification_export_fail">Erro de exportação</string> <string name="notification_export_fail">Erro de exportação</string>
<string name="toast_already_exporting">Já está a exportar uma atualização</string> <string name="toast_already_exporting">Já está a exportar uma atualização</string>
<string name="toast_export_started">Exportação iniciada</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 segundo restante</item> <item quantity="one">1 segundo restante</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> segundos restantes</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> segundos restantes</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">Novas atualizações</string> <string name="new_updates_channel_title">Novas atualizações</string>
<string name="ongoing_channel_title">Transferências em curso</string> <string name="ongoing_channel_title">Transferências em curso</string>
<string name="update_failed_channel_title">A atualização falhou</string> <string name="update_failed_channel_title">A atualização falhou</string>
<string name="info_dialog_title">Sabias que?</string>
<string name="info_dialog_message">As atualizações do LineageOS são pacotes de instalação completa. Isso significa que podes instalar apenas a última atualização, mesmo que tenhas ignorado alguns deles!</string>
<string name="info_dialog_ok">Obrigado pela informação!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Ultima verificare: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Ultima verificare: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> din <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> din <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> din <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> din <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Verificare actualizare</string> <string name="list_verifying_update">Verificare actualizare</string>
<string name="list_no_updates">Nicio actualizare nouă găsită. Pentru a verifica manual pentru noi actualizări, utilizați butonul Reîmprospătare.</string> <string name="list_no_updates">Nicio actualizare nouă găsită. Pentru a verifica manual pentru noi actualizări, utilizați butonul Reîmprospătare.</string>
<string name="action_download">Descărcați</string> <string name="action_download">Descărcați</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Ștergeți fișierul</string> <string name="confirm_delete_dialog_title">Ștergeți fișierul</string>
<string name="confirm_delete_dialog_message">Șterge fișierul de actualizare selectat?</string> <string name="confirm_delete_dialog_message">Șterge fișierul de actualizare selectat?</string>
<string name="apply_update_dialog_title">Aplicaţi actualizarea</string> <string name="apply_update_dialog_title">Aplicaţi actualizarea</string>
<string name="apply_update_dialog_message">Sunteți pe cale de a face upgrade la <xliff:g id="update_name">%1$s</xliff:g>.\n\nDacă apăsați <xliff:g id="ok">%2$s</xliff:g>, dispozitivul se va restarta în modul de recuperare pentru a instala actualizarea.\n\nNotă: Această caracteristică necesită o Recuperare compatibilă sau actualizările vor trebui să fie instalate manual.</string> <string name="apply_update_dialog_message">Sunteți pe cale să instalați <xliff:g id="update_name">%1$s</xliff:g>.\n\nDacă apăsați <xliff:g id="ok">%2$s</xliff:g>, dispozitivul va reporni în modul recuperare pentru a instala actualizarea.\n\nNotă: Această caracteristică necesită un Recovery compatibil ori actualizările vor trebui instalate manual.</string>
<string name="apply_update_dialog_message_ab">Sunteți pe cale de a face upgrade la <xliff:g id="update_name">%1$s</xliff:g>.\n\nDacă apăsați <xliff:g id="ok">%2$s</xliff:g>, dispozitivul va începe instalarea în fundal.\n\nOdată finalizată, veți fi anunțat(ă) să reporniți telefonul.</string> <string name="apply_update_dialog_message_ab">Sunteți pe cale să instalați <xliff:g id="update_name">%1$s</xliff:g>.\n\nDacă apăsați <xliff:g id="ok">%2$s</xliff:g>, dispozitivul va începe instalarea în fundal.\n\nOdată terminată, vi se va solicita să reporniți dispozitivul.</string>
<string name="cancel_installation_dialog_message">Revocaţi instalarea?</string> <string name="cancel_installation_dialog_message">Revocaţi instalarea?</string>
<string name="label_download_url">Descărcați URL-ul</string> <string name="label_download_url">Descărcați URL-ul</string>
<string name="toast_download_url_copied">URL copiat</string> <string name="toast_download_url_copied">URL copiat</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Actualizare exportată</string> <string name="notification_export_success">Actualizare exportată</string>
<string name="notification_export_fail">Eroare de export</string> <string name="notification_export_fail">Eroare de export</string>
<string name="toast_already_exporting">Se exportează deja o actualizare</string> <string name="toast_already_exporting">Se exportează deja o actualizare</string>
<string name="toast_export_started">Export inițiat</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 secundă rămasă</item> <item quantity="one">1 secundă rămasă</item>
<item quantity="few"><xliff:g id="count">%d</xliff:g> (de) secunde rămase</item> <item quantity="few"><xliff:g id="count">%d</xliff:g> (de) secunde rămase</item>
@@ -115,4 +116,7 @@
<string name="new_updates_channel_title">Actualizări noi</string> <string name="new_updates_channel_title">Actualizări noi</string>
<string name="ongoing_channel_title">Descărcări în desfășurare</string> <string name="ongoing_channel_title">Descărcări în desfășurare</string>
<string name="update_failed_channel_title">Actualizare eșuată</string> <string name="update_failed_channel_title">Actualizare eșuată</string>
<string name="info_dialog_title">Știai că?</string>
<string name="info_dialog_message">Actualizările LineageOS sunt pachete complete de instalare. Acest lucru înseamnă că întotdeauna puteți instala doar ultima actualizare, chiar dacă ați sărit unele dintre ele!</string>
<string name="info_dialog_ok">Mulțumesc pentru informații!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Поиск обновлений выполнялся <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> в <xliff:g id="time" example="01:23">%2$s</xliff:g></string> <string name="header_last_updates_check">Поиск обновлений выполнялся <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> в <xliff:g id="time" example="01:23">%2$s</xliff:g></string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> из <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> из <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> из <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> из <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Проверка обновлений</string> <string name="list_verifying_update">Проверка обновлений</string>
<string name="list_no_updates">Обновлений не найдено. Чтобы проверить наличие обновлений вручную, используйте кнопку Обновить.</string> <string name="list_no_updates">Обновлений не найдено. Чтобы проверить наличие обновлений вручную, используйте кнопку Обновить.</string>
<string name="action_download">Скачать</string> <string name="action_download">Скачать</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Удалить файл</string> <string name="confirm_delete_dialog_title">Удалить файл</string>
<string name="confirm_delete_dialog_message">Удалить выбранный файл обновления?</string> <string name="confirm_delete_dialog_message">Удалить выбранный файл обновления?</string>
<string name="apply_update_dialog_title">Применить обновление</string> <string name="apply_update_dialog_title">Применить обновление</string>
<string name="apply_update_dialog_message">Будет выполнено обновление до версии <xliff:g id="update_name">%1$s</xliff:g>.\n\nПри нажатии кнопки <xliff:g id="ok">%2$s</xliff:g> устройство будет перезапущено в режиме Recovery для установки новой версии.\n\nПримечание: для использования данной возможности необходим совместимый Recovery. При возникновении ошибки обновление потребуется установить вручную.</string> <string name="apply_update_dialog_message">Будет выполнена установка <xliff:g id="update_name">%1$s</xliff:g>.\n\nПри нажатии кнопки <xliff:g id="ok">%2$s</xliff:g> устройство будет перезапущено в режиме Recovery для установки новой версии.\n\nПримечание: для использования данной возможности необходим совместимый Recovery. При возникновении ошибки обновление потребуется установить вручную.</string>
<string name="apply_update_dialog_message_ab">Будет выполнено обновление до версии <xliff:g id="update_name">%1$s</xliff:g>.\n\nПри нажатии кнопки <xliff:g id="ok">%2$s</xliff:g> будет начата установка в фоновом режиме.\n\nПо завершении вам будет предложено перезапустить устройство.</string> <string name="apply_update_dialog_message_ab">Будет выполнена установка <xliff:g id="update_name">%1$s</xliff:g>.\n\nПри нажатии кнопки <xliff:g id="ok">%2$s</xliff:g> будет начата установка в фоновом режиме.\n\nПо завершении вам будет предложено перезапустить устройство.</string>
<string name="cancel_installation_dialog_message">Отменить установку?</string> <string name="cancel_installation_dialog_message">Отменить установку?</string>
<string name="label_download_url">Ссылка для скачивания</string> <string name="label_download_url">Ссылка для скачивания</string>
<string name="toast_download_url_copied">URL скопирован в буфер обмена</string> <string name="toast_download_url_copied">URL скопирован в буфер обмена</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Обновление экспортировано</string> <string name="notification_export_success">Обновление экспортировано</string>
<string name="notification_export_fail">Ошибка экспорта</string> <string name="notification_export_fail">Ошибка экспорта</string>
<string name="toast_already_exporting">Экспорт уже выполняется</string> <string name="toast_already_exporting">Экспорт уже выполняется</string>
<string name="toast_export_started">Экспорт начат</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">осталась <xliff:g id="count">%d</xliff:g> секунда</item> <item quantity="one">осталась <xliff:g id="count">%d</xliff:g> секунда</item>
<item quantity="few">осталось <xliff:g id="count">%d</xliff:g> секунды</item> <item quantity="few">осталось <xliff:g id="count">%d</xliff:g> секунды</item>
@@ -118,4 +119,7 @@
<string name="new_updates_channel_title">Доступны обновления</string> <string name="new_updates_channel_title">Доступны обновления</string>
<string name="ongoing_channel_title">Текущие загрузки</string> <string name="ongoing_channel_title">Текущие загрузки</string>
<string name="update_failed_channel_title">Сбой обновления</string> <string name="update_failed_channel_title">Сбой обновления</string>
<string name="info_dialog_title">Знаете ли вы?</string>
<string name="info_dialog_message">Обновления LineageOS представляют собой полные установочные пакеты. Это означает, что вы всегда можете установить только последнее обновление, даже если вы пропустили некоторые из них!</string>
<string name="info_dialog_ok">Спасибо за информацию!</string>
</resources> </resources>

View File

@@ -23,7 +23,6 @@
<string name="reboot">Torra a allùghere</string> <string name="reboot">Torra a allùghere</string>
<string name="menu_preferences">Preferèntzias</string> <string name="menu_preferences">Preferèntzias</string>
<string name="menu_delete_update">Iscantzella</string> <string name="menu_delete_update">Iscantzella</string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> de <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="action_download">Iscàrriga</string> <string name="action_download">Iscàrriga</string>
<string name="action_pause">Pàusa</string> <string name="action_pause">Pàusa</string>
<string name="action_resume">Sighi</string> <string name="action_resume">Sighi</string>

View File

@@ -67,8 +67,6 @@
<string name="header_last_updates_check">Posledná kontrola: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Posledná kontrola: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> из <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> z <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">Overujem aktualizáciu</string> <string name="list_verifying_update">Overujem aktualizáciu</string>
<string name="list_no_updates">Neboli nájdené žiadne nové aktualizácie. Ak chcete ručne vyhľadať nové aktualizácie, použite tlačítko Aktualizovať.</string> <string name="list_no_updates">Neboli nájdené žiadne nové aktualizácie. Ak chcete ručne vyhľadať nové aktualizácie, použite tlačítko Aktualizovať.</string>
<string name="action_download">Stiahnuť</string> <string name="action_download">Stiahnuť</string>
@@ -81,8 +79,6 @@
<string name="confirm_delete_dialog_title">Vymazať súbor</string> <string name="confirm_delete_dialog_title">Vymazať súbor</string>
<string name="confirm_delete_dialog_message">Vymazať vybraný súbor aktualizácie?</string> <string name="confirm_delete_dialog_message">Vymazať vybraný súbor aktualizácie?</string>
<string name="apply_update_dialog_title">Aplikovať aktualizáciu</string> <string name="apply_update_dialog_title">Aplikovať aktualizáciu</string>
<string name="apply_update_dialog_message">Idete aktualizovať na <xliff:g id="update_name">%1$s</xliff:g>.\n\nAk stlačíte <xliff:g id="ok">%2$s</xliff:g>, zariadenie sa reštartuje do recovery režimu na inštaláciu aktualizácie.\n\nPoznámka: Táto funkcia vyžaduje kompatibilné Recovery alebo treba aktualizácie nainštalovať ručne.</string>
<string name="apply_update_dialog_message_ab">Idete aktualizovať na <xliff:g id="update_name">%1$s</xliff:g>.\n\nAk stlačíte <xliff:g id="ok">%2$s</xliff:g>, zariadenie začne inštaláciu v pozadí.\n\nPo ukončení budete vyzvaný na reštart.</string>
<string name="cancel_installation_dialog_message">Zrušiť inštaláciu?</string> <string name="cancel_installation_dialog_message">Zrušiť inštaláciu?</string>
<string name="label_download_url">URL adresa</string> <string name="label_download_url">URL adresa</string>
<string name="toast_download_url_copied">URL skopírované</string> <string name="toast_download_url_copied">URL skopírované</string>

View File

@@ -52,7 +52,7 @@
<string name="menu_copy_url">Kopiraj URL</string> <string name="menu_copy_url">Kopiraj URL</string>
<string name="menu_export_update">Izvozi posodobitev</string> <string name="menu_export_update">Izvozi posodobitev</string>
<string name="menu_show_changelog">Prikaži dnevnik sprememb</string> <string name="menu_show_changelog">Prikaži dnevnik sprememb</string>
<string name="menu_ab_perf_mode">Daj prednost posodobitvenemu procesu</string> <string name="menu_ab_perf_mode">Daj prednost posodobitvenemu postopku</string>
<string name="menu_update_recovery">Posodobi obnovitev</string> <string name="menu_update_recovery">Posodobi obnovitev</string>
<string name="toast_forced_update_recovery">Ni mogoče onemogočiti posodobitev obnovitve Lineage na tej napravi.</string> <string name="toast_forced_update_recovery">Ni mogoče onemogočiti posodobitev obnovitve Lineage na tej napravi.</string>
<string name="snack_updates_found">Najdene nove posodobitve</string> <string name="snack_updates_found">Najdene nove posodobitve</string>
@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Zadnje preverjanje: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Zadnje preverjanje: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> od <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> od <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> od <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> od <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Preverjanje posodobitve</string> <string name="list_verifying_update">Preverjanje posodobitve</string>
<string name="list_no_updates">Ni najdenih novih posodobitev. Za ročno preverjanje novih posodobitev, uporabite gumb Osveži.</string> <string name="list_no_updates">Ni najdenih novih posodobitev. Za ročno preverjanje novih posodobitev, uporabite gumb Osveži.</string>
<string name="action_download">Prenesi</string> <string name="action_download">Prenesi</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Izbriši datoteko</string> <string name="confirm_delete_dialog_title">Izbriši datoteko</string>
<string name="confirm_delete_dialog_message">Izbriši izbrano posodobitveno datoteko?</string> <string name="confirm_delete_dialog_message">Izbriši izbrano posodobitveno datoteko?</string>
<string name="apply_update_dialog_title">Uveljavi posodobitev</string> <string name="apply_update_dialog_title">Uveljavi posodobitev</string>
<string name="apply_update_dialog_message">Ste pred nadgradnjo na <xliff:g id="update_name">%1$s</xliff:g>.\n\nČe pritisnete <xliff:g id="ok">%2$s</xliff:g>, se bo naprava vnovično zagnala v obnovitvenem načinu, da se namesti posodobitev.\n\nOpomba: Ta značilnost zahteva združljivo Obnovitev ali pa boste morali posodobitve namestiti ročno.</string> <string name="apply_update_dialog_message">Ste pred namestitvijo <xliff:g id="update_name">%1$s</xliff:g>.\n\nČe pritisnete <xliff:g id="ok">%2$s</xliff:g>, se bo naprava vnovično zagnala v obnovitveni način, da namesti posodobitev.\n\nOpomba: Ta funkcija zahteva združljivo Obnovitev ali pa bodo morale posodobitve biti nameščene ročno.</string>
<string name="apply_update_dialog_message_ab">Ste pred nadgradnjo na <xliff:g id="update_name">%1$s</xliff:g>.\n\nČe pritisnete na <xliff:g id="ok">%2$s</xliff:g>, bo naprava začela nameščanje v ozadju.\n\nOb zaključku boste pozvani k vnovičnemu zagonu.</string> <string name="apply_update_dialog_message_ab">Ste pred namestitvijo <xliff:g id="update_name">%1$s</xliff:g>.\n\nČe pritisnete <xliff:g id="ok">%2$s</xliff:g>, bo naprava začela nameščanje v ozadju.\n\nOb zaključku boste pozvani k vnovičnemu zagonu.</string>
<string name="cancel_installation_dialog_message">Prekliči nameščanje?</string> <string name="cancel_installation_dialog_message">Prekliči nameščanje?</string>
<string name="label_download_url">URL prenosa</string> <string name="label_download_url">URL prenosa</string>
<string name="toast_download_url_copied">URL kopiran</string> <string name="toast_download_url_copied">URL kopiran</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Posodobitev izvožena</string> <string name="notification_export_success">Posodobitev izvožena</string>
<string name="notification_export_fail">Napaka pri izvozu</string> <string name="notification_export_fail">Napaka pri izvozu</string>
<string name="toast_already_exporting">Posodobitev se že izvaža</string> <string name="toast_already_exporting">Posodobitev se že izvaža</string>
<string name="toast_export_started">Začetek izvoza</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one"><xliff:g id="count">%d</xliff:g> sekunda preostala</item> <item quantity="one"><xliff:g id="count">%d</xliff:g> sekunda preostala</item>
<item quantity="two"><xliff:g id="count">%d</xliff:g> sekundi preostali</item> <item quantity="two"><xliff:g id="count">%d</xliff:g> sekundi preostali</item>
@@ -118,4 +119,7 @@
<string name="new_updates_channel_title">Nove posodobitve</string> <string name="new_updates_channel_title">Nove posodobitve</string>
<string name="ongoing_channel_title">Prenosi v teku</string> <string name="ongoing_channel_title">Prenosi v teku</string>
<string name="update_failed_channel_title">Posodobitev je spodletela</string> <string name="update_failed_channel_title">Posodobitev je spodletela</string>
<string name="info_dialog_title">Ali ste vedeli?</string>
<string name="info_dialog_message">LineageOS posodobitve so polni namestitveni paketi. To pomeni, da lahko vedno namestite samo zadnjo posodobitev tudi, če ste jih vmes nekaj preskočili!</string>
<string name="info_dialog_ok">Hvala za informacije!</string>
</resources> </resources>

View File

@@ -41,7 +41,7 @@
<string name="dialog_battery_low_message_pct">Niveli i baterië është shumë i ulët, për të vazhduar duhet të jetë të paktën <xliff:g id="percent_discharging">%1$d</xliff:g>%% e baterisë, ose <xliff:g id="percent_charging">%2$d</xliff:g>%% nëse po karikohet.</string> <string name="dialog_battery_low_message_pct">Niveli i baterië është shumë i ulët, për të vazhduar duhet të jetë të paktën <xliff:g id="percent_discharging">%1$d</xliff:g>%% e baterisë, ose <xliff:g id="percent_charging">%2$d</xliff:g>%% nëse po karikohet.</string>
<string name="reboot">Rindiz</string> <string name="reboot">Rindiz</string>
<string name="menu_refresh">Rifresko</string> <string name="menu_refresh">Rifresko</string>
<string name="menu_preferences">Parapëlqime</string> <string name="menu_preferences">Preferencat</string>
<string name="menu_auto_updates_check">Kontroll automatik të përditësimeve</string> <string name="menu_auto_updates_check">Kontroll automatik të përditësimeve</string>
<string name="menu_auto_updates_check_interval_daily">Njëherë në ditë</string> <string name="menu_auto_updates_check_interval_daily">Njëherë në ditë</string>
<string name="menu_auto_updates_check_interval_weekly">Njëherë në javë</string> <string name="menu_auto_updates_check_interval_weekly">Njëherë në javë</string>
@@ -54,7 +54,7 @@
<string name="menu_show_changelog">Shfaq ndryshimet</string> <string name="menu_show_changelog">Shfaq ndryshimet</string>
<string name="menu_ab_perf_mode">Jepi përparësi përditësimit</string> <string name="menu_ab_perf_mode">Jepi përparësi përditësimit</string>
<string name="menu_update_recovery">Përditëso rikuperimin</string> <string name="menu_update_recovery">Përditëso rikuperimin</string>
<string name="toast_forced_update_recovery">Është e pamundur të mbyllni përditësimet e Rimëkëmbjes të Lineage në këtë pajisje.</string> <string name="toast_forced_update_recovery">Është e pamundur të çaktivizoni përditësimet e rikuperimit të Lineages në këtë pajisje.</string>
<string name="snack_updates_found">Ka përditësime të reja</string> <string name="snack_updates_found">Ka përditësime të reja</string>
<string name="snack_no_updates_found">Nuk u gjet asnjë përditësim i ri</string> <string name="snack_no_updates_found">Nuk u gjet asnjë përditësim i ri</string>
<string name="snack_updates_check_failed">Kontrolli për përditësim dështoi. Ju lutem kontrolloni për lidhjen me internet e më pas provoni sërish.</string> <string name="snack_updates_check_failed">Kontrolli për përditësim dështoi. Ju lutem kontrolloni për lidhjen me internet e më pas provoni sërish.</string>
@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Kontrolli i fundit: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Kontrolli i fundit: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> e <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> nga <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> e <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> nga <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Duke verifikuar përditësimin</string> <string name="list_verifying_update">Duke verifikuar përditësimin</string>
<string name="list_no_updates">Nuk ka përditësime të reja. Për të kërkuar manualisht për përditësime të reja, përdor butonin Rifresko.</string> <string name="list_no_updates">Nuk ka përditësime të reja. Për të kërkuar manualisht për përditësime të reja, përdor butonin Rifresko.</string>
<string name="action_download">Shkarko</string> <string name="action_download">Shkarko</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Fshi skedarin</string> <string name="confirm_delete_dialog_title">Fshi skedarin</string>
<string name="confirm_delete_dialog_message">Dëshiron të fshish skedarin e zgjedhur të përditësimit?</string> <string name="confirm_delete_dialog_message">Dëshiron të fshish skedarin e zgjedhur të përditësimit?</string>
<string name="apply_update_dialog_title">Apliko përditësimin</string> <string name="apply_update_dialog_title">Apliko përditësimin</string>
<string name="apply_update_dialog_message">Ju po përditësoheni në <xliff:g id="update_name">%1$s</xliff:g>.\n\nNëse shtypni <xliff:g id="ok">%2$s</xliff:g>, telefoni do te rindizet ne Gjendjen Recovery për të instaluar përditesimin.\n\nShënim: Ky funksion kërkon nje Recovery të përshtatshem ose perditesimi do duhet të het manualisht.</string> <string name="apply_update_dialog_message">Jeni gati të instaloni <xliff:g id="update_name">%1$s</xliff:g>.\n\nNëse shtypni <xliff:g id="ok">%2$s</xliff:g>, pajisja do të riniset vetë në modalitetin e rikuperimit për të instaluar përditësimin.\n\nShënim: Ky funksion kërkon një Rikuperim të pajtueshëm ose përditësimet do duhet të instalohen manualisht.</string>
<string name="apply_update_dialog_message_ab">Ju po përditësoheni në <xliff:g id="update_name">%1$s</xliff:g>.\n\nNëse zgjidhni <xliff:g id="ok">%2$s</xliff:g>, paisja do fillojë instalimin prapaskenë. \n\nSapo të përfundojë, ju do të pyeteni për të rindezur paisjen.</string> <string name="apply_update_dialog_message_ab">Jeni gati të instaloni <xliff:g id="update_name">%1$s</xliff:g>.\n\nNëse shtypni <xliff:g id="ok">%2$s</xliff:g>, pajisja do fillojë instalohet në sfond.\n\nPasi të keni përfunduar, do t\'ju kërkohet të rindizni.</string>
<string name="cancel_installation_dialog_message">Anullo instalimin?</string> <string name="cancel_installation_dialog_message">Anullo instalimin?</string>
<string name="label_download_url">Shkarko URL</string> <string name="label_download_url">Shkarko URL</string>
<string name="toast_download_url_copied">URL u kopjua</string> <string name="toast_download_url_copied">URL u kopjua</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Përditësimi u eksportua</string> <string name="notification_export_success">Përditësimi u eksportua</string>
<string name="notification_export_fail">Problem në exportim</string> <string name="notification_export_fail">Problem në exportim</string>
<string name="toast_already_exporting">Aktualisht po exporton një përditësim</string> <string name="toast_already_exporting">Aktualisht po exporton një përditësim</string>
<string name="toast_export_started">Eksporti filloi</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 sekondë e mbetur</item> <item quantity="one">1 sekondë e mbetur</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> sekonda të mbetura</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> sekonda të mbetura</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">Përditësime të reja</string> <string name="new_updates_channel_title">Përditësime të reja</string>
<string name="ongoing_channel_title">Shkarkimet në proces</string> <string name="ongoing_channel_title">Shkarkimet në proces</string>
<string name="update_failed_channel_title">Përditësimi dështoi</string> <string name="update_failed_channel_title">Përditësimi dështoi</string>
<string name="info_dialog_title">A e dinit?</string>
<string name="info_dialog_message">Përditësimet e LineageOS janë paketa të plota instalimi. Kjo do të thotë që gjithmonë mund të instaloni vetëm përditësimin më të fundit, edhe nëse keni anashkaluar disa në mes!</string>
<string name="info_dialog_ok">Faleminderit për informacionin!</string>
</resources> </resources>

View File

@@ -59,8 +59,6 @@
<string name="header_last_updates_check">Последњи пут проверено: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Последњи пут проверено: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s </xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s </xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s </xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s </xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> од <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> од <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">Верификација анжурирања</string> <string name="list_verifying_update">Верификација анжурирања</string>
<string name="list_no_updates">Нема нових ажурирања. Да ручно провериш нова ажурирања користи дугме освежи.</string> <string name="list_no_updates">Нема нових ажурирања. Да ручно провериш нова ажурирања користи дугме освежи.</string>
<string name="action_download">Преузми</string> <string name="action_download">Преузми</string>
@@ -73,8 +71,6 @@
<string name="confirm_delete_dialog_title">Обриши фајл</string> <string name="confirm_delete_dialog_title">Обриши фајл</string>
<string name="confirm_delete_dialog_message">Избриши изабрани фајл за ажурирање?</string> <string name="confirm_delete_dialog_message">Избриши изабрани фајл за ажурирање?</string>
<string name="apply_update_dialog_title">Примени ажурирање</string> <string name="apply_update_dialog_title">Примени ажурирање</string>
<string name="apply_update_dialog_message">Биће инсталирано <xliff:g id="update_name">%1$s</xliff:g>.\n\nАко додирнете <xliff:g id="ok">%2$s</xliff:g>, уређај ће се поново покренути у режим опоравка ради инсталације ажурирања.\n\nНапомена: За ову функцију је неопходан одговарајући режим опоравка или ћете морати да инсталирате ручно.</string>
<string name="apply_update_dialog_message_ab">Биће инсталирано <xliff:g id="update_name">%1$s</xliff:g>.\n\nАко додирнете <xliff:g id="ok">%2$s</xliff:g>, уређај ће почети инсталацијуу позадини.\n\nКада буде завршено биће понуђено рестартовање.</string>
<string name="cancel_installation_dialog_message">Откажи инсталацију?</string> <string name="cancel_installation_dialog_message">Откажи инсталацију?</string>
<string name="label_download_url">URL адреса за преузимање</string> <string name="label_download_url">URL адреса за преузимање</string>
<string name="toast_download_url_copied">URL Копиран</string> <string name="toast_download_url_copied">URL Копиран</string>

View File

@@ -22,8 +22,10 @@
<string name="download_paused_error_notification">Nedladdningsfel</string> <string name="download_paused_error_notification">Nedladdningsfel</string>
<string name="download_completed_notification">Nedladdning slutförd</string> <string name="download_completed_notification">Nedladdning slutförd</string>
<string name="download_starting_notification">Påbörjar nedladdning</string> <string name="download_starting_notification">Påbörjar nedladdning</string>
<string name="update_failed_notification">Uppdateringen misslyckades</string>
<string name="new_updates_found_title">Nya uppdateringar</string> <string name="new_updates_found_title">Nya uppdateringar</string>
<string name="text_download_speed">%1$s, %2$s/s</string> <string name="text_download_speed">%1$s, %2$s/s</string>
<string name="pause_button">Pausa</string>
<string name="resume_button">Återuppta</string> <string name="resume_button">Återuppta</string>
<string name="installing_update">Installerar uppdateringspaketet</string> <string name="installing_update">Installerar uppdateringspaketet</string>
<string name="installing_update_error">Installationsfel</string> <string name="installing_update_error">Installationsfel</string>
@@ -42,12 +44,14 @@
<string name="snack_updates_found">Nya uppdateringar hittades</string> <string name="snack_updates_found">Nya uppdateringar hittades</string>
<string name="snack_no_updates_found">Inga nya uppdateringar hittades</string> <string name="snack_no_updates_found">Inga nya uppdateringar hittades</string>
<string name="snack_download_verified">Nedladdningen är slutförd.</string> <string name="snack_download_verified">Nedladdningen är slutförd.</string>
<string name="snack_update_not_installable">Uppdateringen kan inte installeras över den nuvarande versionen.</string>
<string name="header_title_text">LineageOS\n%1$s</string> <string name="header_title_text">LineageOS\n%1$s</string>
<string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string> <string name="header_android_version">Android <xliff:g id="version" example="7.1.2">%1$s</xliff:g></string>
<string name="header_last_updates_check">Senaste kontrollen utfördes: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Senaste kontrollen utfördes: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> av <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> av <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> av <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Verifierar uppdateringen</string> <string name="list_verifying_update">Verifierar uppdateringen</string>
<string name="action_download">Ladda ner</string> <string name="action_download">Ladda ner</string>
<string name="action_pause">Pausa</string> <string name="action_pause">Pausa</string>
@@ -57,12 +61,33 @@
<string name="action_delete">Radera</string> <string name="action_delete">Radera</string>
<string name="action_cancel">Avbryt</string> <string name="action_cancel">Avbryt</string>
<string name="confirm_delete_dialog_title">Ta bort fil</string> <string name="confirm_delete_dialog_title">Ta bort fil</string>
<string name="apply_update_dialog_message">Du är på väg att uppdatera <xliff:g id="update_name">%1$s</xliff:g>.\n\nOm du trycker på <xliff:g id="ok">%2$s</xliff:g> så kommer enheten att starta om sig själv till återställningsläget för att installera uppdateringen.\n\nNotera: Den här funktionen kräver ett kompatibelt återställningsläge. Finns inte detta kommer du behöva installera uppdateringarna manuellt.</string>
<string name="apply_update_dialog_message_ab">Du är på väg att uppdatera <xliff:g id="update_name">%1$s</xliff:g>.\n\nOm du trycker på <xliff:g id="ok">%2$s</xliff:g> så kommer enheten att påbörja installationen i bakgrunden.\n\nNär den är slutförd kommer du bli ombedd att starta om.</string>
<string name="label_download_url">Nedladdningsadress</string> <string name="label_download_url">Nedladdningsadress</string>
<string name="toast_download_url_copied">Webbadressen har kopierats</string> <string name="toast_download_url_copied">Webbadressen har kopierats</string>
<string name="notification_export_success">Uppdatering exporterad</string>
<string name="notification_export_fail">Exporteringsfel</string> <string name="notification_export_fail">Exporteringsfel</string>
<string name="toast_export_started">Exportering startad</string>
<plurals name="eta_seconds">
<item quantity="one">1 sekund kvar</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> sekunder kvar</item>
</plurals>
<plurals name="eta_minutes">
<item quantity="one">1 minut kvar</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> minuter kvar</item>
</plurals>
<plurals name="eta_hours">
<item quantity="one">1 timme kvar</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> timmar kvar</item>
</plurals>
<string name="update_on_mobile_data_title">Varning</string> <string name="update_on_mobile_data_title">Varning</string>
<string name="update_on_mobile_data_message">Du är på väg att ladda ner en uppdatering över mobilnätet vilket troligtvis kommer att orsaka hög dataanvändning. Vill du fortsätta?</string>
<string name="checkbox_mobile_data_warning">Visa inte igen</string> <string name="checkbox_mobile_data_warning">Visa inte igen</string>
<string name="menu_mobile_data_warning">Mobildatavarning</string>
<string name="export_channel_title">Export slutförd</string> <string name="export_channel_title">Export slutförd</string>
<string name="new_updates_channel_title">Nya uppdateringar</string> <string name="new_updates_channel_title">Nya uppdateringar</string>
<string name="ongoing_channel_title">Pågående nedladdningar</string> <string name="ongoing_channel_title">Pågående nedladdningar</string>
<string name="info_dialog_title">Visste du att?</string>
<string name="info_dialog_message">LineageOS-uppdateringar är kompletta installationspaket, vilket innebär att du alltid kan installera den senaste uppdateringen, även om du hoppade över några däremellan!</string>
<string name="info_dialog_ok">Tack för infon!</string>
</resources> </resources>

View File

@@ -61,8 +61,6 @@
<string name="snack_download_verified">ดาวน์โหลดเสร็จสมบูรณ์</string> <string name="snack_download_verified">ดาวน์โหลดเสร็จสมบูรณ์</string>
<string name="snack_update_not_installable">การอัปเดตนี้ไม่สามารถติดตั้งบนบิลด์ปัจจุบัน</string> <string name="snack_update_not_installable">การอัปเดตนี้ไม่สามารถติดตั้งบนบิลด์ปัจจุบัน</string>
<string name="header_last_updates_check">ตรวจสอบล่าสุด: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">ตรวจสอบล่าสุด: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> ของ <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> สำหรับ <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>) • <xliff:g id="percentage" example="56">%4$s</xliff:g></string>
<string name="list_verifying_update">กำลังตรวจสอบการอัปเดต</string> <string name="list_verifying_update">กำลังตรวจสอบการอัปเดต</string>
<string name="list_no_updates">ไม่พบการอัปเดตใหม่ หากต้องการตรวจสอบการอัปเดตใหม่ด้วยตนเองให้ใช้ปุ่มรีเฟรช</string> <string name="list_no_updates">ไม่พบการอัปเดตใหม่ หากต้องการตรวจสอบการอัปเดตใหม่ด้วยตนเองให้ใช้ปุ่มรีเฟรช</string>
<string name="action_download">ดาวน์โหลด</string> <string name="action_download">ดาวน์โหลด</string>
@@ -75,8 +73,6 @@
<string name="confirm_delete_dialog_title">ลบไฟล์</string> <string name="confirm_delete_dialog_title">ลบไฟล์</string>
<string name="confirm_delete_dialog_message">ลบไฟล์การอัปเดตที่เลือกไว้หรือไม่</string> <string name="confirm_delete_dialog_message">ลบไฟล์การอัปเดตที่เลือกไว้หรือไม่</string>
<string name="apply_update_dialog_title">ใช้การอัปเดต</string> <string name="apply_update_dialog_title">ใช้การอัปเดต</string>
<string name="apply_update_dialog_message">คุณกำลังจะอัปเกรดเป็น <xliff:g id="update_name">%1$s</xliff:g>.\n\nถ้าคุณกด <xliff:g id="ok">%2$s</xliff:g>, อุปกรณ์จะเริ่มต้นใหม่ในโหมดกู้คืนเพื่อติดตั้งไฟล์อัปเดต\n\nหมายเหตุ: ฟีเจอร์นี้ต้องการระบบกู้คืนที่ถูกรองรับ ไม่งั้นผู้ใช้จะต้องติดตั้งการอัปเดตด้วยตนเอง</string>
<string name="apply_update_dialog_message_ab">คุณกำลังจะอัปเกรดเป็น <xliff:g id="update_name">%1$s</xliff:g>.\n\nถ้าคุณกด <xliff:g id="ok">%2$s</xliff:g>, อุปกรณ์จะเริ่มติดตั้งในพื้นหลัง\n\nเมื่อเสร็จสิ้นคุณจะได้รับแจ้งให้รีบูต</string>
<string name="cancel_installation_dialog_message">ยกเลิกการติดตั้งหรือไม่</string> <string name="cancel_installation_dialog_message">ยกเลิกการติดตั้งหรือไม่</string>
<string name="label_download_url">ดาวน์โหลด URL</string> <string name="label_download_url">ดาวน์โหลด URL</string>
<string name="toast_download_url_copied">คัดลอก URL แล้ว</string> <string name="toast_download_url_copied">คัดลอก URL แล้ว</string>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">Son kontrol zamanı: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Son kontrol zamanı: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Güncelleme doğrulanıyor</string> <string name="list_verifying_update">Güncelleme doğrulanıyor</string>
<string name="list_no_updates">Yeni güncelleme bulunamadı. El ile yeni güncellemeleri kontrol etmek için Yenile tuşunu kullanın.</string> <string name="list_no_updates">Yeni güncelleme bulunamadı. El ile yeni güncellemeleri kontrol etmek için Yenile tuşunu kullanın.</string>
<string name="action_download">İndir</string> <string name="action_download">İndir</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">Dosya sil</string> <string name="confirm_delete_dialog_title">Dosya sil</string>
<string name="confirm_delete_dialog_message">Seçilen güncelleme dosyası silinsin mi?</string> <string name="confirm_delete_dialog_message">Seçilen güncelleme dosyası silinsin mi?</string>
<string name="apply_update_dialog_title">Güncellemeyi uygula</string> <string name="apply_update_dialog_title">Güncellemeyi uygula</string>
<string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> yükseltmek üzeresiniz.\n\n<xliff:g id="ok">%2$s</xliff:g> bastığınızda, güncellemeyi yüklemek için cihaz kurtarma modun da yeniden başlatılacak.\n\nNot: Bu özellik uyumlu bir Kurtarma bölümü gerektirir veya güncellemelerin el ile kurulması gerekir.</string> <string name="apply_update_dialog_message"><xliff:g id="update_name">%1$s</xliff:g> yüklemek üzeresiniz.\n\n<xliff:g id="ok">%2$s</xliff:g> bastığınızda, güncellemeyi yüklemek için cihaz kurtarma modunda yeniden başlatılacak.\n\nNot: Bu özellik uyumlu bir Kurtarma bölümü gerektirir veya güncellemelerin el ile kurulması gerekir.</string>
<string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> yükseltmek üzeresiniz.\n\n<xliff:g id="ok">%2$s</xliff:g> tuşuna basarsanız, cihaz arka planda yüklemeye başlayacaktır.\n\nİşlem tamamlandığında, yeniden başlatmanız istenir.</string> <string name="apply_update_dialog_message_ab"><xliff:g id="update_name">%1$s</xliff:g> yüklemek üzeresiniz.\n\n<xliff:g id="ok">%2$s</xliff:g> tuşuna basarsanız, cihaz arka planda yüklemeye başlayacaktır.\n\nİşlem tamamlandığında, yeniden başlatmanız istenir.</string>
<string name="cancel_installation_dialog_message">Yükleme iptal edilsin mi?</string> <string name="cancel_installation_dialog_message">Yükleme iptal edilsin mi?</string>
<string name="label_download_url">İndirme bağlantısı</string> <string name="label_download_url">İndirme bağlantısı</string>
<string name="toast_download_url_copied">Bağlantı kopyalandı</string> <string name="toast_download_url_copied">Bağlantı kopyalandı</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">Dışa aktarılan güncelleme</string> <string name="notification_export_success">Dışa aktarılan güncelleme</string>
<string name="notification_export_fail">Dışa aktarma hatası</string> <string name="notification_export_fail">Dışa aktarma hatası</string>
<string name="toast_already_exporting">Zaten bir güncelleme dışa aktarılıyor</string> <string name="toast_already_exporting">Zaten bir güncelleme dışa aktarılıyor</string>
<string name="toast_export_started">Dışa aktarma başladı</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 saniye kaldı</item> <item quantity="one">1 saniye kaldı</item>
<item quantity="other"><xliff:g id="count">%d</xliff:g> saniye kaldı</item> <item quantity="other"><xliff:g id="count">%d</xliff:g> saniye kaldı</item>
@@ -112,4 +113,7 @@
<string name="new_updates_channel_title">Yeni güncellemeler</string> <string name="new_updates_channel_title">Yeni güncellemeler</string>
<string name="ongoing_channel_title">Devam eden indirmeler</string> <string name="ongoing_channel_title">Devam eden indirmeler</string>
<string name="update_failed_channel_title">Güncelleme başarısız</string> <string name="update_failed_channel_title">Güncelleme başarısız</string>
<string name="info_dialog_title">Biliyor musun?</string>
<string name="info_dialog_message">LineageOS güncellemeleri tam yükleme paketleridir. Bu demektir ki güncelleme atlamış olsanız bile her zaman sadece son güncellemeyi kurabilirsiniz!</string>
<string name="info_dialog_ok">Bilgi için teşekkürler!</string>
</resources> </resources>

View File

@@ -34,13 +34,22 @@
<string name="finalizing_package">Завершення встановлення</string> <string name="finalizing_package">Завершення встановлення</string>
<string name="preparing_ota_first_boot">Підготовка до першого завантаження</string> <string name="preparing_ota_first_boot">Підготовка до першого завантаження</string>
<string name="dialog_prepare_zip_message">Підготовка оновлення</string> <string name="dialog_prepare_zip_message">Підготовка оновлення</string>
<string name="dialog_battery_low_title">Низький заряд батареї</string>
<string name="reboot">Перезавантаження</string> <string name="reboot">Перезавантаження</string>
<string name="menu_refresh">Оновити</string> <string name="menu_refresh">Оновити</string>
<string name="menu_auto_updates_check">Автоматична перевірка оновлень</string> <string name="menu_preferences">Параметри</string>
<string name="menu_auto_updates_check">Автоперевірка оновлень</string>
<string name="menu_auto_updates_check_interval_daily">Щодня</string>
<string name="menu_auto_updates_check_interval_weekly">Щотижня</string>
<string name="menu_auto_updates_check_interval_monthly">Щомісяця</string>
<string name="menu_auto_updates_check_interval_never">Ніколи</string>
<string name="menu_auto_delete_updates">Видалити файли оновлення після інсталяції</string> <string name="menu_auto_delete_updates">Видалити файли оновлення після інсталяції</string>
<string name="menu_delete_update">Видалити</string> <string name="menu_delete_update">Видалити</string>
<string name="menu_copy_url">Копіювати URL</string> <string name="menu_copy_url">Копіювати URL</string>
<string name="menu_export_update">Експорт оновлення</string> <string name="menu_export_update">Експорт оновлення</string>
<string name="menu_show_changelog">Журнал змін</string>
<string name="menu_update_recovery">Оновити режим відновлення</string>
<string name="toast_forced_update_recovery">Неможливо вимкнути оновлення режиму відновлення Lineage на цьому пристрої.</string>
<string name="snack_updates_found">Знайдено оновлення</string> <string name="snack_updates_found">Знайдено оновлення</string>
<string name="snack_no_updates_found">Оновлень не знайдено</string> <string name="snack_no_updates_found">Оновлень не знайдено</string>
<string name="snack_updates_check_failed">Перевірка оновлення не вдалася. Будь-ласка перевірте з’єднання з мережею і спробуйте ще раз.</string> <string name="snack_updates_check_failed">Перевірка оновлення не вдалася. Будь-ласка перевірте з’єднання з мережею і спробуйте ще раз.</string>
@@ -53,19 +62,40 @@
<string name="header_last_updates_check">Остання перевірка: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Остання перевірка: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Перевірка оновлення</string> <string name="list_verifying_update">Перевірка оновлення</string>
<string name="list_no_updates">Оновлень не знайдено. Щоб вручну перевірити наявність оновлень, натисніть кнопку Оновити.</string> <string name="list_no_updates">Оновлень не знайдено. Щоб вручну перевірити наявність оновлень, натисніть кнопку Оновити.</string>
<string name="action_download">Завантажити</string> <string name="action_download">Завантажити</string>
<string name="action_install">Встановити</string>
<string name="action_cancel">Скасувати</string>
<string name="confirm_delete_dialog_title">Видалити файл</string> <string name="confirm_delete_dialog_title">Видалити файл</string>
<string name="confirm_delete_dialog_message">Видалити обраний файл оновлення?</string> <string name="confirm_delete_dialog_message">Видалити обраний файл оновлення?</string>
<string name="apply_update_dialog_title">Застосувати оновлення</string> <string name="apply_update_dialog_title">Застосувати оновлення</string>
<string name="apply_update_dialog_message">Ви збираєтесь оновитись на <xliff:g id="update_name">%1$s</xliff:g>.\n\nЯкщо Ви натиснете <xliff:g id="ok">%2$s</xliff:g>, пристрій перезавантажиться у Recovery для встановлення.\n\nПримітка: ця функція потребує сумісне Recovery, в іншому випадку оновлення необхідно встановити вручну.</string> <string name="apply_update_dialog_message">Ви збираєтеся встановити <xliff:g id="update_name">%1$s</xliff:g>.\n\nНатисніть <xliff:g id="ok">%2$s</xliff:g>, щоб пристрій перезапустився в режимі відновлення й встановив оновлення.\n\nУвага: цій функції потрібен сумісний режим відновлення, інакше оновлення доведеться встановити вручну.</string>
<string name="apply_update_dialog_message_ab">Ви збираєтесь оновитись на <xliff:g id="update_name">%1$s</xliff:g>.\n\nЯкщо ви натиснети на <xliff:g id="ok">%2$s</xliff:g>, пристрій почне встановлення у фоновому режимі.\n\nПісля встановлення вам буде запропоновано перезавантажити пристрій.</string> <string name="cancel_installation_dialog_message">Скасувати встановлення?</string>
<string name="label_download_url">URL-адреса завантаження</string> <string name="label_download_url">URL-адреса завантаження</string>
<string name="toast_download_url_copied">URL-адресу скопійовано</string> <string name="toast_download_url_copied">URL-адресу скопійовано</string>
<string name="dialog_export_title">Експорт оновлення</string> <string name="dialog_export_title">Експорт оновлення</string>
<string name="notification_export_success">Оновлення експортовано</string> <string name="notification_export_success">Оновлення експортовано</string>
<string name="notification_export_fail">Помилка експорту</string> <string name="notification_export_fail">Помилка експорту</string>
<plurals name="eta_seconds">
<item quantity="one">ще секунда</item>
<item quantity="few">ще <xliff:g id="count">%d</xliff:g> секунди</item>
<item quantity="many">ще <xliff:g id="count">%d</xliff:g> секунд</item>
<item quantity="other">ще <xliff:g id="count">%d</xliff:g> секунд</item>
</plurals>
<plurals name="eta_minutes">
<item quantity="one">ще хвилина</item>
<item quantity="few">ще <xliff:g id="count">%d</xliff:g> хвилини</item>
<item quantity="many">ще <xliff:g id="count">%d</xliff:g> хвилин</item>
<item quantity="other">ще <xliff:g id="count">%d</xliff:g> хвилин</item>
</plurals>
<plurals name="eta_hours">
<item quantity="one">ще година</item>
<item quantity="few">ще <xliff:g id="count">%d</xliff:g> години</item>
<item quantity="many">ще <xliff:g id="count">%d</xliff:g> годин</item>
<item quantity="other">ще <xliff:g id="count">%d</xliff:g> годин</item>
</plurals>
<string name="update_on_mobile_data_title">Попередження</string> <string name="update_on_mobile_data_title">Попередження</string>
<string name="update_on_mobile_data_message">Ви збираєтесь завантажити пакет оновлень за допомогою мобільних даних, що ймовірно призведе до високого використання мобільного трафіку. Хочете продовжити?</string> <string name="update_on_mobile_data_message">Ви збираєтесь завантажити пакет оновлень за допомогою мобільних даних, що ймовірно призведе до високого використання мобільного трафіку. Хочете продовжити?</string>
<string name="checkbox_mobile_data_warning">Не показувати знову</string> <string name="checkbox_mobile_data_warning">Не показувати знову</string>

View File

@@ -25,10 +25,12 @@
<string name="download_completed_notification">Tải xuống hoàn tất</string> <string name="download_completed_notification">Tải xuống hoàn tất</string>
<string name="download_starting_notification">Đang bắt đầu tải xuống</string> <string name="download_starting_notification">Đang bắt đầu tải xuống</string>
<string name="update_failed_notification">Cập nhật thất bại</string> <string name="update_failed_notification">Cập nhật thất bại</string>
<string name="installation_suspended_notification">Cài đặt đã ngừng</string>
<string name="new_updates_found_title">Bản cập nhật mới</string> <string name="new_updates_found_title">Bản cập nhật mới</string>
<string name="text_download_speed">%1$s, %2$s/giây</string> <string name="text_download_speed">%1$s, %2$s/giây</string>
<string name="pause_button">Tạm dừng</string> <string name="pause_button">Tạm dừng</string>
<string name="resume_button">Tiếp tục</string> <string name="resume_button">Tiếp tục</string>
<string name="suspend_button">Tạm dừng</string>
<string name="installing_update">Đang cài đặt gói cập nhật</string> <string name="installing_update">Đang cài đặt gói cập nhật</string>
<string name="installing_update_error">Lỗi cài đặt</string> <string name="installing_update_error">Lỗi cài đặt</string>
<string name="installing_update_finished">Đã cài đặt bản cập nhật</string> <string name="installing_update_finished">Đã cài đặt bản cập nhật</string>
@@ -41,12 +43,18 @@
<string name="menu_refresh">Làm mới</string> <string name="menu_refresh">Làm mới</string>
<string name="menu_preferences">Tùy chỉnh</string> <string name="menu_preferences">Tùy chỉnh</string>
<string name="menu_auto_updates_check">Tự động kiểm tra bản cập nhật</string> <string name="menu_auto_updates_check">Tự động kiểm tra bản cập nhật</string>
<string name="menu_auto_updates_check_interval_daily">Mỗi ngày một lần</string>
<string name="menu_auto_updates_check_interval_weekly">Mỗi tuần một lần</string>
<string name="menu_auto_updates_check_interval_monthly">Mỗi tháng một lần</string>
<string name="menu_auto_updates_check_interval_never">Không bao giờ</string>
<string name="menu_auto_delete_updates">Xóa bản cập nhật khi cài đặt hoàn tất</string> <string name="menu_auto_delete_updates">Xóa bản cập nhật khi cài đặt hoàn tất</string>
<string name="menu_delete_update">Xóa</string> <string name="menu_delete_update">Xóa</string>
<string name="menu_copy_url">Sao chép URL</string> <string name="menu_copy_url">Sao chép URL</string>
<string name="menu_export_update">Xuất bản cập nhật</string> <string name="menu_export_update">Xuất bản cập nhật</string>
<string name="menu_show_changelog">Hiển thị nhật ký thay đổi</string> <string name="menu_show_changelog">Hiển thị nhật ký thay đổi</string>
<string name="menu_ab_perf_mode">Ưu tiên quá trình cập nhật</string> <string name="menu_ab_perf_mode">Ưu tiên quá trình cập nhật</string>
<string name="menu_update_recovery">Cập nhật recovery</string>
<string name="toast_forced_update_recovery">Không thể tắt các bản cập nhật Lineage Recovery trên thiết bị này.</string>
<string name="snack_updates_found">Đã tìm thấy bản cập nhật mới</string> <string name="snack_updates_found">Đã tìm thấy bản cập nhật mới</string>
<string name="snack_no_updates_found">Không tìm thấy bản cập nhật mới</string> <string name="snack_no_updates_found">Không tìm thấy bản cập nhật mới</string>
<string name="snack_updates_check_failed">Kiểm tra bản cập nhật không thành công. Vui lòng kiểm tra kết nối internet của bạn và thử lại sau.</string> <string name="snack_updates_check_failed">Kiểm tra bản cập nhật không thành công. Vui lòng kiểm tra kết nối internet của bạn và thử lại sau.</string>
@@ -59,8 +67,8 @@
<string name="header_last_updates_check">Lần kiểm tra cuối: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">Lần kiểm tra cuối: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> của <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> của <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> của <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Đang xác thực bản cập nhật</string> <string name="list_verifying_update">Đang xác thực bản cập nhật</string>
<string name="list_no_updates">Không có bản cập nhật mới được tìm thấy. Để tự động kiểm tra các bản cập nhật mới, sử dụng nút Làm mới.</string> <string name="list_no_updates">Không có bản cập nhật mới được tìm thấy. Để tự động kiểm tra các bản cập nhật mới, sử dụng nút Làm mới.</string>
<string name="action_download">Tải xuống</string> <string name="action_download">Tải xuống</string>
@@ -73,8 +81,8 @@
<string name="confirm_delete_dialog_title">Xoá tập tin</string> <string name="confirm_delete_dialog_title">Xoá tập tin</string>
<string name="confirm_delete_dialog_message">Xóa các tập tin cập nhật được chọn?</string> <string name="confirm_delete_dialog_message">Xóa các tập tin cập nhật được chọn?</string>
<string name="apply_update_dialog_title">Áp dụng cập nhật</string> <string name="apply_update_dialog_title">Áp dụng cập nhật</string>
<string name="apply_update_dialog_message">Bạn sắp nâng cấp lên <xliff:g id="update_name">%1$s</xliff:g>.\n\nNếu bạn chạm <xliff:g id="ok">%2$s</xliff:g>, thiết bị sẽ tự động khởi động lại trong chế độ phục hồi để cài đặt bản cập nhật.\n\nLưu ý: Tính năng này yêu cầu Bản Khôi Phục tương ứng hoặc các bản cập nhật sẽ cần phải được cài đặt thủ công.</string> <string name="apply_update_dialog_message">Bạn sắp cài đặt <xliff:g id="update_name">%1$s</xliff:g>.\n\nNếu bạn nhấn <xliff:g id="ok">%2$s</xliff:g>, thiết bị sẽ tự khởi động lại chế độ khôi phục để cài đặt bản cập nhật.\n\nLưu ý: Tính năng này yêu cầu Trình phục hồi tương thích hoặc các bản cập nhật sẽ cần được cài đặt theo cách thủ công.</string>
<string name="apply_update_dialog_message_ab">Bạn sắp nâng cấp lên <xliff:g id="update_name">%1$s</xliff:g>.\n\nNếu bạn chạm <xliff:g id="ok">%2$s</xliff:g>, thiết bị sẽ bắt đầu cài đặt ở chế độ nền.\n\nSau khi hoàn tất, bạn sẽ được nhắc khởi động lại.</string> <string name="apply_update_dialog_message_ab">Bạn sắp cài đặt <xliff:g id="update_name">%1$s</xliff:g>.\n\nNếu bạn nhấn <xliff:g id="ok">%2$s</xliff:g>, thiết bị sẽ bắt đầu cài đặt trong nền.\n\nSau khi hoàn tất, bạn sẽ được nhắc khởi động lại.</string>
<string name="cancel_installation_dialog_message">Huỷ cài đặt?</string> <string name="cancel_installation_dialog_message">Huỷ cài đặt?</string>
<string name="label_download_url">Tải xuống URL</string> <string name="label_download_url">Tải xuống URL</string>
<string name="toast_download_url_copied">Đã sao chép URL</string> <string name="toast_download_url_copied">Đã sao chép URL</string>
@@ -82,6 +90,7 @@
<string name="notification_export_success">Đã xuất bản cập nhật</string> <string name="notification_export_success">Đã xuất bản cập nhật</string>
<string name="notification_export_fail">Lỗi xuất</string> <string name="notification_export_fail">Lỗi xuất</string>
<string name="toast_already_exporting">Đã xuất một bản cập nhật</string> <string name="toast_already_exporting">Đã xuất một bản cập nhật</string>
<string name="toast_export_started">Đã bắt đầu xuất</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="other">Còn lại <xliff:g id="count">%d</xliff:g> giây</item> <item quantity="other">Còn lại <xliff:g id="count">%d</xliff:g> giây</item>
</plurals> </plurals>
@@ -101,4 +110,7 @@
<string name="new_updates_channel_title">Bản cập nhật mới</string> <string name="new_updates_channel_title">Bản cập nhật mới</string>
<string name="ongoing_channel_title">Đang tải xuống</string> <string name="ongoing_channel_title">Đang tải xuống</string>
<string name="update_failed_channel_title">Cập nhật thất bại</string> <string name="update_failed_channel_title">Cập nhật thất bại</string>
<string name="info_dialog_title">Bạn có biết?</string>
<string name="info_dialog_message">Bản cập nhật LineageOS là gói cài đặt đầy đủ. Điều đó có nghĩa là bạn luôn có thể chỉ cài đặt bản cập nhật mới nhất, ngay cả khi bạn đã bỏ qua một số bản cập nhật ở giữa!</string>
<string name="info_dialog_ok">Cảm ơn bạn đã thông tin!</string>
</resources> </resources>

View File

@@ -38,7 +38,7 @@
<string name="preparing_ota_first_boot">正在为第一次启动进行准备</string> <string name="preparing_ota_first_boot">正在为第一次启动进行准备</string>
<string name="dialog_prepare_zip_message">预备更新准备</string> <string name="dialog_prepare_zip_message">预备更新准备</string>
<string name="dialog_battery_low_title">低电量</string> <string name="dialog_battery_low_title">低电量</string>
<string name="dialog_battery_low_message_pct">池电量过低,您需要至少 <xliff:g id="percent_discharging">%1$d</xliff:g>%% 的电量才能继续;如果正在充电,则需要 <xliff:g id="percent_charging">%2$d</xliff:g>%% 的电量才能继续。</string> <string name="dialog_battery_low_message_pct">电量过低,您需要至少 <xliff:g id="percent_discharging">%1$d</xliff:g>%% 的电量才能继续;如果正在充电,则需要 <xliff:g id="percent_charging">%2$d</xliff:g>%% 的电量才能继续。</string>
<string name="reboot">重新启动</string> <string name="reboot">重新启动</string>
<string name="menu_refresh">刷新</string> <string name="menu_refresh">刷新</string>
<string name="menu_preferences">首选项</string> <string name="menu_preferences">首选项</string>
@@ -67,8 +67,8 @@
<string name="header_last_updates_check">最后检查: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">最后检查: <xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer">已下载 <xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g>,共 <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> / <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer">已下载 <xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g>,共 <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">正在验证更新</string> <string name="list_verifying_update">正在验证更新</string>
<string name="list_no_updates">未找到更新。要手动检查更新,请使用刷新按钮。</string> <string name="list_no_updates">未找到更新。要手动检查更新,请使用刷新按钮。</string>
<string name="action_download">下载</string> <string name="action_download">下载</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">删除文件</string> <string name="confirm_delete_dialog_title">删除文件</string>
<string name="confirm_delete_dialog_message">您确定要删除选择的更新文件?</string> <string name="confirm_delete_dialog_message">您确定要删除选择的更新文件?</string>
<string name="apply_update_dialog_title">应用更新</string> <string name="apply_update_dialog_title">应用更新</string>
<string name="apply_update_dialog_message">您将要更新到 <xliff:g id="update_name">%1$s</xliff:g>。\n\n如果您按下<xliff:g id="ok">%2$s</xliff:g>,您的设备将会重启到恢复模式并安装更新。\n\n注意此功能需要一个兼容的恢复程序否则您将需要手动安装更新。</string> <string name="apply_update_dialog_message">您将要安装 <xliff:g id="update_name">%1$s</xliff:g>。\n\n如果您按下<xliff:g id="ok">%2$s</xliff:g>,您的设备将会重启到恢复模式并安装更新。\n\n注意此功能需要一个兼容的恢复程序否则您将需要手动安装更新。</string>
<string name="apply_update_dialog_message_ab">您将要升级到 <xliff:g id="update_name">%1$s</xliff:g>。\n\n如果您按下<xliff:g id="ok">%2$s</xliff:g>,设备将会在后台进行安装。\n\n当安装完毕后将会提示您重新启动。</string> <string name="apply_update_dialog_message_ab">您将要安装 <xliff:g id="update_name">%1$s</xliff:g>。\n\n如果您按下<xliff:g id="ok">%2$s</xliff:g>,设备将会在后台进行安装。\n\n当安装完毕后将会提示您重新启动。</string>
<string name="cancel_installation_dialog_message">是否取消安装?</string> <string name="cancel_installation_dialog_message">是否取消安装?</string>
<string name="label_download_url">下载地址</string> <string name="label_download_url">下载地址</string>
<string name="toast_download_url_copied">地址已复制</string> <string name="toast_download_url_copied">地址已复制</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">更新已导出</string> <string name="notification_export_success">更新已导出</string>
<string name="notification_export_fail">导出错误</string> <string name="notification_export_fail">导出错误</string>
<string name="toast_already_exporting">已导出更新</string> <string name="toast_already_exporting">已导出更新</string>
<string name="toast_export_started">导出已开始</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="other">剩余 <xliff:g id="count">%d</xliff:g></item> <item quantity="other">剩余 <xliff:g id="count">%d</xliff:g></item>
</plurals> </plurals>
@@ -109,4 +110,7 @@
<string name="new_updates_channel_title">新的更新</string> <string name="new_updates_channel_title">新的更新</string>
<string name="ongoing_channel_title">正在下载</string> <string name="ongoing_channel_title">正在下载</string>
<string name="update_failed_channel_title">更新失败</string> <string name="update_failed_channel_title">更新失败</string>
<string name="info_dialog_title">您知道吗?</string>
<string name="info_dialog_message">LineageOS 更新包是完整的安装包。这意味着您总是可以跳过之前的系统更新,直接安装最新版本!</string>
<string name="info_dialog_ok">感谢您的反馈!</string>
</resources> </resources>

View File

@@ -67,8 +67,8 @@
<string name="header_last_updates_check">上次檢查:<xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string> <string name="header_last_updates_check">上次檢查:<xliff:g id="date" example="1 January 1970">%1$s</xliff:g> (<xliff:g id="time" example="01:23">%2$s</xliff:g>)</string>
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g>-<xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g>-<xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">正在驗證更新</string> <string name="list_verifying_update">正在驗證更新</string>
<string name="list_no_updates">沒有找到新的更新。若要手動檢查新的更新,請使用「重新整理」按鍵。</string> <string name="list_no_updates">沒有找到新的更新。若要手動檢查新的更新,請使用「重新整理」按鍵。</string>
<string name="action_download">下載</string> <string name="action_download">下載</string>
@@ -81,8 +81,8 @@
<string name="confirm_delete_dialog_title">刪除檔案</string> <string name="confirm_delete_dialog_title">刪除檔案</string>
<string name="confirm_delete_dialog_message">刪除已選擇的更新檔案?</string> <string name="confirm_delete_dialog_message">刪除已選擇的更新檔案?</string>
<string name="apply_update_dialog_title">套用更新</string> <string name="apply_update_dialog_title">套用更新</string>
<string name="apply_update_dialog_message">您將更新至 <xliff:g id="update_name">%1$s</xliff:g>。\n\n如果您按下 「<xliff:g id="ok">%2$s</xliff:g>」,裝置將重新啟動進入 Recovery 模式並安裝更新。\n\n注意這項功能需要相容的 Recovery否則將需要手動安裝更新。</string> <string name="apply_update_dialog_message">您將要安裝 <xliff:g id="update_name">%1$s</xliff:g>。\n\n如果您按下 「<xliff:g id="ok">%2$s</xliff:g>」,裝置將重新啟動進入 Recovery 模式並安裝更新。\n\n注意這項功能需要相容的 Recovery否則將需要手動安裝更新。</string>
<string name="apply_update_dialog_message_ab">您將要升級到 <xliff:g id="update_name">%1$s</xliff:g>。\n\n如果您按下「<xliff:g id="ok">%2$s</xliff:g>」,裝置將在背景進行安裝。\n\n如安裝完成將會提示重新啟動</string> <string name="apply_update_dialog_message_ab">您將要安裝 <xliff:g id="update_name">%1$s</xliff:g>。\n\n如果您按下「<xliff:g id="ok">%2$s</xliff:g>」,裝置將在背景進行安裝。\n\n如安裝完成將會提示重新啟動</string>
<string name="cancel_installation_dialog_message">取消安裝?</string> <string name="cancel_installation_dialog_message">取消安裝?</string>
<string name="label_download_url">下載網址</string> <string name="label_download_url">下載網址</string>
<string name="toast_download_url_copied">網址已複製</string> <string name="toast_download_url_copied">網址已複製</string>
@@ -90,6 +90,7 @@
<string name="notification_export_success">已匯出更新</string> <string name="notification_export_success">已匯出更新</string>
<string name="notification_export_fail">匯出錯誤</string> <string name="notification_export_fail">匯出錯誤</string>
<string name="toast_already_exporting">已匯出更新</string> <string name="toast_already_exporting">已匯出更新</string>
<string name="toast_export_started">匯出已開始</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="other">還剩 <xliff:g id="count">%d</xliff:g> 秒鐘</item> <item quantity="other">還剩 <xliff:g id="count">%d</xliff:g> 秒鐘</item>
</plurals> </plurals>
@@ -109,4 +110,7 @@
<string name="new_updates_channel_title">有新的更新</string> <string name="new_updates_channel_title">有新的更新</string>
<string name="ongoing_channel_title">目前下載</string> <string name="ongoing_channel_title">目前下載</string>
<string name="update_failed_channel_title">更新失敗</string> <string name="update_failed_channel_title">更新失敗</string>
<string name="info_dialog_title">您知道嗎?</string>
<string name="info_dialog_message">LineageOS 的更新為完整的安裝包。 您可以在跳過中間一些更新的情況下,直接安裝最新的版本。</string>
<string name="info_dialog_ok">感謝您的反饋!</string>
</resources> </resources>

View File

@@ -96,8 +96,8 @@
<string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string> <string name="list_build_version">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g></string>
<string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string> <string name="list_build_version_date">LineageOS <xliff:g id="version" example="14.1">%1$s</xliff:g> - <xliff:g id="date" example="July 11, 2017">%2$s</xliff:g></string>
<string name="list_download_progress_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g><xliff:g id="percentage" example="56">%3$s</xliff:g></string> <string name="list_download_progress_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g></string>
<string name="list_download_progress_eta_new"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)<xliff:g id="percentage" example="56">%4$s</xliff:g></string> <string name="list_download_progress_eta_newer"><xliff:g id="filesize_without_unit" example="12.2">%1$s</xliff:g> of <xliff:g id="filesize_without_unit" example="310 MB">%2$s</xliff:g> (<xliff:g id="eta" example="3 minutes left">%3$s</xliff:g>)</string>
<string name="list_verifying_update">Verifying update</string> <string name="list_verifying_update">Verifying update</string>
<string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string> <string name="list_no_updates">No new updates found. To manually check for new updates, use the Refresh button.</string>
@@ -113,8 +113,8 @@
<string name="confirm_delete_dialog_message">Delete the selected update file?</string> <string name="confirm_delete_dialog_message">Delete the selected update file?</string>
<string name="apply_update_dialog_title">Apply update</string> <string name="apply_update_dialog_title">Apply update</string>
<string name="apply_update_dialog_message">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string> <string name="apply_update_dialog_message">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will restart itself in recovery mode to install the update.\n\nNote: This feature requires a compatible Recovery or updates will need to be installed manually.</string>
<string name="apply_update_dialog_message_ab">You are about to upgrade to <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string> <string name="apply_update_dialog_message_ab">You are about to install <xliff:g id="update_name">%1$s</xliff:g>.\n\nIf you press <xliff:g id="ok">%2$s</xliff:g>, the device will begin installing in the background.\n\nOnce completed, you will be prompted to reboot.</string>
<string name="cancel_installation_dialog_message">Cancel the installation?</string> <string name="cancel_installation_dialog_message">Cancel the installation?</string>
@@ -125,6 +125,7 @@
<string name="notification_export_success">Update exported</string> <string name="notification_export_success">Update exported</string>
<string name="notification_export_fail">Export error</string> <string name="notification_export_fail">Export error</string>
<string name="toast_already_exporting">Already exporting an update</string> <string name="toast_already_exporting">Already exporting an update</string>
<string name="toast_export_started">Export started</string>
<plurals name="eta_seconds"> <plurals name="eta_seconds">
<item quantity="one">1 second left</item> <item quantity="one">1 second left</item>
@@ -152,4 +153,8 @@
<string name="new_updates_channel_title">New updates</string> <string name="new_updates_channel_title">New updates</string>
<string name="ongoing_channel_title">Ongoing downloads</string> <string name="ongoing_channel_title">Ongoing downloads</string>
<string name="update_failed_channel_title">Update failed</string> <string name="update_failed_channel_title">Update failed</string>
<string name="info_dialog_title">Did you know?</string>
<string name="info_dialog_message">LineageOS updates are full installation packages. That means you can always install only the latest update, even if you skipped some in between!</string>
<string name="info_dialog_ok">Thanks for the info!</string>
</resources> </resources>

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -17,9 +17,10 @@ package org.lineageos.updater;
import android.app.NotificationChannel; import android.app.NotificationChannel;
import android.app.NotificationManager; import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service; import android.app.Service;
import android.content.ContentResolver;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.IBinder; import android.os.IBinder;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.Log; import android.util.Log;
@@ -40,10 +41,9 @@ public class ExportUpdateService extends Service {
private static final int NOTIFICATION_ID = 16; private static final int NOTIFICATION_ID = 16;
public static final String ACTION_START_EXPORTING = "start_exporting"; public static final String ACTION_START_EXPORTING = "start_exporting";
public static final String ACTION_STOP_EXPORTING = "stop_exporting";
public static final String EXTRA_SOURCE_FILE = "source_file"; public static final String EXTRA_SOURCE_FILE = "source_file";
public static final String EXTRA_DEST_FILE = "dest_file"; public static final String EXTRA_DEST_URI = "dest_uri";
private static final String EXPORT_NOTIFICATION_CHANNEL = private static final String EXPORT_NOTIFICATION_CHANNEL =
"export_notification_channel"; "export_notification_channel";
@@ -51,7 +51,6 @@ public class ExportUpdateService extends Service {
private volatile boolean mIsExporting = false; private volatile boolean mIsExporting = false;
private Thread mExportThread; private Thread mExportThread;
private ExportRunnable mExportRunnable;
@Override @Override
public IBinder onBind(Intent intent) { public IBinder onBind(Intent intent) {
@@ -68,20 +67,9 @@ public class ExportUpdateService extends Service {
} }
mIsExporting = true; mIsExporting = true;
File source = (File) intent.getSerializableExtra(EXTRA_SOURCE_FILE); File source = (File) intent.getSerializableExtra(EXTRA_SOURCE_FILE);
File destination = (File) intent.getSerializableExtra(EXTRA_DEST_FILE); Uri destination = intent.getParcelableExtra(EXTRA_DEST_URI);
startExporting(source, destination); startExporting(source, destination);
} else if (ACTION_STOP_EXPORTING.equals(intent.getAction())) { Toast.makeText(this, R.string.toast_export_started, Toast.LENGTH_SHORT).show();
if (mIsExporting) {
mExportThread.interrupt();
stopForeground(true);
try {
mExportThread.join();
} catch (InterruptedException e) {
Log.e(TAG, "Error while waiting for thread");
}
mExportRunnable.cleanUp();
mIsExporting = false;
}
} else { } else {
Log.e(TAG, "No action specified"); Log.e(TAG, "No action specified");
} }
@@ -94,15 +82,17 @@ public class ExportUpdateService extends Service {
} }
private class ExportRunnable implements Runnable { private class ExportRunnable implements Runnable {
private File mSource; private final ContentResolver mContentResolver;
private File mDestination; private final File mSource;
private FileUtils.ProgressCallBack mProgressCallBack; private final Uri mDestination;
private Runnable mRunnableComplete; private final FileUtils.ProgressCallBack mProgressCallBack;
private Runnable mRunnableFailed; private final Runnable mRunnableComplete;
private final Runnable mRunnableFailed;
private ExportRunnable(File source, File destination, private ExportRunnable(ContentResolver cr, File source, Uri destination,
FileUtils.ProgressCallBack progressCallBack, FileUtils.ProgressCallBack progressCallBack,
Runnable runnableComplete, Runnable runnableFailed) { Runnable runnableComplete, Runnable runnableFailed) {
mContentResolver = cr;
mSource = source; mSource = source;
mDestination = destination; mDestination = destination;
mProgressCallBack = progressCallBack; mProgressCallBack = progressCallBack;
@@ -113,7 +103,7 @@ public class ExportUpdateService extends Service {
@Override @Override
public void run() { public void run() {
try { try {
FileUtils.copyFile(mSource, mDestination, mProgressCallBack); FileUtils.copyFile(mContentResolver, mSource, mDestination, mProgressCallBack);
mIsExporting = false; mIsExporting = false;
if (!mExportThread.isInterrupted()) { if (!mExportThread.isInterrupted()) {
Log.d(TAG, "Completed"); Log.d(TAG, "Completed");
@@ -129,15 +119,11 @@ public class ExportUpdateService extends Service {
stopSelf(); stopSelf();
} }
} }
private void cleanUp() {
mDestination.delete();
}
} }
private void startExporting(File source, File destination) { private void startExporting(File source, Uri destination) {
NotificationManager notificationManager = final String fileName = FileUtils.queryName(getContentResolver(), destination);
(NotificationManager) getSystemService(NOTIFICATION_SERVICE); NotificationManager notificationManager = getSystemService(NotificationManager.class);
NotificationChannel notificationChannel = new NotificationChannel( NotificationChannel notificationChannel = new NotificationChannel(
EXPORT_NOTIFICATION_CHANNEL, EXPORT_NOTIFICATION_CHANNEL,
getString(R.string.export_channel_title), getString(R.string.export_channel_title),
@@ -149,12 +135,9 @@ public class ExportUpdateService extends Service {
NotificationCompat.BigTextStyle notificationStyle = new NotificationCompat.BigTextStyle(); NotificationCompat.BigTextStyle notificationStyle = new NotificationCompat.BigTextStyle();
notificationBuilder.setContentTitle(getString(R.string.dialog_export_title)); notificationBuilder.setContentTitle(getString(R.string.dialog_export_title));
notificationStyle.setBigContentTitle(getString(R.string.dialog_export_title)); notificationStyle.setBigContentTitle(getString(R.string.dialog_export_title));
notificationStyle.bigText(destination.getName()); notificationStyle.bigText(fileName);
notificationBuilder.setStyle(notificationStyle); notificationBuilder.setStyle(notificationStyle);
notificationBuilder.setSmallIcon(R.drawable.ic_system_update); notificationBuilder.setSmallIcon(R.drawable.ic_system_update);
notificationBuilder.addAction(android.R.drawable.ic_media_pause,
getString(android.R.string.cancel),
getStopPendingIntent());
FileUtils.ProgressCallBack progressCallBack = new FileUtils.ProgressCallBack() { FileUtils.ProgressCallBack progressCallBack = new FileUtils.ProgressCallBack() {
private long mLastUpdate = -1; private long mLastUpdate = -1;
@@ -183,8 +166,7 @@ public class ExportUpdateService extends Service {
notificationBuilder.setContentTitle( notificationBuilder.setContentTitle(
getString(R.string.notification_export_success)); getString(R.string.notification_export_success));
notificationBuilder.setProgress(0, 0, false); notificationBuilder.setProgress(0, 0, false);
notificationBuilder.setContentText(destination.getName()); notificationBuilder.setContentText(fileName);
notificationBuilder.mActions.clear();
notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
stopForeground(STOP_FOREGROUND_DETACH); stopForeground(STOP_FOREGROUND_DETACH);
}; };
@@ -197,20 +179,13 @@ public class ExportUpdateService extends Service {
getString(R.string.notification_export_fail)); getString(R.string.notification_export_fail));
notificationBuilder.setProgress(0, 0, false); notificationBuilder.setProgress(0, 0, false);
notificationBuilder.setContentText(null); notificationBuilder.setContentText(null);
notificationBuilder.mActions.clear();
notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build()); notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
stopForeground(STOP_FOREGROUND_DETACH); stopForeground(STOP_FOREGROUND_DETACH);
}; };
mExportRunnable = new ExportRunnable(source, destination, progressCallBack, ExportRunnable exportRunnable = new ExportRunnable(getContentResolver(), source,
runnableComplete, runnableFailed); destination, progressCallBack, runnableComplete, runnableFailed);
mExportThread = new Thread(mExportRunnable); mExportThread = new Thread(exportRunnable);
mExportThread.start(); mExportThread.start();
} }
private PendingIntent getStopPendingIntent() {
final Intent intent = new Intent(this, ExportUpdateService.class);
intent.setAction(ACTION_STOP_EXPORTING);
return PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -65,7 +65,7 @@ public class UpdaterReceiver extends BroadcastReceiver {
Intent notificationIntent = new Intent(context, UpdatesActivity.class); Intent notificationIntent = new Intent(context, UpdatesActivity.class);
PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
NotificationChannel notificationChannel = new NotificationChannel( NotificationChannel notificationChannel = new NotificationChannel(
INSTALL_ERROR_NOTIFICATION_CHANNEL, INSTALL_ERROR_NOTIFICATION_CHANNEL,
@@ -79,8 +79,7 @@ public class UpdaterReceiver extends BroadcastReceiver {
.setStyle(new NotificationCompat.BigTextStyle().bigText(buildInfo)) .setStyle(new NotificationCompat.BigTextStyle().bigText(buildInfo))
.setContentText(buildInfo); .setContentText(buildInfo);
NotificationManager nm = (NotificationManager) context.getSystemService( NotificationManager nm = context.getSystemService(NotificationManager.class);
Context.NOTIFICATION_SERVICE);
nm.createNotificationChannel(notificationChannel); nm.createNotificationChannel(notificationChannel);
nm.notify(0, builder.build()); nm.notify(0, builder.build());
} }
@@ -88,7 +87,7 @@ public class UpdaterReceiver extends BroadcastReceiver {
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (ACTION_INSTALL_REBOOT.equals(intent.getAction())) { if (ACTION_INSTALL_REBOOT.equals(intent.getAction())) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager pm = context.getSystemService(PowerManager.class);
pm.reboot(null); pm.reboot(null);
} else if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { } else if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017-2020 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
*/ */
package org.lineageos.updater; package org.lineageos.updater;
import android.annotation.SuppressLint;
import android.app.UiModeManager; import android.app.UiModeManager;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ComponentName; import android.content.ComponentName;
@@ -39,14 +40,13 @@ import android.view.View;
import android.view.animation.Animation; import android.view.animation.Animation;
import android.view.animation.LinearInterpolator; import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation; import android.view.animation.RotateAnimation;
import android.widget.Button;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.Switch;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatDelegate; import androidx.appcompat.widget.SwitchCompat;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@@ -92,10 +92,10 @@ public class UpdatesActivity extends UpdatesListActivity {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_updates); setContentView(R.layout.activity_updates);
UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE); UiModeManager uiModeManager = getSystemService(UiModeManager.class);
mIsTV = uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION; mIsTV = uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION;
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); RecyclerView recyclerView = findViewById(R.id.recycler_view);
mAdapter = new UpdatesListAdapter(this); mAdapter = new UpdatesListAdapter(this);
recyclerView.setAdapter(mAdapter); recyclerView.setAdapter(mAdapter);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
@@ -111,7 +111,7 @@ public class UpdatesActivity extends UpdatesListActivity {
if (UpdaterController.ACTION_UPDATE_STATUS.equals(intent.getAction())) { if (UpdaterController.ACTION_UPDATE_STATUS.equals(intent.getAction())) {
String downloadId = intent.getStringExtra(UpdaterController.EXTRA_DOWNLOAD_ID); String downloadId = intent.getStringExtra(UpdaterController.EXTRA_DOWNLOAD_ID);
handleDownloadStatusChange(downloadId); handleDownloadStatusChange(downloadId);
mAdapter.notifyDataSetChanged(); mAdapter.notifyItemChanged(downloadId);
} else if (UpdaterController.ACTION_DOWNLOAD_PROGRESS.equals(intent.getAction()) || } else if (UpdaterController.ACTION_DOWNLOAD_PROGRESS.equals(intent.getAction()) ||
UpdaterController.ACTION_INSTALL_PROGRESS.equals(intent.getAction())) { UpdaterController.ACTION_INSTALL_PROGRESS.equals(intent.getAction())) {
String downloadId = intent.getStringExtra(UpdaterController.EXTRA_DOWNLOAD_ID); String downloadId = intent.getStringExtra(UpdaterController.EXTRA_DOWNLOAD_ID);
@@ -124,31 +124,33 @@ public class UpdatesActivity extends UpdatesListActivity {
}; };
if (!mIsTV) { if (!mIsTV) {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false); ActionBar actionBar = getSupportActionBar();
getSupportActionBar().setDisplayHomeAsUpEnabled(true); if (actionBar != null) {
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(true);
}
} }
TextView headerTitle = (TextView) findViewById(R.id.header_title); TextView headerTitle = findViewById(R.id.header_title);
headerTitle.setText(getString(R.string.header_title_text, headerTitle.setText(getString(R.string.header_title_text,
BuildInfoUtils.getBuildVersion())); BuildInfoUtils.getBuildVersion()));
updateLastCheckedString(); updateLastCheckedString();
TextView headerBuildVersion = (TextView) findViewById(R.id.header_build_version); TextView headerBuildVersion = findViewById(R.id.header_build_version);
headerBuildVersion.setText( headerBuildVersion.setText(
getString(R.string.header_android_version, Build.VERSION.RELEASE)); getString(R.string.header_android_version, Build.VERSION.RELEASE));
TextView headerBuildDate = (TextView) findViewById(R.id.header_build_date); TextView headerBuildDate = findViewById(R.id.header_build_date);
headerBuildDate.setText(StringGenerator.getDateLocalizedUTC(this, headerBuildDate.setText(StringGenerator.getDateLocalizedUTC(this,
DateFormat.LONG, BuildInfoUtils.getBuildDateTimestamp())); DateFormat.LONG, BuildInfoUtils.getBuildDateTimestamp()));
if (!mIsTV) { if (!mIsTV) {
// Switch between header title and appbar title minimizing overlaps // Switch between header title and appbar title minimizing overlaps
final CollapsingToolbarLayout collapsingToolbar = final CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);
(CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); final AppBarLayout appBar = findViewById(R.id.app_bar);
final AppBarLayout appBar = (AppBarLayout) findViewById(R.id.app_bar);
appBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { appBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
boolean mIsShown = false; boolean mIsShown = false;
@@ -175,18 +177,8 @@ public class UpdatesActivity extends UpdatesListActivity {
appBar.setExpanded(false); appBar.setExpanded(false);
} }
} else { } else {
findViewById(R.id.refresh).setOnClickListener(new View.OnClickListener() { findViewById(R.id.refresh).setOnClickListener(v -> downloadUpdatesList(true));
@Override findViewById(R.id.preferences).setOnClickListener(v -> showPreferencesDialog());
public void onClick(View v) {
downloadUpdatesList(true);
}
});
findViewById(R.id.preferences).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showPreferencesDialog();
}
});
} }
} }
@@ -222,22 +214,19 @@ public class UpdatesActivity extends UpdatesListActivity {
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) { int itemId = item.getItemId();
case R.id.menu_refresh: { if (itemId == R.id.menu_refresh) {
downloadUpdatesList(true); downloadUpdatesList(true);
return true; return true;
} } else if (itemId == R.id.menu_preferences) {
case R.id.menu_preferences: {
showPreferencesDialog(); showPreferencesDialog();
return true; return true;
} } else if (itemId == R.id.menu_show_changelog) {
case R.id.menu_show_changelog: {
Intent openUrl = new Intent(Intent.ACTION_VIEW, Intent openUrl = new Intent(Intent.ACTION_VIEW,
Uri.parse(Utils.getChangelogURL(this))); Uri.parse(Utils.getChangelogURL(this)));
startActivity(openUrl); startActivity(openUrl);
return true; return true;
} }
}
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
@@ -247,7 +236,7 @@ public class UpdatesActivity extends UpdatesListActivity {
return true; return true;
} }
private ServiceConnection mConnection = new ServiceConnection() { private final ServiceConnection mConnection = new ServiceConnection() {
@Override @Override
public void onServiceConnected(ComponentName className, public void onServiceConnected(ComponentName className,
@@ -330,6 +319,7 @@ public class UpdatesActivity extends UpdatesListActivity {
} }
// In case we set a one-shot check because of a previous failure // In case we set a one-shot check because of a previous failure
UpdatesCheckReceiver.cancelUpdatesCheck(this); UpdatesCheckReceiver.cancelUpdatesCheck(this);
//noinspection ResultOfMethodCallIgnored
jsonNew.renameTo(json); jsonNew.renameTo(json);
} catch (IOException | JSONException e) { } catch (IOException | JSONException e) {
Log.e(TAG, "Could not read json", e); Log.e(TAG, "Could not read json", e);
@@ -356,12 +346,11 @@ public class UpdatesActivity extends UpdatesListActivity {
} }
@Override @Override
public void onResponse(int statusCode, String url, public void onResponse(DownloadClient.Headers headers) {
DownloadClient.Headers headers) {
} }
@Override @Override
public void onSuccess(File destination) { public void onSuccess() {
runOnUiThread(() -> { runOnUiThread(() -> {
Log.d(TAG, "List downloaded"); Log.d(TAG, "List downloaded");
processNewJson(jsonFile, jsonFileTmp, manualRefresh); processNewJson(jsonFile, jsonFileTmp, manualRefresh);
@@ -394,7 +383,7 @@ public class UpdatesActivity extends UpdatesListActivity {
String lastCheckString = getString(R.string.header_last_updates_check, String lastCheckString = getString(R.string.header_last_updates_check,
StringGenerator.getDateLocalized(this, DateFormat.LONG, lastCheck), StringGenerator.getDateLocalized(this, DateFormat.LONG, lastCheck),
StringGenerator.getTimeLocalized(this, lastCheck)); StringGenerator.getTimeLocalized(this, lastCheck));
TextView headerLastCheck = (TextView) findViewById(R.id.header_last_check); TextView headerLastCheck = findViewById(R.id.header_last_check);
headerLastCheck.setText(lastCheckString); headerLastCheck.setText(lastCheckString);
} }
@@ -451,14 +440,14 @@ public class UpdatesActivity extends UpdatesListActivity {
} }
} }
@SuppressLint("ClickableViewAccessibility")
private void showPreferencesDialog() { private void showPreferencesDialog() {
View view = LayoutInflater.from(this).inflate(R.layout.preferences_dialog, null); View view = LayoutInflater.from(this).inflate(R.layout.preferences_dialog, null);
Spinner autoCheckInterval = Spinner autoCheckInterval = view.findViewById(R.id.preferences_auto_updates_check_interval);
view.findViewById(R.id.preferences_auto_updates_check_interval); SwitchCompat autoDelete = view.findViewById(R.id.preferences_auto_delete_updates);
Switch autoDelete = view.findViewById(R.id.preferences_auto_delete_updates); SwitchCompat dataWarning = view.findViewById(R.id.preferences_mobile_data_warning);
Switch dataWarning = view.findViewById(R.id.preferences_mobile_data_warning); SwitchCompat abPerfMode = view.findViewById(R.id.preferences_ab_perf_mode);
Switch abPerfMode = view.findViewById(R.id.preferences_ab_perf_mode); SwitchCompat updateRecovery = view.findViewById(R.id.preferences_update_recovery);
Switch updateRecovery = view.findViewById(R.id.preferences_update_recovery);
if (!Utils.isABDevice()) { if (!Utils.isABDevice()) {
abPerfMode.setVisibility(View.GONE); abPerfMode.setVisibility(View.GONE);
@@ -471,7 +460,7 @@ public class UpdatesActivity extends UpdatesListActivity {
abPerfMode.setChecked(prefs.getBoolean(Constants.PREF_AB_PERF_MODE, false)); abPerfMode.setChecked(prefs.getBoolean(Constants.PREF_AB_PERF_MODE, false));
if (getResources().getBoolean(R.bool.config_hideRecoveryUpdate)) { if (getResources().getBoolean(R.bool.config_hideRecoveryUpdate)) {
// Hide the update feature if explicitely requested. // Hide the update feature if explicitly requested.
// Might be the case of A-only devices using prebuilt vendor images. // Might be the case of A-only devices using prebuilt vendor images.
updateRecovery.setVisibility(View.GONE); updateRecovery.setVisibility(View.GONE);
} else if (Utils.isRecoveryUpdateExecPresent()) { } else if (Utils.isRecoveryUpdateExecPresent()) {
@@ -505,12 +494,9 @@ public class UpdatesActivity extends UpdatesListActivity {
prefs.edit() prefs.edit()
.putInt(Constants.PREF_AUTO_UPDATES_CHECK_INTERVAL, .putInt(Constants.PREF_AUTO_UPDATES_CHECK_INTERVAL,
autoCheckInterval.getSelectedItemPosition()) autoCheckInterval.getSelectedItemPosition())
.putBoolean(Constants.PREF_AUTO_DELETE_UPDATES, .putBoolean(Constants.PREF_AUTO_DELETE_UPDATES, autoDelete.isChecked())
autoDelete.isChecked()) .putBoolean(Constants.PREF_MOBILE_DATA_WARNING, dataWarning.isChecked())
.putBoolean(Constants.PREF_MOBILE_DATA_WARNING, .putBoolean(Constants.PREF_AB_PERF_MODE, abPerfMode.isChecked())
dataWarning.isChecked())
.putBoolean(Constants.PREF_AB_PERF_MODE,
abPerfMode.isChecked())
.apply(); .apply();
if (Utils.isUpdateCheckEnabled(this)) { if (Utils.isUpdateCheckEnabled(this)) {

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -84,17 +84,17 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
} }
@Override @Override
public void onResponse(int statusCode, String url, public void onResponse(DownloadClient.Headers headers) {
DownloadClient.Headers headers) {
} }
@Override @Override
public void onSuccess(File destination) { public void onSuccess() {
try { try {
if (json.exists() && Utils.checkForNewUpdates(json, jsonNew)) { if (json.exists() && Utils.checkForNewUpdates(json, jsonNew)) {
showNotification(context); showNotification(context);
updateRepeatingUpdatesCheck(context); updateRepeatingUpdatesCheck(context);
} }
//noinspection ResultOfMethodCallIgnored
jsonNew.renameTo(json); jsonNew.renameTo(json);
long currentMillis = System.currentTimeMillis(); long currentMillis = System.currentTimeMillis();
preferences.edit() preferences.edit()
@@ -123,8 +123,8 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
} }
private static void showNotification(Context context) { private static void showNotification(Context context) {
NotificationManager notificationManager = NotificationManager notificationManager = context.getSystemService(
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); NotificationManager.class);
NotificationChannel notificationChannel = new NotificationChannel( NotificationChannel notificationChannel = new NotificationChannel(
NEW_UPDATES_NOTIFICATION_CHANNEL, NEW_UPDATES_NOTIFICATION_CHANNEL,
context.getString(R.string.new_updates_channel_title), context.getString(R.string.new_updates_channel_title),
@@ -134,7 +134,7 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
notificationBuilder.setSmallIcon(R.drawable.ic_system_update); notificationBuilder.setSmallIcon(R.drawable.ic_system_update);
Intent notificationIntent = new Intent(context, UpdatesActivity.class); Intent notificationIntent = new Intent(context, UpdatesActivity.class);
PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
notificationBuilder.setContentIntent(intent); notificationBuilder.setContentIntent(intent);
notificationBuilder.setContentTitle(context.getString(R.string.new_updates_found_title)); notificationBuilder.setContentTitle(context.getString(R.string.new_updates_found_title));
notificationBuilder.setAutoCancel(true); notificationBuilder.setAutoCancel(true);
@@ -145,7 +145,7 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
private static PendingIntent getRepeatingUpdatesCheckIntent(Context context) { private static PendingIntent getRepeatingUpdatesCheckIntent(Context context) {
Intent intent = new Intent(context, UpdatesCheckReceiver.class); Intent intent = new Intent(context, UpdatesCheckReceiver.class);
intent.setAction(DAILY_CHECK_ACTION); intent.setAction(DAILY_CHECK_ACTION);
return PendingIntent.getBroadcast(context, 0, intent, 0); return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
} }
public static void updateRepeatingUpdatesCheck(Context context) { public static void updateRepeatingUpdatesCheck(Context context) {
@@ -159,7 +159,7 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
} }
PendingIntent updateCheckIntent = getRepeatingUpdatesCheckIntent(context); PendingIntent updateCheckIntent = getRepeatingUpdatesCheckIntent(context);
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); AlarmManager alarmMgr = context.getSystemService(AlarmManager.class);
alarmMgr.setRepeating(AlarmManager.RTC, System.currentTimeMillis() + alarmMgr.setRepeating(AlarmManager.RTC, System.currentTimeMillis() +
Utils.getUpdateCheckInterval(context), Utils.getUpdateCheckInterval(context), Utils.getUpdateCheckInterval(context), Utils.getUpdateCheckInterval(context),
updateCheckIntent); updateCheckIntent);
@@ -170,20 +170,20 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
} }
public static void cancelRepeatingUpdatesCheck(Context context) { public static void cancelRepeatingUpdatesCheck(Context context) {
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); AlarmManager alarmMgr = context.getSystemService(AlarmManager.class);
alarmMgr.cancel(getRepeatingUpdatesCheckIntent(context)); alarmMgr.cancel(getRepeatingUpdatesCheckIntent(context));
} }
private static PendingIntent getUpdatesCheckIntent(Context context) { private static PendingIntent getUpdatesCheckIntent(Context context) {
Intent intent = new Intent(context, UpdatesCheckReceiver.class); Intent intent = new Intent(context, UpdatesCheckReceiver.class);
intent.setAction(ONESHOT_CHECK_ACTION); intent.setAction(ONESHOT_CHECK_ACTION);
return PendingIntent.getBroadcast(context, 0, intent, 0); return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_IMMUTABLE);
} }
public static void scheduleUpdatesCheck(Context context) { public static void scheduleUpdatesCheck(Context context) {
long millisToNextCheck = AlarmManager.INTERVAL_HOUR * 2; long millisToNextCheck = AlarmManager.INTERVAL_HOUR * 2;
PendingIntent updateCheckIntent = getUpdatesCheckIntent(context); PendingIntent updateCheckIntent = getUpdatesCheckIntent(context);
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); AlarmManager alarmMgr = context.getSystemService(AlarmManager.class);
alarmMgr.set(AlarmManager.ELAPSED_REALTIME, alarmMgr.set(AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + millisToNextCheck, SystemClock.elapsedRealtime() + millisToNextCheck,
updateCheckIntent); updateCheckIntent);
@@ -193,7 +193,7 @@ public class UpdatesCheckReceiver extends BroadcastReceiver {
} }
public static void cancelUpdatesCheck(Context context) { public static void cancelUpdatesCheck(Context context) {
AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); AlarmManager alarmMgr = context.getSystemService(AlarmManager.class);
alarmMgr.cancel(getUpdatesCheckIntent(context)); alarmMgr.cancel(getUpdatesCheckIntent(context));
Log.d(TAG, "Cancelling pending one-shot check"); Log.d(TAG, "Cancelling pending one-shot check");
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -75,18 +75,11 @@ public class UpdatesDbHelper extends SQLiteOpenHelper {
onUpgrade(db, oldVersion, newVersion); onUpgrade(db, oldVersion, newVersion);
} }
public long addUpdate(Update update) { public void addUpdateWithOnConflict(Update update, int conflictAlgorithm) {
SQLiteDatabase db = getWritableDatabase(); SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
fillContentValues(update, values); fillContentValues(update, values);
return db.insert(UpdateEntry.TABLE_NAME, null, values); db.insertWithOnConflict(UpdateEntry.TABLE_NAME, null, values, conflictAlgorithm);
}
public long addUpdateWithOnConflict(Update update, int conflictAlgorithm) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
fillContentValues(update, values);
return db.insertWithOnConflict(UpdateEntry.TABLE_NAME, null, values, conflictAlgorithm);
} }
private static void fillContentValues(Update update, ContentValues values) { private static void fillContentValues(Update update, ContentValues values) {
@@ -99,52 +92,25 @@ public class UpdatesDbHelper extends SQLiteOpenHelper {
values.put(UpdateEntry.COLUMN_NAME_SIZE, update.getFileSize()); values.put(UpdateEntry.COLUMN_NAME_SIZE, update.getFileSize());
} }
public boolean removeUpdate(String downloadId) { public void removeUpdate(String downloadId) {
SQLiteDatabase db = getWritableDatabase(); SQLiteDatabase db = getWritableDatabase();
String selection = UpdateEntry.COLUMN_NAME_DOWNLOAD_ID + " = ?"; String selection = UpdateEntry.COLUMN_NAME_DOWNLOAD_ID + " = ?";
String[] selectionArgs = {downloadId}; String[] selectionArgs = {downloadId};
return db.delete(UpdateEntry.TABLE_NAME, selection, selectionArgs) != 0; db.delete(UpdateEntry.TABLE_NAME, selection, selectionArgs);
} }
public boolean removeUpdate(long rowId) { public void changeUpdateStatus(Update update) {
SQLiteDatabase db = getWritableDatabase();
String selection = UpdateEntry._ID + " = " + rowId;
return db.delete(UpdateEntry.TABLE_NAME, selection, null) != 0;
}
public boolean changeUpdateStatus(Update update) {
String selection = UpdateEntry.COLUMN_NAME_DOWNLOAD_ID + " = ?"; String selection = UpdateEntry.COLUMN_NAME_DOWNLOAD_ID + " = ?";
String[] selectionArgs = {update.getDownloadId()}; String[] selectionArgs = {update.getDownloadId()};
return changeUpdateStatus(selection, selectionArgs, update.getPersistentStatus()); changeUpdateStatus(selection, selectionArgs, update.getPersistentStatus());
} }
public boolean changeUpdateStatus(long rowId, int status) { private void changeUpdateStatus(String selection, String[] selectionArgs,
String selection = UpdateEntry._ID + " = " + rowId;
return changeUpdateStatus(selection, null, status);
}
private boolean changeUpdateStatus(String selection, String[] selectionArgs,
int status) { int status) {
SQLiteDatabase db = getWritableDatabase(); SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(UpdateEntry.COLUMN_NAME_STATUS, status); values.put(UpdateEntry.COLUMN_NAME_STATUS, status);
return db.update(UpdateEntry.TABLE_NAME, values, selection, selectionArgs) != 0; db.update(UpdateEntry.TABLE_NAME, values, selection, selectionArgs);
}
public Update getUpdate(long rowId) {
String selection = UpdateEntry._ID + " = " + rowId;
return getUpdate(selection, null);
}
public Update getUpdate(String downloadId) {
String selection = UpdateEntry.COLUMN_NAME_DOWNLOAD_ID + " = ?";
String[] selectionArgs = {downloadId};
return getUpdate(selection, selectionArgs);
}
private Update getUpdate(String selection, String[] selectionArgs) {
List<Update> updates = getUpdates(selection, selectionArgs);
return updates != null ? updates.get(0) : null;
} }
public List<Update> getUpdates() { public List<Update> getUpdates() {

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -15,11 +15,12 @@
*/ */
package org.lineageos.updater; package org.lineageos.updater;
import android.content.Context; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources; import android.content.res.Resources;
import android.net.Uri;
import android.os.BatteryManager; import android.os.BatteryManager;
import android.os.PowerManager; import android.os.PowerManager;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
@@ -35,9 +36,14 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.view.ContextThemeWrapper; import androidx.appcompat.view.ContextThemeWrapper;
import androidx.appcompat.view.menu.MenuBuilder; import androidx.appcompat.view.menu.MenuBuilder;
@@ -51,13 +57,11 @@ import org.lineageos.updater.controller.UpdaterController;
import org.lineageos.updater.controller.UpdaterService; import org.lineageos.updater.controller.UpdaterService;
import org.lineageos.updater.misc.BuildInfoUtils; import org.lineageos.updater.misc.BuildInfoUtils;
import org.lineageos.updater.misc.Constants; import org.lineageos.updater.misc.Constants;
import org.lineageos.updater.misc.PermissionsUtils;
import org.lineageos.updater.misc.StringGenerator; import org.lineageos.updater.misc.StringGenerator;
import org.lineageos.updater.misc.Utils; import org.lineageos.updater.misc.Utils;
import org.lineageos.updater.model.UpdateInfo; import org.lineageos.updater.model.UpdateInfo;
import org.lineageos.updater.model.UpdateStatus; import org.lineageos.updater.model.UpdateStatus;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.NumberFormat; import java.text.NumberFormat;
@@ -76,10 +80,12 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
private List<String> mDownloadIds; private List<String> mDownloadIds;
private String mSelectedDownload; private String mSelectedDownload;
private UpdaterController mUpdaterController; private UpdaterController mUpdaterController;
private UpdatesListActivity mActivity; private final UpdatesListActivity mActivity;
private AlertDialog infoDialog; private AlertDialog infoDialog;
private UpdateInfo mToBeExported = null;
private enum Action { private enum Action {
DOWNLOAD, DOWNLOAD,
PAUSE, PAUSE,
@@ -92,25 +98,31 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
} }
public static class ViewHolder extends RecyclerView.ViewHolder { public static class ViewHolder extends RecyclerView.ViewHolder {
private Button mAction; private final Button mAction;
private final ImageButton mMenu;
private TextView mBuildDate; private final TextView mBuildDate;
private TextView mBuildVersion; private final TextView mBuildVersion;
private TextView mBuildSize; private final TextView mBuildSize;
private ProgressBar mProgressBar; private final LinearLayout mProgress;
private TextView mProgressText; private final ProgressBar mProgressBar;
private final TextView mProgressText;
private final TextView mPercentage;
public ViewHolder(final View view) { public ViewHolder(final View view) {
super(view); super(view);
mAction = (Button) view.findViewById(R.id.update_action); mAction = view.findViewById(R.id.update_action);
mMenu = view.findViewById(R.id.update_menu);
mBuildDate = (TextView) view.findViewById(R.id.build_date); mBuildDate = view.findViewById(R.id.build_date);
mBuildVersion = (TextView) view.findViewById(R.id.build_version); mBuildVersion = view.findViewById(R.id.build_version);
mBuildSize = (TextView) view.findViewById(R.id.build_size); mBuildSize = view.findViewById(R.id.build_size);
mProgressBar = (ProgressBar) view.findViewById(R.id.progress_bar); mProgress = view.findViewById(R.id.progress);
mProgressText = (TextView) view.findViewById(R.id.progress_text); mProgressBar = view.findViewById(R.id.progress_bar);
mProgressText = view.findViewById(R.id.progress_text);
mPercentage = view.findViewById(R.id.progress_percent);
} }
} }
@@ -122,6 +134,7 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
mAlphaDisabledValue = tv.getFloat(); mAlphaDisabledValue = tv.getFloat();
} }
@NonNull
@Override @Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()) View view = LayoutInflater.from(viewGroup.getContext())
@@ -130,7 +143,7 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
} }
@Override @Override
public void onViewDetachedFromWindow(ViewHolder holder) { public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
super.onViewDetachedFromWindow(holder); super.onViewDetachedFromWindow(holder);
if (infoDialog != null) { if (infoDialog != null) {
@@ -149,20 +162,20 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
final String downloadId = update.getDownloadId(); final String downloadId = update.getDownloadId();
if (mUpdaterController.isDownloading(downloadId)) { if (mUpdaterController.isDownloading(downloadId)) {
canDelete = true; canDelete = true;
String downloaded = StringGenerator.bytesToMegabytes(mActivity, String downloaded = Formatter.formatShortFileSize(mActivity,
update.getFile().length()); update.getFile().length());
String total = Formatter.formatShortFileSize(mActivity, update.getFileSize()); String total = Formatter.formatShortFileSize(mActivity, update.getFileSize());
String percentage = NumberFormat.getPercentInstance().format( String percentage = NumberFormat.getPercentInstance().format(
update.getProgress() / 100.f); update.getProgress() / 100.f);
viewHolder.mPercentage.setText(percentage);
long eta = update.getEta(); long eta = update.getEta();
if (eta > 0) { if (eta > 0) {
CharSequence etaString = StringGenerator.formatETA(mActivity, eta * 1000); CharSequence etaString = StringGenerator.formatETA(mActivity, eta * 1000);
viewHolder.mProgressText.setText(mActivity.getString( viewHolder.mProgressText.setText(mActivity.getString(
R.string.list_download_progress_eta_new, downloaded, total, etaString, R.string.list_download_progress_eta_newer, downloaded, total, etaString));
percentage));
} else { } else {
viewHolder.mProgressText.setText(mActivity.getString( viewHolder.mProgressText.setText(mActivity.getString(
R.string.list_download_progress_new, downloaded, total, percentage)); R.string.list_download_progress_newer, downloaded, total));
} }
setButtonAction(viewHolder.mAction, Action.PAUSE, downloadId, true); setButtonAction(viewHolder.mAction, Action.PAUSE, downloadId, true);
viewHolder.mProgressBar.setIndeterminate(update.getStatus() == UpdateStatus.STARTING); viewHolder.mProgressBar.setIndeterminate(update.getStatus() == UpdateStatus.STARTING);
@@ -174,6 +187,9 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
update.getFinalizing() ? update.getFinalizing() ?
R.string.finalizing_package : R.string.finalizing_package :
R.string.preparing_ota_first_boot); R.string.preparing_ota_first_boot);
String percentage = NumberFormat.getPercentInstance().format(
update.getInstallProgress() / 100.f);
viewHolder.mPercentage.setText(percentage);
viewHolder.mProgressBar.setIndeterminate(false); viewHolder.mProgressBar.setIndeterminate(false);
viewHolder.mProgressBar.setProgress(update.getInstallProgress()); viewHolder.mProgressBar.setProgress(update.getInstallProgress());
} else if (mUpdaterController.isVerifyingUpdate(downloadId)) { } else if (mUpdaterController.isVerifyingUpdate(downloadId)) {
@@ -183,20 +199,20 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
} else { } else {
canDelete = true; canDelete = true;
setButtonAction(viewHolder.mAction, Action.RESUME, downloadId, !isBusy()); setButtonAction(viewHolder.mAction, Action.RESUME, downloadId, !isBusy());
String downloaded = StringGenerator.bytesToMegabytes(mActivity, String downloaded = Formatter.formatShortFileSize(mActivity,
update.getFile().length()); update.getFile().length());
String total = Formatter.formatShortFileSize(mActivity, update.getFileSize()); String total = Formatter.formatShortFileSize(mActivity, update.getFileSize());
String percentage = NumberFormat.getPercentInstance().format( String percentage = NumberFormat.getPercentInstance().format(
update.getProgress() / 100.f); update.getProgress() / 100.f);
viewHolder.mProgressText.setText(mActivity.getString(R.string.list_download_progress_new, viewHolder.mPercentage.setText(percentage);
downloaded, total, percentage)); viewHolder.mProgressText.setText(mActivity.getString(
R.string.list_download_progress_newer, downloaded, total));
viewHolder.mProgressBar.setIndeterminate(false); viewHolder.mProgressBar.setIndeterminate(false);
viewHolder.mProgressBar.setProgress(update.getProgress()); viewHolder.mProgressBar.setProgress(update.getProgress());
} }
viewHolder.itemView.setOnLongClickListener(getLongClickListener(update, canDelete, viewHolder.mMenu.setOnClickListener(getClickListener(update, canDelete, viewHolder.mMenu));
viewHolder.mBuildDate)); viewHolder.mProgress.setVisibility(View.VISIBLE);
viewHolder.mProgressBar.setVisibility(View.VISIBLE);
viewHolder.mProgressText.setVisibility(View.VISIBLE); viewHolder.mProgressText.setVisibility(View.VISIBLE);
viewHolder.mBuildSize.setVisibility(View.INVISIBLE); viewHolder.mBuildSize.setVisibility(View.INVISIBLE);
} }
@@ -204,34 +220,30 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
private void handleNotActiveStatus(ViewHolder viewHolder, UpdateInfo update) { private void handleNotActiveStatus(ViewHolder viewHolder, UpdateInfo update) {
final String downloadId = update.getDownloadId(); final String downloadId = update.getDownloadId();
if (mUpdaterController.isWaitingForReboot(downloadId)) { if (mUpdaterController.isWaitingForReboot(downloadId)) {
viewHolder.itemView.setOnLongClickListener( viewHolder.mMenu.setOnClickListener(getClickListener(update, false, viewHolder.mMenu));
getLongClickListener(update, false, viewHolder.mBuildDate));
setButtonAction(viewHolder.mAction, Action.REBOOT, downloadId, true); setButtonAction(viewHolder.mAction, Action.REBOOT, downloadId, true);
} else if (update.getPersistentStatus() == UpdateStatus.Persistent.VERIFIED) { } else if (update.getPersistentStatus() == UpdateStatus.Persistent.VERIFIED) {
viewHolder.itemView.setOnLongClickListener( viewHolder.mMenu.setOnClickListener(getClickListener(update, true, viewHolder.mMenu));
getLongClickListener(update, true, viewHolder.mBuildDate));
setButtonAction(viewHolder.mAction, setButtonAction(viewHolder.mAction,
Utils.canInstall(update) ? Action.INSTALL : Action.DELETE, Utils.canInstall(update) ? Action.INSTALL : Action.DELETE,
downloadId, !isBusy()); downloadId, !isBusy());
} else if (!Utils.canInstall(update)) { } else if (!Utils.canInstall(update)) {
viewHolder.itemView.setOnLongClickListener( viewHolder.mMenu.setOnClickListener(getClickListener(update, false, viewHolder.mMenu));
getLongClickListener(update, false, viewHolder.mBuildDate));
setButtonAction(viewHolder.mAction, Action.INFO, downloadId, !isBusy()); setButtonAction(viewHolder.mAction, Action.INFO, downloadId, !isBusy());
} else { } else {
viewHolder.itemView.setOnLongClickListener( viewHolder.mMenu.setOnClickListener(getClickListener(update, false, viewHolder.mMenu));
getLongClickListener(update, false, viewHolder.mBuildDate));
setButtonAction(viewHolder.mAction, Action.DOWNLOAD, downloadId, !isBusy()); setButtonAction(viewHolder.mAction, Action.DOWNLOAD, downloadId, !isBusy());
} }
String fileSize = Formatter.formatShortFileSize(mActivity, update.getFileSize()); String fileSize = Formatter.formatShortFileSize(mActivity, update.getFileSize());
viewHolder.mBuildSize.setText(fileSize); viewHolder.mBuildSize.setText(fileSize);
viewHolder.mProgressBar.setVisibility(View.INVISIBLE); viewHolder.mProgress.setVisibility(View.INVISIBLE);
viewHolder.mProgressText.setVisibility(View.INVISIBLE); viewHolder.mProgressText.setVisibility(View.INVISIBLE);
viewHolder.mBuildSize.setVisibility(View.VISIBLE); viewHolder.mBuildSize.setVisibility(View.VISIBLE);
} }
@Override @Override
public void onBindViewHolder(final ViewHolder viewHolder, int i) { public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
if (mDownloadIds == null) { if (mDownloadIds == null) {
viewHolder.mAction.setEnabled(false); viewHolder.mAction.setEnabled(false);
return; return;
@@ -313,7 +325,7 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
} }
View checkboxView = LayoutInflater.from(mActivity).inflate(R.layout.checkbox_view, null); View checkboxView = LayoutInflater.from(mActivity).inflate(R.layout.checkbox_view, null);
CheckBox checkbox = (CheckBox) checkboxView.findViewById(R.id.checkbox); CheckBox checkbox = checkboxView.findViewById(R.id.checkbox);
checkbox.setText(R.string.checkbox_mobile_data_warning); checkbox.setText(R.string.checkbox_mobile_data_warning);
new AlertDialog.Builder(mActivity) new AlertDialog.Builder(mActivity)
@@ -372,7 +384,10 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
final boolean canInstall = Utils.canInstall(update); final boolean canInstall = Utils.canInstall(update);
clickListener = enabled ? view -> { clickListener = enabled ? view -> {
if (canInstall) { if (canInstall) {
getInstallDialog(downloadId).show(); AlertDialog.Builder installDialog = getInstallDialog(downloadId);
if (installDialog != null) {
installDialog.show();
}
} else { } else {
mActivity.showSnackbar(R.string.snack_update_not_installable, mActivity.showSnackbar(R.string.snack_update_not_installable,
Snackbar.LENGTH_LONG); Snackbar.LENGTH_LONG);
@@ -402,8 +417,7 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
button.setText(R.string.reboot); button.setText(R.string.reboot);
button.setEnabled(enabled); button.setEnabled(enabled);
clickListener = enabled ? view -> { clickListener = enabled ? view -> {
PowerManager pm = PowerManager pm = mActivity.getSystemService(PowerManager.class);
(PowerManager) mActivity.getSystemService(Context.POWER_SERVICE);
pm.reboot(null); pm.reboot(null);
} : null; } : null;
} }
@@ -438,12 +452,9 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
.setNegativeButton(android.R.string.cancel, null); .setNegativeButton(android.R.string.cancel, null);
} }
private View.OnLongClickListener getLongClickListener(final UpdateInfo update, private View.OnClickListener getClickListener(final UpdateInfo update,
final boolean canDelete, View anchor) { final boolean canDelete, View anchor) {
return view -> { return view -> startActionMode(update, canDelete, anchor);
startActionMode(update, canDelete, anchor);
return true;
};
} }
private AlertDialog.Builder getInstallDialog(final String downloadId) { private AlertDialog.Builder getInstallDialog(final String downloadId) {
@@ -479,7 +490,10 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
.setMessage(mActivity.getString(resId, buildInfoText, .setMessage(mActivity.getString(resId, buildInfoText,
mActivity.getString(android.R.string.ok))) mActivity.getString(android.R.string.ok)))
.setPositiveButton(android.R.string.ok, .setPositiveButton(android.R.string.ok,
(dialog, which) -> Utils.triggerUpdate(mActivity, downloadId)) (dialog, which) -> {
Utils.triggerUpdate(mActivity, downloadId);
maybeShowInfoDialog();
})
.setNegativeButton(android.R.string.cancel, null); .setNegativeButton(android.R.string.cancel, null);
} }
@@ -495,6 +509,21 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
.setNegativeButton(android.R.string.cancel, null); .setNegativeButton(android.R.string.cancel, null);
} }
private void maybeShowInfoDialog() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mActivity);
boolean alreadySeen = preferences.getBoolean(Constants.HAS_SEEN_INFO_DIALOG, false);
if (alreadySeen) {
return;
}
new AlertDialog.Builder(mActivity)
.setTitle(R.string.info_dialog_title)
.setMessage(R.string.info_dialog_message)
.setPositiveButton(R.string.info_dialog_ok, (dialog, which) -> preferences.edit()
.putBoolean(Constants.HAS_SEEN_INFO_DIALOG, true)
.apply())
.show();
}
private void startActionMode(final UpdateInfo update, final boolean canDelete, View anchor) { private void startActionMode(final UpdateInfo update, final boolean canDelete, View anchor) {
mSelectedDownload = update.getDownloadId(); mSelectedDownload = update.getDownloadId();
notifyItemChanged(update.getDownloadId()); notifyItemChanged(update.getDownloadId());
@@ -512,23 +541,18 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
update.getPersistentStatus() == UpdateStatus.Persistent.VERIFIED); update.getPersistentStatus() == UpdateStatus.Persistent.VERIFIED);
popupMenu.setOnMenuItemClickListener(item -> { popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()) { int itemId = item.getItemId();
case R.id.menu_delete_action: if (itemId == R.id.menu_delete_action) {
getDeleteDialog(update.getDownloadId()).show(); getDeleteDialog(update.getDownloadId()).show();
return true; return true;
case R.id.menu_copy_url: } else if (itemId == R.id.menu_copy_url) {
Utils.addToClipboard(mActivity, Utils.addToClipboard(mActivity,
mActivity.getString(R.string.label_download_url), mActivity.getString(R.string.label_download_url),
update.getDownloadUrl(), update.getDownloadUrl(),
mActivity.getString(R.string.toast_download_url_copied)); mActivity.getString(R.string.toast_download_url_copied));
return true; return true;
case R.id.menu_export_update: } else if (itemId == R.id.menu_export_update) {
// TODO: start exporting once the permission has been granted
boolean hasPermission = PermissionsUtils.checkAndRequestStoragePermission(
mActivity, 0);
if (hasPermission) {
exportUpdate(update); exportUpdate(update);
}
return true; return true;
} }
return false; return false;
@@ -539,14 +563,35 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
} }
private void exportUpdate(UpdateInfo update) { private void exportUpdate(UpdateInfo update) {
File dest = new File(Utils.getExportPath(mActivity), update.getName()); if (mActivity == null) {
if (dest.exists()) { return;
dest = Utils.appendSequentialNumber(dest);
} }
mToBeExported = update;
ActivityResultLauncher<Intent> resultLauncher = mActivity.registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
Intent intent = result.getData();
if (intent != null) {
Uri uri = intent.getData();
exportUpdate(uri);
}
}
});
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/zip");
intent.putExtra(Intent.EXTRA_TITLE, update.getName());
resultLauncher.launch(intent);
}
private void exportUpdate(Uri uri) {
Intent intent = new Intent(mActivity, ExportUpdateService.class); Intent intent = new Intent(mActivity, ExportUpdateService.class);
intent.setAction(ExportUpdateService.ACTION_START_EXPORTING); intent.setAction(ExportUpdateService.ACTION_START_EXPORTING);
intent.putExtra(ExportUpdateService.EXTRA_SOURCE_FILE, update.getFile()); intent.putExtra(ExportUpdateService.EXTRA_SOURCE_FILE, mToBeExported.getFile());
intent.putExtra(ExportUpdateService.EXTRA_DEST_FILE, dest); intent.putExtra(ExportUpdateService.EXTRA_DEST_URI, uri);
mActivity.startService(intent); mActivity.startService(intent);
} }
@@ -564,9 +609,11 @@ public class UpdatesListAdapter extends RecyclerView.Adapter<UpdatesListAdapter.
.setPositiveButton(android.R.string.ok, null) .setPositiveButton(android.R.string.ok, null)
.setMessage(message) .setMessage(message)
.show(); .show();
TextView textView = (TextView) infoDialog.findViewById(android.R.id.message); TextView textView = infoDialog.findViewById(android.R.id.message);
if (textView != null) {
textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setMovementMethod(LinkMovementMethod.getInstance());
} }
}
private boolean isBatteryLevelOk() { private boolean isBatteryLevelOk() {
Intent intent = mActivity.registerReceiver(null, Intent intent = mActivity.registerReceiver(null,

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -52,7 +52,7 @@ class ABUpdateInstaller {
private final Context mContext; private final Context mContext;
private String mDownloadId; private String mDownloadId;
private UpdateEngine mUpdateEngine; private final UpdateEngine mUpdateEngine;
private boolean mBound; private boolean mBound;
private boolean mFinalizing; private boolean mFinalizing;
@@ -130,11 +130,6 @@ class ABUpdateInstaller {
return pref.getString(ABUpdateInstaller.PREF_INSTALLING_SUSPENDED_AB_ID, null) != null; return pref.getString(ABUpdateInstaller.PREF_INSTALLING_SUSPENDED_AB_ID, null) != null;
} }
static synchronized boolean isInstallingUpdateSuspended(Context context, String downloadId) {
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
return downloadId.equals(pref.getString(ABUpdateInstaller.PREF_INSTALLING_SUSPENDED_AB_ID, null));
}
static synchronized boolean isWaitingForReboot(Context context, String downloadId) { static synchronized boolean isWaitingForReboot(Context context, String downloadId) {
String waitingId = PreferenceManager.getDefaultSharedPreferences(context) String waitingId = PreferenceManager.getDefaultSharedPreferences(context)
.getString(Constants.PREF_NEEDS_REBOOT_ID, null); .getString(Constants.PREF_NEEDS_REBOOT_ID, null);
@@ -155,10 +150,10 @@ class ABUpdateInstaller {
return sInstance; return sInstance;
} }
public boolean install(String downloadId) { public void install(String downloadId) {
if (isInstallingUpdate(mContext)) { if (isInstallingUpdate(mContext)) {
Log.e(TAG, "Already installing an update"); Log.e(TAG, "Already installing an update");
return false; return;
} }
mDownloadId = downloadId; mDownloadId = downloadId;
@@ -169,7 +164,7 @@ class ABUpdateInstaller {
mUpdaterController.getActualUpdate(downloadId) mUpdaterController.getActualUpdate(downloadId)
.setStatus(UpdateStatus.INSTALLATION_FAILED); .setStatus(UpdateStatus.INSTALLATION_FAILED);
mUpdaterController.notifyUpdateChange(downloadId); mUpdaterController.notifyUpdateChange(downloadId);
return false; return;
} }
long offset; long offset;
@@ -194,7 +189,7 @@ class ABUpdateInstaller {
mUpdaterController.getActualUpdate(mDownloadId) mUpdaterController.getActualUpdate(mDownloadId)
.setStatus(UpdateStatus.INSTALLATION_FAILED); .setStatus(UpdateStatus.INSTALLATION_FAILED);
mUpdaterController.notifyUpdateChange(mDownloadId); mUpdaterController.notifyUpdateChange(mDownloadId);
return false; return;
} }
if (!mBound) { if (!mBound) {
@@ -204,7 +199,7 @@ class ABUpdateInstaller {
mUpdaterController.getActualUpdate(downloadId) mUpdaterController.getActualUpdate(downloadId)
.setStatus(UpdateStatus.INSTALLATION_FAILED); .setStatus(UpdateStatus.INSTALLATION_FAILED);
mUpdaterController.notifyUpdateChange(downloadId); mUpdaterController.notifyUpdateChange(downloadId);
return false; return;
} }
} }
@@ -222,17 +217,16 @@ class ABUpdateInstaller {
.putString(PREF_INSTALLING_AB_ID, mDownloadId) .putString(PREF_INSTALLING_AB_ID, mDownloadId)
.apply(); .apply();
return true;
} }
public boolean reconnect() { public void reconnect() {
if (!isInstallingUpdate(mContext)) { if (!isInstallingUpdate(mContext)) {
Log.e(TAG, "reconnect: Not installing any update"); Log.e(TAG, "reconnect: Not installing any update");
return false; return;
} }
if (mBound) { if (mBound) {
return true; return;
} }
mDownloadId = PreferenceManager.getDefaultSharedPreferences(mContext) mDownloadId = PreferenceManager.getDefaultSharedPreferences(mContext)
@@ -242,10 +236,8 @@ class ABUpdateInstaller {
mBound = mUpdateEngine.bind(mUpdateEngineCallback); mBound = mUpdateEngine.bind(mUpdateEngineCallback);
if (!mBound) { if (!mBound) {
Log.e(TAG, "Could not bind"); Log.e(TAG, "Could not bind");
return false;
} }
return true;
} }
private void installationDone(boolean needsReboot) { private void installationDone(boolean needsReboot) {
@@ -257,15 +249,15 @@ class ABUpdateInstaller {
.apply(); .apply();
} }
public boolean cancel() { public void cancel() {
if (!isInstallingUpdate(mContext)) { if (!isInstallingUpdate(mContext)) {
Log.e(TAG, "cancel: Not installing any update"); Log.e(TAG, "cancel: Not installing any update");
return false; return;
} }
if (!mBound) { if (!mBound) {
Log.e(TAG, "Not connected to update engine"); Log.e(TAG, "Not connected to update engine");
return false; return;
} }
mUpdateEngine.cancel(); mUpdateEngine.cancel();
@@ -275,22 +267,21 @@ class ABUpdateInstaller {
.setStatus(UpdateStatus.INSTALLATION_CANCELLED); .setStatus(UpdateStatus.INSTALLATION_CANCELLED);
mUpdaterController.notifyUpdateChange(mDownloadId); mUpdaterController.notifyUpdateChange(mDownloadId);
return true;
} }
public void setPerformanceMode(boolean enable) { public void setPerformanceMode(boolean enable) {
mUpdateEngine.setPerformanceMode(enable); mUpdateEngine.setPerformanceMode(enable);
} }
public boolean suspend() { public void suspend() {
if (!isInstallingUpdate(mContext)) { if (!isInstallingUpdate(mContext)) {
Log.e(TAG, "cancel: Not installing any update"); Log.e(TAG, "cancel: Not installing any update");
return false; return;
} }
if (!mBound) { if (!mBound) {
Log.e(TAG, "Not connected to update engine"); Log.e(TAG, "Not connected to update engine");
return false; return;
} }
mUpdateEngine.suspend(); mUpdateEngine.suspend();
@@ -303,18 +294,17 @@ class ABUpdateInstaller {
.putString(PREF_INSTALLING_SUSPENDED_AB_ID, mDownloadId) .putString(PREF_INSTALLING_SUSPENDED_AB_ID, mDownloadId)
.apply(); .apply();
return true;
} }
public boolean resume() { public void resume() {
if (!isInstallingUpdateSuspended(mContext)) { if (!isInstallingUpdateSuspended(mContext)) {
Log.e(TAG, "cancel: No update is suspended"); Log.e(TAG, "cancel: No update is suspended");
return false; return;
} }
if (!mBound) { if (!mBound) {
Log.e(TAG, "Not connected to update engine"); Log.e(TAG, "Not connected to update engine");
return false; return;
} }
mUpdateEngine.resume(); mUpdateEngine.resume();
@@ -329,6 +319,5 @@ class ABUpdateInstaller {
.remove(PREF_INSTALLING_SUSPENDED_AB_ID) .remove(PREF_INSTALLING_SUSPENDED_AB_ID)
.apply(); .apply();
return true;
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -113,7 +113,7 @@ class UpdateInstaller {
Runnable copyUpdateRunnable = new Runnable() { Runnable copyUpdateRunnable = new Runnable() {
private long mLastUpdate = -1; private long mLastUpdate = -1;
FileUtils.ProgressCallBack mProgressCallBack = new FileUtils.ProgressCallBack() { final FileUtils.ProgressCallBack mProgressCallBack = new FileUtils.ProgressCallBack() {
@Override @Override
public void update(int progress) { public void update(int progress) {
long now = SystemClock.elapsedRealtime(); long now = SystemClock.elapsedRealtime();
@@ -137,12 +137,14 @@ class UpdateInstaller {
.setStatus(UpdateStatus.INSTALLATION_CANCELLED); .setStatus(UpdateStatus.INSTALLATION_CANCELLED);
mUpdaterController.getActualUpdate(update.getDownloadId()) mUpdaterController.getActualUpdate(update.getDownloadId())
.setInstallProgress(0); .setInstallProgress(0);
//noinspection ResultOfMethodCallIgnored
uncryptFile.delete(); uncryptFile.delete();
} else { } else {
installPackage(uncryptFile, update.getDownloadId()); installPackage(uncryptFile, update.getDownloadId());
} }
} catch (IOException e) { } catch (IOException e) {
Log.e(TAG, "Could not copy update", e); Log.e(TAG, "Could not copy update", e);
//noinspection ResultOfMethodCallIgnored
uncryptFile.delete(); uncryptFile.delete();
mUpdaterController.getActualUpdate(update.getDownloadId()) mUpdaterController.getActualUpdate(update.getDownloadId())
.setStatus(UpdateStatus.INSTALLATION_FAILED); .setStatus(UpdateStatus.INSTALLATION_FAILED);

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
*/ */
package org.lineageos.updater.controller; package org.lineageos.updater.controller;
import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
@@ -63,11 +64,7 @@ public class UpdaterController {
private final File mDownloadRoot; private final File mDownloadRoot;
private int mActiveDownloads = 0; private int mActiveDownloads = 0;
private Set<String> mVerifyingUpdates = new HashSet<>(); private final Set<String> mVerifyingUpdates = new HashSet<>();
public static synchronized UpdaterController getInstance() {
return sUpdaterController;
}
protected static synchronized UpdaterController getInstance(Context context) { protected static synchronized UpdaterController getInstance(Context context) {
if (sUpdaterController == null) { if (sUpdaterController == null) {
@@ -80,8 +77,8 @@ public class UpdaterController {
mBroadcastManager = LocalBroadcastManager.getInstance(context); mBroadcastManager = LocalBroadcastManager.getInstance(context);
mUpdatesDbHelper = new UpdatesDbHelper(context); mUpdatesDbHelper = new UpdatesDbHelper(context);
mDownloadRoot = Utils.getDownloadPath(context); mDownloadRoot = Utils.getDownloadPath(context);
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE); PowerManager powerManager = context.getSystemService(PowerManager.class);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Updater"); mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Updater:wakelock");
mWakeLock.setReferenceCounted(false); mWakeLock.setReferenceCounted(false);
mContext = context.getApplicationContext(); mContext = context.getApplicationContext();
@@ -92,7 +89,7 @@ public class UpdaterController {
} }
} }
private class DownloadEntry { private static class DownloadEntry {
final Update mUpdate; final Update mUpdate;
DownloadClient mDownloadClient; DownloadClient mDownloadClient;
private DownloadEntry(Update update) { private DownloadEntry(Update update) {
@@ -100,7 +97,7 @@ public class UpdaterController {
} }
} }
private Map<String, DownloadEntry> mDownloads = new HashMap<>(); private final Map<String, DownloadEntry> mDownloads = new HashMap<>();
void notifyUpdateChange(String downloadId) { void notifyUpdateChange(String downloadId) {
Intent intent = new Intent(); Intent intent = new Intent();
@@ -156,8 +153,12 @@ public class UpdaterController {
return new DownloadClient.DownloadCallback() { return new DownloadClient.DownloadCallback() {
@Override @Override
public void onResponse(int statusCode, String url, DownloadClient.Headers headers) { public void onResponse(DownloadClient.Headers headers) {
final Update update = mDownloads.get(downloadId).mUpdate; final DownloadEntry entry = mDownloads.get(downloadId);
if (entry == null) {
return;
}
final Update update = entry.mUpdate;
String contentLength = headers.get("Content-Length"); String contentLength = headers.get("Content-Length");
if (contentLength != null) { if (contentLength != null) {
try { try {
@@ -177,28 +178,34 @@ public class UpdaterController {
} }
@Override @Override
public void onSuccess(File destination) { public void onSuccess() {
Log.d(TAG, "Download complete"); Log.d(TAG, "Download complete");
Update update = mDownloads.get(downloadId).mUpdate; DownloadEntry entry = mDownloads.get(downloadId);
if (entry != null) {
Update update = entry.mUpdate;
update.setStatus(UpdateStatus.VERIFYING); update.setStatus(UpdateStatus.VERIFYING);
removeDownloadClient(mDownloads.get(downloadId)); removeDownloadClient(entry);
verifyUpdateAsync(downloadId); verifyUpdateAsync(downloadId);
notifyUpdateChange(downloadId); notifyUpdateChange(downloadId);
tryReleaseWakelock(); tryReleaseWakelock();
} }
}
@Override @Override
public void onFailure(boolean cancelled) { public void onFailure(boolean cancelled) {
Update update = mDownloads.get(downloadId).mUpdate;
if (cancelled) { if (cancelled) {
Log.d(TAG, "Download cancelled"); Log.d(TAG, "Download cancelled");
// Already notified // Already notified
} else { } else {
DownloadEntry entry = mDownloads.get(downloadId);
if (entry != null) {
Update update = entry.mUpdate;
Log.e(TAG, "Download failed"); Log.e(TAG, "Download failed");
removeDownloadClient(mDownloads.get(downloadId)); removeDownloadClient(entry);
update.setStatus(UpdateStatus.PAUSED_ERROR); update.setStatus(UpdateStatus.PAUSED_ERROR);
notifyUpdateChange(downloadId); notifyUpdateChange(downloadId);
} }
}
tryReleaseWakelock(); tryReleaseWakelock();
} }
}; };
@@ -210,9 +217,12 @@ public class UpdaterController {
private int mProgress = 0; private int mProgress = 0;
@Override @Override
public void update(long bytesRead, long contentLength, long speed, long eta, public void update(long bytesRead, long contentLength, long speed, long eta) {
boolean done) { DownloadEntry entry = mDownloads.get(downloadId);
Update update = mDownloads.get(downloadId).mUpdate; if (entry == null) {
return;
}
Update update = entry.mUpdate;
if (contentLength <= 0) { if (contentLength <= 0) {
if (update.getFileSize() <= 0) { if (update.getFileSize() <= 0) {
return; return;
@@ -224,7 +234,7 @@ public class UpdaterController {
return; return;
} }
final long now = SystemClock.elapsedRealtime(); final long now = SystemClock.elapsedRealtime();
int progress = Math.round(bytesRead * 100 / contentLength); int progress = Math.round(bytesRead * 100f / contentLength);
if (progress != mProgress || mLastUpdate - now > MAX_REPORT_INTERVAL_MS) { if (progress != mProgress || mLastUpdate - now > MAX_REPORT_INTERVAL_MS) {
mProgress = progress; mProgress = progress;
mLastUpdate = now; mLastUpdate = now;
@@ -237,12 +247,16 @@ public class UpdaterController {
}; };
} }
@SuppressLint("SetWorldReadable")
private void verifyUpdateAsync(final String downloadId) { private void verifyUpdateAsync(final String downloadId) {
mVerifyingUpdates.add(downloadId); mVerifyingUpdates.add(downloadId);
new Thread(() -> { new Thread(() -> {
Update update = mDownloads.get(downloadId).mUpdate; DownloadEntry entry = mDownloads.get(downloadId);
if (entry != null) {
Update update = entry.mUpdate;
File file = update.getFile(); File file = update.getFile();
if (file.exists() && verifyPackage(file)) { if (file.exists() && verifyPackage(file)) {
//noinspection ResultOfMethodCallIgnored
file.setReadable(true, false); file.setReadable(true, false);
update.setPersistentStatus(UpdateStatus.Persistent.VERIFIED); update.setPersistentStatus(UpdateStatus.Persistent.VERIFIED);
mUpdatesDbHelper.changeUpdateStatus(update); mUpdatesDbHelper.changeUpdateStatus(update);
@@ -255,6 +269,7 @@ public class UpdaterController {
} }
mVerifyingUpdates.remove(downloadId); mVerifyingUpdates.remove(downloadId);
notifyUpdateChange(downloadId); notifyUpdateChange(downloadId);
}
}).start(); }).start();
} }
@@ -266,6 +281,7 @@ public class UpdaterController {
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "Verification failed", e); Log.e(TAG, "Verification failed", e);
if (file.exists()) { if (file.exists()) {
//noinspection ResultOfMethodCallIgnored
file.delete(); file.delete();
} else { } else {
// The download was probably stopped. Exit silently // The download was probably stopped. Exit silently
@@ -285,7 +301,7 @@ public class UpdaterController {
} else if (update.getFileSize() > 0) { } else if (update.getFileSize() > 0) {
update.setStatus(UpdateStatus.PAUSED); update.setStatus(UpdateStatus.PAUSED);
int progress = Math.round( int progress = Math.round(
update.getFile().length() * 100 / update.getFileSize()); update.getFile().length() * 100f / update.getFileSize());
update.setProgress(progress); update.setProgress(progress);
} }
break; break;
@@ -293,15 +309,6 @@ public class UpdaterController {
return true; return true;
} }
public void setUpdatesNotAvailableOnline(List<String> downloadIds) {
for (String downloadId : downloadIds) {
DownloadEntry update = mDownloads.get(downloadId);
if (update != null) {
update.mUpdate.setAvailableOnline(false);
}
}
}
public void setUpdatesAvailableOnline(List<String> downloadIds, boolean purgeList) { public void setUpdatesAvailableOnline(List<String> downloadIds, boolean purgeList) {
List<String> toRemove = new ArrayList<>(); List<String> toRemove = new ArrayList<>();
for (DownloadEntry entry : mDownloads.values()) { for (DownloadEntry entry : mDownloads.values()) {
@@ -327,9 +334,12 @@ public class UpdaterController {
Log.d(TAG, "Adding download: " + updateInfo.getDownloadId()); Log.d(TAG, "Adding download: " + updateInfo.getDownloadId());
if (mDownloads.containsKey(updateInfo.getDownloadId())) { if (mDownloads.containsKey(updateInfo.getDownloadId())) {
Log.d(TAG, "Download (" + updateInfo.getDownloadId() + ") already added"); Log.d(TAG, "Download (" + updateInfo.getDownloadId() + ") already added");
Update updateAdded = mDownloads.get(updateInfo.getDownloadId()).mUpdate; DownloadEntry entry = mDownloads.get(updateInfo.getDownloadId());
if (entry != null) {
Update updateAdded = entry.mUpdate;
updateAdded.setAvailableOnline(availableOnline && updateAdded.getAvailableOnline()); updateAdded.setAvailableOnline(availableOnline && updateAdded.getAvailableOnline());
updateAdded.setDownloadUrl(updateInfo.getDownloadUrl()); updateAdded.setDownloadUrl(updateInfo.getDownloadUrl());
}
return false; return false;
} }
Update update = new Update(updateInfo); Update update = new Update(updateInfo);
@@ -344,12 +354,18 @@ public class UpdaterController {
return true; return true;
} }
public boolean startDownload(String downloadId) { @SuppressLint("WakelockTimeout")
public void startDownload(String downloadId) {
Log.d(TAG, "Starting " + downloadId); Log.d(TAG, "Starting " + downloadId);
if (!mDownloads.containsKey(downloadId) || isDownloading(downloadId)) { if (!mDownloads.containsKey(downloadId) || isDownloading(downloadId)) {
return false; return;
} }
Update update = mDownloads.get(downloadId).mUpdate; DownloadEntry entry = mDownloads.get(downloadId);
if (entry == null) {
Log.e(TAG, "Could not get download entry");
return;
}
Update update = entry.mUpdate;
File destination = new File(mDownloadRoot, update.getName()); File destination = new File(mDownloadRoot, update.getName());
if (destination.exists()) { if (destination.exists()) {
destination = Utils.appendSequentialNumber(destination); destination = Utils.appendSequentialNumber(destination);
@@ -369,28 +385,33 @@ public class UpdaterController {
Log.e(TAG, "Could not build download client"); Log.e(TAG, "Could not build download client");
update.setStatus(UpdateStatus.PAUSED_ERROR); update.setStatus(UpdateStatus.PAUSED_ERROR);
notifyUpdateChange(downloadId); notifyUpdateChange(downloadId);
return false; return;
} }
addDownloadClient(mDownloads.get(downloadId), downloadClient); addDownloadClient(entry, downloadClient);
update.setStatus(UpdateStatus.STARTING); update.setStatus(UpdateStatus.STARTING);
notifyUpdateChange(downloadId); notifyUpdateChange(downloadId);
downloadClient.start(); downloadClient.start();
mWakeLock.acquire(); mWakeLock.acquire();
return true;
} }
public boolean resumeDownload(String downloadId) { @SuppressLint("WakelockTimeout")
public void resumeDownload(String downloadId) {
Log.d(TAG, "Resuming " + downloadId); Log.d(TAG, "Resuming " + downloadId);
if (!mDownloads.containsKey(downloadId) || isDownloading(downloadId)) { if (!mDownloads.containsKey(downloadId) || isDownloading(downloadId)) {
return false; return;
} }
Update update = mDownloads.get(downloadId).mUpdate; DownloadEntry entry = mDownloads.get(downloadId);
if (entry == null) {
Log.e(TAG, "Could not get download entry");
return;
}
Update update = entry.mUpdate;
File file = update.getFile(); File file = update.getFile();
if (file == null || !file.exists()) { if (file == null || !file.exists()) {
Log.e(TAG, "The destination file of " + downloadId + " doesn't exist, can't resume"); Log.e(TAG, "The destination file of " + downloadId + " doesn't exist, can't resume");
update.setStatus(UpdateStatus.PAUSED_ERROR); update.setStatus(UpdateStatus.PAUSED_ERROR);
notifyUpdateChange(downloadId); notifyUpdateChange(downloadId);
return false; return;
} }
if (file.exists() && update.getFileSize() > 0 && file.length() >= update.getFileSize()) { if (file.exists() && update.getFileSize() > 0 && file.length() >= update.getFileSize()) {
Log.d(TAG, "File already downloaded, starting verification"); Log.d(TAG, "File already downloaded, starting verification");
@@ -411,31 +432,31 @@ public class UpdaterController {
Log.e(TAG, "Could not build download client"); Log.e(TAG, "Could not build download client");
update.setStatus(UpdateStatus.PAUSED_ERROR); update.setStatus(UpdateStatus.PAUSED_ERROR);
notifyUpdateChange(downloadId); notifyUpdateChange(downloadId);
return false; return;
} }
addDownloadClient(mDownloads.get(downloadId), downloadClient); addDownloadClient(entry, downloadClient);
update.setStatus(UpdateStatus.STARTING); update.setStatus(UpdateStatus.STARTING);
notifyUpdateChange(downloadId); notifyUpdateChange(downloadId);
downloadClient.resume(); downloadClient.resume();
mWakeLock.acquire(); mWakeLock.acquire();
} }
return true;
} }
public boolean pauseDownload(String downloadId) { public void pauseDownload(String downloadId) {
Log.d(TAG, "Pausing " + downloadId); Log.d(TAG, "Pausing " + downloadId);
if (!isDownloading(downloadId)) { if (!isDownloading(downloadId)) {
return false; return;
} }
DownloadEntry entry = mDownloads.get(downloadId); DownloadEntry entry = mDownloads.get(downloadId);
if (entry != null) {
entry.mDownloadClient.cancel(); entry.mDownloadClient.cancel();
removeDownloadClient(entry); removeDownloadClient(entry);
entry.mUpdate.setStatus(UpdateStatus.PAUSED); entry.mUpdate.setStatus(UpdateStatus.PAUSED);
entry.mUpdate.setEta(0); entry.mUpdate.setEta(0);
entry.mUpdate.setSpeed(0); entry.mUpdate.setSpeed(0);
notifyUpdateChange(downloadId); notifyUpdateChange(downloadId);
return true; }
} }
private void deleteUpdateAsync(final Update update) { private void deleteUpdateAsync(final Update update) {
@@ -448,12 +469,14 @@ public class UpdaterController {
}).start(); }).start();
} }
public boolean deleteUpdate(String downloadId) { public void deleteUpdate(String downloadId) {
Log.d(TAG, "Cancelling " + downloadId); Log.d(TAG, "Cancelling " + downloadId);
if (!mDownloads.containsKey(downloadId) || isDownloading(downloadId)) { if (!mDownloads.containsKey(downloadId) || isDownloading(downloadId)) {
return false; return;
} }
Update update = mDownloads.get(downloadId).mUpdate; DownloadEntry entry = mDownloads.get(downloadId);
if (entry != null) {
Update update = entry.mUpdate;
update.setStatus(UpdateStatus.DELETED); update.setStatus(UpdateStatus.DELETED);
update.setProgress(0); update.setProgress(0);
update.setPersistentStatus(UpdateStatus.Persistent.UNKNOWN); update.setPersistentStatus(UpdateStatus.Persistent.UNKNOWN);
@@ -466,12 +489,7 @@ public class UpdaterController {
} else { } else {
notifyUpdateChange(downloadId); notifyUpdateChange(downloadId);
} }
return true;
} }
public Set<String> getIds() {
return mDownloads.keySet();
} }
public List<UpdateInfo> getUpdates() { public List<UpdateInfo> getUpdates() {
@@ -493,6 +511,7 @@ public class UpdaterController {
} }
public boolean isDownloading(String downloadId) { public boolean isDownloading(String downloadId) {
//noinspection ConstantConditions
return mDownloads.containsKey(downloadId) && return mDownloads.containsKey(downloadId) &&
mDownloads.get(downloadId).mDownloadClient != null; mDownloads.get(downloadId).mDownloadClient != null;
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -85,7 +85,7 @@ public class UpdaterService extends Service {
mUpdaterController = UpdaterController.getInstance(this); mUpdaterController = UpdaterController.getInstance(this);
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); mNotificationManager = getSystemService(NotificationManager.class);
NotificationChannel notificationChannel = new NotificationChannel( NotificationChannel notificationChannel = new NotificationChannel(
ONGOING_NOTIFICATION_CHANNEL, ONGOING_NOTIFICATION_CHANNEL,
getString(R.string.ongoing_channel_title), getString(R.string.ongoing_channel_title),
@@ -100,7 +100,7 @@ public class UpdaterService extends Service {
Intent notificationIntent = new Intent(this, UpdatesActivity.class); Intent notificationIntent = new Intent(this, UpdatesActivity.class);
PendingIntent intent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent intent = PendingIntent.getActivity(this, 0, notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
mNotificationBuilder.setContentIntent(intent); mNotificationBuilder.setContentIntent(intent);
mBroadcastReceiver = new BroadcastReceiver() { mBroadcastReceiver = new BroadcastReceiver() {
@@ -123,8 +123,7 @@ public class UpdaterService extends Service {
handleInstallProgress(update); handleInstallProgress(update);
} else if (UpdaterController.ACTION_UPDATE_REMOVED.equals(intent.getAction())) { } else if (UpdaterController.ACTION_UPDATE_REMOVED.equals(intent.getAction())) {
Bundle extras = mNotificationBuilder.getExtras(); Bundle extras = mNotificationBuilder.getExtras();
if (extras != null && downloadId.equals( if (downloadId.equals(extras.getString(UpdaterController.EXTRA_DOWNLOAD_ID))) {
extras.getString(UpdaterController.EXTRA_DOWNLOAD_ID))) {
mNotificationBuilder.setExtras(null); mNotificationBuilder.setExtras(null);
UpdateInfo update = mUpdaterController.getUpdate(downloadId); UpdateInfo update = mUpdaterController.getUpdate(downloadId);
if (update.getStatus() != UpdateStatus.INSTALLED) { if (update.getStatus() != UpdateStatus.INSTALLED) {
@@ -502,7 +501,8 @@ public class UpdaterService extends Service {
intent.setAction(ACTION_DOWNLOAD_CONTROL); intent.setAction(ACTION_DOWNLOAD_CONTROL);
intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId); intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId);
intent.putExtra(EXTRA_DOWNLOAD_CONTROL, DOWNLOAD_RESUME); intent.putExtra(EXTRA_DOWNLOAD_CONTROL, DOWNLOAD_RESUME);
return PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); return PendingIntent.getService(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
} }
private PendingIntent getPausePendingIntent(String downloadId) { private PendingIntent getPausePendingIntent(String downloadId) {
@@ -510,26 +510,28 @@ public class UpdaterService extends Service {
intent.setAction(ACTION_DOWNLOAD_CONTROL); intent.setAction(ACTION_DOWNLOAD_CONTROL);
intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId); intent.putExtra(EXTRA_DOWNLOAD_ID, downloadId);
intent.putExtra(EXTRA_DOWNLOAD_CONTROL, DOWNLOAD_PAUSE); intent.putExtra(EXTRA_DOWNLOAD_CONTROL, DOWNLOAD_PAUSE);
return PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); return PendingIntent.getService(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
} }
private PendingIntent getRebootPendingIntent() { private PendingIntent getRebootPendingIntent() {
final Intent intent = new Intent(this, UpdaterReceiver.class); final Intent intent = new Intent(this, UpdaterReceiver.class);
intent.setAction(UpdaterReceiver.ACTION_INSTALL_REBOOT); intent.setAction(UpdaterReceiver.ACTION_INSTALL_REBOOT);
return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); return PendingIntent.getBroadcast(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
} }
private PendingIntent getSuspendInstallationPendingIntent() { private PendingIntent getSuspendInstallationPendingIntent() {
final Intent intent = new Intent(this, UpdaterService.class); final Intent intent = new Intent(this, UpdaterService.class);
intent.setAction(ACTION_INSTALL_SUSPEND); intent.setAction(ACTION_INSTALL_SUSPEND);
return PendingIntent.getService(this, 0, intent, return PendingIntent.getService(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
} }
private PendingIntent getResumeInstallationPendingIntent() { private PendingIntent getResumeInstallationPendingIntent() {
final Intent intent = new Intent(this, UpdaterService.class); final Intent intent = new Intent(this, UpdaterService.class);
intent.setAction(ACTION_INSTALL_RESUME); intent.setAction(ACTION_INSTALL_RESUME);
return PendingIntent.getService(this, 0, intent, return PendingIntent.getService(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT); PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -17,27 +17,23 @@ package org.lineageos.updater.download;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.List;
import java.util.Map;
public interface DownloadClient { public interface DownloadClient {
interface DownloadCallback { interface DownloadCallback {
void onResponse(int statusCode, String url, Headers headers); void onResponse(Headers headers);
void onSuccess(File destination); void onSuccess();
void onFailure(boolean cancelled); void onFailure(boolean cancelled);
} }
interface ProgressListener { interface ProgressListener {
void update(long bytesRead, long contentLength, long speed, long eta, boolean done); void update(long bytesRead, long contentLength, long speed, long eta);
} }
interface Headers { interface Headers {
String get(String name); String get(String name);
Map<String, List<String>> getAll();
} }
/** /**

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -51,10 +51,6 @@ public class HttpURLConnectionClient implements DownloadClient {
return mClient.getHeaderField(name); return mClient.getHeaderField(name);
} }
@Override
public Map<String, List<String>> getAll() {
return mClient.getHeaderFields();
}
} }
HttpURLConnectionClient(String url, File destination, HttpURLConnectionClient(String url, File destination,
@@ -144,8 +140,20 @@ public class HttpURLConnectionClient implements DownloadClient {
mResume = resume; mResume = resume;
} }
private void calculateSpeed() { private void calculateSpeed(boolean justResumed) {
final long millis = SystemClock.elapsedRealtime(); final long millis = SystemClock.elapsedRealtime();
if (justResumed) {
// If we don't start over with these after resumption, we get huge numbers for
// ETA since the delta will grow, resulting in a very low speed
mLastMillis = millis;
mSpeed = -1; // we don't want the moving avg with values from who knows when
// need to do this as well, otherwise the second time we call calculateSpeed(),
// the difference (mTotalBytesRead - mCurSampleBytes) will be larger than expected,
// resulting in a higher speed calculation
mCurSampleBytes = mTotalBytesRead;
return;
}
final long delta = millis - mLastMillis; final long delta = millis - mLastMillis;
if (delta > 500) { if (delta > 500) {
final long curSpeed = ((mTotalBytesRead - mCurSampleBytes) * 1000) / delta; final long curSpeed = ((mTotalBytesRead - mCurSampleBytes) * 1000) / delta;
@@ -179,8 +187,8 @@ public class HttpURLConnectionClient implements DownloadClient {
String protocol = mClient.getURL().getProtocol(); String protocol = mClient.getURL().getProtocol();
class DuplicateLink { class DuplicateLink {
private String mUrl; private final String mUrl;
private int mPriority; private final int mPriority;
private DuplicateLink(String url, int priority) { private DuplicateLink(String url, int priority) {
mUrl = url; mUrl = url;
mPriority = priority; mPriority = priority;
@@ -233,9 +241,11 @@ public class HttpURLConnectionClient implements DownloadClient {
} catch (IOException e) { } catch (IOException e) {
if (duplicates != null && !duplicates.isEmpty()) { if (duplicates != null && !duplicates.isEmpty()) {
DuplicateLink link = duplicates.poll(); DuplicateLink link = duplicates.poll();
if (link != null) {
duplicates.remove(link); duplicates.remove(link);
newUrl = link.mUrl; newUrl = link.mUrl;
Log.e(TAG, "Using duplicate link " + link.mUrl, e); Log.e(TAG, "Using duplicate link " + link.mUrl, e);
}
} else { } else {
throw e; throw e;
} }
@@ -245,6 +255,7 @@ public class HttpURLConnectionClient implements DownloadClient {
@Override @Override
public void run() { public void run() {
boolean justResumed = false;
try { try {
mClient.setInstanceFollowRedirects(!mUseDuplicateLinks); mClient.setInstanceFollowRedirects(!mUseDuplicateLinks);
mClient.connect(); mClient.connect();
@@ -255,9 +266,10 @@ public class HttpURLConnectionClient implements DownloadClient {
responseCode = mClient.getResponseCode(); responseCode = mClient.getResponseCode();
} }
mCallback.onResponse(responseCode, mClient.getURL().toString(), new Headers()); mCallback.onResponse(new Headers());
if (mResume && isPartialContentCode(responseCode)) { if (mResume && isPartialContentCode(responseCode)) {
justResumed = true;
mTotalBytesRead = mDestination.length(); mTotalBytesRead = mDestination.length();
Log.d(TAG, "The server fulfilled the partial content request"); Log.d(TAG, "The server fulfilled the partial content request");
} else if (mResume || !isSuccessCode(responseCode)) { } else if (mResume || !isSuccessCode(responseCode)) {
@@ -276,15 +288,15 @@ public class HttpURLConnectionClient implements DownloadClient {
while (!isInterrupted() && (count = inputStream.read(b)) > 0) { while (!isInterrupted() && (count = inputStream.read(b)) > 0) {
outputStream.write(b, 0, count); outputStream.write(b, 0, count);
mTotalBytesRead += count; mTotalBytesRead += count;
calculateSpeed(); calculateSpeed(justResumed);
calculateEta(); calculateEta();
justResumed = false; // otherwise we will never get speed and ETA again
if (mProgressListener != null) { if (mProgressListener != null) {
mProgressListener.update(mTotalBytesRead, mTotalBytes, mSpeed, mEta, mProgressListener.update(mTotalBytesRead, mTotalBytes, mSpeed, mEta);
false);
} }
} }
if (mProgressListener != null) { if (mProgressListener != null) {
mProgressListener.update(mTotalBytesRead, mTotalBytes, mSpeed, mEta, true); mProgressListener.update(mTotalBytesRead, mTotalBytes, mSpeed, mEta);
} }
outputStream.flush(); outputStream.flush();
@@ -292,7 +304,7 @@ public class HttpURLConnectionClient implements DownloadClient {
if (isInterrupted()) { if (isInterrupted()) {
mCallback.onFailure(true); mCallback.onFailure(true);
} else { } else {
mCallback.onSuccess(mDestination); mCallback.onSuccess();
} }
} }
} catch (IOException e) { } catch (IOException e) {

View File

@@ -55,4 +55,6 @@ public final class Constants {
public static final String UPDATE_RECOVERY_EXEC = "/vendor/bin/install-recovery.sh"; public static final String UPDATE_RECOVERY_EXEC = "/vendor/bin/install-recovery.sh";
public static final String UPDATE_RECOVERY_PROPERTY = "persist.vendor.recovery_update"; public static final String UPDATE_RECOVERY_PROPERTY = "persist.vendor.recovery_update";
public static final String HAS_SEEN_INFO_DIALOG = "has_seen_info_dialog";
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -15,8 +15,15 @@
*/ */
package org.lineageos.updater.misc; package org.lineageos.updater.misc;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.provider.OpenableColumns;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@@ -34,9 +41,9 @@ public class FileUtils {
} }
private static class CallbackByteChannel implements ReadableByteChannel { private static class CallbackByteChannel implements ReadableByteChannel {
private ProgressCallBack mCallback; private final ProgressCallBack mCallback;
private long mSize; private final long mSize;
private ReadableByteChannel mReadableByteChannel; private final ReadableByteChannel mReadableByteChannel;
private long mSizeRead; private long mSizeRead;
private int mProgress; private int mProgress;
@@ -86,13 +93,39 @@ public class FileUtils {
} catch (IOException e) { } catch (IOException e) {
Log.e(TAG, "Could not copy file", e); Log.e(TAG, "Could not copy file", e);
if (destFile.exists()) { if (destFile.exists()) {
//noinspection ResultOfMethodCallIgnored
destFile.delete(); destFile.delete();
} }
throw e; throw e;
} }
} }
public static void copyFile(File sourceFile, File destFile) throws IOException { public static void copyFile(ContentResolver cr, File sourceFile, Uri destUri,
copyFile(sourceFile, destFile, null); ProgressCallBack progressCallBack) throws IOException {
try (FileChannel sourceChannel = new FileInputStream(sourceFile).getChannel();
ParcelFileDescriptor pfd = cr.openFileDescriptor(destUri, "w");
FileChannel destChannel = new FileOutputStream(pfd.getFileDescriptor()).getChannel()) {
if (progressCallBack != null) {
ReadableByteChannel readableByteChannel = new CallbackByteChannel(sourceChannel,
sourceFile.length(), progressCallBack);
destChannel.transferFrom(readableByteChannel, 0, sourceChannel.size());
} else {
destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
}
} catch (IOException e) {
Log.e(TAG, "Could not copy file", e);
throw e;
}
}
public static String queryName(@NonNull ContentResolver resolver, Uri uri) {
try (Cursor returnCursor = resolver.query(uri, null, null, null, null)) {
returnCursor.moveToFirst();
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
return returnCursor.getString(nameIndex);
} catch (Exception e) {
// ignore
return null;
}
} }
} }

View File

@@ -1,69 +0,0 @@
/*
* Copyright (C) 2017 The LineageOS Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.lineageos.updater.misc;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import java.util.ArrayList;
import java.util.List;
public class PermissionsUtils {
public static boolean hasPermission(Context context, String permission) {
int permissionState = context.checkSelfPermission(permission);
return permissionState == PackageManager.PERMISSION_GRANTED;
}
/**
* Check the given permissions and requests them if needed.
*
* @param activity The target activity
* @param permissions The permissions to check
* @param requestCode @see Activity#requestPermissions(String[] , int)
* @return true if the permission is granted, false otherwise
*/
public static boolean checkAndRequestPermissions(final Activity activity,
final String[] permissions, final int requestCode) {
List<String> permissionsList = new ArrayList<>();
for (String permission : permissions) {
if (!hasPermission(activity, permission)) {
permissionsList.add(permission);
}
}
if (permissionsList.size() == 0) {
return true;
} else {
String[] permissionsArray = new String[permissionsList.size()];
permissionsArray = permissionsList.toArray(permissionsArray);
activity.requestPermissions(permissionsArray, requestCode);
return false;
}
}
/**
* Check and request the write external storage permission
*
* @see #checkAndRequestPermissions(Activity, String[], int)
*/
public static boolean checkAndRequestStoragePermission(Activity activity, int requestCode) {
return checkAndRequestPermissions(activity,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
requestCode);
}
}

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -36,13 +36,6 @@ public final class StringGenerator {
return f.format(date); return f.format(date);
} }
public static String getTimeLocalizedUTC(Context context, long unixTimestamp) {
DateFormat f = DateFormat.getTimeInstance(DateFormat.SHORT, getCurrentLocale(context));
f.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = new Date(unixTimestamp * 1000);
return f.format(date);
}
public static String getDateLocalized(Context context, int dateFormat, long unixTimestamp) { public static String getDateLocalized(Context context, int dateFormat, long unixTimestamp) {
DateFormat f = DateFormat.getDateInstance(dateFormat, getCurrentLocale(context)); DateFormat f = DateFormat.getDateInstance(dateFormat, getCurrentLocale(context));
Date date = new Date(unixTimestamp * 1000); Date date = new Date(unixTimestamp * 1000);
@@ -56,17 +49,6 @@ public final class StringGenerator {
return f.format(date); return f.format(date);
} }
public static String getDateTimeLocalized(Context context, long unixTimestamp) {
DateFormat f = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT,
getCurrentLocale(context));
Date date = new Date(unixTimestamp * 1000);
return f.format(date);
}
public static String bytesToMegabytes(Context context, long bytes) {
return String.format(getCurrentLocale(context), "%.0f", bytes / 1024.f / 1024.f);
}
public static String formatETA(Context context, long millis) { public static String formatETA(Context context, long millis) {
final long SECOND_IN_MILLIS = 1000; final long SECOND_IN_MILLIS = 1000;
final long MINUTE_IN_MILLIS = SECOND_IN_MILLIS * 60; final long MINUTE_IN_MILLIS = SECOND_IN_MILLIS * 60;

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2017-2021 The LineageOS Project * Copyright (C) 2017-2022 The LineageOS Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -24,7 +24,6 @@ import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.os.Environment;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.os.storage.StorageManager; import android.os.storage.StorageManager;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
@@ -122,14 +121,14 @@ public class Utils {
throws IOException, JSONException { throws IOException, JSONException {
List<UpdateInfo> updates = new ArrayList<>(); List<UpdateInfo> updates = new ArrayList<>();
String json = ""; StringBuilder json = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(file))) { try (BufferedReader br = new BufferedReader(new FileReader(file))) {
for (String line; (line = br.readLine()) != null;) { for (String line; (line = br.readLine()) != null;) {
json += line; json.append(line);
} }
} }
JSONObject obj = new JSONObject(json); JSONObject obj = new JSONObject(json.toString());
JSONArray updatesList = obj.getJSONArray("response"); JSONArray updatesList = obj.getJSONArray("response");
for (int i = 0; i < updatesList.length(); i++) { for (int i = 0; i < updatesList.length(); i++) {
if (updatesList.isNull(i)) { if (updatesList.isNull(i)) {
@@ -186,15 +185,13 @@ public class Utils {
} }
public static boolean isNetworkAvailable(Context context) { public static boolean isNetworkAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService( ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo(); NetworkInfo info = cm.getActiveNetworkInfo();
return !(info == null || !info.isConnected() || !info.isAvailable()); return !(info == null || !info.isConnected() || !info.isAvailable());
} }
public static boolean isOnWifiOrEthernet(Context context) { public static boolean isOnWifiOrEthernet(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService( ConnectivityManager cm = context.getSystemService(ConnectivityManager.class);
Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo(); NetworkInfo info = cm.getActiveNetworkInfo();
return (info != null && (info.getType() == ConnectivityManager.TYPE_ETHERNET return (info != null && (info.getType() == ConnectivityManager.TYPE_ETHERNET
|| info.getType() == ConnectivityManager.TYPE_WIFI)); || info.getType() == ConnectivityManager.TYPE_WIFI));
@@ -206,8 +203,6 @@ public class Utils {
* @param oldJson old update list * @param oldJson old update list
* @param newJson new update list * @param newJson new update list
* @return true if newJson has at least a compatible update not available in oldJson * @return true if newJson has at least a compatible update not available in oldJson
* @throws IOException
* @throws JSONException
*/ */
public static boolean checkForNewUpdates(File oldJson, File newJson) public static boolean checkForNewUpdates(File oldJson, File newJson)
throws IOException, JSONException { throws IOException, JSONException {
@@ -264,6 +259,7 @@ public class Utils {
return; return;
} }
for (File file : uncryptFiles) { for (File file : uncryptFiles) {
//noinspection ResultOfMethodCallIgnored
file.delete(); file.delete();
} }
} }
@@ -273,7 +269,6 @@ public class Utils {
* the user can't access and that might have stale files. This can happen if * the user can't access and that might have stale files. This can happen if
* the data of the application are wiped. * the data of the application are wiped.
* *
* @param context
*/ */
public static void cleanupDownloadsDir(Context context) { public static void cleanupDownloadsDir(Context context) {
File downloadPath = getDownloadPath(context); File downloadPath = getDownloadPath(context);
@@ -290,6 +285,7 @@ public class Utils {
lastUpdatePath != null) { lastUpdatePath != null) {
File lastUpdate = new File(lastUpdatePath); File lastUpdate = new File(lastUpdatePath);
if (lastUpdate.exists()) { if (lastUpdate.exists()) {
//noinspection ResultOfMethodCallIgnored
lastUpdate.delete(); lastUpdate.delete();
// Remove the pref not to delete the file if re-downloaded // Remove the pref not to delete the file if re-downloaded
preferences.edit().remove(Constants.PREF_INSTALL_PACKAGE_PATH).apply(); preferences.edit().remove(Constants.PREF_INSTALL_PACKAGE_PATH).apply();
@@ -319,6 +315,7 @@ public class Utils {
for (File file : files) { for (File file : files) {
if (!knownPaths.contains(file.getAbsolutePath())) { if (!knownPaths.contains(file.getAbsolutePath())) {
Log.d(TAG, "Deleting " + file.getAbsolutePath()); Log.d(TAG, "Deleting " + file.getAbsolutePath());
//noinspection ResultOfMethodCallIgnored
file.delete(); file.delete();
} }
} }
@@ -367,7 +364,8 @@ public class Utils {
return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN); return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN);
} }
public static void addToClipboard(Context context, String label, String text, String toastMessage) { public static void addToClipboard(Context context, String label, String text,
String toastMessage) {
ClipboardManager clipboard = (ClipboardManager) context.getSystemService( ClipboardManager clipboard = (ClipboardManager) context.getSystemService(
Context.CLIPBOARD_SERVICE); Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(label, text); ClipData clip = ClipData.newPlainText(label, text);

View File

@@ -32,10 +32,6 @@ public class Update extends UpdateBase implements UpdateInfo {
public Update() { public Update() {
} }
public Update(UpdateBaseInfo update) {
super(update);
}
public Update(UpdateInfo update) { public Update(UpdateInfo update) {
super(update); super(update);
mStatus = update.getStatus(); mStatus = update.getStatus();

View File

@@ -19,7 +19,6 @@ public enum UpdateStatus {
UNKNOWN, UNKNOWN,
STARTING, STARTING,
DOWNLOADING, DOWNLOADING,
DOWNLOADED,
PAUSED, PAUSED,
PAUSED_ERROR, PAUSED_ERROR,
DELETED, DELETED,

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.View; import android.view.View;
import androidx.annotation.NonNull;
import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@@ -21,8 +22,9 @@ public final class FlingBehavior extends AppBarLayout.Behavior {
} }
@Override @Override
public boolean onNestedFling(CoordinatorLayout coordinatorLayout, AppBarLayout child, public boolean onNestedFling(@NonNull CoordinatorLayout coordinatorLayout,
View target, float velocityX, float velocityY, boolean consumed) { @NonNull AppBarLayout child, @NonNull View target,
float velocityX, float velocityY, boolean consumed) {
if (velocityY > 0 && !isPositive || velocityY < 0 && isPositive) { if (velocityY > 0 && !isPositive || velocityY < 0 && isPositive) {
velocityY = velocityY * -1; velocityY = velocityY * -1;
} }
@@ -37,9 +39,10 @@ public final class FlingBehavior extends AppBarLayout.Behavior {
} }
@Override @Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, public void onNestedPreScroll(@NonNull CoordinatorLayout coordinatorLayout,
View target, int dx, int dy, int[] consumed) { @NonNull AppBarLayout child, @NonNull View target,
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed); int dx, int dy, @NonNull int[] consumed, int type) {
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
isPositive = dy > 0; isPositive = dy > 0;
} }
} }