Merge branch 'develop' into feedmanager_removal

Conflicts:
	src/de/danoeh/antennapod/activity/PreferenceActivity.java
	src/de/danoeh/antennapod/feed/FeedManager.java
	src/de/danoeh/antennapod/service/PlaybackService.java
	src/de/danoeh/antennapod/service/download/DownloadService.java
	src/de/danoeh/antennapod/service/download/DownloadStatus.java
	src/de/danoeh/antennapod/service/download/HttpDownloader.java
	src/de/danoeh/antennapod/storage/DownloadRequester.java
	src/de/danoeh/antennapod/storage/PodDBAdapter.java
	src/de/danoeh/antennapod/util/playback/PlaybackController.java
This commit is contained in:
daniel oeh 2013-08-05 14:57:37 +02:00
commit 75b13431fe
47 changed files with 2091 additions and 1167 deletions

9
.gitignore vendored
View File

@ -23,6 +23,15 @@ build.xml
#eclipse project files
.metadata
.settings
#IntelliJ project files
.idea
*.iml
gen-external-apklibs
out
#transifex downloads
changelog
description
# other
*.odg#
proguard

34
.tx/config Normal file
View File

@ -0,0 +1,34 @@
[main]
host = https://www.transifex.com
[antennapod.english]
source_file = res/values/strings.xml
source_lang = en
trans.az = res/values-az/strings.xml
trans.ca = res/values-ca/strings.xml
trans.cs_CZ = res/values-cs-rCZ/strings.xml
trans.da = res/values-da/strings.xml
trans.de = res/values-de/strings.xml
trans.es = res/values-es/strings.xml
trans.es_ES = res/values-es-rES/strings.xml
trans.fr = res/values-fr/strings.xml
trans.it_IT = res/values-it-rIT/strings.xml
trans.pt = res/values-pt/strings.xml
trans.pt_BR = res/values-pt-rBR/strings.xml
trans.ro_RO = res/values-ro-rRO/strings.xml
trans.ru = res/values-ru/strings.xml
trans.ru-RU = res/values-ru/strings.xml
trans.ru_RU = res/values-ru/strings.xml
trans.uk_UA = res/values-uk-rUA/strings.xml
trans.zh_CN = res/values-zh-rCN/strings.xml
[antennapod.description]
file_filter = description/<lang>.txt
source_file = description/en.txt
source_lang = en
[antennapod.changelog]
file_filter = changelog/<lang>.md
source_file = CHANGELOG.md
source_lang = en

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.danoeh.antennapod"
android:versionCode="30"
android:versionName="0.9.7.3" >
android:versionCode="31"
android:versionName="0.9.7.4" >
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
@ -23,6 +23,9 @@
<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
@ -52,6 +55,37 @@
android:configChanges="keyboardHidden|orientation"
android:label="@string/add_new_feed_label"
android:windowSoftInputMode="adjustResize" >
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http"/>
<data android:host="*"/>
<data android:pathPattern=".*\\.xml"/>
<data android:pathPattern=".*\\.rss"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http"/>
<data android:host="feeds.feedburner.com"/>
<data android:host="feedproxy.google.com"/>
<data android:host="feeds2.feedburner.com"/>
<data android:host="feedsproxy.google.com"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http"/>
<data android:mimeType="text/xml"/>
<data android:mimeType="application/rss+xml"/>
<data android:mimeType="application/atom+xml"/>
<data android:mimeType="application/xml"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
@ -187,76 +221,6 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="*"
android:pathPattern=".*\\.xml"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="*"
android:pathPattern=".*\\.xml"
android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:pathPattern=".*\\.xml"
android:scheme="file" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="application/xml" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="text/xml" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="*"
android:pathPattern=".*\\.opml"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="*"
android:pathPattern=".*\\.opml"
android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="*"
android:mimeType="*/*"
@ -269,7 +233,11 @@
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="text/x-opml" />
<data
android:host="*"
android:pathPattern=".*\\.opml"
android:scheme="file"
android:mimeType="text/x-opml" />
</intent-filter>
</activity>
<activity
@ -368,4 +336,4 @@
</receiver>
</application>
</manifest>
</manifest>

View File

@ -1,6 +1,14 @@
Change Log
==========
Version 0.9.7.4
---------------
* Episode cache size can now be set to unlimited
* Removing an episode in the queue via sliding can now be undone
* Added support for Links in MP3 chapters
* Added Czech(Czech Republic), Azerbaijani and Portuguese translations
* Several bugfixes and improvements
Version 0.9.7.3
---------------
* Bluetooth devices now display metadata during playback (requires AVRCP 1.3 or higher)

View File

@ -7,6 +7,7 @@ ortylp
LatinSuD
wseemann
hzulla
andrewgaul
Translations:
@ -20,4 +21,7 @@ Spanish: frandavid100, Fitoschido, dvd1985
Spanish (Spain): e2jk, dvd1985, frandavid100
Ukrainian (Ukraine): zhenya97, older
French: lacouture, e2jk
Italian (Italy): m.chinni
Italian (Italy): m.chinni
Czech(Czech Republic): elich
Azerbaijani: phoenixar
Portuguese: smarquespt

View File

@ -40,7 +40,7 @@
<body>
<div id="header" align="center">
<img src="logo.png" alt="Logo" width="100px" height="100px"/>
<p>AntennaPod, Version 0.9.7.3</p>
<p>AntennaPod, Version 0.9.7.4</p>
<p>Copyright © 2012 Daniel Oeh</p>
<p>Licensed under the MIT License <a href="LICENSE.html">(View)</a></p>
</div>
@ -51,6 +51,9 @@
<h2>Android-ViewPagerIndicator <a href="http://viewpagerindicator.com">(Link)</a></h2>
by Jake Wharton, licensed under the Apache 2.0 license
<h2>NineOldAndroids <a href="http://nineoldandroids.com">(Link)</a></h2>
by Jake Wharton, licensed under the Apache 2.0 license
<h2>Apache Commons <a href="http://commons.apache.org/">(Link)</a></h2>
by The Apache Software Foundation, licensed under the Apache 2.0 license
<h2>flattr4j <a href="http://www.shredzone.org/projects/flattr4j/wiki">(Link)</a></h2>

18
pom.xml
View File

@ -5,7 +5,7 @@
<groupId>de.danoeh</groupId>
<artifactId>antennapod</artifactId>
<packaging>apk</packaging>
<version>0.9.7.3</version>
<version>0.9.7.4</version>
<name>AntennaPod</name>
@ -70,6 +70,11 @@
<version>0.6.1-SNAPSHOT</version>
<type>apklib</type>
</dependency>
<dependency>
<groupId>com.nineoldandroids</groupId>
<artifactId>library</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies>
<build>
@ -87,7 +92,7 @@
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<version>3.5.0</version>
<version>3.6.1</version>
<configuration>
<sdk>
<path>${env.ANDROID_HOME}</path>
@ -167,6 +172,10 @@
<storepass>${sign.storepass}</storepass>
<keypass>${sign.keypass}</keypass>
<verbose>true</verbose>
<arguments>
<argument>-sigalg</argument><argument>MD5withRSA</argument>
<argument>-digestalg</argument><argument>SHA1</argument>
</arguments>
</configuration>
</execution>
</executions>
@ -190,10 +199,11 @@
</zipalign>
<manifest>
<debuggable>false</debuggable>
<versionCodeAutoIncrement>true</versionCodeAutoIncrement>
<versionCodeAutoIncrement>false</versionCodeAutoIncrement>
</manifest>
<proguard>
<skip>true</skip>
<skip>false</skip>
<config>proguard.cfg</config>
</proguard>
</configuration>
<executions>

View File

@ -8,6 +8,11 @@
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
#-libraryjars libs/android-support-v4.jar
#-libraryjars libs/commons-lang3-3.1.jar
#-libraryjars libs/flattr4j-core-2.4.jar
#-libraryjars libs/commons-io-2.4.jar
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service

231
res/values-az/strings.xml Normal file
View File

@ -0,0 +1,231 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--Activitiy titles-->
<string name="app_name">AntennaPod</string>
<string name="feeds_label">Kanallar</string>
<string name="podcasts_label">PODKASTLAR</string>
<string name="episodes_label">EPIZODLAR</string>
<string name="new_label">Yeni</string>
<string name="waiting_list_label">Gözləmədə</string>
<string name="settings_label">Parametrlər</string>
<string name="add_new_feed_label">Yeni kanal əlavə et</string>
<string name="downloads_label">Yükləmələr</string>
<string name="cancel_download_label">Yükləməyi ləğv et</string>
<string name="download_log_label">Yükləmə jurnalı</string>
<string name="playback_history_label">Oynatma tarixiçəsi</string>
<!--Webview actions-->
<string name="open_in_browser_label">Brauzerdə aç</string>
<string name="copy_url_label">URLı kopiyala</string>
<string name="share_url_label">URLı paylaş</string>
<string name="copied_url_msg">URL buferə köçürüldü</string>
<!--Playback history-->
<string name="clear_history_label">Tarixiçəni sildir</string>
<!--Other-->
<string name="confirm_label">Oldu</string>
<string name="cancel_label">Ləğv et</string>
<string name="author_label">Müəlif</string>
<string name="language_label">Dil</string>
<string name="cover_label">Üz:</string>
<string name="error_label">Xəta</string>
<string name="error_msg_prefix">Xəta baş verdi:</string>
<string name="refresh_label">Təzələ</string>
<string name="external_storage_error_msg">Heç bir yaddaş cihazı tapılmadı.</string>
<string name="chapters_label">Fəsillər</string>
<string name="shownotes_label">Təsvir</string>
<string name="most_recent_prefix">Ən yeni epizod:\u0020</string>
<string name="episodes_suffix">\u0020epizod</string>
<string name="published_prefix">Nəşr edən:\u0020</string>
<string name="length_prefix">Müddət:\u0020</string>
<string name="size_prefix">Ölçü:\u0020</string>
<string name="processing_label">Hazırlaşma</string>
<string name="loading_label">Yükləmə...</string>
<string name="image_of_prefix">Şəkil:\u0020</string>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">Kanalın URLı</string>
<string name="txtvfeedurl_label">Kanalın URLını yaz:</string>
<!--Actions on feeds-->
<string name="mark_all_read_label">Hamısını oxunmuş kimi işarələ</string>
<string name="show_info_label">Məlumatı göstər</string>
<string name="remove_feed_label">Kanlı sil</string>
<string name="share_link_label">Web-səhifəyi paylaş</string>
<string name="share_source_label">Kanalı paylaş</string>
<string name="feed_delete_confirmation_msg">Bütün kanallar və epizodlar silinəçək.</string>
<!--actions on feeditems-->
<string name="download_label">Yüklə</string>
<string name="play_label">Oynat</string>
<string name="pause_label">Pauza</string>
<string name="stream_label">İnternetən yayimla</string>
<string name="remove_label">Sil</string>
<string name="mark_read_label">Oxumuş kimi işarələ</string>
<string name="mark_unread_label">Oxunmamış kimi işarələ</string>
<string name="add_to_queue_label">Növbəyə əlavə et</string>
<string name="remove_from_queue_label">Növbədən sil</string>
<string name="visit_website_label">Web-səhifəsini aç</string>
<string name="support_label">Flattrla</string>
<string name="enqueue_all_new">Hamsını növbəyə əlavə et</string>
<string name="download_all">Hamısını yüklə</string>
<string name="skip_episode_label">Epizodu burax</string>
<!--Download messages and labels-->
<string name="download_successful">Yükləmə uğurlu keçdi</string>
<string name="download_failed">Yükləmə uğursuzdur</string>
<string name="download_pending">Yükləmə gözlənir</string>
<string name="download_running">Yükləmə gedir</string>
<string name="download_error_device_not_found">Yaddaş cihazı tapılmadı</string>
<string name="download_error_insufficient_space">Yaddaş çatmır</string>
<string name="download_error_file_error">Fayl xətası</string>
<string name="download_error_http_data_error">HTTP protokolnun xətası</string>
<string name="download_error_error_unknown">Naməlum xəta</string>
<string name="download_error_parser_exception">Parserin xətası</string>
<string name="download_error_unsupported_type">Naməlum kanal növü</string>
<string name="download_error_connection_error">Əlaqə xətasi</string>
<string name="download_error_unknown_host">Naməlum xost</string>
<string name="cancel_all_downloads_label">Yükləmələrin hamısını ləğv et</string>
<string name="download_cancelled_msg">Yükləmə ləğv olundu</string>
<string name="download_report_title">Yükləmə başa çatdı</string>
<string name="download_error_malformed_url">Yanlış URL</string>
<string name="download_error_io_error">IO xətasi</string>
<string name="download_error_request_error">Tələbin xətası</string>
<string name="downloads_left">\u0020yükləmə galdı</string>
<string name="download_notification_title">Podkast məlumatların yüklənişi</string>
<string name="download_report_content">%1$d yükləmə uğurludur, %2$d uğursuzdur</string>
<string name="download_log_title_unknown">Naməlum başliğ</string>
<string name="download_type_feed">Kanal</string>
<string name="download_type_media">Mediya fayl</string>
<string name="download_type_image">Şəkil</string>
<string name="download_request_error_dialog_message_prefix">Fayl yükləmə xətası:\u0020</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Xəta!</string>
<string name="player_stopped_msg">Heç nə oynadılmır</string>
<string name="player_preparing_msg">Hazırlanır</string>
<string name="player_ready_msg">Hazır</string>
<string name="player_seeking_msg">Axtarış</string>
<string name="playback_error_server_died">Server iştəmir</string>
<string name="playback_error_unknown">Naməlum xəta</string>
<string name="no_media_playing_label">Heç nə oynadılmır</string>
<string name="position_default_label">00:00:00</string>
<string name="player_buffering_msg">Buferləşmə</string>
<string name="playbackservice_notification_title">Podkast oynadılır</string>
<string name="playbackservice_notification_content">Daha çox info üçün bura bas</string>
<!--Navigation-->
<string name="show_download_log">Jurnalı göstər</string>
<string name="show_player_label">Pleyeri göstər</string>
<!--Queue operations-->
<string name="clear_queue_label">Növbəyi sil</string>
<string name="organize_queue_label">Növbələ düzənlə</string>
<string name="undo">Qaytar</string>
<string name="removed_from_queue">Element silindi</string>
<!--Flattr-->
<string name="flattr_auth_label">Flattra gir</string>
<string name="flattr_auth_explanation">Girmə prosesini başlamaq üçün düyməyi basın. Flattrın giriş səhifəsinə aparılacağsınız.</string>
<string name="authenticate_label">Gir</string>
<string name="return_home_label">Baş ekrana dön</string>
<string name="flattr_auth_success">Giriş uğurludur! İndi tətbiqlədən Flattrla istifadə edə bilərsiniz.</string>
<string name="no_flattr_token_title">Heç bir Flattr tokeni tapılmadı</string>
<string name="no_flattr_token_msg">Olsun ki sizin Flattr hesabınız AntennaPod\'a qoşulmadı. Yenə Flattra girin ya da podkastın səhifəsinə keçin.</string>
<string name="authenticate_now_label">Gir</string>
<string name="action_forbidden_title">Əməliyyat qadağan olundu</string>
<string name="action_forbidden_msg">Bu əməliyyat üçün AntennaPod\'un icazəsi yoxdur. AntennaPod\'un keçid tokenin ləğv olunması bunun səbəbi ola bilər. Yenə Flattra girin ya da podkastın səhifəsinə keçin.</string>
<string name="access_revoked_title">Keçid ləğv olundu</string>
<string name="access_revoked_info">AntennaPod\'un keçid tokeni uğurlu ləğv olundu.</string>
<string name="flattr_click_success">Flattrma uğurludur</string>
<string name="flattring_label">Flattrləmə</string>
<!--Empty list labels-->
<string name="no_items_label">Siyahıda heç nə yoxdur</string>
<string name="no_feeds_label">Hələ heç bir kanala yazilmadınız</string>
<!--Preferences-->
<string name="other_pref">Başqa</string>
<string name="about_pref">Proqram haqqinda</string>
<string name="queue_label">Növbə</string>
<string name="pref_pauseOnHeadsetDisconnect_sum">Qulaqliqı ayiranda oynatma dayanacağ</string>
<string name="pref_followQueue_sum">Oynatma başa çatanda növbədə irəlidəki epizodu oynat</string>
<string name="playback_pref">Oynatma</string>
<string name="network_pref">Şəbəkə</string>
<string name="pref_autoUpdateIntervall_title">Təzələmə intervali</string>
<string name="pref_autoUpdateIntervall_sum">Kanalın avtomatik təzələməsinin intervalını seç ya da keçir onu</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Təkçə Wi-Fi vasitəsiilə yüklə</string>
<string name="pref_followQueue_title">Fasiləsiz oynatma</string>
<string name="pref_downloadMediaOnWifiOnly_title">Wi-Fi vasitəsiilə yükləmə</string>
<string name="pref_pauseOnHeadsetDisconnect_title">Qulaqliqı ayır</string>
<string name="pref_mobileUpdate_title">Mobil şəbəbkə vasitəsiilə təzələmə</string>
<string name="pref_mobileUpdate_sum">Mobil şəbəbkə vasitəsiilə təzələməyə icazə vermək</string>
<string name="refreshing_label">Təzələmə</string>
<string name="flattr_settings_label">Flattr parametrləri</string>
<string name="pref_flattr_auth_title">Flattra gir</string>
<string name="pref_flattr_auth_sum">Flattr\'la istifadə etmək üçün, öz Flattr hesabınıza girin</string>
<string name="pref_flattr_this_app_title">Bu proqramı flattrla</string>
<string name="pref_flattr_this_app_sum">Flattr vasitəsiilə AntennaPodun inkişafını dəstək edin. Sağolun!</string>
<string name="pref_revokeAccess_title">Keçidi ləğv ət</string>
<string name="pref_revokeAccess_sum">Flattr hesabına keçidi ləğv et</string>
<string name="pref_display_only_episodes_title">Təkçə epizodları göstər</string>
<string name="pref_display_only_episodes_sum">Təkçə daxilində epizod olan elementləri göstər</string>
<string name="user_interface_label">İnterfeys</string>
<string name="pref_set_theme_title">Görüşü seç</string>
<string name="pref_set_theme_sum">AntennaPod\'un görüşünü dəyişdir</string>
<string name="pref_automatic_download_title">Avtomatik yükləmə</string>
<string name="pref_automatic_download_sum">Epizodların avtomatik yüklənişinin konfiqurasiyanı dəyiş</string>
<string name="pref_autodl_wifi_filter_title">Wi-Fi filtr</string>
<string name="pref_autodl_wifi_filter_sum">Seçilən Wi-Fi səbəkələr vasitəsiilə avtomatik yükləməyi icazə ver</string>
<string name="pref_episode_cache_title">Epizod keşi</string>
<string name="pref_theme_title_light"></string>
<string name="pref_theme_title_dark">Qara</string>
<string name="pref_episode_cache_unlimited">Hədsiz</string>
<string name="pref_update_interval_hours_plural">saat</string>
<string name="pref_update_interval_hours_singular">saat</string>
<string name="pref_update_interval_hours_manual">Əl ilə</string>
<!--Search-->
<string name="search_hint">Kanalları və ya epizodları axtar</string>
<string name="found_in_shownotes_label">Təsvirlərdə tapıldı</string>
<string name="found_in_chapters_label">Fəsillərdə tapıldı</string>
<string name="search_status_searching">Axtarış...</string>
<string name="search_status_no_results">Heç nə tapılmadı</string>
<string name="search_results_label">Axtarışın nəticələri</string>
<string name="search_term_label">Axtarılan:\u0020</string>
<string name="search_label">Axtar</string>
<string name="found_in_title_label">Başlığda tapıldı</string>
<!--OPML import and export-->
<string name="opml_import_txtv_button_lable">Ya da OPML faylı idxal edə bilərsiniz. OPML fayl vasitəsiilə siz öz podkastlarınızı başqa podcast menecerə köcürə bilərsiniz:</string>
<string name="opml_import_explanation">OPML faylın idxalı üçün onu aşağıdakı qovluqa yerləşdirin və idxal prosesini başlamaq üçün düyməyi basın.</string>
<string name="start_import_label">İdxalı başla</string>
<string name="opml_import_label">OPML idxalı</string>
<string name="opml_directory_error">XƏTA!</string>
<string name="reading_opml_label">OPML faylın oxunması</string>
<string name="opml_reader_error">OPML faylını oxuyanda xəta baş verdi:</string>
<string name="opml_import_error_dir_empty">İdxal qovliqu boşdur.</string>
<string name="select_all_label">Hamısını seç</string>
<string name="deselect_all_label">Seçimi ləğv et</string>
<string name="choose_file_to_import_label">İdxal üçün fayl seç</string>
<string name="opml_export_label">OPML ixraçı</string>
<string name="exporting_label">İxrac...</string>
<string name="export_error_label">İxracın xətası</string>
<string name="opml_export_success_title">OPML ixracı uğurlu keçdi</string>
<string name="opml_export_success_sum">OPML fayl:\u0020 yazılıb</string>
<!--Sleep timer-->
<string name="set_sleeptimer_label">Yuxu taymerini qoy</string>
<string name="disable_sleeptimer_label">Yuxu taymerini keçir</string>
<string name="enter_time_here_label">Vaxtı yaz</string>
<string name="sleep_timer_label">Yuxu taymeri</string>
<string name="time_left_label">Vaxt galdı:\u0020</string>
<string name="time_dialog_invalid_input">Yanlış yazi. Vaxt təkçə rəqmlərlə yazılır</string>
<!--Miro Guide-->
<string name="loading_categories_label">Kategoriya yüklənişi...</string>
<string name="browse_miroguide_label">MiroGuide\'da bax</string>
<string name="txtv_browse_miroguide_label">Ya da MiroGuide\'da bax:</string>
<string name="miro_guide_label">MiroGuide</string>
<string name="miro_search_hint">MiroGuide\'da axtar</string>
<string name="popular_label">Populyar</string>
<string name="best_rating_label">Ən reytinqli</string>
<string name="add_feed_label">Kanalı əlavə et</string>
<string name="miro_feed_added">Kanal əlavə olundu</string>
<!--Directory chooser-->
<string name="selected_folder_label">Seçilən qovluq:</string>
<string name="create_folder_label">Qovluqu yarat</string>
<string name="choose_data_directory">Məlumat qovluqunu seç</string>
<string name="create_folder_msg">\"%1$s\" adlı qovluq yaradılsınmı?</string>
<string name="create_folder_success">Yeni qovluq yaradıldı</string>
<string name="create_folder_error_no_write_access">Bu qovluqa yazıla bilinmer</string>
<string name="create_folder_error_already_exists">Qovluq artiq var</string>
<string name="create_folder_error">Qovluq yaradılmadı</string>
<string name="folder_not_empty_dialog_title">Qovluq boş deyil</string>
<string name="folder_not_empty_dialog_msg">Seçilən qovluq boş deyil. Mediya yükləmələr və başka fayllar bu qovluqa yazılacaqlar. Necə olsa davam olsunmu?</string>
<string name="set_to_default_folder">Başlanğıc qovluqu seç</string>
</resources>

View File

@ -32,6 +32,7 @@
<string name="external_storage_error_msg">L\'emmagatzemament extern no està disponible. Assegureu-vos que està muntat per què l\'aplicació funcioni correctament.</string>
<string name="chapters_label">Capítols</string>
<string name="shownotes_label">Notes del programa</string>
<string name="most_recent_prefix">Episodi més recent: \u0020</string>
<string name="episodes_suffix">\u0020episodis</string>
<string name="published_prefix">Publicat:\u0020</string>
<string name="length_prefix">Durada:\u0020</string>
@ -50,10 +51,10 @@
<string name="share_source_label">Comparteix l\'enllaç del canal</string>
<string name="feed_delete_confirmation_msg">Confirmeu que, efectivament, voleu suprimir aquest canal i tots els episodis que us n\'heu baixat.</string>
<!--actions on feeditems-->
<string name="download_label">Baixades</string>
<string name="download_label">Baixa</string>
<string name="play_label">Reprodueix</string>
<string name="pause_label">Pausa</string>
<string name="stream_label">Flux</string>
<string name="stream_label">Reprodueix sense baixar</string>
<string name="remove_label">Suprimeix</string>
<string name="mark_read_label">Marca com a llegit</string>
<string name="mark_unread_label">Marca com a pendent</string>
@ -111,6 +112,8 @@
<!--Queue operations-->
<string name="clear_queue_label">Buida la cua</string>
<string name="organize_queue_label">Ordena la cua</string>
<string name="undo">Desfés</string>
<string name="removed_from_queue">Ítem esborrat</string>
<!--Flattr-->
<string name="flattr_auth_label">Inici de sessió a Flattr</string>
<string name="flattr_auth_explanation">Premeu el botó per iniciar el procés d\'autenticació. Quan s\'obri la pantalla d\'inici de sessió de Flattr al vostre navegador, introduïu les vostres credencials i concediu a AntennaPod els permisos de compartir mitjançant Flattr. En finalitzar el procés, tornareu automàticament a aquesta pantalla.</string>
@ -133,18 +136,18 @@
<string name="other_pref">Altres</string>
<string name="about_pref">Quant a</string>
<string name="queue_label">Cua</string>
<string name="pref_pauseOnHeadsetDisconnect_sum">Pausa la reproducció en desconnectar els auriculars</string>
<string name="pref_pauseOnHeadsetDisconnect_sum">Pausa la reproducció en desconnectar els auriculars.</string>
<string name="pref_followQueue_sum">Salta al següent element de la cua en acabar la reproducció</string>
<string name="playback_pref">Reproducció</string>
<string name="network_pref">Xarxa</string>
<string name="pref_autoUpdateIntervall_title">Interval d\'actualització</string>
<string name="pref_autoUpdateIntervall_sum">Especifiqueu l\'interval en què els canals s\'actualitzen de forma automàtica, o deshabiliteu la funcionalitat</string>
<string name="pref_autoUpdateIntervall_sum">Especifiqueu l\'interval en què els canals s\'actualitzen de forma automàtica, o deshabiliteu la funcionalitat.</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Només baixa fitxers a través d\'una xarxa sense fils</string>
<string name="pref_followQueue_title">Reproducció continuada</string>
<string name="pref_downloadMediaOnWifiOnly_title">Baixa a través de xarxes sense fils</string>
<string name="pref_pauseOnHeadsetDisconnect_title">Desconnexió d\'auriculars</string>
<string name="pref_mobileUpdate_title">Actualitzacions sobre xarxes mòbils</string>
<string name="pref_mobileUpdate_sum">Permet actualitzacions a través de xarxes mòbils</string>
<string name="pref_mobileUpdate_sum">Permet actualitzacions a través de xarxes mòbils.</string>
<string name="refreshing_label">S\'està actualitzant</string>
<string name="flattr_settings_label">Configuració de Flattr</string>
<string name="pref_flattr_auth_title">Inici de sessió Flattr</string>
@ -152,17 +155,23 @@
<string name="pref_flattr_this_app_title">Compartiu aquesta aplicació amb Flattr</string>
<string name="pref_flattr_this_app_sum">Doneu suport al desenvolupament d\'AntennaPod compartint l\'aplicació a través de Flattr. Gràcies!</string>
<string name="pref_revokeAccess_title">Revoca l\'accés</string>
<string name="pref_revokeAccess_sum">Revoca el permís d\'accés d\'aquesta aplicació al vostre compte Flattr.</string>
<string name="pref_revokeAccess_sum">Revoqueu el permís d\'accés d\'aquesta aplicació al vostre compte Flattr.</string>
<string name="pref_display_only_episodes_title">Mostra només episodis</string>
<string name="pref_display_only_episodes_sum">Mostra només els elements que tenen algun episodi.</string>
<string name="user_interface_label">Interfície d\'usuari</string>
<string name="pref_set_theme_title">Seleccioneu un tema</string>
<string name="pref_set_theme_title">Selecció de tema</string>
<string name="pref_set_theme_sum">Canvieu l\'aparença d\'AntennaPod.</string>
<string name="pref_automatic_download_title">Baixada automàtica</string>
<string name="pref_automatic_download_sum">Configura la baixada automàtica d\'episodis.</string>
<string name="pref_automatic_download_sum">Configureu la baixada automàtica d\'episodis.</string>
<string name="pref_autodl_wifi_filter_title">Activa el filtre de la xarxa sense fils</string>
<string name="pref_autodl_wifi_filter_sum">Permet les baixades automàtiques només per a les xarxes sense fils seleccionades.</string>
<string name="pref_episode_cache_title">Memòria d\'episodis</string>
<string name="pref_theme_title_light">Clar</string>
<string name="pref_theme_title_dark">Fosc</string>
<string name="pref_episode_cache_unlimited">Sense límits</string>
<string name="pref_update_interval_hours_plural">hores</string>
<string name="pref_update_interval_hours_singular">hora</string>
<string name="pref_update_interval_hours_manual">Manual</string>
<!--Search-->
<string name="search_hint">Cerca canals o episodis</string>
<string name="found_in_shownotes_label">Trobat a notes del programa</string>
@ -175,7 +184,7 @@
<string name="found_in_title_label">Trobat al títol</string>
<!--OPML import and export-->
<string name="opml_import_txtv_button_lable">També podeu importar fitxers OPML. Els fitxers OPML us permeten moure els podcasts d\'una aplicació a una altra:</string>
<string name="opml_import_explanation">Per importar un fitxer OPML, l\'heu d\'ubicar al següent directori i prémer el botó de sota per iniciar el procés. </string>
<string name="opml_import_explanation">Per importar un fitxer OPML, ubiqueu-lo al següent directori i premeu el botó de sota per iniciar el procés. </string>
<string name="start_import_label">Inicia la importació</string>
<string name="opml_import_label">Importació OPML</string>
<string name="opml_directory_error">Error!</string>

View File

@ -0,0 +1,231 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--Activitiy titles-->
<string name="app_name">AntennaPod</string>
<string name="feeds_label">Zdroje</string>
<string name="podcasts_label">PODCASTY</string>
<string name="episodes_label">EPIZODY</string>
<string name="new_label">Nový</string>
<string name="waiting_list_label">Seznam nepřečtených</string>
<string name="settings_label">Nastavení</string>
<string name="add_new_feed_label">Přidat nový zdroj</string>
<string name="downloads_label">Stahování</string>
<string name="cancel_download_label">Zrušit stahování</string>
<string name="download_log_label">Historie stáhnování</string>
<string name="playback_history_label">Historie přehrávání</string>
<!--Webview actions-->
<string name="open_in_browser_label">Otevřít v prohlížeči</string>
<string name="copy_url_label">Kopírovat URL</string>
<string name="share_url_label">Sdílet URL</string>
<string name="copied_url_msg">URL zkopírováno do schránky.</string>
<!--Playback history-->
<string name="clear_history_label">Vymazat historii</string>
<!--Other-->
<string name="confirm_label">Potvrdit</string>
<string name="cancel_label">Zrušit</string>
<string name="author_label">Autor</string>
<string name="language_label">Jazyk</string>
<string name="cover_label">Obal</string>
<string name="error_label">Chyba</string>
<string name="error_msg_prefix">Nastala chyba:</string>
<string name="refresh_label">Obnovit</string>
<string name="external_storage_error_msg">Není dostupné žádné externí uložiště. Pro správnou funkci aplikace se prosím ujistěte, že je připojeno externí úložiště.</string>
<string name="chapters_label">Kapitoly</string>
<string name="shownotes_label">Poznámky</string>
<string name="most_recent_prefix">Poslední epizoda:\u0020</string>
<string name="episodes_suffix">\u0020epizod</string>
<string name="published_prefix">Publikováno:\u0020</string>
<string name="length_prefix">Délka:\u0020</string>
<string name="size_prefix">Velikost:\u0020</string>
<string name="processing_label">Zpracovávám</string>
<string name="loading_label">Načítám...</string>
<string name="image_of_prefix">Obrázek:\u0020</string>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">URL zdroje</string>
<string name="txtvfeedurl_label">Zadejte URL zdroje:</string>
<!--Actions on feeds-->
<string name="mark_all_read_label">Označit vše jako přečtené</string>
<string name="show_info_label">Informace o zdroji</string>
<string name="remove_feed_label">Odstranit zdroj</string>
<string name="share_link_label">Sdílet odkaz</string>
<string name="share_source_label">Sdílet adresu zdroje</string>
<string name="feed_delete_confirmation_msg">Prosím potvrďte, že chcete smazat tento zdroj včetně všech stažených epizod.</string>
<!--actions on feeditems-->
<string name="download_label">Stáhnout</string>
<string name="play_label">Přehrát</string>
<string name="pause_label">Pozastavit</string>
<string name="stream_label">Streamovat</string>
<string name="remove_label">Odstranit</string>
<string name="mark_read_label">Označit jako přečtené</string>
<string name="mark_unread_label">Označit jako nepřečtené</string>
<string name="add_to_queue_label">Přidat do fronty</string>
<string name="remove_from_queue_label">Odebrat z fronty</string>
<string name="visit_website_label">Navštívit stránku</string>
<string name="support_label">Flattr</string>
<string name="enqueue_all_new">Vše do fronty</string>
<string name="download_all">Stáhnout vše</string>
<string name="skip_episode_label">Přeskočit epizodu</string>
<!--Download messages and labels-->
<string name="download_successful">Stahování dokončeno</string>
<string name="download_failed">Stahování selhalo</string>
<string name="download_pending">Čekající na stažení</string>
<string name="download_running">Probíhající stahování</string>
<string name="download_error_device_not_found">Úložné zařízení nenalezeno</string>
<string name="download_error_insufficient_space">Nedostatek volného místa</string>
<string name="download_error_file_error">Souborová chyba</string>
<string name="download_error_http_data_error">HTTP chyba</string>
<string name="download_error_error_unknown">Neznámá chyba</string>
<string name="download_error_parser_exception">Výjimka parseru</string>
<string name="download_error_unsupported_type">Nepodporovaný typ zdroje</string>
<string name="download_error_connection_error">Chyba spojení</string>
<string name="download_error_unknown_host">Neznámý host</string>
<string name="cancel_all_downloads_label">Zrušit všechna stahování</string>
<string name="download_cancelled_msg">Stahování zrušeno</string>
<string name="download_report_title">Všechna stahování dokončena</string>
<string name="download_error_malformed_url">Chybné URL</string>
<string name="download_error_io_error">IO chyba</string>
<string name="download_error_request_error">Chyba požadavku</string>
<string name="downloads_left">\u0020Stahování zbývá</string>
<string name="download_notification_title">Stahuji podcast data</string>
<string name="download_report_content">%1$d úspěšných stahování, %2$d selhalo</string>
<string name="download_log_title_unknown">Neznámý název</string>
<string name="download_type_feed">Zdroj</string>
<string name="download_type_media">Soubor</string>
<string name="download_type_image">Obrázek</string>
<string name="download_request_error_dialog_message_prefix">Nastala chyba při pokusu o stažení souboru:\u0020</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Chyba!</string>
<string name="player_stopped_msg">Žádné probíhající přehrávání</string>
<string name="player_preparing_msg">Připravuji</string>
<string name="player_ready_msg">Připraven</string>
<string name="player_seeking_msg">Přetáčím</string>
<string name="playback_error_server_died">Server nereaguje</string>
<string name="playback_error_unknown">Neznámá chyba</string>
<string name="no_media_playing_label">Žádné probíhající přehrávání</string>
<string name="position_default_label">00:00:00</string>
<string name="player_buffering_msg">Načítání</string>
<string name="playbackservice_notification_title">Přehrávaný podcast</string>
<string name="playbackservice_notification_content">Stiskni zde pro více informací</string>
<!--Navigation-->
<string name="show_download_log">Historie stahování</string>
<string name="show_player_label">Přehrávač</string>
<!--Queue operations-->
<string name="clear_queue_label">Vyprázdnit frontu</string>
<string name="organize_queue_label">Přeuspořádat frontu</string>
<string name="undo">Zpět</string>
<string name="removed_from_queue">Položka odebrána</string>
<!--Flattr-->
<string name="flattr_auth_label">Flattr přihlášení</string>
<string name="flattr_auth_explanation">Stiskněte následující tlačítko pro spuštění autentizačního procesu. Budete přesměrováni na přihlašovací obrazovku flattru a vyzváni k potvrzení udělení práv pro použití flattru aplikací AntennaPod. Po udělení práv se automaticky vrátíte na tuto obrazovku.</string>
<string name="authenticate_label">Přihlásit</string>
<string name="return_home_label">Návrat domů</string>
<string name="flattr_auth_success">Úspěšně přihlášen. Nyní můžete využít flattru přímo v aplikaci. </string>
<string name="no_flattr_token_title">Nenalezen Flattr token</string>
<string name="no_flattr_token_msg">Váš flattr učet není napojen do AntenaPodu. Můžete buďto napojit váš flattr účet do AntennaPodu a využít flattru přímo v aplikaci a nebo použít flattr přímo na webových stránkách zdroje v prohlížeči. </string>
<string name="authenticate_now_label">Přihlásit</string>
<string name="action_forbidden_title">Akce zakázána</string>
<string name="action_forbidden_msg">AntennaPod nemá oprávnění pro tuto akci. Důvodem může být revokování přístupového tokenu AntennaPodu k vašemu účtu. Přístup můžete obnovit nebo využít prohlížeče k návštěvě stránky zdroje.</string>
<string name="access_revoked_title">Přístup revokován</string>
<string name="access_revoked_info">Úspěšně revokován přístup AntennPodu k vašemu účtu. Pro dokončení tohoto procesu je ještě zapotřebí na stránkách flattru odebrat z vašeho účtu AntennaPod ze seznamu povolených aplikací.</string>
<string name="flattr_click_success">Úspěšně flattrováno!</string>
<string name="flattring_label">Flattruji</string>
<!--Empty list labels-->
<string name="no_items_label">Žádné položky v seznamu.</string>
<string name="no_feeds_label">Zatím nebyly přidány žádné zdroje.</string>
<!--Preferences-->
<string name="other_pref">Ostatní</string>
<string name="about_pref">O aplikaci</string>
<string name="queue_label">Fronta</string>
<string name="pref_pauseOnHeadsetDisconnect_sum">Při odpojení sluchátek automaticky pozastavit přehrávání.</string>
<string name="pref_followQueue_sum">Po přehrání položky z fronty přejít automaticky na další.</string>
<string name="playback_pref">Přehrávání</string>
<string name="network_pref">Síť</string>
<string name="pref_autoUpdateIntervall_title">Interval aktualizace zdrojů</string>
<string name="pref_autoUpdateIntervall_sum">Udává interval, ve kterém se zdroje automaticky aktualizují nebo tuto funkci deaktivuje.</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Stahovat soubory pouze pomocí WiFi</string>
<string name="pref_followQueue_title">Kontinuální přehrávání</string>
<string name="pref_downloadMediaOnWifiOnly_title">WiFi stahování</string>
<string name="pref_pauseOnHeadsetDisconnect_title">Odpojení sluchátek</string>
<string name="pref_mobileUpdate_title">Mobilní aktualizace</string>
<string name="pref_mobileUpdate_sum">Povolit aktualizace pomocí mobilního připojení.</string>
<string name="refreshing_label">Obnovuji</string>
<string name="flattr_settings_label">Nastavení Flattr</string>
<string name="pref_flattr_auth_title">Flattr přihlášení</string>
<string name="pref_flattr_auth_sum">Přihlásit se k flattr účtu a umožnit flattrování přímo z aplikace.</string>
<string name="pref_flattr_this_app_title">Flattrovat tuto aplikaci</string>
<string name="pref_flattr_this_app_sum">Podpořit vývoj AntennaPodu na flatteru. Děkujeme!</string>
<string name="pref_revokeAccess_title">Odebrat přístup</string>
<string name="pref_revokeAccess_sum">Odebere aplikaci přístupová práva k vašemu flattr účtu.</string>
<string name="pref_display_only_episodes_title">Zobrazit pouze epizody</string>
<string name="pref_display_only_episodes_sum">Zobrazit pouze položky obsahující epizody.</string>
<string name="user_interface_label">Uživatelské rozhraní</string>
<string name="pref_set_theme_title">Vybrat motiv</string>
<string name="pref_set_theme_sum">Změnit vzhled AntennaPod.</string>
<string name="pref_automatic_download_title">Automatické stahování</string>
<string name="pref_automatic_download_sum">Nastavení automatického stahování epizod.</string>
<string name="pref_autodl_wifi_filter_title">Zapnout Wi-Fi filtr</string>
<string name="pref_autodl_wifi_filter_sum">Povolit automatické stahování pouze pomocí vybraných Wi-Fi sítí.</string>
<string name="pref_episode_cache_title">Historie epizod</string>
<string name="pref_theme_title_light">Světlý</string>
<string name="pref_theme_title_dark">Tmavý</string>
<string name="pref_episode_cache_unlimited">Bez omezení</string>
<string name="pref_update_interval_hours_plural">hodin</string>
<string name="pref_update_interval_hours_singular">hodina</string>
<string name="pref_update_interval_hours_manual">Ručně</string>
<!--Search-->
<string name="search_hint">Hledat zdroje a epizody</string>
<string name="found_in_shownotes_label">Nalezeno v poznámkách k show</string>
<string name="found_in_chapters_label">Nalezeno v kapitolách</string>
<string name="search_status_searching">Vyhledávám...</string>
<string name="search_status_no_results">Žádné výsledky</string>
<string name="search_results_label">Výsledky vyhledávání</string>
<string name="search_term_label">Vyhledáváno:\u0020</string>
<string name="search_label">Vyhledat</string>
<string name="found_in_title_label">Nalezeno v názvu</string>
<!--OPML import and export-->
<string name="opml_import_txtv_button_lable">Můžete také importovat OPML soubor. OPML soubory umožňují přenést vaše podcasty z jednoho podcast manažera do jiného:</string>
<string name="opml_import_explanation">Pro import OPML souboru je třeba ho nejdříve umístit do následujícího adresáře a poté pro zahájení procesu importu stisknout tlačítko. </string>
<string name="start_import_label">Importovat</string>
<string name="opml_import_label">OPML import</string>
<string name="opml_directory_error">CHYBA!</string>
<string name="reading_opml_label">Načítání OPML souboru</string>
<string name="opml_reader_error">Nastala chyba při čtení OPML souboru:</string>
<string name="opml_import_error_dir_empty">Adresář importu je prázdný.</string>
<string name="select_all_label">Označit vše</string>
<string name="deselect_all_label">Zrušit výběr</string>
<string name="choose_file_to_import_label">Vyberte soubor k importování</string>
<string name="opml_export_label">OPML export</string>
<string name="exporting_label">Exportuji...</string>
<string name="export_error_label">Chyba exportu</string>
<string name="opml_export_success_title">OPML export byl úspěšný.</string>
<string name="opml_export_success_sum">OPML soubor byl zapsán do:\u0020</string>
<!--Sleep timer-->
<string name="set_sleeptimer_label">Nastavit časovač vypnutí</string>
<string name="disable_sleeptimer_label">Deaktivovat časovač vypnutí</string>
<string name="enter_time_here_label">Zadejte čas</string>
<string name="sleep_timer_label">Časovač vypnutí</string>
<string name="time_left_label">Zbývá času:\u0020</string>
<string name="time_dialog_invalid_input">Neplatný vstup, musí být zadáno celé číslo</string>
<!--Miro Guide-->
<string name="loading_categories_label">Načítám kategorie...</string>
<string name="browse_miroguide_label">Procházet Miro Guide</string>
<string name="txtv_browse_miroguide_label">Nebo procházet Miro Guide:</string>
<string name="miro_guide_label">Miro Guide</string>
<string name="miro_search_hint">Vyhledávat v Miro Guide</string>
<string name="popular_label">Populární</string>
<string name="best_rating_label">Nejlépe hodnocené</string>
<string name="add_feed_label">Přidat zdroj</string>
<string name="miro_feed_added">Přidávám zdroj</string>
<!--Directory chooser-->
<string name="selected_folder_label">Vybraný adresář:</string>
<string name="create_folder_label">Vytvořit adresář</string>
<string name="choose_data_directory">Vybrat umístění dat</string>
<string name="create_folder_msg">Vytvořit adresář \"%1$s\"?</string>
<string name="create_folder_success">Nový adresář vytvořen</string>
<string name="create_folder_error_no_write_access">Nelze zapisovat do adresáře</string>
<string name="create_folder_error_already_exists">Adresář již existuje</string>
<string name="create_folder_error">Nelze vytvořit adresář</string>
<string name="folder_not_empty_dialog_title">Adresář není prázdný</string>
<string name="folder_not_empty_dialog_msg">Vybraný adresář není prázdný. Stažená media a ostatní soubory budou umístěny přímo do tohoto adresáře. Přesto pokračovat?</string>
<string name="set_to_default_folder">Vybrat hlavní adresář</string>
</resources>

View File

@ -32,6 +32,7 @@
<string name="external_storage_error_msg">Ingen ekstern harddisk er tilgængelig. Vær venlig at sørge for at den eksterne hukommelse er monteret så app\'en kan fungere korrekt.</string>
<string name="chapters_label">Kapitler</string>
<string name="shownotes_label">Afsnitsnoter</string>
<string name="most_recent_prefix">Seneste episoder:\u0020</string>
<string name="episodes_suffix">\u0020episoder</string>
<string name="published_prefix">Offentliggjort:\u0020</string>
<string name="length_prefix">Længde:\u0020</string>
@ -111,6 +112,8 @@
<!--Queue operations-->
<string name="clear_queue_label">Fjern kø</string>
<string name="organize_queue_label">Arranger kø</string>
<string name="undo">Fortryd</string>
<string name="removed_from_queue">Emne slettet</string>
<!--Flattr-->
<string name="flattr_auth_label">Flattr log ind</string>
<string name="flattr_auth_explanation">Tryk på knappen nedenfor for at starte godkendelsesprocessen. Du vil blive ført til flattr log ind siden i din browser og bedt om at give AntennaPod tilladelse til at flattr emner. Efter at du har givet tilladelsen vil du automatisk vende tilbage til denne side.</string>
@ -163,6 +166,12 @@
<string name="pref_autodl_wifi_filter_title">Sæt Wi-Fi filter til</string>
<string name="pref_autodl_wifi_filter_sum">Tillad kun automatisk download for de valgte Wi-Fi netværk</string>
<string name="pref_episode_cache_title">Episode cache</string>
<string name="pref_theme_title_light">Lys</string>
<string name="pref_theme_title_dark">Mørk</string>
<string name="pref_episode_cache_unlimited">Uendelig</string>
<string name="pref_update_interval_hours_plural">timer</string>
<string name="pref_update_interval_hours_singular">time</string>
<string name="pref_update_interval_hours_manual">Manuelt</string>
<!--Search-->
<string name="search_hint">Søg efter feeds eller episoder</string>
<string name="found_in_shownotes_label">Funder i showets noter</string>

View File

@ -112,6 +112,8 @@
<!--Queue operations-->
<string name="clear_queue_label">Abspielliste leeren</string>
<string name="organize_queue_label">Abspielliste organisieren</string>
<string name="undo">Rückgängig</string>
<string name="removed_from_queue">Element entfernt</string>
<!--Flattr-->
<string name="flattr_auth_label">Flattr Anmeldung</string>
<string name="flattr_auth_explanation">Drücke den Button unten um den Authentifizierungsprozess zu starten. Du wirst dann zur Flattr-Anmeldeseite weitergeleitet, wo du gefragt wirst, AntennaPod die Erlaubnis zu geben, Dinge zu flattrn. Nachdem du die Erlaubnis erteilt hast, kehrst du automatisch zu diesem Bildschirm zurück.</string>
@ -164,6 +166,12 @@
<string name="pref_autodl_wifi_filter_title">W-LAN-Filter aktivieren</string>
<string name="pref_autodl_wifi_filter_sum">Erlaube das automatische Herunterladen nur in ausgewählten W-LAN Netzwerken.</string>
<string name="pref_episode_cache_title">Episodenspeicher</string>
<string name="pref_theme_title_light">Hell</string>
<string name="pref_theme_title_dark">Dunkel</string>
<string name="pref_episode_cache_unlimited">Unbegrenzt</string>
<string name="pref_update_interval_hours_plural">Stunden</string>
<string name="pref_update_interval_hours_singular">Stunde</string>
<string name="pref_update_interval_hours_manual">Manuell</string>
<!--Search-->
<string name="search_hint">Suche nach Feeds oder Episoden</string>
<string name="found_in_shownotes_label">In Sendungsnotizen gefunden</string>

View File

@ -32,8 +32,9 @@
<string name="external_storage_error_msg">No se encuentra un almacenamiento externo. Asegúrese de que su almacenamiento externo esté montado para que la aplicación funcione correctamente.</string>
<string name="chapters_label">Capítulos</string>
<string name="shownotes_label">Notas del programa</string>
<string name="most_recent_prefix">Episodio más reciente:\u0020</string>
<string name="episodes_suffix">\u0020episodios</string>
<string name="published_prefix">Publicado:\u0020</string>
<string name="published_prefix">Publicado el:\u0020</string>
<string name="length_prefix">Duración:\u0020</string>
<string name="size_prefix">Tamaño:\u0020</string>
<string name="processing_label">Procesando</string>
@ -41,7 +42,7 @@
<string name="image_of_prefix">Imagen de:\u0020</string>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">URL del canal</string>
<string name="txtvfeedurl_label">Escriba aquí la URL del canal</string>
<string name="txtvfeedurl_label">Escriba aquí la URL del canal:</string>
<!--Actions on feeds-->
<string name="mark_all_read_label">Marcar todo como leído</string>
<string name="show_info_label">Información del programa</string>
@ -111,6 +112,8 @@
<!--Queue operations-->
<string name="clear_queue_label">Limpiar la cola</string>
<string name="organize_queue_label">Organizar cola</string>
<string name="undo">Deshacer</string>
<string name="removed_from_queue">Artículo eliminado</string>
<!--Flattr-->
<string name="flattr_auth_label">Identificarse en Flattr</string>
<string name="flattr_auth_explanation">Pulse el botón inferior para comenzar la autenticación. Su navegador abrirá la pantalla de identificación de Flattr y le preguntará si quiere conceder permiso a AntennaPod para valorar cosas. Tras concederlo, volverá a esta pantalla automáticamente.</string>
@ -163,6 +166,12 @@
<string name="pref_autodl_wifi_filter_title">Activar el filtro WiFi</string>
<string name="pref_autodl_wifi_filter_sum">Permitir la descarga automática sólo para las redes WiFi marcadas.</string>
<string name="pref_episode_cache_title">Caché de episodios</string>
<string name="pref_theme_title_light">Claro</string>
<string name="pref_theme_title_dark">Oscuro</string>
<string name="pref_episode_cache_unlimited">Ilimitado</string>
<string name="pref_update_interval_hours_plural">horas</string>
<string name="pref_update_interval_hours_singular">hora</string>
<string name="pref_update_interval_hours_manual">Manual</string>
<!--Search-->
<string name="search_hint">Buscar canales o episodios</string>
<string name="found_in_shownotes_label">Encontrado en las notas del programa</string>

View File

@ -32,6 +32,7 @@
<string name="external_storage_error_msg">Aucun stockage externe n\'est disponible. Merci de connecter un volume de stockage externe pour que l\'application puisse fonctionner correctement.</string>
<string name="chapters_label">Chapitres</string>
<string name="shownotes_label">Notes d\'épisode</string>
<string name="most_recent_prefix">Episode le plus récent :\u0020</string>
<string name="episodes_suffix">\u0020épisodes</string>
<string name="published_prefix">Publié :\u0020</string>
<string name="length_prefix">Durée :\u0020</string>
@ -111,6 +112,8 @@
<!--Queue operations-->
<string name="clear_queue_label">Effacer la liste</string>
<string name="organize_queue_label">Ordre de lecture</string>
<string name="undo">Annuler</string>
<string name="removed_from_queue">Élément retiré</string>
<!--Flattr-->
<string name="flattr_auth_label">Connecter à Flattr</string>
<string name="flattr_auth_explanation">Appuyez sur le bouton ci-dessous pour vous authentifier. Vous serez envoyés à l\'écran de connexion Flattr dans le navigateur, et il vous sera demandé de donner à AntennaPod la permission de flattr. Une fois ceci fait, vous reviendrez automatiquement à cet écran.</string>
@ -163,6 +166,12 @@
<string name="pref_autodl_wifi_filter_title">Activer le filtre Wi-Fi</string>
<string name="pref_autodl_wifi_filter_sum">Autoriser le téléchargement automatique uniquement sur les réseaux Wi-Fi sélectionnés.</string>
<string name="pref_episode_cache_title">Épisodes stockés localement</string>
<string name="pref_theme_title_light">Clair</string>
<string name="pref_theme_title_dark">Sombre</string>
<string name="pref_episode_cache_unlimited">Illimité</string>
<string name="pref_update_interval_hours_plural">heures</string>
<string name="pref_update_interval_hours_singular">heure</string>
<string name="pref_update_interval_hours_manual">Manuel</string>
<!--Search-->
<string name="search_hint">Chercher des flux ou épisodes</string>
<string name="found_in_shownotes_label">Trouvé dans les notes</string>

View File

@ -3,7 +3,7 @@
<!--Activitiy titles-->
<string name="app_name">AntennaPod</string>
<string name="feeds_label">Feed</string>
<string name="podcasts_label">PODCASTS</string>
<string name="podcasts_label">PODCAST</string>
<string name="episodes_label">EPISODI</string>
<string name="new_label">Nuovo</string>
<string name="waiting_list_label">Lista d\'attesa</string>
@ -32,6 +32,7 @@
<string name="external_storage_error_msg">Non risulta disponibile lo spazio di archiviazione esterno. Assicurati che lo spazio di archiviazione sia montato per permettere all\'applicazione di funzionare correttamente.</string>
<string name="chapters_label">Capitoli</string>
<string name="shownotes_label">Note dell\'episodio</string>
<string name="most_recent_prefix">Episodi Recenti:\u0020</string>
<string name="episodes_suffix">\u0020episodi</string>
<string name="published_prefix">Pubblicato:\u0020</string>
<string name="length_prefix">Durata:\u0020</string>
@ -85,7 +86,7 @@
<string name="download_error_io_error">IO Error</string>
<string name="download_error_request_error">Request error</string>
<string name="downloads_left">\u0020Download rimasti</string>
<string name="download_notification_title">Download dati dei podcast in corso</string>
<string name="download_notification_title">Download dati podcast in corso</string>
<string name="download_report_content">%1$d download con successo, %2$d ko</string>
<string name="download_log_title_unknown">Titolo sconosciuto</string>
<string name="download_type_feed">Feed</string>
@ -111,6 +112,8 @@
<!--Queue operations-->
<string name="clear_queue_label">Svuota la coda</string>
<string name="organize_queue_label">Riordina la coda</string>
<string name="undo">Undo</string>
<string name="removed_from_queue">Oggetto rimosso</string>
<!--Flattr-->
<string name="flattr_auth_label">Flattr sign-in</string>
<string name="flattr_auth_explanation">Premi il tasto seguente per iniziare il processo di autenticazione. Sarai trasferito alla pagina di login di flattr sul tuo browser e ti sarà richiesto di garantire ad AntennaPod il permesso di effettuare microdonazioni. Dopo la tua autorizzazione, sarai riportato alla seguente schermata in modo automatico.</string>
@ -137,13 +140,13 @@
<string name="pref_followQueue_sum">Passa al prossimo episodio in coda quanto si completa una riproduzione</string>
<string name="playback_pref">Riproduzione</string>
<string name="network_pref">Rete</string>
<string name="pref_autoUpdateIntervall_title">Intervallo di aggiornamento</string>
<string name="pref_autoUpdateIntervall_title">Intervallo di update</string>
<string name="pref_autoUpdateIntervall_sum">Specifica un intervallo per l\'aggiornamento automatico dei feed o disabilitalo</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Abilita il download dei media solo tramite WiFi</string>
<string name="pref_followQueue_title">Playback continuo</string>
<string name="pref_downloadMediaOnWifiOnly_title">Download dei media su WiFi</string>
<string name="pref_pauseOnHeadsetDisconnect_title">Disconnessione cuffie</string>
<string name="pref_mobileUpdate_title">Aggiornamenti su rete mobile</string>
<string name="pref_mobileUpdate_title">Update su rete mobile</string>
<string name="pref_mobileUpdate_sum">Permetti gli aggiornamenti tramite connessione dati mobile</string>
<string name="refreshing_label">Aggiornamento</string>
<string name="flattr_settings_label">Impostazioni Flattr</string>
@ -163,6 +166,12 @@
<string name="pref_autodl_wifi_filter_title">Abilita il filtro Wi-Fi</string>
<string name="pref_autodl_wifi_filter_sum">Abilita il download automatico solo per alcune reti Wi-Fi selezionate.</string>
<string name="pref_episode_cache_title">Cache degli episodi</string>
<string name="pref_theme_title_light">Light</string>
<string name="pref_theme_title_dark">Dark</string>
<string name="pref_episode_cache_unlimited">Illimitato</string>
<string name="pref_update_interval_hours_plural">ore</string>
<string name="pref_update_interval_hours_singular">ora</string>
<string name="pref_update_interval_hours_manual">Manuale</string>
<!--Search-->
<string name="search_hint">Ricerca per Feed o Episodi</string>
<string name="found_in_shownotes_label">Trovato nelle note dell\'episodio</string>
@ -191,9 +200,9 @@
<string name="opml_export_success_title">Esportazione OPML avvenuta con successo.</string>
<string name="opml_export_success_sum">Il file .opml è stato scritto su:\u0020</string>
<!--Sleep timer-->
<string name="set_sleeptimer_label">Imposta il timer di spegnimento</string>
<string name="set_sleeptimer_label">Imposta timer</string>
<string name="disable_sleeptimer_label">Disabilita il timer di spegnimento</string>
<string name="enter_time_here_label">Inserisci il tempo</string>
<string name="enter_time_here_label">Tempo di spegnimento</string>
<string name="sleep_timer_label">Timer di spegnimento</string>
<string name="time_left_label">Tempo residuo:\u0020</string>
<string name="time_dialog_invalid_input">Input non valido, il campo deve essere un numero intero.</string>

231
res/values-pt/strings.xml Normal file
View File

@ -0,0 +1,231 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--Activitiy titles-->
<string name="app_name">AntennaPod</string>
<string name="feeds_label">Fontes</string>
<string name="podcasts_label">Podcasts</string>
<string name="episodes_label">Episódios</string>
<string name="new_label">Novo</string>
<string name="waiting_list_label">Lista de espera</string>
<string name="settings_label">Definições</string>
<string name="add_new_feed_label">Adicionar fonte</string>
<string name="downloads_label">Transferências</string>
<string name="cancel_download_label">Cancelar transferência</string>
<string name="download_log_label">Registo de transferências</string>
<string name="playback_history_label">Histórico de reprodução</string>
<!--Webview actions-->
<string name="open_in_browser_label">Abrir no navegador</string>
<string name="copy_url_label">Copiar URL</string>
<string name="share_url_label">Partilhar URL</string>
<string name="copied_url_msg">URL copiado para a área de transferência.</string>
<!--Playback history-->
<string name="clear_history_label">Limpar histórico</string>
<!--Other-->
<string name="confirm_label">Confirmar</string>
<string name="cancel_label">Cancelar</string>
<string name="author_label">Autor</string>
<string name="language_label">Idioma</string>
<string name="cover_label">Imagem</string>
<string name="error_label">Erro</string>
<string name="error_msg_prefix">Ocorreu um erro:</string>
<string name="refresh_label">Atualizar</string>
<string name="external_storage_error_msg">Não existe um cartão SD. Certifique-se que inseriu o cartão corretamente.</string>
<string name="chapters_label">Capítulos</string>
<string name="shownotes_label">Notas</string>
<string name="most_recent_prefix">Episódio mais recente:\u0020</string>
<string name="episodes_suffix">\u0020episódios</string>
<string name="published_prefix">Publicado:\u0020</string>
<string name="length_prefix">Duração:\u0020</string>
<string name="size_prefix">Tamanho:\u0020</string>
<string name="processing_label">A processar...</string>
<string name="loading_label">A carregar...</string>
<string name="image_of_prefix">Imagem de:\u0020</string>
<!--'Add Feed' Activity labels-->
<string name="feedurl_label">URL da fonte</string>
<string name="txtvfeedurl_label">Introduza o URL da fonte:</string>
<!--Actions on feeds-->
<string name="mark_all_read_label">Marcar tudo como lido</string>
<string name="show_info_label">Mostrar informações</string>
<string name="remove_feed_label">Remover fonte</string>
<string name="share_link_label">Partilhar ligação do sítio web</string>
<string name="share_source_label">Partilhar ligação da fonte</string>
<string name="feed_delete_confirmation_msg">Confirme a eliminação desta fonte e de todos os episódios a ela petencentes.</string>
<!--actions on feeditems-->
<string name="download_label">Transferir</string>
<string name="play_label">Reproduzir</string>
<string name="pause_label">Pausa</string>
<string name="stream_label">Emitir</string>
<string name="remove_label">Remover</string>
<string name="mark_read_label">Marcar como lido</string>
<string name="mark_unread_label">Marcar como novo</string>
<string name="add_to_queue_label">Adicionar à fila</string>
<string name="remove_from_queue_label">Remover da fila</string>
<string name="visit_website_label">Aceder ao sítio web</string>
<string name="support_label">Flattr</string>
<string name="enqueue_all_new">Colocar tudo na fila</string>
<string name="download_all">Transferir tudo</string>
<string name="skip_episode_label">Ignorar episódio</string>
<!--Download messages and labels-->
<string name="download_successful">Transferência terminada</string>
<string name="download_failed">Erro ao transferir</string>
<string name="download_pending">Transferência pendente</string>
<string name="download_running">Transferência atual</string>
<string name="download_error_device_not_found">Cartão SD não encontrado</string>
<string name="download_error_insufficient_space">Espaço insuficiente</string>
<string name="download_error_file_error">Erro no ficheiro</string>
<string name="download_error_http_data_error">Erro HTTP</string>
<string name="download_error_error_unknown">Erro desconhecido</string>
<string name="download_error_parser_exception">Exceção do processador</string>
<string name="download_error_unsupported_type">Fonte não suportada</string>
<string name="download_error_connection_error">Erro de ligação</string>
<string name="download_error_unknown_host">Servidor desconhecido</string>
<string name="cancel_all_downloads_label">Cancelar transferências</string>
<string name="download_cancelled_msg">Transferência cancelada</string>
<string name="download_report_title">Transferências terminadas</string>
<string name="download_error_malformed_url">URL inválido</string>
<string name="download_error_io_error">Erro I/O</string>
<string name="download_error_request_error">Erro de pedido</string>
<string name="downloads_left">\u0020Transferências em falta</string>
<string name="download_notification_title">A transferir dados...</string>
<string name="download_report_content">%1$d transferências efetuadas, %2$d falhadas</string>
<string name="download_log_title_unknown">Título desconhecido</string>
<string name="download_type_feed">Fonte</string>
<string name="download_type_media">Ficheiro multimédia</string>
<string name="download_type_image">Imagem</string>
<string name="download_request_error_dialog_message_prefix">Ocorreu um erro ao transferir o ficheiro:\u0020</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Erro!</string>
<string name="player_stopped_msg">Nada em reprodução</string>
<string name="player_preparing_msg">A preparar</string>
<string name="player_ready_msg">Pronto</string>
<string name="player_seeking_msg">A procurar</string>
<string name="playback_error_server_died">Erro de servidor</string>
<string name="playback_error_unknown">Erro desconhecido</string>
<string name="no_media_playing_label">Nada em reprodução</string>
<string name="position_default_label">00:00:00</string>
<string name="player_buffering_msg">A processar...</string>
<string name="playbackservice_notification_title">Reproduzir podcast</string>
<string name="playbackservice_notification_content">Clique para mais informações</string>
<!--Navigation-->
<string name="show_download_log">Mostrar registo</string>
<string name="show_player_label">Mostrar reprodutor</string>
<!--Queue operations-->
<string name="clear_queue_label">Limpar fila</string>
<string name="organize_queue_label">Organizar fila</string>
<string name="undo">Anular</string>
<string name="removed_from_queue">Item removido</string>
<!--Flattr-->
<string name="flattr_auth_label">Sessão Flattr</string>
<string name="flattr_auth_explanation">Prima o botão abaixo para iniciar a autenticação. O seu navegador web abrirá o ecrã da sessão flattr e ser-lhe-á solicitada a permissão para o AntennaPod efetuar as alterações. Após ser dada a permissão, voltará novamente a este ecrã.</string>
<string name="authenticate_label">Autenticar</string>
<string name="return_home_label">Voltar ao ecrã</string>
<string name="flattr_auth_success">Autenticação efetuada! Já pode fazer o flattr com a aplicação.</string>
<string name="no_flattr_token_title">Token flattr não encontrado</string>
<string name="no_flattr_token_msg">Parece que a sua conta flattr não está vinculada ao AntennaPod. Pode vincular a sua conta ao AntennaPod ou aceder ao sítio web para fazer o flattr.</string>
<string name="authenticate_now_label">Autenticar</string>
<string name="action_forbidden_title">Ação negada</string>
<string name="action_forbidden_msg">O AntennaPod não possui as permissões para esta ação. É possível que o token de acesso ao flattr via AntennaPod tenha sido revogado. Pode efetuar nova autenticação ou aceder ao sítio web do item.</string>
<string name="access_revoked_title">Acesso revogado</string>
<string name="access_revoked_info">Você revogou o token de acesso do AntennaPod à sua conta. Para concluir o processo, tem que remover esta aplicação da lista de aplicações presentes nas definições de conta no sítio web do flattr.</string>
<string name="flattr_click_success">Flattered com sucesso!</string>
<string name="flattring_label">Flattring</string>
<!--Empty list labels-->
<string name="no_items_label">Não existem itens na lista.</string>
<string name="no_feeds_label">Ainda não possui quaisquer fontes.</string>
<!--Preferences-->
<string name="other_pref">Outras</string>
<string name="about_pref">Sobre</string>
<string name="queue_label">Fila</string>
<string name="pref_pauseOnHeadsetDisconnect_sum">Parar reprodução ao remover os auscultadores</string>
<string name="pref_followQueue_sum">Ir para a faixa seguinte ao terminar a reprodução</string>
<string name="playback_pref">Reprodução</string>
<string name="network_pref">Rede</string>
<string name="pref_autoUpdateIntervall_title">Intervalo entre atualizações</string>
<string name="pref_autoUpdateIntervall_sum">Indique o intervalo de tempo entre as atualizações de fontes ou desative a opção</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Apenas transferir pelas redes sem fios</string>
<string name="pref_followQueue_title">Reprodução contínua</string>
<string name="pref_downloadMediaOnWifiOnly_title">Transferência Wi-Fi</string>
<string name="pref_pauseOnHeadsetDisconnect_title">Auscultadores removidos</string>
<string name="pref_mobileUpdate_title">Atualizações móveis</string>
<string name="pref_mobileUpdate_sum">Permitir atualizações através da rede de dados</string>
<string name="refreshing_label">A atualizar</string>
<string name="flattr_settings_label">Definições flattr</string>
<string name="pref_flattr_auth_title">Sessão flattr</string>
<string name="pref_flattr_auth_sum">Inicie sessão na sua conta flattr para fazer o flattr através do AntennaPod.</string>
<string name="pref_flattr_this_app_title">Flattr desta aplicação</string>
<string name="pref_flattr_this_app_sum">Ajude no desenvolvimento do AntennaPod através do Flattr. Obrigado!</string>
<string name="pref_revokeAccess_title">Revogar acesso</string>
<string name="pref_revokeAccess_sum">Revogar permissões de acesso da aplicação à sua conta flattr.</string>
<string name="pref_display_only_episodes_title">Mostrar apenas episódios</string>
<string name="pref_display_only_episodes_sum">Apenas mostrar itens que possuam episódios.</string>
<string name="user_interface_label">Interface</string>
<string name="pref_set_theme_title">Escolha o tema</string>
<string name="pref_set_theme_sum">Mudar o aspeto do AntennaPod.</string>
<string name="pref_automatic_download_title">Transferência automática</string>
<string name="pref_automatic_download_sum">Configure a transferência automática dos episódios.</string>
<string name="pref_autodl_wifi_filter_title">Ativar filtro Wi-Fi</string>
<string name="pref_autodl_wifi_filter_sum">Apenas permitir transferências automáticas através de redes sem fios.</string>
<string name="pref_episode_cache_title">Cache de episódios</string>
<string name="pref_theme_title_light">Claro</string>
<string name="pref_theme_title_dark">Escuro</string>
<string name="pref_episode_cache_unlimited">Sem limite</string>
<string name="pref_update_interval_hours_plural">horas</string>
<string name="pref_update_interval_hours_singular">hora</string>
<string name="pref_update_interval_hours_manual">Manual</string>
<!--Search-->
<string name="search_hint">Procurar fontes ou episódios</string>
<string name="found_in_shownotes_label">Encontrado nas notas</string>
<string name="found_in_chapters_label">Encontrado nos capítulos</string>
<string name="search_status_searching">A procurar...</string>
<string name="search_status_no_results">Nenhum resultado</string>
<string name="search_results_label">Resultados da procura</string>
<string name="search_term_label">Você procurou:\u0020</string>
<string name="search_label">Procura</string>
<string name="found_in_title_label">Encontrado no título</string>
<!--OPML import and export-->
<string name="opml_import_txtv_button_lable">Também pode importar ficheiros OPML. Estes ficheiros permitem-lhe mover os seus podcasts entre aplicações.</string>
<string name="opml_import_explanation">Para importar um ficheiro OPML, tem que o colocar neste diretório e premir o botão abaixo para iniciar o processo.</string>
<string name="start_import_label">Iniciar importação</string>
<string name="opml_import_label">Importação OPML</string>
<string name="opml_directory_error">Erro!</string>
<string name="reading_opml_label">A ler OPML</string>
<string name="opml_reader_error">Ocorreu um erro ao ler o ficheiro OPML:</string>
<string name="opml_import_error_dir_empty">O diretório de importação está vazio.</string>
<string name="select_all_label">Marcar tudo</string>
<string name="deselect_all_label">Desmarcar tudo</string>
<string name="choose_file_to_import_label">Escolha o ficheiro a importar</string>
<string name="opml_export_label">Exportação OPML</string>
<string name="exporting_label">A exportar...</string>
<string name="export_error_label">Erro de exportação</string>
<string name="opml_export_success_title">Exportação efetuada.</string>
<string name="opml_export_success_sum">O ficheiro .opml foi gravado em:\u0020</string>
<!--Sleep timer-->
<string name="set_sleeptimer_label">Definir temporizador</string>
<string name="disable_sleeptimer_label">Desativar temporizador</string>
<string name="enter_time_here_label">Introduza o tempo</string>
<string name="sleep_timer_label">Temporizador</string>
<string name="time_left_label">Tempo restante:\u0020</string>
<string name="time_dialog_invalid_input">Valor inválido. Tem que ser um inteiro.</string>
<!--Miro Guide-->
<string name="loading_categories_label">A carregar categorias...</string>
<string name="browse_miroguide_label">Explorar o guia Miro</string>
<string name="txtv_browse_miroguide_label">Ou explore o guia Miro:</string>
<string name="miro_guide_label">Guia Miro</string>
<string name="miro_search_hint">Procurar no guia Miro</string>
<string name="popular_label">Popular</string>
<string name="best_rating_label">Melhor avaliados</string>
<string name="add_feed_label">Adicionar fonte</string>
<string name="miro_feed_added">A fonte está a ser adicionada</string>
<!--Directory chooser-->
<string name="selected_folder_label">Diretório escolhido:</string>
<string name="create_folder_label">Criar diretório</string>
<string name="choose_data_directory">Escolha o diretório</string>
<string name="create_folder_msg">Criar um diretório com o nome \"%1$s\"?</string>
<string name="create_folder_success">Novo diretório criado</string>
<string name="create_folder_error_no_write_access">Não é possível gravar neste diretório</string>
<string name="create_folder_error_already_exists">O diretório já existe</string>
<string name="create_folder_error">Não é possível criar o diretório</string>
<string name="folder_not_empty_dialog_title">Diretório não vazio</string>
<string name="folder_not_empty_dialog_msg">O diretório escolhido não está vazio. As transferências serão colocadas neste diretório. Continuar?</string>
<string name="set_to_default_folder">Escolha a pasta pré-definida</string>
</resources>

View File

@ -32,6 +32,7 @@
<string name="external_storage_error_msg">Nu exista stocare externă. Asigurați-vă că stocarea externă este conectată pentru ca aplicația să funcționeze corespunzător.</string>
<string name="chapters_label">Capitole</string>
<string name="shownotes_label">Notițe</string>
<string name="most_recent_prefix">Cel mai recent episod:\u0020</string>
<string name="episodes_suffix">\u0020episoade</string>
<string name="published_prefix">Publicat:\u0020</string>
<string name="length_prefix">Durată:\u0020</string>
@ -111,6 +112,8 @@
<!--Queue operations-->
<string name="clear_queue_label">Golește coada</string>
<string name="organize_queue_label">Organizează coada</string>
<string name="undo">Refă</string>
<string name="removed_from_queue">Element înlăturat</string>
<!--Flattr-->
<string name="flattr_auth_label">Flattr sign-in</string>
<string name="flattr_auth_explanation">Apăsați butonul de mai jos pentru a începe procesul de autentificare. Veți fi îndreptat spre pagina de logare flattr în browser și veți fi rugat să acordați permisiuni AntennaPod sa flattr. După ce veți acorda permisiunile veți fi readuși la acest ecran automat.</string>
@ -163,6 +166,12 @@
<string name="pref_autodl_wifi_filter_title">Pornește filtru Wi-Fi</string>
<string name="pref_autodl_wifi_filter_sum">Pornește descărcarea automată doar pentru rețele Wi-Fi selectate.</string>
<string name="pref_episode_cache_title">Cache de episoade</string>
<string name="pref_theme_title_light">Deschis</string>
<string name="pref_theme_title_dark">Întunecat</string>
<string name="pref_episode_cache_unlimited">Nelimitat</string>
<string name="pref_update_interval_hours_plural">ore</string>
<string name="pref_update_interval_hours_singular">oră</string>
<string name="pref_update_interval_hours_manual">Manual</string>
<!--Search-->
<string name="search_hint">Caută feeduri sau episoade</string>
<string name="found_in_shownotes_label">Găsit în notițe</string>

View File

@ -9,9 +9,9 @@
<string name="waiting_list_label">В ожидании</string>
<string name="settings_label">Настройки</string>
<string name="add_new_feed_label">Добавить канал</string>
<string name="downloads_label">Закачки</string>
<string name="cancel_download_label">Отменить закачку</string>
<string name="download_log_label">Журнал закачек</string>
<string name="downloads_label">Загрузки</string>
<string name="cancel_download_label">Отменить загрузку</string>
<string name="download_log_label">Журнал загрузок</string>
<string name="playback_history_label">История воспроизведения</string>
<!--Webview actions-->
<string name="open_in_browser_label">Открыть в браузере</string>
@ -22,16 +22,17 @@
<string name="clear_history_label">Очистить историю</string>
<!--Other-->
<string name="confirm_label">Подтвердить</string>
<string name="cancel_label">Отменить</string>
<string name="cancel_label">Отмена</string>
<string name="author_label">Автор</string>
<string name="language_label">Язык</string>
<string name="cover_label">Обложка</string>
<string name="error_label">Ошибка</string>
<string name="error_msg_prefix">Произошла ошибка:</string>
<string name="refresh_label">Обновить</string>
<string name="external_storage_error_msg">Внешний носитель данных недоступен. Убедитесь что внешний носитель смонтирован, иначе это приложение не сможет нормально работать.</string>
<string name="external_storage_error_msg">Внешний носитель недоступен. Убедитесь что внешний носитель смонтирован, иначе приложение не сможет нормально работать.</string>
<string name="chapters_label">Разделы</string>
<string name="shownotes_label">Описание</string>
<string name="most_recent_prefix">Следующий эпизод:\u0020</string>
<string name="episodes_suffix">\u0020 выпуск(ов)</string>
<string name="published_prefix">Опубликовано:\u0020</string>
<string name="length_prefix">Продолжительность:\u0020</string>
@ -50,25 +51,25 @@
<string name="share_source_label">Поделиться ссылкой на канал</string>
<string name="feed_delete_confirmation_msg">Подтвердите удаление канала и ВСЕХ закачанных выпусков этого канала.</string>
<!--actions on feeditems-->
<string name="download_label">Закачать</string>
<string name="play_label">Слушать</string>
<string name="download_label">Загрузить</string>
<string name="play_label">Воспроизвести</string>
<string name="pause_label">Пауза</string>
<string name="stream_label">Воспроизвести из сети</string>
<string name="stream_label">Потоковое воспроизведение</string>
<string name="remove_label">Удалить</string>
<string name="mark_read_label">Отметить как прочитанное</string>
<string name="mark_unread_label">Отметить как непрочитанное</string>
<string name="add_to_queue_label">Поставить в очередь</string>
<string name="add_to_queue_label">Добавить в очередь</string>
<string name="remove_from_queue_label">Удалить из очереди</string>
<string name="visit_website_label">Посетить сайт</string>
<string name="support_label">Поддержать посредством Flattr</string>
<string name="enqueue_all_new">Поставить в очередь все</string>
<string name="download_all">Скачать все</string>
<string name="enqueue_all_new">Добавить все в очередь</string>
<string name="download_all">Загрузить все</string>
<string name="skip_episode_label">Пропустить выпуск</string>
<!--Download messages and labels-->
<string name="download_successful">Закачка завершилась успешно</string>
<string name="download_failed">Закачка </string>
<string name="download_pending">Закачка в ожидании</string>
<string name="download_running">Закачка в процессе</string>
<string name="download_successful">Загрузка завершена</string>
<string name="download_failed">Загрузка прервана</string>
<string name="download_pending">Загрузка в ожидании</string>
<string name="download_running">Загрузка в процессе</string>
<string name="download_error_device_not_found">Устройство хранения не найдено</string>
<string name="download_error_insufficient_space">Недостаточно свободного места</string>
<string name="download_error_file_error">Ошибка файла</string>
@ -78,39 +79,41 @@
<string name="download_error_unsupported_type">Неподдерживаемый тип канала</string>
<string name="download_error_connection_error">Ошибка соединения</string>
<string name="download_error_unknown_host">Неизвестный хост</string>
<string name="cancel_all_downloads_label">Отменить все закачки</string>
<string name="download_cancelled_msg">Закачка отменена</string>
<string name="download_report_title">Закачки завершены</string>
<string name="cancel_all_downloads_label">Отменить все загрузки</string>
<string name="download_cancelled_msg">Загрузка отменена</string>
<string name="download_report_title">Загрузки завершены</string>
<string name="download_error_malformed_url">Некорректная ссылка</string>
<string name="download_error_io_error">Ошибка ввода-вывода</string>
<string name="download_error_request_error">Ошибка запроса</string>
<string name="downloads_left">\u0020закачек осталось</string>
<string name="downloads_left">Осталось\u0020загрузок</string>
<string name="download_notification_title">Получение данных подкаста</string>
<string name="download_report_content">%1$d успешных закачек, %2$d неудачных</string>
<string name="download_report_content">%1$d загрузок завершено, %2$d не удалось</string>
<string name="download_log_title_unknown">Неизвестное название</string>
<string name="download_type_feed">Канал</string>
<string name="download_type_media">Медиа файл</string>
<string name="download_type_image">Изображение</string>
<string name="download_request_error_dialog_message_prefix">Ошибка скачивания файла:\u0020</string>
<string name="download_request_error_dialog_message_prefix">Ошибка при загрузки файла:\u0020</string>
<!--Mediaplayer messages-->
<string name="player_error_msg">Ошибка!</string>
<string name="player_stopped_msg">Ничего не воспроизводится</string>
<string name="player_preparing_msg">Подготовка</string>
<string name="player_ready_msg">Готово</string>
<string name="player_seeking_msg">Поиск</string>
<string name="playback_error_server_died">Сервер отключился</string>
<string name="player_seeking_msg">Перемотка</string>
<string name="playback_error_server_died">Сервер отключен</string>
<string name="playback_error_unknown">Неизвестная ошибка</string>
<string name="no_media_playing_label">Ничего не воспроизводится</string>
<string name="position_default_label">00:00:00</string>
<string name="player_buffering_msg">Буферизация</string>
<string name="playbackservice_notification_title">Воспроизведение подкаста</string>
<string name="playbackservice_notification_content">Для получения дополнительной информации нажмите здесь</string>
<string name="playbackservice_notification_content">Нажмите для получения дополнительной информации</string>
<!--Navigation-->
<string name="show_download_log">Показать журнал</string>
<string name="show_player_label">Показать проигрыватель</string>
<!--Queue operations-->
<string name="clear_queue_label">Очистить очередь</string>
<string name="organize_queue_label">Упорядочить очередь</string>
<string name="undo">Отмена</string>
<string name="removed_from_queue">Удален</string>
<!--Flattr-->
<string name="flattr_auth_label">Авторизоваться в Flattr</string>
<string name="flattr_auth_explanation">Нажмите кнопку чтобы начать процесс авторизации. Вы будете перенаправлены на сайт Flattr где вам нужно будет подключить AntennaPod к вашему аккаунту. После этого вы автоматически будете перенаправлены обратно.</string>
@ -133,15 +136,15 @@
<string name="other_pref">Прочее</string>
<string name="about_pref">О программе</string>
<string name="queue_label">Очередь</string>
<string name="pref_pauseOnHeadsetDisconnect_sum">Остановить воспроизведение когда наушники отсоединены</string>
<string name="pref_pauseOnHeadsetDisconnect_sum">Остановить воспроизведение, когда наушники отсоединены</string>
<string name="pref_followQueue_sum">После завершения воспроизведения перейти к следующему в очереди</string>
<string name="playback_pref">Воспроизведение</string>
<string name="network_pref">Сеть</string>
<string name="pref_autoUpdateIntervall_title">Интервал обновлений</string>
<string name="pref_autoUpdateIntervall_sum">Укажите интервал через который каналы обновляются автоматически, или отключите это</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Закачивать файлы только по WiFi</string>
<string name="pref_autoUpdateIntervall_sum">Укажите интервал через который каналы обновляются автоматически, или отключите его</string>
<string name="pref_downloadMediaOnWifiOnly_sum">Загружать файлы только по Wi-Fi</string>
<string name="pref_followQueue_title">Непрерывное воспроизведение</string>
<string name="pref_downloadMediaOnWifiOnly_title">Закачка по WiFi</string>
<string name="pref_downloadMediaOnWifiOnly_title">Загрузка по Wi-Fi</string>
<string name="pref_pauseOnHeadsetDisconnect_title">Наушники отсоединены</string>
<string name="pref_mobileUpdate_title">Мобильные обновления</string>
<string name="pref_mobileUpdate_sum">Обновлять каналы через мобильное интернет-подключение</string>
@ -154,15 +157,21 @@
<string name="pref_revokeAccess_title">Отозвать доступ</string>
<string name="pref_revokeAccess_sum">Отменить доступ этого приложения к вашему аккаунту Flattr.</string>
<string name="pref_display_only_episodes_title">Показывать только выпуски</string>
<string name="pref_display_only_episodes_sum">Показывать только те элементы списка которые содержат выпуски</string>
<string name="pref_display_only_episodes_sum">Показывать только те элементы списка, которые содержат выпуски</string>
<string name="user_interface_label">Интерфейс</string>
<string name="pref_set_theme_title">Выбор темы</string>
<string name="pref_set_theme_sum">Изменить оформление AntennaPod</string>
<string name="pref_set_theme_sum">Изменить тему оформление AntennaPod</string>
<string name="pref_automatic_download_title">Автоматическая загрузка</string>
<string name="pref_automatic_download_sum">Настроить автоматическую загрузку выпусков.</string>
<string name="pref_autodl_wifi_filter_title">Включить фильтр Wi-Fi</string>
<string name="pref_autodl_wifi_filter_sum">Разрешать автоматическую загрузку тольуо для выбранных Wi-Fi сетей.</string>
<string name="pref_autodl_wifi_filter_sum">Разрешать автоматическую загрузку только для выбранных Wi-Fi сетей.</string>
<string name="pref_episode_cache_title">Кэш выпусков</string>
<string name="pref_theme_title_light">Светлая</string>
<string name="pref_theme_title_dark">Тёмная</string>
<string name="pref_episode_cache_unlimited">Неограничен</string>
<string name="pref_update_interval_hours_plural">Часы</string>
<string name="pref_update_interval_hours_singular">Час</string>
<string name="pref_update_interval_hours_manual">Вручную</string>
<!--Search-->
<string name="search_hint">Поиск каналов или выпусков</string>
<string name="found_in_shownotes_label">Найдено в описании выпуска</string>
@ -174,37 +183,37 @@
<string name="search_label">Поиск</string>
<string name="found_in_title_label">Найдено в заголовке</string>
<!--OPML import and export-->
<string name="opml_import_txtv_button_lable">Также возможен импорт файла OPML. OPML файлы позволяют переносить ваши подписки с подкастами из одного приложения в другое.</string>
<string name="opml_import_txtv_button_lable">Также возможен импорт файла OPML. OPML файлы позволяют переносить ваши подписки из одного приложения в другое:</string>
<string name="opml_import_explanation">Для импорта файла OPML его нужно поместить каталог указанный ниже и нажать кнопку чтобы начать процесс импорта.</string>
<string name="start_import_label">Начать импорт</string>
<string name="opml_import_label">Импорт OPML</string>
<string name="opml_directory_error">ОШИБКА!</string>
<string name="reading_opml_label">Чтение файла OPML</string>
<string name="opml_reader_error">Ошибка чтения документа OPML</string>
<string name="opml_reader_error">Ошибка чтения файла OPML</string>
<string name="opml_import_error_dir_empty">Каталог импорта пуст.</string>
<string name="select_all_label">Отметить все</string>
<string name="deselect_all_label">Снять все отметки</string>
<string name="choose_file_to_import_label">Выбрать файл для импорта</string>
<string name="opml_export_label">Выгрузка в OPML</string>
<string name="exporting_label">Выгружается...</string>
<string name="export_error_label">Ошибка выгрузки</string>
<string name="opml_export_success_title">Выгружено в OPML успешно</string>
<string name="opml_export_label">Экспорт в OPML</string>
<string name="exporting_label">Экспортируется...</string>
<string name="export_error_label">Ошибка экспорта</string>
<string name="opml_export_success_title">Экспорт OPML завершен</string>
<string name="opml_export_success_sum">OPML файл был записан в:\u0020</string>
<!--Sleep timer-->
<string name="set_sleeptimer_label">Установить таймер сна</string>
<string name="disable_sleeptimer_label">Отключить таймер сна</string>
<string name="enter_time_here_label">Ввести время</string>
<string name="enter_time_here_label">Введите время</string>
<string name="sleep_timer_label">Таймер сна</string>
<string name="time_left_label">Времени осталось:\u0020</string>
<string name="time_dialog_invalid_input">Неправильный ввод, время должно быть в виде числа</string>
<!--Miro Guide-->
<string name="loading_categories_label">Загружаются категории...</string>
<string name="browse_miroguide_label">Просмотреть каталоги в проекте Miro</string>
<string name="txtv_browse_miroguide_label">Или просмотреть каталоги в проекте Miro</string>
<string name="miro_guide_label">Проект Miro</string>
<string name="miro_search_hint">Поиск в проекте Miro</string>
<string name="loading_categories_label">Загрузка категорий...</string>
<string name="browse_miroguide_label">Посмотреть в каталоге Miro</string>
<string name="txtv_browse_miroguide_label">Или посмотреть в каталоге Miro</string>
<string name="miro_guide_label">Miro</string>
<string name="miro_search_hint">Поиск в Miro</string>
<string name="popular_label">Популярные</string>
<string name="best_rating_label">Наивысший рейтинг</string>
<string name="best_rating_label">С высоким рейтингом</string>
<string name="add_feed_label">Добавить канал</string>
<string name="miro_feed_added">Канал добавляется</string>
<!--Directory chooser-->
@ -217,6 +226,6 @@
<string name="create_folder_error_already_exists">Папка уже существует</string>
<string name="create_folder_error">Невозможно создать папку</string>
<string name="folder_not_empty_dialog_title">Папка не пуста</string>
<string name="folder_not_empty_dialog_msg">Выбранная папка не пуста. Закачки и прочие файлы будут сохранены в эту папку. Продолжить?</string>
<string name="folder_not_empty_dialog_msg">Выбранная папка не пуста. Загрузки и прочие файлы будут сохранены в эту папку. Продолжить?</string>
<string name="set_to_default_folder">Выберите папку по умолчанию</string>
</resources>

View File

@ -11,7 +11,7 @@
<string name="add_new_feed_label">Додати канал</string>
<string name="downloads_label">Завантаження</string>
<string name="cancel_download_label">Скасувати завантаження</string>
<string name="download_log_label">Завантаження</string>
<string name="download_log_label">Історія завантажень</string>
<string name="playback_history_label">Що грало</string>
<!--Webview actions-->
<string name="open_in_browser_label">Відкрити в браузері</string>
@ -32,6 +32,7 @@
<string name="external_storage_error_msg">Немає доступної флешки. Зовнішній носій потрібен для коректної роботи додатку</string>
<string name="chapters_label">Глави</string>
<string name="shownotes_label">Нотатки до епізода</string>
<string name="most_recent_prefix">Найновіший епізод:\u0020</string>
<string name="episodes_suffix">\u0020епізодів</string>
<string name="published_prefix">Опубліковано:\u0020</string>
<string name="length_prefix">Довжина:\u0020</string>
@ -53,11 +54,11 @@
<string name="download_label">Завантажити</string>
<string name="play_label">Грати</string>
<string name="pause_label">Пауза</string>
<string name="stream_label">Поток</string>
<string name="stream_label">Прослухати без завантаження</string>
<string name="remove_label">Видалити</string>
<string name="mark_read_label">Прочитано</string>
<string name="mark_unread_label">Непрочитано</string>
<string name="add_to_queue_label">Додати канал</string>
<string name="add_to_queue_label">Додати до черги</string>
<string name="remove_from_queue_label">Видалити з черги</string>
<string name="visit_website_label">Відкрити сайт</string>
<string name="support_label">Підтримати за допомогою Flattr</string>
@ -111,14 +112,16 @@
<!--Queue operations-->
<string name="clear_queue_label">Очистити чергу</string>
<string name="organize_queue_label">Впорядкувати чергу</string>
<string name="undo">Скасувати</string>
<string name="removed_from_queue">Видалено</string>
<!--Flattr-->
<string name="flattr_auth_label">Увійти дл Flattr</string>
<string name="flattr_auth_label">Увійти до Flattr</string>
<string name="flattr_auth_explanation">Нажміть цю кнопку для початку авторізації. Буде відкрито flattr в браузері, буде запит на дозвіл доступу Antennapod до flattr. Після надання доступу ви повернетесь до цього екрану автоматично</string>
<string name="authenticate_label">Ввісти ім\'я та пароль</string>
<string name="return_home_label">Повернення до початку</string>
<string name="flattr_auth_success">Вийшло авторізуватись. Тепер ви можете flattr things за допомогою додатку</string>
<string name="no_flattr_token_title">Не має flattr token</string>
<string name="no_flattr_token_msg">Здається ваш обліковий запис flattr не підєднано до AntennaPod. Ви можете або підєднати її або відкривати web сторінку в браузері</string>
<string name="no_flattr_token_title">Немає flattr token</string>
<string name="no_flattr_token_msg">Здається ваш обліковий запис flattr не під\'єднано до AntennaPod. Ви можете або під\'єднати її або відкривати web сторінку в браузері</string>
<string name="authenticate_now_label">Пароль та логін</string>
<string name="action_forbidden_title">Заборонено</string>
<string name="action_forbidden_msg">AntennaPod не маэ дозвілу це зробити. Можливо відкликаний доступ до AntennaPod. Або ввідіть логін пароль в налаштуваннях або зробить це на сайті</string>
@ -157,12 +160,18 @@
<string name="pref_display_only_episodes_sum">Відображати тільки канали з наявними епізодами</string>
<string name="user_interface_label">Зовнішній вид</string>
<string name="pref_set_theme_title">Обрати тему</string>
<string name="pref_set_theme_sum">Змінти появу AntennaPod</string>
<string name="pref_set_theme_sum">Змінити появу AntennaPod</string>
<string name="pref_automatic_download_title">Автоматичне завантаження</string>
<string name="pref_automatic_download_sum">Налаштування автоматичного завантаження епізодів</string>
<string name="pref_autodl_wifi_filter_title">Увімкнути фільтр Wi-Fi</string>
<string name="pref_autodl_wifi_filter_sum">Дозволити автоматичне завантаження тільки для окремих Wi-Fi мережах</string>
<string name="pref_autodl_wifi_filter_sum">Дозволити автоматичне завантаження тільки в цих Wi-Fi мережах</string>
<string name="pref_episode_cache_title">Кеш епізодів</string>
<string name="pref_theme_title_light">Світла</string>
<string name="pref_theme_title_dark">Темна</string>
<string name="pref_episode_cache_unlimited">Без обмежень</string>
<string name="pref_update_interval_hours_plural">годин</string>
<string name="pref_update_interval_hours_singular">година</string>
<string name="pref_update_interval_hours_manual">Інструкція</string>
<!--Search-->
<string name="search_hint">Пошук каналів та епізодів</string>
<string name="found_in_shownotes_label">Знайдено у примітках</string>
@ -174,7 +183,7 @@
<string name="search_label">Пошук</string>
<string name="found_in_title_label">Знайдено у назві</string>
<!--OPML import and export-->
<string name="opml_import_txtv_button_lable">Ви можете імпортувати OPML файл. Такі файли дозволяют переходити з однієї програми до іншої:</string>
<string name="opml_import_txtv_button_lable">Ви можете імпортувати OPML файл. Такі файли дозволяют переходити з однієї програми для подкастів до іншої:</string>
<string name="opml_import_explanation">Для імпорту OPML файлу, скопіюйте його в цю папку та натіснить кнопку внизу для початку імпорту</string>
<string name="start_import_label">Почати імпорт</string>
<string name="opml_import_label">OPML імпорт</string>
@ -202,7 +211,7 @@
<string name="browse_miroguide_label">Перегляд Miro Guide</string>
<string name="txtv_browse_miroguide_label">Або проглянути Miro Guide</string>
<string name="miro_guide_label">Miro Guide</string>
<string name="miro_search_hint">Пошук Mirog Guide</string>
<string name="miro_search_hint">Пошук в Mirog Guide</string>
<string name="popular_label">Популярні</string>
<string name="best_rating_label">Кращі</string>
<string name="add_feed_label">Додати канал</string>

View File

@ -32,6 +32,7 @@
<string name="external_storage_error_msg">没有可用的外部存储. 请确保安装外部存储器, 这样本应用才可以正常工作.</string>
<string name="chapters_label">章节</string>
<string name="shownotes_label">笔记</string>
<string name="most_recent_prefix">最近曲目:\u0020</string>
<string name="episodes_suffix">\u0020 曲</string>
<string name="published_prefix">发表:\u0020</string>
<string name="length_prefix">长度:\u0020</string>
@ -48,20 +49,20 @@
<string name="remove_feed_label">删除订阅</string>
<string name="share_link_label">分享网站链接</string>
<string name="share_source_label">分享订阅链接</string>
<string name="feed_delete_confirmation_msg">确认要删除这些订阅吗? 该订阅所有已经下载的曲将一并删除. </string>
<string name="feed_delete_confirmation_msg">确认要删除这些订阅吗? 该订阅所有已经下载的曲将一并删除. </string>
<!--actions on feeditems-->
<string name="download_label">下载</string>
<string name="play_label">播放</string>
<string name="pause_label">暂停</string>
<string name="stream_label"></string>
<string name="stream_label">媒体</string>
<string name="remove_label">删除</string>
<string name="mark_read_label">标记已读</string>
<string name="mark_unread_label">标记未读</string>
<string name="add_to_queue_label">添加到队列</string>
<string name="remove_from_queue_label">队列中删除</string>
<string name="add_to_queue_label">添加到播放列表</string>
<string name="remove_from_queue_label">播放列表中删除</string>
<string name="visit_website_label">访问网站</string>
<string name="support_label">Flattr 他</string>
<string name="enqueue_all_new">全部添加到队列</string>
<string name="enqueue_all_new">全部添加到播放列表</string>
<string name="download_all">全部下载</string>
<string name="skip_episode_label">跳过曲目</string>
<!--Download messages and labels-->
@ -109,8 +110,10 @@
<string name="show_download_log">下载日志</string>
<string name="show_player_label">播放器</string>
<!--Queue operations-->
<string name="clear_queue_label">清空队列</string>
<string name="organize_queue_label">组织队列</string>
<string name="clear_queue_label">清空播放列表</string>
<string name="organize_queue_label">组织播放列表</string>
<string name="undo">撤消</string>
<string name="removed_from_queue">已删除项</string>
<!--Flattr-->
<string name="flattr_auth_label">Flattr 登录</string>
<string name="flattr_auth_explanation">按下面的按钮开始身份验证过程. 将在浏览器中打开 Flattr 登录界面并要求给予 AntennaPod 访问 Flattr 的权限. 权限许可后, 将自动回到这个界面.</string>
@ -132,9 +135,9 @@
<!--Preferences-->
<string name="other_pref">其他</string>
<string name="about_pref">关于</string>
<string name="queue_label">队列</string>
<string name="queue_label">清空播放</string>
<string name="pref_pauseOnHeadsetDisconnect_sum">当耳机是断开时暂停播放 </string>
<string name="pref_followQueue_sum">播放完成跳转到队列下一项</string>
<string name="pref_followQueue_sum">播放完成跳转到播放列表下一项</string>
<string name="playback_pref">播放</string>
<string name="network_pref">网络</string>
<string name="pref_autoUpdateIntervall_title">更新周期</string>
@ -163,8 +166,14 @@
<string name="pref_autodl_wifi_filter_title">打开 Wi-Fi 过滤器</string>
<string name="pref_autodl_wifi_filter_sum">只允许在 Wi-Fi 网络下自动下载</string>
<string name="pref_episode_cache_title">曲目缓存</string>
<string name="pref_theme_title_light">浅色</string>
<string name="pref_theme_title_dark">暗色</string>
<string name="pref_episode_cache_unlimited">无限</string>
<string name="pref_update_interval_hours_plural">小时</string>
<string name="pref_update_interval_hours_singular"></string>
<string name="pref_update_interval_hours_manual">手动</string>
<!--Search-->
<string name="search_hint">搜索订阅或者插曲</string>
<string name="search_hint">搜索订阅或者曲</string>
<string name="found_in_shownotes_label">笔记中查找</string>
<string name="found_in_chapters_label">章节中查找</string>
<string name="search_status_searching">搜索中...</string>
@ -199,11 +208,11 @@
<string name="time_dialog_invalid_input">无效的输入, 时间是一个整数</string>
<!--Miro Guide-->
<string name="loading_categories_label">加载目录中...</string>
<string name="browse_miroguide_label">浏览 Miro 指南</string>
<string name="txtv_browse_miroguide_label">或者浏览 Miro 指南</string>
<string name="miro_guide_label">Miro 指南</string>
<string name="miro_search_hint">搜索 Miro 指南</string>
<string name="popular_label">受欢迎的</string>
<string name="browse_miroguide_label">浏览 Miro 频道</string>
<string name="txtv_browse_miroguide_label">或者浏览 Miro 频道</string>
<string name="miro_guide_label">Miro 频道</string>
<string name="miro_search_hint">搜索 Miro 频道</string>
<string name="popular_label">流行</string>
<string name="best_rating_label">评分最高</string>
<string name="add_feed_label">添加订阅</string>
<string name="miro_feed_added">订阅已被添加</string>

View File

@ -1,16 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="update_intervall_options">
<item>Manual</item>
<item>1 hour</item>
<item>2 hours</item>
<item>4 hours</item>
<item>8 hours</item>
<item>12 hours</item>
<item>24 hours</item>
</string-array>
<string-array name="update_intervall_values">
<item>0</item>
<item>1</item>
@ -20,7 +10,6 @@
<item>12</item>
<item>24</item>
</string-array>
<string-array name="episode_cache_size_entries">
<item>@string/pref_episode_cache_unlimited</item>
<item>10</item>
@ -30,7 +19,6 @@
<item>80</item>
<item>100</item>
</string-array>
<string-array name="episode_cache_size_values">
<item>-1</item>
<item>10</item>
@ -40,20 +28,16 @@
<item>80</item>
<item>100</item>
</string-array>
<string-array name="autodl_select_networks_default_entries">
<item>N/A</item>
</string-array>
<string-array name="autodl_select_networks_default_values">
<item>0</item>
</string-array>
<string-array name="theme_options">
<item>@string/pref_theme_title_light</item>
<item>@string/pref_theme_title_dark</item>
</string-array>
<string-array name="theme_values">
<item>0</item>
<item>1</item>

View File

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources
xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingTranslation"
>
<!-- Activitiy titles -->
<string name="app_name">AntennaPod</string>
@ -182,6 +185,10 @@
<string name="pref_theme_title_light">Light</string>
<string name="pref_theme_title_dark">Dark</string>
<string name="pref_episode_cache_unlimited">Unlimited</string>
<string name="pref_update_interval_hours_plural">hours</string>
<string name="pref_update_interval_hours_singular">hour</string>
<string name="pref_update_interval_hours_manual">Manual</string>
<!-- Search -->
<string name="search_hint">Search for Feeds or Episodes</string>
@ -244,4 +251,4 @@
<string name="folder_not_empty_dialog_msg">The folder you have selected is not empty. Media downloads and other files will be placed directly in this folder. Continue anyway?</string>
<string name="set_to_default_folder">Choose default folder</string>
</resources>
</resources>

View File

@ -22,7 +22,7 @@
<PreferenceCategory android:title="@string/network_pref" >
<ListPreference
android:defaultValue="0"
android:entries="@array/update_intervall_options"
android:entries="@array/update_intervall_values"
android:entryValues="@array/update_intervall_values"
android:key="prefAutoUpdateIntervall"
android:summary="@string/pref_autoUpdateIntervall_sum"

View File

@ -2,6 +2,8 @@ package de.danoeh.antennapod.activity;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
@ -44,6 +46,9 @@ public class AddFeedActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
if (AppConfig.DEBUG)
Log.d(TAG, "Was started with Intent " + getIntent().getAction()
+ " and Data " + getIntent().getDataString());
setTheme(UserPreferences.getTheme());
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@ -54,6 +59,10 @@ public class AddFeedActivity extends SherlockActivity {
progDialog = new ProgressDialog(this);
etxtFeedurl = (EditText) findViewById(R.id.etxtFeedurl);
if (StringUtils.equals(getIntent().getAction(), Intent.ACTION_VIEW)) {
etxtFeedurl.setText(getIntent().getDataString());
}
butBrowseMiroGuide = (Button) findViewById(R.id.butBrowseMiroguide);
butOpmlImport = (Button) findViewById(R.id.butOpmlImport);
butConfirm = (Button) findViewById(R.id.butConfirm);
@ -101,7 +110,7 @@ public class AddFeedActivity extends SherlockActivity {
if (intent.getAction() != null
&& intent.getAction().equals(Intent.ACTION_SEND)) {
if (AppConfig.DEBUG)
Log.d(TAG, "Was started with ACTION_SEND intent");
Log.d(TAG, "Resuming with ACTION_SEND intent");
String text = intent.getStringExtra(Intent.EXTRA_TEXT);
if (text != null) {
etxtFeedurl.setText(text);
@ -152,7 +161,7 @@ public class AddFeedActivity extends SherlockActivity {
}
@Override
public void onConnectionFailure(int reason) {
public void onConnectionFailure(DownloadError reason) {
handleDownloadError(reason);
}
});
@ -168,11 +177,11 @@ public class AddFeedActivity extends SherlockActivity {
progDialog.setMessage(getString(R.string.loading_label));
}
private void handleDownloadError(int reason) {
private void handleDownloadError(DownloadError reason) {
final AlertDialog errorDialog = new AlertDialog.Builder(this).create();
errorDialog.setTitle(R.string.error_label);
errorDialog.setMessage(getString(R.string.error_msg_prefix) + " "
+ DownloadError.getErrorString(this, reason));
+ reason.getErrorString(this));
errorDialog.setButton(getString(android.R.string.ok),
new DialogInterface.OnClickListener() {
@Override

View File

@ -89,9 +89,8 @@ public abstract class OnlineFeedViewActivity extends SherlockFragmentActivity {
if (status.isSuccessful()) {
parseFeed();
} else {
String errorMsg = DownloadError.getErrorString(
OnlineFeedViewActivity.this,
status.getReason());
String errorMsg = status.getReason().getErrorString(
OnlineFeedViewActivity.this);
if (errorMsg != null
&& status.getReasonDetailed() != null) {
errorMsg += " ("
@ -191,9 +190,9 @@ public abstract class OnlineFeedViewActivity extends SherlockFragmentActivity {
}
});
} else {
final String errorMsg = DownloadError.getErrorString(
OnlineFeedViewActivity.this,
DownloadError.ERROR_PARSER_EXCEPTION)
final String errorMsg =
DownloadError.ERROR_PARSER_EXCEPTION.getErrorString(
OnlineFeedViewActivity.this)
+ " (" + reasonDetailed + ")";
runOnUiThread(new Runnable() {

View File

@ -12,6 +12,7 @@ import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
@ -147,32 +148,47 @@ public class PreferenceActivity extends SherlockPreferenceActivity {
.setOnPreferenceChangeListener(
new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(
Preference preference, Object newValue) {
if (newValue instanceof String) {
setEpisodeCacheSizeText(Integer
.valueOf((String) newValue));
}
public boolean onPreferenceChange(Preference preference, Object o) {
checkItemVisibility();
return true;
}
});
findPreference(UserPreferences.PREF_ENABLE_AUTODL)
.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
checkItemVisibility();
return true;
}
});
buildUpdateIntervalPreference();
buildAutodownloadSelectedNetworsPreference();
setSelectedNetworksEnabled(UserPreferences
.isEnableAutodownloadWifiFilter());
}
private void buildUpdateIntervalPreference() {
ListPreference pref = (ListPreference) findPreference(UserPreferences.PREF_UPDATE_INTERVAL);
String[] values = getResources().getStringArray(
R.array.update_intervall_values);
String[] entries = new String[values.length];
for (int x = 0; x < values.length; x++) {
Integer v = Integer.parseInt(values[x]);
switch (v) {
case 0:
entries[x] = getString(R.string.pref_update_interval_hours_manual);
break;
case 1:
entries[x] = v
+ " "
+ getString(R.string.pref_update_interval_hours_singular);
break;
default:
entries[x] = v + " "
+ getString(R.string.pref_update_interval_hours_plural);
break;
}
}
pref.setEntries(entries);
}
private void setSelectedNetworksEnabled(boolean b) {
if (selectedNetworks != null) {
for (Preference p : selectedNetworks) {

View File

@ -71,8 +71,7 @@ public class DownloadLogAdapter extends BaseAdapter {
holder.successful.setTextColor(convertView.getResources().getColor(
R.color.download_failed_red));
holder.successful.setText(R.string.download_failed);
String reasonText = DownloadError.getErrorString(context,
status.getReason());
String reasonText = status.getReason().getErrorString(context);
if (status.getReasonDetailed() != null) {
reasonText += ": " + status.getReasonDetailed();
}

View File

@ -20,7 +20,7 @@ import android.net.Uri;
public class MiroGuideConnector {
private HttpClient httpClient;
private static final String HOST_URL = "https://www.miroguide.com/api/";
private static final String HOST_URL = "http://www.miroguide.com/api/";
private static final String PATH_GET_CHANNELS = "get_channels";
private static final String PATH_LIST_CATEGORIES = "list_categories";
private static final String PATH_GET_CHANNEL = "get_channel";

File diff suppressed because it is too large Load Diff

View File

@ -608,7 +608,7 @@ public class DownloadService extends Service {
private DownloadRequest request;
private int reason;
private DownloadError reason;
private boolean successful;
public FeedSyncThread(DownloadRequest request) {
@ -626,7 +626,7 @@ public class DownloadService extends Service {
feed.setFile_url(request.getDestination());
feed.setDownloaded(true);
reason = 0;
reason = null;
String reasonDetailed = null;
successful = true;
FeedHandler feedHandler = new FeedHandler();

View File

@ -3,6 +3,7 @@ package de.danoeh.antennapod.service.download;
import java.util.Date;
import de.danoeh.antennapod.feed.FeedFile;
import de.danoeh.antennapod.util.DownloadError;
/** Contains status attributes for one download */
public class DownloadStatus {
@ -21,7 +22,7 @@ public class DownloadStatus {
* URL if the download has no other title.
*/
protected String title;
protected int reason;
protected DownloadError reason;
/**
* A message which can be presented to the user to give more information.
* Should be null if Download was successful.
@ -43,7 +44,7 @@ public class DownloadStatus {
/** Constructor for restoring Download status entries from DB. */
public DownloadStatus(long id, String title, long feedfileId,
int feedfileType, boolean successful, int reason,
int feedfileType, boolean successful, DownloadError reason,
Date completionDate, String reasonDetailed) {
this.id = id;
this.title = title;
@ -56,7 +57,7 @@ public class DownloadStatus {
this.feedfileType = feedfileType;
}
public DownloadStatus(DownloadRequest request, int reason,
public DownloadStatus(DownloadRequest request, DownloadError reason,
boolean successful, boolean cancelled, String reasonDetailed) {
if (request == null) {
throw new IllegalArgumentException("request must not be null");
@ -72,7 +73,7 @@ public class DownloadStatus {
}
/** Constructor for creating new completed downloads. */
public DownloadStatus(FeedFile feedfile, String title, int reason,
public DownloadStatus(FeedFile feedfile, String title, DownloadError reason,
boolean successful, String reasonDetailed) {
if (feedfile == null) {
throw new IllegalArgumentException("feedfile must not be null");
@ -90,7 +91,7 @@ public class DownloadStatus {
/** Constructor for creating new completed downloads. */
public DownloadStatus(long feedfileId, int feedfileType, String title,
int reason, boolean successful, String reasonDetailed) {
DownloadError reason, boolean successful, String reasonDetailed) {
this.title = title;
this.done = true;
this.feedfileId = feedfileId;
@ -111,48 +112,70 @@ public class DownloadStatus {
+ ", cancelled=" + cancelled + "]";
}
public long getId() {
return id;
}
public long getId() {
return id;
}
public String getTitle() {
return title;
}
public String getTitle() {
return title;
}
public int getReason() {
return reason;
}
public DownloadError getReason() {
return reason;
}
public String getReasonDetailed() {
return reasonDetailed;
}
public String getReasonDetailed() {
return reasonDetailed;
}
public boolean isSuccessful() {
return successful;
}
public boolean isSuccessful() {
return successful;
}
public Date getCompletionDate() {
return completionDate;
}
public Date getCompletionDate() {
return completionDate;
}
public long getFeedfileId() {
return feedfileId;
}
public long getFeedfileId() {
return feedfileId;
}
public int getFeedfileType() {
return feedfileType;
}
public int getFeedfileType() {
return feedfileType;
}
public boolean isDone() {
return done;
}
public boolean isDone() {
return done;
}
public boolean isCancelled() {
return cancelled;
}
public boolean isCancelled() {
return cancelled;
}
public void setId(long id) {
this.id = id;
}
public void setSuccessful() {
this.successful = true;
this.reason = DownloadError.SUCCESS;
this.done = true;
}
public void setFailed(DownloadError reason, String reasonDetailed) {
this.successful = false;
this.reason = reason;
this.reasonDetailed = reasonDetailed;
}
public void setCancelled() {
this.successful = false;
this.reason = DownloadError.ERROR_DOWNLOAD_CANCELLED;
this.done = true;
this.cancelled = true;
}
public void setCompletionDate(Date completionDate) {
this.completionDate = completionDate;
}
public void setId(long id) {
this.id = id;
}
}

View File

@ -20,6 +20,7 @@ public abstract class Downloader implements Callable<Downloader> {
this.request = request;
this.request.setStatusMsg(R.string.download_pending);
this.cancelled = false;
this.result = new DownloadStatus(request, null, false, false, null);
}
protected abstract void download();

View File

@ -153,23 +153,21 @@ public class HttpDownloader extends Downloader {
private void onSuccess() {
if (AppConfig.DEBUG)
Log.d(TAG, "Download was successful");
result = new DownloadStatus(request, 0, true, false, null);
result.setSuccessful();
}
private void onFail(int reason, String reasonDetailed) {
private void onFail(DownloadError reason, String reasonDetailed) {
if (AppConfig.DEBUG) {
Log.d(TAG, "Download failed");
}
result = new DownloadStatus(request, reason, false, false,
reasonDetailed);
result.setFailed(reason, reasonDetailed);
cleanup();
}
private void onCancelled() {
if (AppConfig.DEBUG)
Log.d(TAG, "Download was cancelled");
result = new DownloadStatus(request,
DownloadError.ERROR_DOWNLOAD_CANCELLED, false, true, null);
result.setCancelled();
cleanup();
}

View File

@ -19,6 +19,7 @@ import de.danoeh.antennapod.feed.ID3Chapter;
import de.danoeh.antennapod.feed.SimpleChapter;
import de.danoeh.antennapod.feed.VorbisCommentChapter;
import de.danoeh.antennapod.service.download.*;
import de.danoeh.antennapod.util.DownloadError;
import de.danoeh.antennapod.util.comparator.DownloadStatusComparator;
import de.danoeh.antennapod.util.comparator.FeedItemPubdateComparator;
@ -428,7 +429,7 @@ public final class DBReader {
logCursor
.getLong(PodDBAdapter.KEY_COMPLETION_DATE_INDEX));
downloadLog.add(new DownloadStatus(id, title, feedfileId,
feedfileType, successful, reason, completionDate,
feedfileType, successful, DownloadError.fromCode(reason), completionDate,
reasonDetailed));
} while (logCursor.moveToNext());

View File

@ -519,7 +519,7 @@ public class PodDBAdapter {
ContentValues values = new ContentValues();
values.put(KEY_FEEDFILE, status.getFeedfileId());
values.put(KEY_FEEDFILETYPE, status.getFeedfileType());
values.put(KEY_REASON, status.getReason());
values.put(KEY_REASON, status.getReason().getCode());
values.put(KEY_SUCCESSFUL, status.isSuccessful());
values.put(KEY_COMPLETION_DATE, status.getCompletionDate().getTime());
values.put(KEY_REASON_DETAILED, status.getReasonDetailed());

View File

@ -78,6 +78,15 @@ public class NSRSS20 extends Namespace {
@Override
public void handleElementEnd(String localName, HandlerState state) {
if (localName.equals(ITEM)) {
if (state.getCurrentItem() != null) {
// the title tag is optional in RSS 2.0. The description is used
// as a
// title if the item has no title-tag.
if (state.getCurrentItem().getTitle() == null) {
state.getCurrentItem().setTitle(
state.getCurrentItem().getDescription());
}
}
state.setCurrentItem(null);
} else if (state.getTagstack().size() >= 2
&& state.getContentBuf() != null) {
@ -98,7 +107,8 @@ public class NSRSS20 extends Namespace {
state.getCurrentItem().setTitle(content);
} else if (second.equals(CHANNEL)) {
state.getFeed().setTitle(content);
} else if (second.equals(IMAGE) && third != null && third.equals(CHANNEL)) {
} else if (second.equals(IMAGE) && third != null
&& third.equals(CHANNEL)) {
state.getFeed().getImage().setTitle(content);
}
} else if (top.equals(LINK)) {
@ -110,7 +120,8 @@ public class NSRSS20 extends Namespace {
} else if (top.equals(PUBDATE) && second.equals(ITEM)) {
state.getCurrentItem().setPubDate(
SyndDateUtils.parseRFC822Date(content));
} else if (top.equals(URL) && second.equals(IMAGE) && third != null && third.equals(CHANNEL)) {
} else if (top.equals(URL) && second.equals(IMAGE) && third != null
&& third.equals(CHANNEL)) {
state.getFeed().getImage().setDownload_url(content);
} else if (localName.equals(DESCR)) {
if (second.equals(CHANNEL)) {

View File

@ -14,7 +14,7 @@ public class ConnectionTester implements Runnable {
private static final String TAG = "ConnectionTester";
private String strUrl;
private Callback callback;
private int reason;
private DownloadError reason;
private Handler handler;
@ -68,10 +68,10 @@ public class ConnectionTester implements Runnable {
public static abstract class Callback {
public abstract void onConnectionSuccessful();
public abstract void onConnectionFailure(int reason);
public abstract void onConnectionFailure(DownloadError reason);
}
public int getReason() {
public DownloadError getReason() {
return reason;
}

View File

@ -4,54 +4,46 @@ import android.content.Context;
import de.danoeh.antennapod.R;
/** Utility class for Download Errors. */
public class DownloadError {
public static final int ERROR_PARSER_EXCEPTION = 1;
public static final int ERROR_UNSUPPORTED_TYPE = 2;
public static final int ERROR_CONNECTION_ERROR = 3;
public static final int ERROR_MALFORMED_URL = 4;
public static final int ERROR_IO_ERROR = 5;
public static final int ERROR_FILE_EXISTS = 6;
public static final int ERROR_DOWNLOAD_CANCELLED = 7;
public static final int ERROR_DEVICE_NOT_FOUND = 8;
public static final int ERROR_HTTP_DATA_ERROR = 9;
public static final int ERROR_NOT_ENOUGH_SPACE = 10;
public static final int ERROR_UNKNOWN_HOST = 11;
public static final int ERROR_REQUEST_ERROR = 12;
/** Get a human-readable string for a specific error code. */
public static String getErrorString(Context context, int code) {
int resId;
switch(code) {
case ERROR_NOT_ENOUGH_SPACE:
resId = R.string.download_error_insufficient_space;
break;
case ERROR_DEVICE_NOT_FOUND:
resId = R.string.download_error_device_not_found;
break;
case ERROR_IO_ERROR:
resId = R.string.download_error_io_error;
break;
case ERROR_HTTP_DATA_ERROR:
resId = R.string.download_error_http_data_error;
break;
case ERROR_PARSER_EXCEPTION:
resId = R.string.download_error_parser_exception;
break;
case ERROR_UNSUPPORTED_TYPE:
resId = R.string.download_error_unsupported_type;
break;
case ERROR_CONNECTION_ERROR:
resId = R.string.download_error_connection_error;
break;
case ERROR_UNKNOWN_HOST:
resId = R.string.download_error_unknown_host;
break;
case ERROR_REQUEST_ERROR:
resId = R.string.download_error_request_error;
break;
default:
resId = R.string.download_error_error_unknown;
public enum DownloadError {
SUCCESS(0, R.string.download_successful),
ERROR_PARSER_EXCEPTION(1, R.string.download_error_parser_exception),
ERROR_UNSUPPORTED_TYPE(2, R.string.download_error_unsupported_type),
ERROR_CONNECTION_ERROR(3, R.string.download_error_connection_error),
ERROR_MALFORMED_URL(4, R.string.download_error_error_unknown),
ERROR_IO_ERROR(5, R.string.download_error_io_error),
ERROR_FILE_EXISTS(6, R.string.download_error_error_unknown),
ERROR_DOWNLOAD_CANCELLED(7, R.string.download_error_error_unknown),
ERROR_DEVICE_NOT_FOUND(8, R.string.download_error_device_not_found),
ERROR_HTTP_DATA_ERROR(9, R.string.download_error_http_data_error),
ERROR_NOT_ENOUGH_SPACE(10, R.string.download_error_insufficient_space),
ERROR_UNKNOWN_HOST(11, R.string.download_error_unknown_host),
ERROR_REQUEST_ERROR(12, R.string.download_error_request_error);
private final int code;
private final int resId;
private DownloadError(int code, int resId) {
this.code = code;
this.resId = resId;
}
/** Return DownloadError from its associated code. */
public static DownloadError fromCode(int code) {
for (DownloadError reason : values()) {
if (reason.getCode() == code) {
return reason;
}
}
throw new IllegalArgumentException("unknown code: " + code);
}
/** Get machine-readable code. */
public int getCode() {
return code;
}
/** Get a human-readable string. */
public String getErrorString(Context context) {
return context.getString(resId);
}

View File

@ -16,15 +16,17 @@
package de.danoeh.antennapod.util;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewPropertyAnimator;
import android.widget.TextView;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.AnimatorListenerAdapter;
import com.nineoldandroids.view.ViewHelper;
import com.nineoldandroids.view.ViewPropertyAnimator;
import static com.nineoldandroids.view.ViewPropertyAnimator.animate;
import de.danoeh.antennapod.R;
@ -46,7 +48,7 @@ public class UndoBarController {
public UndoBarController(View undoBarView, UndoListener undoListener) {
mBarView = undoBarView;
mBarAnimator = mBarView.animate();
mBarAnimator = animate(mBarView);
mUndoListener = undoListener;
mMessageView = (TextView) mBarView.findViewById(R.id.undobar_message);
@ -73,7 +75,7 @@ public class UndoBarController {
mBarView.setVisibility(View.VISIBLE);
if (immediate) {
mBarView.setAlpha(1);
ViewHelper.setAlpha(mBarView, 1);
} else {
mBarAnimator.cancel();
mBarAnimator
@ -89,7 +91,7 @@ public class UndoBarController {
mHideHandler.removeCallbacks(mHideRunnable);
if (immediate) {
mBarView.setVisibility(View.GONE);
mBarView.setAlpha(0);
ViewHelper.setAlpha(mBarView, 0);
mUndoMessage = null;
mUndoToken = null;

View File

@ -2,18 +2,24 @@ package de.danoeh.antennapod.util.id3reader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;
import android.util.Log;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.feed.Chapter;
import de.danoeh.antennapod.feed.ID3Chapter;
import de.danoeh.antennapod.util.id3reader.model.FrameHeader;
import de.danoeh.antennapod.util.id3reader.model.TagHeader;
public class ChapterReader extends ID3Reader {
private static final String TAG = "ID3ChapterReader";
private static final String FRAME_ID_CHAPTER = "CHAP";
private static final String FRAME_ID_TITLE = "TIT2";
private static final String FRAME_ID_LINK = "WXXX";
private List<Chapter> chapters;
private ID3Chapter currentChapter;
@ -33,27 +39,45 @@ public class ChapterReader extends ID3Reader {
if (currentChapter != null) {
if (!hasId3Chapter(currentChapter)) {
chapters.add(currentChapter);
System.out.println("Found chapter: " + currentChapter);
if (AppConfig.DEBUG) Log.d(TAG, "Found chapter: " + currentChapter);
currentChapter = null;
}
}
String elementId = readISOString(input, Integer.MAX_VALUE);
StringBuffer elementId = new StringBuffer();
readISOString(elementId, input, Integer.MAX_VALUE);
char[] startTimeSource = readBytes(input, 4);
long startTime = ((int) startTimeSource[0] << 24)
| ((int) startTimeSource[1] << 16)
| ((int) startTimeSource[2] << 8) | startTimeSource[3];
currentChapter = new ID3Chapter(elementId, startTime);
currentChapter = new ID3Chapter(elementId.toString(), startTime);
skipBytes(input, 12);
return ID3Reader.ACTION_DONT_SKIP;
} else if (header.getId().equals(FRAME_ID_TITLE)) {
if (currentChapter != null && currentChapter.getTitle() == null) {
StringBuffer title = new StringBuffer();
readString(title, input, header.getSize());
currentChapter
.setTitle(readString(input, header.getSize()));
System.out.println("Found title: " + currentChapter.getTitle());
.setTitle(title.toString());
if (AppConfig.DEBUG) Log.d(TAG, "Found title: " + currentChapter.getTitle());
return ID3Reader.ACTION_DONT_SKIP;
}
}
} else if (header.getId().equals(FRAME_ID_LINK)) {
if (currentChapter != null) {
// skip description
int descriptionLength = readString(null, input, header.getSize());
StringBuffer link = new StringBuffer();
readISOString(link, input, header.getSize() - descriptionLength);
String decodedLink = URLDecoder.decode(link.toString(), "UTF-8");
currentChapter.setLink(decodedLink);
if (AppConfig.DEBUG) Log.d(TAG, "Found link: " + currentChapter.getLink());
return ID3Reader.ACTION_DONT_SKIP;
}
} else if (header.getId().equals("APIC")) {
Log.d(TAG, header.toString());
}
return super.onStartFrameHeader(header, input);
}

View File

@ -24,7 +24,11 @@ public class ID3Reader {
protected int readerPosition;
private static final byte ENCODING_UNICODE = 1;
private static final byte ENCODING_UTF16_WITH_BOM = 1;
private static final byte ENCODING_UTF16_WITHOUT_BOM = 2;
private static final byte ENCODING_UTF8 = 3;
private TagHeader tagHeader;
public ID3Reader() {
}
@ -34,7 +38,7 @@ public class ID3Reader {
int rc;
readerPosition = 0;
char[] tagHeaderSource = readBytes(input, HEADER_LENGTH);
TagHeader tagHeader = createTagHeader(tagHeaderSource);
tagHeader = createTagHeader(tagHeaderSource);
if (tagHeader == null) {
onNoTagHeaderFound();
} else {
@ -124,12 +128,12 @@ public class ID3Reader {
+ HEADER_LENGTH);
}
if (hasTag) {
String id = null;
id = new String(source, 0, ID3_LENGTH);
String id = new String(source, 0, ID3_LENGTH);
char version = (char) ((source[3] << 8) | source[4]);
byte flags = (byte) source[5];
int size = (source[6] << 24) | (source[7] << 16) | (source[8] << 8)
| source[9];
size = unsynchsafe(size);
return new TagHeader(id, size, version, flags);
} else {
return null;
@ -142,48 +146,89 @@ public class ID3Reader {
throw new ID3ReaderException("Length of header must be "
+ HEADER_LENGTH);
}
String id = null;
id = new String(source, 0, FRAME_ID_LENGTH);
int size = (((int) source[4]) << 24) | (((int) source[5]) << 16)
| (((int) source[6]) << 8) | source[7];
String id = new String(source, 0, FRAME_ID_LENGTH);
int size = (((int) source[4]) << 24) | (((int) source[5]) << 16)
| (((int) source[6]) << 8) | source[7];
if (tagHeader != null && tagHeader.getVersion() >= 0x0400) {
size = unsynchsafe(size);
}
char flags = (char) ((source[8] << 8) | source[9]);
return new FrameHeader(id, size, flags);
}
protected String readString(InputStream input, int max) throws IOException,
private int unsynchsafe(int in) {
int out = 0;
int mask = 0x7F000000;
while (mask != 0) {
out >>= 1;
out |= in & mask;
mask >>= 8;
}
return out;
}
protected int readString(StringBuffer buffer, InputStream input, int max) throws IOException,
ID3ReaderException {
if (max > 0) {
char[] encoding = readBytes(input, 1);
max--;
if (encoding[0] == ENCODING_UNICODE) {
return readUnicodeString(input, max);
} else {
return readISOString(input, max);
if (encoding[0] == ENCODING_UTF16_WITH_BOM || encoding[0] == ENCODING_UTF16_WITHOUT_BOM) {
return readUnicodeString(buffer, input, max, Charset.forName("UTF-16")) + 1; // take encoding byte into account
} else if (encoding[0] == ENCODING_UTF8) {
return readUnicodeString(buffer, input, max, Charset.forName("UTF-8")) + 1; // take encoding byte into account
} else {
return readISOString(buffer, input, max) + 1; // take encoding byte into account
}
} else {
return "";
if (buffer != null) {
buffer.append("");
}
return 0;
}
}
protected String readISOString(InputStream input, int max)
protected int readISOString(StringBuffer buffer, InputStream input, int max)
throws IOException, ID3ReaderException {
int bytesRead = 0;
StringBuilder builder = new StringBuilder();
char c;
while (++bytesRead <= max && (c = (char) input.read()) > 0) {
builder.append(c);
if (buffer != null) {
buffer.append(c);
}
}
return builder.toString();
return bytesRead;
}
private String readUnicodeString(InputStream input, int max)
private int readUnicodeString(StringBuffer strBuffer, InputStream input, int max, Charset charset)
throws IOException, ID3ReaderException {
byte[] buffer = new byte[max];
IOUtils.readFully(input, buffer);
Charset charset = Charset.forName("UTF-16");
return charset.newDecoder().decode(ByteBuffer.wrap(buffer)).toString();
int c, cZero = -1;
int i = 0;
for (; i < max; i++) {
c = input.read();
if (c == -1) {
break;
} else if (c == 0) {
if (cZero == 0) {
// termination character found
break;
} else {
cZero = 0;
}
} else {
buffer[i] = (byte) c;
cZero = -1;
}
}
if (strBuffer != null) {
strBuffer.append(charset.newDecoder().decode(ByteBuffer.wrap(buffer)).toString());
}
return i;
}
public int onStartTagHeader(TagHeader header) {

View File

@ -11,8 +11,7 @@ public class FrameHeader extends Header {
@Override
public String toString() {
return "FrameHeader [flags=" + Integer.toString(flags) + ", id=" + id + ", size=" + size
+ "]";
}
return String.format("FrameHeader [flags=%s, id=%s, size=%s]", Integer.toBinaryString(flags), id, Integer.toBinaryString(size));
}
}

View File

@ -44,8 +44,8 @@ import de.danoeh.antennapod.util.playback.Playable.PlayableUtils;
public abstract class PlaybackController {
private static final String TAG = "PlaybackController";
static final int DEFAULT_SEEK_DELTA = 30000;
public static final int INVALID_TIME = -1;
public static final int DEFAULT_SEEK_DELTA = 30000;
public static final int INVALID_TIME = -1;
private Activity activity;

View File

@ -5,5 +5,6 @@
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry combineaccessrules="false" kind="src" path="/AntennaPod"/>
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
<classpathentry kind="output" path="bin/classes"/>
</classpath>

View File

@ -54,7 +54,7 @@ public class FeedHandlerTest extends AndroidTestCase {
for (int i = 0; i < num_retries; i++) {
InputStream in = null;
OutputStream out = null;
BufferedOutputStream out = null;
try {
in = getInputStream(feed.getDownload_url());
assertNotNull(in);
@ -65,6 +65,7 @@ public class FeedHandlerTest extends AndroidTestCase {
while ((count = in.read(buffer)) != -1) {
out.write(buffer, 0, count);
}
out.flush();
successful = true;
} catch (IOException e) {
e.printStackTrace();

View File

@ -3,6 +3,7 @@ package de.danoeh.antennapod.test;
public class TestFeeds {
public static final String[] urls = {
"http://savoirsenmultimedia.ens.fr/podcast.php?id=30",
"http://bitlove.org/apollo40/ps3newsroom/feed",
"http://bitlove.org/beapirate/hauptstadtpiraten/feed",
"http://bitlove.org/benni/besondereumstaende/feed",